[
  {
    "path": ".gitignore",
    "content": "*.egg-info/\n*.pyc\n*coverage/\ndb.sqlite\ndist/\ndocs/_build/\napp_media/\napp_static/\n.coverage\n*.tox/\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: python\npython:\n  - \"2.7\"\ninstall: pip install -r test_requirements.txt --use-mirrors\nscript: python booking/tests/runtests.py\n"
  },
  {
    "path": "AUTHORS",
    "content": "Current or previous core committers\n\nDaniel Kaufhold\n\nContributors (in alphabetical order)\n\n* Tobias Lorenz\n* Your name could stand here :)\n"
  },
  {
    "path": "CHANGELOG.txt",
    "content": "=== (ongoing 0.7.X) To be released as 0.8 ===\n\n- Prepared app for Django 1.9 and Python 3.5\n- Fixed dependencies\n- Fixed compatibility of django.conf.urls.defaults import\n\n=== 0.7 ===\n\n- added property for full price of an item\n- lowered decimal places of price to 2\n\n=== 0.6  ===\n\n- Migrated to django-hvad\n\n=== 0.5 ===\n\n- updated to factory-boy > 2.0.0\n\n=== 0.4 ===\n\n- Added the BookingError model\n\n=== 0.3 ===\n\n- Added email to Booking admin list display fields\n- Added utils for get_booking and persist_booking\n\n=== 0.2 ===\n- Added BookingIDBackend and BookingIDAuthenticationForm\n- updated gender choices to Mr and Mrs\n- Added total, subtotal and currency field\n- Added time_period and time_unit field to Booking model\n\n== 0.1 ===\n- Initial commit\n"
  },
  {
    "path": "DESCRIPTION",
    "content": "A reusable Django app that manages bookings for various purposes.\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\nCopyright (c) 2013 Daniel Kaufhold \n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include AUTHORS\ninclude LICENSE\ninclude DESCRIPTION\ninclude CHANGELOG.txt\ninclude README.md\ngraft booking\nglobal-exclude *.orig *.pyc *.log *.swp\nprune booking/tests/coverage\nprune booking/.ropeproject\n"
  },
  {
    "path": "README.rst",
    "content": "Django Booking\n==============\n\nA reusable Django app that manages bookings for various purposes.\n\nInstallation\n------------\n\nTo get the latest stable release from PyPi\n\n.. code-block:: bash\n\n    $ pip install django-booking\n\nTo get the latest commit from GitHub\n\n.. code-block:: bash\n\n    $ pip install -e git+git://github.com/bitmazk/django-booking.git#egg=booking\n\nTODO: Describe further installation steps (edit / remove the examples below):\n\nAdd ``booking`` to your ``INSTALLED_APPS``\n\n.. code-block:: python\n\n    INSTALLED_APPS = (\n        ...,\n        'booking',\n    )\n\nAdd the ``booking`` URLs to your ``urls.py``\n\n.. code-block:: python\n\n    urlpatterns = patterns('',\n        ...\n        url(r'^booking/', include('booking.urls')),\n    )\n\nDon't forget to migrate your database\n\n.. code-block:: bash\n\n    ./manage.py migrate booking\n\n\nUsage\n-----\n\nIf you allow anonymous bookings, the session object is stored within the\nbooking model. Otherwise it will be connected to the User model.\n\nNOTE: If a session is destroyed, the connected booking model will also be\nremoved.\n\nIn order to allow login via email and booking ID, please add this to your\n``AUTHENTICATION_BACKENDS``::\n\n    AUTHENTICATION_BACKENDS = (\n        # your usual auth backends\n        'booking.auth_backends.BookingIDBackend',\n    )\n\nAt the moment you will have to write a new view that will render the\n``booking.forms.BookingIDAuthenticationForm``. If the form is valid, your\nview should call ``auth_login(request, form.get_user())``, similar to Django's\noriginal login view.\n\nSettings\n--------\n\nBOOKING_STATUS_CREATED\n++++++++++++++++++++++\n\nDefault: 'pending'\n\nSlug of the ``BookingStatus``, which should be added after booking creation.\n\nBOOKING_TIME_INTERVAL\n+++++++++++++++++++++\n\nDefault: ''\n\nThe default value for the ``time_unit`` attribute of the Booking. Set it in\ncase you need to specify that you want to book something e.g. X days or Y\nhours. Set it to the singular of that time unit:::\n\n   BOOKING_TIME_INTERVAL = 'day'\n\n\nError logging\n+++++++++++++\n\nIn case you want to add error logging especially for booking processes, we\nprovide a ``BookingError`` model, in which you can store:\n\n+-------------+--------------------------------------------------------------------------+\n| ``booking`` | (FK to Booking - required) The booking during this error occurred.       |\n+-------------+--------------------------------------------------------------------------+\n| ``message`` | (Char) The short error message, that you need to store.                  |\n+-------------+--------------------------------------------------------------------------+\n| ``details`` | (Text) A more in depth text about the error or any kind of additional    |\n|             | information, e.g. a traceback.                                           |\n+-------------+--------------------------------------------------------------------------+\n\n\nContribute\n----------\n\nIf you want to contribute to this project, please perform the following steps\n\n.. code-block:: bash\n\n    # Fork this repository\n    # Clone your fork\n    mkvirtualenv -p python2.7 django-booking\n    make develop\n\n    git co -b feature_branch master\n    # Implement your feature and tests\n    git add . && git commit\n    git push -u origin feature_branch\n    # Send us a pull request for your feature branch\n\nIn order to run the tests, simply execute ``tox``. This will install two new\nenvironments (for Django 1.8 and Django 1.9) and run the tests against both\nenvironments.\n"
  },
  {
    "path": "booking/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n__version__ = '0.7.2'\n"
  },
  {
    "path": "booking/admin.py",
    "content": "\"\"\"Admin classes for the booking app.\"\"\"\nfrom django.contrib import admin\n\nfrom hvad.admin import TranslatableAdmin\n\nfrom . import models\n\n\nclass BookingAdmin(admin.ModelAdmin):\n    list_display = [\n        'creation_date', 'booking_status', 'booking_id', 'user', 'email',\n        'session', 'date_from', 'date_until',\n    ]\n\n\nclass BookingItemAdmin(admin.ModelAdmin):\n    list_display = ['booking', 'booked_item', 'quantity', 'persons']\n\n\nadmin.site.register(models.Booking, BookingAdmin)\nadmin.site.register(models.BookingError)\nadmin.site.register(models.BookingItem, BookingItemAdmin)\nadmin.site.register(models.BookingStatus, TranslatableAdmin)\nadmin.site.register(models.ExtraPersonInfo)\n"
  },
  {
    "path": "booking/auth_backends.py",
    "content": "\"\"\"Custom authentication backends for the booking app.\"\"\"\nfrom django.contrib.auth.backends import ModelBackend\n\nfrom .models import Booking\n\n\nclass BookingIDBackend(ModelBackend):\n    \"\"\"\n    Custom authentication backend that allows login via email and booking ID.\n\n    \"\"\"\n    def authenticate(self, username=None, password=None, **kwargs):\n        try:\n            booking = Booking.objects.get(\n                booking_id=password, user__email=username)\n        except Booking.DoesNotExist:\n            return None\n        return booking.user\n"
  },
  {
    "path": "booking/forms.py",
    "content": "\"\"\"Forms for the ``booking`` app.\"\"\"\nfrom django import forms\nfrom django.conf import settings\nfrom django.contrib.auth import authenticate\nfrom django.contrib.auth.forms import AuthenticationForm\nfrom django.utils.translation import ugettext_lazy as _\n\nfrom .models import Booking, BookingStatus\n\n\nclass BookingForm(forms.ModelForm):\n    def __init__(self, session=None, user=None, *args, **kwargs):\n        self.user = user\n        self.session = session\n        super(BookingForm, self).__init__(*args, **kwargs)\n        # fields that should remain blank / not required\n        keep_blank = [\n            'phone', 'notes', 'street2', 'title', 'user', 'session',\n            'date_from', 'date_until', 'special_request', 'time_period',\n            'time_unit', 'email', 'currency', 'total']\n        # set all fields except the keep_blank ones to be required, since they\n        # need to be blank=True on the model itself to allow creating Booking\n        # instances without data\n        for name, field in self.fields.items():\n            if name not in keep_blank:\n                self.fields[name].required = True\n\n    def save(self, *args, **kwargs):\n        if not self.instance.pk:\n            self.instance.user = self.user\n            self.instance.session = self.session\n            status_object, created = BookingStatus.objects.get_or_create(\n                slug=getattr(settings, 'BOOKING_STATUS_CREATED', 'pending'))\n            self.instance.booking_status = status_object\n        return super(BookingForm, self).save(*args, **kwargs)\n\n    class Meta:\n        model = Booking\n        fields = ('gender', 'title', 'forename', 'surname', 'nationality',\n                  'street1', 'street2', 'city', 'zip_code', 'country', 'phone',\n                  'special_request', 'date_from', 'date_until')\n\n\nclass BookingIDAuthenticationForm(AuthenticationForm):\n    def __init__(self, *args, **kwargs):\n        super(BookingIDAuthenticationForm, self).__init__(*args, **kwargs)\n        self.fields['username'] = forms.CharField(\n            label=_(\"Email\"), max_length=256)\n        self.fields['password'] = forms.CharField(\n            label=_(\"Booking ID\"), max_length=100)\n\n    def clean_username(self):\n        \"\"\"Prevent case-sensitive erros in email/username.\"\"\"\n        return self.cleaned_data['username'].lower()\n\n    def clean(self):\n        email = self.cleaned_data.get('username')\n        booking_id = self.cleaned_data.get('password')\n\n        if email and booking_id:\n            self.user_cache = authenticate(username=email,\n                                           password=booking_id)\n            if self.user_cache is None:\n                raise forms.ValidationError(_(\n                    'We cannot find a valid booking ID for this email'\n                    ' address.')\n                )\n            elif not self.user_cache.is_active:\n                raise forms.ValidationError(self.error_messages['inactive'])\n        self.check_for_test_cookie()\n        return self.cleaned_data\n"
  },
  {
    "path": "booking/migrations/0001_initial.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.5 on 2016-04-18 15:40\nfrom __future__ import unicode_literals\n\nfrom django.conf import settings\nfrom django.db import migrations, models\nimport django.db.models.deletion\nimport django_countries.fields\nimport django_libs.models_mixins\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        ('sessions', '0001_initial'),\n        ('contenttypes', '0002_remove_content_type_name'),\n        migrations.swappable_dependency(settings.AUTH_USER_MODEL),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Booking',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('gender', models.CharField(blank=True, choices=[(b'mrs', 'Mrs'), (b'mr', 'Mr')], max_length=10, verbose_name='Gender')),\n                ('title', models.CharField(blank=True, choices=[(b'dr', 'Dr.'), (b'prof', 'Prof.')], max_length=10, verbose_name='Title')),\n                ('forename', models.CharField(blank=True, max_length=20, verbose_name='First name')),\n                ('surname', models.CharField(blank=True, max_length=20, verbose_name='Last name')),\n                ('nationality', django_countries.fields.CountryField(blank=True, max_length=2, verbose_name='Nationality')),\n                ('street1', models.CharField(blank=True, max_length=256, verbose_name='Street 1')),\n                ('street2', models.CharField(blank=True, max_length=256, verbose_name='Street 2')),\n                ('city', models.CharField(blank=True, max_length=256, verbose_name='City')),\n                ('zip_code', models.CharField(blank=True, max_length=256, verbose_name='ZIP/Postal code')),\n                ('country', django_countries.fields.CountryField(blank=True, max_length=2, verbose_name='Country')),\n                ('email', models.EmailField(blank=True, max_length=254, verbose_name='Email')),\n                ('phone', models.CharField(blank=True, max_length=256, verbose_name='Phone')),\n                ('special_request', models.TextField(blank=True, max_length=1024, verbose_name='Special request')),\n                ('date_from', models.DateTimeField(blank=True, null=True, verbose_name='From')),\n                ('date_until', models.DateTimeField(blank=True, null=True, verbose_name='Until')),\n                ('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation date')),\n                ('booking_id', models.CharField(blank=True, max_length=100, verbose_name='Booking ID')),\n                ('notes', models.TextField(blank=True, max_length=1024, verbose_name=b'Notes')),\n                ('time_period', models.PositiveIntegerField(blank=True, null=True, verbose_name='Time period')),\n                ('time_unit', models.CharField(blank=True, default=b'', max_length=64, verbose_name='Time unit')),\n                ('total', models.DecimalField(blank=True, decimal_places=2, max_digits=36, null=True, verbose_name='Total')),\n                ('currency', models.CharField(blank=True, max_length=128, verbose_name='Currency')),\n            ],\n            options={\n                'ordering': ['-creation_date'],\n            },\n        ),\n        migrations.CreateModel(\n            name='BookingError',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('message', models.CharField(blank=True, max_length=1000, verbose_name='Message')),\n                ('details', models.TextField(blank=True, max_length=4000, verbose_name='Details')),\n                ('date', models.DateTimeField(auto_now_add=True, verbose_name='Date')),\n                ('booking', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='booking.Booking', verbose_name='Booking')),\n            ],\n        ),\n        migrations.CreateModel(\n            name='BookingItem',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('quantity', models.PositiveIntegerField(default=1, verbose_name='Quantity')),\n                ('persons', models.PositiveIntegerField(blank=True, null=True, verbose_name='Persons')),\n                ('subtotal', models.DecimalField(blank=True, decimal_places=2, max_digits=36, null=True, verbose_name='Subtotal')),\n                ('object_id', models.PositiveIntegerField()),\n                ('booking', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='booking.Booking', verbose_name='Booking')),\n                ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),\n            ],\n            options={\n                'ordering': ['-booking__creation_date'],\n            },\n        ),\n        migrations.CreateModel(\n            name='BookingStatus',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('slug', models.SlugField(verbose_name='Slug')),\n            ],\n            options={\n                'abstract': False,\n            },\n            bases=(django_libs.models_mixins.TranslationModelMixin, models.Model),\n        ),\n        migrations.CreateModel(\n            name='BookingStatusTranslation',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(max_length=128, verbose_name='Name')),\n                ('language_code', models.CharField(db_index=True, max_length=15)),\n                ('master', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='booking.BookingStatus')),\n            ],\n            options={\n                'managed': True,\n                'abstract': False,\n                'db_table': 'booking_bookingstatus_translation',\n                'db_tablespace': '',\n                'default_permissions': (),\n            },\n        ),\n        migrations.CreateModel(\n            name='ExtraPersonInfo',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('forename', models.CharField(max_length=20, verbose_name='First name')),\n                ('surname', models.CharField(max_length=20, verbose_name='Last name')),\n                ('arrival', models.DateTimeField(blank=True, null=True, verbose_name='Arrival')),\n                ('message', models.TextField(blank=True, max_length=1024, verbose_name='Message')),\n                ('booking', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='booking.Booking', verbose_name='Booking')),\n            ],\n            options={\n                'ordering': ['-booking__creation_date'],\n            },\n        ),\n        migrations.AddField(\n            model_name='booking',\n            name='booking_status',\n            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='booking.BookingStatus', verbose_name=b'Booking status'),\n        ),\n        migrations.AddField(\n            model_name='booking',\n            name='session',\n            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessions.Session', verbose_name='Session'),\n        ),\n        migrations.AddField(\n            model_name='booking',\n            name='user',\n            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bookings', to=settings.AUTH_USER_MODEL, verbose_name='User'),\n        ),\n        migrations.AlterUniqueTogether(\n            name='bookingstatustranslation',\n            unique_together=set([('language_code', 'master')]),\n        ),\n    ]\n"
  },
  {
    "path": "booking/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "booking/models.py",
    "content": "\"\"\"Models for the ``booking`` app.\"\"\"\nfrom django.conf import settings\nfrom django.contrib.contenttypes.fields import GenericForeignKey\nfrom django.contrib.contenttypes.models import ContentType\nfrom django.db import models\nfrom django.utils.encoding import python_2_unicode_compatible\nfrom django.utils.translation import ugettext_lazy as _\n\nfrom django_libs.models_mixins import TranslationModelMixin\nfrom django_countries.fields import CountryField\nfrom hvad.models import TranslatableModel, TranslatedFields\n\n\nclass BookingStatus(TranslationModelMixin, TranslatableModel):\n    \"\"\"\n    Master data containing all booking status.\n    For translatable fields check ``BookingStatusTranslation``.\n\n    :slug: A unique slug identifier.\n\n    translated:\n    :name: The displayable name for the status.\n\n    \"\"\"\n    slug = models.SlugField(\n        verbose_name=_('Slug'),\n    )\n\n    translations = TranslatedFields(\n        name=models.CharField(\n            verbose_name=_('Name'),\n            max_length=128,\n        )\n    )\n\n\n@python_2_unicode_compatible\nclass Booking(models.Model):\n    \"\"\"\n    Model to contain information about a booking.\n\n    Note, that on the model itself, most of the attributes are blank=True.\n    We need this behaviour to be able to create empty temporary bookings.\n    You will have to take care of the field being required or not in a\n    ModelForm yourself.\n\n    :user (optional): Connection to Django's User model.\n    :session (optional): Stored session to identify anonymous users.\n    :gender (optional): Gender of the user.\n    :title (optional): Title of the user.\n    :forename (optional): First name of the user.\n    :surname (optional): Last name of the user.\n    :nationality (optional): The nationality of the user.\n    :street1 (optional): Street address of the user.\n    :street2 (optional): Additional street address of the user.\n    :city (optional): City of the user's address.\n    :zip_code (optional): ZIP of the user's address.\n    :country (optional): Country of the user's address.\n    :phone (optional): Phone number of the user.\n    :email: Email of the user.\n    :special_request (optional): A special request of the customer.\n    :date_from (optional): From when the booking is active.\n    :date_until (optional): Until when the booking is active.\n    :time_period (optional): How long the period from date_from will be.\n      e.g.: 10 (days).\n    :time_unit (optional): What unit of time the period is of. e.g. nights or\n      days.\n    :creation_date: Date of the booking.\n    :booking_id (optional): Custom unique booking identifier.\n    :booking_status: Current status of the booking.\n    :notes (optional): Staff notes.\n    :total (optional): Field for storing a total of all items.\n    :currency (optional): If total is uses, we usually also need a currency.\n\n    \"\"\"\n    user = models.ForeignKey(\n        'auth.User',\n        verbose_name=_('User'),\n        related_name='bookings',\n        blank=True, null=True,\n    )\n\n    session = models.ForeignKey(\n        'sessions.Session',\n        verbose_name=_('Session'),\n        blank=True, null=True,\n    )\n\n    gender = models.CharField(\n        max_length=10,\n        verbose_name=_('Gender'),\n        choices=(\n            ('mrs', _('Mrs')),\n            ('mr', _('Mr')),\n        ),\n        blank=True,\n    )\n\n    title = models.CharField(\n        max_length=10,\n        verbose_name=_('Title'),\n        choices=(\n            ('dr', _('Dr.')),\n            ('prof', _('Prof.')),\n        ),\n        blank=True,\n    )\n\n    forename = models.CharField(\n        verbose_name=_('First name'),\n        max_length=20,\n        blank=True,\n    )\n\n    surname = models.CharField(\n        verbose_name=_('Last name'),\n        max_length=20,\n        blank=True,\n    )\n\n    nationality = CountryField(\n        max_length=2,\n        verbose_name=_('Nationality'),\n        blank=True,\n    )\n\n    street1 = models.CharField(\n        verbose_name=_('Street 1'),\n        max_length=256,\n        blank=True,\n    )\n\n    street2 = models.CharField(\n        verbose_name=_('Street 2'),\n        max_length=256,\n        blank=True,\n    )\n\n    city = models.CharField(\n        verbose_name=_('City'),\n        max_length=256,\n        blank=True,\n    )\n\n    zip_code = models.CharField(\n        verbose_name=_('ZIP/Postal code'),\n        max_length=256,\n        blank=True,\n    )\n\n    country = CountryField(\n        max_length=2,\n        verbose_name=_('Country'),\n        blank=True,\n    )\n\n    email = models.EmailField(\n        verbose_name=_('Email'),\n        blank=True,\n    )\n\n    phone = models.CharField(\n        verbose_name=_('Phone'),\n        max_length=256,\n        blank=True,\n    )\n\n    special_request = models.TextField(\n        max_length=1024,\n        verbose_name=_('Special request'),\n        blank=True,\n    )\n\n    date_from = models.DateTimeField(\n        verbose_name=_('From'),\n        blank=True, null=True,\n    )\n\n    date_until = models.DateTimeField(\n        verbose_name=_('Until'),\n        blank=True, null=True,\n    )\n\n    creation_date = models.DateTimeField(\n        verbose_name=_('Creation date'),\n        auto_now_add=True,\n    )\n\n    booking_id = models.CharField(\n        max_length=100,\n        verbose_name=_('Booking ID'),\n        blank=True,\n    )\n\n    booking_status = models.ForeignKey(\n        'booking.BookingStatus',\n        verbose_name=('Booking status'),\n        blank=True, null=True,\n    )\n\n    notes = models.TextField(\n        max_length=1024,\n        verbose_name=('Notes'),\n        blank=True,\n    )\n\n    time_period = models.PositiveIntegerField(\n        verbose_name=_('Time period'),\n        blank=True, null=True,\n    )\n\n    time_unit = models.CharField(\n        verbose_name=_('Time unit'),\n        default=getattr(settings, 'BOOKING_TIME_INTERVAL', ''),\n        max_length=64,\n        blank=True,\n    )\n\n    total = models.DecimalField(\n        max_digits=36,\n        decimal_places=2,\n        verbose_name=_('Total'),\n        blank=True, null=True,\n    )\n\n    currency = models.CharField(\n        verbose_name=_('Currency'),\n        max_length=128,\n        blank=True,\n    )\n\n    class Meta:\n        ordering = ['-creation_date']\n\n    def __str__(self):\n        return '#{} ({})'.format(self.booking_id or self.pk,\n                                 self.creation_date)\n\n\n@python_2_unicode_compatible\nclass BookingError(models.Model):\n    \"\"\"\n    Holds information about an error during a booking process.\n\n    This can be particularly useful, when many of the processes are automated\n    or reliant on a third party app or API. You then can store the returned\n    values directly into this model and have easy access and reference to the\n    actual booking.\n\n    :booking: The booking during this error occurred.\n    :message: The short error message, that you need to store.\n    :details: A more in depth text about the error or any kind of additional\n      information, e.g. a traceback.\n    :date: The time and date this error occured.\n\n    \"\"\"\n    booking = models.ForeignKey(\n        Booking,\n        verbose_name=_('Booking'),\n    )\n    message = models.CharField(\n        verbose_name=_('Message'),\n        max_length=1000,\n        blank=True,\n    )\n    details = models.TextField(\n        verbose_name=_('Details'),\n        max_length=4000,\n        blank=True,\n    )\n\n    date = models.DateTimeField(\n        verbose_name=_('Date'),\n        auto_now_add=True,\n    )\n\n    def __str__(self):\n        return u'[{0}] {1} - {2}'.format(self.date, self.booking.booking_id,\n                                         self.message)\n\n\n@python_2_unicode_compatible\nclass BookingItem(models.Model):\n    \"\"\"\n    Model to connect a booking with a related object.\n\n    :quantity: Quantity of booked items.\n    :persons (optional): Quantity of persons, who are involved in this booking.\n    :subtotal (optional): Field for storing the price of each individual item.\n    :booked_item: Connection to related booked item.\n    :booking: Connection to related booking.\n\n    properties:\n    :price: Returns the full price for subtotal * quantity.\n\n    \"\"\"\n    quantity = models.PositiveIntegerField(\n        default=1,\n        verbose_name=_('Quantity'),\n    )\n\n    persons = models.PositiveIntegerField(\n        verbose_name=_('Persons'),\n        blank=True, null=True,\n    )\n\n    subtotal = models.DecimalField(\n        max_digits=36,\n        decimal_places=2,\n        verbose_name=_('Subtotal'),\n        blank=True, null=True,\n    )\n\n    # GFK 'booked_item'\n    content_type = models.ForeignKey(ContentType)\n    object_id = models.PositiveIntegerField()\n    booked_item = GenericForeignKey('content_type', 'object_id')\n\n    booking = models.ForeignKey(\n        'booking.Booking',\n        verbose_name=_('Booking'),\n    )\n\n    class Meta:\n        ordering = ['-booking__creation_date']\n\n    def __str__(self):\n        return u'{} ({})'.format(self.booking, self.booked_item)\n\n    @property\n    def price(self):\n        return self.quantity * self.subtotal\n\n\n@python_2_unicode_compatible\nclass ExtraPersonInfo(models.Model):\n    \"\"\"\n    Model to add extra information of persons/guests to a booking.\n\n    :forename: First name of the user.\n    :surname: Last name of the user.\n    :arrival: Arrival date of the guest.\n    :booking: Connection to related booking.\n    :message: An additional message regarding this person.\n\n    \"\"\"\n    forename = models.CharField(\n        verbose_name=_('First name'),\n        max_length=20,\n    )\n\n    surname = models.CharField(\n        verbose_name=_('Last name'),\n        max_length=20,\n    )\n\n    arrival = models.DateTimeField(\n        verbose_name=_('Arrival'),\n        blank=True, null=True,\n    )\n\n    booking = models.ForeignKey(\n        'booking.Booking',\n        verbose_name=_('Booking'),\n    )\n\n    message = models.TextField(\n        max_length=1024,\n        verbose_name=_('Message'),\n        blank=True,\n    )\n\n    class Meta:\n        ordering = ['-booking__creation_date']\n\n    def __str__(self):\n        return u'{} {} ({})'.format(self.forename, self.surname, self.booking)\n"
  },
  {
    "path": "booking/south_migrations/0001_initial.py",
    "content": "# flake8: noqa\n# -*- coding: utf-8 -*-\nimport datetime\nfrom south.db import db\nfrom south.v2 import SchemaMigration\nfrom django.db import models\n\n\nclass Migration(SchemaMigration):\n\n    def forwards(self, orm):\n        # Adding model 'BookingStatus'\n        db.create_table(u'booking_bookingstatus', (\n            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),\n            ('slug', self.gf('django.db.models.fields.SlugField')(max_length=50)),\n        ))\n        db.send_create_signal(u'booking', ['BookingStatus'])\n\n        # Adding model 'BookingStatusTranslation'\n        db.create_table(u'booking_bookingstatustranslation', (\n            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),\n            ('name', self.gf('django.db.models.fields.CharField')(max_length=128)),\n            ('language', self.gf('django.db.models.fields.CharField')(max_length=16)),\n            ('status', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['booking.BookingStatus'])),\n        ))\n        db.send_create_signal(u'booking', ['BookingStatusTranslation'])\n\n        # Adding model 'Booking'\n        db.create_table(u'booking_booking', (\n            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),\n            ('user', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='bookings', null=True, to=orm['auth.User'])),\n            ('session', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['sessions.Session'], null=True, blank=True)),\n            ('gender', self.gf('django.db.models.fields.CharField')(max_length=10)),\n            ('title', self.gf('django.db.models.fields.CharField')(max_length=10, blank=True)),\n            ('forename', self.gf('django.db.models.fields.CharField')(max_length=20)),\n            ('surname', self.gf('django.db.models.fields.CharField')(max_length=20)),\n            ('nationality', self.gf('django.db.models.fields.CharField')(max_length=2)),\n            ('street1', self.gf('django.db.models.fields.CharField')(max_length=256)),\n            ('street2', self.gf('django.db.models.fields.CharField')(max_length=256, blank=True)),\n            ('city', self.gf('django.db.models.fields.CharField')(max_length=256)),\n            ('zip_code', self.gf('django.db.models.fields.CharField')(max_length=256)),\n            ('country', self.gf('django.db.models.fields.CharField')(max_length=2)),\n            ('email', self.gf('django.db.models.fields.EmailField')(max_length=75)),\n            ('phone', self.gf('django.db.models.fields.CharField')(max_length=256, blank=True)),\n            ('special_request', self.gf('django.db.models.fields.TextField')(max_length=1024, blank=True)),\n            ('date_from', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),\n            ('date_until', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),\n            ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),\n            ('booking_id', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),\n            ('booking_status', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['booking.BookingStatus'])),\n            ('notes', self.gf('django.db.models.fields.TextField')(max_length=1024, blank=True)),\n        ))\n        db.send_create_signal(u'booking', ['Booking'])\n\n        # Adding model 'BookingItem'\n        db.create_table(u'booking_bookingitem', (\n            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),\n            ('quantity', self.gf('django.db.models.fields.PositiveIntegerField')(default=1)),\n            ('persons', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)),\n            ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])),\n            ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()),\n            ('booking', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['booking.Booking'])),\n        ))\n        db.send_create_signal(u'booking', ['BookingItem'])\n\n        # Adding model 'ExtraPersonInfo'\n        db.create_table(u'booking_extrapersoninfo', (\n            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),\n            ('forename', self.gf('django.db.models.fields.CharField')(max_length=20)),\n            ('surname', self.gf('django.db.models.fields.CharField')(max_length=20)),\n            ('arrival', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),\n            ('booking', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['booking.Booking'])),\n            ('message', self.gf('django.db.models.fields.TextField')(max_length=1024, blank=True)),\n        ))\n        db.send_create_signal(u'booking', ['ExtraPersonInfo'])\n\n\n    def backwards(self, orm):\n        # Deleting model 'BookingStatus'\n        db.delete_table(u'booking_bookingstatus')\n\n        # Deleting model 'BookingStatusTranslation'\n        db.delete_table(u'booking_bookingstatustranslation')\n\n        # Deleting model 'Booking'\n        db.delete_table(u'booking_booking')\n\n        # Deleting model 'BookingItem'\n        db.delete_table(u'booking_bookingitem')\n\n        # Deleting model 'ExtraPersonInfo'\n        db.delete_table(u'booking_extrapersoninfo')\n\n\n    models = {\n        u'auth.group': {\n            'Meta': {'object_name': 'Group'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\n            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'})\n        },\n        u'auth.permission': {\n            'Meta': {'ordering': \"(u'content_type__app_label', u'content_type__model', u'codename')\", 'unique_together': \"((u'content_type', u'codename'),)\", 'object_name': 'Permission'},\n            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\n        },\n        u'auth.user': {\n            'Meta': {'object_name': 'User'},\n            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Group']\", 'symmetrical': 'False', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),\n            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'}),\n            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\n        },\n        u'booking.booking': {\n            'Meta': {'ordering': \"['-creation_date']\", 'object_name': 'Booking'},\n            'booking_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\n            'booking_status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\"}),\n            'city': ('django.db.models.fields.CharField', [], {'max_length': '256'}),\n            'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}),\n            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'date_from': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'date_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            'gender': ('django.db.models.fields.CharField', [], {'max_length': '10'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),\n            'notes': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'phone': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'session': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['sessions.Session']\", 'null': 'True', 'blank': 'True'}),\n            'special_request': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'street1': ('django.db.models.fields.CharField', [], {'max_length': '256'}),\n            'street2': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            'title': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': \"'bookings'\", 'null': 'True', 'to': u\"orm['auth.User']\"}),\n            'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '256'})\n        },\n        u'booking.bookingitem': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'BookingItem'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\n            'persons': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'})\n        },\n        u'booking.bookingstatus': {\n            'Meta': {'object_name': 'BookingStatus'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'})\n        },\n        u'booking.bookingstatustranslation': {\n            'Meta': {'object_name': 'BookingStatusTranslation'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language': ('django.db.models.fields.CharField', [], {'max_length': '16'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\"})\n        },\n        u'booking.extrapersoninfo': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'ExtraPersonInfo'},\n            'arrival': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'})\n        },\n        u'contenttypes.contenttype': {\n            'Meta': {'ordering': \"('name',)\", 'unique_together': \"(('app_label', 'model'),)\", 'object_name': 'ContentType', 'db_table': \"'django_content_type'\"},\n            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\n        },\n        u'sessions.session': {\n            'Meta': {'object_name': 'Session', 'db_table': \"'django_session'\"},\n            'expire_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),\n            'session_data': ('django.db.models.fields.TextField', [], {}),\n            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'})\n        }\n    }\n\n    complete_apps = ['booking']\n"
  },
  {
    "path": "booking/south_migrations/0002_auto__chg_field_booking_booking_status.py",
    "content": "# flake8: noqa\n# -*- coding: utf-8 -*-\nimport datetime\nfrom south.db import db\nfrom south.v2 import SchemaMigration\nfrom django.db import models\n\n\nclass Migration(SchemaMigration):\n\n    def forwards(self, orm):\n\n        # Changing field 'Booking.booking_status'\n        db.alter_column(u'booking_booking', 'booking_status_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['booking.BookingStatus'], null=True))\n\n    def backwards(self, orm):\n\n        # User chose to not deal with backwards NULL issues for 'Booking.booking_status'\n        raise RuntimeError(\"Cannot reverse this migration. 'Booking.booking_status' and its values cannot be restored.\")\n\n        # The following code is provided here to aid in writing a correct migration\n        # Changing field 'Booking.booking_status'\n        db.alter_column(u'booking_booking', 'booking_status_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['booking.BookingStatus']))\n\n    models = {\n        u'auth.group': {\n            'Meta': {'object_name': 'Group'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\n            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'})\n        },\n        u'auth.permission': {\n            'Meta': {'ordering': \"(u'content_type__app_label', u'content_type__model', u'codename')\", 'unique_together': \"((u'content_type', u'codename'),)\", 'object_name': 'Permission'},\n            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\n        },\n        u'auth.user': {\n            'Meta': {'object_name': 'User'},\n            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Group']\", 'symmetrical': 'False', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),\n            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'}),\n            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\n        },\n        u'booking.booking': {\n            'Meta': {'ordering': \"['-creation_date']\", 'object_name': 'Booking'},\n            'booking_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\n            'booking_status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\", 'null': 'True', 'blank': 'True'}),\n            'city': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'date_from': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'date_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'gender': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'notes': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'phone': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'session': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['sessions.Session']\", 'null': 'True', 'blank': 'True'}),\n            'special_request': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'street1': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'street2': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'title': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': \"'bookings'\", 'null': 'True', 'to': u\"orm['auth.User']\"}),\n            'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'})\n        },\n        u'booking.bookingitem': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'BookingItem'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\n            'persons': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'})\n        },\n        u'booking.bookingstatus': {\n            'Meta': {'object_name': 'BookingStatus'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'})\n        },\n        u'booking.bookingstatustranslation': {\n            'Meta': {'object_name': 'BookingStatusTranslation'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language': ('django.db.models.fields.CharField', [], {'max_length': '16'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\"})\n        },\n        u'booking.extrapersoninfo': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'ExtraPersonInfo'},\n            'arrival': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'})\n        },\n        u'contenttypes.contenttype': {\n            'Meta': {'ordering': \"('name',)\", 'unique_together': \"(('app_label', 'model'),)\", 'object_name': 'ContentType', 'db_table': \"'django_content_type'\"},\n            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\n        },\n        u'sessions.session': {\n            'Meta': {'object_name': 'Session', 'db_table': \"'django_session'\"},\n            'expire_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),\n            'session_data': ('django.db.models.fields.TextField', [], {}),\n            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'})\n        }\n    }\n\n    complete_apps = ['booking']\n"
  },
  {
    "path": "booking/south_migrations/0003_auto__add_field_booking_time_period__add_field_booking_time_unit.py",
    "content": "# flake8: noqa\n# -*- coding: utf-8 -*-\nimport datetime\nfrom south.db import db\nfrom south.v2 import SchemaMigration\nfrom django.db import models\n\n\nclass Migration(SchemaMigration):\n\n    def forwards(self, orm):\n        # Adding field 'Booking.time_period'\n        db.add_column(u'booking_booking', 'time_period',\n                      self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True),\n                      keep_default=False)\n\n        # Adding field 'Booking.time_unit'\n        db.add_column(u'booking_booking', 'time_unit',\n                      self.gf('django.db.models.fields.CharField')(default='', max_length=64, blank=True),\n                      keep_default=False)\n\n\n    def backwards(self, orm):\n        # Deleting field 'Booking.time_period'\n        db.delete_column(u'booking_booking', 'time_period')\n\n        # Deleting field 'Booking.time_unit'\n        db.delete_column(u'booking_booking', 'time_unit')\n\n\n    models = {\n        u'auth.group': {\n            'Meta': {'object_name': 'Group'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\n            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'})\n        },\n        u'auth.permission': {\n            'Meta': {'ordering': \"(u'content_type__app_label', u'content_type__model', u'codename')\", 'unique_together': \"((u'content_type', u'codename'),)\", 'object_name': 'Permission'},\n            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\n        },\n        u'auth.user': {\n            'Meta': {'object_name': 'User'},\n            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Group']\", 'symmetrical': 'False', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),\n            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'}),\n            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\n        },\n        u'booking.booking': {\n            'Meta': {'ordering': \"['-creation_date']\", 'object_name': 'Booking'},\n            'booking_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\n            'booking_status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\", 'null': 'True', 'blank': 'True'}),\n            'city': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'date_from': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'date_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'gender': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'notes': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'phone': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'session': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['sessions.Session']\", 'null': 'True', 'blank': 'True'}),\n            'special_request': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'street1': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'street2': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'time_period': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'time_unit': ('django.db.models.fields.CharField', [], {'default': \"''\", 'max_length': '64', 'blank': 'True'}),\n            'title': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': \"'bookings'\", 'null': 'True', 'to': u\"orm['auth.User']\"}),\n            'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'})\n        },\n        u'booking.bookingitem': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'BookingItem'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\n            'persons': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'})\n        },\n        u'booking.bookingstatus': {\n            'Meta': {'object_name': 'BookingStatus'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'})\n        },\n        u'booking.bookingstatustranslation': {\n            'Meta': {'object_name': 'BookingStatusTranslation'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language': ('django.db.models.fields.CharField', [], {'max_length': '16'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\"})\n        },\n        u'booking.extrapersoninfo': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'ExtraPersonInfo'},\n            'arrival': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'})\n        },\n        u'contenttypes.contenttype': {\n            'Meta': {'ordering': \"('name',)\", 'unique_together': \"(('app_label', 'model'),)\", 'object_name': 'ContentType', 'db_table': \"'django_content_type'\"},\n            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\n        },\n        u'sessions.session': {\n            'Meta': {'object_name': 'Session', 'db_table': \"'django_session'\"},\n            'expire_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),\n            'session_data': ('django.db.models.fields.TextField', [], {}),\n            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'})\n        }\n    }\n\n    complete_apps = ['booking']\n"
  },
  {
    "path": "booking/south_migrations/0004_auto__add_field_bookingitem_subtotal__add_field_booking_total__add_fie.py",
    "content": "# flake8: noqa\n# -*- coding: utf-8 -*-\nimport datetime\nfrom south.db import db\nfrom south.v2 import SchemaMigration\nfrom django.db import models\n\n\nclass Migration(SchemaMigration):\n\n    def forwards(self, orm):\n        # Adding field 'BookingItem.subtotal'\n        db.add_column(u'booking_bookingitem', 'subtotal',\n                      self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=36, decimal_places=28, blank=True),\n                      keep_default=False)\n\n        # Adding field 'Booking.total'\n        db.add_column(u'booking_booking', 'total',\n                      self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=36, decimal_places=28, blank=True),\n                      keep_default=False)\n\n        # Adding field 'Booking.currency'\n        db.add_column(u'booking_booking', 'currency',\n                      self.gf('django.db.models.fields.CharField')(default='', max_length=128, blank=True),\n                      keep_default=False)\n\n\n    def backwards(self, orm):\n        # Deleting field 'BookingItem.subtotal'\n        db.delete_column(u'booking_bookingitem', 'subtotal')\n\n        # Deleting field 'Booking.total'\n        db.delete_column(u'booking_booking', 'total')\n\n        # Deleting field 'Booking.currency'\n        db.delete_column(u'booking_booking', 'currency')\n\n\n    models = {\n        u'auth.group': {\n            'Meta': {'object_name': 'Group'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\n            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'})\n        },\n        u'auth.permission': {\n            'Meta': {'ordering': \"(u'content_type__app_label', u'content_type__model', u'codename')\", 'unique_together': \"((u'content_type', u'codename'),)\", 'object_name': 'Permission'},\n            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\n        },\n        u'auth.user': {\n            'Meta': {'object_name': 'User'},\n            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Group']\", 'symmetrical': 'False', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),\n            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'}),\n            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\n        },\n        u'booking.booking': {\n            'Meta': {'ordering': \"['-creation_date']\", 'object_name': 'Booking'},\n            'booking_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\n            'booking_status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\", 'null': 'True', 'blank': 'True'}),\n            'city': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'currency': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),\n            'date_from': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'date_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'gender': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'notes': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'phone': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'session': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['sessions.Session']\", 'null': 'True', 'blank': 'True'}),\n            'special_request': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'street1': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'street2': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'time_period': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'time_unit': ('django.db.models.fields.CharField', [], {'default': \"''\", 'max_length': '64', 'blank': 'True'}),\n            'title': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            'total': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'}),\n            'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': \"'bookings'\", 'null': 'True', 'to': u\"orm['auth.User']\"}),\n            'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'})\n        },\n        u'booking.bookingitem': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'BookingItem'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\n            'persons': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),\n            'subtotal': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'})\n        },\n        u'booking.bookingstatus': {\n            'Meta': {'object_name': 'BookingStatus'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'})\n        },\n        u'booking.bookingstatustranslation': {\n            'Meta': {'object_name': 'BookingStatusTranslation'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language': ('django.db.models.fields.CharField', [], {'max_length': '16'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\"})\n        },\n        u'booking.extrapersoninfo': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'ExtraPersonInfo'},\n            'arrival': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'})\n        },\n        u'contenttypes.contenttype': {\n            'Meta': {'ordering': \"('name',)\", 'unique_together': \"(('app_label', 'model'),)\", 'object_name': 'ContentType', 'db_table': \"'django_content_type'\"},\n            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\n        },\n        u'sessions.session': {\n            'Meta': {'object_name': 'Session', 'db_table': \"'django_session'\"},\n            'expire_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),\n            'session_data': ('django.db.models.fields.TextField', [], {}),\n            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'})\n        }\n    }\n\n    complete_apps = ['booking']\n"
  },
  {
    "path": "booking/south_migrations/0005_auto__add_bookingerror.py",
    "content": "# flake8: noqa\n# -*- coding: utf-8 -*-\nimport datetime\nfrom south.db import db\nfrom south.v2 import SchemaMigration\nfrom django.db import models\n\n\nclass Migration(SchemaMigration):\n\n    def forwards(self, orm):\n        # Adding model 'BookingError'\n        db.create_table(u'booking_bookingerror', (\n            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),\n            ('booking', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['booking.Booking'])),\n            ('message', self.gf('django.db.models.fields.CharField')(max_length=1000, blank=True)),\n            ('details', self.gf('django.db.models.fields.TextField')(max_length=4000, blank=True)),\n            ('date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),\n        ))\n        db.send_create_signal(u'booking', ['BookingError'])\n\n\n    def backwards(self, orm):\n        # Deleting model 'BookingError'\n        db.delete_table(u'booking_bookingerror')\n\n\n    models = {\n        u'auth.group': {\n            'Meta': {'object_name': 'Group'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\n            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'})\n        },\n        u'auth.permission': {\n            'Meta': {'ordering': \"(u'content_type__app_label', u'content_type__model', u'codename')\", 'unique_together': \"((u'content_type', u'codename'),)\", 'object_name': 'Permission'},\n            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\n        },\n        u'auth.user': {\n            'Meta': {'object_name': 'User'},\n            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Group']\", 'symmetrical': 'False', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),\n            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'}),\n            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\n        },\n        u'booking.booking': {\n            'Meta': {'ordering': \"['-creation_date']\", 'object_name': 'Booking'},\n            'booking_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\n            'booking_status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\", 'null': 'True', 'blank': 'True'}),\n            'city': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'currency': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),\n            'date_from': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'date_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'gender': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'notes': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'phone': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'session': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['sessions.Session']\", 'null': 'True', 'blank': 'True'}),\n            'special_request': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'street1': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'street2': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'time_period': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'time_unit': ('django.db.models.fields.CharField', [], {'default': \"''\", 'max_length': '64', 'blank': 'True'}),\n            'title': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            'total': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'}),\n            'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': \"'bookings'\", 'null': 'True', 'to': u\"orm['auth.User']\"}),\n            'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'})\n        },\n        u'booking.bookingerror': {\n            'Meta': {'object_name': 'BookingError'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'details': ('django.db.models.fields.TextField', [], {'max_length': '4000', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'})\n        },\n        u'booking.bookingitem': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'BookingItem'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\n            'persons': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),\n            'subtotal': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'})\n        },\n        u'booking.bookingstatus': {\n            'Meta': {'object_name': 'BookingStatus'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'})\n        },\n        u'booking.bookingstatustranslation': {\n            'Meta': {'object_name': 'BookingStatusTranslation'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language': ('django.db.models.fields.CharField', [], {'max_length': '16'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\"})\n        },\n        u'booking.extrapersoninfo': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'ExtraPersonInfo'},\n            'arrival': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'})\n        },\n        u'contenttypes.contenttype': {\n            'Meta': {'ordering': \"('name',)\", 'unique_together': \"(('app_label', 'model'),)\", 'object_name': 'ContentType', 'db_table': \"'django_content_type'\"},\n            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\n        },\n        u'sessions.session': {\n            'Meta': {'object_name': 'Session', 'db_table': \"'django_session'\"},\n            'expire_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),\n            'session_data': ('django.db.models.fields.TextField', [], {}),\n            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'})\n        }\n    }\n\n    complete_apps = ['booking']\n"
  },
  {
    "path": "booking/south_migrations/0006_rename_bookingstatustranslation.py",
    "content": "# flake8: noqa\n# -*- coding: utf-8 -*-\nimport datetime\nfrom south.db import db\nfrom south.v2 import SchemaMigration\nfrom django.db import models\n\n\nclass Migration(SchemaMigration):\n\n    def forwards(self, orm):\n        db.rename_table(u'booking_bookingstatustranslation', u'booking_bookingstatustranslationrenamed')\n\n    def backwards(self, orm):\n        db.rename_table(u'booking_bookingstatustranslationrenamed', u'booking_bookingstatustranslation')\n\n    models = {\n        u'auth.group': {\n            'Meta': {'object_name': 'Group'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\n            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'})\n        },\n        u'auth.permission': {\n            'Meta': {'ordering': \"(u'content_type__app_label', u'content_type__model', u'codename')\", 'unique_together': \"((u'content_type', u'codename'),)\", 'object_name': 'Permission'},\n            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\n        },\n        u'auth.user': {\n            'Meta': {'object_name': 'User'},\n            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Group']\", 'symmetrical': 'False', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),\n            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'}),\n            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\n        },\n        u'booking.booking': {\n            'Meta': {'ordering': \"['-creation_date']\", 'object_name': 'Booking'},\n            'booking_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\n            'booking_status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\", 'null': 'True', 'blank': 'True'}),\n            'city': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'currency': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),\n            'date_from': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'date_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'gender': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'notes': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'phone': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'session': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['sessions.Session']\", 'null': 'True', 'blank': 'True'}),\n            'special_request': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'street1': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'street2': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'time_period': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'time_unit': ('django.db.models.fields.CharField', [], {'default': \"''\", 'max_length': '64', 'blank': 'True'}),\n            'title': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            'total': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'}),\n            'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': \"'bookings'\", 'null': 'True', 'to': u\"orm['auth.User']\"}),\n            'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'})\n        },\n        u'booking.bookingerror': {\n            'Meta': {'object_name': 'BookingError'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'details': ('django.db.models.fields.TextField', [], {'max_length': '4000', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'})\n        },\n        u'booking.bookingitem': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'BookingItem'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\n            'persons': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),\n            'subtotal': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'})\n        },\n        u'booking.bookingstatus': {\n            'Meta': {'object_name': 'BookingStatus'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'})\n        },\n        u'booking.bookingstatustranslationrenamed': {\n            'Meta': {'object_name': 'BookingStatusTranslationRenamed'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language': ('django.db.models.fields.CharField', [], {'max_length': '16'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\"})\n        },\n        u'booking.extrapersoninfo': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'ExtraPersonInfo'},\n            'arrival': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'})\n        },\n        u'contenttypes.contenttype': {\n            'Meta': {'ordering': \"('name',)\", 'unique_together': \"(('app_label', 'model'),)\", 'object_name': 'ContentType', 'db_table': \"'django_content_type'\"},\n            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\n        },\n        u'sessions.session': {\n            'Meta': {'object_name': 'Session', 'db_table': \"'django_session'\"},\n            'expire_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),\n            'session_data': ('django.db.models.fields.TextField', [], {}),\n            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'})\n        }\n    }\n\n    complete_apps = ['booking']\n"
  },
  {
    "path": "booking/south_migrations/0007_auto__add_bookingstatustranslation__add_unique_bookingstatustranslatio.py",
    "content": "# flake8: noqa\n# -*- coding: utf-8 -*-\nimport datetime\nfrom south.db import db\nfrom south.v2 import SchemaMigration\nfrom django.db import models\n\n\nclass Migration(SchemaMigration):\n\n    def forwards(self, orm):\n        # Adding model 'BookingStatusTranslation'\n        db.create_table(u'booking_bookingstatus_translation', (\n            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),\n            ('name', self.gf('django.db.models.fields.CharField')(max_length=128)),\n            ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),\n            ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['booking.BookingStatus'])),\n        ))\n        db.send_create_signal(u'booking', ['BookingStatusTranslation'])\n\n        # Adding unique constraint on 'BookingStatusTranslation', fields ['language_code', 'master']\n        db.create_unique(u'booking_bookingstatus_translation', ['language_code', 'master_id'])\n\n\n    def backwards(self, orm):\n        # Removing unique constraint on 'BookingStatusTranslation', fields ['language_code', 'master']\n        db.delete_unique(u'booking_bookingstatus_translation', ['language_code', 'master_id'])\n\n        # Deleting model 'BookingStatusTranslation'\n        db.delete_table(u'booking_bookingstatus_translation')\n\n\n    models = {\n        u'auth.group': {\n            'Meta': {'object_name': 'Group'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\n            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'})\n        },\n        u'auth.permission': {\n            'Meta': {'ordering': \"(u'content_type__app_label', u'content_type__model', u'codename')\", 'unique_together': \"((u'content_type', u'codename'),)\", 'object_name': 'Permission'},\n            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\n        },\n        u'auth.user': {\n            'Meta': {'object_name': 'User'},\n            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Group']\", 'symmetrical': 'False', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),\n            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'}),\n            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\n        },\n        u'booking.booking': {\n            'Meta': {'ordering': \"['-creation_date']\", 'object_name': 'Booking'},\n            'booking_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\n            'booking_status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\", 'null': 'True', 'blank': 'True'}),\n            'city': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'currency': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),\n            'date_from': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'date_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'gender': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'notes': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'phone': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'session': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['sessions.Session']\", 'null': 'True', 'blank': 'True'}),\n            'special_request': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'street1': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'street2': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'time_period': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'time_unit': ('django.db.models.fields.CharField', [], {'default': \"''\", 'max_length': '64', 'blank': 'True'}),\n            'title': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            'total': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'}),\n            'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': \"'bookings'\", 'null': 'True', 'to': u\"orm['auth.User']\"}),\n            'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'})\n        },\n        u'booking.bookingerror': {\n            'Meta': {'object_name': 'BookingError'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'details': ('django.db.models.fields.TextField', [], {'max_length': '4000', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'})\n        },\n        u'booking.bookingitem': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'BookingItem'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\n            'persons': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),\n            'subtotal': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'})\n        },\n        u'booking.bookingstatus': {\n            'Meta': {'object_name': 'BookingStatus'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'})\n        },\n        u'booking.bookingstatustranslation': {\n            'Meta': {'unique_together': \"[('language_code', 'master')]\", 'object_name': 'BookingStatusTranslation', 'db_table': \"u'booking_bookingstatus_translation'\"},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),\n            'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': \"'translations'\", 'null': 'True', 'to': u\"orm['booking.BookingStatus']\"}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})\n        },\n        u'booking.bookingstatustranslationrenamed': {\n            'Meta': {'object_name': 'BookingStatusTranslationRenamed'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language': ('django.db.models.fields.CharField', [], {'max_length': '16'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\"})\n        },\n        u'booking.extrapersoninfo': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'ExtraPersonInfo'},\n            'arrival': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'})\n        },\n        u'contenttypes.contenttype': {\n            'Meta': {'ordering': \"('name',)\", 'unique_together': \"(('app_label', 'model'),)\", 'object_name': 'ContentType', 'db_table': \"'django_content_type'\"},\n            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\n        },\n        u'sessions.session': {\n            'Meta': {'object_name': 'Session', 'db_table': \"'django_session'\"},\n            'expire_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),\n            'session_data': ('django.db.models.fields.TextField', [], {}),\n            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'})\n        }\n    }\n\n    complete_apps = ['booking']\n"
  },
  {
    "path": "booking/south_migrations/0008_move_data_from_old_model_to_hvad.py",
    "content": "# flake8: noqa\n# -*- coding: utf-8 -*-\nimport datetime\nfrom south.db import db\nfrom south.v2 import DataMigration\nfrom django.db import models\n\nclass Migration(DataMigration):\n\n    def forwards(self, orm):\n        \"Write your forwards methods here.\"\n        # for every status\n        for status in orm['booking.BookingStatus'].objects.all():\n            # iterate over the old renamed translation instances\n            for statustrans_old in orm['booking.BookingStatusTranslationRenamed'].objects.filter(status=status):\n                orm['booking.BookingStatusTranslation'].objects.create(\n                    name=statustrans_old.name,\n                    language_code=statustrans_old.language,\n                    master=status,\n                )\n\n    def backwards(self, orm):\n        \"Write your backwards methods here.\"\n\n    models = {\n        u'auth.group': {\n            'Meta': {'object_name': 'Group'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\n            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'})\n        },\n        u'auth.permission': {\n            'Meta': {'ordering': \"(u'content_type__app_label', u'content_type__model', u'codename')\", 'unique_together': \"((u'content_type', u'codename'),)\", 'object_name': 'Permission'},\n            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\n        },\n        u'auth.user': {\n            'Meta': {'object_name': 'User'},\n            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Group']\", 'symmetrical': 'False', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),\n            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'}),\n            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\n        },\n        u'booking.booking': {\n            'Meta': {'ordering': \"['-creation_date']\", 'object_name': 'Booking'},\n            'booking_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\n            'booking_status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\", 'null': 'True', 'blank': 'True'}),\n            'city': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'currency': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),\n            'date_from': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'date_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'gender': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'notes': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'phone': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'session': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['sessions.Session']\", 'null': 'True', 'blank': 'True'}),\n            'special_request': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'street1': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'street2': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'time_period': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'time_unit': ('django.db.models.fields.CharField', [], {'default': \"''\", 'max_length': '64', 'blank': 'True'}),\n            'title': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            'total': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'}),\n            'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': \"'bookings'\", 'null': 'True', 'to': u\"orm['auth.User']\"}),\n            'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'})\n        },\n        u'booking.bookingerror': {\n            'Meta': {'object_name': 'BookingError'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'details': ('django.db.models.fields.TextField', [], {'max_length': '4000', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'})\n        },\n        u'booking.bookingitem': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'BookingItem'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\n            'persons': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),\n            'subtotal': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'})\n        },\n        u'booking.bookingstatus': {\n            'Meta': {'object_name': 'BookingStatus'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'})\n        },\n        u'booking.bookingstatustranslation': {\n            'Meta': {'unique_together': \"[('language_code', 'master')]\", 'object_name': 'BookingStatusTranslation', 'db_table': \"u'booking_bookingstatus_translation'\"},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),\n            'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': \"'translations'\", 'null': 'True', 'to': u\"orm['booking.BookingStatus']\"}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})\n        },\n        u'booking.bookingstatustranslationrenamed': {\n            'Meta': {'object_name': 'BookingStatusTranslationRenamed'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language': ('django.db.models.fields.CharField', [], {'max_length': '16'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\"})\n        },\n        u'booking.extrapersoninfo': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'ExtraPersonInfo'},\n            'arrival': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'})\n        },\n        u'contenttypes.contenttype': {\n            'Meta': {'ordering': \"('name',)\", 'unique_together': \"(('app_label', 'model'),)\", 'object_name': 'ContentType', 'db_table': \"'django_content_type'\"},\n            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\n        },\n        u'sessions.session': {\n            'Meta': {'object_name': 'Session', 'db_table': \"'django_session'\"},\n            'expire_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),\n            'session_data': ('django.db.models.fields.TextField', [], {}),\n            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'})\n        }\n    }\n\n    complete_apps = ['booking']\n    symmetrical = True\n"
  },
  {
    "path": "booking/south_migrations/0009_auto__del_bookingstatustranslationrenamed.py",
    "content": "# flake8: noqa\n# -*- coding: utf-8 -*-\nimport datetime\nfrom south.db import db\nfrom south.v2 import SchemaMigration\nfrom django.db import models\n\n\nclass Migration(SchemaMigration):\n\n    def forwards(self, orm):\n        # Deleting model 'BookingStatusTranslationRenamed'\n        db.delete_table(u'booking_bookingstatustranslationrenamed')\n\n\n    def backwards(self, orm):\n        # Adding model 'BookingStatusTranslationRenamed'\n        db.create_table(u'booking_bookingstatustranslationrenamed', (\n            ('status', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['booking.BookingStatus'])),\n            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),\n            ('language', self.gf('django.db.models.fields.CharField')(max_length=16)),\n            ('name', self.gf('django.db.models.fields.CharField')(max_length=128)),\n        ))\n        db.send_create_signal(u'booking', ['BookingStatusTranslationRenamed'])\n\n\n    models = {\n        u'auth.group': {\n            'Meta': {'object_name': 'Group'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\n            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'})\n        },\n        u'auth.permission': {\n            'Meta': {'ordering': \"(u'content_type__app_label', u'content_type__model', u'codename')\", 'unique_together': \"((u'content_type', u'codename'),)\", 'object_name': 'Permission'},\n            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\n        },\n        u'auth.user': {\n            'Meta': {'object_name': 'User'},\n            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Group']\", 'symmetrical': 'False', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),\n            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'}),\n            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\n        },\n        u'booking.booking': {\n            'Meta': {'ordering': \"['-creation_date']\", 'object_name': 'Booking'},\n            'booking_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\n            'booking_status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\", 'null': 'True', 'blank': 'True'}),\n            'city': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'currency': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),\n            'date_from': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'date_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'gender': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'notes': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'phone': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'session': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['sessions.Session']\", 'null': 'True', 'blank': 'True'}),\n            'special_request': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'street1': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'street2': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'time_period': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'time_unit': ('django.db.models.fields.CharField', [], {'default': \"''\", 'max_length': '64', 'blank': 'True'}),\n            'title': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            'total': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'}),\n            'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': \"'bookings'\", 'null': 'True', 'to': u\"orm['auth.User']\"}),\n            'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'})\n        },\n        u'booking.bookingerror': {\n            'Meta': {'object_name': 'BookingError'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'details': ('django.db.models.fields.TextField', [], {'max_length': '4000', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'})\n        },\n        u'booking.bookingitem': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'BookingItem'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\n            'persons': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),\n            'subtotal': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '28', 'blank': 'True'})\n        },\n        u'booking.bookingstatus': {\n            'Meta': {'object_name': 'BookingStatus'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'})\n        },\n        u'booking.bookingstatustranslation': {\n            'Meta': {'unique_together': \"[('language_code', 'master')]\", 'object_name': 'BookingStatusTranslation', 'db_table': \"u'booking_bookingstatus_translation'\"},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),\n            'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': \"'translations'\", 'null': 'True', 'to': u\"orm['booking.BookingStatus']\"}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})\n        },\n        u'booking.extrapersoninfo': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'ExtraPersonInfo'},\n            'arrival': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'})\n        },\n        u'contenttypes.contenttype': {\n            'Meta': {'ordering': \"('name',)\", 'unique_together': \"(('app_label', 'model'),)\", 'object_name': 'ContentType', 'db_table': \"'django_content_type'\"},\n            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\n        },\n        u'sessions.session': {\n            'Meta': {'object_name': 'Session', 'db_table': \"'django_session'\"},\n            'expire_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),\n            'session_data': ('django.db.models.fields.TextField', [], {}),\n            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'})\n        }\n    }\n\n    complete_apps = ['booking']\n"
  },
  {
    "path": "booking/south_migrations/0010_auto__chg_field_bookingitem_subtotal__chg_field_booking_total.py",
    "content": "# flake8: noqa\n# -*- coding: utf-8 -*-\nimport datetime\nfrom south.db import db\nfrom south.v2 import SchemaMigration\nfrom django.db import models\n\n\nclass Migration(SchemaMigration):\n\n    def forwards(self, orm):\n\n        # Changing field 'BookingItem.subtotal'\n        db.alter_column(u'booking_bookingitem', 'subtotal', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=36, decimal_places=2))\n\n        # Changing field 'Booking.total'\n        db.alter_column(u'booking_booking', 'total', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=36, decimal_places=2))\n\n    def backwards(self, orm):\n\n        # Changing field 'BookingItem.subtotal'\n        db.alter_column(u'booking_bookingitem', 'subtotal', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=36, decimal_places=28))\n\n        # Changing field 'Booking.total'\n        db.alter_column(u'booking_booking', 'total', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=36, decimal_places=28))\n\n    models = {\n        u'auth.group': {\n            'Meta': {'object_name': 'Group'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\n            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'})\n        },\n        u'auth.permission': {\n            'Meta': {'ordering': \"(u'content_type__app_label', u'content_type__model', u'codename')\", 'unique_together': \"((u'content_type', u'codename'),)\", 'object_name': 'Permission'},\n            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\n        },\n        u'auth.user': {\n            'Meta': {'object_name': 'User'},\n            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Group']\", 'symmetrical': 'False', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),\n            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),\n            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\n            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\n            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\n            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u\"orm['auth.Permission']\", 'symmetrical': 'False', 'blank': 'True'}),\n            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\n        },\n        u'booking.booking': {\n            'Meta': {'ordering': \"['-creation_date']\", 'object_name': 'Booking'},\n            'booking_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\n            'booking_status': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.BookingStatus']\", 'null': 'True', 'blank': 'True'}),\n            'city': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'currency': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),\n            'date_from': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'date_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'gender': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),\n            'notes': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'phone': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'session': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['sessions.Session']\", 'null': 'True', 'blank': 'True'}),\n            'special_request': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'street1': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'street2': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),\n            'time_period': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'time_unit': ('django.db.models.fields.CharField', [], {'default': \"''\", 'max_length': '64', 'blank': 'True'}),\n            'title': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),\n            'total': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '2', 'blank': 'True'}),\n            'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': \"'bookings'\", 'null': 'True', 'to': u\"orm['auth.User']\"}),\n            'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'})\n        },\n        u'booking.bookingerror': {\n            'Meta': {'object_name': 'BookingError'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),\n            'details': ('django.db.models.fields.TextField', [], {'max_length': '4000', 'blank': 'True'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'})\n        },\n        u'booking.bookingitem': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'BookingItem'},\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['contenttypes.ContentType']\"}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\n            'persons': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),\n            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),\n            'subtotal': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '36', 'decimal_places': '2', 'blank': 'True'})\n        },\n        u'booking.bookingstatus': {\n            'Meta': {'object_name': 'BookingStatus'},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'})\n        },\n        u'booking.bookingstatustranslation': {\n            'Meta': {'unique_together': \"[('language_code', 'master')]\", 'object_name': 'BookingStatusTranslation', 'db_table': \"u'booking_bookingstatus_translation'\"},\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),\n            'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': \"'translations'\", 'null': 'True', 'to': u\"orm['booking.BookingStatus']\"}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})\n        },\n        u'booking.extrapersoninfo': {\n            'Meta': {'ordering': \"['-booking__creation_date']\", 'object_name': 'ExtraPersonInfo'},\n            'arrival': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\n            'booking': ('django.db.models.fields.related.ForeignKey', [], {'to': u\"orm['booking.Booking']\"}),\n            'forename': ('django.db.models.fields.CharField', [], {'max_length': '20'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),\n            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'})\n        },\n        u'contenttypes.contenttype': {\n            'Meta': {'ordering': \"('name',)\", 'unique_together': \"(('app_label', 'model'),)\", 'object_name': 'ContentType', 'db_table': \"'django_content_type'\"},\n            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\n            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\n            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\n        },\n        u'sessions.session': {\n            'Meta': {'object_name': 'Session', 'db_table': \"'django_session'\"},\n            'expire_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),\n            'session_data': ('django.db.models.fields.TextField', [], {}),\n            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'})\n        }\n    }\n\n    complete_apps = ['booking']\n"
  },
  {
    "path": "booking/south_migrations/__init__.py",
    "content": ""
  },
  {
    "path": "booking/templates/booking/booking_detail.html",
    "content": "{% extends \"base.html\" %}\n\n{% block title %}{{ object }}{% endblock %}\n\n{% block main %}\n    <h1>{{ object }}</h1>\n{% endblock %}\n"
  },
  {
    "path": "booking/templates/booking/booking_form.html",
    "content": "{% extends \"base.html\" %}\n{% load i18n %}\n\n{% block title %}{% trans \"Create booking\" %}{% endblock %}\n\n{% block main %}\n    <h1>{% trans \"Create booking\" %}</h1>\n    <form method=\"post\" action=\".\">\n        {% csrf_token %}\n        {{ form.as_p }}\n        <input type=\"submit\" value=\"{% trans \"Save\" %}\" />\n    </form>\n{% endblock %}\n"
  },
  {
    "path": "booking/templates/booking/booking_list.html",
    "content": "{% extends \"base.html\" %}\n{% load i18n %}\n\n{% block title %}{% trans \"My bookings\" %}{% endblock %}\n\n{% block main %}\n    <h1>{% trans \"My bookings\" %}</h1>\n    <ul>\n        {% for booking in object_list %}\n            <li><a href=\"{% url \"booking_detail\" pk=booking.pk %}\">{{ booking }}</a></li>\n        {% endfor %}\n    </ul>\n{% endblock %}\n"
  },
  {
    "path": "booking/tests/__init__.py",
    "content": ""
  },
  {
    "path": "booking/tests/forms_tests.py",
    "content": "\"\"\"Form tests for the ``booking`` app.\"\"\"\nfrom django.test import TestCase\n\nfrom mixer.backend.django import mixer\n\nfrom ..forms import BookingForm\nfrom ..models import Booking\n\n\nclass BookingFormTestCase(TestCase):\n    longMessage = True\n\n    def setUp(self):\n        self.status = mixer.blend('booking.BookingStatus')\n\n    def test_form(self):\n        form = BookingForm()\n        self.assertTrue(form, msg=('Form has been initiated.'))\n\n        data = {\n            'gender': 'mr',\n            'forename': 'Foo',\n            'nationality': 'DE',\n            'street1': 'Foostreet 12',\n            'city': 'Foocity',\n            'zip_code': 'ABC123',\n            'country': 'DE',\n        }\n        form = BookingForm(data=data)\n        self.assertFalse(form.is_valid(), msg=('Form should be invalid.'))\n\n        data.update({'surname': 'Bar'})\n        form = BookingForm(data=data)\n        self.assertTrue(form.is_valid(), msg=('Form should be valid.'))\n\n        form.save()\n        self.assertEqual(Booking.objects.count(), 1, msg=(\n            'One booking should have been created.'))\n        self.assertEqual(\n            Booking.objects.all()[0].booking_status.slug,\n            'pending', msg=('Slug of status should be pending.'))\n"
  },
  {
    "path": "booking/tests/models_tests.py",
    "content": "\"\"\"Tests for the models of the booking app.\"\"\"\nfrom django.test import TestCase\n\nfrom mixer.backend.django import mixer\n\n\nclass BookingTestCase(TestCase):\n    longMessage = True\n\n    def setUp(self):\n        self.booking = mixer.blend('booking.Booking')\n\n    def test_instance(self):\n        self.assertTrue(self.booking.pk, msg=(\n            'Booking model should have been created.'))\n\n\nclass BookingItemTestCase(TestCase):\n    longMessage = True\n\n    def setUp(self):\n        self.booking_item = mixer.blend('booking.BookingItem')\n\n    def test_instance(self):\n        self.assertTrue(self.booking_item.pk, msg=(\n            'Booking item model should have been created.'))\n\n\nclass BookingErrorTestCase(TestCase):\n    \"\"\"Tests for the ``BookingError`` model class.\"\"\"\n    longMessage = True\n\n    def test_instantiation(self):\n        bookingerror = mixer.blend('booking.BookingError')\n        self.assertTrue(bookingerror.pk)\n\n\nclass BookingStatusTestCase(TestCase):\n    longMessage = True\n\n    def setUp(self):\n        self.booking_status = mixer.blend('booking.BookingStatus')\n\n    def test_instance(self):\n        self.assertTrue(self.booking_status.pk, msg=(\n            'Booking status model should have been created.'))\n\n\nclass ExtraPersonInfoTestCase(TestCase):\n    longMessage = True\n\n    def setUp(self):\n        self.info = mixer.blend('booking.ExtraPersonInfo')\n\n    def test_instance(self):\n        self.assertTrue(self.info.pk, msg=(\n            'Person info model should have been created.'))\n"
  },
  {
    "path": "booking/tests/settings.py",
    "content": "\n\"\"\"\nThese settings are used by the ``manage.py`` command.\nWith normal tests we want to use the fastest possible way which is an\nin-memory sqlite database but if you want to create South south_migrations you\nneed a persistant database.\nUnfortunately there seems to be an issue with either South or syncdb so that\ndefining two routers (\"default\" and \"south\") does not work.\n\"\"\"\nfrom distutils.version import StrictVersion\n\nimport django\n\nfrom .test_settings import *  # NOQA\n\n\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': 'db.sqlite',\n    }\n}\n\ndjango_version = django.get_version()\nif StrictVersion(django_version) < StrictVersion('1.7'):\n    INSTALLED_APPS.append('south', )\n"
  },
  {
    "path": "booking/tests/test_app/__init__.py",
    "content": ""
  },
  {
    "path": "booking/tests/test_app/models.py",
    "content": ""
  },
  {
    "path": "booking/tests/test_app/templates/400.html",
    "content": ""
  },
  {
    "path": "booking/tests/test_app/templates/500.html",
    "content": ""
  },
  {
    "path": "booking/tests/test_app/templates/base.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title>{% block title %}{% endblock %}</title>\n</head>\n<body>\n\n{% block main %}{% endblock %}\n\n</body>\n</html>"
  },
  {
    "path": "booking/tests/test_settings.py",
    "content": "\"\"\"Settings that need to be set in order to run the tests.\"\"\"\nimport os\n\nDEBUG = True\n\nSITE_ID = 1\n\nAPP_ROOT = os.path.abspath(\n    os.path.join(os.path.dirname(__file__), '..'))\n\n\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': ':memory:',\n    }\n}\n\nROOT_URLCONF = 'booking.tests.urls'\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(APP_ROOT, '../app_static')\nMEDIA_ROOT = os.path.join(APP_ROOT, '../app_media')\nSTATICFILES_DIRS = (\n    os.path.join(APP_ROOT, 'static'),\n)\n\nTEMPLATES = [{\n    'BACKEND': 'django.template.backends.django.DjangoTemplates',\n    'APP_DIRS': True,\n    'DIRS': [os.path.join(APP_ROOT, 'tests/test_app/templates')],\n    'OPTIONS': {\n        'context_processors': (\n            'django.contrib.auth.context_processors.auth',\n            'django.template.context_processors.request',\n        )\n    }\n}]\n\nMIDDLEWARE_CLASSES = (\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n)\n\nEXTERNAL_APPS = [\n    'django.contrib.admin',\n    'django.contrib.admindocs',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.messages',\n    'django.contrib.sessions',\n    'django.contrib.staticfiles',\n    'django.contrib.sitemaps',\n    'django.contrib.sites',\n]\n\nINTERNAL_APPS = [\n    'booking',\n    'booking.tests.test_app',\n]\n\nINSTALLED_APPS = EXTERNAL_APPS + INTERNAL_APPS\n\nSECRET_KEY = 'foobar'\n"
  },
  {
    "path": "booking/tests/urls.py",
    "content": "\"\"\"URLs to run the tests.\"\"\"\ntry:\n    from django.conf.urls import include, url\nexcept ImportError:  # Pre-Django 1.4 version\n    from django.conf.urls.defaults import include, url\nfrom django.contrib import admin\n\n\nadmin.autodiscover()\n\nurlpatterns = [\n    url(r'^admin/', include(admin.site.urls)),\n    url(r'^booking/', include('booking.urls')),\n]\n"
  },
  {
    "path": "booking/tests/views_tests.py",
    "content": "\"\"\"View tests for the ``booking`` app.\"\"\"\nfrom django.test import TestCase\n\nfrom django_libs.tests.mixins import ViewRequestFactoryTestMixin\nfrom mixer.backend.django import mixer\n\nfrom .. import views\nfrom ..models import Booking\n\n\nclass BookingCreateViewTestCase(ViewRequestFactoryTestMixin, TestCase):\n    view_class = views.BookingCreateView\n\n    def setUp(self):\n        self.user = mixer.blend('auth.User')\n\n    def test_view(self):\n        self.is_callable(add_session=True)\n\n        data = {\n            'gender': 'mr',\n            'forename': 'Foo',\n            'surname': 'Bar',\n            'nationality': 'DE',\n            'street1': 'Foostreet 12',\n            'city': 'Foocity',\n            'zip_code': 'ABC123',\n            'country': 'DE',\n        }\n        self.is_postable(data=data, add_session=True,\n                         to_url_name='booking_detail')\n        self.assertEqual(Booking.objects.count(), 1, msg=(\n            'One booking should have been created.'))\n        self.assertTrue(Booking.objects.all()[0].session.session_key, msg=(\n            'Booking should have a session key.'))\n        self.is_postable(data=data, add_session=True,\n                         to_url_name='booking_detail')\n        self.assertEqual(Booking.objects.count(), 2, msg=(\n            'Another booking should have been created.'))\n\n        self.is_postable(data=data, user=self.user, add_session=True,\n                         to_url_name='booking_detail')\n        self.assertEqual(self.user.bookings.count(), 1, msg=(\n            'User should have a new booking.'))\n        self.assertTrue(Booking.objects.all()[0].user.username, msg=(\n            'Booking should have a user.'))\n\n\nclass BookingDetailViewTestCase(ViewRequestFactoryTestMixin, TestCase):\n    view_class = views.BookingDetailView\n\n    def setUp(self):\n        self.user = mixer.blend('auth.User')\n        self.booking = mixer.blend('booking.Booking')\n\n    def get_view_kwargs(self):\n        return {'pk': self.booking.pk}\n\n    def test_view(self):\n        self.is_not_callable()\n        self.is_not_callable(user=self.user)\n        self.booking = mixer.blend('booking.Booking', user=self.user)\n        self.is_callable(user=self.user)\n\n\nclass BookingListViewTestCase(ViewRequestFactoryTestMixin, TestCase):\n    view_class = views.BookingListView\n\n    def setUp(self):\n        self.user = mixer.blend('auth.User')\n        mixer.blend('booking.Booking', user=self.user)\n\n    def test_view(self):\n        self.is_callable(user=self.user)\n"
  },
  {
    "path": "booking/urls.py",
    "content": "\"\"\"URLs for the booking app.\"\"\"\ntry:\n    from django.conf.urls import url\nexcept ImportError:  # Pre-Django 1.4 version\n    from django.conf.urls.defaults import url\n\nfrom . import views\n\n\nurlpatterns = [\n    url(r'^(?P<pk>\\d+)/$',\n        views.BookingDetailView.as_view(),\n        name='booking_detail'),\n    url(r'^create/$',\n        views.BookingCreateView.as_view(),\n        name='booking_create'),\n    url(r'^$', views.BookingListView.as_view(), name='booking_list'),\n]\n"
  },
  {
    "path": "booking/utils.py",
    "content": "\"\"\"Utils for the booking app.\"\"\"\nfrom django.contrib.sessions.models import Session\n\nfrom .models import Booking\n\n\ndef get_booking(request):\n    \"\"\"\n    Returns the booking that is in progress for the current user or None\n\n    We assume that a user can only have one booking that is in-progress.\n\n    TODO: This implementation assumes that there is a status called\n    'inprogress' and that there should only be one such booking for a given\n    user. We need to see if this can be more generic for future projects.\n\n    :param request: The Request object.\n\n    \"\"\"\n    booking = None\n    if request.user.is_authenticated():\n        try:\n            booking = Booking.objects.get(\n                user=request.user,\n                booking_status__slug='inprogress')\n        except Booking.DoesNotExist:\n            # The user does not have any open bookings\n            pass\n    else:\n        session = Session.objects.get(\n            session_key=request.session.session_key)\n        try:\n            booking = Booking.objects.get(session=session)\n        except Booking.DoesNotExist:\n            # The user does not have any bookings in his session\n            pass\n    return booking\n\n\ndef persist_booking(booking, user):\n    \"\"\"\n    Ties an in-progress booking from a session to a user when the user logs in.\n\n    If we don't do this, the booking will be lost, because on a login, the\n    old session will be deleted and a new one will be created. Since the\n    booking has a FK to the session, it would be deleted as well when the user\n    logs in.\n\n    We assume that a user can only have one booking that is in-progress.\n    Therefore we will delete any existing in-progress bookings of this user\n    before tying the one from the session to the user.\n\n    TODO: Find a more generic solution for this, as this assumes that there is\n    a status called inprogress and that a user can only have one such booking.\n\n    :param booking: The booking that should be tied to the user.\n    :user: The user the booking should be tied to.\n\n    \"\"\"\n    if booking is not None:\n        existing_bookings = Booking.objects.filter(\n            user=user, booking_status__slug='inprogress').exclude(\n            pk=booking.pk)\n        existing_bookings.delete()\n\n        booking.session = None\n        booking.user = user\n        booking.save()\n"
  },
  {
    "path": "booking/views.py",
    "content": "\"\"\"Views for the booking app.\"\"\"\nfrom django.contrib.auth.decorators import login_required\nfrom django.contrib.sessions.models import Session\nfrom django.core.urlresolvers import reverse\nfrom django.http import Http404\nfrom django.utils.decorators import method_decorator\nfrom django.views.generic import CreateView, DetailView, ListView\n\nfrom .forms import BookingForm\nfrom .models import Booking\n\n\n# ------ MIXINS ------ #\n\nclass BookingViewMixin(object):\n    model = Booking\n    form_class = BookingForm\n\n\n# ------ MODEL VIEWS ------ #\n\nclass BookingCreateView(BookingViewMixin, CreateView):\n    \"\"\"View to create a new ``Booking`` instance.\"\"\"\n    def get_success_url(self):\n        return reverse('booking_detail', kwargs={'pk': self.object.pk})\n\n    def get_form_kwargs(self, *args, **kwargs):\n        kwargs = super(BookingCreateView, self).get_form_kwargs(\n            *args, **kwargs)\n        if self.request.user.is_authenticated():\n            kwargs.update({'user': self.request.user})\n        else:\n            # If the user is not authenticated, get the current session\n            if not self.request.session.exists(\n                    self.request.session.session_key):\n                self.request.session.create()\n            kwargs.update({'session': Session.objects.get(\n                session_key=self.request.session.session_key)})\n        return kwargs\n\n\nclass BookingDetailView(BookingViewMixin, DetailView):\n    \"\"\"View to display a ``Booking`` instance.\"\"\"\n    def dispatch(self, request, *args, **kwargs):\n        self.kwargs = kwargs\n        self.object = self.get_object()\n        if request.user.is_authenticated():\n            # If user doesn't own the booking forbid access\n            if not self.object.user == request.user:\n                raise Http404\n        else:\n            # If anonymous doesn't own the booking forbid access\n            session = self.object.session\n            if (not session or not request.session.session_key or\n                    session.session_key != request.session.session_key):\n                raise Http404\n        return super(BookingViewMixin, self).dispatch(request, *args, **kwargs)\n\n\nclass BookingListView(BookingViewMixin, ListView):\n    \"\"\"View to display all ``Booking`` instances of one user.\"\"\"\n    @method_decorator(login_required)\n    def dispatch(self, request, *args, **kwargs):\n        return super(BookingViewMixin, self).dispatch(request, *args, **kwargs)\n\n    def get_queryset(self):\n        return self.request.user.bookings.all()\n"
  },
  {
    "path": "manage.py",
    "content": "#!/usr/bin/env python\nimport os\nimport sys\n\nif __name__ == '__main__':\n    os.environ.setdefault(\n        'DJANGO_SETTINGS_MODULE', 'booking.tests.settings')\n    from django.core.management import execute_from_command_line\n    execute_from_command_line(sys.argv)\n"
  },
  {
    "path": "requirements.txt",
    "content": "django\ndjango-hvad\ndjango-countries\ndjango-libs\n"
  },
  {
    "path": "runtests.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nThis script is used to run tests, create a coverage report and output the\nstatistics at the end of the tox run.\nTo run this script just execute ``tox``\n\"\"\"\nimport re\n\nfrom fabric.api import local, warn\nfrom fabric.colors import green, red\n\n\nif __name__ == '__main__':\n    local('flake8 --ignore=E126 --ignore=W391 --statistics'\n          ' --exclude=submodules,south_migrations,migrations,build .')\n    local('coverage run --source=\"booking\" manage.py test -v 2'\n          ' --traceback --failfast'\n          ' --settings=booking.tests.settings'\n          ' --pattern=\"*_tests.py\"')\n    local('coverage html -d coverage --omit=\"*__init__*,*/settings/*,'\n          '*/south_migrations/*,*/migrations/*,*/tests/*,*admin*\"')\n    total_line = local('grep -n pc_cov coverage/index.html', capture=True)\n    percentage = float(re.findall(r'(\\d+)%', total_line)[-1])\n    if percentage < 100:\n        warn(red('Coverage is {0}%'.format(percentage)))\n    print(green('Coverage is {0}%'.format(percentage)))\n"
  },
  {
    "path": "setup.py",
    "content": "# -*- encoding: utf-8 -*-\n\"\"\"\nPython setup file for the booking app.\n\nIn order to register your app at pypi.python.org, create an account at\npypi.python.org and login, then register your new app like so:\n\n    python setup.py register\n\nIf your name is still free, you can now make your first release but first you\nshould check if you are uploading the correct files:\n\n    python setup.py sdist\n\nInspect the output thoroughly. There shouldn't be any temp files and if your\napp includes staticfiles or templates, make sure that they appear in the list.\nIf something is wrong, you need to edit MANIFEST.in and run the command again.\n\nIf all looks good, you can make your first release:\n\n    python setup.py sdist upload\n\nFor new releases, you need to bump the version number in\nbooking/__init__.py and re-run the above command.\n\nFor more information on creating source distributions, see\nhttp://docs.python.org/2/distutils/sourcedist.html\n\n\"\"\"\nimport os\nfrom setuptools import setup, find_packages\nimport booking as app\n\n\ndef read(fname):\n    try:\n        return open(os.path.join(os.path.dirname(__file__), fname)).read()\n    except IOError:\n        return ''\n\nsetup(\n    name=\"django-booking\",\n    version=app.__version__,\n    description=read('DESCRIPTION'),\n    long_description=read('README.rst'),\n    license='The MIT License',\n    platforms=['OS Independent'],\n    keywords='django, app, reusable, booking',\n    author='Daniel Kaufhold',\n    author_email='daniel.kaufhold.com',\n    url=\"https://github.com/bitmazk/django-booking\",\n    packages=find_packages(),\n    include_package_data=True,\n    install_requires=[\n        'Django',\n        'django-hvad',\n        'django-countries',\n        'django-libs',\n    ],\n)\n"
  },
  {
    "path": "test_requirements.txt",
    "content": "coverage\ndjango-coverage\nipdb\nflake8\nfabric3\nmixer\ntox\n"
  },
  {
    "path": "tox.ini",
    "content": "[tox]\nenvlist = py27-django{18,19},py35-django19\n\n[testenv]\nusedevelop = True\ndeps =\n    django18: Django>=1.8,<1.9\n    django19: Django>=1.9,<1.10\n    -rtest_requirements.txt\ncommands = python runtests.py\n"
  }
]