ob-dj-store 0.0.20.2__py3-none-any.whl → 0.0.20.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ob_dj_store/apis/stores/filters.py +5 -19
- ob_dj_store/apis/stores/rest/serializers/serializers.py +20 -34
- ob_dj_store/apis/stores/views.py +74 -226
- ob_dj_store/apis/tap/views.py +2 -6
- ob_dj_store/core/stores/admin.py +3 -21
- ob_dj_store/core/stores/admin_inlines.py +2 -7
- ob_dj_store/core/stores/gateway/tap/admin.py +1 -3
- ob_dj_store/core/stores/gateway/tap/managers.py +1 -6
- ob_dj_store/core/stores/gateway/tap/migrations/0001_initial.py +1 -3
- ob_dj_store/core/stores/gateway/tap/models.py +3 -12
- ob_dj_store/core/stores/gateway/tap/utils.py +2 -7
- ob_dj_store/core/stores/managers.py +1 -3
- ob_dj_store/core/stores/migrations/0001_initial.py +1 -4
- ob_dj_store/core/stores/migrations/0005_auto_20220425_2119.py +2 -5
- ob_dj_store/core/stores/migrations/0005_auto_20220427_1729.py +1 -2
- ob_dj_store/core/stores/migrations/0006_auto_20220428_0100.py +2 -8
- ob_dj_store/core/stores/migrations/0007_cart_cartitem_order_orderitem.py +2 -8
- ob_dj_store/core/stores/migrations/0010_auto_20220509_1633.py +1 -4
- ob_dj_store/core/stores/migrations/0012_auto_20220514_0633.py +1 -4
- ob_dj_store/core/stores/migrations/0013_auto_20220518_1539.py +1 -4
- ob_dj_store/core/stores/migrations/0014_auto_20220519_0018.py +3 -12
- ob_dj_store/core/stores/migrations/0017_auto_20220524_0912.py +3 -10
- ob_dj_store/core/stores/migrations/0018_auto_20220524_1613.py +1 -3
- ob_dj_store/core/stores/migrations/0021_auto_20220531_1849.py +1 -4
- ob_dj_store/core/stores/migrations/0026_auto_20220630_1913.py +8 -32
- ob_dj_store/core/stores/migrations/0031_auto_20220811_1733.py +1 -4
- ob_dj_store/core/stores/migrations/0033_auto_20220815_0133.py +2 -8
- ob_dj_store/core/stores/migrations/0039_auto_20220831_1521.py +1 -4
- ob_dj_store/core/stores/migrations/0044_remove_productvariant_has_inventory.py +1 -4
- ob_dj_store/core/stores/migrations/0049_auto_20221029_1524.py +2 -8
- ob_dj_store/core/stores/migrations/0050_favoriteextra.py +1 -3
- ob_dj_store/core/stores/migrations/0052_auto_20221129_1732.py +2 -8
- ob_dj_store/core/stores/migrations/0059_auto_20230217_2006.py +2 -8
- ob_dj_store/core/stores/migrations/0062_auto_20230226_2005.py +2 -6
- ob_dj_store/core/stores/migrations/0064_auto_20230228_1814.py +1 -2
- ob_dj_store/core/stores/migrations/0066_auto_20230304_1532.py +2 -8
- ob_dj_store/core/stores/migrations/0070_auto_20230323_1628.py +1 -4
- ob_dj_store/core/stores/migrations/0071_auto_20230328_1825.py +2 -5
- ob_dj_store/core/stores/migrations/0082_auto_20230613_1424.py +1 -4
- ob_dj_store/core/stores/migrations/0084_payment_result.py +1 -3
- ob_dj_store/core/stores/migrations/0087_auto_20230828_2138.py +1 -4
- ob_dj_store/core/stores/migrations/0097_auto_20231108_1939.py +1 -4
- ob_dj_store/core/stores/migrations/0100_remove_shippingmethod_type_arabic.py +1 -4
- ob_dj_store/core/stores/migrations/0106_alter_paymentmethod_payment_provider.py +35 -0
- ob_dj_store/core/stores/migrations/0107_auto_20250425_2059.py +29 -0
- ob_dj_store/core/stores/models/_address.py +1 -3
- ob_dj_store/core/stores/models/_cart.py +1 -3
- ob_dj_store/core/stores/models/_feedback.py +1 -3
- ob_dj_store/core/stores/models/_inventory.py +1 -2
- ob_dj_store/core/stores/models/_order.py +7 -20
- ob_dj_store/core/stores/models/_payment.py +3 -12
- ob_dj_store/core/stores/models/_product.py +5 -17
- ob_dj_store/core/stores/models/_store.py +5 -13
- ob_dj_store/core/stores/models/_wallet.py +7 -23
- ob_dj_store/core/stores/receivers.py +7 -20
- ob_dj_store/core/stores/utils.py +1 -2
- {ob_dj_store-0.0.20.2.dist-info → ob_dj_store-0.0.20.4.dist-info}/METADATA +3 -2
- {ob_dj_store-0.0.20.2.dist-info → ob_dj_store-0.0.20.4.dist-info}/RECORD +60 -58
- {ob_dj_store-0.0.20.2.dist-info → ob_dj_store-0.0.20.4.dist-info}/WHEEL +1 -1
- {ob_dj_store-0.0.20.2.dist-info → ob_dj_store-0.0.20.4.dist-info}/top_level.txt +0 -0
@@ -10,10 +10,7 @@ class Migration(migrations.Migration):
|
|
10
10
|
]
|
11
11
|
|
12
12
|
operations = [
|
13
|
-
migrations.RemoveField(
|
14
|
-
model_name="store",
|
15
|
-
name="always_open",
|
16
|
-
),
|
13
|
+
migrations.RemoveField(model_name="store", name="always_open",),
|
17
14
|
migrations.AddField(
|
18
15
|
model_name="openinghours",
|
19
16
|
name="always_open",
|
@@ -13,10 +13,7 @@ class Migration(migrations.Migration):
|
|
13
13
|
]
|
14
14
|
|
15
15
|
operations = [
|
16
|
-
migrations.RemoveField(
|
17
|
-
model_name="product",
|
18
|
-
name="category",
|
19
|
-
),
|
16
|
+
migrations.RemoveField(model_name="product", name="category",),
|
20
17
|
migrations.AddField(
|
21
18
|
model_name="product",
|
22
19
|
name="category",
|
@@ -26,10 +26,7 @@ class Migration(migrations.Migration):
|
|
26
26
|
"verbose_name_plural": "Store Attribute Choices",
|
27
27
|
},
|
28
28
|
),
|
29
|
-
migrations.RemoveField(
|
30
|
-
model_name="attributechoice",
|
31
|
-
name="price",
|
32
|
-
),
|
29
|
+
migrations.RemoveField(model_name="attributechoice", name="price",),
|
33
30
|
migrations.AddField(
|
34
31
|
model_name="storeattributechoice",
|
35
32
|
name="price",
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Generated by Django 3.2.8 on 2024-12-22 19:07
|
2
|
+
|
3
|
+
from django.db import migrations, models
|
4
|
+
|
5
|
+
|
6
|
+
class Migration(migrations.Migration):
|
7
|
+
|
8
|
+
dependencies = [
|
9
|
+
("stores", "0105_store_is_open_after_midnight"),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AlterField(
|
14
|
+
model_name="paymentmethod",
|
15
|
+
name="payment_provider",
|
16
|
+
field=models.CharField(
|
17
|
+
choices=[
|
18
|
+
("cod", "cash on delivery"),
|
19
|
+
("src_all", "TAP all payment methods"),
|
20
|
+
("src_card", "Tap Credit Card"),
|
21
|
+
("src_kw.knet", "Tap knet"),
|
22
|
+
("paypal", "Paypal"),
|
23
|
+
("stripe", "Stripe"),
|
24
|
+
("wallet", "Wallet"),
|
25
|
+
("gift", "Gift"),
|
26
|
+
("src_apple_pay", "Apple Pay"),
|
27
|
+
("google_pay", "Google Pay"),
|
28
|
+
("src_sa.mada", "Mada"),
|
29
|
+
("src_bh.benefit", "Benefit"),
|
30
|
+
],
|
31
|
+
default="cod",
|
32
|
+
max_length=20,
|
33
|
+
),
|
34
|
+
),
|
35
|
+
]
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Generated by Django 3.2.8 on 2025-04-25 17:59
|
2
|
+
|
3
|
+
from django.db import migrations, models
|
4
|
+
|
5
|
+
|
6
|
+
class Migration(migrations.Migration):
|
7
|
+
|
8
|
+
dependencies = [
|
9
|
+
("stores", "0106_alter_paymentmethod_payment_provider"),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.RemoveField(model_name="store", name="is_open_after_midnight",),
|
14
|
+
migrations.AddField(
|
15
|
+
model_name="openinghours",
|
16
|
+
name="is_open_after_midnight",
|
17
|
+
field=models.BooleanField(default=False),
|
18
|
+
),
|
19
|
+
migrations.AddField(
|
20
|
+
model_name="order",
|
21
|
+
name="offer_id",
|
22
|
+
field=models.IntegerField(blank=True, default=None, null=True),
|
23
|
+
),
|
24
|
+
migrations.AddField(
|
25
|
+
model_name="order",
|
26
|
+
name="offer_redeemed",
|
27
|
+
field=models.BooleanField(default=False),
|
28
|
+
),
|
29
|
+
]
|
@@ -10,9 +10,7 @@ class BaseAddress(models.Model):
|
|
10
10
|
Base class for all address models.
|
11
11
|
"""
|
12
12
|
|
13
|
-
address_line = models.CharField(
|
14
|
-
max_length=250,
|
15
|
-
)
|
13
|
+
address_line = models.CharField(max_length=250,)
|
16
14
|
address_line_arabic = models.CharField(max_length=250, blank=True, null=True)
|
17
15
|
postal_code = models.CharField(
|
18
16
|
max_length=64, help_text=_("The address postal/zip code.")
|
@@ -63,9 +63,7 @@ class Cart(models.Model):
|
|
63
63
|
return self.total_price + self.get_applied_tax_amount()
|
64
64
|
|
65
65
|
@property
|
66
|
-
def full_price(
|
67
|
-
self,
|
68
|
-
) -> Decimal:
|
66
|
+
def full_price(self,) -> Decimal:
|
69
67
|
return self.total_price_with_tax - self.discount_offer_amount
|
70
68
|
|
71
69
|
@property
|
@@ -22,9 +22,7 @@ class Feedback(models.Model):
|
|
22
22
|
get_user_model(), related_name="feedbacks", on_delete=models.CASCADE
|
23
23
|
)
|
24
24
|
order = models.ForeignKey(
|
25
|
-
"stores.Order",
|
26
|
-
related_name="feedbacks",
|
27
|
-
on_delete=models.CASCADE,
|
25
|
+
"stores.Order", related_name="feedbacks", on_delete=models.CASCADE,
|
28
26
|
)
|
29
27
|
review = models.CharField(
|
30
28
|
max_length=100, choices=Reviews.choices, default="NOT_AVAILABLE"
|
@@ -37,8 +37,7 @@ class Inventory(DjangoModelCleanMixin, models.Model):
|
|
37
37
|
# Add is_primary for variant
|
38
38
|
is_primary = models.BooleanField(default=True)
|
39
39
|
preparation_time = models.DurationField(
|
40
|
-
default=timedelta(minutes=0),
|
41
|
-
help_text=_("Preparation time in minutes"),
|
40
|
+
default=timedelta(minutes=0), help_text=_("Preparation time in minutes"),
|
42
41
|
)
|
43
42
|
created_at = models.DateTimeField(auto_now_add=True)
|
44
43
|
updated_at = models.DateTimeField(auto_now=True)
|
@@ -41,10 +41,7 @@ class Order(DjangoModelCleanMixin, models.Model):
|
|
41
41
|
"stores.Discount", on_delete=models.PROTECT, null=True, blank=True
|
42
42
|
)
|
43
43
|
customer = models.ForeignKey(
|
44
|
-
get_user_model(),
|
45
|
-
related_name="orders",
|
46
|
-
on_delete=models.SET_NULL,
|
47
|
-
null=True,
|
44
|
+
get_user_model(), related_name="orders", on_delete=models.SET_NULL, null=True,
|
48
45
|
)
|
49
46
|
store = models.ForeignKey(
|
50
47
|
"stores.Store",
|
@@ -82,9 +79,7 @@ class Order(DjangoModelCleanMixin, models.Model):
|
|
82
79
|
blank=True,
|
83
80
|
)
|
84
81
|
status = models.CharField(
|
85
|
-
max_length=32,
|
86
|
-
default=OrderStatus.PENDING,
|
87
|
-
choices=OrderStatus.choices,
|
82
|
+
max_length=32, default=OrderStatus.PENDING, choices=OrderStatus.choices,
|
88
83
|
)
|
89
84
|
# Add pickup time for an order, Pick up can be now or a later hour during the day
|
90
85
|
pickup_time = models.DateTimeField(
|
@@ -93,12 +88,10 @@ class Order(DjangoModelCleanMixin, models.Model):
|
|
93
88
|
# Order id of the pickup_car
|
94
89
|
car_id = models.PositiveIntegerField(null=True, blank=True)
|
95
90
|
# Pick up can be now or a later hour during the day. If pickup_time is not set,
|
96
|
-
extra_infos = models.JSONField(
|
97
|
-
null=True,
|
98
|
-
blank=True,
|
99
|
-
)
|
91
|
+
extra_infos = models.JSONField(null=True, blank=True,)
|
100
92
|
init_data = models.JSONField(null=True, blank=True)
|
101
|
-
|
93
|
+
offer_redeemed = models.BooleanField(default=False)
|
94
|
+
offer_id = models.IntegerField(null=True, blank=True, default=None)
|
102
95
|
# TODO: add pick_up_time maybe ?
|
103
96
|
# audit fields
|
104
97
|
created_at = models.DateTimeField(auto_now_add=True)
|
@@ -195,10 +188,7 @@ class OrderItem(DjangoModelCleanMixin, models.Model):
|
|
195
188
|
total_price = models.DecimalField(max_digits=10, decimal_places=3, default=0)
|
196
189
|
quantity = models.PositiveIntegerField(
|
197
190
|
validators=[
|
198
|
-
MinValueValidator(
|
199
|
-
1,
|
200
|
-
message="Can you please provide a valid quantity !",
|
201
|
-
)
|
191
|
+
MinValueValidator(1, message="Can you please provide a valid quantity !",)
|
202
192
|
],
|
203
193
|
help_text=_("quantity of the variant"),
|
204
194
|
)
|
@@ -277,10 +267,7 @@ class OrderHistory(DjangoModelCleanMixin, models.Model):
|
|
277
267
|
"""
|
278
268
|
|
279
269
|
order = models.ForeignKey(Order, related_name="history", on_delete=models.CASCADE)
|
280
|
-
status = models.CharField(
|
281
|
-
max_length=32,
|
282
|
-
choices=Order.OrderStatus.choices,
|
283
|
-
)
|
270
|
+
status = models.CharField(max_length=32, choices=Order.OrderStatus.choices,)
|
284
271
|
created_at = models.DateTimeField(auto_now_add=True)
|
285
272
|
|
286
273
|
class Meta:
|
@@ -75,21 +75,12 @@ class Payment(models.Model):
|
|
75
75
|
related_name="user_payments",
|
76
76
|
)
|
77
77
|
status = models.CharField(
|
78
|
-
max_length=100,
|
79
|
-
default=PaymentStatus.INIT,
|
80
|
-
choices=PaymentStatus.choices,
|
78
|
+
max_length=100, default=PaymentStatus.INIT, choices=PaymentStatus.choices,
|
81
79
|
)
|
82
80
|
method = models.ForeignKey(
|
83
|
-
"stores.PaymentMethod",
|
84
|
-
on_delete=models.CASCADE,
|
85
|
-
null=True,
|
86
|
-
blank=True,
|
87
|
-
)
|
88
|
-
payment_tax = models.ForeignKey(
|
89
|
-
Tax,
|
90
|
-
on_delete=models.SET_NULL,
|
91
|
-
null=True,
|
81
|
+
"stores.PaymentMethod", on_delete=models.CASCADE, null=True, blank=True,
|
92
82
|
)
|
83
|
+
payment_tax = models.ForeignKey(Tax, on_delete=models.SET_NULL, null=True,)
|
93
84
|
orders = models.ManyToManyField("stores.Order", related_name="payments")
|
94
85
|
amount = models.DecimalField(
|
95
86
|
max_digits=settings.DEFAULT_MAX_DIGITS,
|
@@ -141,7 +141,7 @@ class AvailabilityHours(DjangoModelCleanMixin, models.Model):
|
|
141
141
|
def clean(self) -> None:
|
142
142
|
super().clean()
|
143
143
|
try:
|
144
|
-
if self.store.is_open_after_midnight:
|
144
|
+
if self.store.current_opening_hours.is_open_after_midnight:
|
145
145
|
return
|
146
146
|
except Exception as e:
|
147
147
|
logger.info(f"OpeningHours has no store: {e}")
|
@@ -204,10 +204,7 @@ class Product(DjangoModelCleanMixin, models.Model):
|
|
204
204
|
|
205
205
|
name = models.CharField(max_length=200, help_text=_("Name"), unique=True)
|
206
206
|
name_arabic = models.CharField(
|
207
|
-
max_length=200,
|
208
|
-
null=True,
|
209
|
-
blank=True,
|
210
|
-
help_text=_("Name in arabic"),
|
207
|
+
max_length=200, null=True, blank=True, help_text=_("Name in arabic"),
|
211
208
|
)
|
212
209
|
slug = models.SlugField(max_length=255, unique=True)
|
213
210
|
label = models.CharField(
|
@@ -219,18 +216,11 @@ class Product(DjangoModelCleanMixin, models.Model):
|
|
219
216
|
description = models.TextField(null=True, blank=True)
|
220
217
|
description_arabic = models.TextField(null=True, blank=True)
|
221
218
|
# TODO: A product can be assigned to multiple categories
|
222
|
-
category = models.ManyToManyField(
|
223
|
-
Category,
|
224
|
-
related_name="products",
|
225
|
-
blank=True,
|
226
|
-
)
|
219
|
+
category = models.ManyToManyField(Category, related_name="products", blank=True,)
|
227
220
|
is_active = models.BooleanField(default=False)
|
228
221
|
is_featured = models.BooleanField(default=False)
|
229
222
|
tags = models.ManyToManyField(ProductTag, related_name="products", blank=True)
|
230
|
-
type = models.CharField(
|
231
|
-
max_length=32,
|
232
|
-
choices=ProductTypes.choices,
|
233
|
-
)
|
223
|
+
type = models.CharField(max_length=32, choices=ProductTypes.choices,)
|
234
224
|
plu = models.CharField(max_length=40, unique=True, null=True, blank=True)
|
235
225
|
external_id = models.CharField(max_length=40, unique=True, null=True, blank=True)
|
236
226
|
order_value = models.PositiveSmallIntegerField(
|
@@ -377,9 +367,7 @@ class ProductAttribute(DjangoModelCleanMixin, models.Model):
|
|
377
367
|
AttributeChoice, related_name="product_attributes", blank=True
|
378
368
|
)
|
379
369
|
type = models.CharField(
|
380
|
-
max_length=32,
|
381
|
-
default=Type.ONE_CHOICE,
|
382
|
-
choices=Type.choices,
|
370
|
+
max_length=32, default=Type.ONE_CHOICE, choices=Type.choices,
|
383
371
|
)
|
384
372
|
order_value = models.PositiveSmallIntegerField(
|
385
373
|
verbose_name=_("ordering"), default=1
|
@@ -85,9 +85,7 @@ class PaymentMethod(models.Model):
|
|
85
85
|
"""
|
86
86
|
|
87
87
|
payment_provider = models.CharField(
|
88
|
-
max_length=20,
|
89
|
-
choices=settings.PAYMENT_PROVIDER_CHOICES,
|
90
|
-
default="cod",
|
88
|
+
max_length=20, choices=settings.PAYMENT_PROVIDER_CHOICES, default="cod",
|
91
89
|
)
|
92
90
|
is_active = models.BooleanField(default=True)
|
93
91
|
name = models.CharField(max_length=200, help_text=_("Name"))
|
@@ -149,9 +147,7 @@ class Store(DjangoModelCleanMixin, models.Model):
|
|
149
147
|
help_text=_("Shipping methods within the store"),
|
150
148
|
)
|
151
149
|
pickup_addresses = models.ManyToManyField(
|
152
|
-
"stores.address",
|
153
|
-
related_name="pickup_stores",
|
154
|
-
blank=True,
|
150
|
+
"stores.address", related_name="pickup_stores", blank=True,
|
155
151
|
)
|
156
152
|
payment_methods = models.ManyToManyField(
|
157
153
|
PaymentMethod,
|
@@ -179,15 +175,10 @@ class Store(DjangoModelCleanMixin, models.Model):
|
|
179
175
|
)
|
180
176
|
image = models.ImageField(upload_to=store_media_upload_to, null=True, blank=True)
|
181
177
|
currency = models.CharField(
|
182
|
-
max_length=3,
|
183
|
-
default="KWD",
|
184
|
-
validators=[
|
185
|
-
validate_currency,
|
186
|
-
],
|
178
|
+
max_length=3, default="KWD", validators=[validate_currency,],
|
187
179
|
)
|
188
180
|
busy_mode = models.BooleanField(default=False)
|
189
181
|
is_digital = models.BooleanField(default=False)
|
190
|
-
is_open_after_midnight = models.BooleanField(default=False)
|
191
182
|
created_at = models.DateTimeField(auto_now_add=True)
|
192
183
|
updated_at = models.DateTimeField(auto_now=True)
|
193
184
|
|
@@ -246,6 +237,7 @@ class OpeningHours(DjangoModelCleanMixin, models.Model):
|
|
246
237
|
created_at = models.DateTimeField(auto_now_add=True)
|
247
238
|
updated_at = models.DateTimeField(auto_now=True)
|
248
239
|
always_open = models.BooleanField(default=False)
|
240
|
+
is_open_after_midnight = models.BooleanField(default=False)
|
249
241
|
|
250
242
|
class Meta:
|
251
243
|
ordering = ("weekday", "from_hour")
|
@@ -260,7 +252,7 @@ class OpeningHours(DjangoModelCleanMixin, models.Model):
|
|
260
252
|
def clean(self) -> None:
|
261
253
|
super().clean()
|
262
254
|
try:
|
263
|
-
if self.store
|
255
|
+
if self.store:
|
264
256
|
return
|
265
257
|
except Exception as e:
|
266
258
|
logger.info(f"OpeningHours has no store: {e}")
|
@@ -47,9 +47,7 @@ class WalletMedia(DjangoModelCleanMixin, models.Model):
|
|
47
47
|
|
48
48
|
class Wallet(models.Model):
|
49
49
|
user = models.ForeignKey(
|
50
|
-
settings.AUTH_USER_MODEL,
|
51
|
-
on_delete=models.CASCADE,
|
52
|
-
related_name="wallets",
|
50
|
+
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="wallets",
|
53
51
|
)
|
54
52
|
name = models.CharField(max_length=200, null=True, blank=True)
|
55
53
|
name_arabic = models.CharField(max_length=200, null=True, blank=True)
|
@@ -61,11 +59,7 @@ class Wallet(models.Model):
|
|
61
59
|
related_name="wallets",
|
62
60
|
)
|
63
61
|
currency = models.CharField(
|
64
|
-
max_length=3,
|
65
|
-
default="KWD",
|
66
|
-
validators=[
|
67
|
-
validate_currency,
|
68
|
-
],
|
62
|
+
max_length=3, default="KWD", validators=[validate_currency,],
|
69
63
|
)
|
70
64
|
is_active = models.BooleanField(default=True)
|
71
65
|
|
@@ -82,8 +76,7 @@ class Wallet(models.Model):
|
|
82
76
|
query = self.transactions.aggregate(
|
83
77
|
balance=Coalesce(
|
84
78
|
models.Sum(
|
85
|
-
"amount",
|
86
|
-
filter=models.Q(type=WalletTransaction.TYPE.CREDIT),
|
79
|
+
"amount", filter=models.Q(type=WalletTransaction.TYPE.CREDIT),
|
87
80
|
),
|
88
81
|
models.Value(Decimal(0)),
|
89
82
|
output_field=models.DecimalField(),
|
@@ -118,14 +111,10 @@ class Wallet(models.Model):
|
|
118
111
|
)
|
119
112
|
user = self.user
|
120
113
|
order = Order.objects.create(
|
121
|
-
customer=user,
|
122
|
-
payment_method=payment_method,
|
123
|
-
extra_infos=extra_infos,
|
114
|
+
customer=user, payment_method=payment_method, extra_infos=extra_infos,
|
124
115
|
)
|
125
116
|
payment = Payment.objects.create(
|
126
|
-
orders=[
|
127
|
-
order,
|
128
|
-
],
|
117
|
+
orders=[order,],
|
129
118
|
user=user,
|
130
119
|
currency=self.currency,
|
131
120
|
method=payment_method,
|
@@ -148,14 +137,9 @@ class WalletTransaction(models.Model):
|
|
148
137
|
DEBIT = "DEBIT", _("debit")
|
149
138
|
|
150
139
|
wallet = models.ForeignKey(
|
151
|
-
"stores.Wallet",
|
152
|
-
on_delete=models.CASCADE,
|
153
|
-
related_name="transactions",
|
154
|
-
)
|
155
|
-
type = models.CharField(
|
156
|
-
max_length=100,
|
157
|
-
choices=TYPE.choices,
|
140
|
+
"stores.Wallet", on_delete=models.CASCADE, related_name="transactions",
|
158
141
|
)
|
142
|
+
type = models.CharField(max_length=100, choices=TYPE.choices,)
|
159
143
|
|
160
144
|
amount = models.DecimalField(
|
161
145
|
max_digits=settings.DEFAULT_MAX_DIGITS,
|
@@ -34,24 +34,19 @@ def create_customer_cart_and_wallet_handler(sender, instance, created, **kwargs)
|
|
34
34
|
|
35
35
|
|
36
36
|
@receiver(
|
37
|
-
post_save,
|
38
|
-
sender=Order,
|
39
|
-
dispatch_uid="create_order_history_handler",
|
37
|
+
post_save, sender=Order, dispatch_uid="create_order_history_handler",
|
40
38
|
)
|
41
39
|
def create_order_history_handler(sender, instance, created, **kwargs):
|
42
40
|
try:
|
43
41
|
OrderHistory.objects.create(
|
44
|
-
order=instance,
|
45
|
-
status=instance.status,
|
42
|
+
order=instance, status=instance.status,
|
46
43
|
)
|
47
44
|
except Exception:
|
48
45
|
pass
|
49
46
|
|
50
47
|
|
51
48
|
@receiver(
|
52
|
-
pre_save,
|
53
|
-
sender=Category,
|
54
|
-
dispatch_uid="create_category_thumbnails",
|
49
|
+
pre_save, sender=Category, dispatch_uid="create_category_thumbnails",
|
55
50
|
)
|
56
51
|
def create_category_thumbnails(sender, instance, **kwargs):
|
57
52
|
medium_dim = getattr(store_settings, "THUMBNAIL_MEDIUM_DIMENSIONS", None)
|
@@ -74,9 +69,7 @@ def create_category_thumbnails(sender, instance, **kwargs):
|
|
74
69
|
|
75
70
|
|
76
71
|
@receiver(
|
77
|
-
pre_save,
|
78
|
-
sender=ProductMedia,
|
79
|
-
dispatch_uid="create_product_media_thumbnails",
|
72
|
+
pre_save, sender=ProductMedia, dispatch_uid="create_product_media_thumbnails",
|
80
73
|
)
|
81
74
|
def create_product_media_thumbnails(sender, instance, **kwargs):
|
82
75
|
medium_dim = getattr(store_settings, "THUMBNAIL_MEDIUM_DIMENSIONS", None)
|
@@ -99,17 +92,13 @@ def create_product_media_thumbnails(sender, instance, **kwargs):
|
|
99
92
|
|
100
93
|
|
101
94
|
@receiver(
|
102
|
-
pre_save,
|
103
|
-
sender=WalletMedia,
|
104
|
-
dispatch_uid="create_wallet_thumbnails",
|
95
|
+
pre_save, sender=WalletMedia, dispatch_uid="create_wallet_thumbnails",
|
105
96
|
)
|
106
97
|
def create_wallet_thumbnails(sender, instance, **kwargs):
|
107
98
|
medium_dim = getattr(store_settings, "THUMBNAIL_MEDIUM_DIMENSIONS", None)
|
108
99
|
if instance.image and medium_dim:
|
109
100
|
instance.image_thumbnail_medium = resize_image(
|
110
|
-
instance.image,
|
111
|
-
dim=medium_dim,
|
112
|
-
size_name="medium",
|
101
|
+
instance.image, dim=medium_dim, size_name="medium",
|
113
102
|
)
|
114
103
|
|
115
104
|
|
@@ -122,7 +111,5 @@ def create_product_vraiant_image_thumbnails(sender, instance, **kwargs):
|
|
122
111
|
medium_dim = getattr(store_settings, "THUMBNAIL_MEDIUM_DIMENSIONS", None)
|
123
112
|
if instance.image and medium_dim:
|
124
113
|
instance.image_thumbnail_medium = resize_image(
|
125
|
-
instance.image,
|
126
|
-
dim=medium_dim,
|
127
|
-
size_name="medium",
|
114
|
+
instance.image, dim=medium_dim, size_name="medium",
|
128
115
|
)
|
ob_dj_store/core/stores/utils.py
CHANGED
@@ -76,8 +76,7 @@ def get_country_by_currency(currency):
|
|
76
76
|
def validate_currency(value):
|
77
77
|
if not pycountry.currencies.get(alpha_3=value):
|
78
78
|
raise ValidationError(
|
79
|
-
_("%(value)s is not a currency"),
|
80
|
-
params={"value": value},
|
79
|
+
_("%(value)s is not a currency"), params={"value": value},
|
81
80
|
)
|
82
81
|
|
83
82
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: ob-dj-store
|
3
|
-
Version: 0.0.20.
|
3
|
+
Version: 0.0.20.4
|
4
4
|
Summary: OBytes django application for managing ecommerce stores.
|
5
5
|
Home-page: https://www.obytes.com/
|
6
6
|
Author: OBytes
|
@@ -25,6 +25,7 @@ Requires-Dist: djangorestframework-gis
|
|
25
25
|
Requires-Dist: django-filter
|
26
26
|
Requires-Dist: django-leaflet
|
27
27
|
Requires-Dist: django-countries
|
28
|
+
Dynamic: requires-dist
|
28
29
|
|
29
30
|
## OBytes Django Store App
|
30
31
|
|