99 lines
3.5 KiB
Python
99 lines
3.5 KiB
Python
"""
|
|
Project: PARTS Website
|
|
Author: Edward Middleton-Smith
|
|
Precision And Research Technology Systems Limited
|
|
|
|
Technology: Business Objects
|
|
Feature: Product Delivery Option Business Object
|
|
|
|
Description:
|
|
Business object for delivery option
|
|
"""
|
|
|
|
# internal
|
|
from extensions import db
|
|
|
|
|
|
# CLASSES
|
|
"""
|
|
class Delivery_Option():
|
|
name: str
|
|
delay_min: int # days
|
|
delay_max: int
|
|
quantity_min: float
|
|
quantity_max: float
|
|
regions: list # [Enum_Region]
|
|
cost: float
|
|
|
|
def __new__(cls, name, delay_min, delay_max, quantity_min, quantity_max, regions, cost):
|
|
_m = 'Delivery_Option.__new__'
|
|
v_arg_type = 'class attribute'
|
|
av.val_str(name, 'name', _m, v_arg_type = v_arg_type)
|
|
av.val_int(delay_min, 'delay_min', _m, 0, v_arg_type = v_arg_type)
|
|
av.val_int(delay_max, 'delay_max', _m, 0, v_arg_type = v_arg_type)
|
|
av.val_float(quantity_min, 'quantity_min', _m, 0, v_arg_type = v_arg_type)
|
|
av.val_float(quantity_max, 'quantity_max', _m, 0, v_arg_type = v_arg_type)
|
|
av.val_list_instances(regions, 'regions', _m, Enum_Region, v_arg_type = v_arg_type)
|
|
av.val_float(cost, 'cost', _m, 0, v_arg_type = v_arg_type)
|
|
return super(Delivery_Option, cls).__new__(cls)
|
|
|
|
def __init__(self, name, delay_min, delay_max, quantity_min, quantity_max, regions, cost):
|
|
self.name = name
|
|
self.delay_min = delay_min
|
|
self.delay_max = delay_max
|
|
self.quantity_min = quantity_min
|
|
self.quantity_max = quantity_max
|
|
self.regions = regions
|
|
self.cost = cost
|
|
"""
|
|
class Delivery_Option(db.Model):
|
|
id_option = db.Column(db.Integer, primary_key=True)
|
|
id_product = db.Column(db.Integer)
|
|
id_permutation = db.Column(db.Integer)
|
|
id_category = db.Column(db.Integer)
|
|
code = db.Column(db.String(50))
|
|
name = db.Column(db.String(100))
|
|
latency_min = db.Column(db.Integer)
|
|
latency_max = db.Column(db.Integer)
|
|
quantity_min = db.Column(db.Integer)
|
|
quantity_max = db.Column(db.Integer)
|
|
codes_region = db.Column(db.String(4000))
|
|
names_region = db.Column(db.String(4000))
|
|
price_GBP = db.Column(db.Float)
|
|
display_order = db.Column(db.Integer)
|
|
def __init__(self):
|
|
self.delivery_regions = []
|
|
def from_DB_get_many_product_catalogue(query_row):
|
|
option = Delivery_Option()
|
|
option.id_option = query_row[0]
|
|
option.id_product = query_row[1]
|
|
option.id_permutation = query_row[2]
|
|
option.id_category = query_row[3]
|
|
option.code = query_row[4]
|
|
option.name = query_row[5]
|
|
option.latency_min = query_row[6]
|
|
option.latency_max = query_row[7]
|
|
option.quantity_min = query_row[8]
|
|
option.quantity_max = query_row[9]
|
|
option.codes_region = query_row[10]
|
|
option.names_region = query_row[11]
|
|
option.price_GBP = query_row[12]
|
|
option.display_order = query_row[13]
|
|
return option
|
|
def __repr__(self):
|
|
return f'''
|
|
id: {self.id_option}
|
|
id_product: {self.id_product}
|
|
id_category: {self.id_category}
|
|
name: {self.name}
|
|
code: {self.code}
|
|
latency_min: {self.latency_min}
|
|
latency_max: {self.latency_max}
|
|
quantity_min: {self.quantity_min}
|
|
quantity_max: {self.quantity_max}
|
|
codes_region: {self.codes_region}
|
|
names_region: {self.names_region}
|
|
price_GBP: {self.price_GBP}
|
|
display_order: {self.display_order}
|
|
'''
|