finance: back old version

This commit is contained in:
behruz-dev
2025-10-31 22:41:28 +05:00
parent f5cebc4f37
commit 700a92710f
5 changed files with 244 additions and 492 deletions

View File

@@ -381,136 +381,104 @@ class PartyExpenceCreateSerializer(serializers.ModelSerializer):
"party",
]
def validate(self, data):
price = data.get('price')
exchange_rate = data.get('exchange_rate')
party = data.get('party')
currency = data.get('currency', 'uzs').lower()
if price and price < 0:
raise serializers.ValidationError("Narxi manfiy bo'lishi mumkin emas")
if exchange_rate and exchange_rate < 0:
raise serializers.ValidationError("Kurs manfiy bo'lishi mumkin emas")
if not party:
raise serializers.ValidationError("Party talab qilinadi")
try:
usd_course = UsdCourse.objects.first()
if not usd_course or not usd_course.value:
raise serializers.ValidationError("USD kursi topilmadi")
except UsdCourse.DoesNotExist:
raise serializers.ValidationError("USD kursi topilmadi")
return data
def create(self, validated_data):
with transaction.atomic():
usd_course = UsdCourse.objects.first()
if not usd_course:
raise serializers.ValidationError("USD kursi topilmadi")
usd_value = usd_course.value
exchange_rate = validated_data.get("exchange_rate") or 1
final_price = validated_data.get("price") * exchange_rate
currency = validated_data.get("currency", "uzs").lower()
usd_value = UsdCourse.objects.first().value
expence = Expence.objects.create(
cash_transaction=validated_data.get("cash_transaction"),
payment_type=validated_data.get("payment_type"),
project_folder=validated_data.get("project_folder"),
project=validated_data.get("project"),
counterparty=validated_data.get("counterparty"),
price=final_price,
exchange_rate=exchange_rate,
currency=currency,
price=(
validated_data.get("price") * validated_data.get("exchange_rate")
if validated_data.get("exchange_rate")
else validated_data.get("price")
),
exchange_rate=validated_data.get("exchange_rate"),
currency=validated_data.get("currency"),
date=validated_data.get("date"),
comment=validated_data.get("comment"),
party=validated_data.get("party"),
user=self.context.get('user'),
)
cash_transaction = expence.cash_transaction
payment_type = expence.payment_type
party = expence.party
if currency == "uzs":
if validated_data.get("currency") == "uzs":
cash_transaction.expence_balance_uzs += expence.price
cash_transaction.total_balance_uzs = (
cash_transaction.income_balance_uzs
- cash_transaction.expence_balance_uzs
)
if payment_type.total_uzs > expence.price:
payment_type.total_uzs -= expence.price
if expence.counterparty:
if expence.counterparty.kredit_uzs > 0:
if expence.counterparty.kredit_uzs != 0:
expence.counterparty.kredit_uzs -= expence.price
expence.counterparty.total_kredit -= expence.price
expence.counterparty.debit_uzs += expence.price
expence.counterparty.debit_uzs += (
expence.counterparty.kredit_uzs - expence.price
)
expence.counterparty.total_debit += expence.price
else:
expence.counterparty.debit_uzs += expence.price
expence.counterparty.total_debit += expence.price
expence.counterparty.save()
if party:
if party.currency == "uzs":
party.party_amount.payment_amount -= expence.price
party.party_amount.paid_amount += expence.price
party.party_amount.save()
elif party.currency == 'usd':
converted_price = round(expence.price / usd_value)
party.party_amount.payment_amount -= converted_price
party.party_amount.paid_amount += converted_price
party.party_amount.save()
party.save()
elif currency == "usd":
if expence.party.currency == "uzs":
expence.party.party_amount.payment_amount -= expence.price
expence.party.party_amount.paid_amount += expence.price
expence.party.party_amount.save()
expence.party.save()
elif expence.party.currency == 'usd':
expence.party.party_amount.payment_amount -= round(expence.price / usd_value)
expence.party.party_amount.paid_amount += round(expence.price / usd_value)
expence.party.save()
elif validated_data.get("currency") == "usd":
cash_transaction.expence_balance_usd += expence.price
cash_transaction.total_balance_usd = (
cash_transaction.income_balance_usd
- cash_transaction.expence_balance_usd
)
if payment_type.total_usd > expence.price:
payment_type.total_usd -= expence.price
if expence.counterparty:
if expence.counterparty.kredit_usd > 0:
expence.counterparty.kredit_usd -= expence.price
if expence.counterparty.kredit_usd != 0:
expence.counterparty.kredit_usd -= validated_data.get("price")
expence.counterparty.total_kredit -= expence.price
expence.counterparty.debit_usd += expence.price
expence.counterparty.debit_usd += (
expence.counterparty.kredit_usd
- validated_data.get("price")
)
expence.counterparty.total_debit += expence.price
else:
expence.counterparty.debit_usd += expence.price
expence.counterparty.debit_usd += validated_data.get("price")
expence.counterparty.total_debit += expence.price
expence.counterparty.save()
if party:
if party.currency == "usd":
party.party_amount.payment_amount -= expence.price
party.party_amount.paid_amount += expence.price
party.party_amount.save()
elif party.currency == "uzs":
converted_price = expence.price * usd_value
party.party_amount.payment_amount -= converted_price
party.party_amount.paid_amount += converted_price
party.party_amount.save()
party.save()
if expence.party.currency == "usd":
expence.party.party_amount.payment_amount -= validated_data.get(
"price"
)
expence.party.party_amount.paid_amount += validated_data.get(
"price"
)
expence.party.save()
elif expence.party.currency == "uzs":
expence.party.party_amount.payment_amount -= validated_data.get(
"price"
) * usd_value
expence.party.party_amount.paid_amount += validated_data.get(
"price"
) * usd_value
expence.party.save()
expence.party.party_amount.save()
cash_transaction.save()
payment_type.save()
return expence