product: product folders import is done
This commit is contained in:
94
core/apps/projects/management/commands/import_project.py
Normal file
94
core/apps/projects/management/commands/import_project.py
Normal file
@@ -0,0 +1,94 @@
|
||||
import json
|
||||
import requests
|
||||
from datetime import datetime
|
||||
|
||||
from django.core.management import BaseCommand
|
||||
from core.apps.projects.models import ProjectFolder, Project, ProjectLocation
|
||||
from core.apps.wherehouse.models import WhereHouse
|
||||
from core.apps.finance.models import CashTransaction
|
||||
from core.apps.shared.models import Region, District
|
||||
from core.apps.accounts.models import User
|
||||
|
||||
|
||||
def get_project_data(project_id):
|
||||
url = f"https://backend.app.uyqur.uz/main/project/view?id={project_id}"
|
||||
token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MTgzMzg2OSwiZXhwIjoxNzYxOTIwMjY5LCJuYmYiOjE3NjE4MzM4NjksImp0aSI6IjZSQWE1RzlyT0pGbXF1T2kiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.ACT7oxl-A2eit_bzxeal2jF_xLa0klFObNBpp1HuheE"
|
||||
|
||||
response = requests.get(url, headers={"Authorization": f"Bearer {token}"})
|
||||
if response.status_code == 200:
|
||||
return response.json().get("data")
|
||||
return None
|
||||
|
||||
|
||||
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 folder in data["data"]:
|
||||
folder_name = folder["name"]
|
||||
folder_projects = folder["projects"]
|
||||
|
||||
project_folder = ProjectFolder.objects.filter(name=folder_name).first()
|
||||
if not project_folder:
|
||||
project_folder = ProjectFolder.objects.create(name=folder_name)
|
||||
|
||||
statuses = {
|
||||
"process": "IN_PROGRESS",
|
||||
"planning": "PLANNED",
|
||||
}
|
||||
|
||||
for project_meta in folder_projects:
|
||||
start_date = datetime.strptime(project_meta["start_date"], "%d.%m.%Y")
|
||||
end_date = datetime.strptime(project_meta["due_date"], "%d.%m.%Y")
|
||||
|
||||
project_data = get_project_data(project_meta["id"])
|
||||
if not project_data:
|
||||
self.stdout.write(self.style.ERROR(f"{project_meta['name']} topilmadi"))
|
||||
continue
|
||||
|
||||
cash_names = [c["name"] for c in project_data.get("cashs", [])]
|
||||
cash_qs = CashTransaction.objects.filter(name__in=cash_names)
|
||||
|
||||
warehouse_names = [w["name"] for w in project_data.get("warehouses", [])]
|
||||
warehouse_qs = WhereHouse.objects.filter(name__in=warehouse_names)
|
||||
|
||||
manager_names = [u["full_name"] for u in project_data["project_users"] if u["type"] == "manager"]
|
||||
foreman_names = [u["full_name"] for u in project_data["project_users"] if u["type"] == "foreman"]
|
||||
participant_names = [u["full_name"] for u in project_data["project_users"] if u["type"] == "participant"]
|
||||
|
||||
boss_qs = User.objects.filter(full_name__in=manager_names)
|
||||
foreman_qs = User.objects.filter(full_name__in=foreman_names)
|
||||
other_qs = User.objects.filter(full_name__in=participant_names)
|
||||
|
||||
project_obj, created = Project.objects.update_or_create(
|
||||
name=project_data["name"],
|
||||
defaults={
|
||||
"folder": project_folder,
|
||||
"currency": project_data["currency"]["symbol"].lower(),
|
||||
"status": statuses.get(project_data["status"]),
|
||||
"is_archive": project_data.get("is_archived", False),
|
||||
"start_date": start_date,
|
||||
"end_date": end_date,
|
||||
"benifit_plan": project_data['prediction_amount'],
|
||||
"area": project_data.get("area", 0),
|
||||
},
|
||||
)
|
||||
|
||||
project_obj.cash_transaction.set(cash_qs)
|
||||
project_obj.wherehouse.set(warehouse_qs)
|
||||
project_obj.boss.set(boss_qs)
|
||||
project_obj.foreman.set(foreman_qs)
|
||||
project_obj.other_members.set(other_qs)
|
||||
|
||||
project_obj.save()
|
||||
|
||||
msg = "Yaratildi" if created else "Yangilandi"
|
||||
self.stdout.write(self.style.SUCCESS(f"{project_obj.name} → {msg}"))
|
||||
|
||||
self.stdout.write(self.style.SUCCESS("✅ Barcha projectlar muvaffaqiyatli qo'shildi!"))
|
||||
@@ -0,0 +1,24 @@
|
||||
import json
|
||||
|
||||
from django.core.management import BaseCommand
|
||||
|
||||
from core.apps.projects.models import ProjectFolder
|
||||
|
||||
|
||||
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']['project_folders']:
|
||||
ProjectFolder.objects.get_or_create(
|
||||
name=item['name'],
|
||||
)
|
||||
|
||||
self.stdout.write("Project Folderlar qo'shildi")
|
||||
|
||||
Reference in New Issue
Block a user