289 lines
12 KiB
Python
289 lines
12 KiB
Python
import datetime
|
|
|
|
from sqlalchemy import Column, String, Integer, Float, Date, DateTime, Boolean, ForeignKey, JSON
|
|
from sqlalchemy.orm import relationship, DeclarativeBase, Mapped, mapped_column
|
|
from sqlalchemy.sql import func
|
|
|
|
|
|
class Base(DeclarativeBase):
|
|
pass
|
|
|
|
class TrayWebhook(Base):
|
|
__tablename__ = 'tray_webhook'
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
#create_date: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
|
|
body = Column(String(255))
|
|
|
|
|
|
def __init__(self, body):
|
|
self.body = body
|
|
|
|
|
|
|
|
class ApiToken(Base):
|
|
__tablename__ = 'api_token'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
message = Column(String(255))
|
|
code = Column(Integer)
|
|
access_token = Column(String(255))
|
|
refresh_token = Column(String(255))
|
|
date_expiration_access_token = Column(DateTime)
|
|
date_expiration_refresh_token = Column(DateTime)
|
|
date_activated = Column(DateTime)
|
|
api_host = Column(String(255))
|
|
store_id = Column(String(255))
|
|
|
|
def __init__(self, message, code, access_token, refresh_token, date_expiration_access_token,
|
|
date_expiration_refresh_token, date_activated, api_host, store_id):
|
|
self.message = message
|
|
self.code = code
|
|
self.access_token = access_token
|
|
self.refresh_token = refresh_token
|
|
self.date_expiration_access_token = datetime.datetime.strptime(date_expiration_access_token,
|
|
"%Y-%m-%d %H:%M:%S")
|
|
self.date_expiration_refresh_token = datetime.datetime.strptime(date_expiration_refresh_token,
|
|
"%Y-%m-%d %H:%M:%S")
|
|
self.date_activated = datetime.datetime.strptime(date_activated, "%Y-%m-%d %H:%M:%S")
|
|
self.api_host = api_host
|
|
self.store_id = store_id
|
|
|
|
|
|
class Order(Base):
|
|
__tablename__ = 'order'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
status: Mapped[str] = mapped_column(String(255))
|
|
date: Mapped[datetime] = mapped_column(Date)
|
|
customer_id: Mapped[int] = mapped_column(Integer)
|
|
partial_total: Mapped[float] = mapped_column(Float)
|
|
taxes: Mapped[float] = mapped_column(Float)
|
|
discount: Mapped[float] = mapped_column(Float)
|
|
point_sale: Mapped[str] = mapped_column(String(100))
|
|
shipment: Mapped[str] = mapped_column(String)
|
|
shipment_value: Mapped[float] = mapped_column(Float)
|
|
shipment_date: Mapped[datetime] = mapped_column(Date, nullable=True)
|
|
store_note: Mapped[str] = mapped_column(String)
|
|
discount_coupon: Mapped[str] = mapped_column(String(255))
|
|
payment_method_rate: Mapped[float] = mapped_column(Float)
|
|
value_1: Mapped[float] = mapped_column(Float)
|
|
payment_form: Mapped[str] = mapped_column(String(255))
|
|
sending_code: Mapped[str] = mapped_column(String(255))
|
|
session_id: Mapped[str] = mapped_column(String(255))
|
|
total: Mapped[float] = mapped_column(Float)
|
|
payment_date: Mapped[datetime] = mapped_column(Date, nullable=True)
|
|
access_code: Mapped[str] = mapped_column(String(255), nullable=True)
|
|
progressive_discount: Mapped[float] = mapped_column(Float, nullable=True)
|
|
shipping_progressive_discount: Mapped[float] = mapped_column(Float, nullable=True)
|
|
shipment_integrator: Mapped[str] = mapped_column(String(255))
|
|
modified: Mapped[datetime] = mapped_column(DateTime)
|
|
printed: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
interest: Mapped[float] = mapped_column(Float)
|
|
cart_additional_values_discount: Mapped[float] = mapped_column(Float)
|
|
cart_additional_values_increase: Mapped[float] = mapped_column(Float)
|
|
id_quotation: Mapped[str] = mapped_column(String(255))
|
|
estimated_delivery_date: Mapped[datetime] = mapped_column(Date, nullable=True)
|
|
external_code: Mapped[str] = mapped_column(String(255))
|
|
tracking_url: Mapped[str] = mapped_column(String(255))
|
|
has_payment: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
has_shipment: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
has_invoice: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
total_comission_user: Mapped[float] = mapped_column(Float)
|
|
total_comission: Mapped[float] = mapped_column(Float)
|
|
is_traceable: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
|
|
|
|
order_status_id: Mapped[int] = mapped_column(Integer, ForeignKey("order_status.id"), nullable=True)
|
|
order_status: Mapped["OrderStatus"] = relationship("OrderStatus", foreign_keys=[order_status_id])
|
|
|
|
|
|
# products_sold = relationship('ProductsSold', backref='order')
|
|
# payment = relationship('Payment', backref='order')
|
|
|
|
|
|
class OrderStatus(Base):
|
|
__tablename__ = 'order_status'
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
default: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
type: Mapped[str] = mapped_column(String(255))
|
|
show_backoffice: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
allow_edit_order: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
description: Mapped[str] = mapped_column(String)
|
|
status: Mapped[str] = mapped_column(String(255))
|
|
show_status_central: Mapped[str] = mapped_column(String(255), default="")
|
|
background: Mapped[str] = mapped_column(String(7))
|
|
display_name: Mapped[str] = mapped_column(String(255), nullable=True)
|
|
font_color: Mapped[str] = mapped_column(String(7), nullable=True)
|
|
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
|
|
|
|
|
|
|
|
class Product(Base):
|
|
__tablename__ = 'product'
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
modified: Mapped[datetime] = mapped_column(DateTime)
|
|
ean: Mapped[str] = mapped_column(String)
|
|
is_kit: Mapped[bool] = mapped_column(Boolean)
|
|
slug: Mapped[str] = mapped_column(String)
|
|
ncm: Mapped[str] = mapped_column(String)
|
|
activation_date: Mapped[datetime] = mapped_column(DateTime, nullable=True)
|
|
deactivation_date: Mapped[datetime] = mapped_column(DateTime, nullable=True)
|
|
name: Mapped[str] = mapped_column(String)
|
|
price: Mapped[float] = mapped_column(Float)
|
|
cost_price: Mapped[float] = mapped_column(Float)
|
|
dollar_cost_price: Mapped[float] = mapped_column(Float)
|
|
promotional_price: Mapped[float] = mapped_column(Float)
|
|
start_promotion: Mapped[datetime] = mapped_column(DateTime, nullable=True)
|
|
end_promotion: Mapped[datetime] = mapped_column(DateTime, nullable=True)
|
|
brand: Mapped[str] = mapped_column(String)
|
|
brand_id: Mapped[str] = mapped_column(String)
|
|
model: Mapped[str] = mapped_column(String)
|
|
weight: Mapped[float] = mapped_column(Float)
|
|
length: Mapped[float] = mapped_column(Float)
|
|
width: Mapped[float] = mapped_column(Float)
|
|
height: Mapped[float] = mapped_column(Float)
|
|
stock: Mapped[int] = mapped_column(Integer)
|
|
category_id: Mapped[int] = mapped_column(Integer)
|
|
available: Mapped[bool] = mapped_column(Boolean)
|
|
availability: Mapped[str] = mapped_column(String)
|
|
reference: Mapped[str] = mapped_column(String)
|
|
hot: Mapped[bool] = mapped_column(Boolean)
|
|
release: Mapped[bool] = mapped_column(Boolean)
|
|
additional_button: Mapped[bool] = mapped_column(Boolean)
|
|
has_variation: Mapped[bool] = mapped_column(Boolean)
|
|
rating: Mapped[float] = mapped_column(Float)
|
|
count_rating: Mapped[int] = mapped_column(Integer)
|
|
quantity_sold: Mapped[int] = mapped_column(Integer)
|
|
url = Column(JSON)
|
|
created: Mapped[datetime] = mapped_column(DateTime)
|
|
payment_option: Mapped[str] = mapped_column(String)
|
|
payment_option_details = Column(JSON) # TODO: update to relation
|
|
related_categories = Column(JSON) # TODO: update to relation
|
|
release_date: Mapped[datetime] = mapped_column(DateTime, nullable=True)
|
|
shortcut: Mapped[str] = mapped_column(String)
|
|
virtual_product: Mapped[str] = mapped_column(String)
|
|
minimum_stock: Mapped[int] = mapped_column(Integer)
|
|
minimum_stock_alert: Mapped[bool] = mapped_column(Boolean)
|
|
free_shipping: Mapped[bool] = mapped_column(Boolean)
|
|
video: Mapped[str] = mapped_column(String)
|
|
metatag = Column(JSON) # Assuming this might be a list, hence JSON
|
|
payment_option_html: Mapped[str] = mapped_column(String)
|
|
upon_request: Mapped[bool] = mapped_column(Boolean)
|
|
available_for_purchase: Mapped[bool] = mapped_column(Boolean)
|
|
all_categories: Mapped[str] = mapped_column(String(), nullable=True)
|
|
product_image = Column(JSON) # Assuming this might be a list, hence JSON
|
|
variant = Column(JSON) # TODO: update to relation
|
|
additional_infos = Column(JSON) # Assuming this might be a list, hence JSON
|
|
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
|
|
|
|
|
|
|
|
class Category(Base):
|
|
__tablename__ = 'category'
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
parent_id: Mapped[int] = mapped_column(Integer, ForeignKey('category.id'), nullable=True)
|
|
name: Mapped[str] = mapped_column(String)
|
|
small_description: Mapped[str] = mapped_column(String)
|
|
images: Mapped[str] = mapped_column(JSON)
|
|
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
|
|
|
|
class ProductsSold(Base):
|
|
__tablename__ = 'products_sold'
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
product_id: Mapped[int] = mapped_column(Integer, nullable=False)
|
|
order_id: Mapped[int] = mapped_column(Integer, ForeignKey('order.id'), nullable=False)
|
|
name: Mapped[str] = mapped_column(String)
|
|
price: Mapped[float] = mapped_column(Float)
|
|
original_price: Mapped[float] = mapped_column(Float)
|
|
quantity: Mapped[int] = mapped_column(Integer)
|
|
model: Mapped[str] = mapped_column(String)
|
|
reference: Mapped[str] = mapped_column(String)
|
|
variant_id: Mapped[int] = mapped_column(Integer)
|
|
additional_information: Mapped[str] = mapped_column(String)
|
|
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
|
|
|
|
|
|
class OrderProductsSold(Base):
|
|
__tablename__ = 'order_products_sold'
|
|
|
|
order_id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
products_sold_id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
audit_create_ts: Mapped[datetime] = mapped_column(DateTime, onupdate=func.now(), server_default=func.now())
|
|
|
|
|
|
#
|
|
#
|
|
# class PropertyValue(Base):
|
|
# __tablename__ = 'property_value'
|
|
#
|
|
# id = Column(Integer, primary_key=True)
|
|
# name = Column(String)
|
|
# property_id = Column(Integer, ForeignKey('property.id'))
|
|
# image = Column(JSON) # Assuming image has both HTTP and HTTPS links
|
|
#
|
|
# # Relationship to Property
|
|
# property = relationship("Property", backref=backref("PropertyValue", cascade="all, delete-orphan"))
|
|
#
|
|
#
|
|
# class Property(Base):
|
|
# __tablename__ = 'property'
|
|
#
|
|
# id = Column(Integer, primary_key=True)
|
|
# active_display = Column(Boolean)
|
|
# name = Column(String)
|
|
# position = Column(Integer)
|
|
# display = Column(Boolean)
|
|
# has_product = Column(Boolean)
|
|
#
|
|
# # Relationship to PropertyValues
|
|
# PropertyValue = relationship("PropertyValue", backref="property")
|
|
#
|
|
#
|
|
|
|
#
|
|
#
|
|
|
|
#
|
|
#
|
|
# class Variant(Base):
|
|
# __tablename__ = 'variant'
|
|
#
|
|
# id = Column(Integer, primary_key=True)
|
|
# ean = Column(String)
|
|
# order = Column(Integer)
|
|
# product_id = Column(Integer, nullable=False)
|
|
# price = Column(Float)
|
|
# cost_price = Column(Float)
|
|
# stock = Column(Integer)
|
|
# minimum_stock = Column(Integer)
|
|
# reference = Column(String)
|
|
# weight = Column(Float)
|
|
# length = Column(Float)
|
|
# width = Column(Float)
|
|
# height = Column(Float)
|
|
# start_promotion = Column(DateTime)
|
|
# end_promotion = Column(DateTime)
|
|
# promotional_price = Column(Float)
|
|
# payment_option = Column(String)
|
|
# payment_option_details = Column(JSON) # JSON to store payment_option_details
|
|
# available = Column(Boolean)
|
|
# illustrative_image = Column(JSON) # JSON to store illustrative image URLs
|
|
# quantity_sold = Column(Integer)
|
|
# color_id_1 = Column(Integer)
|
|
# color_id_2 = Column(Integer)
|
|
# cubic_weight = Column(Float)
|
|
#
|
|
# # Relationships
|
|
# skus = relationship('Sku', backref='variant', cascade='all, delete-orphan')
|
|
# variant_images = relationship('VariantImage', backref='variant', cascade='all, delete-orphan')
|
|
#
|
|
# class Payment(Base):
|
|
# __tablename__ = 'payment'
|
|
#
|
|
# id = Column(Integer, primary_key=True)
|
|
# order_id = Column(Integer, ForeignKey('order.id'))
|