ob-dj-store 0.0.16__py3-none-any.whl → 0.0.16.1__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/rest/serializers/serializers.py +9 -1
- ob_dj_store/core/stores/admin.py +39 -0
- ob_dj_store/core/stores/admin_inlines.py +5 -0
- ob_dj_store/core/stores/managers.py +16 -1
- ob_dj_store/core/stores/migrations/0091_auto_20231010_1740.py +30 -0
- ob_dj_store/core/stores/migrations/0092_auto_20231012_1339.py +47 -0
- ob_dj_store/core/stores/models/_cart.py +31 -0
- ob_dj_store/core/stores/models/_order.py +15 -0
- ob_dj_store/core/stores/models/_partner.py +13 -3
- ob_dj_store/core/stores/models/_wallet.py +1 -0
- {ob_dj_store-0.0.16.dist-info → ob_dj_store-0.0.16.1.dist-info}/METADATA +1 -1
- {ob_dj_store-0.0.16.dist-info → ob_dj_store-0.0.16.1.dist-info}/RECORD +14 -12
- {ob_dj_store-0.0.16.dist-info → ob_dj_store-0.0.16.1.dist-info}/WHEEL +0 -0
- {ob_dj_store-0.0.16.dist-info → ob_dj_store-0.0.16.1.dist-info}/top_level.txt +0 -0
@@ -180,6 +180,7 @@ class OrderSerializer(serializers.ModelSerializer):
|
|
180
180
|
"total_amount",
|
181
181
|
"preparation_time",
|
182
182
|
"estimated_timeline",
|
183
|
+
"get_discount_amount",
|
183
184
|
"history",
|
184
185
|
"car_id",
|
185
186
|
"pickup_time",
|
@@ -657,6 +658,8 @@ class CartSerializer(serializers.ModelSerializer):
|
|
657
658
|
"total_price",
|
658
659
|
"tax_amount",
|
659
660
|
"total_price_with_tax",
|
661
|
+
"discount_offer_amount",
|
662
|
+
"total_price_with_discount",
|
660
663
|
)
|
661
664
|
read_only_fields = (
|
662
665
|
"id",
|
@@ -1524,7 +1527,7 @@ class PartnerOTPRequestSerializer(serializers.ModelSerializer):
|
|
1524
1527
|
|
1525
1528
|
|
1526
1529
|
class PartnerAuthInfoSerializer(serializers.ModelSerializer):
|
1527
|
-
promotion_code = serializers.
|
1530
|
+
promotion_code = serializers.IntegerField(write_only=True, required=False)
|
1528
1531
|
otp_code = serializers.IntegerField(write_only=True, required=False)
|
1529
1532
|
email = serializers.EmailField(write_only=True, required=True)
|
1530
1533
|
|
@@ -1578,6 +1581,11 @@ class PartnerAuthInfoSerializer(serializers.ModelSerializer):
|
|
1578
1581
|
promotion_code = attrs.get("promotion_code", None)
|
1579
1582
|
if promotion_code == None:
|
1580
1583
|
raise serializers.ValidationError(_("Promotion code is required"))
|
1584
|
+
elif not partner.promotion_code:
|
1585
|
+
logger.error(f"{partner.name} does not have promotion code")
|
1586
|
+
raise serializers.ValidationError(_("Promotion code is not working"))
|
1587
|
+
elif partner.promotion_code != promotion_code:
|
1588
|
+
raise serializers.ValidationError(_("Promotion code is invalid"))
|
1581
1589
|
return attrs
|
1582
1590
|
|
1583
1591
|
def validate(self, attrs):
|
ob_dj_store/core/stores/admin.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import typing
|
2
|
+
from typing import Any
|
2
3
|
|
3
4
|
from django import forms
|
4
5
|
from django.contrib import admin
|
@@ -16,6 +17,7 @@ from ob_dj_store.core.stores.admin_inlines import (
|
|
16
17
|
OpeningHoursInlineAdmin,
|
17
18
|
OrderHistoryInlineAdmin,
|
18
19
|
OrderItemInline,
|
20
|
+
PartnerEmailDomainInlineAdmin,
|
19
21
|
PhoneContactInlineAdmin,
|
20
22
|
ProductAttributeInlineAdmin,
|
21
23
|
ProductMediaInlineAdmin,
|
@@ -386,6 +388,11 @@ class WalletTransactionAdmin(ImportExportModelAdmin, admin.ModelAdmin):
|
|
386
388
|
def user(self, obj) -> typing.Text:
|
387
389
|
return obj.wallet.user.email
|
388
390
|
|
391
|
+
def save_model(self, request: Any, obj: Any, form: Any, change: Any) -> None:
|
392
|
+
if not obj.pk:
|
393
|
+
obj.is_by_admin = True
|
394
|
+
return super().save_model(request, obj, form, change)
|
395
|
+
|
389
396
|
|
390
397
|
class WalletAdmin(admin.ModelAdmin):
|
391
398
|
list_display = ("id", "user", "balance", "currency")
|
@@ -402,6 +409,35 @@ class AvailabilityHoursAdmin(admin.ModelAdmin):
|
|
402
409
|
list_display = ("id", "store", "category", "from_hour", "to_hour")
|
403
410
|
|
404
411
|
|
412
|
+
# Partner Admins
|
413
|
+
class PartnerAdmin(admin.ModelAdmin):
|
414
|
+
list_display = ("name", "auth_method", "country", "discount", "promotion_code")
|
415
|
+
search_fields = ["name", "country", "domains__email_domain"]
|
416
|
+
list_filter = ["discount", "auth_method"]
|
417
|
+
inlines = [
|
418
|
+
PartnerEmailDomainInlineAdmin,
|
419
|
+
]
|
420
|
+
|
421
|
+
|
422
|
+
class DiscountAdmin(admin.ModelAdmin):
|
423
|
+
list_display = ("id", "discount_rate", "is_active")
|
424
|
+
|
425
|
+
|
426
|
+
class PartnerAuthInfoAdmin(admin.ModelAdmin):
|
427
|
+
list_display = (
|
428
|
+
"id",
|
429
|
+
"user",
|
430
|
+
"email",
|
431
|
+
"partner",
|
432
|
+
"authentication_expires",
|
433
|
+
"created_at",
|
434
|
+
)
|
435
|
+
search_fields = ["email", "user__email", "partner__name"]
|
436
|
+
list_filter = [
|
437
|
+
"authentication_expires",
|
438
|
+
]
|
439
|
+
|
440
|
+
|
405
441
|
admin.site.register(models.Store, StoreAdmin)
|
406
442
|
admin.site.register(models.ShippingMethod, ShippingMethodAdmin)
|
407
443
|
admin.site.register(models.PaymentMethod, PaymentMethodAdmin)
|
@@ -422,3 +458,6 @@ admin.site.register(models.Wallet, WalletAdmin)
|
|
422
458
|
admin.site.register(models.WalletMedia, WalletMediaAdmin)
|
423
459
|
admin.site.register(models.AvailabilityHours, AvailabilityHoursAdmin)
|
424
460
|
admin.site.register(models.Menu, MenuAdmin)
|
461
|
+
admin.site.register(models.Partner, PartnerAdmin)
|
462
|
+
admin.site.register(models.Discount, DiscountAdmin)
|
463
|
+
admin.site.register(models.PartnerAuthInfo, PartnerAuthInfoAdmin)
|
@@ -118,3 +118,8 @@ class OrderItemInline(admin.TabularInline):
|
|
118
118
|
class InventoryOperationInlineAdmin(admin.TabularInline):
|
119
119
|
model = models.InventoryOperations
|
120
120
|
extra = 1
|
121
|
+
|
122
|
+
|
123
|
+
class PartnerEmailDomainInlineAdmin(admin.TabularInline):
|
124
|
+
model = models.PartnerEmailDomain
|
125
|
+
extra = 1
|
@@ -6,6 +6,7 @@ from decimal import Decimal
|
|
6
6
|
from django.contrib.contenttypes.models import ContentType
|
7
7
|
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
8
8
|
from django.db import models
|
9
|
+
from django.utils.timezone import now
|
9
10
|
from django.utils.translation import gettext_lazy as _
|
10
11
|
|
11
12
|
from config import settings
|
@@ -63,7 +64,7 @@ class PaymentManager(models.Manager):
|
|
63
64
|
{"order", _("You cannot perform payment without items")}
|
64
65
|
)
|
65
66
|
try:
|
66
|
-
if orders[0].store:
|
67
|
+
if orders[0].store and orders[0].type_of_order == "PHYSICAL":
|
67
68
|
kwargs["payment_tax"] = Tax.objects.get(
|
68
69
|
country=orders[0].store.address.country, is_active=True
|
69
70
|
)
|
@@ -150,7 +151,21 @@ class OrderManager(models.Manager):
|
|
150
151
|
from ob_dj_store.apis.stores.rest.serializers.serializers import (
|
151
152
|
OrderDataSerializer,
|
152
153
|
)
|
154
|
+
from ob_dj_store.core.stores.models._partner import PartnerAuthInfo
|
153
155
|
|
156
|
+
try:
|
157
|
+
partner_auth_info = PartnerAuthInfo.objects.get(
|
158
|
+
user=kwargs["customer"],
|
159
|
+
authentication_expires__gte=now(),
|
160
|
+
partner__offer_start_time__lte=now(),
|
161
|
+
partner__offer_end_time__gt=now(),
|
162
|
+
)
|
163
|
+
except ObjectDoesNotExist:
|
164
|
+
partner_auth_info = None
|
165
|
+
if partner_auth_info:
|
166
|
+
partner = partner_auth_info.partner
|
167
|
+
if partner.stores.filter(pk=kwargs["store"].pk).exists():
|
168
|
+
kwargs["discount"] = partner.discount
|
154
169
|
order = super().create(**kwargs)
|
155
170
|
serializer = OrderDataSerializer(order)
|
156
171
|
order.init_data = serializer.data
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Generated by Django 3.2.8 on 2023-10-10 14:40
|
2
|
+
|
3
|
+
from django.db import migrations, models
|
4
|
+
|
5
|
+
|
6
|
+
class Migration(migrations.Migration):
|
7
|
+
|
8
|
+
dependencies = [
|
9
|
+
("stores", "0090_auto_20231006_1356"),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AddField(
|
14
|
+
model_name="partner",
|
15
|
+
name="stores",
|
16
|
+
field=models.ManyToManyField(related_name="partners", to="stores.Store"),
|
17
|
+
),
|
18
|
+
migrations.AlterField(
|
19
|
+
model_name="partner",
|
20
|
+
name="promotion_code",
|
21
|
+
field=models.PositiveBigIntegerField(
|
22
|
+
blank=True, null=True, unique=True, verbose_name="Promotion code"
|
23
|
+
),
|
24
|
+
),
|
25
|
+
migrations.AlterField(
|
26
|
+
model_name="partneremaildomain",
|
27
|
+
name="email_domain",
|
28
|
+
field=models.CharField(max_length=255, unique=True),
|
29
|
+
),
|
30
|
+
]
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Generated by Django 3.2.8 on 2023-10-12 10:39
|
2
|
+
|
3
|
+
import django.db.models.deletion
|
4
|
+
import django.utils.timezone
|
5
|
+
from django.db import migrations, models
|
6
|
+
|
7
|
+
import ob_dj_store.core.stores.models._partner
|
8
|
+
|
9
|
+
|
10
|
+
class Migration(migrations.Migration):
|
11
|
+
|
12
|
+
dependencies = [
|
13
|
+
("stores", "0091_auto_20231010_1740"),
|
14
|
+
]
|
15
|
+
|
16
|
+
operations = [
|
17
|
+
migrations.AddField(
|
18
|
+
model_name="order",
|
19
|
+
name="discount",
|
20
|
+
field=models.ForeignKey(
|
21
|
+
blank=True,
|
22
|
+
null=True,
|
23
|
+
on_delete=django.db.models.deletion.PROTECT,
|
24
|
+
to="stores.discount",
|
25
|
+
),
|
26
|
+
),
|
27
|
+
migrations.AddField(
|
28
|
+
model_name="partner",
|
29
|
+
name="offer_end_time",
|
30
|
+
field=models.DateTimeField(
|
31
|
+
default=ob_dj_store.core.stores.models._partner.default_offer_end_time,
|
32
|
+
verbose_name="Offer end date",
|
33
|
+
),
|
34
|
+
),
|
35
|
+
migrations.AddField(
|
36
|
+
model_name="partner",
|
37
|
+
name="offer_start_time",
|
38
|
+
field=models.DateTimeField(
|
39
|
+
default=django.utils.timezone.now, verbose_name="Offer start date"
|
40
|
+
),
|
41
|
+
),
|
42
|
+
migrations.AddField(
|
43
|
+
model_name="wallettransaction",
|
44
|
+
name="is_by_admin",
|
45
|
+
field=models.BooleanField(default=False),
|
46
|
+
),
|
47
|
+
]
|
@@ -3,9 +3,11 @@ from decimal import Decimal
|
|
3
3
|
from django.contrib.auth import get_user_model
|
4
4
|
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
5
5
|
from django.db import models
|
6
|
+
from django.utils.timezone import now
|
6
7
|
from django.utils.translation import gettext_lazy as _
|
7
8
|
|
8
9
|
from ob_dj_store.core.stores.managers import CartItemManager, CartManager
|
10
|
+
from ob_dj_store.core.stores.models._partner import PartnerAuthInfo
|
9
11
|
|
10
12
|
|
11
13
|
class Cart(models.Model):
|
@@ -43,6 +45,27 @@ class Cart(models.Model):
|
|
43
45
|
def total_price_with_tax(self) -> Decimal:
|
44
46
|
return self.total_price + self.tax_amount
|
45
47
|
|
48
|
+
@property
|
49
|
+
def get_user_partner(self):
|
50
|
+
try:
|
51
|
+
partner_auth_info = PartnerAuthInfo.objects.get(
|
52
|
+
user=self.customer,
|
53
|
+
authentication_expires__gte=now(),
|
54
|
+
partner__offer_start_time__lte=now(),
|
55
|
+
partner__offer_end_time__gt=now(),
|
56
|
+
)
|
57
|
+
return partner_auth_info.partner
|
58
|
+
except ObjectDoesNotExist:
|
59
|
+
return None
|
60
|
+
|
61
|
+
@property
|
62
|
+
def discount_offer_amount(self):
|
63
|
+
return sum(map(lambda item: item.discount_amount, self.items.all()))
|
64
|
+
|
65
|
+
@property
|
66
|
+
def total_price_with_discount(self):
|
67
|
+
return self.total_price - self.discount_offer_amount
|
68
|
+
|
46
69
|
def __str__(self):
|
47
70
|
return f"Cart - {self.customer.email} with total price {self.total_price}"
|
48
71
|
|
@@ -124,6 +147,14 @@ class CartItem(models.Model):
|
|
124
147
|
pass
|
125
148
|
return 0
|
126
149
|
|
150
|
+
@property
|
151
|
+
def discount_amount(self):
|
152
|
+
partner = self.cart.get_user_partner
|
153
|
+
if partner:
|
154
|
+
if partner.discount and partner.stores.filter(pk=self.store.pk).exists():
|
155
|
+
return partner.discount.perc_to_flat(self.total_price)
|
156
|
+
return Decimal(0)
|
157
|
+
|
127
158
|
@property
|
128
159
|
def attribute_choices_total_price(self) -> Decimal:
|
129
160
|
total_price = Decimal(0)
|
@@ -37,6 +37,9 @@ class Order(DjangoModelCleanMixin, models.Model):
|
|
37
37
|
# TODO: Probably we want to setup the on_delete to SET_NULL because orders is part of
|
38
38
|
# sales and even if a user deleted orders cannot disappear otherwise will reflect
|
39
39
|
# invalid sales figure; same can be applied for the store field
|
40
|
+
discount = models.ForeignKey(
|
41
|
+
"stores.Discount", on_delete=models.PROTECT, null=True, blank=True
|
42
|
+
)
|
40
43
|
customer = models.ForeignKey(
|
41
44
|
get_user_model(),
|
42
45
|
related_name="orders",
|
@@ -126,6 +129,10 @@ class Order(DjangoModelCleanMixin, models.Model):
|
|
126
129
|
self.status = Order.OrderStatus.READY
|
127
130
|
self.save()
|
128
131
|
|
132
|
+
@property
|
133
|
+
def get_discount_amount(self):
|
134
|
+
return sum(map(lambda item: item.discount_offer_amount, self.items.all()))
|
135
|
+
|
129
136
|
@property
|
130
137
|
def total_amount(self):
|
131
138
|
if self.type_of_order == Order.OrderType.WALLET.value:
|
@@ -137,6 +144,7 @@ class Order(DjangoModelCleanMixin, models.Model):
|
|
137
144
|
)
|
138
145
|
if self.shipping_method:
|
139
146
|
amount += self.shipping_method.shipping_fee
|
147
|
+
amount -= self.get_discount_amount
|
140
148
|
return amount
|
141
149
|
|
142
150
|
@property
|
@@ -211,6 +219,13 @@ class OrderItem(DjangoModelCleanMixin, models.Model):
|
|
211
219
|
total_price += attribute_choice.price
|
212
220
|
return total_price
|
213
221
|
|
222
|
+
@property
|
223
|
+
def discount_offer_amount(self):
|
224
|
+
discount = self.order.discount
|
225
|
+
if discount:
|
226
|
+
return discount.perc_to_flat(self.total_amount)
|
227
|
+
return Decimal(0)
|
228
|
+
|
214
229
|
@property
|
215
230
|
def total_amount(self):
|
216
231
|
if self.total_price > 0:
|
@@ -10,6 +10,7 @@ from django_countries.fields import CountryField
|
|
10
10
|
from ob_dj_otp.core.otp.models import OneTruePairing
|
11
11
|
|
12
12
|
from ob_dj_store.core.stores.managers import PartnerAuthInfoManager
|
13
|
+
from ob_dj_store.core.stores.models._store import Store
|
13
14
|
from ob_dj_store.utils.model import DjangoModelCleanMixin
|
14
15
|
|
15
16
|
logger = logging.getLogger(__name__)
|
@@ -26,20 +27,25 @@ class Discount(models.Model):
|
|
26
27
|
updated_at = models.DateTimeField(auto_now=True)
|
27
28
|
|
28
29
|
def __str__(self) -> str:
|
29
|
-
return f"
|
30
|
+
return f"{self.discount_rate * 100}% Discount"
|
30
31
|
|
31
32
|
def perc_to_flat(self, amount):
|
32
33
|
return amount * self.discount_rate
|
33
34
|
|
34
35
|
|
36
|
+
def default_offer_end_time():
|
37
|
+
return now() + timedelta(days=getattr(settings, "DEFAULT_PARTNER_OFFER_TIME", 60))
|
38
|
+
|
39
|
+
|
35
40
|
class Partner(DjangoModelCleanMixin, models.Model):
|
36
41
|
class AuthMethods(models.TextChoices):
|
37
42
|
OTP = "OTP", _("One True Pairing")
|
38
43
|
CODE = "CODE", _("Promotion code")
|
39
44
|
|
40
45
|
name = models.CharField(_("Partner's Name"), max_length=255)
|
46
|
+
stores = models.ManyToManyField(Store, related_name="partners")
|
41
47
|
promotion_code = models.PositiveBigIntegerField(
|
42
|
-
_("Promotion code"), null=True, blank=True
|
48
|
+
_("Promotion code"), null=True, blank=True, unique=True
|
43
49
|
)
|
44
50
|
auth_method = models.CharField(
|
45
51
|
_("Authentication method"), max_length=255, choices=AuthMethods.choices
|
@@ -48,6 +54,10 @@ class Partner(DjangoModelCleanMixin, models.Model):
|
|
48
54
|
discount = models.ForeignKey(
|
49
55
|
Discount, on_delete=models.PROTECT, related_name="partners"
|
50
56
|
)
|
57
|
+
offer_start_time = models.DateTimeField(_("Offer start date"), default=now)
|
58
|
+
offer_end_time = models.DateTimeField(
|
59
|
+
_("Offer end date"), default=default_offer_end_time
|
60
|
+
)
|
51
61
|
|
52
62
|
# Audit fields
|
53
63
|
created_at = models.DateTimeField(auto_now_add=True)
|
@@ -61,7 +71,7 @@ class PartnerEmailDomain(DjangoModelCleanMixin, models.Model):
|
|
61
71
|
partner = models.ForeignKey(
|
62
72
|
Partner, on_delete=models.CASCADE, related_name="domains"
|
63
73
|
)
|
64
|
-
email_domain = models.CharField(max_length=255)
|
74
|
+
email_domain = models.CharField(max_length=255, unique=True)
|
65
75
|
|
66
76
|
# Audit fields
|
67
77
|
created_at = models.DateTimeField(auto_now_add=True)
|
@@ -161,6 +161,7 @@ class WalletTransaction(models.Model):
|
|
161
161
|
decimal_places=settings.DEFAULT_DECIMAL_PLACES,
|
162
162
|
)
|
163
163
|
|
164
|
+
is_by_admin = models.BooleanField(default=False)
|
164
165
|
is_cashback = models.BooleanField(default=False)
|
165
166
|
is_refund = models.BooleanField(default=False)
|
166
167
|
|
@@ -3,17 +3,17 @@ ob_dj_store/apis/stores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
3
3
|
ob_dj_store/apis/stores/filters.py,sha256=cWEIriaBil5iJlnTgFPMYJtyaHNcI3x3EoQ5X12lkCI,8927
|
4
4
|
ob_dj_store/apis/stores/urls.py,sha256=xL7CUNJDqxWzb8Gt7gYH63rmQ00rfGoTr9duiu9-0v8,1778
|
5
5
|
ob_dj_store/apis/stores/views.py,sha256=llLsupgQ-Rq9KqeE0ajNq7Lpj7bIDkvPN7cbhsd3Nn4,40134
|
6
|
-
ob_dj_store/apis/stores/rest/serializers/serializers.py,sha256=
|
6
|
+
ob_dj_store/apis/stores/rest/serializers/serializers.py,sha256=5nlrfs9l0rfb1Ai7rKcWrfpKAbiGF_xI3R8Bk2MB-Go,55919
|
7
7
|
ob_dj_store/apis/tap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
8
|
ob_dj_store/apis/tap/serializers.py,sha256=KPrBK4h2-fWvEVf6vOj2ww5-USV9WqpyYicIqoHIiXI,1065
|
9
9
|
ob_dj_store/apis/tap/urls.py,sha256=bnOTv6an11kxpo_FdqlhsizlGPLVpNxBjCyKcf3_C9M,367
|
10
10
|
ob_dj_store/apis/tap/views.py,sha256=VnVquybTHlJquxsC0RNTy20dtLXalchO0SlGjSDaBng,2666
|
11
11
|
ob_dj_store/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
12
|
ob_dj_store/core/stores/__init__.py,sha256=-izNGrxNn_nn3IQXd5pkuES9lSF-AHYb14yhNPozYCI,65
|
13
|
-
ob_dj_store/core/stores/admin.py,sha256=
|
14
|
-
ob_dj_store/core/stores/admin_inlines.py,sha256=
|
13
|
+
ob_dj_store/core/stores/admin.py,sha256=klnZPKa5BR0yBqTKAYlJJys5RqpG9V4bLEXNI34h8mI,11680
|
14
|
+
ob_dj_store/core/stores/admin_inlines.py,sha256=NM8Ab7htloQdihRBmew4Ie-ENsKhMlKRIsIH06xO1Mw,2903
|
15
15
|
ob_dj_store/core/stores/apps.py,sha256=ZadmEER_dNcQTH617b3fAsYZJSyRw0g46Kjp4eOAsOU,498
|
16
|
-
ob_dj_store/core/stores/managers.py,sha256=
|
16
|
+
ob_dj_store/core/stores/managers.py,sha256=DeO8wlN7YvbVZvKZWt5Z4aDgcip54vCioCZH-IRQhuY,9548
|
17
17
|
ob_dj_store/core/stores/receivers.py,sha256=DljYC97C_e1mHduKw9Un6YQmxIdwSIter7yVVZwggFA,3768
|
18
18
|
ob_dj_store/core/stores/settings_validation.py,sha256=eTkRaI6CG5OEJQyI5CF-cNAcvjzXf3GwX5sR97O3v98,3977
|
19
19
|
ob_dj_store/core/stores/utils.py,sha256=70cE4mf64KiEdh5yYhUfLIqykH2MbnN9xlvNgEx5Mk0,2775
|
@@ -122,24 +122,26 @@ ob_dj_store/core/stores/migrations/0087_auto_20230828_2138.py,sha256=ESHEN8RnSQh
|
|
122
122
|
ob_dj_store/core/stores/migrations/0088_alter_paymentmethod_payment_provider.py,sha256=SuZ2YFSPaZB2O54jP7U31NH2JD5tKmyR0kalLIuAvQ8,932
|
123
123
|
ob_dj_store/core/stores/migrations/0089_discount_partner_partnerauthinfo_partneremaildomain_partnerotpauth.py,sha256=c8IbAcCLkxw0ttI0UQxWkY0ZyBOD_AUDRn6dSXNshLA,7374
|
124
124
|
ob_dj_store/core/stores/migrations/0090_auto_20231006_1356.py,sha256=wJGLZDhri35X_Tr72gYrzZP6EEuz3qiKRN9BDsmLfCU,871
|
125
|
+
ob_dj_store/core/stores/migrations/0091_auto_20231010_1740.py,sha256=qUjN-qPM3k19dLpG42tEPePacFTTWvussGtsgetBNEU,862
|
126
|
+
ob_dj_store/core/stores/migrations/0092_auto_20231012_1339.py,sha256=KzINBlngxNmU-dQjV5VgZssVL6jihxY7jbMfpfDN5K4,1367
|
125
127
|
ob_dj_store/core/stores/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
126
128
|
ob_dj_store/core/stores/models/__init__.py,sha256=vG1vVOXne3Gg938-015MGrXQAaxqVLYF0Amd85oKrhY,1991
|
127
129
|
ob_dj_store/core/stores/models/_address.py,sha256=qS5TQ9Z12zx_4CrrHvG8PoYVkdiOq_MtbKR14WKh3Hw,1661
|
128
|
-
ob_dj_store/core/stores/models/_cart.py,sha256=
|
130
|
+
ob_dj_store/core/stores/models/_cart.py,sha256=9JYfu-T0_AZiZEY8vaHJ719L4zqVOgvMXj3sj-dixtE,5856
|
129
131
|
ob_dj_store/core/stores/models/_favorite.py,sha256=ZVFCsDWB8fOcx5LkhNphTNRGuEUdsHM0ex1-OtFa4gA,3232
|
130
132
|
ob_dj_store/core/stores/models/_feedback.py,sha256=eCUVgprNK5hSRKOS4M_pdR7QH2-rqhoYevlpykhCOLg,1472
|
131
133
|
ob_dj_store/core/stores/models/_inventory.py,sha256=ZU8xDMQZxLnFehkBEGWr-os4AF1IlCn5XnBxvRq9IAs,4314
|
132
|
-
ob_dj_store/core/stores/models/_order.py,sha256=
|
133
|
-
ob_dj_store/core/stores/models/_partner.py,sha256=
|
134
|
+
ob_dj_store/core/stores/models/_order.py,sha256=am-tpHs0b4mu5xdj5xaK3LQjhGs88aKNyhLFX8g8XA4,9139
|
135
|
+
ob_dj_store/core/stores/models/_partner.py,sha256=N4nc7FUWBkkkBar6__nJ2Jg1SxOBnt1YCnsLaKpa_vk,4057
|
134
136
|
ob_dj_store/core/stores/models/_payment.py,sha256=mz54fuxmcNQ1pVBC959f7gnbIld1haxIYK0Xuv6UVoM,6320
|
135
137
|
ob_dj_store/core/stores/models/_product.py,sha256=jWbhk-oXngLdHqBTnHNokzN_MhcBArsD1R7UjOnfAzY,15287
|
136
138
|
ob_dj_store/core/stores/models/_store.py,sha256=NnyXG7_L_UYrNKaQYuHOBEWc6DQqAPd1OZJg0xOccKk,8005
|
137
|
-
ob_dj_store/core/stores/models/_wallet.py,sha256=
|
139
|
+
ob_dj_store/core/stores/models/_wallet.py,sha256=0Ap6CYGFC0IJ9nfgPU1ypDq3r9HQjI5L9J8vz6FE7Es,5380
|
138
140
|
ob_dj_store/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
139
141
|
ob_dj_store/utils/helpers.py,sha256=o7wgypM7mI2vZqZKkhxnTcnHJC8GMQDOuYMnRwXr6tY,2058
|
140
142
|
ob_dj_store/utils/model.py,sha256=DV7hOhTaZL3gh9sptts2jTUFlTArKG3i7oPioq9HLFE,303
|
141
143
|
ob_dj_store/utils/utils.py,sha256=8UVAFB56qUSjJJ5f9vnermtw638gdFy4CFRCuMbns_M,1342
|
142
|
-
ob_dj_store-0.0.16.dist-info/METADATA,sha256=
|
143
|
-
ob_dj_store-0.0.16.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
144
|
-
ob_dj_store-0.0.16.dist-info/top_level.txt,sha256=CZG3G0ptTkzGnc0dFYN-ZD7YKdJBmm47bsmGwofD_lk,12
|
145
|
-
ob_dj_store-0.0.16.dist-info/RECORD,,
|
144
|
+
ob_dj_store-0.0.16.1.dist-info/METADATA,sha256=0NDzIbqnGaB5C25MeBZobX2rD72RhbgXpI_UGy6y3OI,2827
|
145
|
+
ob_dj_store-0.0.16.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
146
|
+
ob_dj_store-0.0.16.1.dist-info/top_level.txt,sha256=CZG3G0ptTkzGnc0dFYN-ZD7YKdJBmm47bsmGwofD_lk,12
|
147
|
+
ob_dj_store-0.0.16.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|