mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
91 lines
3.5 KiB
Python
91 lines
3.5 KiB
Python
import enum
|
|
|
|
from sqlalchemy import Column, Integer, String, Float, Enum, TIMESTAMP, Boolean
|
|
from sqlalchemy.orm import declarative_base
|
|
from sqlalchemy.sql import func
|
|
|
|
Base = declarative_base()
|
|
|
|
|
|
class MaterialType(enum.Enum):
|
|
suspended_floor_insulation = "suspended_floor_insulation"
|
|
solid_floor_insulation = "solid_floor_insulation"
|
|
external_wall_insulation = "external_wall_insulation"
|
|
internal_wall_insulation = "internal_wall_insulation"
|
|
cavity_wall_insulation = "cavity_wall_insulation"
|
|
mechanical_ventilation = "mechanical_ventilation"
|
|
loft_insulation = "loft_insulation"
|
|
exposed_floor_insulation = "exposed_floor_insulation"
|
|
flat_roof_insulation = "flat_roof_insulation"
|
|
room_roof_insulation = "room_roof_insulation"
|
|
windows_glazing = "windows_glazing"
|
|
|
|
iwi_wall_demolition = "iwi_wall_demolition"
|
|
iwi_vapour_barrier = "iwi_vapour_barrier"
|
|
iwi_redecoration = "iwi_redecoration"
|
|
suspended_floor_demolition = "suspended_floor_demolition"
|
|
suspended_floor_redecoration = "suspended_floor_redecoration"
|
|
suspended_floor_vapour_barrier = "suspended_floor_vapour_barrier"
|
|
solid_floor_demolition = "solid_floor_demolition"
|
|
solid_floor_preparation = "solid_floor_preparation"
|
|
solid_floor_vapour_barrier = "solid_floor_vapour_barrier"
|
|
solid_floor_redecoration = "solid_floor_redecoration"
|
|
ewi_wall_demolition = "ewi_wall_demolition"
|
|
ewi_wall_preparation = "ewi_wall_preparation"
|
|
ewi_wall_redecoration = "ewi_wall_redecoration"
|
|
low_energy_lighting_installation = "low_energy_lighting_installation"
|
|
flat_roof_preparation = "flat_roof_preparation"
|
|
flat_roof_vapour_barrier = "flat_roof_vapour_barrier"
|
|
flat_roof_waterproofing = "flat_roof_waterproofing"
|
|
|
|
|
|
class DepthUnit(enum.Enum):
|
|
mm = "mm"
|
|
|
|
|
|
class CostUnit(enum.Enum):
|
|
gbp_sq_meter = "gbp_sq_meter"
|
|
gbp_per_unit = "gbp_per_unit"
|
|
gbp_per_m2 = "gbp_per_m2"
|
|
gbp_per_m = "gbp_per_m"
|
|
|
|
|
|
class RValueUnit(enum.Enum):
|
|
square_meter_kelvin_per_watt = "square_meter_kelvin_per_watt"
|
|
|
|
|
|
class ThermalConductivityUnit(enum.Enum):
|
|
watt_per_meter_kelvin = "watt_per_meter_kelvin"
|
|
|
|
|
|
class Material(Base):
|
|
__tablename__ = 'material'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
type = Column(Enum(MaterialType, values_callable=lambda x: [e.value for e in x], create_constraint=False),
|
|
nullable=False)
|
|
|
|
description = Column(String, nullable=False)
|
|
depth = Column(String) # You may want to use a specific JSON type depending on the database
|
|
depth_unit = Column(Enum(DepthUnit, values_callable=lambda x: [e.value for e in x]), nullable=False)
|
|
cost = Column(String)
|
|
cost_unit = Column(Enum(CostUnit, values_callable=lambda x: [e.value for e in x]), nullable=False)
|
|
r_value_per_mm = Column(Float)
|
|
r_value_unit = Column(Enum(RValueUnit, values_callable=lambda x: [e.value for e in x]), nullable=False)
|
|
thermal_conductivity = Column(Float)
|
|
thermal_conductivity_unit = Column(
|
|
Enum(ThermalConductivityUnit, values_callable=lambda x: [e.value for e in x]),
|
|
nullable=False
|
|
)
|
|
link = Column(String)
|
|
created_at = Column(TIMESTAMP, nullable=False, server_default=func.now())
|
|
is_active = Column(Boolean, nullable=False, default=True)
|
|
|
|
prime_material_cost = Column(Float)
|
|
material_cost = Column(Float)
|
|
labour_cost = Column(Float)
|
|
labour_hours_per_unit = Column(Float)
|
|
plant_cost = Column(Float)
|
|
total_cost = Column(Float)
|
|
notes = Column(String)
|
|
is_installer_quote = Column(Boolean, nullable=False, default=False)
|