diff --git a/core/apps/counterparty/views/counterparty.py b/core/apps/counterparty/views/counterparty.py index 189e80c..cd4826c 100644 --- a/core/apps/counterparty/views/counterparty.py +++ b/core/apps/counterparty/views/counterparty.py @@ -348,66 +348,56 @@ class CounterpartyAKTApiView(views.APIView): 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: { 'parties': [], 'expences': [], 'incomes': [], - 'parties_total': Decimal('0'), 'day_kredit': Decimal('0'), 'day_debit': Decimal('0'), 'day_balance': Decimal('0'), 'balance_type': 'kredit' }) + # Partiyalarni kunga ajratish (close_date bo'yicha) 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) - - party_total = getattr(party.party_amount, 'calculated_amount', 0) or 0 - daily_data[date_key]['parties_total'] = daily_data[date_key].get('parties_total', Decimal('0')) + Decimal(party_total) + 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): - parties_list = daily_data[date_key]['parties'] - incomes_list = daily_data[date_key]['incomes'] - expences_list = daily_data[date_key]['expences'] + data = daily_data[date_key] + + 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')) - incomes_total = sum( - Decimal(i.price or 0) - for i in incomes_list - ) - day_kredit = parties_total + incomes_total - - day_debit = sum( - Decimal(e.price or 0) - for e in expences_list - ) - - 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), + 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 + } }) - return { - 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() - } + return result \ No newline at end of file diff --git a/core/apps/orders/serializers/party.py b/core/apps/orders/serializers/party.py index b5c1216..aadd129 100644 --- a/core/apps/orders/serializers/party.py +++ b/core/apps/orders/serializers/party.py @@ -560,6 +560,7 @@ class ReceiveMultipleOrderSerializer(serializers.Serializer): class PartyAKTSerializer(serializers.ModelSerializer): party_amount = PartyAmountSerializer() mediator = serializers.SerializerMethodField(method_name="get_mediator") + orders = OrderAKTSerializer(many=True) class Meta: model = Party @@ -578,6 +579,7 @@ class PartyAKTSerializer(serializers.ModelSerializer): "party_amount", "mediator", "currency", + "orders", ] def get_mediator(self, obj):