first_commit
This commit is contained in:
commit
8f47f0248e
|
@ -0,0 +1,67 @@
|
|||
import openpyxl
|
||||
from openpyxl.drawing.image import Image
|
||||
import requests
|
||||
from io import BytesIO
|
||||
|
||||
from models import Product
|
||||
|
||||
# Отримання товарів із фото
|
||||
try:
|
||||
selected_products = Product.select().where(Product.photo_url.is_null(False)).limit(20)
|
||||
except Exception as e:
|
||||
print(f"Виникла помилка: {e}")
|
||||
|
||||
|
||||
# Створення воркбуку та аркушу
|
||||
wb = openpyxl.Workbook()
|
||||
ws = wb.active
|
||||
ws.title = "Sheet"
|
||||
# Захист об'єктів
|
||||
ws.protection.objects = True
|
||||
ws.protection.password = ''
|
||||
|
||||
# Зміна ширини стовпця до 200px
|
||||
ws.column_dimensions["A"].width = ws.column_dimensions["B"].width = 200 / 7 # встановлюємо ширину стовпця у символах
|
||||
|
||||
# Додавання назви та фото товару до аркушу ws
|
||||
def add_to_file(product, row_num):
|
||||
|
||||
# Встановлення висоти рядка 200px
|
||||
ws.row_dimensions[row_num].height = 200 * 0.75
|
||||
|
||||
try:
|
||||
# Отримання зображення
|
||||
response = requests.get(product.photo_url)
|
||||
img_data = BytesIO(response.content)
|
||||
# Об'єкт зображення
|
||||
img = Image(img_data)
|
||||
|
||||
# Додаємо зображення на лист
|
||||
ws.add_image(img, 'B' + str(row_num))
|
||||
|
||||
except requests.exceptions.HTTPError as http_err:
|
||||
print(f"HTTP помилка: {http_err}")
|
||||
except requests.exceptions.RequestException as req_err:
|
||||
print(f"Помилка запиту: {req_err}")
|
||||
|
||||
|
||||
# Координати клітинки назви товару
|
||||
name_coordinates = 'A' + str(row_num)
|
||||
# Запис назви товару
|
||||
ws[name_coordinates] = selected_products[i].product_name
|
||||
# Стилізація: перенесення тексту, позиціювання по центру у вертикалі
|
||||
ws[name_coordinates].alignment = openpyxl.styles.Alignment(vertical='center', wrap_text=True)
|
||||
|
||||
#Запис до файлу
|
||||
for i in range(len(selected_products)):
|
||||
|
||||
# Виклик функції запису
|
||||
add_to_file(selected_products[i], i+1)
|
||||
|
||||
|
||||
|
||||
|
||||
# Встановлюємо захист для всього листа з паролем
|
||||
ws.protection.enable()
|
||||
# Збережння файлу
|
||||
wb.save("products.xlsx")
|
|
@ -0,0 +1,114 @@
|
|||
import os
|
||||
import datetime
|
||||
from dotenv import load_dotenv
|
||||
from peewee import *
|
||||
|
||||
|
||||
load_dotenv()
|
||||
|
||||
DATABASE_L = os.getenv("DATABASE_L")
|
||||
DB_HOST_L = os.getenv("DB_HOST_L")
|
||||
USERS_L = os.getenv("USERS_L")
|
||||
PASSW_L = os.getenv("PASSW_L")
|
||||
|
||||
db = MySQLDatabase(
|
||||
database=DATABASE_L, user=USERS_L, password=PASSW_L, host=DB_HOST_L, port=3306, autocommit=True
|
||||
)
|
||||
|
||||
|
||||
class ProductParameter(Model):
|
||||
id = AutoField(primary_key=True)
|
||||
parameter_name = CharField(max_length=50, unique=True) # Название параметра
|
||||
|
||||
class Meta:
|
||||
database = db
|
||||
table_name = "product_parameters"
|
||||
|
||||
|
||||
# Модель для хранения информации о категориях товаров
|
||||
class ProductCategory(Model):
|
||||
id = AutoField(primary_key=True)
|
||||
category_name = CharField(max_length=50) # Название категории
|
||||
id_1c_d = CharField(max_length=50, unique=True)
|
||||
is_active = BooleanField(default=1, null=True)
|
||||
|
||||
class Meta:
|
||||
database = db
|
||||
table_name = "product_categories"
|
||||
|
||||
|
||||
# Модель для хранения информации о товарах
|
||||
class Product(Model):
|
||||
id = AutoField(primary_key=True)
|
||||
id_1c = CharField(max_length=50, unique=True) # ID из 1C
|
||||
vendor_code = CharField(max_length=50, null=True)
|
||||
product_name = CharField(max_length=255, null=True) # Название товара
|
||||
description = TextField(null=True) # Описание товара
|
||||
price_rrc = FloatField(null=True) # Цена 1
|
||||
price_drop = FloatField(null=True) # Цена 2
|
||||
price_opt = FloatField(null=True) # Цена 3
|
||||
price_large_opt = FloatField(null=True) # Цена 4
|
||||
price_drop_pro = FloatField(null=True) # Цена 5
|
||||
price_os_kripto_to = FloatField(null=True) # Цена 6
|
||||
price_hot = FloatField(null=True) # Цена 6
|
||||
price_rozetka = FloatField(null=True)
|
||||
price_epicenter = FloatField(null=True)
|
||||
price_allo = FloatField(null=True)
|
||||
category = ForeignKeyField(ProductCategory, backref='products')
|
||||
os_lugi = CharField(max_length=50, null=True) # ID площадки 1
|
||||
prom_lugi = CharField(max_length=50, null=True) # ID площадки 2
|
||||
prom_hot = CharField(max_length=50, null=True) # ID площадки 3
|
||||
rozetka = CharField(max_length=50, null=True) # ID площадки 4
|
||||
crm_id = CharField(max_length=50, null=True) # ID площадки 5
|
||||
platform_6_id = CharField(max_length=50, null=True) # ID площадки 6
|
||||
photo_url = TextField(null=True) # Ссылка на фото
|
||||
url_to_shop = TextField(null=True)
|
||||
weight = FloatField(null=True) # Вес
|
||||
length = FloatField(null=True) # Длина
|
||||
width = FloatField(null=True) # Ширина
|
||||
height = FloatField(null=True) # Высота
|
||||
quantity = IntegerField(null=True) # Количество
|
||||
last_updated = DateTimeField(default=datetime.datetime.now)
|
||||
sort = IntegerField(default=55, null=True)
|
||||
|
||||
class Meta:
|
||||
database = db
|
||||
table_name = "products_lugi"
|
||||
|
||||
|
||||
# Модель для хранения значений параметров товаров
|
||||
class ProductParameterValue(Model):
|
||||
id = AutoField(primary_key=True)
|
||||
product = ForeignKeyField(Product, backref='product_parameter_values')
|
||||
parameter = ForeignKeyField(ProductParameter, backref='parameter_values')
|
||||
value = CharField() # Значение параметра
|
||||
|
||||
class Meta:
|
||||
database = db
|
||||
table_name = "product_parameter_values"
|
||||
|
||||
|
||||
# Модель для хранения информации об акциях
|
||||
class ProductPromotion(Model):
|
||||
id = AutoField(primary_key=True)
|
||||
product_id = ForeignKeyField(Product, backref='product_promotions')
|
||||
discount_rrc = IntegerField(null=True) # Скидка в процентах
|
||||
discount_drop = IntegerField(null=True)
|
||||
discount_drop_pro = IntegerField(null=True)
|
||||
discount_opt = IntegerField(null=True)
|
||||
discount_large_opt = IntegerField(null=True)
|
||||
discount_hot = IntegerField(null=True)
|
||||
discount_prom = IntegerField(null=True)
|
||||
start_date = DateTimeField(null=True) # Дата начала акции
|
||||
end_date = DateTimeField(null=True) # Дата окончания акции
|
||||
last_updated = DateTimeField(default=datetime.datetime.now)
|
||||
|
||||
class Meta:
|
||||
database = db
|
||||
table_name = "product_promotion"
|
||||
|
||||
|
||||
# Создание таблиц в базе данных
|
||||
if __name__ == "__main__":
|
||||
with db:
|
||||
db.create_tables([Product, ProductParameter, ProductParameterValue, ProductPromotion, ProductCategory])
|
Binary file not shown.
Loading…
Reference in New Issue