From 6c32abc443c30eb89e14ae022a12a2311fec433e Mon Sep 17 00:00:00 2001 From: shahzeydyfah Date: Tue, 4 Jun 2024 17:29:56 +0330 Subject: [PATCH] feat:add monitor physical progress --- app/config/__init__.py | 3 ++ app/models/monito_physical_progress.py | 17 +++++++ app/repositories/monitor_physical_progress.py | 19 ++++++++ app/urls/__init__.py | 2 + app/urls/monitor_physical.py | 47 +++++++++++++++++++ 5 files changed, 88 insertions(+) create mode 100644 app/models/monito_physical_progress.py create mode 100644 app/repositories/monitor_physical_progress.py create mode 100644 app/urls/monitor_physical.py diff --git a/app/config/__init__.py b/app/config/__init__.py index 592fac9..9024255 100644 --- a/app/config/__init__.py +++ b/app/config/__init__.py @@ -6,4 +6,7 @@ class TaskEnv: CLN_AUDIT_PROGRAM = 'audit_program' CLN_BILL_DELAY = 'bill_delay' CLN_CONTRACT = 'contract' + CLN_BILL = 'bill' + CLN_MONITOR_PYSICAL = 'monitor_physical' + diff --git a/app/models/monito_physical_progress.py b/app/models/monito_physical_progress.py new file mode 100644 index 0000000..4d01581 --- /dev/null +++ b/app/models/monito_physical_progress.py @@ -0,0 +1,17 @@ +import datetime +import uuid +from typing import Optional + +from pydantic import Field + +from core.models.base import BaseModel + + +class PhysicalProgressModel(BaseModel): + id: Optional[uuid.UUID] = Field(alias='_id') + project_id:Optional[uuid.UUID] = Field(description="کد شناسایی پروژه در این فیلد قرار می گیرد") + program:Optional[int] = Field(description=" برنامه ای") + real:Optional[int] = Field(description=" واقعی") + medium_progress:Optional[int] = Field(description="متوسط پیشرفت فیزیکی ماهانه از ابتدا تا کنون") + deviation:Optional[int] = Field(description="انحراف از برنامه") + date_at:Optional[datetime.datetime] = Field(description="تاریخ گزارش پیشرفت") diff --git a/app/repositories/monitor_physical_progress.py b/app/repositories/monitor_physical_progress.py new file mode 100644 index 0000000..0b5fe3d --- /dev/null +++ b/app/repositories/monitor_physical_progress.py @@ -0,0 +1,19 @@ +import uuid + +from app.config import TaskEnv +from app.models.monito_physical_progress import PhysicalProgressModel +from core.repositories.base import BaseRepository +from core.service.mongo_db import use_collection + +COLLECTION = TaskEnv.CLN_MONITOR_PYSICAL +MODEL = PhysicalProgressModel +class PhysicalProgressRepository(BaseRepository): + def __init__(self): + super().__init__(collection=TaskEnv.CLN_MONITOR_PYSICAL, model=PhysicalProgressModel) + + async def last_record(self,project_id:uuid.UUID): + last = await use_collection(TaskEnv.CLN_MONITOR_PYSICAL).find({'project_id':project_id}).sort("$natural", -1).to_list(None) + if last: + return last[0] + else: + return {} \ No newline at end of file diff --git a/app/urls/__init__.py b/app/urls/__init__.py index 170e923..4f8279a 100644 --- a/app/urls/__init__.py +++ b/app/urls/__init__.py @@ -8,3 +8,5 @@ from .factor_audit import * from .program_audit import * from .bill_delay import * from .contract import * +# from .bill import * +from .monitor_physical import * \ No newline at end of file diff --git a/app/urls/monitor_physical.py b/app/urls/monitor_physical.py new file mode 100644 index 0000000..5f94849 --- /dev/null +++ b/app/urls/monitor_physical.py @@ -0,0 +1,47 @@ +from uuid import UUID + +from fastapi import Body + +from app.models.monito_physical_progress import PhysicalProgressModel +from app.repositories.monitor_physical_progress import PhysicalProgressRepository +from core.app import app +from core.utils.router import generate_router, shrink +from core.utils.table_engine import TableEngineExport, TableEngineRequestType + +ThisModel = PhysicalProgressModel +router_base_url = 'monitor-physical' +_tag_base = [router_base_url] +router = generate_router(router_base_url, auth_dependencies=False, version='v2') +repo = PhysicalProgressRepository() + +@router.post('/create', response_model=ThisModel, tags=_tag_base) +@shrink(repo.create) +def create(coding: ThisModel = Body(...)): + pass + +@router.post('/last/{project_id}', response_model=ThisModel, tags=_tag_base) +@shrink(repo.last_record) +def last_record(project_id:UUID): + pass + +@router.put('/{_id}', response_model=ThisModel, tags=_tag_base) +@shrink(repo.update) +def update(_id: UUID, coding: ThisModel = Body(...)): + pass + +@router.get('/{_id}', response_model=ThisModel, tags=_tag_base) +@shrink(repo.get) +def get(_id: UUID): + pass + +@router.delete('/{_id}', response_model=ThisModel, tags=_tag_base) +@shrink(repo.delete) +def delete(_id: UUID): + pass + +@router.post('', response_model=TableEngineExport[ThisModel], tags=_tag_base) +@shrink(repo.fetch) +def fetch(body: TableEngineRequestType = Body(...)): + pass + +app.include_router(router) \ No newline at end of file