From 74ecc581aeec5167e3edb5e93f29fc914b550d3d Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Mon, 25 Aug 2025 10:45:11 +0500 Subject: [PATCH] add new features --- config/conf/celery.py | 6 +++++ config/settings/base.py | 3 ++- .../migrations/0023_alter_party_orders.py | 18 +++++++++++++ core/apps/orders/models/party.py | 2 +- core/apps/orders/serializers/order.py | 4 ++- core/apps/orders/tasks/order.py | 14 +++++++++++ .../0003_inventory_price_inventory_unity.py | 25 +++++++++++++++++++ core/apps/wherehouse/models/inventory.py | 6 +++++ docker-compose.yaml | 14 +++++++++++ 9 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 config/conf/celery.py create mode 100644 core/apps/orders/migrations/0023_alter_party_orders.py create mode 100644 core/apps/orders/tasks/order.py create mode 100644 core/apps/wherehouse/migrations/0003_inventory_price_inventory_unity.py diff --git a/config/conf/celery.py b/config/conf/celery.py new file mode 100644 index 0000000..231f9e3 --- /dev/null +++ b/config/conf/celery.py @@ -0,0 +1,6 @@ +from django.conf import settings + +CELERY_BROKER_URL = 'redis://redis:6379/0' +CELERY_ACCEPT_CONTENT = ['json'] +CELERY_TASK_SERIALIZER = 'json' +CELERY_TIMEZONE = settings.TIME_ZONE \ No newline at end of file diff --git a/config/settings/base.py b/config/settings/base.py index c636b3a..16b0ead 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -159,4 +159,5 @@ from config.conf.logs import * from config.conf.cors_headers import * from config.conf.drf_yasg import * from config.conf.jazzmin import * -from config.conf.redis import * \ No newline at end of file +from config.conf.redis import * +from config.conf.celery import * \ No newline at end of file diff --git a/core/apps/orders/migrations/0023_alter_party_orders.py b/core/apps/orders/migrations/0023_alter_party_orders.py new file mode 100644 index 0000000..68ff60f --- /dev/null +++ b/core/apps/orders/migrations/0023_alter_party_orders.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.4 on 2025-08-25 10:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0022_alter_party_number'), + ] + + operations = [ + migrations.AlterField( + model_name='party', + name='orders', + field=models.ManyToManyField(blank=True, related_name='parties', to='orders.order'), + ), + ] diff --git a/core/apps/orders/models/party.py b/core/apps/orders/models/party.py index bff1956..adbb82c 100644 --- a/core/apps/orders/models/party.py +++ b/core/apps/orders/models/party.py @@ -28,7 +28,7 @@ class Party(BaseModel): ) number = models.PositiveIntegerField(default=0) - orders = models.ManyToManyField(Order, related_name='parties', null=True, blank=True) + orders = models.ManyToManyField(Order, related_name='parties', blank=True) mediator = models.ForeignKey(User, on_delete=models.CASCADE, related_name='parties') # dates delivery_date = models.DateField() diff --git a/core/apps/orders/serializers/order.py b/core/apps/orders/serializers/order.py index 8b47437..b394667 100644 --- a/core/apps/orders/serializers/order.py +++ b/core/apps/orders/serializers/order.py @@ -1,8 +1,9 @@ from django.db import transaction from rest_framework import serializers - +# orders from core.apps.orders.models import Order +from core.apps.orders.tasks.order import create_inventory # products from core.apps.products.models import Product, Unity from core.apps.products.serializers.product import ProductListSerializer @@ -80,6 +81,7 @@ class MultipleOrderCreateSerializer(serializers.Serializer): date=common_date, employee=self.context.get('user'), )) + create_inventory.delay(resource['wherehouse'],resource['quantity'],resource) created_orders = Order.objects.bulk_create(orders) return created_orders diff --git a/core/apps/orders/tasks/order.py b/core/apps/orders/tasks/order.py new file mode 100644 index 0000000..d12f2d6 --- /dev/null +++ b/core/apps/orders/tasks/order.py @@ -0,0 +1,14 @@ +from celery import shared_task + +from core.apps.wherehouse.models.inventory import Inventory + + +@shared_task +def create_inventory(wherehouse, quantity, product, unity, price): + Inventory.objects.create( + wherehouse__id=wherehouse, + quantity=quantity, + product__id=product, + unity__id=unity, + price=price + ) diff --git a/core/apps/wherehouse/migrations/0003_inventory_price_inventory_unity.py b/core/apps/wherehouse/migrations/0003_inventory_price_inventory_unity.py new file mode 100644 index 0000000..7dbede3 --- /dev/null +++ b/core/apps/wherehouse/migrations/0003_inventory_price_inventory_unity.py @@ -0,0 +1,25 @@ +# Generated by Django 5.2.4 on 2025-08-25 10:13 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('products', '0006_alter_product_type'), + ('wherehouse', '0002_stockmovemend'), + ] + + operations = [ + migrations.AddField( + model_name='inventory', + name='price', + field=models.PositiveBigIntegerField(default=0), + ), + migrations.AddField( + model_name='inventory', + name='unity', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inventories', to='products.unity'), + ), + ] diff --git a/core/apps/wherehouse/models/inventory.py b/core/apps/wherehouse/models/inventory.py index d0e2b7c..0bf7f71 100644 --- a/core/apps/wherehouse/models/inventory.py +++ b/core/apps/wherehouse/models/inventory.py @@ -1,15 +1,21 @@ from django.db import models from django.utils.translation import gettext_lazy as _ +# shared from core.apps.shared.models import BaseModel +# warehouse from core.apps.wherehouse.models.wherehouse import WhereHouse +# products from core.apps.products.models.product import Product +from core.apps.products.models.unity import Unity class Inventory(BaseModel): wherehouse = models.ForeignKey(WhereHouse, on_delete=models.CASCADE, related_name='inventories') quantity = models.PositiveIntegerField(default=0) product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='inventories') + unity = models.ForeignKey(Unity, on_delete=models.SET_NULL, related_name='inventories', null=True) + price = models.PositiveBigIntegerField(default=0) def __str__(self): return f'{self.product} in {self.wherehouse}' diff --git a/docker-compose.yaml b/docker-compose.yaml index 82ba3d4..e35f6b3 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -50,4 +50,18 @@ services: networks: - uyqur image: redis + ports: + - "6380:6379" + celery: + build: + context: . + dockerfile: ./docker/Dockerfile.web + command: celery -A config worker --loglevel=info + volumes: + - "./:/code" + depends_on: + - redis + - web + networks: + - uyqur \ No newline at end of file