products: add product import

This commit is contained in:
behruz-dev
2025-10-31 15:35:07 +05:00
parent 29e8dea345
commit 31f894d0ff
5 changed files with 82 additions and 69 deletions

View File

@@ -5,5 +5,6 @@ from core.apps.products.models.product import Product
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = ['id', 'name']
search_fields = ['name']
list_display = ['id', 'name', 'folder', 'sub_folder']
search_fields = ['name']
list_filter = ['folder', 'sub_folder']

View File

@@ -1,8 +1,35 @@
import json
import json, requests
from django.core.management import BaseCommand
from core.apps.products.models import Folder
from core.apps.products.models import Folder, SubFolder, Product, Unity
def get_folder_products(folder_id):
url = f"https://backend.app.uyqur.uz/main/category/view/product?category_id={folder_id}&size=500"
headers = {
"Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MTgzMzg2OSwiZXhwIjoxNzYxOTIwMjY5LCJuYmYiOjE3NjE4MzM4NjksImp0aSI6IjZSQWE1RzlyT0pGbXF1T2kiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.ACT7oxl-A2eit_bzxeal2jF_xLa0klFObNBpp1HuheE"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.json()
return None
def create_product(data, folder, unit):
type = {
"PRD": "PRODUCT",
"HR": "HUMAN_RESOURCE",
"MEC": "MECHANISM",
}
Product.objects.get_or_create(
name=data['name']['uz'],
defaults={
"folder": folder,
"type":type.get(data['resource']['symbol']['en']) if type.get(data['resource']['symbol']['en']) else "PRD",
"product_code": data['code'],
"unity": unit,
}
)
class Command(BaseCommand):
@@ -16,8 +43,14 @@ class Command(BaseCommand):
data = json.load(f)
for item in data['data']:
Folder.objects.get_or_create(
folder, created = Folder.objects.get_or_create(
name=item['name']['uz']
)
data = get_folder_products(item['id'])
for product in data['data']['data']:
unit_name = product['unit']['name']['uz']
unit, created = Unity.objects.get_or_create(value=unit_name)
print(folder.name, product['name']['uz'])
create_product(data=product, folder=folder, unit=unit)
self.stdout.write("Folderlar qoshildi")

View File

@@ -2,20 +2,49 @@ import json, requests
from django.core.management import BaseCommand
from core.apps.products.models import Folder, SubFolder
from core.apps.products.models import Folder, SubFolder, Product, Unity
headers = {
"Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MTgzMzg2OSwiZXhwIjoxNzYxOTIwMjY5LCJuYmYiOjE3NjE4MzM4NjksImp0aSI6IjZSQWE1RzlyT0pGbXF1T2kiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.ACT7oxl-A2eit_bzxeal2jF_xLa0klFObNBpp1HuheE"
}
def get_product_sub_folder(folder_id):
url = f'https://backend.app.uyqur.uz/main/category/view/subcategory?category_id={folder_id}'
token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MTgzMzg2OSwiZXhwIjoxNzYxOTIwMjY5LCJuYmYiOjE3NjE4MzM4NjksImp0aSI6IjZSQWE1RzlyT0pGbXF1T2kiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.ACT7oxl-A2eit_bzxeal2jF_xLa0klFObNBpp1HuheE"
res = requests.get(url, headers={"Authorization": f"Bearer {token}"})
res = requests.get(url, headers=headers)
if res.status_code == 200:
return res.json()
return None
def get_sub_folder_products(sub_folder_id):
url = f"https://backend.app.uyqur.uz/main/subcategory/view?subcategory_id={sub_folder_id}&size=500"
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.json()
return None
def create_product(data, folder, unit, sub_folder):
type = {
"PRD": "PRODUCT",
"HR": "HUMAN_RESOURCE",
"MEC": "MECHANISM",
}
Product.objects.get_or_create(
name=data['name']['uz'],
defaults={
"folder": folder,
"sub_folder": sub_folder,
"type":type.get(data['resource']['symbol']['en']) if type.get(data['resource']['symbol']['en']) else "PRD",
"product_code": data['code'],
"unity": unit,
}
)
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument("file_path", type=str, help="Path to JSON file")
@@ -32,5 +61,13 @@ class Command(BaseCommand):
sub_folders = get_product_sub_folder(folder_id)
if sub_folders:
for sub_folder in sub_folders['data']:
SubFolder.objects.get_or_create(name=sub_folder['name']['uz'], folder=folder)
self.stdout.write("Folderlar qoshildi")
sub_folder_obj, created = SubFolder.objects.get_or_create(name=sub_folder['name']['uz'], folder=folder)
data = get_sub_folder_products(sub_folder['id'])
print(sub_folder['id'])
for product in data['data']['data']:
unit_name = product['unit']['name']['uz']
unit, created = Unity.objects.get_or_create(value=unit_name)
print(folder.name, product['name']['uz'])
create_product(data=product, folder=folder, unit=unit, sub_folder=sub_folder_obj)
self.stdout.write("Sub Folderlar qoshildi")

View File

@@ -1,37 +0,0 @@
import json
from datetime import datetime
from django.core.management import BaseCommand
from core.apps.products.models import Product, Unity
class Command(BaseCommand):
help = "Import products from JSON file"
def add_arguments(self, parser):
parser.add_argument("file_path", type=str, help='Path to JSON file')
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']:
name = item['name']['uz']
code = item['code']
type = str(item['resource']['type']).upper()
unit_name = item['unit']['name']['uz']
unit = Unity.objects.filter(value=unit_name).first()
Product.objects.get_or_create(
name=name,
defaults={
"product_code": code,
"type": type,
"unity": unit
}
)
self.stdout.write("Products added")

View File

@@ -1,21 +0,0 @@
import json
from django.core.management import BaseCommand
from core.apps.products.models import Unity
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument("file_path", type=str, help='Path to JSON file')
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']:
Unity.objects.get_or_create(
value=item['name']['uz']
)
self.stdout.write("Units added")