finance: change import income and expence commands

This commit is contained in:
behruz-dev
2025-11-03 13:32:48 +05:00
parent 6bd866c53c
commit 2769b3cc37
4 changed files with 148 additions and 133 deletions

View 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"))

View 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"))

View File

@@ -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"))