您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

0001_initial.py 15KB

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