finance: change import income and expence commands
This commit is contained in:
@@ -5,28 +5,22 @@ from core.apps.finance.models import Income
|
|||||||
|
|
||||||
|
|
||||||
def update_counterparty_balance(counterparty):
|
def update_counterparty_balance(counterparty):
|
||||||
"""Counterpartyning debit va kredit balanslarini exchange_rate bilan hisoblash"""
|
|
||||||
if not counterparty:
|
if not counterparty:
|
||||||
return
|
return
|
||||||
|
|
||||||
# EXPENCE -> DEBIT
|
|
||||||
expences = Expence.objects.filter(
|
expences = Expence.objects.filter(
|
||||||
counterparty=counterparty,
|
counterparty=counterparty,
|
||||||
is_deleted=False,
|
is_deleted=False,
|
||||||
status='CONFIRMED'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# USD bo'lganlari
|
|
||||||
debit_usd = expences.filter(currency='usd').aggregate(
|
debit_usd = expences.filter(currency='usd').aggregate(
|
||||||
total=Sum('price')
|
total=Sum('price')
|
||||||
)['total'] or 0
|
)['total'] or 0
|
||||||
|
|
||||||
# UZS bo'lganlari (to'g'ridan-to'g'ri)
|
|
||||||
debit_uzs_direct = expences.filter(currency='uzs').aggregate(
|
debit_uzs_direct = expences.filter(currency='uzs').aggregate(
|
||||||
total=Sum('price')
|
total=Sum('price')
|
||||||
)['total'] or 0
|
)['total'] or 0
|
||||||
|
|
||||||
# USD -> UZS konversiyasi (exchange_rate bilan ko'paytirish)
|
|
||||||
debit_uzs_from_usd = expences.filter(currency='usd').aggregate(
|
debit_uzs_from_usd = expences.filter(currency='usd').aggregate(
|
||||||
total=Sum(
|
total=Sum(
|
||||||
Case(
|
Case(
|
||||||
@@ -40,23 +34,19 @@ def update_counterparty_balance(counterparty):
|
|||||||
debit_uzs = debit_uzs_direct + debit_uzs_from_usd
|
debit_uzs = debit_uzs_direct + debit_uzs_from_usd
|
||||||
|
|
||||||
|
|
||||||
# INCOME -> KREDIT
|
|
||||||
incomes = Income.objects.filter(
|
incomes = Income.objects.filter(
|
||||||
counterparty=counterparty,
|
counterparty=counterparty,
|
||||||
is_deleted=False
|
is_deleted=False
|
||||||
)
|
)
|
||||||
|
|
||||||
# USD bo'lganlari
|
|
||||||
kredit_usd = incomes.filter(currency='usd').aggregate(
|
kredit_usd = incomes.filter(currency='usd').aggregate(
|
||||||
total=Sum('price')
|
total=Sum('price')
|
||||||
)['total'] or 0
|
)['total'] or 0
|
||||||
|
|
||||||
# UZS bo'lganlari (to'g'ridan-to'g'ri)
|
|
||||||
kredit_uzs_direct = incomes.filter(currency='uzs').aggregate(
|
kredit_uzs_direct = incomes.filter(currency='uzs').aggregate(
|
||||||
total=Sum('price')
|
total=Sum('price')
|
||||||
)['total'] or 0
|
)['total'] or 0
|
||||||
|
|
||||||
# USD -> UZS konversiyasi
|
|
||||||
kredit_uzs_from_usd = incomes.filter(currency='usd').aggregate(
|
kredit_uzs_from_usd = incomes.filter(currency='usd').aggregate(
|
||||||
total=Sum(
|
total=Sum(
|
||||||
Case(
|
Case(
|
||||||
@@ -70,11 +60,9 @@ def update_counterparty_balance(counterparty):
|
|||||||
kredit_uzs = kredit_uzs_direct + kredit_uzs_from_usd
|
kredit_uzs = kredit_uzs_direct + kredit_uzs_from_usd
|
||||||
|
|
||||||
|
|
||||||
# Total hisoblash
|
|
||||||
total_debit = debit_usd + debit_uzs
|
total_debit = debit_usd + debit_uzs
|
||||||
total_kredit = kredit_usd + kredit_uzs
|
total_kredit = kredit_usd + kredit_uzs
|
||||||
|
|
||||||
# Modelni yangilash
|
|
||||||
counterparty.debit_usd = debit_usd
|
counterparty.debit_usd = debit_usd
|
||||||
counterparty.debit_uzs = int(debit_uzs)
|
counterparty.debit_uzs = int(debit_uzs)
|
||||||
counterparty.total_debit = int(total_debit)
|
counterparty.total_debit = int(total_debit)
|
||||||
|
|||||||
80
core/apps/finance/management/commands/import_expence.py
Normal file
80
core/apps/finance/management/commands/import_expence.py
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
import requests
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
from core.apps.finance.models import (
|
||||||
|
Income,
|
||||||
|
Expence,
|
||||||
|
TypeIncome,
|
||||||
|
ExpenceType,
|
||||||
|
CashTransaction,
|
||||||
|
PaymentType
|
||||||
|
)
|
||||||
|
from core.apps.projects.models import ProjectFolder
|
||||||
|
from core.apps.accounts.models import User
|
||||||
|
from core.apps.wherehouse.models import WhereHouse
|
||||||
|
from core.apps.counterparty.models import Counterparty
|
||||||
|
from core.apps.orders.models import Party
|
||||||
|
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjE1NzIzNywiZXhwIjoxNzYyMjQzNjM3LCJuYmYiOjE3NjIxNTcyMzcsImp0aSI6Ijh3WXVpbHBIUU43eVdhdE4iLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.uAebDLZUDKbImw8M9ZLEYApc2Li19a1XD6RJRcMvchY"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def get_data(page):
|
||||||
|
url = f"https://backend.app.uyqur.uz/main/payment/view?type=expense&size=1000&page={page}"
|
||||||
|
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
if response.status_code == 200:
|
||||||
|
return response.json()
|
||||||
|
return response.json()
|
||||||
|
|
||||||
|
|
||||||
|
def create_expense(data):
|
||||||
|
statuses = {
|
||||||
|
"passive": "PENDING",
|
||||||
|
"active": "CONFIRMED",
|
||||||
|
"cancel": "CANCELLED"
|
||||||
|
}
|
||||||
|
user = User.objects.filter(full_name=data['creator']['full_name']).first()
|
||||||
|
cash_transaction = CashTransaction.objects.filter(name=data['cash']['name']).first()
|
||||||
|
expence_type = None
|
||||||
|
if data.get('financila'):
|
||||||
|
expence_type = ExpenceType.objects.filter(name=data['financial']['name']).first()
|
||||||
|
project_folder = None
|
||||||
|
if data.get('project'):
|
||||||
|
project_folder = ProjectFolder.objects.filter(name=data['project']['name']).first()
|
||||||
|
payment_type, created = PaymentType.objects.get_or_create(name=data['payment_type']['name'])
|
||||||
|
counterparty = None
|
||||||
|
if data.get('company_person'):
|
||||||
|
counterparty = Counterparty.objects.filter(name=data['company_person']['name']).first()
|
||||||
|
party = None
|
||||||
|
if data.get('order_ids'):
|
||||||
|
party_number = data.get('order_ids')[0]
|
||||||
|
party = Party.objects.filter(number=party_number).first()
|
||||||
|
Expence.objects.update_or_create(
|
||||||
|
user=user,
|
||||||
|
cash_transaction=cash_transaction,
|
||||||
|
expence_type=expence_type,
|
||||||
|
price=data['amount'],
|
||||||
|
currency=data['currency']['symbol'].lower(),
|
||||||
|
payment_type=payment_type,
|
||||||
|
project_folder= project_folder,
|
||||||
|
counterparty= counterparty,
|
||||||
|
exchange_rate= data['currency_amount'],
|
||||||
|
date=datetime.strptime(data['date'], "%d.%m.%Y").date(),
|
||||||
|
comment=data['description'],
|
||||||
|
status=statuses.get(data['status']),
|
||||||
|
party=party,
|
||||||
|
)
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
for page in range(1,13):
|
||||||
|
data = get_data(page)
|
||||||
|
for item in data['data']['data']:
|
||||||
|
create_expense(item)
|
||||||
|
print(f"{page} is done")
|
||||||
|
self.stdout.write(self.style.SUCCESS("Expenselar qo'shildi"))
|
||||||
68
core/apps/finance/management/commands/import_income.py
Normal file
68
core/apps/finance/management/commands/import_income.py
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
import requests
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
from core.apps.finance.models import (
|
||||||
|
Income,
|
||||||
|
Expence,
|
||||||
|
TypeIncome,
|
||||||
|
ExpenceType,
|
||||||
|
CashTransaction,
|
||||||
|
PaymentType
|
||||||
|
)
|
||||||
|
from core.apps.projects.models import ProjectFolder
|
||||||
|
from core.apps.accounts.models import User
|
||||||
|
from core.apps.wherehouse.models import WhereHouse
|
||||||
|
from core.apps.counterparty.models import Counterparty
|
||||||
|
from core.apps.orders.models import Party
|
||||||
|
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjE1NzIzNywiZXhwIjoxNzYyMjQzNjM3LCJuYmYiOjE3NjIxNTcyMzcsImp0aSI6Ijh3WXVpbHBIUU43eVdhdE4iLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.uAebDLZUDKbImw8M9ZLEYApc2Li19a1XD6RJRcMvchY"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def get_data():
|
||||||
|
url = f"https://backend.app.uyqur.uz/main/payment/view?type=income&size=1506"
|
||||||
|
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
if response.status_code == 200:
|
||||||
|
return response.json()
|
||||||
|
return response.json()
|
||||||
|
|
||||||
|
|
||||||
|
def create_income(data):
|
||||||
|
user = User.objects.filter(full_name=data['creator']['full_name']).first()
|
||||||
|
cash_transaction = CashTransaction.objects.filter(name=data['cash']['name']).first()
|
||||||
|
payment_type, created = PaymentType.objects.get_or_create(name=data['payment_type']['name'])
|
||||||
|
income_type = None
|
||||||
|
if data.get('financiel'):
|
||||||
|
income_type = TypeIncome.objects.filter(name=data['financial']['name']).first()
|
||||||
|
project_folder = None
|
||||||
|
if data.get('project'):
|
||||||
|
project_folder = ProjectFolder.objects.filter(name=data['project']['name']).first()
|
||||||
|
counterparty = None
|
||||||
|
if data.get('company_person'):
|
||||||
|
counterparty = Counterparty.objects.filter(name=data['company_person']['name']).first()
|
||||||
|
Income.objects.update_or_create(
|
||||||
|
price=data['amount'],
|
||||||
|
currency=data['currency']['symbol'].lower(),
|
||||||
|
cash_transaction=cash_transaction,
|
||||||
|
user=user,
|
||||||
|
type_income= income_type,
|
||||||
|
payment_type= payment_type,
|
||||||
|
project_folder= project_folder,
|
||||||
|
counterparty= counterparty,
|
||||||
|
exchange_rate= data['currency_amount'],
|
||||||
|
date= datetime.strptime(data['date'], "%d.%m.%Y").date(),
|
||||||
|
comment= data['description'],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
data = get_data()
|
||||||
|
for item in data['data']['data']:
|
||||||
|
create_income(item)
|
||||||
|
self.stdout.write(self.style.SUCCESS("Income qo'shildi"))
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
import requests
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from django.core.management import BaseCommand
|
|
||||||
|
|
||||||
from core.apps.finance.models import (
|
|
||||||
Income,
|
|
||||||
Expence,
|
|
||||||
TypeIncome,
|
|
||||||
ExpenceType,
|
|
||||||
CashTransaction,
|
|
||||||
PaymentType
|
|
||||||
)
|
|
||||||
from core.apps.projects.models import ProjectFolder
|
|
||||||
from core.apps.accounts.models import User
|
|
||||||
from core.apps.wherehouse.models import WhereHouse
|
|
||||||
from core.apps.counterparty.models import Counterparty
|
|
||||||
from core.apps.orders.models import Party
|
|
||||||
|
|
||||||
|
|
||||||
headers = {
|
|
||||||
"Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MTkyMDM2MSwiZXhwIjoxNzYyMDA2NzYxLCJuYmYiOjE3NjE5MjAzNjEsImp0aSI6Inhqak81azJLc2pSaEJJOGUiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.ZcREfvT21qpd9eK_-zBumKBtaKKJ-l9QoudSLZ3IpP4"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def get_data(page):
|
|
||||||
url = f"https://backend.app.uyqur.uz/main/payment/view?size=500&page={page}"
|
|
||||||
|
|
||||||
response = requests.get(url, headers=headers)
|
|
||||||
if response.status_code == 200:
|
|
||||||
return response.json()
|
|
||||||
return response.json()
|
|
||||||
|
|
||||||
|
|
||||||
def create_expense(data):
|
|
||||||
statuses = {
|
|
||||||
"passive": "PENDING",
|
|
||||||
"active": "CONFIRMED",
|
|
||||||
"cancel": "CANCELLED"
|
|
||||||
}
|
|
||||||
user = User.objects.filter(full_name=data['creator']['full_name']).first()
|
|
||||||
cash_transaction = CashTransaction.objects.filter(name=data['cash']['name']).first()
|
|
||||||
expence_type = None
|
|
||||||
if data.get('financila'):
|
|
||||||
expence_type = ExpenceType.objects.filter(name=data['financial']['name']).first()
|
|
||||||
project_folder = None
|
|
||||||
if data.get('project'):
|
|
||||||
project_folder = ProjectFolder.objects.filter(name=data['project']['name']).first()
|
|
||||||
payment_type, created = PaymentType.objects.get_or_create(name=data['payment_type']['name'])
|
|
||||||
counterparty = None
|
|
||||||
if data.get('company_person'):
|
|
||||||
counterparty = Counterparty.objects.filter(name=data['company_person']['name']).first()
|
|
||||||
party = None
|
|
||||||
if data.get('order_ids'):
|
|
||||||
party_number = data.get('order_ids')[0]
|
|
||||||
party = Party.objects.filter(number=party_number).first()
|
|
||||||
Expence.objects.get_or_create(
|
|
||||||
user=user,
|
|
||||||
cash_transaction=cash_transaction,
|
|
||||||
expence_type=expence_type,
|
|
||||||
price=data['amount'],
|
|
||||||
currency=data['currency']['symbol'].lower(),
|
|
||||||
defaults={
|
|
||||||
"payment_type": payment_type,
|
|
||||||
"project_folder": project_folder,
|
|
||||||
"counterparty": counterparty,
|
|
||||||
"exchange_rate": data['currency_amount'],
|
|
||||||
"date": datetime.strptime(data['date'], "%d.%m.%Y").date(),
|
|
||||||
"comment": data['description'],
|
|
||||||
"status": statuses.get(data['status']),
|
|
||||||
"party": party,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
def create_income(data):
|
|
||||||
user = User.objects.filter(full_name=data['creator']['full_name']).first()
|
|
||||||
cash_transaction = CashTransaction.objects.filter(name=data['cash']['name']).first()
|
|
||||||
payment_type, created = PaymentType.objects.get_or_create(name=data['payment_type']['name'])
|
|
||||||
income_type = None
|
|
||||||
if data.get('financiel'):
|
|
||||||
income_type = TypeIncome.objects.filter(name=data['financial']['name']).first()
|
|
||||||
project_folder = None
|
|
||||||
if data.get('project'):
|
|
||||||
project_folder = ProjectFolder.objects.filter(name=data['project']['name']).first()
|
|
||||||
counterparty = None
|
|
||||||
if data.get('company_person'):
|
|
||||||
counterparty = Counterparty.objects.filter(name=data['company_person']['name']).first()
|
|
||||||
Income.objects.get_or_create(
|
|
||||||
user=user,
|
|
||||||
cash_transaction=cash_transaction,
|
|
||||||
type_income=income_type,
|
|
||||||
price=data['amount'],
|
|
||||||
currency=data['currency']['symbol'].lower(),
|
|
||||||
defaults={
|
|
||||||
"payment_type": payment_type,
|
|
||||||
"project_folder": project_folder,
|
|
||||||
"counterparty": counterparty,
|
|
||||||
"exchange_rate": data['currency_amount'],
|
|
||||||
"date": datetime.strptime(data['date'], "%d.%m.%Y").date(),
|
|
||||||
"comment": data['description'],
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
|
||||||
def handle(self, *args, **options):
|
|
||||||
total_data = 13756
|
|
||||||
page = 1
|
|
||||||
size = 500
|
|
||||||
count = 0
|
|
||||||
for page in range(round(total_data / size)):
|
|
||||||
data = get_data(page)
|
|
||||||
for item in data['data']['data']:
|
|
||||||
match item['type']:
|
|
||||||
case "expense":
|
|
||||||
create_expense(item)
|
|
||||||
case "income":
|
|
||||||
create_income(item)
|
|
||||||
count += 1
|
|
||||||
page += 1
|
|
||||||
self.stdout.write(self.style.SUCCESS(f"{count} ta Income va Expenselar qo'shildi"))
|
|
||||||
Reference in New Issue
Block a user