diff --git a/config/__init__.py b/config/__init__.py index e69de29..742da6a 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -0,0 +1,3 @@ +from .celery import app as celery_app + +__all__ = ['celery_app'] \ No newline at end of file diff --git a/core/apps/orders/admin/__init__.py b/core/apps/orders/admin/__init__.py index 5c48881..2eccd74 100644 --- a/core/apps/orders/admin/__init__.py +++ b/core/apps/orders/admin/__init__.py @@ -1 +1,2 @@ -from .order import * \ No newline at end of file +from .order import * +from .supplier import * \ No newline at end of file diff --git a/core/apps/orders/admin/supplier.py b/core/apps/orders/admin/supplier.py new file mode 100644 index 0000000..8f92a16 --- /dev/null +++ b/core/apps/orders/admin/supplier.py @@ -0,0 +1,6 @@ +from django.contrib import admin + +from core.apps.orders.models import Supplier + + +admin.site.register(Supplier) diff --git a/core/apps/orders/migrations/0007_supplier.py b/core/apps/orders/migrations/0007_supplier.py new file mode 100644 index 0000000..0a724f2 --- /dev/null +++ b/core/apps/orders/migrations/0007_supplier.py @@ -0,0 +1,28 @@ +# Generated by Django 5.2 on 2025-09-04 18:27 + +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0006_remove_order_status'), + ] + + operations = [ + migrations.CreateModel( + name='Supplier', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('phone', models.CharField(max_length=20)), + ('full_name', models.CharField(max_length=50)), + ('tg_id', models.CharField(max_length=200)), + ], + options={ + 'verbose_name': 'yetkazib beruvchi', + 'verbose_name_plural': 'yetkazib beruvchilar', + }, + ), + ] diff --git a/core/apps/orders/models/__init__.py b/core/apps/orders/models/__init__.py index 5c48881..2eccd74 100644 --- a/core/apps/orders/models/__init__.py +++ b/core/apps/orders/models/__init__.py @@ -1 +1,2 @@ -from .order import * \ No newline at end of file +from .order import * +from .supplier import * \ No newline at end of file diff --git a/core/apps/orders/models/supplier.py b/core/apps/orders/models/supplier.py new file mode 100644 index 0000000..d4d3d4f --- /dev/null +++ b/core/apps/orders/models/supplier.py @@ -0,0 +1,16 @@ +from django.db import models + +from core.apps.shared.models import BaseModel + + +class Supplier(BaseModel): + phone = models.CharField(max_length=20) + full_name = models.CharField(max_length=50) + tg_id = models.CharField(max_length=200) + + def __str__(self): + return self.full_name + + class Meta: + verbose_name = 'yetkazib beruvchi' + verbose_name_plural = 'yetkazib beruvchilar' diff --git a/core/apps/orders/serializers/order.py b/core/apps/orders/serializers/order.py index ee3d9af..5ebf591 100644 --- a/core/apps/orders/serializers/order.py +++ b/core/apps/orders/serializers/order.py @@ -26,7 +26,7 @@ class OrderCreateSerializer(serializers.Serializer): payment_type = serializers.ChoiceField(choices=Order.PAYMENT_TYPE) delivery_type = serializers.ChoiceField(choices=Order.DELIVERY_TYPE) delivery_price = serializers.IntegerField(required=False) - contact_number = serializers.IntegerField() + contact_number = serializers.CharField() address = serializers.CharField() comment = serializers.CharField(required=False) name = serializers.CharField(required=False) @@ -59,9 +59,15 @@ class OrderCreateSerializer(serializers.Serializer): chat_id=item.get('product').tg_id, product_name=item.get('product').name, quantity=item.get('quantity'), - price=item.get('price') + price=item.get('price'), + payment_type=validated_data.get('payment_type'), + delivery_type=validated_data.get('delivery_type'), + contact_number=validated_data.get('contact_number'), + address=validated_data.get('address'), + comment=validated_data.get('comment'), + name=validated_data.get('name') ) - + OrderItem.objects.bulk_create(items) order.total_price = total_price order.save() diff --git a/core/apps/orders/tasks/order_item.py b/core/apps/orders/tasks/order_item.py index f7a835e..0819c46 100644 --- a/core/apps/orders/tasks/order_item.py +++ b/core/apps/orders/tasks/order_item.py @@ -7,12 +7,24 @@ from config.env import env token = env.str("BOT_TOKEN") @shared_task -def send_orders_to_tg_bot(chat_id, product_name, quantity, price): +def send_orders_to_tg_bot( + chat_id, product_name, quantity, price, payment_type, + delivery_type, contact_number, address, comment, name +): + if payment_type == 'CASH': + payment_type = "Naqd to'lov" + elif payment_type == 'CARD': + payment_type = "Karta orqali to'lov" + elif payment_type == 'ACCOUNT_NUMBER': + payment_type = "Hisob raqam orqali to'lov" + url = f"https://api.telegram.org/bot{token}/sendMessage" message = ( - f"Mahsulot nomi: {product_name}\n" - f"Mahsulot soni: {quantity}\n" - f"Summa: {price}" + f"📦 Mahsulot nomi: {product_name}\n" + f"🔢 Mahsulot soni: {quantity}\n" + f"💰 Summa: {price}\n\n" + + f"📞 Aloqa uchun: (99) 099-91-92" ) payload = { "chat_id": chat_id, diff --git a/core/apps/orders/urls.py b/core/apps/orders/urls.py index 77a701f..ff9c792 100644 --- a/core/apps/orders/urls.py +++ b/core/apps/orders/urls.py @@ -1,8 +1,11 @@ from django.urls import path, include from core.apps.orders.views import order as order_views +from core.apps.orders.views import supplier as supp_views urlpatterns = [ path('order/create/', order_views.OrderCreateApiView.as_view()), path('order/list/', order_views.OrderListApiView.as_view()), + path('supplier/create/', supp_views.SupplierCreateApiView.as_view()), + path('supplier//', supp_views.SupplierGetApiView.as_view()), ] \ No newline at end of file diff --git a/core/apps/orders/views/supplier.py b/core/apps/orders/views/supplier.py new file mode 100644 index 0000000..d5f6881 --- /dev/null +++ b/core/apps/orders/views/supplier.py @@ -0,0 +1,28 @@ +from rest_framework import views +from rest_framework.response import Response + +from core.apps.orders.models import Supplier + + +class SupplierCreateApiView(views.APIView): + def post(self, request): + data = request.data + phone = data.get('phone') + full_name = data.get('full_name') + tg_id = data.get('tg_id') + Supplier.objects.create( + phone=phone, + full_name=full_name, + tg_id=tg_id + ) + return Response({'success': True, 'message': 'created'}, status=200) + + +class SupplierGetApiView(views.APIView): + def get(self, request, tg_id): + supp = Supplier.objects.filter(tg_id=tg_id).first() + if supp: + return Response({'success': True}, status=200) + else: + return Response({"success": False},status=404) + \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index f244cf1..f5fd361 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -64,5 +64,5 @@ services: networks: - horeca environment: - - CELERY_BROKER_URL=redis://redis:6379 - - CELERY_RESULT_BACKEND=redis://redis:6379 \ No newline at end of file + - CELERY_BROKER_URL=redis://redis:6379/0 + - CELERY_RESULT_BACKEND=redis://redis:6379/0 \ No newline at end of file