28
core/apps/accounts/management/commands/import_users.py
Normal file
28
core/apps/accounts/management/commands/import_users.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
from core.apps.accounts.models import User
|
||||||
|
|
||||||
|
|
||||||
|
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.objects.get_or_create(
|
||||||
|
username=item['login'],
|
||||||
|
defaults={
|
||||||
|
'full_name': item['full_name'],
|
||||||
|
'phone_number': item['phone'],
|
||||||
|
'password': '12345678a0'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
self.stdout.write("Users added")
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
import json
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
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']:
|
||||||
|
Counterparty.objects.get_or_create(
|
||||||
|
name=item['name'],
|
||||||
|
defaults={
|
||||||
|
'phone': item['person']['phone'],
|
||||||
|
'inn': item['person']['tin'],
|
||||||
|
'balance_currency': item['balances'][0]['currency']['symbol'].lower() if item['balances'] else 'uzs',
|
||||||
|
'is_archived': item['is_archived'],
|
||||||
|
'balance': item['total_amount'],
|
||||||
|
'total_debit': item['debt_amount'],
|
||||||
|
'total_kredit': item['credit_amount'],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
self.stdout.write("Counterparties added")
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import json
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
from core.apps.counterparty.models import CounterpartyFolder
|
||||||
|
|
||||||
|
|
||||||
|
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']:
|
||||||
|
CounterpartyFolder.objects.get_or_create(
|
||||||
|
name=item['name'],
|
||||||
|
)
|
||||||
|
|
||||||
|
self.stdout.write("Counterparty Folders added")
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.2.4 on 2025-10-25 14:58
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('counterparty', '0006_rename_debit_counterparty_debit_usd_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='counterparty',
|
||||||
|
name='balance',
|
||||||
|
field=models.BigIntegerField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -41,7 +41,7 @@ class Counterparty(BaseModel):
|
|||||||
district = models.ForeignKey(
|
district = models.ForeignKey(
|
||||||
District, on_delete=models.SET_NULL, null=True, blank=True, related_name='counterparties'
|
District, on_delete=models.SET_NULL, null=True, blank=True, related_name='counterparties'
|
||||||
)
|
)
|
||||||
balance = models.PositiveBigIntegerField(null=True, blank=True)
|
balance = models.BigIntegerField(null=True, blank=True)
|
||||||
balance_currency = models.CharField(
|
balance_currency = models.CharField(
|
||||||
max_length=3, choices=[('usd', 'usd'), ('uzs', 'uzs')], null=True, blank=True
|
max_length=3, choices=[('usd', 'usd'), ('uzs', 'uzs')], null=True, blank=True
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
import json
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
from core.apps.finance.models import CashTransaction
|
||||||
|
from core.apps.accounts.models import User
|
||||||
|
|
||||||
|
|
||||||
|
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']['cashs']:
|
||||||
|
users_data = item['users']
|
||||||
|
users_full_name = []
|
||||||
|
for user_data in users_data:
|
||||||
|
users_full_name.append(user_data['full_name'])
|
||||||
|
users = User.objects.filter(full_name__in=users_full_name)
|
||||||
|
cash_tx, created = CashTransaction.objects.get_or_create(
|
||||||
|
name=item['name']
|
||||||
|
)
|
||||||
|
|
||||||
|
cash_tx.employees.set(users)
|
||||||
|
cash_tx.save()
|
||||||
|
|
||||||
|
self.stdout.write("Cash Transactions added")
|
||||||
58
core/apps/orders/management/commands/import_orders.py
Normal file
58
core/apps/orders/management/commands/import_orders.py
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
import json
|
||||||
|
from datetime import datetime
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
from core.apps.orders.models import Order
|
||||||
|
from core.apps.products.models import Unity, Product
|
||||||
|
from core.apps.projects.models import ProjectFolder
|
||||||
|
from core.apps.wherehouse.models import WhereHouse
|
||||||
|
from core.apps.accounts.models import User
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = "Import orders 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', encoding='utf-8') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
for item in data['data']['data']:
|
||||||
|
product_name = item['product']['name']['uz']
|
||||||
|
unit_name = item['unit']['name']['uz']
|
||||||
|
warehouse_name = item['warehouse']['name']
|
||||||
|
project_name = item.get('project').get('name') if item.get('project') else None
|
||||||
|
creator_name = item['creator']['full_name']
|
||||||
|
product = Product.objects.filter(name=product_name).first()
|
||||||
|
unity = Unity.objects.filter(value=unit_name).first()
|
||||||
|
wherehouse = WhereHouse.objects.filter(name=warehouse_name).first()
|
||||||
|
project_folder = ProjectFolder.objects.filter(name=project_name).first()
|
||||||
|
user = User.objects.filter(full_name=creator_name).first()
|
||||||
|
|
||||||
|
delivery_date = datetime.strptime(item['delivery_date'], "%d.%m.%Y").date()
|
||||||
|
created_at = datetime.strptime(item['created_at'], "%d.%m.%Y %H:%M")
|
||||||
|
if not product:
|
||||||
|
product = Product.objects.create(
|
||||||
|
name=product_name,
|
||||||
|
product_code=item['product']['code'],
|
||||||
|
type=item['product']['resource']['type'].upper(),
|
||||||
|
unity=unity
|
||||||
|
)
|
||||||
|
Order.objects.update_or_create(
|
||||||
|
status=item['status'].upper(),
|
||||||
|
product=product,
|
||||||
|
unity=unity,
|
||||||
|
wherehouse=wherehouse,
|
||||||
|
project_folder=project_folder,
|
||||||
|
employee=user,
|
||||||
|
quantity=item['quantity'],
|
||||||
|
currency=item['currency']['symbol'].lower(),
|
||||||
|
created_at=created_at,
|
||||||
|
date=delivery_date
|
||||||
|
)
|
||||||
|
break
|
||||||
|
|
||||||
|
self.stdout.write(self.style.SUCCESS("Orders imported successfully ✅"))
|
||||||
95
core/apps/orders/management/commands/import_party.py
Normal file
95
core/apps/orders/management/commands/import_party.py
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
import json, requests
|
||||||
|
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
from core.apps.orders.models import Order, Party, PartyAmount
|
||||||
|
from core.apps.accounts.models import User
|
||||||
|
from core.apps.products.models import Product, Unity
|
||||||
|
from core.apps.counterparty.models import Counterparty
|
||||||
|
from core.apps.wherehouse.models import WhereHouse
|
||||||
|
from core.apps.projects.models import Project, ProjectFolder
|
||||||
|
from core.apps.orders.utils.parse_date import parse_date
|
||||||
|
|
||||||
|
|
||||||
|
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MTI4NjcwMywiZXhwIjoxNzYxNjQ2NzAzLCJuYmYiOjE3NjEyODY3MDMsImp0aSI6IjRBNkh4aHI5WkRqOGxVMzUiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.O4NGZL_a3WIrjko5W2sEOBAbM5lv0miVgVa9tfYuyhM'
|
||||||
|
|
||||||
|
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']
|
||||||
|
headers = {
|
||||||
|
"Authorization": f"Bearer {token}"
|
||||||
|
}
|
||||||
|
|
||||||
|
with open(file_path, 'r') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
for item in data['data']['data']:
|
||||||
|
url = f'https://backend.app.uyqur.uz/main/supply/order-view?id={item['id']}'
|
||||||
|
res = requests.get(url, headers=headers)
|
||||||
|
data = res.json()['data']
|
||||||
|
user = None
|
||||||
|
if data.get('agent'):
|
||||||
|
user = User.objects.filter(full_name=data['agent']['full_name']).first()
|
||||||
|
if not user:
|
||||||
|
continue
|
||||||
|
party, created = Party.objects.get_or_create(
|
||||||
|
number=data['id'],
|
||||||
|
defaults={
|
||||||
|
'mediator': user,
|
||||||
|
'delivery_date': parse_date(data['delivery_date']),
|
||||||
|
'closed_date': parse_date(data['recieved_date']),
|
||||||
|
'order_date': parse_date(data['ordered_date']),
|
||||||
|
'payment_date': parse_date(data['payment_date']) if parse_date(data['payment_date']) else parse_date(data['ordered_date']),
|
||||||
|
'status': data['status'].upper(),
|
||||||
|
'payment_percentage': data['payment_percent'],
|
||||||
|
'process': data['percent'],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
orders = []
|
||||||
|
total_price = 0
|
||||||
|
paid_amount = 0
|
||||||
|
calculated_amount = 0
|
||||||
|
must_pay_amount = 0
|
||||||
|
for i in data['warehouse_products']:
|
||||||
|
product = Product.objects.filter(name__icontains=i['product']['name']['uz']).first()
|
||||||
|
if not product:
|
||||||
|
continue
|
||||||
|
unit = Unity.objects.filter(value=i['unit']['name']['uz']).first()
|
||||||
|
counterparty = Counterparty.objects.filter(name=i['company_person']['name']).first()
|
||||||
|
wherehouse = None
|
||||||
|
if i.get('warehouse'):
|
||||||
|
wherehouse = WhereHouse.objects.filter(name=i.get('warehouse').get('name')).first()
|
||||||
|
project_folder = None
|
||||||
|
if i.get('project'):
|
||||||
|
project_folder = ProjectFolder.objects.filter(name=i['project']['name']).first()
|
||||||
|
|
||||||
|
order, created = Order.objects.get_or_create(
|
||||||
|
product=product,
|
||||||
|
unity=unit,
|
||||||
|
counterparty=counterparty,
|
||||||
|
currency=i['currency']['symbol'].lower(),
|
||||||
|
wherehouse=wherehouse,
|
||||||
|
project_folder=project_folder,
|
||||||
|
amount=i['amount'],
|
||||||
|
total_price=i['total_amount'],
|
||||||
|
quantity=i['quantity'],
|
||||||
|
)
|
||||||
|
total_price += i['total_amount']
|
||||||
|
paid_amount += i['paid_amount']
|
||||||
|
calculated_amount += i['calculated_amount']
|
||||||
|
must_pay_amount += i['must_pay_amount']
|
||||||
|
orders.append(order)
|
||||||
|
party.orders.set(orders)
|
||||||
|
PartyAmount.objects.get_or_create(
|
||||||
|
party=party,
|
||||||
|
defaults={
|
||||||
|
"total_price": total_price,
|
||||||
|
"calculated_amount": calculated_amount,
|
||||||
|
"paid_amount": paid_amount,
|
||||||
|
"payment_amount": must_pay_amount,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.stdout.write("Parties added")
|
||||||
18
core/apps/orders/migrations/0029_alter_order_status.py
Normal file
18
core/apps/orders/migrations/0029_alter_order_status.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.2.4 on 2025-10-24 12:08
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('orders', '0028_alter_order_quantity'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='order',
|
||||||
|
name='status',
|
||||||
|
field=models.CharField(choices=[('NEW', 'yangi'), ('OPEN', 'ochiq'), ('CANCELLED', 'bekor qilindi'), ('ACCEPTED', 'qabul qilindi')], default='NEW', max_length=20),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# Generated by Django 5.2.4 on 2025-10-25 16:24
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('orders', '0029_alter_order_status'),
|
||||||
|
('wherehouse', '0017_wherehouse_users'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='order',
|
||||||
|
name='wherehouse',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='orders', to='wherehouse.wherehouse'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='party',
|
||||||
|
name='status',
|
||||||
|
field=models.CharField(choices=[('NEW', 'yangi'), ('PARTY_IS_MADE', 'partiya qilingan'), ('EXPECTED', 'kutilmoqda'), ('DRAFT', 'qoralama'), ('CANCELLED', 'bekor qilingan'), ('PURCHASED', 'sotib olinmoqda'), ('PROCESS', 'jarayonda'), ('RECIEVED', 'qabul qilingan')], default='NEW', max_length=20),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -12,6 +12,7 @@ from core.apps.counterparty.models import Counterparty
|
|||||||
class Order(BaseModel):
|
class Order(BaseModel):
|
||||||
STATUS = (
|
STATUS = (
|
||||||
('NEW', 'yangi'),
|
('NEW', 'yangi'),
|
||||||
|
("OPEN", 'ochiq'),
|
||||||
('CANCELLED', "bekor qilindi"),
|
('CANCELLED', "bekor qilindi"),
|
||||||
('ACCEPTED', 'qabul qilindi'),
|
('ACCEPTED', 'qabul qilindi'),
|
||||||
)
|
)
|
||||||
@@ -29,7 +30,7 @@ class Order(BaseModel):
|
|||||||
Project, on_delete=models.SET_NULL, related_name='orders', null=True, blank=True
|
Project, on_delete=models.SET_NULL, related_name='orders', null=True, blank=True
|
||||||
)
|
)
|
||||||
wherehouse = models.ForeignKey(
|
wherehouse = models.ForeignKey(
|
||||||
WhereHouse, on_delete=models.CASCADE, related_name='orders'
|
WhereHouse, on_delete=models.CASCADE, related_name='orders', null=True, blank=True
|
||||||
)
|
)
|
||||||
employee = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders', null=True)
|
employee = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders', null=True)
|
||||||
counterparty = models.ForeignKey(
|
counterparty = models.ForeignKey(
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class Party(BaseModel):
|
|||||||
('CANCELLED', 'bekor qilingan'),
|
('CANCELLED', 'bekor qilingan'),
|
||||||
('PURCHASED', 'sotib olinmoqda'),
|
('PURCHASED', 'sotib olinmoqda'),
|
||||||
('PROCESS', 'jarayonda'),
|
('PROCESS', 'jarayonda'),
|
||||||
|
("RECIEVED", 'qabul qilingan'),
|
||||||
]
|
]
|
||||||
PAYMENT_STATUS = (
|
PAYMENT_STATUS = (
|
||||||
('PAID', "to'langan"),
|
('PAID', "to'langan"),
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from core.apps.orders.models import Party
|
|||||||
|
|
||||||
@receiver(post_save, sender=Party)
|
@receiver(post_save, sender=Party)
|
||||||
def set_party_number(sender, instance, created, **kwargs):
|
def set_party_number(sender, instance, created, **kwargs):
|
||||||
if created:
|
if created and not instance.number:
|
||||||
last_party = Party.objects.order_by('number').last()
|
last_party = Party.objects.order_by('number').last()
|
||||||
instance.number = (last_party.number + 1) if last_party else 1
|
instance.number = (last_party.number + 1) if last_party else 1
|
||||||
instance.save(update_fields=["number"])
|
instance.save(update_fields=["number"])
|
||||||
12
core/apps/orders/utils/parse_date.py
Normal file
12
core/apps/orders/utils/parse_date.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
def parse_date(date_str):
|
||||||
|
if not date_str:
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
return datetime.strptime(date_str, '%d.%m.%Y').date()
|
||||||
|
except ValueError:
|
||||||
|
try:
|
||||||
|
return datetime.strptime(date_str, '%Y-%m-%d').date()
|
||||||
|
except ValueError:
|
||||||
|
return None
|
||||||
23
core/apps/products/management/commands/import_folder.py
Normal file
23
core/apps/products/management/commands/import_folder.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
from core.apps.products.models import Folder
|
||||||
|
|
||||||
|
|
||||||
|
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']:
|
||||||
|
Folder.objects.get_or_create(
|
||||||
|
name=item['name']['uz']
|
||||||
|
)
|
||||||
|
|
||||||
|
self.stdout.write("Folderlar qoshildi")
|
||||||
37
core/apps/products/management/commands/import_products.py
Normal file
37
core/apps/products/management/commands/import_products.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
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")
|
||||||
22
core/apps/products/management/commands/import_units.py
Normal file
22
core/apps/products/management/commands/import_units.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
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")
|
||||||
@@ -24,4 +24,3 @@ class SubFolder(BaseModel):
|
|||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Sub Papka'
|
verbose_name = 'Sub Papka'
|
||||||
verbose_name_plural = 'Sub Papkalar'
|
verbose_name_plural = 'Sub Papkalar'
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,33 @@
|
|||||||
|
from django.db.models import Q
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
from rest_framework import generics, views
|
from rest_framework import generics, views
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
|
from core.apps.accounts.permissions.permissions import HasRolePermission
|
||||||
from core.apps.products.models import Product
|
from core.apps.products.models import Product
|
||||||
from core.apps.products.serializers import product as serializers
|
from core.apps.products.serializers import product as serializers
|
||||||
from core.apps.accounts.permissions.permissions import HasRolePermission
|
|
||||||
from core.apps.shared.paginations.custom import CustomPageNumberPagination
|
from core.apps.shared.paginations.custom import CustomPageNumberPagination
|
||||||
|
|
||||||
|
|
||||||
class ProductListApiView(generics.ListAPIView):
|
class ProductListApiView(generics.ListAPIView):
|
||||||
serializer_class = serializers.ProductListSerializer
|
serializer_class = serializers.ProductListSerializer
|
||||||
queryset = Product.objects.select_related('unity').only(
|
queryset = Product.objects.select_related("unity").only(
|
||||||
'id', 'name', 'type', 'unity'
|
"id", "name", "type", "unity"
|
||||||
)
|
)
|
||||||
permission_classes = [HasRolePermission]
|
permission_classes = [HasRolePermission]
|
||||||
pagination_class = CustomPageNumberPagination
|
pagination_class = CustomPageNumberPagination
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
search = request.query_params.get("search")
|
||||||
|
if search:
|
||||||
|
self.queryset = self.queryset.filter(
|
||||||
|
Q(name__istartswith=search) | Q(unity__value__istartswith=search)
|
||||||
|
)
|
||||||
|
page = self.paginate_queryset(self.queryset)
|
||||||
|
if page is not None:
|
||||||
|
serializer = self.serializer_class(page, many=True)
|
||||||
|
return self.get_paginated_response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
class ProductCreateApiView(generics.GenericAPIView):
|
class ProductCreateApiView(generics.GenericAPIView):
|
||||||
serializer_class = serializers.ProductSerializer
|
serializer_class = serializers.ProductSerializer
|
||||||
@@ -29,19 +40,19 @@ class ProductCreateApiView(generics.GenericAPIView):
|
|||||||
data = serializer.save()
|
data = serializer.save()
|
||||||
return Response(
|
return Response(
|
||||||
{
|
{
|
||||||
'success': True,
|
"success": True,
|
||||||
'message': "product successfully created!",
|
"message": "product successfully created!",
|
||||||
'product': serializers.ProductListSerializer(data).data
|
"product": serializers.ProductListSerializer(data).data,
|
||||||
},
|
},
|
||||||
status=201
|
status=201,
|
||||||
)
|
)
|
||||||
return Response(
|
return Response(
|
||||||
{
|
{
|
||||||
"success": False,
|
"success": False,
|
||||||
"message": "an error occurred while adding th product.",
|
"message": "an error occurred while adding th product.",
|
||||||
"error": serializer.errors
|
"error": serializer.errors,
|
||||||
},
|
},
|
||||||
status=400
|
status=400,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -56,34 +67,36 @@ class ProductUpdateApiView(generics.GenericAPIView):
|
|||||||
if serializer.is_valid(raise_exception=True):
|
if serializer.is_valid(raise_exception=True):
|
||||||
serializer.save()
|
serializer.save()
|
||||||
return Response(
|
return Response(
|
||||||
{'success': True, 'message': 'product successfully updated!'},
|
{"success": True, "message": "product successfully updated!"},
|
||||||
status=200
|
status=200,
|
||||||
)
|
)
|
||||||
return Response(
|
return Response(
|
||||||
{
|
{
|
||||||
'success': False,
|
"success": False,
|
||||||
'message': "an error occurred while updating the product.",
|
"message": "an error occurred while updating the product.",
|
||||||
"error": serializer.errors,
|
"error": serializer.errors,
|
||||||
},
|
},
|
||||||
status=400
|
status=400,
|
||||||
)
|
)
|
||||||
|
|
||||||
def patch(self, request, product_id):
|
def patch(self, request, product_id):
|
||||||
product = get_object_or_404(Product, id=product_id)
|
product = get_object_or_404(Product, id=product_id)
|
||||||
serializer = self.serializer_class(data=request.data, instance=product, partial=True)
|
serializer = self.serializer_class(
|
||||||
|
data=request.data, instance=product, partial=True
|
||||||
|
)
|
||||||
if serializer.is_valid(raise_exception=True):
|
if serializer.is_valid(raise_exception=True):
|
||||||
serializer.save()
|
serializer.save()
|
||||||
return Response(
|
return Response(
|
||||||
{'success': True, "message": "product successfully updated!"},
|
{"success": True, "message": "product successfully updated!"},
|
||||||
status=200
|
status=200,
|
||||||
)
|
)
|
||||||
return Response(
|
return Response(
|
||||||
{
|
{
|
||||||
"successs": False,
|
"successs": False,
|
||||||
"message": "an error accurred while updating the product.",
|
"message": "an error accurred while updating the product.",
|
||||||
"error": serializer.errors
|
"error": serializer.errors,
|
||||||
},
|
},
|
||||||
status=400
|
status=400,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -94,6 +107,5 @@ class ProductDeleteApiView(views.APIView):
|
|||||||
product = get_object_or_404(Product, id=product_id)
|
product = get_object_or_404(Product, id=product_id)
|
||||||
product.delete()
|
product.delete()
|
||||||
return Response(
|
return Response(
|
||||||
{'success': True, 'message': 'product successfully deleted!'},
|
{"success": True, "message": "product successfully deleted!"}, status=204
|
||||||
status=204
|
|
||||||
)
|
)
|
||||||
22
core/apps/wherehouse/management/commands/import_warehouse.py
Normal file
22
core/apps/wherehouse/management/commands/import_warehouse.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import json
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
from core.apps.wherehouse.models import WhereHouse
|
||||||
|
|
||||||
|
|
||||||
|
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']['warehouses']:
|
||||||
|
WhereHouse.objects.get_or_create(
|
||||||
|
name=item['name']
|
||||||
|
)
|
||||||
|
|
||||||
|
self.stdout.write("Warehouses added")
|
||||||
128
data/cash_transaction.json
Normal file
128
data/cash_transaction.json
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"cashs": [
|
||||||
|
{
|
||||||
|
"id": 24,
|
||||||
|
"name": "FARM NAQT",
|
||||||
|
"status": "open",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"full_name": "Mirjonov Meronshox",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 25,
|
||||||
|
"name": "FARM BUGHALTERIYA",
|
||||||
|
"status": "open",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 111,
|
||||||
|
"full_name": "MARDONOVA DILAFRUZ",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 82,
|
||||||
|
"name": "Yunusobod BUHGALTERIYA",
|
||||||
|
"status": "open",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 111,
|
||||||
|
"full_name": "MARDONOVA DILAFRUZ",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 83,
|
||||||
|
"name": "Yunusobod NAQT",
|
||||||
|
"status": "open",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"full_name": "Mirjonov Meronshox",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cash_folders": [
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"name": "MARKETING",
|
||||||
|
"color": null,
|
||||||
|
"cashs_count": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"uz": "Muvaffaqiyatli!",
|
||||||
|
"ru": "Успешно!",
|
||||||
|
"en": "Success!",
|
||||||
|
"tr": "Başarılı!"
|
||||||
|
}
|
||||||
|
}
|
||||||
12209
data/counterparty.json
Normal file
12209
data/counterparty.json
Normal file
File diff suppressed because it is too large
Load Diff
52
data/counterparty_folder.json
Normal file
52
data/counterparty_folder.json
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"name": "marketing",
|
||||||
|
"color": null,
|
||||||
|
"company_persons_count": 103
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 16,
|
||||||
|
"name": "Qurilish bozorlik",
|
||||||
|
"color": null,
|
||||||
|
"company_persons_count": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 23,
|
||||||
|
"name": "Административные расходы",
|
||||||
|
"color": null,
|
||||||
|
"company_persons_count": 15
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 32,
|
||||||
|
"name": "Mavrid административные расходы",
|
||||||
|
"color": null,
|
||||||
|
"company_persons_count": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 34,
|
||||||
|
"name": "Buxgalter",
|
||||||
|
"color": null,
|
||||||
|
"company_persons_count": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 36,
|
||||||
|
"name": "dur",
|
||||||
|
"color": null,
|
||||||
|
"company_persons_count": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 44,
|
||||||
|
"name": "A",
|
||||||
|
"color": null,
|
||||||
|
"company_persons_count": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"message": {
|
||||||
|
"uz": "Muvaffaqiyatli!",
|
||||||
|
"ru": "Успешно!",
|
||||||
|
"en": "Success!",
|
||||||
|
"tr": "Başarılı!"
|
||||||
|
}
|
||||||
|
}
|
||||||
45372
data/party/party.json
Normal file
45372
data/party/party.json
Normal file
File diff suppressed because it is too large
Load Diff
46434
data/party/party2.json
Normal file
46434
data/party/party2.json
Normal file
File diff suppressed because it is too large
Load Diff
44649
data/party/party3.json
Normal file
44649
data/party/party3.json
Normal file
File diff suppressed because it is too large
Load Diff
43171
data/party/party4.json
Normal file
43171
data/party/party4.json
Normal file
File diff suppressed because it is too large
Load Diff
38874
data/party/party5.json
Normal file
38874
data/party/party5.json
Normal file
File diff suppressed because it is too large
Load Diff
35056
data/party/party6.json
Normal file
35056
data/party/party6.json
Normal file
File diff suppressed because it is too large
Load Diff
35068
data/party/party7.json
Normal file
35068
data/party/party7.json
Normal file
File diff suppressed because it is too large
Load Diff
35102
data/party/party8.json
Normal file
35102
data/party/party8.json
Normal file
File diff suppressed because it is too large
Load Diff
15125
data/party/party9.json
Normal file
15125
data/party/party9.json
Normal file
File diff suppressed because it is too large
Load Diff
32042
data/product.json
Normal file
32042
data/product.json
Normal file
File diff suppressed because it is too large
Load Diff
107
data/product_folder.json
Normal file
107
data/product_folder.json
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
{
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 43,
|
||||||
|
"name": {
|
||||||
|
"ru": "Товарная база Узбекистана",
|
||||||
|
"uz": "O'zbekiston mahsulotlar bazasi"
|
||||||
|
},
|
||||||
|
"color": null,
|
||||||
|
"status": "active",
|
||||||
|
"products_count": 2000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 44,
|
||||||
|
"name": {
|
||||||
|
"uz": "Marketing",
|
||||||
|
"ru": "Marketing"
|
||||||
|
},
|
||||||
|
"color": null,
|
||||||
|
"status": "active",
|
||||||
|
"products_count": 208
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 49,
|
||||||
|
"name": {
|
||||||
|
"uz": "Inventar",
|
||||||
|
"en": "Inventar",
|
||||||
|
"ru": "Inventar"
|
||||||
|
},
|
||||||
|
"color": null,
|
||||||
|
"status": "active",
|
||||||
|
"products_count": 82
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 51,
|
||||||
|
"name": {
|
||||||
|
"ru": "административный расходы",
|
||||||
|
"en": "административный расходы",
|
||||||
|
"uz": "административный расходы"
|
||||||
|
},
|
||||||
|
"color": null,
|
||||||
|
"status": "active",
|
||||||
|
"products_count": 81
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 55,
|
||||||
|
"name": {
|
||||||
|
"ru": "Qurilish montaj ishlari",
|
||||||
|
"en": "Qurilish montaj ishlari",
|
||||||
|
"uz": "Qurilish montaj ishlari"
|
||||||
|
},
|
||||||
|
"color": null,
|
||||||
|
"status": "active",
|
||||||
|
"products_count": 32
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 78,
|
||||||
|
"name": {
|
||||||
|
"uz": "NARYAD",
|
||||||
|
"en": "NARYAD",
|
||||||
|
"ru": "NARYAD"
|
||||||
|
},
|
||||||
|
"color": null,
|
||||||
|
"status": "active",
|
||||||
|
"products_count": 7
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 83,
|
||||||
|
"name": {
|
||||||
|
"uz": "OFIS INVENTARLARI",
|
||||||
|
"en": "OFIS INVENTARLARI",
|
||||||
|
"ru": "OFIS INVENTARLARI"
|
||||||
|
},
|
||||||
|
"color": null,
|
||||||
|
"status": "active",
|
||||||
|
"products_count": 105
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 148,
|
||||||
|
"name": {
|
||||||
|
"uz": "Texnika xizmati",
|
||||||
|
"en": "Texnika xizmati",
|
||||||
|
"ru": "Texnika xizmati"
|
||||||
|
},
|
||||||
|
"color": "#1E90FF",
|
||||||
|
"status": "active",
|
||||||
|
"products_count": 7
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 149,
|
||||||
|
"name": {
|
||||||
|
"uz": "Marketing xizmati",
|
||||||
|
"en": "Marketing xizmati",
|
||||||
|
"ru": "Marketing xizmati"
|
||||||
|
},
|
||||||
|
"color": "#1E90FF",
|
||||||
|
"status": "active",
|
||||||
|
"products_count": 5
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"message": {
|
||||||
|
"uz": "Muvaffaqiyatli!",
|
||||||
|
"ru": "Успешно!",
|
||||||
|
"en": "Success!",
|
||||||
|
"tr": "Başarılı!"
|
||||||
|
}
|
||||||
|
}
|
||||||
1634
data/unit.json
Normal file
1634
data/unit.json
Normal file
File diff suppressed because it is too large
Load Diff
224
data/user.json
Normal file
224
data/user.json
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"current_page": 1,
|
||||||
|
"total": 15,
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"login": "SuperAdminIskander",
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp",
|
||||||
|
"phone": "333333333",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 79,
|
||||||
|
"name": "UYQUR_COMPANY_SUPER_ADMIN",
|
||||||
|
"description": "Kompaniya uchun ruxsatlar to'plami",
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"login": "petka8000",
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998900858000",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 82,
|
||||||
|
"name": "TA'MINOTCHI",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 108,
|
||||||
|
"login": "abu4440",
|
||||||
|
"full_name": "Xudjaqulov Abbos",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998934344440",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 83,
|
||||||
|
"name": "NACH UCHASTKA",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"login": "meron7037",
|
||||||
|
"full_name": "Mirjonov Meronshox",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998991367037",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 84,
|
||||||
|
"name": "KASSIR",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 110,
|
||||||
|
"login": "SHOX4004",
|
||||||
|
"full_name": "Imomov Jasurbek",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998937148998",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 81,
|
||||||
|
"name": "OMBOR MUDIRI",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 111,
|
||||||
|
"login": "DILYA2500",
|
||||||
|
"full_name": "MARDONOVA DILAFRUZ",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998913352500",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 85,
|
||||||
|
"name": "BUGHALTERIYA",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 112,
|
||||||
|
"login": "TEMUR1100",
|
||||||
|
"full_name": "QIYOMOV TEMURBEK",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998947101100",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 85,
|
||||||
|
"name": "BUGHALTERIYA",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 113,
|
||||||
|
"login": "Durdona0007",
|
||||||
|
"full_name": "Durdona",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998909919639",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 86,
|
||||||
|
"name": "Marketolog",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"login": "БАРОТОВА",
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998936121821",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 104,
|
||||||
|
"name": "MATERIALNIY BUHGALTER",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 147,
|
||||||
|
"login": "Shohruh4004",
|
||||||
|
"full_name": "Rajabov Shohruh",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/W2XUDsHUUnr4E3mjfJIx.webp",
|
||||||
|
"phone": "+998913304004",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 112,
|
||||||
|
"name": "Shohruh",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 202,
|
||||||
|
"login": "s.mehriddin",
|
||||||
|
"full_name": "Самадов Мехриддин",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998943739033",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 81,
|
||||||
|
"name": "OMBOR MUDIRI",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211,
|
||||||
|
"login": "r.sherzod37",
|
||||||
|
"full_name": "Рустамов Шерзод",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998998803769",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 162,
|
||||||
|
"name": "Prorab",
|
||||||
|
"description": "Loyihalar bilan ishlash",
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 219,
|
||||||
|
"login": "Shahzoda2719",
|
||||||
|
"full_name": "Тухтаева Шахзода",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998997542719",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 81,
|
||||||
|
"name": "OMBOR MUDIRI",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 221,
|
||||||
|
"login": "Utkir1161",
|
||||||
|
"full_name": "Жумаев Уткир",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998991561161",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 83,
|
||||||
|
"name": "NACH UCHASTKA",
|
||||||
|
"description": null,
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"login": "iskander_visitor",
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null,
|
||||||
|
"phone": "+998939897101",
|
||||||
|
"status": "active",
|
||||||
|
"role": {
|
||||||
|
"id": 233,
|
||||||
|
"name": "visitor",
|
||||||
|
"description": "uyqur support admin",
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"uz": "Muvaffaqiyatli!",
|
||||||
|
"ru": "Успешно!",
|
||||||
|
"en": "Success!",
|
||||||
|
"tr": "Başarılı!"
|
||||||
|
}
|
||||||
|
}
|
||||||
667
data/warehouse.json
Normal file
667
data/warehouse.json
Normal file
@@ -0,0 +1,667 @@
|
|||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"warehouses": [
|
||||||
|
{
|
||||||
|
"id": 22,
|
||||||
|
"name": "MAVRID (ФАРМ)",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 110,
|
||||||
|
"full_name": "Imomov Jasurbek",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 112,
|
||||||
|
"full_name": "QIYOMOV TEMURBEK",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 111,
|
||||||
|
"full_name": "MARDONOVA DILAFRUZ",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 113,
|
||||||
|
"full_name": "Durdona",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 108,
|
||||||
|
"full_name": "Xudjaqulov Abbos",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"full_name": "Mirjonov Meronshox",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 23,
|
||||||
|
"name": "marketing",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 113,
|
||||||
|
"full_name": "Durdona",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"full_name": "Mirjonov Meronshox",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 111,
|
||||||
|
"full_name": "MARDONOVA DILAFRUZ",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 108,
|
||||||
|
"full_name": "Xudjaqulov Abbos",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 49,
|
||||||
|
"name": "Prorab qurilish MAVRID",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 108,
|
||||||
|
"full_name": "Xudjaqulov Abbos",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211,
|
||||||
|
"full_name": "Рустамов Шерзод",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 50,
|
||||||
|
"name": "Yunusobod ombor",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 202,
|
||||||
|
"full_name": "Самадов Мехриддин",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 219,
|
||||||
|
"full_name": "Тухтаева Шахзода",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 51,
|
||||||
|
"name": "Yunusobod marketing",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 113,
|
||||||
|
"full_name": "Durdona",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 62,
|
||||||
|
"name": "Yunusobod sklad instrument",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 219,
|
||||||
|
"full_name": "Тухтаева Шахзода",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 63,
|
||||||
|
"name": "Yunusobod adminstrativniy xarajatlar",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 147,
|
||||||
|
"full_name": "Rajabov Shohruh",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/W2XUDsHUUnr4E3mjfJIx.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 101,
|
||||||
|
"name": "Офис",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"full_name": "Mirjonov Meronshox",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 108,
|
||||||
|
"name": "Mavrid sklad instrument",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 110,
|
||||||
|
"full_name": "Imomov Jasurbek",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"name": "Yunusobod sklad inventar",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 219,
|
||||||
|
"full_name": "Тухтаева Шахзода",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 110,
|
||||||
|
"name": "Mavrid sklad inventar",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 110,
|
||||||
|
"full_name": "Imomov Jasurbek",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 111,
|
||||||
|
"name": "Yunusobod Ofis",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"full_name": "Mirjonov Meronshox",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 112,
|
||||||
|
"name": "Mavrid Ofis",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"full_name": "Mirjonov Meronshox",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 114,
|
||||||
|
"name": "Prorab Qurilish Yunusobod",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211,
|
||||||
|
"full_name": "Рустамов Шерзод",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 120,
|
||||||
|
"name": "МАВРИД АДМИНИСТРАТИВНЫЙ РАСХОД",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 147,
|
||||||
|
"full_name": "Rajabov Shohruh",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/W2XUDsHUUnr4E3mjfJIx.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 104,
|
||||||
|
"full_name": "SuperAdminIskander",
|
||||||
|
"image": "https://backend.app.uyqur.uz/public/upload/image/neDbGZivNlWAz5nHopbl.webp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 121,
|
||||||
|
"name": "МАВРИД КУХНЯ",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 110,
|
||||||
|
"full_name": "Imomov Jasurbek",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 122,
|
||||||
|
"name": "МАВРИД АПТЕКА",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 109,
|
||||||
|
"full_name": "Mirjonov Meronshox",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 110,
|
||||||
|
"full_name": "Imomov Jasurbek",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 123,
|
||||||
|
"name": "МАВРИД КОНС ТОВАР",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 110,
|
||||||
|
"full_name": "Imomov Jasurbek",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 124,
|
||||||
|
"name": "ЮНУСОБОД КУХНЯ",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 219,
|
||||||
|
"full_name": "Тухтаева Шахзода",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 125,
|
||||||
|
"name": "ЮНУСОБОД АПТЕКА",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 219,
|
||||||
|
"full_name": "Тухтаева Шахзода",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 126,
|
||||||
|
"name": "ЮНУСОБОД КОНС ТОВАР",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 219,
|
||||||
|
"full_name": "Тухтаева Шахзода",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 158,
|
||||||
|
"name": "МАВРИД ХИЗМАТЛАР",
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": 110,
|
||||||
|
"full_name": "Imomov Jasurbek",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 138,
|
||||||
|
"full_name": "Baratova Zilola",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 107,
|
||||||
|
"full_name": "Iskandarov Farrux",
|
||||||
|
"image": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 306,
|
||||||
|
"full_name": "Uyqur Support",
|
||||||
|
"image": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "active"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"warehouse_folders": []
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"uz": "Muvaffaqiyatli!",
|
||||||
|
"ru": "Успешно!",
|
||||||
|
"en": "Success!",
|
||||||
|
"tr": "Başarılı!"
|
||||||
|
}
|
||||||
|
}
|
||||||
6814
order.json
Normal file
6814
order.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -40,3 +40,4 @@ uritemplate==4.2.0
|
|||||||
uvicorn==0.35.0
|
uvicorn==0.35.0
|
||||||
vine==5.1.0
|
vine==5.1.0
|
||||||
wcwidth==0.2.13
|
wcwidth==0.2.13
|
||||||
|
requests
|
||||||
|
|||||||
Reference in New Issue
Block a user