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
|
from django.db import models
|
||||||
|
|
||||||
# shared
|
# shared
|
||||||
from core.apps.shared.models import BaseModel, Pharmacy
|
from core.apps.shared.models import BaseModel, Factory
|
||||||
# accounts
|
# accounts
|
||||||
from core.apps.accounts.models import User
|
from core.apps.accounts.models import User
|
||||||
|
|
||||||
@@ -9,13 +9,17 @@ from core.apps.accounts.models import User
|
|||||||
|
|
||||||
class Order(BaseModel):
|
class Order(BaseModel):
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders')
|
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)
|
total_price = models.DecimalField(decimal_places=2, max_digits=15)
|
||||||
paid_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()
|
advance = models.FloatField()
|
||||||
employee_name = models.CharField(max_length=200)
|
employee_name = models.CharField(max_length=200)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f'#{self.id} from {self.user.first_name}, total_price - {self.total_price}, paid - {self.paid_price}'
|
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.models import Order, OrderItem
|
||||||
from core.apps.orders.serializers.order_item import OrderItemSerializer
|
from core.apps.orders.serializers.order_item import OrderItemSerializer
|
||||||
# shared
|
# shared
|
||||||
from core.apps.shared.models import Pharmacy
|
from core.apps.shared.models import Factory
|
||||||
|
|
||||||
|
|
||||||
class OrderCreateSerializer(serializers.Serializer):
|
class OrderCreateSerializer(serializers.Serializer):
|
||||||
pharmacy_id = serializers.IntegerField()
|
factory_id = serializers.IntegerField()
|
||||||
paid_price = serializers.DecimalField(max_digits=15, decimal_places=2)
|
paid_price = serializers.DecimalField(max_digits=15, decimal_places=2)
|
||||||
total_price = serializers.DecimalField(max_digits=15, decimal_places=2)
|
total_price = serializers.DecimalField(max_digits=15, decimal_places=2)
|
||||||
advance = serializers.FloatField()
|
advance = serializers.FloatField()
|
||||||
@@ -20,16 +20,16 @@ class OrderCreateSerializer(serializers.Serializer):
|
|||||||
items = OrderItemSerializer(many=True)
|
items = OrderItemSerializer(many=True)
|
||||||
|
|
||||||
def validate(self, data):
|
def validate(self, data):
|
||||||
pharmacy = Pharmacy.objects.filter(id=data['pharmacy_id']).first()
|
factory = Factory.objects.filter(id=data['factory_id']).first()
|
||||||
if not pharmacy:
|
if not factory:
|
||||||
raise serializers.ValidationError({"pharmancy_id": "Pharmancy not found"})
|
raise serializers.ValidationError({"factory_id": "Factory not found"})
|
||||||
data['pharmacy'] = pharmacy
|
data['factory'] = factory
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
order = Order.objects.create(
|
order = Order.objects.create(
|
||||||
pharmacy=validated_data.get('pharmacy'),
|
factory=validated_data.get('factory'),
|
||||||
paid_price=validated_data.get('paid_price'),
|
paid_price=validated_data.get('paid_price'),
|
||||||
advance=validated_data.get('advance'),
|
advance=validated_data.get('advance'),
|
||||||
employee_name=validated_data.get('employee_name'),
|
employee_name=validated_data.get('employee_name'),
|
||||||
@@ -49,14 +49,21 @@ class OrderCreateSerializer(serializers.Serializer):
|
|||||||
|
|
||||||
class OrderListSerializer(serializers.ModelSerializer):
|
class OrderListSerializer(serializers.ModelSerializer):
|
||||||
order_items = OrderItemSerializer(many=True)
|
order_items = OrderItemSerializer(many=True)
|
||||||
|
factory = serializers.SerializerMethodField(method_name='get_factory')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Order
|
model = Order
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'pharmacy', 'total_price', 'paid_price', 'advance', 'employee_name',
|
'id', 'factory', 'total_price', 'paid_price', 'advance', 'employee_name',
|
||||||
'order_items'
|
'overdue_price', 'order_items'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def get_factory(self, obj):
|
||||||
|
return {
|
||||||
|
'id': obj.factory.id,
|
||||||
|
'name': obj.factory.name,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class OrderUpdateSerializer(serializers.Serializer):
|
class OrderUpdateSerializer(serializers.Serializer):
|
||||||
paid_price = serializers.IntegerField()
|
paid_price = serializers.IntegerField()
|
||||||
|
|||||||
Reference in New Issue
Block a user