diff --git a/app/repositories/bill_delay.py b/app/repositories/bill_delay.py index 65fb106..56d089e 100644 --- a/app/repositories/bill_delay.py +++ b/app/repositories/bill_delay.py @@ -67,8 +67,11 @@ class BillDelayRepository(BaseRepository): delay = await super().create(coding) project = await use_collection(TaskEnv.CLN_PROJECT).find_one({"_id": coding.project_id}) project_model = ProjectModel(**project) - date_delay = project_model.date_delay + datetime.timedelta(days=coding.total_day) - await use_collection(TaskEnv.CLN_PROJECT).update_one({"_id": coding.project_id}, {"$inc": {"all_delay_day":coding.total_day},"$set":{"date_delay":date_delay}}) + if 'date_delay' in project: + date_delay = project_model.date_delay + datetime.timedelta(days=coding.total_day) + await use_collection(TaskEnv.CLN_PROJECT).update_one({"_id": coding.project_id}, {"$inc": {"all_delay_day":coding.total_day},"$set":{"date_delay":date_delay}}) + else: + await use_collection(TaskEnv.CLN_PROJECT).update_one({"_id": coding.project_id}, {"$inc": {"all_delay_day":coding.total_day}}) return delay async def update(self, _id: UUID, update: BillDelayModel): old = await self.get(_id) diff --git a/app/repositories/project.py b/app/repositories/project.py index 4b06016..9a42f99 100644 --- a/app/repositories/project.py +++ b/app/repositories/project.py @@ -91,8 +91,8 @@ class ProjectRepository(BaseRepository[ProjectModel]): return await self.get(coding.id) async def update(self, _id: UUID, update: ProjectModel): - old_project = await use_collection(COLLECTION).find_one({"_id": _id}) - old_project = ProjectModel(**old_project) + old_project_dict = await use_collection(COLLECTION).find_one({"_id": _id}) + old_project = ProjectModel(**old_project_dict) if update.monitor and not old_project.monitor: code = self.create_code(update) update.monitor.code = 'S' + code @@ -104,7 +104,15 @@ class ProjectRepository(BaseRepository[ProjectModel]): if update.monitor: update.has_monitor = True await self.update_report_price(update) - if old_project.monitor and old_project.monitor.detail and update.monitor and update.monitor.detail and (update.monitor.detail.date_create_project != old_project.monitor.detail.date_create_project or update.monitor.detail.first_time != old_project.monitor.detail.first_time): + old_detail = old_project_dict.get("monitor", {}).get("detail", {}) + old_date = old_detail.get("date_create_project") + old_first_time = old_detail.get("first_time") + update_dict = update.mongo_dict() + new_detail = update_dict.get("monitor", {}).get("detail", {}) + new_date = new_detail.get("date_create_project") + new_first_time = new_detail.get("first_time") + can_calculate = (new_date is not None and new_first_time is not None) + if can_calculate and ((old_date is None or new_date != old_date)or(old_first_time is None or new_first_time != old_first_time)): update.date_delay = self.creat_date_delay(update) + datetime.timedelta(days=update.all_delay_day) update.u_at() await use_collection(COLLECTION).update_one({"_id": _id}, {"$set": update.mongo_dict()})