This commit is contained in:
behruz-dev
2025-11-14 17:12:13 +05:00
parent 180c59b338
commit b89c380a41
2 changed files with 30 additions and 38 deletions

View File

@@ -348,66 +348,56 @@ class CounterpartyAKTApiView(views.APIView):
return Response(response, status=200) return Response(response, status=200)
def _group_by_date(self, parties, incomes, expences): def _group_by_date(self, parties, expences, incomes):
"""Kun boyicha guruhlash"""
daily_data = defaultdict(lambda: { daily_data = defaultdict(lambda: {
'parties': [], 'parties': [],
'expences': [], 'expences': [],
'incomes': [], 'incomes': [],
'parties_total': Decimal('0'),
'day_kredit': Decimal('0'), 'day_kredit': Decimal('0'),
'day_debit': Decimal('0'), 'day_debit': Decimal('0'),
'day_balance': Decimal('0'), 'day_balance': Decimal('0'),
'balance_type': 'kredit' 'balance_type': 'kredit'
}) })
# Partiyalarni kunga ajratish (close_date bo'yicha)
for party in parties: for party in parties:
date_key = party.closed_date.strftime('%Y-%m-%d') date_key = party.close_date.strftime('%Y-%m-%d')
daily_data[date_key]['parties'].append(party) daily_data[date_key]['parties'].append(party)
party_total = getattr(party, 'total_price', 0) or 0
party_total = getattr(party.party_amount, 'calculated_amount', 0) or 0 daily_data[date_key]['day_kredit'] += Decimal(party_total)
daily_data[date_key]['parties_total'] = daily_data[date_key].get('parties_total', Decimal('0')) + Decimal(party_total)
# Kirimlarni kunga ajratish (created_at bo'yicha)
for income in incomes: for income in incomes:
date_key = income.created_at.strftime('%Y-%m-%d') date_key = income.created_at.strftime('%Y-%m-%d')
daily_data[date_key]['incomes'].append(income) daily_data[date_key]['incomes'].append(income)
daily_data[date_key]['day_kredit'] += Decimal(income.price or 0)
# Chiqimlarni kunga ajratish (created_at bo'yicha)
for expence in expences: for expence in expences:
date_key = expence.created_at.strftime('%Y-%m-%d') date_key = expence.created_at.strftime('%Y-%m-%d')
daily_data[date_key]['expences'].append(expence) daily_data[date_key]['expences'].append(expence)
daily_data[date_key]['day_debit'] += Decimal(expence.price or 0)
# Har kun uchun balans hisobini yakuniy qilish
result = []
for date_key in sorted(daily_data.keys(), reverse=True): for date_key in sorted(daily_data.keys(), reverse=True):
parties_list = daily_data[date_key]['parties'] data = daily_data[date_key]
incomes_list = daily_data[date_key]['incomes']
expences_list = daily_data[date_key]['expences'] day_balance = data['day_kredit'] - data['day_debit']
balance_type = 'debit' if day_balance < 0 else 'kredit'
parties_total = daily_data[date_key].get('parties_total', Decimal('0')) result.append({
incomes_total = sum( 'date': date_key,
Decimal(i.price or 0) 'parties': PartyAKTSerializer(data['parties'], many=True).data,
for i in incomes_list 'expences': ExpenceListSerializer(data['expences'], many=True).data,
) 'incomes': IncomeListSerializer(data['incomes'], many=True).data,
day_kredit = parties_total + incomes_total 'kredit': str(data['day_kredit']),
'debit': str(data['day_debit']),
day_debit = sum( 'balance': {
Decimal(e.price or 0) 'balance': str(abs(day_balance)),
for e in expences_list 'type': balance_type
) }
daily_data[date_key].update({
'parties': PartyAKTSerializer(parties_list, many=True).data,
'expences': ExpenceListSerializer(expences_list, many=True).data,
'incomes': IncomeListSerializer(incomes_list, many=True).data,
'day_kredit': str(day_kredit),
'day_debit': str(day_debit),
}) })
return { return result
date: {
'date': date,
'parties': data['parties'],
'expences': data['expences'],
'incomes': data['incomes'],
'kredit': data['day_kredit'],
'debit': data['day_debit'],
}
for date, data in daily_data.items()
}

View File

@@ -560,6 +560,7 @@ class ReceiveMultipleOrderSerializer(serializers.Serializer):
class PartyAKTSerializer(serializers.ModelSerializer): class PartyAKTSerializer(serializers.ModelSerializer):
party_amount = PartyAmountSerializer() party_amount = PartyAmountSerializer()
mediator = serializers.SerializerMethodField(method_name="get_mediator") mediator = serializers.SerializerMethodField(method_name="get_mediator")
orders = OrderAKTSerializer(many=True)
class Meta: class Meta:
model = Party model = Party
@@ -578,6 +579,7 @@ class PartyAKTSerializer(serializers.ModelSerializer):
"party_amount", "party_amount",
"mediator", "mediator",
"currency", "currency",
"orders",
] ]
def get_mediator(self, obj): def get_mediator(self, obj):