change price type int -> decimal field
This commit is contained in:
@@ -3,7 +3,4 @@ from django.apps import AppConfig
|
||||
|
||||
class FinanceConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'core.apps.finance'
|
||||
|
||||
def ready(self):
|
||||
from . import signals
|
||||
name = 'core.apps.finance'
|
||||
@@ -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 = [
|
||||
('finance', '0031_alter_expence_audit_alter_income_audit'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='cashtransaction',
|
||||
name='expence_balance_usd',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='cashtransaction',
|
||||
name='expence_balance_uzs',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='cashtransaction',
|
||||
name='income_balance_usd',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='cashtransaction',
|
||||
name='income_balance_uzs',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='cashtransaction',
|
||||
name='total_balance_usd',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='cashtransaction',
|
||||
name='total_balance_uzs',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='expence',
|
||||
name='price',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='expencecontract',
|
||||
name='paid_price',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='expencecontract',
|
||||
name='price',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='income',
|
||||
name='price',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='incomecontract',
|
||||
name='paid_price',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='incomecontract',
|
||||
name='price',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='paymenttype',
|
||||
name='total_usd',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='paymenttype',
|
||||
name='total_uzs',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=15),
|
||||
),
|
||||
]
|
||||
@@ -28,13 +28,13 @@ class CashTransaction(BaseModel):
|
||||
CashTransactionFolder, on_delete=models.SET_NULL, related_name='cash_transactions',
|
||||
null=True, blank=True
|
||||
)
|
||||
total_balance_usd = models.BigIntegerField(default=0)
|
||||
income_balance_usd = models.BigIntegerField(default=0)
|
||||
expence_balance_usd = models.BigIntegerField(default=0)
|
||||
total_balance_usd = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
income_balance_usd = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
expence_balance_usd = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
|
||||
total_balance_uzs = models.BigIntegerField(default=0)
|
||||
income_balance_uzs = models.BigIntegerField(default=0)
|
||||
expence_balance_uzs = models.BigIntegerField(default=0)
|
||||
total_balance_uzs = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
income_balance_uzs = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
expence_balance_uzs = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
@@ -31,7 +31,7 @@ class Expence(BaseModel):
|
||||
'orders.Party', on_delete=models.SET_NULL, null=True, blank=True, related_name='expences'
|
||||
)
|
||||
|
||||
price = models.PositiveBigIntegerField()
|
||||
price = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
exchange_rate = models.PositiveBigIntegerField(default=0, null=True, blank=True)
|
||||
currency = models.CharField(
|
||||
max_length=3, choices=[('usd','usd'), ('uzs', 'uzs')]
|
||||
|
||||
@@ -21,9 +21,9 @@ class ExpenceContract(BaseModel):
|
||||
Counterparty, on_delete=models.SET_NULL, related_name='expence_contracts', null=True, blank=True
|
||||
)
|
||||
|
||||
price = models.PositiveBigIntegerField()
|
||||
price = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
currency = models.CharField(max_length=3, choices=[('uzs', 'uzs'), ('usd', 'usd')])
|
||||
paid_price = models.PositiveBigIntegerField(default=0, null=True, blank=True)
|
||||
paid_price = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
date = models.DateField()
|
||||
comment = models.TextField(null=True, blank=True)
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ class Income(BaseModel):
|
||||
)
|
||||
|
||||
currency = models.CharField(choices=[('uzs', 'uzs'),('usd', 'usd')], max_length=3)
|
||||
price = models.PositiveBigIntegerField()
|
||||
price = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
exchange_rate = models.PositiveBigIntegerField(default=0, null=True, blank=True)
|
||||
date = models.DateField(null=True, blank=True)
|
||||
comment = models.TextField(null=True, blank=True)
|
||||
|
||||
@@ -21,9 +21,9 @@ class IncomeContract(BaseModel):
|
||||
)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='income_contracts')
|
||||
|
||||
price = models.PositiveBigIntegerField()
|
||||
price = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
currency = models.CharField(max_length=3, choices=[('uzs', 'uzs'), ('usd', 'usd')])
|
||||
paid_price = models.PositiveBigIntegerField(default=0, null=True, blank=True)
|
||||
paid_price = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
date = models.DateField()
|
||||
comment = models.TextField(null=True, blank=True)
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ from core.apps.shared.models import BaseModel
|
||||
|
||||
class PaymentType(BaseModel):
|
||||
name = models.CharField(max_length=200, unique=True)
|
||||
total_uzs = models.PositiveBigIntegerField(default=0)
|
||||
total_usd = models.PositiveBigIntegerField(default=0)
|
||||
total_uzs = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
total_usd = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
@@ -84,4 +84,4 @@ class ExpenceContractCreateSerializer(serializers.ModelSerializer):
|
||||
|
||||
|
||||
class ExpenceContractCalculatePriceSerializer(serializers.Serializer):
|
||||
price = serializers.IntegerField()
|
||||
price = serializers.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
@@ -78,4 +78,4 @@ class IncomeContractCreateSerializer(serializers.ModelSerializer):
|
||||
|
||||
|
||||
class IncomeContractCalculatePriceSerializer(serializers.Serializer):
|
||||
price = serializers.IntegerField()
|
||||
price = serializers.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
||||
@@ -1,2 +0,0 @@
|
||||
from .expence import *
|
||||
from .income import *
|
||||
@@ -125,7 +125,6 @@ class ExpenceDeleteApiView(generics.GenericAPIView):
|
||||
comment = serializer.validated_data.get('comment')
|
||||
currency = expence.currency.lower()
|
||||
|
||||
# Deleted record yaratish
|
||||
DeletedExpence.objects.create(
|
||||
expence=expence,
|
||||
comment=comment
|
||||
@@ -136,57 +135,47 @@ class ExpenceDeleteApiView(generics.GenericAPIView):
|
||||
counterparty = expence.counterparty
|
||||
|
||||
if currency == 'uzs':
|
||||
# Balanslarni qaytarish (o'chirilgani teskari qilish)
|
||||
cash_transaction.expence_balance_uzs -= expence.price # ✅ KAMAYISHI KERAK
|
||||
cash_transaction.expence_balance_uzs -= expence.price
|
||||
cash_transaction.total_balance_uzs = (
|
||||
cash_transaction.income_balance_uzs - cash_transaction.expence_balance_uzs
|
||||
)
|
||||
payment_type.total_uzs += expence.price # ✅ QAYTARISH
|
||||
payment_type.total_uzs += expence.price
|
||||
|
||||
# Kontrapartiya hisobini qaytarish
|
||||
if counterparty:
|
||||
if counterparty.debit_uzs > 0:
|
||||
# Agar debit bo'lsa, uni oshirish (teskari)
|
||||
counterparty.debit_uzs += expence.price
|
||||
counterparty.total_debit += expence.price
|
||||
|
||||
counterparty.kredit_uzs -= expence.price
|
||||
counterparty.total_kredit -= expence.price
|
||||
else:
|
||||
# Agar kredit bo'lsa, uni kamayitish (teskari)
|
||||
counterparty.kredit_uzs -= expence.price
|
||||
counterparty.total_kredit -= expence.price
|
||||
|
||||
counterparty.save()
|
||||
|
||||
elif currency == 'usd':
|
||||
# Balanslarni qaytarish (o'chirilgani teskari qilish)
|
||||
cash_transaction.expence_balance_usd -= expence.price # ✅ KAMAYISHI KERAK
|
||||
cash_transaction.expence_balance_usd -= expence.price
|
||||
cash_transaction.total_balance_usd = (
|
||||
cash_transaction.income_balance_usd - cash_transaction.expence_balance_usd
|
||||
)
|
||||
payment_type.total_usd += expence.price # ✅ QAYTARISH
|
||||
payment_type.total_usd += expence.price
|
||||
|
||||
# Kontrapartiya hisobini qaytarish
|
||||
if counterparty:
|
||||
if counterparty.debit_usd > 0:
|
||||
# Agar debit bo'lsa, uni oshirish (teskari)
|
||||
counterparty.debit_usd += expence.price
|
||||
counterparty.total_debit += expence.price
|
||||
|
||||
counterparty.kredit_usd -= expence.price
|
||||
counterparty.total_kredit -= expence.price
|
||||
else:
|
||||
# Agar kredit bo'lsa, uni kamayitish (teskari)
|
||||
counterparty.kredit_usd -= expence.price
|
||||
counterparty.total_kredit -= expence.price
|
||||
|
||||
counterparty.save()
|
||||
|
||||
# is_deleted = True qilish (hard delete emas, soft delete)
|
||||
expence.is_deleted = True
|
||||
|
||||
# Barcha o'zgarishlari saqlash
|
||||
cash_transaction.save()
|
||||
payment_type.save()
|
||||
expence.save()
|
||||
|
||||
@@ -93,7 +93,6 @@ class IncomeDeleteApiView(generics.GenericAPIView):
|
||||
comment = serializer.validated_data.get('comment')
|
||||
currency = income.currency.lower()
|
||||
|
||||
# Deleted record yaratish
|
||||
DeletedIncome.objects.create(
|
||||
income=income,
|
||||
comment=comment
|
||||
@@ -104,57 +103,47 @@ class IncomeDeleteApiView(generics.GenericAPIView):
|
||||
counterparty = income.counterparty
|
||||
|
||||
if currency == 'uzs':
|
||||
# Balanslarni qaytarish (o'chirilgani teskari qilish)
|
||||
cash_transaction.income_balance_uzs -= income.price # ✅ INCOME BALANCE KAMAYISHI KERAK
|
||||
cash_transaction.income_balance_uzs -= income.price
|
||||
cash_transaction.total_balance_uzs = (
|
||||
cash_transaction.income_balance_uzs - cash_transaction.expence_balance_uzs
|
||||
)
|
||||
payment_type.total_uzs -= income.price # ✅ QAYTARISH
|
||||
payment_type.total_uzs -= income.price
|
||||
|
||||
# Kontrapartiya hisobini qaytarish
|
||||
if counterparty:
|
||||
if counterparty.kredit_uzs > 0:
|
||||
# Agar kredit bo'lsa, uni kamayitish (teskari)
|
||||
counterparty.kredit_uzs -= income.price
|
||||
counterparty.total_kredit -= income.price
|
||||
|
||||
counterparty.debit_uzs += income.price
|
||||
counterparty.total_debit += income.price
|
||||
else:
|
||||
# Agar debit bo'lsa, uni oshirish (teskari)
|
||||
counterparty.debit_uzs += income.price
|
||||
counterparty.total_debit += income.price
|
||||
|
||||
counterparty.save()
|
||||
|
||||
elif currency == 'usd':
|
||||
# Balanslarni qaytarish (o'chirilgani teskari qilish)
|
||||
cash_transaction.income_balance_usd -= income.price # ✅ INCOME BALANCE KAMAYISHI KERAK
|
||||
cash_transaction.income_balance_usd -= income.price
|
||||
cash_transaction.total_balance_usd = (
|
||||
cash_transaction.income_balance_usd - cash_transaction.expence_balance_usd
|
||||
)
|
||||
payment_type.total_usd -= income.price # ✅ QAYTARISH
|
||||
payment_type.total_usd -= income.price
|
||||
|
||||
# Kontrapartiya hisobini qaytarish
|
||||
if counterparty:
|
||||
if counterparty.kredit_usd > 0:
|
||||
# Agar kredit bo'lsa, uni kamayitish (teskari)
|
||||
counterparty.kredit_usd -= income.price
|
||||
counterparty.total_kredit -= income.price
|
||||
|
||||
counterparty.debit_usd += income.price
|
||||
counterparty.total_debit += income.price
|
||||
else:
|
||||
# Agar debit bo'lsa, uni oshirish (teskari)
|
||||
counterparty.debit_usd += income.price
|
||||
counterparty.total_debit += income.price
|
||||
|
||||
counterparty.save()
|
||||
|
||||
# is_deleted = True qilish (hard delete emas, soft delete)
|
||||
income.is_deleted = True
|
||||
|
||||
# Barcha o'zgarishlari saqlash
|
||||
cash_transaction.save()
|
||||
payment_type.save()
|
||||
income.save()
|
||||
|
||||
Reference in New Issue
Block a user