order uchun overdue price qoshildi va pharmacy field orniga factory field qoshildi
This commit is contained in:
@@ -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'),
|
||||
),
|
||||
]
|
||||
18
core/apps/orders/migrations/0003_order_overdue_price.py
Normal file
18
core/apps/orders/migrations/0003_order_overdue_price.py
Normal 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),
|
||||
),
|
||||
]
|
||||
@@ -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)
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user