finance: add income and expence contract import commands

This commit is contained in:
behruz-dev
2025-11-01 09:41:59 +05:00
parent 3f2b86be57
commit 07a5489771
6 changed files with 470 additions and 2 deletions

View File

@@ -0,0 +1,42 @@
import json
from datetime import datetime
from django.core.management import BaseCommand
from core.apps.finance.models import ExpenceContract, ExpenceType
from core.apps.accounts.models import User
from core.apps.projects.models import Project, ProjectFolder
from core.apps.counterparty.models import Counterparty
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument("file_path", type=str)
def handle(self, *args, **options):
file_path = options['file_path']
with open(file_path, 'r') as f:
data = json.load(f)
for item in data['data']['data']:
user = User.objects.filter(full_name=item['creator']['full_name']).first()
project_folder = ProjectFolder.objects.filter(name=item['project']['name']).first()
counterparty = None
if item.get('counterparty'):
counterparty = Counterparty.objects.filter(name=item['company_person']['name']).first()
expence_type = None
if item.get('financial'):
expence_type = ExpenceType.objects.filter(name=item['financial']['name']).first()
ExpenceContract.objects.get_or_create(
user=user,
project_folder=project_folder,
price=item['amount'],
currency=item['currency']['symbol'].lower(),
defaults={
"counterparty": counterparty,
"expence_type": expence_type,
"date": datetime.strptime(item['date'], "%d.%m.%Y").date(),
}
)
self.stdout.write(self.style.SUCCESS("Expence Contractlar qoshildi"))

View File

@@ -0,0 +1,42 @@
import json
from datetime import datetime
from django.core.management import BaseCommand
from core.apps.finance.models import IncomeContract, TypeIncome
from core.apps.accounts.models import User
from core.apps.projects.models import Project, ProjectFolder
from core.apps.counterparty.models import Counterparty
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument("file_path", type=str)
def handle(self, *args, **options):
file_path = options['file_path']
with open(file_path, 'r') as f:
data = json.load(f)
for item in data['data']['data']:
user = User.objects.filter(full_name=item['creator']['full_name']).first()
project_folder = ProjectFolder.objects.filter(name=item['project']['name']).first()
counterparty = None
if item.get('counterparty'):
counterparty = Counterparty.objects.filter(name=item['company_person']['name']).first()
income_type = None
if item.get('financial'):
income_type = TypeIncome.objects.filter(name=item['financial']['name']).first()
IncomeContract.objects.get_or_create(
user=user,
project_folder=project_folder,
price=item['amount'],
currency=item['currency']['symbol'].lower(),
defaults={
"counterparty": counterparty,
"income_type": income_type,
"date": datetime.strptime(item['date'], "%d.%m.%Y").date(),
}
)
self.stdout.write(self.style.SUCCESS("Expence Contractlar qoshildi"))

View File

@@ -110,7 +110,6 @@ class Command(BaseCommand):
count = 0
for page in range(round(total_data / size)):
data = get_data(page)
print(page)
for item in data['data']['data']:
match item['type']:
case "expense":