Parcourir la source

added price incl tax to the basket line model

master
Eleni Lixourioti il y a 13 ans
Parent
révision
4e3618f04f

+ 9
- 6
oscar/apps/basket/abstract_models.py Voir le fichier

@@ -113,16 +113,18 @@ class AbstractBasket(models.Model):
113 113
         line_ref = self._create_line_reference(product, options)
114 114
 
115 115
         # Determine price to store (if one exists)
116
-        price = None
116
+        price_excl_tax, price_incl_tax = None, None
117 117
         if product.has_stockrecord:
118 118
             stockrecord = product.stockrecord
119
-            if stockrecord and stockrecord.price_incl_tax:
120
-                price = stockrecord.price_incl_tax
119
+            if stockrecord:
120
+                price_excl_tax = getattr(stockrecord, 'price_excl_tax', None)
121
+                price_incl_tax = getattr(stockrecord, 'price_incl_tax', None)
121 122
 
122 123
         line, created = self.lines.get_or_create(line_reference=line_ref,
123 124
                                                  product=product,
124 125
                                                  defaults={'quantity': quantity,
125
-                                                           'price_incl_tax': price})
126
+                                                           'price_excl_tax': price_excl_tax,
127
+                                                           'price_incl_tax': price_incl_tax})
126 128
         if created:
127 129
             for option_dict in options:
128 130
                 line.attributes.create(option=option_dict['option'],
@@ -392,9 +394,10 @@ class AbstractLine(models.Model):
392 394
 
393 395
     product = models.ForeignKey('catalogue.Product', related_name='basket_lines')
394 396
     quantity = models.PositiveIntegerField(_('Quantity'), default=1)
395
-    price_incl_tax = models.DecimalField(_('Price incl. Tax'), decimal_places=2, max_digits=12,
397
+    price_excl_tax = models.DecimalField(_('Price excl. Tax'), decimal_places=2, max_digits=12,
396 398
                                          null=True)
397
-
399
+    price_incl_tax = models.DecimalField(_('Price incl. Tax'), decimal_places=2, max_digits=12,
400
+        null=True)
398 401
     # Track date of first addition
399 402
     date_created = models.DateTimeField(auto_now_add=True)
400 403
 

+ 2
- 2
oscar/apps/basket/forms.py Voir le fichier

@@ -34,7 +34,7 @@ class BasketLineForm(forms.ModelForm):
34 34
 
35 35
     class Meta:
36 36
         model = Line
37
-        exclude = ('basket', 'product', 'line_reference', 'price_incl_tax')
37
+        exclude = ('basket', 'product', 'line_reference', 'price_excl_tax', 'price_incl_tax')
38 38
 
39 39
 
40 40
 class SavedLineForm(forms.ModelForm):
@@ -42,7 +42,7 @@ class SavedLineForm(forms.ModelForm):
42 42
 
43 43
     class Meta:
44 44
         model = Line
45
-        exclude = ('basket', 'product', 'line_reference', 'quantity', 'price_incl_tax')
45
+        exclude = ('basket', 'product', 'line_reference', 'quantity', 'price_excl_tax', 'price_incl_tax')
46 46
 
47 47
     def __init__(self, user, basket, *args, **kwargs):
48 48
         self.user = user

+ 255
- 0
oscar/apps/basket/migrations/0003_auto__add_field_line_price_excl_tax.py Voir le fichier

@@ -0,0 +1,255 @@
1
+# encoding: utf-8
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+
7
+class Migration(SchemaMigration):
8
+
9
+    def forwards(self, orm):
10
+        
11
+        # Adding field 'Line.price_excl_tax'
12
+        db.add_column('basket_line', 'price_excl_tax', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=12, decimal_places=2), keep_default=False)
13
+
14
+
15
+    def backwards(self, orm):
16
+        
17
+        # Deleting field 'Line.price_excl_tax'
18
+        db.delete_column('basket_line', 'price_excl_tax')
19
+
20
+
21
+    models = {
22
+        'auth.group': {
23
+            'Meta': {'object_name': 'Group'},
24
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
25
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
26
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
27
+        },
28
+        'auth.permission': {
29
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
30
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
31
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
32
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
33
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
34
+        },
35
+        'auth.user': {
36
+            'Meta': {'object_name': 'User'},
37
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 24, 14, 47, 16, 749550)'}),
38
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
39
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
40
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
41
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
42
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
43
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
44
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
45
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 24, 14, 47, 16, 749466)'}),
46
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
47
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
48
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
49
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
50
+        },
51
+        'basket.basket': {
52
+            'Meta': {'object_name': 'Basket'},
53
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
54
+            'date_merged': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
55
+            'date_submitted': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
56
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
57
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'baskets'", 'null': 'True', 'to': "orm['auth.User']"}),
58
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
59
+            'vouchers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['voucher.Voucher']", 'null': 'True', 'symmetrical': 'False'})
60
+        },
61
+        'basket.line': {
62
+            'Meta': {'unique_together': "(('basket', 'line_reference'),)", 'object_name': 'Line'},
63
+            'basket': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'lines'", 'to': "orm['basket.Basket']"}),
64
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
65
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
66
+            'line_reference': ('django.db.models.fields.SlugField', [], {'max_length': '128', 'db_index': 'True'}),
67
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
68
+            'price_incl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
69
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'basket_lines'", 'to': "orm['catalogue.Product']"}),
70
+            'quantity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'})
71
+        },
72
+        'basket.lineattribute': {
73
+            'Meta': {'object_name': 'LineAttribute'},
74
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
75
+            'line': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['basket.Line']"}),
76
+            'option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Option']"}),
77
+            'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
78
+        },
79
+        'catalogue.attributeentity': {
80
+            'Meta': {'object_name': 'AttributeEntity'},
81
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
82
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
83
+            'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
84
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': "orm['catalogue.AttributeEntityType']"})
85
+        },
86
+        'catalogue.attributeentitytype': {
87
+            'Meta': {'object_name': 'AttributeEntityType'},
88
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
89
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
90
+            'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'})
91
+        },
92
+        'catalogue.attributeoption': {
93
+            'Meta': {'object_name': 'AttributeOption'},
94
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': "orm['catalogue.AttributeOptionGroup']"}),
95
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
96
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
97
+        },
98
+        'catalogue.attributeoptiongroup': {
99
+            'Meta': {'object_name': 'AttributeOptionGroup'},
100
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
101
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
102
+        },
103
+        'catalogue.category': {
104
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
105
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
106
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
107
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
108
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
109
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
110
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
111
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
112
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
113
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '1024', 'db_index': 'True'})
114
+        },
115
+        'catalogue.option': {
116
+            'Meta': {'object_name': 'Option'},
117
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128', 'db_index': 'True'}),
118
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
119
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
120
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
121
+        },
122
+        'catalogue.product': {
123
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
124
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.ProductAttribute']", 'through': "orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
125
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Category']", 'through': "orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
126
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
127
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
128
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
129
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
130
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
131
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': "orm['catalogue.Product']"}),
132
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductClass']", 'null': 'True'}),
133
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
134
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Product']", 'symmetrical': 'False', 'through': "orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
135
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
136
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
137
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'db_index': 'True'}),
138
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
139
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
140
+            'upc': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
141
+        },
142
+        'catalogue.productattribute': {
143
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
144
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128', 'db_index': 'True'}),
145
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
146
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
147
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
148
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
149
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
150
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
151
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
152
+        },
153
+        'catalogue.productattributevalue': {
154
+            'Meta': {'object_name': 'ProductAttributeValue'},
155
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductAttribute']"}),
156
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
157
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': "orm['catalogue.Product']"}),
158
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
159
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
160
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
161
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
162
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
163
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
164
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
165
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
166
+        },
167
+        'catalogue.productcategory': {
168
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
169
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Category']"}),
170
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
171
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
172
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
173
+        },
174
+        'catalogue.productclass': {
175
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
176
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
177
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
178
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
179
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
180
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128', 'db_index': 'True'})
181
+        },
182
+        'catalogue.productrecommendation': {
183
+            'Meta': {'object_name': 'ProductRecommendation'},
184
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
185
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': "orm['catalogue.Product']"}),
186
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
187
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
188
+        },
189
+        'contenttypes.contenttype': {
190
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
191
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
192
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
193
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
194
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
195
+        },
196
+        'offer.benefit': {
197
+            'Meta': {'object_name': 'Benefit'},
198
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
199
+            'max_affected_items': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
200
+            'range': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['offer.Range']", 'null': 'True', 'blank': 'True'}),
201
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
202
+            'value': ('oscar.models.fields.PositiveDecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'})
203
+        },
204
+        'offer.condition': {
205
+            'Meta': {'object_name': 'Condition'},
206
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
207
+            'range': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['offer.Range']"}),
208
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
209
+            'value': ('oscar.models.fields.PositiveDecimalField', [], {'max_digits': '12', 'decimal_places': '2'})
210
+        },
211
+        'offer.conditionaloffer': {
212
+            'Meta': {'ordering': "['-priority']", 'object_name': 'ConditionalOffer'},
213
+            'benefit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['offer.Benefit']"}),
214
+            'condition': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['offer.Condition']"}),
215
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
216
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
217
+            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
218
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
219
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}),
220
+            'num_orders': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
221
+            'offer_type': ('django.db.models.fields.CharField', [], {'default': "'Site'", 'max_length': '128'}),
222
+            'priority': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
223
+            'redirect_url': ('oscar.models.fields.ExtendedURLField', [], {'max_length': '200', 'blank': 'True'}),
224
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '128', 'unique': 'True', 'null': 'True', 'db_index': 'True'}),
225
+            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
226
+            'total_discount': ('django.db.models.fields.DecimalField', [], {'default': "'0.00'", 'max_digits': '12', 'decimal_places': '2'})
227
+        },
228
+        'offer.range': {
229
+            'Meta': {'object_name': 'Range'},
230
+            'classes': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'classes'", 'blank': 'True', 'to': "orm['catalogue.ProductClass']"}),
231
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
232
+            'excluded_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'excludes'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
233
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
234
+            'included_categories': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'includes'", 'blank': 'True', 'to': "orm['catalogue.Category']"}),
235
+            'included_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'includes'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
236
+            'includes_all_products': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
237
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'})
238
+        },
239
+        'voucher.voucher': {
240
+            'Meta': {'object_name': 'Voucher'},
241
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128', 'db_index': 'True'}),
242
+            'date_created': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
243
+            'end_date': ('django.db.models.fields.DateField', [], {}),
244
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
245
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
246
+            'num_basket_additions': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
247
+            'num_orders': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
248
+            'offers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'vouchers'", 'symmetrical': 'False', 'to': "orm['offer.ConditionalOffer']"}),
249
+            'start_date': ('django.db.models.fields.DateField', [], {}),
250
+            'total_discount': ('django.db.models.fields.DecimalField', [], {'default': "'0.00'", 'max_digits': '12', 'decimal_places': '2'}),
251
+            'usage': ('django.db.models.fields.CharField', [], {'default': "'Multi-use'", 'max_length': '128'})
252
+        }
253
+    }
254
+
255
+    complete_apps = ['basket']

+ 7
- 0
tests/unit/basket_tests.py Voir le fichier

@@ -1,4 +1,5 @@
1 1
 import datetime
2
+from decimal import Decimal as D
2 3
 
3 4
 from django.test import TestCase
4 5
 from django.test.client import RequestFactory
@@ -35,6 +36,12 @@ class TestBasketModel(TestCase):
35 36
         self.basket.add_product(self.product)
36 37
         self.assertTrue(self.basket.num_lines == 1)
37 38
 
39
+    def test_add_product_sets_line_prices(self):
40
+        self.basket.add_product(self.product)
41
+        basket_line = self.basket.lines.all()[0]
42
+        self.assertEqual(basket_line.price_incl_tax, D('10.00'))
43
+        self.assertEqual(basket_line.price_excl_tax, D('10.00'))
44
+
38 45
     def test_flushing_basket_removes_all_lines(self):
39 46
         self.basket.add_product(self.product, 10)
40 47
         self.assertEqual(self.basket.num_items, 10)

Chargement…
Annuler
Enregistrer