change price type int -> decimal field

This commit is contained in:
behruz-dev
2025-11-07 12:17:57 +05:00
parent c113f003df
commit 8dca5505d8
35 changed files with 584 additions and 195 deletions

View File

@@ -0,0 +1,83 @@
# Generated by Django 5.2.4 on 2025-11-07 12:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orders', '0033_partyamount_overdue_amount'),
]
operations = [
migrations.AlterField(
model_name='offer',
name='price',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='order',
name='amount',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='order',
name='qqs_price',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='order',
name='total_price',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='order',
name='unit_amount',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='party',
name='discount',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='partyamount',
name='calculated_amount',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='partyamount',
name='cost_amount',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='partyamount',
name='debt_amount',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='partyamount',
name='overdue_amount',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='partyamount',
name='paid_amount',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='partyamount',
name='payment_amount',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='partyamount',
name='total_expense_amount',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
migrations.AlterField(
model_name='partyamount',
name='total_price',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
),
]

View File

@@ -40,13 +40,13 @@ class Order(BaseModel):
date = models.DateField(null=True, blank=True)
quantity = models.FloatField(default=1)
status = models.CharField(max_length=20, choices=STATUS, default="NEW")
unit_amount = models.PositiveBigIntegerField(default=0, null=True, blank=True)
unit_amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
currency = models.CharField(
choices=[('uzs', 'uzs'), ('usd', 'usd')], default='uzs', null=True, blank=True, max_length=3
)
total_price = models.PositiveBigIntegerField(default=0, null=True, blank=True)
qqs_price = models.PositiveBigIntegerField(null=True, blank=True)
amount = models.PositiveBigIntegerField(default=0, null=True, blank=True)
total_price = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
qqs_price = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
qqs = models.PositiveBigIntegerField(null=True, blank=True)
def __str__(self):

View File

@@ -20,7 +20,7 @@ class Offer(BaseModel):
counterparty = models.ForeignKey(
Counterparty, on_delete=models.CASCADE, related_name='offers', null=True
)
price = models.PositiveBigIntegerField()
price = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
price_type = models.CharField(choices=PRICE_TYPE, default='uzs')
phone = models.CharField(max_length=15, null=True, blank=True)
comment = models.TextField(null=True, blank=True)

View File

@@ -51,7 +51,7 @@ class Party(BaseModel):
null=True, blank=True
)
audit_comment = models.TextField(null=True, blank=True)
discount = models.PositiveBigIntegerField(null=True, blank=True)
discount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
discount_currency = models.CharField(
max_length=3, choices=[('uzs', 'uzs'), ('usd', 'usd')], default='uzs', null=True, blank=True
)
@@ -87,14 +87,14 @@ class Party(BaseModel):
class PartyAmount(BaseModel):
party = models.OneToOneField(Party, on_delete=models.CASCADE, related_name='party_amount')
total_price = models.PositiveBigIntegerField()
cost_amount = models.BigIntegerField(default=0)
calculated_amount = models.BigIntegerField(default=0)
paid_amount = models.BigIntegerField(default=0)
payment_amount = models.BigIntegerField(default=0)
debt_amount = models.BigIntegerField(default=0)
total_expense_amount = models.BigIntegerField(default=0)
overdue_amount = models.BigIntegerField(default=0)
total_price = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
cost_amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
calculated_amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
paid_amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
payment_amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
debt_amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
total_expense_amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
overdue_amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
def save(self, *args, **kwargs):
if self.calculated_amount < self.paid_amount:

View File

@@ -9,7 +9,7 @@ from core.apps.orders.serializers.order import OrderListSerializer
class OfferCreateSerializer(serializers.Serializer):
counterparty_id = serializers.UUIDField()
price = serializers.IntegerField()
price = serializers.DecimalField(max_digits=15, decimal_places=2, default=0.00)
phone = serializers.CharField(required=False)
comment = serializers.CharField(required=False)
qqs = serializers.BooleanField(required=False)
@@ -53,6 +53,7 @@ class MultipleOfferCreateSerializer(serializers.Serializer):
created_offers = Offer.objects.bulk_create(offers)
return created_offers
class OfferListSerializer(serializers.ModelSerializer):
counterparty = serializers.SerializerMethodField(method_name='get_counterparty')
order = OrderListSerializer()

View File

@@ -146,11 +146,11 @@ class MultipleOrderAddSerializer(serializers.Serializer):
wherehouse_id = serializers.UUIDField()
quantity = serializers.IntegerField()
unit_amount = serializers.IntegerField()
unit_amount = serializers.DecimalField(max_digits=15, decimal_places=2, default=0.00)
currency = serializers.ChoiceField(choices=[('uzs', 'uzs'), ('usd', 'usd')])
amount = serializers.IntegerField()
total_price = serializers.IntegerField(required=False)
qqs_price = serializers.IntegerField(required=False)
amount = serializers.DecimalField(max_digits=15, decimal_places=2, default=0.00)
total_price = serializers.DecimalField(max_digits=15, decimal_places=2, default=0.00, required=False)
qqs_price = serializers.DecimalField(max_digits=15, decimal_places=2, default=0.00, required=False)
qqs = serializers.IntegerField(required=False)
def validate(self, data):

View File

@@ -23,7 +23,7 @@ class PartyCreateSerializer(serializers.Serializer):
delivery_date = serializers.DateField()
payment_date = serializers.DateField()
comment = serializers.CharField(required=False)
discount = serializers.IntegerField(required=False)
discount = serializers.DecimalField(max_digits=15, decimal_places=2, default=0.00, required=False)
discount_currency = serializers.ChoiceField(
choices=[("uzs", "uzs"), ("usd", "usd")], required=False
)
@@ -238,9 +238,9 @@ class PartyOrderUpdateSerializer(serializers.Serializer):
wherehouse_id = serializers.UUIDField()
counterparty_id = serializers.UUIDField()
quantity = serializers.IntegerField()
unit_amount = serializers.IntegerField()
unit_amount = serializers.DecimalField(max_digits=15, decimal_places=2, default=0.00)
currency = serializers.ChoiceField(choices=[("uzs", "uzs"), ("usd", "usd")])
total_price = serializers.IntegerField()
total_price = serializers.DecimalField(max_digits=15, decimal_places=2, default=0.00)
def validate(self, data):
order = Order.objects.filter(id=data["order_id"]).first()
@@ -358,10 +358,10 @@ class PartyUpdateSerializer(serializers.ModelSerializer):
party_amount = PartyAmount.objects.get(party=instance)
party_amount.total_price = total_price
party_amount.cost_amount = (
total_price - instance.discount if instance.discount else 0
total_price - instance.discount if instance.discount else 0.00
)
party_amount.payment_amount = (
total_price - instance.discount if instance.discount else 0
total_price - instance.discount if instance.discount else 0.00
)
party_amount.save()
return instance