diff --git a/core/apps/counterparty/views/counterparty.py b/core/apps/counterparty/views/counterparty.py index 9a1ab22..afbdf64 100644 --- a/core/apps/counterparty/views/counterparty.py +++ b/core/apps/counterparty/views/counterparty.py @@ -349,55 +349,51 @@ class CounterpartyAKTApiView(views.APIView): return Response(response, status=200) def _group_by_date(self, parties, incomes, expences): - """Kun boyicha guruhlash""" - daily_data = defaultdict(lambda: { - 'parties': [], - 'expences': [], - 'incomes': [], - 'day_kredit': Decimal('0'), - 'day_debit': Decimal('0'), - 'day_balance': Decimal('0'), - 'balance_type': 'kredit' - }) + """Kun bo'yicha kirim/chiqim/partiyalarni alohida item ko'rinishida qaytarish""" + daily_data = defaultdict(list) # Har kun uchun ro'yxat - # Partiyalarni kunga ajratish (close_date bo'yicha) + # --- PARTIES bilan bog'liq kirimlar (kredit) --- for party in parties: date_key = party.closed_date.strftime('%Y-%m-%d') - daily_data[date_key]['parties'].append(party) - party_total = getattr(party, 'total_price', 0) or 0 - daily_data[date_key]['day_kredit'] += Decimal(party_total) - # Kirimlarni kunga ajratish (created_at bo'yicha) - for income in incomes: - date_key = income.created_at.strftime('%Y-%m-%d') - 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: - date_key = expence.created_at.strftime('%Y-%m-%d') - 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): - data = daily_data[date_key] - - day_balance = data['day_kredit'] - data['day_debit'] - balance_type = 'debit' if day_balance < 0 else 'kredit' - - result.append({ - 'date': date_key, - 'parties': PartyAKTSerializer(data['parties'], many=True).data, - 'expences': ExpenceListSerializer(data['expences'], many=True).data, - 'incomes': IncomeListSerializer(data['incomes'], many=True).data, - 'kredit': str(data['day_kredit']), - 'debit': str(data['day_debit']), - 'balance': { - 'balance': str(abs(day_balance)), - 'type': balance_type - } + daily_data[date_key].append({ + "type": "kirim", + "price": str(getattr(party, 'total_price', 0) or 0), + "partiya": PartyAKTSerializer(party).data, + "kirim": True, + "chiqim": None, }) - return result \ No newline at end of file + # --- INCOME (kirim) --- + for income in incomes: + date_key = income.created_at.strftime('%Y-%m-%d') + + daily_data[date_key].append({ + "type": "kirim", + "price": str(income.price or 0), + "partiya": None, # Income partiya bilan bog'liq emas + "kirim": IncomeListSerializer(income).data, + "chiqim": None, + }) + + # --- EXPENCE (chiqim) --- + for expence in expences: + date_key = expence.created_at.strftime('%Y-%m-%d') + + daily_data[date_key].append({ + "type": "chiqim", + "price": str(expence.price or 0), + "partiya": None, # Chiqim partiya bilan bog'liq emas + "kirim": None, + "chiqim": ExpenceListSerializer(expence).data, + }) + + # Yakuniy formatga keltirish + result = [] + for date_key in sorted(daily_data.keys(), reverse=True): + result.append({ + "date": date_key, + "items": daily_data[date_key] # har bir kunga tegishli kirim/chiqimlar + }) + + return result