fix
This commit is contained in:
@@ -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()
|
|
||||||
}
|
|
||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user