Files
Comparison_Project/app/models/laying_client_model.py

75 lines
2.5 KiB
Python

from app import db
from datetime import datetime
from sqlalchemy import event
from app.utils.regex_utils import RegularExpression
class LayingClient(db.Model):
__tablename__ = "laying_client"
id = db.Column(db.Integer, primary_key=True)
# Basic Fields
Location = db.Column(db.String(500))
MH_NO = db.Column(db.String(100))
CC_length = db.Column(db.Float, default=0)
# Bedding Qty.
Outer_dia_of_MH_m = db.Column(db.Float, default=0)
Bedding_Length = db.Column(db.Float, default=0)
Width = db.Column(db.Float, default=0)
Depth = db.Column(db.Float, default=0)
Qty = db.Column(db.Float, default=0)
# PIPE LAYING Qty.
Pipe_Dia_mm = db.Column(db.Float, default=0)
ID_of_MH_m = db.Column(db.Float, default=0)
Laying_Length = db.Column(db.Float, default=0)
pipe_150_mm = db.Column(db.Float, default=0)
pipe_200_mm = db.Column(db.Float, default=0)
pipe_250_mm = db.Column(db.Float, default=0)
pipe_300_mm = db.Column(db.Float, default=0)
pipe_350_mm = db.Column(db.Float, default=0)
pipe_400_mm = db.Column(db.Float, default=0)
pipe_450_mm = db.Column(db.Float, default=0)
pipe_500_mm = db.Column(db.Float, default=0)
pipe_600_mm = db.Column(db.Float, default=0)
pipe_700_mm = db.Column(db.Float, default=0)
pipe_900_mm = db.Column(db.Float, default=0)
pipe_1200_mm = db.Column(db.Float, default=0)
Total = db.Column(db.Float, default=0)
Remarks = db.Column(db.String(500))
RA_Bill_No=db.Column(db.String(500))
created_at = db.Column(db.DateTime, default=datetime.today)
def __repr__(self):
return f"<LayingModel {self.Location}>"
def serialize(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
# def sum_laying_fields():
# return [
# "pipe_150_mm", "pipe_200_mm", "pipe_250_mm",
# "pipe_300_mm", "pipe_350_mm", "pipe_400_mm",
# "pipe_450_mm", "pipe_500_mm", "pipe_600_mm",
# "pipe_700_mm", "pipe_900_mm", "pipe_1200_mm"
# ]
# ===============================
# AUTO TOTAL USING REGEX
# ===============================
def calculate_laying_total(mapper, connection, target):
total = 0
for column in target.__table__.columns:
if RegularExpression.PIPE_MM_PATTERN.match(column.name):
total += getattr(target, column.name) or 0
target.Total = total
event.listen(LayingClient, "before_insert", calculate_laying_total)
event.listen(LayingClient, "before_update", calculate_laying_total)