ob-dj-store 0.0.20.1__py3-none-any.whl → 0.0.20.3__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 +13 -17
- 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 -20
- ob_dj_store/core/stores/admin_inlines.py +1 -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/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 +5 -19
- ob_dj_store/core/stores/models/_payment.py +3 -12
- ob_dj_store/core/stores/models/_product.py +4 -16
- ob_dj_store/core/stores/models/_store.py +3 -11
- 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.1.dist-info → ob_dj_store-0.0.20.3.dist-info}/METADATA +1 -1
- {ob_dj_store-0.0.20.1.dist-info → ob_dj_store-0.0.20.3.dist-info}/RECORD +59 -58
- {ob_dj_store-0.0.20.1.dist-info → ob_dj_store-0.0.20.3.dist-info}/WHEEL +1 -1
- {ob_dj_store-0.0.20.1.dist-info → ob_dj_store-0.0.20.3.dist-info}/top_level.txt +0 -0
| @@ -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 | 
            +
                ]
         | 
| @@ -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,10 +88,7 @@ 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 |  | 
| 102 94 | 
             
                # TODO: add pick_up_time maybe ?
         | 
| @@ -195,10 +187,7 @@ class OrderItem(DjangoModelCleanMixin, models.Model): | |
| 195 187 | 
             
                total_price = models.DecimalField(max_digits=10, decimal_places=3, default=0)
         | 
| 196 188 | 
             
                quantity = models.PositiveIntegerField(
         | 
| 197 189 | 
             
                    validators=[
         | 
| 198 | 
            -
                        MinValueValidator(
         | 
| 199 | 
            -
                            1,
         | 
| 200 | 
            -
                            message="Can you please provide a valid quantity !",
         | 
| 201 | 
            -
                        )
         | 
| 190 | 
            +
                        MinValueValidator(1, message="Can you please provide a valid quantity !",)
         | 
| 202 191 | 
             
                    ],
         | 
| 203 192 | 
             
                    help_text=_("quantity of the variant"),
         | 
| 204 193 | 
             
                )
         | 
| @@ -277,10 +266,7 @@ class OrderHistory(DjangoModelCleanMixin, models.Model): | |
| 277 266 | 
             
                """
         | 
| 278 267 |  | 
| 279 268 | 
             
                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 | 
            -
                )
         | 
| 269 | 
            +
                status = models.CharField(max_length=32, choices=Order.OrderStatus.choices,)
         | 
| 284 270 | 
             
                created_at = models.DateTimeField(auto_now_add=True)
         | 
| 285 271 |  | 
| 286 272 | 
             
                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,
         | 
| @@ -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,11 +175,7 @@ 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)
         | 
| @@ -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 |  |