Просмотр исходного кода

Add set of native migrations

New style migrations created with the helper script. Now doesn't detect
any more changes after this set has been applied.
master
Maik Hoepfel 11 лет назад
Родитель
Сommit
3bf38a43e0
30 измененных файлов: 2013 добавлений и 0 удалений
  1. 71
    0
      oscar/apps/address/migrations/0001_initial.py
  2. 0
    0
      oscar/apps/address/migrations/__init__.py
  3. 30
    0
      oscar/apps/analytics/migrations/0001_initial.py
  4. 74
    0
      oscar/apps/analytics/migrations/0002_auto_20140722_1813.py
  5. 0
    0
      oscar/apps/analytics/migrations/__init__.py
  6. 32
    0
      oscar/apps/basket/migrations/0001_initial.py
  7. 63
    0
      oscar/apps/basket/migrations/0002_auto_20140722_1813.py
  8. 0
    0
      oscar/apps/basket/migrations/__init__.py
  9. 291
    0
      oscar/apps/catalogue/migrations/0001_initial.py
  10. 0
    0
      oscar/apps/catalogue/migrations/__init__.py
  11. 68
    0
      oscar/apps/catalogue/reviews/migrations/0001_initial.py
  12. 0
    0
      oscar/apps/catalogue/reviews/migrations/__init__.py
  13. 97
    0
      oscar/apps/customer/migrations/0001_initial.py
  14. 0
    0
      oscar/apps/customer/migrations/__init__.py
  15. 281
    0
      oscar/apps/offer/migrations/0001_initial.py
  16. 0
    0
      oscar/apps/offer/migrations/__init__.py
  17. 394
    0
      oscar/apps/order/migrations/0001_initial.py
  18. 0
    0
      oscar/apps/order/migrations/__init__.py
  19. 110
    0
      oscar/apps/partner/migrations/0001_initial.py
  20. 0
    0
      oscar/apps/partner/migrations/__init__.py
  21. 94
    0
      oscar/apps/payment/migrations/0001_initial.py
  22. 0
    0
      oscar/apps/payment/migrations/__init__.py
  23. 217
    0
      oscar/apps/promotions/migrations/0001_initial.py
  24. 0
    0
      oscar/apps/promotions/migrations/__init__.py
  25. 76
    0
      oscar/apps/shipping/migrations/0001_initial.py
  26. 0
    0
      oscar/apps/shipping/migrations/__init__.py
  27. 57
    0
      oscar/apps/voucher/migrations/0001_initial.py
  28. 0
    0
      oscar/apps/voucher/migrations/__init__.py
  29. 58
    0
      oscar/apps/wishlists/migrations/0001_initial.py
  30. 0
    0
      oscar/apps/wishlists/migrations/__init__.py

+ 71
- 0
oscar/apps/address/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,71 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields
6
+from django.conf import settings
7
+
8
+
9
+class Migration(migrations.Migration):
10
+
11
+    dependencies = [
12
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13
+    ]
14
+
15
+    operations = [
16
+        migrations.CreateModel(
17
+            name='Country',
18
+            fields=[
19
+                ('iso_3166_1_a2', models.CharField(max_length=2, serialize=False, verbose_name='ISO 3166-1 alpha-2', primary_key=True)),
20
+                ('iso_3166_1_a3', models.CharField(max_length=3, verbose_name='ISO 3166-1 alpha-3', blank=True)),
21
+                ('iso_3166_1_numeric', models.CharField(max_length=3, verbose_name='ISO 3166-1 numeric', blank=True)),
22
+                ('printable_name', models.CharField(max_length=128, verbose_name='Country name')),
23
+                ('name', models.CharField(max_length=128, verbose_name='Official name')),
24
+                ('display_order', models.PositiveSmallIntegerField(default=0, help_text='Higher the number, higher the country in the list.', verbose_name='Display order', db_index=True)),
25
+                ('is_shipping_country', models.BooleanField(default=False, db_index=True, verbose_name='Is shipping country')),
26
+            ],
27
+            options={
28
+                'ordering': (b'-display_order', b'printable_name'),
29
+                'abstract': False,
30
+                'verbose_name': 'Country',
31
+                'verbose_name_plural': 'Countries',
32
+            },
33
+            bases=(models.Model,),
34
+        ),
35
+        migrations.CreateModel(
36
+            name='UserAddress',
37
+            fields=[
38
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
39
+                ('title', models.CharField(blank=True, max_length=64, verbose_name='Title', choices=[(b'Mr', 'Mr'), (b'Miss', 'Miss'), (b'Mrs', 'Mrs'), (b'Ms', 'Ms'), (b'Dr', 'Dr')])),
40
+                ('first_name', models.CharField(max_length=255, verbose_name='First name', blank=True)),
41
+                ('last_name', models.CharField(max_length=255, verbose_name='Last name', blank=True)),
42
+                ('line1', models.CharField(max_length=255, verbose_name='First line of address')),
43
+                ('line2', models.CharField(max_length=255, verbose_name='Second line of address', blank=True)),
44
+                ('line3', models.CharField(max_length=255, verbose_name='Third line of address', blank=True)),
45
+                ('line4', models.CharField(max_length=255, verbose_name='City', blank=True)),
46
+                ('state', models.CharField(max_length=255, verbose_name='State/County', blank=True)),
47
+                ('postcode', oscar.models.fields.UppercaseCharField(max_length=64, verbose_name='Post/Zip-code', blank=True)),
48
+                ('search_text', models.TextField(verbose_name='Search text - used only for searching addresses', editable=False)),
49
+                ('phone_number', oscar.models.fields.PhoneNumberField(help_text='In case we need to call you about your order', verbose_name='Phone number', blank=True)),
50
+                ('notes', models.TextField(help_text='Tell us anything we should know when delivering your order.', verbose_name='Instructions', blank=True)),
51
+                ('is_default_for_shipping', models.BooleanField(default=False, verbose_name='Default shipping address?')),
52
+                ('is_default_for_billing', models.BooleanField(default=False, verbose_name='Default billing address?')),
53
+                ('num_orders', models.PositiveIntegerField(default=0, verbose_name='Number of Orders')),
54
+                ('hash', models.CharField(verbose_name='Address Hash', max_length=255, editable=False, db_index=True)),
55
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
56
+                ('country', models.ForeignKey(verbose_name='Country', to='address.Country')),
57
+                ('user', models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL)),
58
+            ],
59
+            options={
60
+                'ordering': [b'-num_orders'],
61
+                'abstract': False,
62
+                'verbose_name': 'User address',
63
+                'verbose_name_plural': 'User addresses',
64
+            },
65
+            bases=(models.Model,),
66
+        ),
67
+        migrations.AlterUniqueTogether(
68
+            name='useraddress',
69
+            unique_together=set([(b'user', b'hash')]),
70
+        ),
71
+    ]

+ 0
- 0
oscar/apps/address/migrations/__init__.py Просмотреть файл


+ 30
- 0
oscar/apps/analytics/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,30 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+    ]
11
+
12
+    operations = [
13
+        migrations.CreateModel(
14
+            name='ProductRecord',
15
+            fields=[
16
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
17
+                ('num_views', models.PositiveIntegerField(default=0, verbose_name='Views')),
18
+                ('num_basket_additions', models.PositiveIntegerField(default=0, verbose_name='Basket Additions')),
19
+                ('num_purchases', models.PositiveIntegerField(default=0, verbose_name='Purchases', db_index=True)),
20
+                ('score', models.FloatField(default=0.0, verbose_name='Score')),
21
+            ],
22
+            options={
23
+                'ordering': [b'-num_purchases'],
24
+                'abstract': False,
25
+                'verbose_name': 'Product record',
26
+                'verbose_name_plural': 'Product records',
27
+            },
28
+            bases=(models.Model,),
29
+        ),
30
+    ]

+ 74
- 0
oscar/apps/analytics/migrations/0002_auto_20140722_1813.py Просмотреть файл

@@ -0,0 +1,74 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+from django.conf import settings
6
+from decimal import Decimal
7
+
8
+
9
+class Migration(migrations.Migration):
10
+
11
+    dependencies = [
12
+        ('catalogue', '0001_initial'),
13
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14
+        ('analytics', '0001_initial'),
15
+    ]
16
+
17
+    operations = [
18
+        migrations.AddField(
19
+            model_name='productrecord',
20
+            name='product',
21
+            field=models.OneToOneField(verbose_name='Product', to='catalogue.Product'),
22
+            preserve_default=True,
23
+        ),
24
+        migrations.CreateModel(
25
+            name='UserProductView',
26
+            fields=[
27
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
28
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
29
+                ('product', models.ForeignKey(verbose_name='Product', to='catalogue.Product')),
30
+                ('user', models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL)),
31
+            ],
32
+            options={
33
+                'abstract': False,
34
+                'verbose_name': 'User product view',
35
+                'verbose_name_plural': 'User product views',
36
+            },
37
+            bases=(models.Model,),
38
+        ),
39
+        migrations.CreateModel(
40
+            name='UserRecord',
41
+            fields=[
42
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
43
+                ('num_product_views', models.PositiveIntegerField(default=0, verbose_name='Product Views')),
44
+                ('num_basket_additions', models.PositiveIntegerField(default=0, verbose_name='Basket Additions')),
45
+                ('num_orders', models.PositiveIntegerField(default=0, verbose_name='Orders', db_index=True)),
46
+                ('num_order_lines', models.PositiveIntegerField(default=0, verbose_name='Order Lines', db_index=True)),
47
+                ('num_order_items', models.PositiveIntegerField(default=0, verbose_name='Order Items', db_index=True)),
48
+                ('total_spent', models.DecimalField(default=Decimal('0.00'), verbose_name='Total Spent', max_digits=12, decimal_places=2)),
49
+                ('date_last_order', models.DateTimeField(null=True, verbose_name='Last Order Date', blank=True)),
50
+                ('user', models.OneToOneField(verbose_name='User', to=settings.AUTH_USER_MODEL)),
51
+            ],
52
+            options={
53
+                'abstract': False,
54
+                'verbose_name': 'User record',
55
+                'verbose_name_plural': 'User records',
56
+            },
57
+            bases=(models.Model,),
58
+        ),
59
+        migrations.CreateModel(
60
+            name='UserSearch',
61
+            fields=[
62
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
63
+                ('query', models.CharField(max_length=255, verbose_name='Search term', db_index=True)),
64
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
65
+                ('user', models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL)),
66
+            ],
67
+            options={
68
+                'abstract': False,
69
+                'verbose_name': 'User search query',
70
+                'verbose_name_plural': 'User search queries',
71
+            },
72
+            bases=(models.Model,),
73
+        ),
74
+    ]

+ 0
- 0
oscar/apps/analytics/migrations/__init__.py Просмотреть файл


+ 32
- 0
oscar/apps/basket/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,32 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+from django.conf import settings
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.CreateModel(
16
+            name='Basket',
17
+            fields=[
18
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
19
+                ('status', models.CharField(default=b'Open', max_length=128, verbose_name='Status', choices=[(b'Open', 'Open - currently active'), (b'Merged', 'Merged - superceded by another basket'), (b'Saved', 'Saved - for items to be purchased later'), (b'Frozen', 'Frozen - the basket cannot be modified'), (b'Submitted', 'Submitted - has been ordered at the checkout')])),
20
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')),
21
+                ('date_merged', models.DateTimeField(null=True, verbose_name='Date merged', blank=True)),
22
+                ('date_submitted', models.DateTimeField(null=True, verbose_name='Date submitted', blank=True)),
23
+                ('owner', models.ForeignKey(verbose_name='Owner', to=settings.AUTH_USER_MODEL, null=True)),
24
+            ],
25
+            options={
26
+                'abstract': False,
27
+                'verbose_name': 'Basket',
28
+                'verbose_name_plural': 'Baskets',
29
+            },
30
+            bases=(models.Model,),
31
+        ),
32
+    ]

+ 63
- 0
oscar/apps/basket/migrations/0002_auto_20140722_1813.py Просмотреть файл

@@ -0,0 +1,63 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('catalogue', '0001_initial'),
11
+        ('voucher', '0001_initial'),
12
+        ('basket', '0001_initial'),
13
+        ('partner', '0001_initial'),
14
+    ]
15
+
16
+    operations = [
17
+        migrations.AddField(
18
+            model_name='basket',
19
+            name='vouchers',
20
+            field=models.ManyToManyField(to='voucher.Voucher', null=True, verbose_name='Vouchers', blank=True),
21
+            preserve_default=True,
22
+        ),
23
+        migrations.CreateModel(
24
+            name='Line',
25
+            fields=[
26
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
27
+                ('line_reference', models.SlugField(max_length=128, verbose_name='Line Reference')),
28
+                ('quantity', models.PositiveIntegerField(default=1, verbose_name='Quantity')),
29
+                ('price_currency', models.CharField(default=b'GBP', max_length=12, verbose_name='Currency')),
30
+                ('price_excl_tax', models.DecimalField(null=True, verbose_name='Price excl. Tax', max_digits=12, decimal_places=2)),
31
+                ('price_incl_tax', models.DecimalField(null=True, verbose_name='Price incl. Tax', max_digits=12, decimal_places=2)),
32
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
33
+                ('basket', models.ForeignKey(verbose_name='Basket', to='basket.Basket')),
34
+                ('product', models.ForeignKey(verbose_name='Product', to='catalogue.Product')),
35
+                ('stockrecord', models.ForeignKey(to='partner.StockRecord')),
36
+            ],
37
+            options={
38
+                'abstract': False,
39
+                'verbose_name': 'Basket line',
40
+                'verbose_name_plural': 'Basket lines',
41
+            },
42
+            bases=(models.Model,),
43
+        ),
44
+        migrations.AlterUniqueTogether(
45
+            name='line',
46
+            unique_together=set([(b'basket', b'line_reference')]),
47
+        ),
48
+        migrations.CreateModel(
49
+            name='LineAttribute',
50
+            fields=[
51
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
52
+                ('value', models.CharField(max_length=255, verbose_name='Value')),
53
+                ('line', models.ForeignKey(verbose_name='Line', to='basket.Line')),
54
+                ('option', models.ForeignKey(verbose_name='Option', to='catalogue.Option')),
55
+            ],
56
+            options={
57
+                'abstract': False,
58
+                'verbose_name': 'Line attribute',
59
+                'verbose_name_plural': 'Line attributes',
60
+            },
61
+            bases=(models.Model,),
62
+        ),
63
+    ]

+ 0
- 0
oscar/apps/basket/migrations/__init__.py Просмотреть файл


+ 291
- 0
oscar/apps/catalogue/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,291 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields.autoslugfield
6
+import oscar.models.fields
7
+import django.db.models.deletion
8
+import django.core.validators
9
+
10
+
11
+class Migration(migrations.Migration):
12
+
13
+    dependencies = [
14
+        ('contenttypes', '__latest__'),
15
+    ]
16
+
17
+    operations = [
18
+        migrations.CreateModel(
19
+            name='AttributeOption',
20
+            fields=[
21
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
22
+                ('option', models.CharField(max_length=255, verbose_name='Option')),
23
+            ],
24
+            options={
25
+                'abstract': False,
26
+                'verbose_name': 'Attribute option',
27
+                'verbose_name_plural': 'Attribute options',
28
+            },
29
+            bases=(models.Model,),
30
+        ),
31
+        migrations.CreateModel(
32
+            name='AttributeOptionGroup',
33
+            fields=[
34
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
35
+                ('name', models.CharField(max_length=128, verbose_name='Name')),
36
+            ],
37
+            options={
38
+                'abstract': False,
39
+                'verbose_name': 'Attribute option group',
40
+                'verbose_name_plural': 'Attribute option groups',
41
+            },
42
+            bases=(models.Model,),
43
+        ),
44
+        migrations.AddField(
45
+            model_name='attributeoption',
46
+            name='group',
47
+            field=models.ForeignKey(verbose_name='Group', to='catalogue.AttributeOptionGroup'),
48
+            preserve_default=True,
49
+        ),
50
+        migrations.CreateModel(
51
+            name='Category',
52
+            fields=[
53
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
54
+                ('path', models.CharField(unique=True, max_length=255)),
55
+                ('depth', models.PositiveIntegerField()),
56
+                ('numchild', models.PositiveIntegerField(default=0)),
57
+                ('name', models.CharField(max_length=255, verbose_name='Name', db_index=True)),
58
+                ('description', models.TextField(verbose_name='Description', blank=True)),
59
+                ('image', models.ImageField(max_length=255, upload_to=b'categories', null=True, verbose_name='Image', blank=True)),
60
+                ('slug', models.SlugField(verbose_name='Slug', max_length=255, editable=False)),
61
+                ('full_name', models.CharField(verbose_name='Full Name', max_length=255, editable=False, db_index=True)),
62
+            ],
63
+            options={
64
+                'ordering': [b'full_name'],
65
+                'abstract': False,
66
+                'verbose_name': 'Category',
67
+                'verbose_name_plural': 'Categories',
68
+            },
69
+            bases=(models.Model,),
70
+        ),
71
+        migrations.CreateModel(
72
+            name='Option',
73
+            fields=[
74
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
75
+                ('name', models.CharField(max_length=128, verbose_name='Name')),
76
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Code')),
77
+                ('type', models.CharField(default=b'Required', max_length=128, verbose_name='Status', choices=[(b'Required', 'Required - a value for this option must be specified'), (b'Optional', 'Optional - a value for this option can be omitted')])),
78
+            ],
79
+            options={
80
+                'abstract': False,
81
+                'verbose_name': 'Option',
82
+                'verbose_name_plural': 'Options',
83
+            },
84
+            bases=(models.Model,),
85
+        ),
86
+        migrations.CreateModel(
87
+            name='Product',
88
+            fields=[
89
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
90
+                ('structure', models.CharField(default=b'standalone', max_length=10, verbose_name='Product structure', choices=[(b'standalone', 'Stand-alone product'), (b'parent', 'Parent product'), (b'child', 'Child product')])),
91
+                ('upc', oscar.models.fields.NullCharField(max_length=64, help_text='Universal Product Code (UPC) is an identifier for a product which is not specific to a particular  supplier. Eg an ISBN for a book.', unique=True, verbose_name='UPC')),
92
+                ('title', models.CharField(max_length=255, verbose_name='Product title', blank=True)),
93
+                ('slug', models.SlugField(max_length=255, verbose_name='Slug')),
94
+                ('description', models.TextField(verbose_name='Description', blank=True)),
95
+                ('rating', models.FloatField(verbose_name='Rating', null=True, editable=False)),
96
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')),
97
+                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated', db_index=True)),
98
+                ('is_discountable', models.BooleanField(default=True, help_text='This flag indicates if this product can be used in an offer or not', verbose_name='Is discountable?')),
99
+                ('parent', models.ForeignKey(blank=True, to='catalogue.Product', help_text="Only choose a parent product if you're creating a child product.  For example if this is a size 4 of a particular t-shirt.  Leave blank if this is a stand-alone product (i.e. there is only one version of this product).", null=True, verbose_name='Parent product')),
100
+                ('product_options', models.ManyToManyField(to='catalogue.Option', verbose_name='Product Options', blank=True)),
101
+            ],
102
+            options={
103
+                'ordering': [b'-date_created'],
104
+                'abstract': False,
105
+                'verbose_name': 'Product',
106
+                'verbose_name_plural': 'Products',
107
+            },
108
+            bases=(models.Model,),
109
+        ),
110
+        migrations.CreateModel(
111
+            name='ProductAttribute',
112
+            fields=[
113
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
114
+                ('name', models.CharField(max_length=128, verbose_name='Name')),
115
+                ('code', models.SlugField(max_length=128, verbose_name='Code', validators=[django.core.validators.RegexValidator(regex=b'^[a-zA-Z\\-_][0-9a-zA-Z\\-_]*$', message="Code can only contain the letters a-z, A-Z, digits, minus and underscores, and can't start with a digit")])),
116
+                ('type', models.CharField(default=b'text', max_length=20, verbose_name='Type', choices=[(b'text', 'Text'), (b'integer', 'Integer'), (b'boolean', 'True / False'), (b'float', 'Float'), (b'richtext', 'Rich Text'), (b'date', 'Date'), (b'option', 'Option'), (b'entity', 'Entity'), (b'file', 'File'), (b'image', 'Image')])),
117
+                ('required', models.BooleanField(default=False, verbose_name='Required')),
118
+                ('option_group', models.ForeignKey(blank=True, to='catalogue.AttributeOptionGroup', help_text='Select an option group if using type "Option"', null=True, verbose_name='Option Group')),
119
+            ],
120
+            options={
121
+                'ordering': [b'code'],
122
+                'abstract': False,
123
+                'verbose_name': 'Product attribute',
124
+                'verbose_name_plural': 'Product attributes',
125
+            },
126
+            bases=(models.Model,),
127
+        ),
128
+        migrations.CreateModel(
129
+            name='ProductAttributeValue',
130
+            fields=[
131
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
132
+                ('value_text', models.TextField(null=True, verbose_name='Text', blank=True)),
133
+                ('value_integer', models.IntegerField(null=True, verbose_name='Integer', blank=True)),
134
+                ('value_boolean', models.NullBooleanField(verbose_name='Boolean')),
135
+                ('value_float', models.FloatField(null=True, verbose_name='Float', blank=True)),
136
+                ('value_richtext', models.TextField(null=True, verbose_name='Richtext', blank=True)),
137
+                ('value_date', models.DateField(null=True, verbose_name='Date', blank=True)),
138
+                ('value_file', models.FileField(max_length=255, null=True, upload_to=b'images/products/%Y/%m/', blank=True)),
139
+                ('value_image', models.ImageField(max_length=255, null=True, upload_to=b'images/products/%Y/%m/', blank=True)),
140
+                ('entity_object_id', models.PositiveIntegerField(null=True, editable=False, blank=True)),
141
+                ('attribute', models.ForeignKey(verbose_name='Attribute', to='catalogue.ProductAttribute')),
142
+                ('entity_content_type', models.ForeignKey(blank=True, editable=False, to='contenttypes.ContentType', null=True)),
143
+            ],
144
+            options={
145
+                'abstract': False,
146
+                'verbose_name': 'Product attribute value',
147
+                'verbose_name_plural': 'Product attribute values',
148
+            },
149
+            bases=(models.Model,),
150
+        ),
151
+        migrations.AddField(
152
+            model_name='product',
153
+            name='attributes',
154
+            field=models.ManyToManyField(to='catalogue.ProductAttribute', verbose_name='Attributes', through='catalogue.ProductAttributeValue'),
155
+            preserve_default=True,
156
+        ),
157
+        migrations.AddField(
158
+            model_name='productattributevalue',
159
+            name='product',
160
+            field=models.ForeignKey(verbose_name='Product', to='catalogue.Product'),
161
+            preserve_default=True,
162
+        ),
163
+        migrations.AddField(
164
+            model_name='productattributevalue',
165
+            name='value_option',
166
+            field=models.ForeignKey(verbose_name='Value Option', blank=True, to='catalogue.AttributeOption', null=True),
167
+            preserve_default=True,
168
+        ),
169
+        migrations.AlterUniqueTogether(
170
+            name='productattributevalue',
171
+            unique_together=set([(b'attribute', b'product')]),
172
+        ),
173
+        migrations.CreateModel(
174
+            name='ProductCategory',
175
+            fields=[
176
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
177
+                ('category', models.ForeignKey(verbose_name='Category', to='catalogue.Category')),
178
+            ],
179
+            options={
180
+                'ordering': [b'product', b'category'],
181
+                'abstract': False,
182
+                'verbose_name': 'Product category',
183
+                'verbose_name_plural': 'Product categories',
184
+            },
185
+            bases=(models.Model,),
186
+        ),
187
+        migrations.AddField(
188
+            model_name='product',
189
+            name='categories',
190
+            field=models.ManyToManyField(to='catalogue.Category', verbose_name='Categories', through='catalogue.ProductCategory'),
191
+            preserve_default=True,
192
+        ),
193
+        migrations.AddField(
194
+            model_name='productcategory',
195
+            name='product',
196
+            field=models.ForeignKey(verbose_name='Product', to='catalogue.Product'),
197
+            preserve_default=True,
198
+        ),
199
+        migrations.AlterUniqueTogether(
200
+            name='productcategory',
201
+            unique_together=set([(b'product', b'category')]),
202
+        ),
203
+        migrations.CreateModel(
204
+            name='ProductClass',
205
+            fields=[
206
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
207
+                ('name', models.CharField(max_length=128, verbose_name='Name')),
208
+                ('slug', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Slug')),
209
+                ('requires_shipping', models.BooleanField(default=True, verbose_name='Requires shipping?')),
210
+                ('track_stock', models.BooleanField(default=True, verbose_name='Track stock levels?')),
211
+                ('options', models.ManyToManyField(to='catalogue.Option', verbose_name='Options', blank=True)),
212
+            ],
213
+            options={
214
+                'ordering': [b'name'],
215
+                'abstract': False,
216
+                'verbose_name': 'Product class',
217
+                'verbose_name_plural': 'Product classes',
218
+            },
219
+            bases=(models.Model,),
220
+        ),
221
+        migrations.AddField(
222
+            model_name='productattribute',
223
+            name='product_class',
224
+            field=models.ForeignKey(verbose_name='Product Type', blank=True, to='catalogue.ProductClass', null=True),
225
+            preserve_default=True,
226
+        ),
227
+        migrations.AddField(
228
+            model_name='product',
229
+            name='product_class',
230
+            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, verbose_name='Product Type', to='catalogue.ProductClass', help_text='Choose what type of product this is', null=True),
231
+            preserve_default=True,
232
+        ),
233
+        migrations.CreateModel(
234
+            name='ProductImage',
235
+            fields=[
236
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
237
+                ('original', models.ImageField(upload_to=b'images/products/%Y/%m/', max_length=255, verbose_name='Original')),
238
+                ('caption', models.CharField(max_length=200, verbose_name='Caption', blank=True)),
239
+                ('display_order', models.PositiveIntegerField(default=0, help_text='An image with a display order of zero will be the primary image for a product', verbose_name='Display Order')),
240
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
241
+                ('product', models.ForeignKey(verbose_name='Product', to='catalogue.Product')),
242
+            ],
243
+            options={
244
+                'ordering': [b'display_order'],
245
+                'abstract': False,
246
+                'verbose_name': 'Product image',
247
+                'verbose_name_plural': 'Product images',
248
+            },
249
+            bases=(models.Model,),
250
+        ),
251
+        migrations.AlterUniqueTogether(
252
+            name='productimage',
253
+            unique_together=set([(b'product', b'display_order')]),
254
+        ),
255
+        migrations.CreateModel(
256
+            name='ProductRecommendation',
257
+            fields=[
258
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
259
+                ('ranking', models.PositiveSmallIntegerField(default=0, help_text='Determines order of the products. A product with a higher value will appear before one with a lower ranking.', verbose_name='Ranking')),
260
+            ],
261
+            options={
262
+                'ordering': [b'primary', b'-ranking'],
263
+                'abstract': False,
264
+                'verbose_name': 'Product recommendation',
265
+                'verbose_name_plural': 'Product recomendations',
266
+            },
267
+            bases=(models.Model,),
268
+        ),
269
+        migrations.AddField(
270
+            model_name='product',
271
+            name='recommended_products',
272
+            field=models.ManyToManyField(to='catalogue.Product', verbose_name='Recommended Products', through='catalogue.ProductRecommendation', blank=True),
273
+            preserve_default=True,
274
+        ),
275
+        migrations.AddField(
276
+            model_name='productrecommendation',
277
+            name='primary',
278
+            field=models.ForeignKey(verbose_name='Primary Product', to='catalogue.Product'),
279
+            preserve_default=True,
280
+        ),
281
+        migrations.AddField(
282
+            model_name='productrecommendation',
283
+            name='recommendation',
284
+            field=models.ForeignKey(verbose_name='Recommended Product', to='catalogue.Product'),
285
+            preserve_default=True,
286
+        ),
287
+        migrations.AlterUniqueTogether(
288
+            name='productrecommendation',
289
+            unique_together=set([(b'primary', b'recommendation')]),
290
+        ),
291
+    ]

+ 0
- 0
oscar/apps/catalogue/migrations/__init__.py Просмотреть файл


+ 68
- 0
oscar/apps/catalogue/reviews/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,68 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.core.validators
6
+import django.db.models.deletion
7
+from django.conf import settings
8
+
9
+
10
+class Migration(migrations.Migration):
11
+
12
+    dependencies = [
13
+        ('catalogue', '0001_initial'),
14
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15
+    ]
16
+
17
+    operations = [
18
+        migrations.CreateModel(
19
+            name='ProductReview',
20
+            fields=[
21
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
22
+                ('score', models.SmallIntegerField(verbose_name='Score', choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5)])),
23
+                ('title', models.CharField(max_length=255, verbose_name='Title', validators=[oscar.core.validators.non_whitespace])),
24
+                ('body', models.TextField(verbose_name='Body')),
25
+                ('name', models.CharField(max_length=255, verbose_name='Name', blank=True)),
26
+                ('email', models.EmailField(max_length=75, verbose_name='Email', blank=True)),
27
+                ('homepage', models.URLField(verbose_name='URL', blank=True)),
28
+                ('status', models.SmallIntegerField(default=1, verbose_name='Status', choices=[(0, 'Requires moderation'), (1, 'Approved'), (2, 'Rejected')])),
29
+                ('total_votes', models.IntegerField(default=0, verbose_name='Total Votes')),
30
+                ('delta_votes', models.IntegerField(default=0, verbose_name='Delta Votes', db_index=True)),
31
+                ('date_created', models.DateTimeField(auto_now_add=True)),
32
+                ('product', models.ForeignKey(to='catalogue.Product', on_delete=django.db.models.deletion.SET_NULL, null=True)),
33
+                ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)),
34
+            ],
35
+            options={
36
+                'ordering': [b'-delta_votes', b'id'],
37
+                'abstract': False,
38
+                'verbose_name': 'Product review',
39
+                'verbose_name_plural': 'Product reviews',
40
+            },
41
+            bases=(models.Model,),
42
+        ),
43
+        migrations.AlterUniqueTogether(
44
+            name='productreview',
45
+            unique_together=set([(b'product', b'user')]),
46
+        ),
47
+        migrations.CreateModel(
48
+            name='Vote',
49
+            fields=[
50
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
51
+                ('delta', models.SmallIntegerField(verbose_name='Delta', choices=[(1, 'Up'), (-1, 'Down')])),
52
+                ('date_created', models.DateTimeField(auto_now_add=True)),
53
+                ('review', models.ForeignKey(to='reviews.ProductReview')),
54
+                ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
55
+            ],
56
+            options={
57
+                'ordering': [b'-date_created'],
58
+                'abstract': False,
59
+                'verbose_name': 'Vote',
60
+                'verbose_name_plural': 'Votes',
61
+            },
62
+            bases=(models.Model,),
63
+        ),
64
+        migrations.AlterUniqueTogether(
65
+            name='vote',
66
+            unique_together=set([(b'user', b'review')]),
67
+        ),
68
+    ]

+ 0
- 0
oscar/apps/catalogue/reviews/migrations/__init__.py Просмотреть файл


+ 97
- 0
oscar/apps/customer/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,97 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields.autoslugfield
6
+from django.conf import settings
7
+
8
+
9
+class Migration(migrations.Migration):
10
+
11
+    dependencies = [
12
+        ('catalogue', '0001_initial'),
13
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14
+    ]
15
+
16
+    operations = [
17
+        migrations.CreateModel(
18
+            name='CommunicationEventType',
19
+            fields=[
20
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
21
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, separator='_', blank=True, help_text='Code used for looking up this event programmatically', unique=True, verbose_name='Code')),
22
+                ('name', models.CharField(help_text='This is just used for organisational purposes', max_length=255, verbose_name='Name')),
23
+                ('category', models.CharField(default='Order related', max_length=255, verbose_name='Category')),
24
+                ('email_subject_template', models.CharField(max_length=255, null=True, verbose_name='Email Subject Template', blank=True)),
25
+                ('email_body_template', models.TextField(null=True, verbose_name='Email Body Template', blank=True)),
26
+                ('email_body_html_template', models.TextField(help_text='HTML template', null=True, verbose_name='Email Body HTML Template', blank=True)),
27
+                ('sms_template', models.CharField(help_text='SMS template', max_length=170, null=True, verbose_name='SMS Template', blank=True)),
28
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
29
+                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date Updated')),
30
+            ],
31
+            options={
32
+                'abstract': False,
33
+                'verbose_name': 'Communication event type',
34
+                'verbose_name_plural': 'Communication event types',
35
+            },
36
+            bases=(models.Model,),
37
+        ),
38
+        migrations.CreateModel(
39
+            name='Email',
40
+            fields=[
41
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
42
+                ('subject', models.TextField(max_length=255, verbose_name='Subject')),
43
+                ('body_text', models.TextField(verbose_name='Body Text')),
44
+                ('body_html', models.TextField(verbose_name='Body HTML', blank=True)),
45
+                ('date_sent', models.DateTimeField(auto_now_add=True, verbose_name='Date Sent')),
46
+                ('user', models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL)),
47
+            ],
48
+            options={
49
+                'abstract': False,
50
+                'verbose_name': 'Email',
51
+                'verbose_name_plural': 'Emails',
52
+            },
53
+            bases=(models.Model,),
54
+        ),
55
+        migrations.CreateModel(
56
+            name='Notification',
57
+            fields=[
58
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
59
+                ('subject', models.CharField(max_length=255)),
60
+                ('body', models.TextField()),
61
+                ('category', models.CharField(max_length=255, blank=True)),
62
+                ('location', models.CharField(default=b'Inbox', max_length=32, choices=[(b'Inbox', 'Inbox'), (b'Archive', 'Archive')])),
63
+                ('date_sent', models.DateTimeField(auto_now_add=True)),
64
+                ('date_read', models.DateTimeField(null=True, blank=True)),
65
+                ('recipient', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
66
+                ('sender', models.ForeignKey(to=settings.AUTH_USER_MODEL, null=True)),
67
+            ],
68
+            options={
69
+                'ordering': (b'-date_sent',),
70
+                'abstract': False,
71
+                'verbose_name': 'Notification',
72
+                'verbose_name_plural': 'Notifications',
73
+            },
74
+            bases=(models.Model,),
75
+        ),
76
+        migrations.CreateModel(
77
+            name='ProductAlert',
78
+            fields=[
79
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
80
+                ('email', models.EmailField(db_index=True, max_length=75, verbose_name='Email', blank=True)),
81
+                ('key', models.CharField(db_index=True, max_length=128, verbose_name='Key', blank=True)),
82
+                ('status', models.CharField(default=b'Active', max_length=20, verbose_name='Status', choices=[(b'Unconfirmed', 'Not yet confirmed'), (b'Active', 'Active'), (b'Cancelled', 'Cancelled'), (b'Closed', 'Closed')])),
83
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')),
84
+                ('date_confirmed', models.DateTimeField(null=True, verbose_name='Date confirmed', blank=True)),
85
+                ('date_cancelled', models.DateTimeField(null=True, verbose_name='Date cancelled', blank=True)),
86
+                ('date_closed', models.DateTimeField(null=True, verbose_name='Date closed', blank=True)),
87
+                ('product', models.ForeignKey(to='catalogue.Product')),
88
+                ('user', models.ForeignKey(verbose_name='User', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
89
+            ],
90
+            options={
91
+                'abstract': False,
92
+                'verbose_name': 'Product alert',
93
+                'verbose_name_plural': 'Product alerts',
94
+            },
95
+            bases=(models.Model,),
96
+        ),
97
+    ]

+ 0
- 0
oscar/apps/customer/migrations/__init__.py Просмотреть файл


+ 281
- 0
oscar/apps/offer/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,281 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields.autoslugfield
6
+from decimal import Decimal
7
+import oscar.models.fields
8
+from django.conf import settings
9
+
10
+
11
+class Migration(migrations.Migration):
12
+
13
+    dependencies = [
14
+        ('catalogue', '0001_initial'),
15
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
16
+    ]
17
+
18
+    operations = [
19
+        migrations.CreateModel(
20
+            name='Benefit',
21
+            fields=[
22
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
23
+                ('type', models.CharField(blank=True, max_length=128, verbose_name='Type', choices=[(b'Percentage', "Discount is a percentage off of the product's value"), (b'Absolute', "Discount is a fixed amount off of the product's value"), (b'Multibuy', 'Discount is to give the cheapest product for free'), (b'Fixed price', 'Get the products that meet the condition for a fixed price'), (b'Shipping absolute', 'Discount is a fixed amount of the shipping cost'), (b'Shipping fixed price', 'Get shipping for a fixed price'), (b'Shipping percentage', 'Discount is a percentage off of the shipping cost')])),
24
+                ('value', oscar.models.fields.PositiveDecimalField(null=True, verbose_name='Value', max_digits=12, decimal_places=2, blank=True)),
25
+                ('max_affected_items', models.PositiveIntegerField(help_text='Set this to prevent the discount consuming all items within the range that are in the basket.', null=True, verbose_name='Max Affected Items', blank=True)),
26
+                ('proxy_class', oscar.models.fields.NullCharField(default=None, max_length=255, unique=True, verbose_name='Custom class')),
27
+            ],
28
+            options={
29
+                'verbose_name': 'Benefit',
30
+                'verbose_name_plural': 'Benefits',
31
+            },
32
+            bases=(models.Model,),
33
+        ),
34
+        migrations.CreateModel(
35
+            name='Condition',
36
+            fields=[
37
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
38
+                ('type', models.CharField(blank=True, max_length=128, verbose_name='Type', choices=[(b'Count', 'Depends on number of items in basket that are in condition range'), (b'Value', 'Depends on value of items in basket that are in condition range'), (b'Coverage', 'Needs to contain a set number of DISTINCT items from the condition range')])),
39
+                ('value', oscar.models.fields.PositiveDecimalField(null=True, verbose_name='Value', max_digits=12, decimal_places=2, blank=True)),
40
+                ('proxy_class', oscar.models.fields.NullCharField(default=None, max_length=255, unique=True, verbose_name='Custom class')),
41
+            ],
42
+            options={
43
+                'verbose_name': 'Condition',
44
+                'verbose_name_plural': 'Conditions',
45
+            },
46
+            bases=(models.Model,),
47
+        ),
48
+        migrations.CreateModel(
49
+            name='ConditionalOffer',
50
+            fields=[
51
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
52
+                ('name', models.CharField(help_text="This is displayed within the customer's basket", unique=True, max_length=128, verbose_name='Name')),
53
+                ('slug', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Slug')),
54
+                ('description', models.TextField(help_text='This is displayed on the offer browsing page', verbose_name='Description', blank=True)),
55
+                ('offer_type', models.CharField(default=b'Site', max_length=128, verbose_name='Type', choices=[(b'Site', 'Site offer - available to all users'), (b'Voucher', 'Voucher offer - only available after entering the appropriate voucher code'), (b'User', 'User offer - available to certain types of user'), (b'Session', 'Session offer - temporary offer, available for a user for the duration of their session')])),
56
+                ('status', models.CharField(default=b'Open', max_length=64, verbose_name='Status')),
57
+                ('priority', models.IntegerField(default=0, help_text='The highest priority offers are applied first', verbose_name='Priority')),
58
+                ('start_datetime', models.DateTimeField(null=True, verbose_name='Start date', blank=True)),
59
+                ('end_datetime', models.DateTimeField(help_text="Offers are active until the end of the 'end date'", null=True, verbose_name='End date', blank=True)),
60
+                ('max_global_applications', models.PositiveIntegerField(help_text='The number of times this offer can be used before it is unavailable', null=True, verbose_name='Max global applications', blank=True)),
61
+                ('max_user_applications', models.PositiveIntegerField(help_text='The number of times a single user can use this offer', null=True, verbose_name='Max user applications', blank=True)),
62
+                ('max_basket_applications', models.PositiveIntegerField(help_text='The number of times this offer can be applied to a basket (and order)', null=True, verbose_name='Max basket applications', blank=True)),
63
+                ('max_discount', models.DecimalField(decimal_places=2, max_digits=12, blank=True, help_text='When an offer has given more discount to orders than this threshold, then the offer becomes unavailable', null=True, verbose_name='Max discount')),
64
+                ('total_discount', models.DecimalField(default=Decimal('0.00'), verbose_name='Total Discount', max_digits=12, decimal_places=2)),
65
+                ('num_applications', models.PositiveIntegerField(default=0, verbose_name='Number of applications')),
66
+                ('num_orders', models.PositiveIntegerField(default=0, verbose_name='Number of Orders')),
67
+                ('redirect_url', oscar.models.fields.ExtendedURLField(verbose_name='URL redirect (optional)', blank=True)),
68
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
69
+                ('benefit', models.ForeignKey(verbose_name='Benefit', to='offer.Benefit')),
70
+                ('condition', models.ForeignKey(verbose_name='Condition', to='offer.Condition')),
71
+            ],
72
+            options={
73
+                'ordering': [b'-priority'],
74
+                'verbose_name': 'Conditional offer',
75
+                'verbose_name_plural': 'Conditional offers',
76
+            },
77
+            bases=(models.Model,),
78
+        ),
79
+        migrations.CreateModel(
80
+            name='Range',
81
+            fields=[
82
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
83
+                ('name', models.CharField(unique=True, max_length=128, verbose_name='Name')),
84
+                ('slug', models.SlugField(max_length=128, unique=True, null=True, verbose_name='Slug')),
85
+                ('description', models.TextField(blank=True)),
86
+                ('is_public', models.BooleanField(default=False, help_text='Public ranges have a customer-facing page', verbose_name='Is public?')),
87
+                ('includes_all_products', models.BooleanField(default=False, verbose_name='Includes all products?')),
88
+                ('proxy_class', oscar.models.fields.NullCharField(default=None, max_length=255, unique=True, verbose_name='Custom class')),
89
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
90
+                ('classes', models.ManyToManyField(to='catalogue.ProductClass', verbose_name='Product Types', blank=True)),
91
+                ('excluded_products', models.ManyToManyField(to='catalogue.Product', verbose_name='Excluded Products', blank=True)),
92
+                ('included_categories', models.ManyToManyField(to='catalogue.Category', verbose_name='Included Categories', blank=True)),
93
+            ],
94
+            options={
95
+                'verbose_name': 'Range',
96
+                'verbose_name_plural': 'Ranges',
97
+            },
98
+            bases=(models.Model,),
99
+        ),
100
+        migrations.AddField(
101
+            model_name='condition',
102
+            name='range',
103
+            field=models.ForeignKey(verbose_name='Range', blank=True, to='offer.Range', null=True),
104
+            preserve_default=True,
105
+        ),
106
+        migrations.AddField(
107
+            model_name='benefit',
108
+            name='range',
109
+            field=models.ForeignKey(verbose_name='Range', blank=True, to='offer.Range', null=True),
110
+            preserve_default=True,
111
+        ),
112
+        migrations.CreateModel(
113
+            name='RangeProduct',
114
+            fields=[
115
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
116
+                ('display_order', models.IntegerField(default=0)),
117
+                ('product', models.ForeignKey(to='catalogue.Product')),
118
+            ],
119
+            options={
120
+            },
121
+            bases=(models.Model,),
122
+        ),
123
+        migrations.AddField(
124
+            model_name='range',
125
+            name='included_products',
126
+            field=models.ManyToManyField(to='catalogue.Product', verbose_name='Included Products', through='offer.RangeProduct', blank=True),
127
+            preserve_default=True,
128
+        ),
129
+        migrations.AddField(
130
+            model_name='rangeproduct',
131
+            name='range',
132
+            field=models.ForeignKey(to='offer.Range'),
133
+            preserve_default=True,
134
+        ),
135
+        migrations.AlterUniqueTogether(
136
+            name='rangeproduct',
137
+            unique_together=set([(b'range', b'product')]),
138
+        ),
139
+        migrations.CreateModel(
140
+            name='RangeProductFileUpload',
141
+            fields=[
142
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
143
+                ('filepath', models.CharField(max_length=255, verbose_name='File Path')),
144
+                ('size', models.PositiveIntegerField(verbose_name='Size')),
145
+                ('date_uploaded', models.DateTimeField(auto_now_add=True, verbose_name='Date Uploaded')),
146
+                ('status', models.CharField(default=b'Pending', max_length=32, verbose_name='Status', choices=[(b'Pending', b'Pending'), (b'Failed', b'Failed'), (b'Processed', b'Processed')])),
147
+                ('error_message', models.CharField(max_length=255, verbose_name='Error Message', blank=True)),
148
+                ('date_processed', models.DateTimeField(null=True, verbose_name='Date Processed')),
149
+                ('num_new_skus', models.PositiveIntegerField(null=True, verbose_name='Number of New SKUs')),
150
+                ('num_unknown_skus', models.PositiveIntegerField(null=True, verbose_name='Number of Unknown SKUs')),
151
+                ('num_duplicate_skus', models.PositiveIntegerField(null=True, verbose_name='Number of Duplicate SKUs')),
152
+                ('range', models.ForeignKey(verbose_name='Range', to='offer.Range')),
153
+                ('uploaded_by', models.ForeignKey(verbose_name='Uploaded By', to=settings.AUTH_USER_MODEL)),
154
+            ],
155
+            options={
156
+                'ordering': (b'-date_uploaded',),
157
+                'verbose_name': 'Range Product Uploaded File',
158
+                'verbose_name_plural': 'Range Product Uploaded Files',
159
+            },
160
+            bases=(models.Model,),
161
+        ),
162
+        migrations.CreateModel(
163
+            name='AbsoluteDiscountBenefit',
164
+            fields=[
165
+            ],
166
+            options={
167
+                'verbose_name': 'Absolute discount benefit',
168
+                'proxy': True,
169
+                'verbose_name_plural': 'Absolute discount benefits',
170
+            },
171
+            bases=('offer.benefit',),
172
+        ),
173
+        migrations.CreateModel(
174
+            name='CountCondition',
175
+            fields=[
176
+            ],
177
+            options={
178
+                'verbose_name': 'Count condition',
179
+                'proxy': True,
180
+                'verbose_name_plural': 'Count conditions',
181
+            },
182
+            bases=('offer.condition',),
183
+        ),
184
+        migrations.CreateModel(
185
+            name='CoverageCondition',
186
+            fields=[
187
+            ],
188
+            options={
189
+                'verbose_name': 'Coverage Condition',
190
+                'proxy': True,
191
+                'verbose_name_plural': 'Coverage Conditions',
192
+            },
193
+            bases=('offer.condition',),
194
+        ),
195
+        migrations.CreateModel(
196
+            name='FixedPriceBenefit',
197
+            fields=[
198
+            ],
199
+            options={
200
+                'verbose_name': 'Fixed price benefit',
201
+                'proxy': True,
202
+                'verbose_name_plural': 'Fixed price benefits',
203
+            },
204
+            bases=('offer.benefit',),
205
+        ),
206
+        migrations.CreateModel(
207
+            name='MultibuyDiscountBenefit',
208
+            fields=[
209
+            ],
210
+            options={
211
+                'verbose_name': 'Multibuy discount benefit',
212
+                'proxy': True,
213
+                'verbose_name_plural': 'Multibuy discount benefits',
214
+            },
215
+            bases=('offer.benefit',),
216
+        ),
217
+        migrations.CreateModel(
218
+            name='PercentageDiscountBenefit',
219
+            fields=[
220
+            ],
221
+            options={
222
+                'verbose_name': 'Percentage discount benefit',
223
+                'proxy': True,
224
+                'verbose_name_plural': 'Percentage discount benefits',
225
+            },
226
+            bases=('offer.benefit',),
227
+        ),
228
+        migrations.CreateModel(
229
+            name='ShippingBenefit',
230
+            fields=[
231
+            ],
232
+            options={
233
+                'proxy': True,
234
+            },
235
+            bases=('offer.benefit',),
236
+        ),
237
+        migrations.CreateModel(
238
+            name='ShippingAbsoluteDiscountBenefit',
239
+            fields=[
240
+            ],
241
+            options={
242
+                'verbose_name': 'Shipping absolute discount benefit',
243
+                'proxy': True,
244
+                'verbose_name_plural': 'Shipping absolute discount benefits',
245
+            },
246
+            bases=('offer.shippingbenefit',),
247
+        ),
248
+        migrations.CreateModel(
249
+            name='ShippingFixedPriceBenefit',
250
+            fields=[
251
+            ],
252
+            options={
253
+                'verbose_name': 'Fixed price shipping benefit',
254
+                'proxy': True,
255
+                'verbose_name_plural': 'Fixed price shipping benefits',
256
+            },
257
+            bases=('offer.shippingbenefit',),
258
+        ),
259
+        migrations.CreateModel(
260
+            name='ShippingPercentageDiscountBenefit',
261
+            fields=[
262
+            ],
263
+            options={
264
+                'verbose_name': 'Shipping percentage discount benefit',
265
+                'proxy': True,
266
+                'verbose_name_plural': 'Shipping percentage discount benefits',
267
+            },
268
+            bases=('offer.shippingbenefit',),
269
+        ),
270
+        migrations.CreateModel(
271
+            name='ValueCondition',
272
+            fields=[
273
+            ],
274
+            options={
275
+                'verbose_name': 'Value condition',
276
+                'proxy': True,
277
+                'verbose_name_plural': 'Value conditions',
278
+            },
279
+            bases=('offer.condition',),
280
+        ),
281
+    ]

+ 0
- 0
oscar/apps/offer/migrations/__init__.py Просмотреть файл


+ 394
- 0
oscar/apps/order/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,394 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields.autoslugfield
6
+import oscar.models.fields
7
+import django.db.models.deletion
8
+from django.conf import settings
9
+
10
+
11
+class Migration(migrations.Migration):
12
+
13
+    dependencies = [
14
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15
+        ('address', '0001_initial'),
16
+        ('sites', '__latest__'),
17
+        ('partner', '0001_initial'),
18
+        ('customer', '0001_initial'),
19
+        ('catalogue', '0001_initial'),
20
+        ('basket', '0001_initial'),
21
+    ]
22
+
23
+    operations = [
24
+        migrations.CreateModel(
25
+            name='BillingAddress',
26
+            fields=[
27
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
28
+                ('title', models.CharField(blank=True, max_length=64, verbose_name='Title', choices=[(b'Mr', 'Mr'), (b'Miss', 'Miss'), (b'Mrs', 'Mrs'), (b'Ms', 'Ms'), (b'Dr', 'Dr')])),
29
+                ('first_name', models.CharField(max_length=255, verbose_name='First name', blank=True)),
30
+                ('last_name', models.CharField(max_length=255, verbose_name='Last name', blank=True)),
31
+                ('line1', models.CharField(max_length=255, verbose_name='First line of address')),
32
+                ('line2', models.CharField(max_length=255, verbose_name='Second line of address', blank=True)),
33
+                ('line3', models.CharField(max_length=255, verbose_name='Third line of address', blank=True)),
34
+                ('line4', models.CharField(max_length=255, verbose_name='City', blank=True)),
35
+                ('state', models.CharField(max_length=255, verbose_name='State/County', blank=True)),
36
+                ('postcode', oscar.models.fields.UppercaseCharField(max_length=64, verbose_name='Post/Zip-code', blank=True)),
37
+                ('search_text', models.TextField(verbose_name='Search text - used only for searching addresses', editable=False)),
38
+                ('country', models.ForeignKey(verbose_name='Country', to='address.Country')),
39
+            ],
40
+            options={
41
+                'abstract': False,
42
+                'verbose_name': 'Billing address',
43
+                'verbose_name_plural': 'Billing addresses',
44
+            },
45
+            bases=(models.Model,),
46
+        ),
47
+        migrations.CreateModel(
48
+            name='CommunicationEvent',
49
+            fields=[
50
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
51
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date')),
52
+                ('event_type', models.ForeignKey(verbose_name='Event Type', to='customer.CommunicationEventType')),
53
+            ],
54
+            options={
55
+                'ordering': [b'-date_created'],
56
+                'abstract': False,
57
+                'verbose_name': 'Communication Event',
58
+                'verbose_name_plural': 'Communication Events',
59
+            },
60
+            bases=(models.Model,),
61
+        ),
62
+        migrations.CreateModel(
63
+            name='Line',
64
+            fields=[
65
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
66
+                ('partner_name', models.CharField(max_length=128, verbose_name='Partner name', blank=True)),
67
+                ('partner_sku', models.CharField(max_length=128, verbose_name='Partner SKU')),
68
+                ('partner_line_reference', models.CharField(help_text='This is the item number that the partner uses within their system', max_length=128, verbose_name='Partner reference', blank=True)),
69
+                ('partner_line_notes', models.TextField(verbose_name='Partner Notes', blank=True)),
70
+                ('title', models.CharField(max_length=255, verbose_name='Title')),
71
+                ('upc', models.CharField(max_length=128, null=True, verbose_name='UPC', blank=True)),
72
+                ('quantity', models.PositiveIntegerField(default=1, verbose_name='Quantity')),
73
+                ('line_price_incl_tax', models.DecimalField(verbose_name='Price (inc. tax)', max_digits=12, decimal_places=2)),
74
+                ('line_price_excl_tax', models.DecimalField(verbose_name='Price (excl. tax)', max_digits=12, decimal_places=2)),
75
+                ('line_price_before_discounts_incl_tax', models.DecimalField(verbose_name='Price before discounts (inc. tax)', max_digits=12, decimal_places=2)),
76
+                ('line_price_before_discounts_excl_tax', models.DecimalField(verbose_name='Price before discounts (excl. tax)', max_digits=12, decimal_places=2)),
77
+                ('unit_cost_price', models.DecimalField(null=True, verbose_name='Unit Cost Price', max_digits=12, decimal_places=2, blank=True)),
78
+                ('unit_price_incl_tax', models.DecimalField(null=True, verbose_name='Unit Price (inc. tax)', max_digits=12, decimal_places=2, blank=True)),
79
+                ('unit_price_excl_tax', models.DecimalField(null=True, verbose_name='Unit Price (excl. tax)', max_digits=12, decimal_places=2, blank=True)),
80
+                ('unit_retail_price', models.DecimalField(null=True, verbose_name='Unit Retail Price', max_digits=12, decimal_places=2, blank=True)),
81
+                ('status', models.CharField(max_length=255, verbose_name='Status', blank=True)),
82
+                ('est_dispatch_date', models.DateField(null=True, verbose_name='Estimated Dispatch Date', blank=True)),
83
+                ('partner', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Partner', blank=True, to='partner.Partner', null=True)),
84
+                ('product', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Product', blank=True, to='catalogue.Product', null=True)),
85
+                ('stockrecord', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Stock record', blank=True, to='partner.StockRecord', null=True)),
86
+            ],
87
+            options={
88
+                'abstract': False,
89
+                'verbose_name': 'Order Line',
90
+                'verbose_name_plural': 'Order Lines',
91
+            },
92
+            bases=(models.Model,),
93
+        ),
94
+        migrations.CreateModel(
95
+            name='LineAttribute',
96
+            fields=[
97
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
98
+                ('type', models.CharField(max_length=128, verbose_name='Type')),
99
+                ('value', models.CharField(max_length=255, verbose_name='Value')),
100
+                ('line', models.ForeignKey(verbose_name='Line', to='order.Line')),
101
+                ('option', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Option', to='catalogue.Option', null=True)),
102
+            ],
103
+            options={
104
+                'abstract': False,
105
+                'verbose_name': 'Line Attribute',
106
+                'verbose_name_plural': 'Line Attributes',
107
+            },
108
+            bases=(models.Model,),
109
+        ),
110
+        migrations.CreateModel(
111
+            name='LinePrice',
112
+            fields=[
113
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
114
+                ('quantity', models.PositiveIntegerField(default=1, verbose_name='Quantity')),
115
+                ('price_incl_tax', models.DecimalField(verbose_name='Price (inc. tax)', max_digits=12, decimal_places=2)),
116
+                ('price_excl_tax', models.DecimalField(verbose_name='Price (excl. tax)', max_digits=12, decimal_places=2)),
117
+                ('shipping_incl_tax', models.DecimalField(default=0, verbose_name='Shiping (inc. tax)', max_digits=12, decimal_places=2)),
118
+                ('shipping_excl_tax', models.DecimalField(default=0, verbose_name='Shipping (excl. tax)', max_digits=12, decimal_places=2)),
119
+                ('line', models.ForeignKey(verbose_name='Line', to='order.Line')),
120
+            ],
121
+            options={
122
+                'ordering': (b'id',),
123
+                'abstract': False,
124
+                'verbose_name': 'Line Price',
125
+                'verbose_name_plural': 'Line Prices',
126
+            },
127
+            bases=(models.Model,),
128
+        ),
129
+        migrations.CreateModel(
130
+            name='Order',
131
+            fields=[
132
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
133
+                ('number', models.CharField(unique=True, max_length=128, verbose_name='Order number', db_index=True)),
134
+                ('currency', models.CharField(default=b'GBP', max_length=12, verbose_name='Currency')),
135
+                ('total_incl_tax', models.DecimalField(verbose_name='Order total (inc. tax)', max_digits=12, decimal_places=2)),
136
+                ('total_excl_tax', models.DecimalField(verbose_name='Order total (excl. tax)', max_digits=12, decimal_places=2)),
137
+                ('shipping_incl_tax', models.DecimalField(default=0, verbose_name='Shipping charge (inc. tax)', max_digits=12, decimal_places=2)),
138
+                ('shipping_excl_tax', models.DecimalField(default=0, verbose_name='Shipping charge (excl. tax)', max_digits=12, decimal_places=2)),
139
+                ('shipping_method', models.CharField(max_length=128, verbose_name='Shipping method', blank=True)),
140
+                ('shipping_code', models.CharField(default=b'', max_length=128, blank=True)),
141
+                ('status', models.CharField(max_length=100, verbose_name='Status', blank=True)),
142
+                ('guest_email', models.EmailField(max_length=75, verbose_name='Guest email address', blank=True)),
143
+                ('date_placed', models.DateTimeField(auto_now_add=True, db_index=True)),
144
+                ('basket', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Basket', blank=True, to='basket.Basket', null=True)),
145
+                ('billing_address', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Billing Address', blank=True, to='order.BillingAddress', null=True)),
146
+                ('site', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Site', to='sites.Site', null=True)),
147
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='User', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
148
+            ],
149
+            options={
150
+                'ordering': [b'-date_placed'],
151
+                'abstract': False,
152
+                'verbose_name': 'Order',
153
+                'verbose_name_plural': 'Orders',
154
+            },
155
+            bases=(models.Model,),
156
+        ),
157
+        migrations.AddField(
158
+            model_name='lineprice',
159
+            name='order',
160
+            field=models.ForeignKey(verbose_name='Option', to='order.Order'),
161
+            preserve_default=True,
162
+        ),
163
+        migrations.AddField(
164
+            model_name='line',
165
+            name='order',
166
+            field=models.ForeignKey(verbose_name='Order', to='order.Order'),
167
+            preserve_default=True,
168
+        ),
169
+        migrations.AddField(
170
+            model_name='communicationevent',
171
+            name='order',
172
+            field=models.ForeignKey(verbose_name='Order', to='order.Order'),
173
+            preserve_default=True,
174
+        ),
175
+        migrations.CreateModel(
176
+            name='OrderDiscount',
177
+            fields=[
178
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
179
+                ('category', models.CharField(default=b'Basket', max_length=64, verbose_name='Discount category', choices=[(b'Basket', 'Basket'), (b'Shipping', 'Shipping'), (b'Deferred', 'Deferred')])),
180
+                ('offer_id', models.PositiveIntegerField(null=True, verbose_name='Offer ID', blank=True)),
181
+                ('offer_name', models.CharField(db_index=True, max_length=128, verbose_name='Offer name', blank=True)),
182
+                ('voucher_id', models.PositiveIntegerField(null=True, verbose_name='Voucher ID', blank=True)),
183
+                ('voucher_code', models.CharField(db_index=True, max_length=128, verbose_name='Code', blank=True)),
184
+                ('frequency', models.PositiveIntegerField(null=True, verbose_name='Frequency')),
185
+                ('amount', models.DecimalField(default=0, verbose_name='Amount', max_digits=12, decimal_places=2)),
186
+                ('message', models.TextField(blank=True)),
187
+                ('order', models.ForeignKey(verbose_name='Order', to='order.Order')),
188
+            ],
189
+            options={
190
+                'abstract': False,
191
+                'verbose_name': 'Order Discount',
192
+                'verbose_name_plural': 'Order Discounts',
193
+            },
194
+            bases=(models.Model,),
195
+        ),
196
+        migrations.CreateModel(
197
+            name='OrderNote',
198
+            fields=[
199
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
200
+                ('note_type', models.CharField(max_length=128, verbose_name='Note Type', blank=True)),
201
+                ('message', models.TextField(verbose_name='Message')),
202
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
203
+                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date Updated')),
204
+                ('order', models.ForeignKey(verbose_name='Order', to='order.Order')),
205
+                ('user', models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL, null=True)),
206
+            ],
207
+            options={
208
+                'abstract': False,
209
+                'verbose_name': 'Order Note',
210
+                'verbose_name_plural': 'Order Notes',
211
+            },
212
+            bases=(models.Model,),
213
+        ),
214
+        migrations.CreateModel(
215
+            name='PaymentEvent',
216
+            fields=[
217
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
218
+                ('amount', models.DecimalField(verbose_name='Amount', max_digits=12, decimal_places=2)),
219
+                ('reference', models.CharField(max_length=128, verbose_name='Reference', blank=True)),
220
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')),
221
+                ('order', models.ForeignKey(verbose_name='Order', to='order.Order')),
222
+            ],
223
+            options={
224
+                'ordering': [b'-date_created'],
225
+                'abstract': False,
226
+                'verbose_name': 'Payment Event',
227
+                'verbose_name_plural': 'Payment Events',
228
+            },
229
+            bases=(models.Model,),
230
+        ),
231
+        migrations.CreateModel(
232
+            name='PaymentEventQuantity',
233
+            fields=[
234
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
235
+                ('quantity', models.PositiveIntegerField(verbose_name='Quantity')),
236
+            ],
237
+            options={
238
+                'verbose_name': 'Payment Event Quantity',
239
+                'verbose_name_plural': 'Payment Event Quantities',
240
+            },
241
+            bases=(models.Model,),
242
+        ),
243
+        migrations.AddField(
244
+            model_name='paymentevent',
245
+            name='lines',
246
+            field=models.ManyToManyField(to='order.Line', verbose_name='Lines', through='order.PaymentEventQuantity'),
247
+            preserve_default=True,
248
+        ),
249
+        migrations.AddField(
250
+            model_name='paymenteventquantity',
251
+            name='event',
252
+            field=models.ForeignKey(verbose_name='Event', to='order.PaymentEvent'),
253
+            preserve_default=True,
254
+        ),
255
+        migrations.AddField(
256
+            model_name='paymenteventquantity',
257
+            name='line',
258
+            field=models.ForeignKey(verbose_name='Line', to='order.Line'),
259
+            preserve_default=True,
260
+        ),
261
+        migrations.AlterUniqueTogether(
262
+            name='paymenteventquantity',
263
+            unique_together=set([(b'event', b'line')]),
264
+        ),
265
+        migrations.CreateModel(
266
+            name='PaymentEventType',
267
+            fields=[
268
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
269
+                ('name', models.CharField(unique=True, max_length=128, verbose_name='Name')),
270
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Code')),
271
+            ],
272
+            options={
273
+                'ordering': (b'name',),
274
+                'abstract': False,
275
+                'verbose_name': 'Payment Event Type',
276
+                'verbose_name_plural': 'Payment Event Types',
277
+            },
278
+            bases=(models.Model,),
279
+        ),
280
+        migrations.AddField(
281
+            model_name='paymentevent',
282
+            name='event_type',
283
+            field=models.ForeignKey(verbose_name='Event Type', to='order.PaymentEventType'),
284
+            preserve_default=True,
285
+        ),
286
+        migrations.CreateModel(
287
+            name='ShippingAddress',
288
+            fields=[
289
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
290
+                ('title', models.CharField(blank=True, max_length=64, verbose_name='Title', choices=[(b'Mr', 'Mr'), (b'Miss', 'Miss'), (b'Mrs', 'Mrs'), (b'Ms', 'Ms'), (b'Dr', 'Dr')])),
291
+                ('first_name', models.CharField(max_length=255, verbose_name='First name', blank=True)),
292
+                ('last_name', models.CharField(max_length=255, verbose_name='Last name', blank=True)),
293
+                ('line1', models.CharField(max_length=255, verbose_name='First line of address')),
294
+                ('line2', models.CharField(max_length=255, verbose_name='Second line of address', blank=True)),
295
+                ('line3', models.CharField(max_length=255, verbose_name='Third line of address', blank=True)),
296
+                ('line4', models.CharField(max_length=255, verbose_name='City', blank=True)),
297
+                ('state', models.CharField(max_length=255, verbose_name='State/County', blank=True)),
298
+                ('postcode', oscar.models.fields.UppercaseCharField(max_length=64, verbose_name='Post/Zip-code', blank=True)),
299
+                ('search_text', models.TextField(verbose_name='Search text - used only for searching addresses', editable=False)),
300
+                ('phone_number', oscar.models.fields.PhoneNumberField(help_text='In case we need to call you about your order', verbose_name='Phone number', blank=True)),
301
+                ('notes', models.TextField(help_text='Tell us anything we should know when delivering your order.', verbose_name='Instructions', blank=True)),
302
+                ('country', models.ForeignKey(verbose_name='Country', to='address.Country')),
303
+            ],
304
+            options={
305
+                'abstract': False,
306
+                'verbose_name': 'Shipping address',
307
+                'verbose_name_plural': 'Shipping addresses',
308
+            },
309
+            bases=(models.Model,),
310
+        ),
311
+        migrations.AddField(
312
+            model_name='order',
313
+            name='shipping_address',
314
+            field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Shipping Address', blank=True, to='order.ShippingAddress', null=True),
315
+            preserve_default=True,
316
+        ),
317
+        migrations.CreateModel(
318
+            name='ShippingEvent',
319
+            fields=[
320
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
321
+                ('notes', models.TextField(help_text='This could be the dispatch reference, or a tracking number', verbose_name='Event notes', blank=True)),
322
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
323
+                ('order', models.ForeignKey(verbose_name='Order', to='order.Order')),
324
+            ],
325
+            options={
326
+                'ordering': [b'-date_created'],
327
+                'abstract': False,
328
+                'verbose_name': 'Shipping Event',
329
+                'verbose_name_plural': 'Shipping Events',
330
+            },
331
+            bases=(models.Model,),
332
+        ),
333
+        migrations.AddField(
334
+            model_name='paymentevent',
335
+            name='shipping_event',
336
+            field=models.ForeignKey(to='order.ShippingEvent', null=True),
337
+            preserve_default=True,
338
+        ),
339
+        migrations.CreateModel(
340
+            name='ShippingEventQuantity',
341
+            fields=[
342
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
343
+                ('quantity', models.PositiveIntegerField(verbose_name='Quantity')),
344
+            ],
345
+            options={
346
+                'verbose_name': 'Shipping Event Quantity',
347
+                'verbose_name_plural': 'Shipping Event Quantities',
348
+            },
349
+            bases=(models.Model,),
350
+        ),
351
+        migrations.AddField(
352
+            model_name='shippingevent',
353
+            name='lines',
354
+            field=models.ManyToManyField(to='order.Line', verbose_name='Lines', through='order.ShippingEventQuantity'),
355
+            preserve_default=True,
356
+        ),
357
+        migrations.AddField(
358
+            model_name='shippingeventquantity',
359
+            name='event',
360
+            field=models.ForeignKey(verbose_name='Event', to='order.ShippingEvent'),
361
+            preserve_default=True,
362
+        ),
363
+        migrations.AddField(
364
+            model_name='shippingeventquantity',
365
+            name='line',
366
+            field=models.ForeignKey(verbose_name='Line', to='order.Line'),
367
+            preserve_default=True,
368
+        ),
369
+        migrations.AlterUniqueTogether(
370
+            name='shippingeventquantity',
371
+            unique_together=set([(b'event', b'line')]),
372
+        ),
373
+        migrations.CreateModel(
374
+            name='ShippingEventType',
375
+            fields=[
376
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
377
+                ('name', models.CharField(unique=True, max_length=255, verbose_name='Name')),
378
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Code')),
379
+            ],
380
+            options={
381
+                'ordering': (b'name',),
382
+                'abstract': False,
383
+                'verbose_name': 'Shipping Event Type',
384
+                'verbose_name_plural': 'Shipping Event Types',
385
+            },
386
+            bases=(models.Model,),
387
+        ),
388
+        migrations.AddField(
389
+            model_name='shippingevent',
390
+            name='event_type',
391
+            field=models.ForeignKey(verbose_name='Event Type', to='order.ShippingEventType'),
392
+            preserve_default=True,
393
+        ),
394
+    ]

+ 0
- 0
oscar/apps/order/migrations/__init__.py Просмотреть файл


+ 110
- 0
oscar/apps/partner/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,110 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields.autoslugfield
6
+from django.conf import settings
7
+import oscar.models.fields
8
+
9
+
10
+class Migration(migrations.Migration):
11
+
12
+    dependencies = [
13
+        ('catalogue', '0001_initial'),
14
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15
+        ('address', '0001_initial'),
16
+    ]
17
+
18
+    operations = [
19
+        migrations.CreateModel(
20
+            name='Partner',
21
+            fields=[
22
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
23
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Code')),
24
+                ('name', models.CharField(max_length=128, verbose_name='Name', blank=True)),
25
+                ('users', models.ManyToManyField(to=settings.AUTH_USER_MODEL, null=True, verbose_name='Users', blank=True)),
26
+            ],
27
+            options={
28
+                'abstract': False,
29
+                'verbose_name': 'Fulfillment partner',
30
+                'verbose_name_plural': 'Fulfillment partners',
31
+                'permissions': ((b'dashboard_access', b'Can access dashboard'),),
32
+            },
33
+            bases=(models.Model,),
34
+        ),
35
+        migrations.CreateModel(
36
+            name='PartnerAddress',
37
+            fields=[
38
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
39
+                ('title', models.CharField(blank=True, max_length=64, verbose_name='Title', choices=[(b'Mr', 'Mr'), (b'Miss', 'Miss'), (b'Mrs', 'Mrs'), (b'Ms', 'Ms'), (b'Dr', 'Dr')])),
40
+                ('first_name', models.CharField(max_length=255, verbose_name='First name', blank=True)),
41
+                ('last_name', models.CharField(max_length=255, verbose_name='Last name', blank=True)),
42
+                ('line1', models.CharField(max_length=255, verbose_name='First line of address')),
43
+                ('line2', models.CharField(max_length=255, verbose_name='Second line of address', blank=True)),
44
+                ('line3', models.CharField(max_length=255, verbose_name='Third line of address', blank=True)),
45
+                ('line4', models.CharField(max_length=255, verbose_name='City', blank=True)),
46
+                ('state', models.CharField(max_length=255, verbose_name='State/County', blank=True)),
47
+                ('postcode', oscar.models.fields.UppercaseCharField(max_length=64, verbose_name='Post/Zip-code', blank=True)),
48
+                ('search_text', models.TextField(verbose_name='Search text - used only for searching addresses', editable=False)),
49
+                ('country', models.ForeignKey(verbose_name='Country', to='address.Country')),
50
+                ('partner', models.ForeignKey(verbose_name='Partner', to='partner.Partner')),
51
+            ],
52
+            options={
53
+                'abstract': False,
54
+                'verbose_name': 'Partner address',
55
+                'verbose_name_plural': 'Partner addresses',
56
+            },
57
+            bases=(models.Model,),
58
+        ),
59
+        migrations.CreateModel(
60
+            name='StockAlert',
61
+            fields=[
62
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
63
+                ('threshold', models.PositiveIntegerField(verbose_name='Threshold')),
64
+                ('status', models.CharField(default=b'Open', max_length=128, verbose_name='Status', choices=[(b'Open', 'Open'), (b'Closed', 'Closed')])),
65
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
66
+                ('date_closed', models.DateTimeField(null=True, verbose_name='Date Closed', blank=True)),
67
+            ],
68
+            options={
69
+                'ordering': (b'-date_created',),
70
+                'abstract': False,
71
+                'verbose_name': 'Stock alert',
72
+                'verbose_name_plural': 'Stock alerts',
73
+            },
74
+            bases=(models.Model,),
75
+        ),
76
+        migrations.CreateModel(
77
+            name='StockRecord',
78
+            fields=[
79
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
80
+                ('partner_sku', models.CharField(max_length=128, verbose_name='Partner SKU')),
81
+                ('price_currency', models.CharField(default=b'GBP', max_length=12, verbose_name='Currency')),
82
+                ('price_excl_tax', models.DecimalField(null=True, verbose_name='Price (excl. tax)', max_digits=12, decimal_places=2, blank=True)),
83
+                ('price_retail', models.DecimalField(null=True, verbose_name='Price (retail)', max_digits=12, decimal_places=2, blank=True)),
84
+                ('cost_price', models.DecimalField(null=True, verbose_name='Cost Price', max_digits=12, decimal_places=2, blank=True)),
85
+                ('num_in_stock', models.PositiveIntegerField(null=True, verbose_name='Number in stock', blank=True)),
86
+                ('num_allocated', models.IntegerField(null=True, verbose_name='Number allocated', blank=True)),
87
+                ('low_stock_threshold', models.PositiveIntegerField(null=True, verbose_name='Low Stock Threshold', blank=True)),
88
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')),
89
+                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated', db_index=True)),
90
+                ('partner', models.ForeignKey(verbose_name='Partner', to='partner.Partner')),
91
+                ('product', models.ForeignKey(verbose_name='Product', to='catalogue.Product')),
92
+            ],
93
+            options={
94
+                'abstract': False,
95
+                'verbose_name': 'Stock record',
96
+                'verbose_name_plural': 'Stock records',
97
+            },
98
+            bases=(models.Model,),
99
+        ),
100
+        migrations.AddField(
101
+            model_name='stockalert',
102
+            name='stockrecord',
103
+            field=models.ForeignKey(verbose_name='Stock Record', to='partner.StockRecord'),
104
+            preserve_default=True,
105
+        ),
106
+        migrations.AlterUniqueTogether(
107
+            name='stockrecord',
108
+            unique_together=set([(b'partner', b'partner_sku')]),
109
+        ),
110
+    ]

+ 0
- 0
oscar/apps/partner/migrations/__init__.py Просмотреть файл


+ 94
- 0
oscar/apps/payment/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,94 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields.autoslugfield
6
+from django.conf import settings
7
+from decimal import Decimal
8
+
9
+
10
+class Migration(migrations.Migration):
11
+
12
+    dependencies = [
13
+        ('order', '0001_initial'),
14
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15
+    ]
16
+
17
+    operations = [
18
+        migrations.CreateModel(
19
+            name='Bankcard',
20
+            fields=[
21
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
22
+                ('card_type', models.CharField(max_length=128, verbose_name='Card Type')),
23
+                ('name', models.CharField(max_length=255, verbose_name='Name', blank=True)),
24
+                ('number', models.CharField(max_length=32, verbose_name='Number')),
25
+                ('expiry_date', models.DateField(verbose_name='Expiry Date')),
26
+                ('partner_reference', models.CharField(max_length=255, verbose_name='Partner Reference', blank=True)),
27
+                ('user', models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL)),
28
+            ],
29
+            options={
30
+                'abstract': False,
31
+                'verbose_name': 'Bankcard',
32
+                'verbose_name_plural': 'Bankcards',
33
+            },
34
+            bases=(models.Model,),
35
+        ),
36
+        migrations.CreateModel(
37
+            name='Source',
38
+            fields=[
39
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
40
+                ('currency', models.CharField(default=b'GBP', max_length=12, verbose_name='Currency')),
41
+                ('amount_allocated', models.DecimalField(default=Decimal('0.00'), verbose_name='Amount Allocated', max_digits=12, decimal_places=2)),
42
+                ('amount_debited', models.DecimalField(default=Decimal('0.00'), verbose_name='Amount Debited', max_digits=12, decimal_places=2)),
43
+                ('amount_refunded', models.DecimalField(default=Decimal('0.00'), verbose_name='Amount Refunded', max_digits=12, decimal_places=2)),
44
+                ('reference', models.CharField(max_length=128, verbose_name='Reference', blank=True)),
45
+                ('label', models.CharField(max_length=128, verbose_name='Label', blank=True)),
46
+                ('order', models.ForeignKey(verbose_name='Order', to='order.Order')),
47
+            ],
48
+            options={
49
+                'abstract': False,
50
+                'verbose_name': 'Source',
51
+                'verbose_name_plural': 'Sources',
52
+            },
53
+            bases=(models.Model,),
54
+        ),
55
+        migrations.CreateModel(
56
+            name='SourceType',
57
+            fields=[
58
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
59
+                ('name', models.CharField(max_length=128, verbose_name='Name')),
60
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, help_text='This is used within forms to identify this source type', unique=True, verbose_name='Code')),
61
+            ],
62
+            options={
63
+                'abstract': False,
64
+                'verbose_name': 'Source Type',
65
+                'verbose_name_plural': 'Source Types',
66
+            },
67
+            bases=(models.Model,),
68
+        ),
69
+        migrations.AddField(
70
+            model_name='source',
71
+            name='source_type',
72
+            field=models.ForeignKey(verbose_name='Source Type', to='payment.SourceType'),
73
+            preserve_default=True,
74
+        ),
75
+        migrations.CreateModel(
76
+            name='Transaction',
77
+            fields=[
78
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
79
+                ('txn_type', models.CharField(max_length=128, verbose_name='Type', blank=True)),
80
+                ('amount', models.DecimalField(verbose_name='Amount', max_digits=12, decimal_places=2)),
81
+                ('reference', models.CharField(max_length=128, verbose_name='Reference', blank=True)),
82
+                ('status', models.CharField(max_length=128, verbose_name='Status', blank=True)),
83
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
84
+                ('source', models.ForeignKey(verbose_name='Source', to='payment.Source')),
85
+            ],
86
+            options={
87
+                'ordering': [b'-date_created'],
88
+                'abstract': False,
89
+                'verbose_name': 'Transaction',
90
+                'verbose_name_plural': 'Transactions',
91
+            },
92
+            bases=(models.Model,),
93
+        ),
94
+    ]

+ 0
- 0
oscar/apps/payment/migrations/__init__.py Просмотреть файл


+ 217
- 0
oscar/apps/promotions/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,217 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('catalogue', '0001_initial'),
12
+        ('contenttypes', '__latest__'),
13
+    ]
14
+
15
+    operations = [
16
+        migrations.CreateModel(
17
+            name='AutomaticProductList',
18
+            fields=[
19
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
20
+                ('name', models.CharField(max_length=255, verbose_name='Title')),
21
+                ('description', models.TextField(verbose_name='Description', blank=True)),
22
+                ('link_url', oscar.models.fields.ExtendedURLField(verbose_name='Link URL', blank=True)),
23
+                ('link_text', models.CharField(max_length=255, verbose_name='Link text', blank=True)),
24
+                ('date_created', models.DateTimeField(auto_now_add=True)),
25
+                ('method', models.CharField(max_length=128, verbose_name='Method', choices=[(b'Bestselling', 'Bestselling products'), (b'RecentlyAdded', 'Recently added products')])),
26
+                ('num_products', models.PositiveSmallIntegerField(default=4, verbose_name='Number of Products')),
27
+            ],
28
+            options={
29
+                'verbose_name': 'Automatic product list',
30
+                'verbose_name_plural': 'Automatic product lists',
31
+            },
32
+            bases=(models.Model,),
33
+        ),
34
+        migrations.CreateModel(
35
+            name='HandPickedProductList',
36
+            fields=[
37
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
38
+                ('name', models.CharField(max_length=255, verbose_name='Title')),
39
+                ('description', models.TextField(verbose_name='Description', blank=True)),
40
+                ('link_url', oscar.models.fields.ExtendedURLField(verbose_name='Link URL', blank=True)),
41
+                ('link_text', models.CharField(max_length=255, verbose_name='Link text', blank=True)),
42
+                ('date_created', models.DateTimeField(auto_now_add=True)),
43
+            ],
44
+            options={
45
+                'verbose_name': 'Hand Picked Product List',
46
+                'verbose_name_plural': 'Hand Picked Product Lists',
47
+            },
48
+            bases=(models.Model,),
49
+        ),
50
+        migrations.CreateModel(
51
+            name='Image',
52
+            fields=[
53
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
54
+                ('name', models.CharField(max_length=128, verbose_name='Name')),
55
+                ('link_url', oscar.models.fields.ExtendedURLField(help_text='This is where this promotion links to', verbose_name='Link URL', blank=True)),
56
+                ('image', models.ImageField(upload_to=b'images/promotions/', max_length=255, verbose_name='Image')),
57
+                ('date_created', models.DateTimeField(auto_now_add=True)),
58
+            ],
59
+            options={
60
+                'verbose_name': 'Image',
61
+                'verbose_name_plural': 'Image',
62
+            },
63
+            bases=(models.Model,),
64
+        ),
65
+        migrations.CreateModel(
66
+            name='KeywordPromotion',
67
+            fields=[
68
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
69
+                ('object_id', models.PositiveIntegerField()),
70
+                ('position', models.CharField(help_text=b'Position on page', max_length=100, verbose_name='Position')),
71
+                ('display_order', models.PositiveIntegerField(default=0, verbose_name='Display Order')),
72
+                ('clicks', models.PositiveIntegerField(default=0, verbose_name='Clicks')),
73
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
74
+                ('keyword', models.CharField(max_length=200, verbose_name='Keyword')),
75
+                ('filter', models.CharField(max_length=200, verbose_name='Filter', blank=True)),
76
+                ('content_type', models.ForeignKey(to='contenttypes.ContentType')),
77
+            ],
78
+            options={
79
+                'ordering': [b'-clicks'],
80
+                'abstract': False,
81
+                'verbose_name': 'Keyword Promotion',
82
+                'verbose_name_plural': 'Keyword Promotions',
83
+            },
84
+            bases=(models.Model,),
85
+        ),
86
+        migrations.CreateModel(
87
+            name='MultiImage',
88
+            fields=[
89
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
90
+                ('name', models.CharField(max_length=128, verbose_name='Name')),
91
+                ('date_created', models.DateTimeField(auto_now_add=True)),
92
+                ('images', models.ManyToManyField(to='promotions.Image', null=True, blank=True)),
93
+            ],
94
+            options={
95
+                'verbose_name': 'Multi Image',
96
+                'verbose_name_plural': 'Multi Images',
97
+            },
98
+            bases=(models.Model,),
99
+        ),
100
+        migrations.CreateModel(
101
+            name='OrderedProduct',
102
+            fields=[
103
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
104
+                ('display_order', models.PositiveIntegerField(default=0, verbose_name='Display Order')),
105
+            ],
106
+            options={
107
+                'ordering': (b'display_order',),
108
+                'verbose_name': 'Ordered product',
109
+                'verbose_name_plural': 'Ordered product',
110
+            },
111
+            bases=(models.Model,),
112
+        ),
113
+        migrations.AddField(
114
+            model_name='handpickedproductlist',
115
+            name='products',
116
+            field=models.ManyToManyField(to='catalogue.Product', null=True, verbose_name='Products', through='promotions.OrderedProduct', blank=True),
117
+            preserve_default=True,
118
+        ),
119
+        migrations.AddField(
120
+            model_name='orderedproduct',
121
+            name='list',
122
+            field=models.ForeignKey(verbose_name='List', to='promotions.HandPickedProductList'),
123
+            preserve_default=True,
124
+        ),
125
+        migrations.AddField(
126
+            model_name='orderedproduct',
127
+            name='product',
128
+            field=models.ForeignKey(verbose_name='Product', to='catalogue.Product'),
129
+            preserve_default=True,
130
+        ),
131
+        migrations.AlterUniqueTogether(
132
+            name='orderedproduct',
133
+            unique_together=set([(b'list', b'product')]),
134
+        ),
135
+        migrations.CreateModel(
136
+            name='OrderedProductList',
137
+            fields=[
138
+                ('handpickedproductlist_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='promotions.HandPickedProductList')),
139
+                ('display_order', models.PositiveIntegerField(default=0, verbose_name='Display Order')),
140
+            ],
141
+            options={
142
+                'ordering': (b'display_order',),
143
+                'verbose_name': 'Ordered Product List',
144
+                'verbose_name_plural': 'Ordered Product Lists',
145
+            },
146
+            bases=('promotions.handpickedproductlist',),
147
+        ),
148
+        migrations.CreateModel(
149
+            name='PagePromotion',
150
+            fields=[
151
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
152
+                ('object_id', models.PositiveIntegerField()),
153
+                ('position', models.CharField(help_text=b'Position on page', max_length=100, verbose_name='Position')),
154
+                ('display_order', models.PositiveIntegerField(default=0, verbose_name='Display Order')),
155
+                ('clicks', models.PositiveIntegerField(default=0, verbose_name='Clicks')),
156
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
157
+                ('page_url', oscar.models.fields.ExtendedURLField(max_length=128, verbose_name='Page URL', verify_exists=True, db_index=True)),
158
+                ('content_type', models.ForeignKey(to='contenttypes.ContentType')),
159
+            ],
160
+            options={
161
+                'ordering': [b'-clicks'],
162
+                'abstract': False,
163
+                'verbose_name': 'Page Promotion',
164
+                'verbose_name_plural': 'Page Promotions',
165
+            },
166
+            bases=(models.Model,),
167
+        ),
168
+        migrations.CreateModel(
169
+            name='RawHTML',
170
+            fields=[
171
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
172
+                ('name', models.CharField(max_length=128, verbose_name='Name')),
173
+                ('display_type', models.CharField(help_text='This can be used to have different types of HTML blocks (eg different widths)', max_length=128, verbose_name='Display type', blank=True)),
174
+                ('body', models.TextField(verbose_name='HTML')),
175
+                ('date_created', models.DateTimeField(auto_now_add=True)),
176
+            ],
177
+            options={
178
+                'verbose_name': 'Raw HTML',
179
+                'verbose_name_plural': 'Raw HTML',
180
+            },
181
+            bases=(models.Model,),
182
+        ),
183
+        migrations.CreateModel(
184
+            name='SingleProduct',
185
+            fields=[
186
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
187
+                ('name', models.CharField(max_length=128, verbose_name='Name')),
188
+                ('description', models.TextField(verbose_name='Description', blank=True)),
189
+                ('date_created', models.DateTimeField(auto_now_add=True)),
190
+                ('product', models.ForeignKey(to='catalogue.Product')),
191
+            ],
192
+            options={
193
+                'verbose_name': 'Single product',
194
+                'verbose_name_plural': 'Single product',
195
+            },
196
+            bases=(models.Model,),
197
+        ),
198
+        migrations.CreateModel(
199
+            name='TabbedBlock',
200
+            fields=[
201
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
202
+                ('name', models.CharField(max_length=255, verbose_name='Title')),
203
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
204
+            ],
205
+            options={
206
+                'verbose_name': 'Tabbed Block',
207
+                'verbose_name_plural': 'Tabbed Blocks',
208
+            },
209
+            bases=(models.Model,),
210
+        ),
211
+        migrations.AddField(
212
+            model_name='orderedproductlist',
213
+            name='tabbed_block',
214
+            field=models.ForeignKey(verbose_name='Tabbed Block', to='promotions.TabbedBlock'),
215
+            preserve_default=True,
216
+        ),
217
+    ]

+ 0
- 0
oscar/apps/promotions/migrations/__init__.py Просмотреть файл


+ 76
- 0
oscar/apps/shipping/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,76 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields.autoslugfield
6
+from decimal import Decimal
7
+import django.core.validators
8
+
9
+
10
+class Migration(migrations.Migration):
11
+
12
+    dependencies = [
13
+        ('address', '0001_initial'),
14
+    ]
15
+
16
+    operations = [
17
+        migrations.CreateModel(
18
+            name='OrderAndItemCharges',
19
+            fields=[
20
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
21
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Slug')),
22
+                ('name', models.CharField(unique=True, max_length=128, verbose_name='Name')),
23
+                ('description', models.TextField(verbose_name='Description', blank=True)),
24
+                ('price_per_order', models.DecimalField(default=Decimal('0.00'), verbose_name='Price per order', max_digits=12, decimal_places=2)),
25
+                ('price_per_item', models.DecimalField(default=Decimal('0.00'), verbose_name='Price per item', max_digits=12, decimal_places=2)),
26
+                ('free_shipping_threshold', models.DecimalField(null=True, verbose_name='Free Shipping', max_digits=12, decimal_places=2, blank=True)),
27
+                ('countries', models.ManyToManyField(to='address.Country', null=True, verbose_name='Countries', blank=True)),
28
+            ],
29
+            options={
30
+                'ordering': [b'name'],
31
+                'abstract': False,
32
+                'verbose_name': 'Order and Item Charge',
33
+                'verbose_name_plural': 'Order and Item Charges',
34
+            },
35
+            bases=(models.Model,),
36
+        ),
37
+        migrations.CreateModel(
38
+            name='WeightBand',
39
+            fields=[
40
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
41
+                ('upper_limit', models.DecimalField(help_text='Enter upper limit of this weight band in kg. The lower limit will be determined by the other weight bands.', verbose_name='Upper Limit', max_digits=12, decimal_places=3, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))])),
42
+                ('charge', models.DecimalField(verbose_name='Charge', max_digits=12, decimal_places=2, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))])),
43
+            ],
44
+            options={
45
+                'ordering': [b'method', b'upper_limit'],
46
+                'abstract': False,
47
+                'verbose_name': 'Weight Band',
48
+                'verbose_name_plural': 'Weight Bands',
49
+            },
50
+            bases=(models.Model,),
51
+        ),
52
+        migrations.CreateModel(
53
+            name='WeightBased',
54
+            fields=[
55
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
56
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Slug')),
57
+                ('name', models.CharField(unique=True, max_length=128, verbose_name='Name')),
58
+                ('description', models.TextField(verbose_name='Description', blank=True)),
59
+                ('default_weight', models.DecimalField(decimal_places=3, default=Decimal('0.000'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))], help_text='Default product weight in kg when no weight attribute is defined', verbose_name='Default Weight')),
60
+                ('countries', models.ManyToManyField(to='address.Country', null=True, verbose_name='Countries', blank=True)),
61
+            ],
62
+            options={
63
+                'ordering': [b'name'],
64
+                'abstract': False,
65
+                'verbose_name': 'Weight-based Shipping Method',
66
+                'verbose_name_plural': 'Weight-based Shipping Methods',
67
+            },
68
+            bases=(models.Model,),
69
+        ),
70
+        migrations.AddField(
71
+            model_name='weightband',
72
+            name='method',
73
+            field=models.ForeignKey(verbose_name='Method', to='shipping.WeightBased'),
74
+            preserve_default=True,
75
+        ),
76
+    ]

+ 0
- 0
oscar/apps/shipping/migrations/__init__.py Просмотреть файл


+ 57
- 0
oscar/apps/voucher/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,57 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+from django.conf import settings
6
+from decimal import Decimal
7
+
8
+
9
+class Migration(migrations.Migration):
10
+
11
+    dependencies = [
12
+        ('order', '0001_initial'),
13
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14
+        ('offer', '0001_initial'),
15
+    ]
16
+
17
+    operations = [
18
+        migrations.CreateModel(
19
+            name='Voucher',
20
+            fields=[
21
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
22
+                ('name', models.CharField(help_text='This will be shown in the checkout and basket once the voucher is entered', max_length=128, verbose_name='Name')),
23
+                ('code', models.CharField(help_text='Case insensitive / No spaces allowed', unique=True, max_length=128, verbose_name='Code', db_index=True)),
24
+                ('usage', models.CharField(default=b'Multi-use', max_length=128, verbose_name='Usage', choices=[(b'Single use', 'Can be used once by one customer'), (b'Multi-use', 'Can be used multiple times by multiple customers'), (b'Once per customer', 'Can only be used once per customer')])),
25
+                ('start_datetime', models.DateTimeField(verbose_name='Start datetime')),
26
+                ('end_datetime', models.DateTimeField(verbose_name='End datetime')),
27
+                ('num_basket_additions', models.PositiveIntegerField(default=0, verbose_name='Times added to basket')),
28
+                ('num_orders', models.PositiveIntegerField(default=0, verbose_name='Times on orders')),
29
+                ('total_discount', models.DecimalField(default=Decimal('0.00'), verbose_name='Total discount', max_digits=12, decimal_places=2)),
30
+                ('date_created', models.DateField(auto_now_add=True)),
31
+                ('offers', models.ManyToManyField(to='offer.ConditionalOffer', verbose_name='Offers')),
32
+            ],
33
+            options={
34
+                'abstract': False,
35
+                'get_latest_by': b'date_created',
36
+                'verbose_name': 'Voucher',
37
+                'verbose_name_plural': 'Vouchers',
38
+            },
39
+            bases=(models.Model,),
40
+        ),
41
+        migrations.CreateModel(
42
+            name='VoucherApplication',
43
+            fields=[
44
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
45
+                ('date_created', models.DateField(auto_now_add=True, verbose_name='Date Created')),
46
+                ('order', models.ForeignKey(verbose_name='Order', to='order.Order')),
47
+                ('user', models.ForeignKey(verbose_name='User', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
48
+                ('voucher', models.ForeignKey(verbose_name='Voucher', to='voucher.Voucher')),
49
+            ],
50
+            options={
51
+                'abstract': False,
52
+                'verbose_name': 'Voucher Application',
53
+                'verbose_name_plural': 'Voucher Applications',
54
+            },
55
+            bases=(models.Model,),
56
+        ),
57
+    ]

+ 0
- 0
oscar/apps/voucher/migrations/__init__.py Просмотреть файл


+ 58
- 0
oscar/apps/wishlists/migrations/0001_initial.py Просмотреть файл

@@ -0,0 +1,58 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import django.db.models.deletion
6
+from django.conf import settings
7
+
8
+
9
+class Migration(migrations.Migration):
10
+
11
+    dependencies = [
12
+        ('catalogue', '0001_initial'),
13
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14
+    ]
15
+
16
+    operations = [
17
+        migrations.CreateModel(
18
+            name='Line',
19
+            fields=[
20
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
21
+                ('quantity', models.PositiveIntegerField(default=1, verbose_name='Quantity')),
22
+                ('title', models.CharField(max_length=255, verbose_name='Title')),
23
+                ('product', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Product', blank=True, to='catalogue.Product', null=True)),
24
+            ],
25
+            options={
26
+                'abstract': False,
27
+                'verbose_name': 'Wish list line',
28
+            },
29
+            bases=(models.Model,),
30
+        ),
31
+        migrations.CreateModel(
32
+            name='WishList',
33
+            fields=[
34
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
35
+                ('name', models.CharField(default='Default', max_length=255, verbose_name='Name')),
36
+                ('key', models.CharField(verbose_name='Key', unique=True, max_length=6, editable=False, db_index=True)),
37
+                ('visibility', models.CharField(default=b'Private', max_length=20, verbose_name='Visibility', choices=[(b'Private', 'Private - Only the owner can see the wish list'), (b'Shared', 'Shared - Only the owner and people with access to the obfuscated link can see the wish list'), (b'Public', 'Public - Everybody can see the wish list')])),
38
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')),
39
+                ('owner', models.ForeignKey(verbose_name='Owner', to=settings.AUTH_USER_MODEL)),
40
+            ],
41
+            options={
42
+                'ordering': (b'owner', b'date_created'),
43
+                'abstract': False,
44
+                'verbose_name': 'Wish List',
45
+            },
46
+            bases=(models.Model,),
47
+        ),
48
+        migrations.AddField(
49
+            model_name='line',
50
+            name='wishlist',
51
+            field=models.ForeignKey(verbose_name='Wish List', to='wishlists.WishList'),
52
+            preserve_default=True,
53
+        ),
54
+        migrations.AlterUniqueTogether(
55
+            name='line',
56
+            unique_together=set([(b'wishlist', b'product')]),
57
+        ),
58
+    ]

+ 0
- 0
oscar/apps/wishlists/migrations/__init__.py Просмотреть файл


Загрузка…
Отмена
Сохранить