1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
import csv
import os
from typing import Any
from datetime import datetime
from django.core.files.images import ImageFile
from django.core.management.base import BaseCommand
from core.models import Order, OrderItem, PickupPoint, Supplier, User, Product, Role
class Command(BaseCommand):
def handle(self, *args: Any, **kwargs: Any) -> str | None:
base_path = "attachments/"
with open(os.path.join(base_path, "pickup_point.csv"), encoding="utf-8-sig") as f:
reader = csv.DictReader(f, ["address"])
for row in reader:
print(row)
PickupPoint.objects.get_or_create(address=row["address"])
with open(os.path.join(base_path, "product.csv"), encoding="utf-8-sig") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
if not row:
continue
photo_name = row.pop("photo_name", None)
sup_obj, _ = Supplier.objects.get_or_create(name=row.pop("supplier"))
product, _ = Product.objects.get_or_create(article=row["article"], supplier=sup_obj, defaults=row)
if photo_name:
photo_path = os.path.join(base_path, photo_name)
if os.path.exists(photo_path):
with open(photo_path, "rb") as img_file:
image = ImageFile(img_file)
print(image.width, image.height)
product.photo.save(
os.path.basename(photo_path),
image,
save=True
)
with open(os.path.join(base_path, "user.csv"), encoding="utf-8-sig") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
if not row:
continue
role_obj, _ = Role.objects.get_or_create(name=row["role"])
if not User.objects.filter(username=row["login"]).exists():
user = User.objects.create(
username=row["login"], full_name=row["name"], role=role_obj
)
user.set_password(str(row["password"]).strip())
user.save()
with open(os.path.join(base_path, "order.csv"), encoding="utf-8-sig") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
if not row:
continue
pp = row.pop("pp", 1)
items_string = row.pop("items", None)
delivery_date_str = row.pop("delivery_date", None)
delivery_date = datetime.strptime(delivery_date_str, "%m-%d-%Y").date() if delivery_date_str else None
order_date_str = row.pop("order_date", None)
order_date = datetime.strptime(order_date_str, "%m-%d-%Y").date() if order_date_str else None
pp_obj = (
PickupPoint.objects.get(id=pp)
if PickupPoint.objects.filter(id=pp).exists()
else PickupPoint.objects.first()
)
status = "completed" if row.pop("status", None) == "Завершен" else "new"
user_obj = User.objects.get(full_name=row["client_name"])
order, created = Order.objects.get_or_create(
id=row["id"],
pickup_point=pp_obj,
user=user_obj,
delivery_date=delivery_date,
order_date=order_date,
status=status,
defaults=row,
)
if created and items_string:
items = items_string.split(", ")
for i in range(0, len(items), 2):
art = items[i].strip()
prod = Product.objects.get(article=art)
OrderItem.objects.create(
order=order, product=prod, count=int(items[i+1])
)
|