feat:get sub for monitor physical secondry

This commit is contained in:
shahzeydyfah
2024-06-23 00:26:31 +03:30
parent b8d228020b
commit a104b8efcf
4 changed files with 97 additions and 14 deletions
+1
View File
@@ -10,6 +10,7 @@ class TaskEnv:
CLN_MONITOR_PYSICAL = 'monitor_physical'
CLN_MONITOR_RIAL = 'monitor_rial'
CLN_MONITOR_SECONDARY = 'monitor_secondary'
CLN_MONITOR_SUB_SECONDARY = 'monitor_sub_secondary'
CLN_FINANCIAL_PRE_PAYMENT = 'financial_pre_payment'
CLN_FINANCIAL_STATUS = 'financial_status'
CLN_FINANCIAL_ADJUST = 'financial_adjust'
@@ -2,6 +2,7 @@ import uuid
from datetime import datetime
from typing import Optional, Literal
import pydantic
from pydantic import Field
from core.models.base import BaseModel
@@ -10,17 +11,28 @@ from core.models.base import BaseModel
class SecondaryProgressModel(BaseModel):
id: Optional[uuid.UUID] = Field(alias='_id')
project_id: Optional[uuid.UUID] = Field(description="کد شناسایی پروژه در این فیلد قرار می گیرد")
title:Optional[str] = Field(description='عنوان در این فیلد قرار میگیرد')
weight:Optional[int]=Field(description='وزن در این فیلد قرار می گیرد')
title: Optional[str] = Field(description='عنوان در این فیلد قرار میگیرد')
weight: Optional[int] = Field(description='وزن در این فیلد قرار می گیرد')
class SubSecondaryProgressModel(BaseModel):
id: Optional[uuid.UUID] = Field(alias='_id')
parent_id: Optional[uuid.UUID] = Field(description="کد شناسایی پیشرفت های فیزیکی فرعی در این فیلد قرار می گیرد")
program: Optional[int] = Field(description=" برنامه ای")
real: Optional[int] = Field(description=" واقعی")
deviation:Optional[int] = Field(description="انحراف از برنامه")
date_at:Optional[datetime] = Field(description="تاریخ گزارش پیشرفت")
last_month:Optional[int] = Field(description='واقعی ماه اخیر')
collection:Optional[Literal['all','work','various','secondary_building','block']] = Field(description="""
deviation: Optional[int] = Field(description="انحراف از برنامه")
date_at: Optional[datetime] = Field(description="تاریخ گزارش پیشرفت")
last_month: Optional[int] = Field(description='واقعی ماه اخیر')
collection: Optional[Literal['all', 'work', 'various', 'secondary_building', 'block']] = Field(description="""
all: کلی
work: پیشرفت جبهه های کاری
various: پیشرفت رشته های مختلف
secondary_building: پیشرفت ساختمان های جنبی
block: پیشرفت بلوک ها
""")
class LastRecord(pydantic.BaseModel):
parent_id:Optional[uuid.UUID] = Field(description="کد شناسایی پدر در این فیلد قرار می گیرد")
date_at:Optional[datetime] = Field(description='تاریخ وارد شده')
@@ -1,7 +1,9 @@
import datetime
import uuid
from app.config import TaskEnv
from app.models.monitor_physical_secondary_progress import SecondaryProgressModel
from app.models.monitor_physical_secondary_progress import SecondaryProgressModel, SubSecondaryProgressModel, LastRecord
from app.repositories.monitor_physical_progress import PhysicalProgressRepository
from core.repositories.base import BaseRepository
from core.service.mongo_db import use_collection
@@ -9,8 +11,40 @@ class SecondaryProgressRepository(BaseRepository):
def __init__(self):
super().__init__(collection=TaskEnv.CLN_MONITOR_SECONDARY, model=SecondaryProgressModel)
async def last_record(self,project_id:uuid.UUID):
last = await use_collection(TaskEnv.CLN_MONITOR_SECONDARY).find({'project_id':project_id}).sort("$natural", -1).to_list(None)
async def get_list(self,project_id:uuid.UUID):
get_list = await use_collection(TaskEnv.CLN_MONITOR_SECONDARY).find({'project_id':project_id}).to_list(None)
ids = [i["_id"] for i in get_list]
get_subs = await use_collection(TaskEnv.CLN_MONITOR_SUB_SECONDARY).aggregate([
{"$match":{'parent_id':{"$in":ids}}},
{"$group":{"_id":"$parent_id",'subs': {"$push": "$$ROOT"}}}
]).to_list(None)
for i in get_list:
for j in get_subs:
if i["_id"] == j["_id"]:
i['subs'] = j["subs"]
return get_list
class SubSecondaryProgressRepository(BaseRepository):
def __init__(self):
super().__init__(collection=TaskEnv.CLN_MONITOR_SUB_SECONDARY, model=SubSecondaryProgressModel)
async def get_list_by_parent_id(self,parent_id:uuid.UUID):
get_subs = await use_collection(TaskEnv.CLN_MONITOR_SUB_SECONDARY).find({"parent_id":parent_id}).to_list(None)
return get_subs
async def last_record(self, _inp: LastRecord):
m_first = _inp.date_at - datetime.timedelta(days=35)
print(m_first)
m_end = _inp.date_at - datetime.timedelta(days=25)
print(m_end)
last = await use_collection(TaskEnv.CLN_MONITOR_SUB_SECONDARY).find({
'parent_id': _inp.parent_id,
'date_at': {'$gte': m_first, '$lte': m_end}
}).sort("$natural", -1).to_list(None)
if last:
return last[0]
else:
+41 -5
View File
@@ -2,26 +2,62 @@ from uuid import UUID
from fastapi import Body
from app.models.monitor_physical_secondary_progress import SecondaryProgressModel
from app.repositories.monitor_physical_secondary_progress import SecondaryProgressRepository
from app.models.monitor_physical_secondary_progress import SecondaryProgressModel, SubSecondaryProgressModel, LastRecord
from app.repositories.monitor_physical_secondary_progress import SecondaryProgressRepository, \
SubSecondaryProgressRepository
from core.app import app
from core.utils.router import generate_router, shrink
from core.utils.table_engine import TableEngineExport, TableEngineRequestType
ThisModel = SecondaryProgressModel
ThisSubModel = SubSecondaryProgressModel
router_base_url = 'monitor-secondary'
_tag_base = [router_base_url]
router = generate_router(router_base_url, auth_dependencies=False, version='v2')
repo = SecondaryProgressRepository()
repo_sub = SubSecondaryProgressRepository()
@router.post('/sub/create', response_model=ThisSubModel, tags=_tag_base, description='ایجاد زیر مجموعه پیشرفت فیزیکی فرعی')
@shrink(repo_sub.create)
def create_sub(coding: ThisSubModel = Body(...)):
pass
@router.get('/sub/list/{parent_id}', response_model=list[ThisSubModel], tags=_tag_base, description='گرفتن زیر مجموعه پیشرفت فیزیکی فرعی')
@shrink(repo_sub.get_list_by_parent_id)
def get_list_by_parent_id(parent_id: UUID):
pass
@router.post('/sub/last', response_model=ThisSubModel, tags=_tag_base, description='گرفتن زیر مجموعه پیشرفت فیزیکی فرعی')
@shrink(repo_sub.last_record)
def last_record(last:LastRecord):
pass
@router.put('/sub/{_id}', response_model=ThisSubModel, tags=_tag_base, description='ویرایش زیر مجموعه پیشرفت فیزیکی فرعی')
@shrink(repo_sub.update)
def update_sub(_id: UUID, coding: ThisSubModel = Body(...)):
pass
@router.get('/sub/{_id}', response_model=ThisSubModel, tags=_tag_base, description='گرفتن زیر مجموعه پیشرفت فیزیکی فرعی')
@shrink(repo_sub.get)
def get_sub(_id: UUID):
pass
@router.delete('/sub/{_id}', response_model=ThisSubModel, tags=_tag_base)
@shrink(repo_sub.delete)
def delete_sub(_id: UUID):
pass
@router.post('/sub', response_model=TableEngineExport[ThisSubModel], tags=_tag_base, description='زیر مجموعه پیشرفت فیزیکی فرعی')
@shrink(repo_sub.fetch)
def fetch_sub(body: TableEngineRequestType = Body(...)):
pass
@router.post('/create', response_model=ThisModel, tags=_tag_base, description='پیشرفت فیزیکی فرعی')
@shrink(repo.create)
def create(coding: ThisModel = Body(...)):
pass
@router.post('/last/{project_id}', response_model=ThisModel, tags=_tag_base, description='پیشرفت فیزیکی فرعی')
@shrink(repo.last_record)
def last_record(project_id:UUID):
@router.get('/list/{_id}', response_model=ThisModel, tags=_tag_base, description='پیشرفت فیزیکی فرعی')
@shrink(repo.get_list)
def get_list(_id: UUID):
pass
@router.put('/{_id}', response_model=ThisModel, tags=_tag_base, description='پیشرفت فیزیکی فرعی')