add new features
This commit is contained in:
6
config/conf/celery.py
Normal file
6
config/conf/celery.py
Normal file
@@ -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
|
||||||
@@ -159,4 +159,5 @@ from config.conf.logs import *
|
|||||||
from config.conf.cors_headers import *
|
from config.conf.cors_headers import *
|
||||||
from config.conf.drf_yasg import *
|
from config.conf.drf_yasg import *
|
||||||
from config.conf.jazzmin import *
|
from config.conf.jazzmin import *
|
||||||
from config.conf.redis import *
|
from config.conf.redis import *
|
||||||
|
from config.conf.celery import *
|
||||||
18
core/apps/orders/migrations/0023_alter_party_orders.py
Normal file
18
core/apps/orders/migrations/0023_alter_party_orders.py
Normal file
@@ -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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -28,7 +28,7 @@ class Party(BaseModel):
|
|||||||
)
|
)
|
||||||
|
|
||||||
number = models.PositiveIntegerField(default=0)
|
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')
|
mediator = models.ForeignKey(User, on_delete=models.CASCADE, related_name='parties')
|
||||||
# dates
|
# dates
|
||||||
delivery_date = models.DateField()
|
delivery_date = models.DateField()
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
# orders
|
||||||
from core.apps.orders.models import Order
|
from core.apps.orders.models import Order
|
||||||
|
from core.apps.orders.tasks.order import create_inventory
|
||||||
# products
|
# products
|
||||||
from core.apps.products.models import Product, Unity
|
from core.apps.products.models import Product, Unity
|
||||||
from core.apps.products.serializers.product import ProductListSerializer
|
from core.apps.products.serializers.product import ProductListSerializer
|
||||||
@@ -80,6 +81,7 @@ class MultipleOrderCreateSerializer(serializers.Serializer):
|
|||||||
date=common_date,
|
date=common_date,
|
||||||
employee=self.context.get('user'),
|
employee=self.context.get('user'),
|
||||||
))
|
))
|
||||||
|
create_inventory.delay(resource['wherehouse'],resource['quantity'],resource)
|
||||||
|
|
||||||
created_orders = Order.objects.bulk_create(orders)
|
created_orders = Order.objects.bulk_create(orders)
|
||||||
return created_orders
|
return created_orders
|
||||||
|
|||||||
14
core/apps/orders/tasks/order.py
Normal file
14
core/apps/orders/tasks/order.py
Normal file
@@ -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
|
||||||
|
)
|
||||||
@@ -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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -1,15 +1,21 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
# shared
|
||||||
from core.apps.shared.models import BaseModel
|
from core.apps.shared.models import BaseModel
|
||||||
|
# warehouse
|
||||||
from core.apps.wherehouse.models.wherehouse import WhereHouse
|
from core.apps.wherehouse.models.wherehouse import WhereHouse
|
||||||
|
# products
|
||||||
from core.apps.products.models.product import Product
|
from core.apps.products.models.product import Product
|
||||||
|
from core.apps.products.models.unity import Unity
|
||||||
|
|
||||||
|
|
||||||
class Inventory(BaseModel):
|
class Inventory(BaseModel):
|
||||||
wherehouse = models.ForeignKey(WhereHouse, on_delete=models.CASCADE, related_name='inventories')
|
wherehouse = models.ForeignKey(WhereHouse, on_delete=models.CASCADE, related_name='inventories')
|
||||||
quantity = models.PositiveIntegerField(default=0)
|
quantity = models.PositiveIntegerField(default=0)
|
||||||
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='inventories')
|
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):
|
def __str__(self):
|
||||||
return f'{self.product} in {self.wherehouse}'
|
return f'{self.product} in {self.wherehouse}'
|
||||||
|
|||||||
@@ -50,4 +50,18 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- uyqur
|
- uyqur
|
||||||
image: redis
|
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
|
||||||
Reference in New Issue
Block a user