From 6028dced5233461198f9cadeafc8cd911f8fd7ea Mon Sep 17 00:00:00 2001 From: shahzeydyfah Date: Fri, 11 Oct 2024 13:14:03 +0330 Subject: [PATCH] feat:add sum to delay --- app/models/bill_delay.py | 52 +++++++++++++++++++--------------- app/repositories/bill_delay.py | 48 +++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 23 deletions(-) diff --git a/app/models/bill_delay.py b/app/models/bill_delay.py index 0cb9824..dd59067 100644 --- a/app/models/bill_delay.py +++ b/app/models/bill_delay.py @@ -7,36 +7,42 @@ from pydantic import Field from core.models.base import BaseModel + class Financial(pydantic.BaseModel): - status:Optional[int] = Field(description="صورت وضعیت") - prepayment:Optional[int] = Field(description=" پیش پرداخت") - modification:Optional[int] = Field(description="تعدیل") - good_job:Optional[int] = Field(description="حسن انجام کار") + status: Optional[int] = Field(description="صورت وضعیت") + prepayment: Optional[int] = Field(description=" پیش پرداخت") + modification: Optional[int] = Field(description="تعدیل") + good_job: Optional[int] = Field(description="حسن انجام کار") + total: Optional[int] = Field(default=0, description='مجموع') + class ForceMajor(pydantic.BaseModel): - force_event:Optional[int] = Field(description="حوادث قهری") - material:Optional[int] = Field(description="محدودیت ورود مصالح") - rules:Optional[int] = Field(description="وضع قوانین جدید") - define_indicators:Optional[int] = Field(description="تاخیرات در اعالم شاخص های قطعی") + force_event: Optional[int] = Field(description="حوادث قهری") + material: Optional[int] = Field(description="محدودیت ورود مصالح") + rules: Optional[int] = Field(description="وضع قوانین جدید") + define_indicators: Optional[int] = Field(description="تاخیرات در اعالم شاخص های قطعی") + total: Optional[int] = Field(default=0, description='مجموع') + class Technical(pydantic.BaseModel): - map_technical:Optional[int] = Field(description="تغییر نقشه و مشخصات فنی") - permit:Optional[int] = Field(description="تاخیرات در تحویل کارگاه معارض زمین یا اخذ پروانه") - purchase:Optional[int] = Field(description="تاخیر در خرید کارفرمایی") - suspense:Optional[int] = Field(description="تعلیق پیمان ماده 49") + map_technical: Optional[int] = Field(description="تغییر نقشه و مشخصات فنی") + permit: Optional[int] = Field(description="تاخیرات در تحویل کارگاه معارض زمین یا اخذ پروانه") + purchase: Optional[int] = Field(description="تاخیر در خرید کارفرمایی") + suspense: Optional[int] = Field(description="تعلیق پیمان ماده 49") + total: Optional[int] = Field(default=0, description='مجموع') + class BillDelayModel(BaseModel): id: Optional[uuid.UUID] = Field(alias='_id') project_id: uuid.UUID = Field(description='کد شناسایی پروژ') - financial:Optional[Financial] = Field(description='مسائل مالی') - force_major:Optional[ForceMajor] = Field(description='فورس ماژور') - technical:Optional[Technical] = Field(description='فنی و قراردادی') - extra_new_work:Optional[int] = Field(description='کارهای اضافی جدید') - other:Optional[int] = Field(description='سایر') - illegal:Optional[int] = Field(description='غیر مجاز') - date_present_bill : Optional[datetime] = Field(description='تاریخ ارائه لایحه') - date_consider_bill : Optional[datetime] = Field(description='تاریخ رسیدگی لایحه') - date_submission_bill : Optional[datetime] = Field(description='تاریخ ابلاغ لایحه') + financial: Optional[Financial] = Field(description='مسائل مالی') + force_major: Optional[ForceMajor] = Field(description='فورس ماژور') + technical: Optional[Technical] = Field(description='فنی و قراردادی') + extra_new_work: Optional[int] = Field(description='کارهای اضافی جدید') + other: Optional[int] = Field(description='سایر') + illegal: Optional[int] = Field(description='غیر مجاز') + date_present_bill: Optional[datetime] = Field(description='تاریخ ارائه لایحه') + date_consider_bill: Optional[datetime] = Field(description='تاریخ رسیدگی لایحه') + date_submission_bill: Optional[datetime] = Field(description='تاریخ ابلاغ لایحه') description: Optional[str] = Field(description='توضیحات') - end_at : Optional[datetime] = Field(description='تاریخ خاتمه پیمان') - + end_at: Optional[datetime] = Field(description='تاریخ خاتمه پیمان') diff --git a/app/repositories/bill_delay.py b/app/repositories/bill_delay.py index 30f71e5..437c43f 100644 --- a/app/repositories/bill_delay.py +++ b/app/repositories/bill_delay.py @@ -1,3 +1,5 @@ +from uuid import UUID + from app.config import TaskEnv from app.models.bill_delay import BillDelayModel from core.repositories.base import BaseRepository @@ -6,3 +8,49 @@ from core.repositories.base import BaseRepository class BillDelayRepository(BaseRepository): def __init__(self): super().__init__(collection=TaskEnv.CLN_BILL_DELAY, model=BillDelayModel) + + def create_sum(self, coding: BillDelayModel) -> BillDelayModel: + if coding.financial: + total = 0 + if coding.financial.status: + total += coding.financial.status + if coding.financial.prepayment: + total += coding.financial.prepayment + if coding.financial.modification: + total += coding.financial.modification + if coding.financial.good_job: + total += coding.financial.good_job + coding.financial.total = total + if coding.force_major: + total = 0 + if coding.force_major.force_event: + total += coding.force_major.force_event + if coding.force_major.material: + total += coding.force_major.material + if coding.force_major.rules: + total += coding.force_major.rules + if coding.force_major.define_indicators: + total += coding.force_major.define_indicators + coding.force_major.total = total + + if coding.technical: + total = 0 + if coding.technical.map_technical: + total += coding.technical.map_technical + if coding.technical.permit: + total += coding.technical.permit + if coding.technical.purchase: + total += coding.technical.purchase + if coding.technical.suspense: + total += coding.technical.suspense + coding.technical.total = total + return coding + async def create(self, coding: BillDelayModel): + coding = self.create_sum(coding) + return await super().create(coding) + async def update(self, _id: UUID, update: BillDelayModel): + update = self.create_sum(update) + return await super().update(_id, update) + + +