order uchun overdue price qoshildi va pharmacy field orniga factory field qoshildi

This commit is contained in:
behruz-dev
2025-11-27 15:28:18 +05:00
parent e8fb4c1e5b
commit 380ba01e82
4 changed files with 66 additions and 13 deletions

View File

@@ -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'),
),
]

View File

@@ -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),
),
]

View File

@@ -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}'
def save(self, *args, **kwargs):
self.overdue_price = self.total_price - self.paid_price
return super().save(*args, **kwargs)

View File

@@ -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()