58 lines
2.5 KiB
Python
58 lines
2.5 KiB
Python
from app import db
|
|
from datetime import datetime
|
|
from sqlalchemy import event
|
|
from app.utils.regex_utils import RegularExpression
|
|
from decimal import Decimal
|
|
|
|
class ManholeDomesticChamberClient(db.Model):
|
|
__tablename__ = "mh_dc_client"
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
# Basic Fields
|
|
RA_Bill_No = db.Column(db.String(500))
|
|
Location = db.Column(db.String(500))
|
|
MH_NO = db.Column(db.String(100))
|
|
MH_TOP_LEVEL = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
MH_IL_LEVEL = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
Depth_of_MH = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
|
|
# Excavation categories
|
|
d_0_to_1_5 = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
d_1_5_to_2_0 = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
d_2_0_to_2_5 = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
d_2_5_to_3_0 = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
d_3_0_to_3_5 = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
d_3_5_to_4_0 = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
d_4_0_to_4_5= db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
d_4_5_to_5_0 = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
d_5_0_to_5_5 = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
d_5_5_to_6_0 = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
d_6_0_to_6_5 = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
|
|
Domestic_Chambers = db.Column(db.Numeric(10, 2), default=Decimal("0.00"))
|
|
|
|
Total = db.Column(db.Numeric(12, 2), default=Decimal("0.00"))
|
|
Remarks = db.Column(db.String(500), default="Import File")
|
|
created_at = db.Column(db.DateTime,default=datetime.now,nullable=False)
|
|
|
|
def __repr__(self):
|
|
return f"<HanholeDomesticChamberConstruction {self.Location}>"
|
|
|
|
|
|
def serialize(self):
|
|
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
|
|
|
|
|
|
# AUTO TOTAL USING REGEX
|
|
def calculate_mh_dc_total(mapper, connection, target):
|
|
total = Decimal("0.00")
|
|
for column in target.__table__.columns:
|
|
if RegularExpression.D_RANGE_PATTERN.match(column.name):
|
|
value = getattr(target, column.name)
|
|
if value is not None:
|
|
total += Decimal(value)
|
|
target.Total = total.quantize(Decimal("0.01"))
|
|
|
|
event.listen(ManholeDomesticChamberClient, "before_insert", calculate_mh_dc_total)
|
|
event.listen(ManholeDomesticChamberClient, "before_update", calculate_mh_dc_total) |