diff --git a/core/apps/orders/migrations/0002_remove_order_pharmacy_order_factory.py b/core/apps/orders/migrations/0002_remove_order_pharmacy_order_factory.py new file mode 100644 index 0000000..ec300ef --- /dev/null +++ b/core/apps/orders/migrations/0002_remove_order_pharmacy_order_factory.py @@ -0,0 +1,24 @@ +# Generated by Django 5.2 on 2025-11-27 10:24 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0001_initial'), + ('shared', '0010_factory'), + ] + + operations = [ + migrations.RemoveField( + model_name='order', + name='pharmacy', + ), + migrations.AddField( + model_name='order', + name='factory', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='orders', to='shared.factory'), + ), + ] diff --git a/core/apps/orders/migrations/0003_order_overdue_price.py b/core/apps/orders/migrations/0003_order_overdue_price.py new file mode 100644 index 0000000..5637360 --- /dev/null +++ b/core/apps/orders/migrations/0003_order_overdue_price.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2 on 2025-11-27 10:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0002_remove_order_pharmacy_order_factory'), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='overdue_price', + field=models.DecimalField(decimal_places=2, default=0, max_digits=15), + ), + ] diff --git a/core/apps/orders/models/order.py b/core/apps/orders/models/order.py index 0d7bc2f..959f7ee 100644 --- a/core/apps/orders/models/order.py +++ b/core/apps/orders/models/order.py @@ -1,7 +1,7 @@ from django.db import models # shared -from core.apps.shared.models import BaseModel, Pharmacy +from core.apps.shared.models import BaseModel, Factory # accounts from core.apps.accounts.models import User @@ -9,13 +9,17 @@ from core.apps.accounts.models import User class Order(BaseModel): user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders') - pharmacy = models.ForeignKey(Pharmacy, on_delete=models.CASCADE, related_name='orders') + factory = models.ForeignKey(Factory, on_delete=models.CASCADE, related_name='orders', null=True) total_price = models.DecimalField(decimal_places=2, max_digits=15) paid_price = models.DecimalField(decimal_places=2, max_digits=15) + overdue_price = models.DecimalField(decimal_places=2, max_digits=15, default=0) advance = models.FloatField() employee_name = models.CharField(max_length=200) def __str__(self): return f'#{self.id} from {self.user.first_name}, total_price - {self.total_price}, paid - {self.paid_price}' - \ No newline at end of file + + def save(self, *args, **kwargs): + self.overdue_price = self.total_price - self.paid_price + return super().save(*args, **kwargs) \ No newline at end of file diff --git a/core/apps/orders/serializers/order.py b/core/apps/orders/serializers/order.py index fe125ee..6bcedfe 100644 --- a/core/apps/orders/serializers/order.py +++ b/core/apps/orders/serializers/order.py @@ -8,11 +8,11 @@ from rest_framework import serializers from core.apps.orders.models import Order, OrderItem from core.apps.orders.serializers.order_item import OrderItemSerializer # shared -from core.apps.shared.models import Pharmacy +from core.apps.shared.models import Factory class OrderCreateSerializer(serializers.Serializer): - pharmacy_id = serializers.IntegerField() + factory_id = serializers.IntegerField() paid_price = serializers.DecimalField(max_digits=15, decimal_places=2) total_price = serializers.DecimalField(max_digits=15, decimal_places=2) advance = serializers.FloatField() @@ -20,16 +20,16 @@ class OrderCreateSerializer(serializers.Serializer): items = OrderItemSerializer(many=True) def validate(self, data): - pharmacy = Pharmacy.objects.filter(id=data['pharmacy_id']).first() - if not pharmacy: - raise serializers.ValidationError({"pharmancy_id": "Pharmancy not found"}) - data['pharmacy'] = pharmacy + factory = Factory.objects.filter(id=data['factory_id']).first() + if not factory: + raise serializers.ValidationError({"factory_id": "Factory not found"}) + data['factory'] = factory return data def create(self, validated_data): with transaction.atomic(): order = Order.objects.create( - pharmacy=validated_data.get('pharmacy'), + factory=validated_data.get('factory'), paid_price=validated_data.get('paid_price'), advance=validated_data.get('advance'), employee_name=validated_data.get('employee_name'), @@ -49,14 +49,21 @@ class OrderCreateSerializer(serializers.Serializer): class OrderListSerializer(serializers.ModelSerializer): order_items = OrderItemSerializer(many=True) - + factory = serializers.SerializerMethodField(method_name='get_factory') + class Meta: model = Order fields = [ - 'id', 'pharmacy', 'total_price', 'paid_price', 'advance', 'employee_name', - 'order_items' + 'id', 'factory', 'total_price', 'paid_price', 'advance', 'employee_name', + 'overdue_price', 'order_items' ] + def get_factory(self, obj): + return { + 'id': obj.factory.id, + 'name': obj.factory.name, + } + class OrderUpdateSerializer(serializers.Serializer): paid_price = serializers.IntegerField()