diff --git a/core/apps/admin_panel/serializers/order.py b/core/apps/admin_panel/serializers/order.py index d06dc6c..6966674 100644 --- a/core/apps/admin_panel/serializers/order.py +++ b/core/apps/admin_panel/serializers/order.py @@ -27,7 +27,8 @@ class OrderSerializer(serializers.ModelSerializer): class Meta: model = Order fields = [ - 'id', 'order_number', 'status', 'total_price', 'user', 'items' + 'id', 'order_number', 'total_price', 'user', 'payment_type', 'delivery_type', + 'delivery_price', 'contact_number', 'address', 'comment', 'name', 'items' ] def get_user(self, obj): diff --git a/core/apps/orders/migrations/0005_order_address_order_comment_order_contact_number_and_more.py b/core/apps/orders/migrations/0005_order_address_order_comment_order_contact_number_and_more.py new file mode 100644 index 0000000..d71786d --- /dev/null +++ b/core/apps/orders/migrations/0005_order_address_order_comment_order_contact_number_and_more.py @@ -0,0 +1,48 @@ +# Generated by Django 5.2 on 2025-09-04 16:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0004_order_status'), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='address', + field=models.TextField(blank=True, null=True), + ), + migrations.AddField( + model_name='order', + name='comment', + field=models.CharField(blank=True, max_length=500, null=True), + ), + migrations.AddField( + model_name='order', + name='contact_number', + field=models.CharField(blank=True, max_length=15, null=True), + ), + migrations.AddField( + model_name='order', + name='delivery_price', + field=models.PositiveBigIntegerField(default=0), + ), + migrations.AddField( + model_name='order', + name='delivery_type', + field=models.CharField(choices=[('YandexGo', 'YandexGo'), ('DELIVERY_COURIES', 'kuryer orqali yetkazib berish'), ('PICKUP', 'olib ketish')], max_length=200, null=True), + ), + migrations.AddField( + model_name='order', + name='name', + field=models.CharField(blank=True, max_length=200, null=True), + ), + migrations.AddField( + model_name='order', + name='payment_type', + field=models.CharField(choices=[('CASH', 'naqd'), ('CARD', 'card'), ('ACCOUNT_NUMBER', 'hisob raqam')], max_length=20, null=True), + ), + ] diff --git a/core/apps/orders/migrations/0006_remove_order_status.py b/core/apps/orders/migrations/0006_remove_order_status.py new file mode 100644 index 0000000..641608a --- /dev/null +++ b/core/apps/orders/migrations/0006_remove_order_status.py @@ -0,0 +1,17 @@ +# Generated by Django 5.2 on 2025-09-04 16:47 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0005_order_address_order_comment_order_contact_number_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='order', + name='status', + ), + ] diff --git a/core/apps/orders/models/order.py b/core/apps/orders/models/order.py index 3336a23..90899c6 100644 --- a/core/apps/orders/models/order.py +++ b/core/apps/orders/models/order.py @@ -6,18 +6,27 @@ from core.apps.products.models import Product class Order(BaseModel): - STATUS = ( - ('PENDING', 'kutilmoqda'), - ('PROCESSING', 'qayta ishlash'), - ('SHIPPED', "jo'natilgan"), - ('DELIVERED', 'yetkazib berildi'), - ('CANCELLED', 'bekor qilingan') + PAYMENT_TYPE = ( + ('CASH', 'naqd'), + ('CARD', 'card'), + ('ACCOUNT_NUMBER', 'hisob raqam'), + ) + DELIVERY_TYPE = ( + ('YandexGo', 'YandexGo'), + ('DELIVERY_COURIES', 'kuryer orqali yetkazib berish'), + ('PICKUP', 'olib ketish'), ) total_price = models.PositiveBigIntegerField(default=0) user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders') order_number = models.PositiveBigIntegerField(default=1) - status = models.CharField(max_length=20, choices=STATUS, default='kutilmoqda') + payment_type = models.CharField(max_length=20, choices=PAYMENT_TYPE, null=True) + delivery_type = models.CharField(max_length=200, choices=DELIVERY_TYPE, null=True) + delivery_price = models.PositiveBigIntegerField(default=0) + contact_number = models.CharField(max_length=15, null=True, blank=True) + address = models.TextField(null=True, blank=True) + comment = models.CharField(max_length=500, null=True, blank=True) + name = models.CharField(max_length=200, null=True, blank=True) def __str__(self): return f'{self.user} order' diff --git a/core/apps/orders/serializers/order.py b/core/apps/orders/serializers/order.py index 98e03d4..0d96bb9 100644 --- a/core/apps/orders/serializers/order.py +++ b/core/apps/orders/serializers/order.py @@ -22,15 +22,30 @@ class OrderItemCreateSerializer(serializers.Serializer): class OrderCreateSerializer(serializers.Serializer): items = OrderItemCreateSerializer(many=True) + 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() + address = serializers.CharField() + comment = serializers.CharField(required=False) + name = serializers.CharField(required=False) def create(self, validated_data): with transaction.atomic(): order_items = validated_data.pop('items') order = Order.objects.create( user=self.context.get('user'), + payment_type=validated_data.get('payment_type'), + delivery_type=validated_data.get('delivery_type'), + delivery_price=validated_data.get('delivery_price'), + contact_number=validated_data.get('contact_number'), + address=validated_data.get('address'), + comment=validated_data.get('comment'), + name=validated_data.get('name') ) items = [] total_price = 0 + total_price += validated_data.get('delivery_price') for item in order_items: items.append(OrderItem( product=item.get('product'), @@ -61,5 +76,6 @@ class OrderListSerializer(serializers.ModelSerializer): class Meta: model = Order fields = [ - 'id', 'order_number', 'total_price', 'items', 'created_at' + 'id', 'order_number', 'total_price', 'payment_type', 'delivery_type', 'delivery_price', + 'contact_number', 'address', 'comment', 'name', 'items', 'created_at' ] \ No newline at end of file