From 158afb90d43da5603ae694d3344bf8dced3b0aa1 Mon Sep 17 00:00:00 2001 From: "Evgeny (Krymmy) Momotov" Date: Mon, 8 Dec 2025 08:09:24 +0300 Subject: [PATCH] [UP] add reports support --- src/YandexApiManager/api_manager.py | 51 +++++++++++++++++++++++++++++ src/YandexApiManager/data_models.py | 45 ++++++++++++++++++++++++- 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/src/YandexApiManager/api_manager.py b/src/YandexApiManager/api_manager.py index e5e26e8..6de9cc5 100644 --- a/src/YandexApiManager/api_manager.py +++ b/src/YandexApiManager/api_manager.py @@ -263,3 +263,54 @@ class YandexManagerClient: if not response: return None return YandexFleetInspectionCheeks(**response) + + + async def _reports_rout(self, method: str, url: str, **kwargs) -> dict | list | None: + response = await self._request(method, f'/reports/{url.strip("/")}', **kwargs) + if not response: + return None + return response + + + async def create_supply_hours_condition_report(self, report: SupplyHoursConditionReportIn) -> SupplyHoursConditionReport | None: + response = await self._reports_rout('POST', 'supply_hours_conditions/', json=report.model_dump()) + if not response: + return None + return SupplyHoursConditionReport(**response) + + async def get_yandex_fleet_check_reports(self, **params) -> list[YandexFleetCheckReport] | None: + response = await self._reports_rout('GET', 'yandex_fleet_checks/', params=params) + if not response: + return [] + return [YandexFleetCheckReport(**report) for report in response] + + + async def create_yandex_fleet_check_report(self, report: YandexFleetCheckReportIn) -> YandexFleetCheckReport | None: + response = await self._reports_rout('POST', 'yandex_fleet_checks/', json=report.model_dump()) + if not response: + return None + return YandexFleetCheckReport(**response) + + async def get_group_check_reports(self, **params) -> list[GroupCheckReport] | None: + response = await self._reports_rout('GET', 'group_checks/', params=params) + if not response: + return [] + return [GroupCheckReport(**report) for report in response] + + async def create_group_check_report(self, report: GroupCheckReportIn) -> GroupCheckReport | None: + response = await self._reports_rout('POST', 'group_checks/', json=report.model_dump()) + if not response: + return None + return GroupCheckReport(**response) + + async def get_driver_check_reports(self, **params) -> list[DriverCheckReport] | None: + response = await self._reports_rout('GET', 'driver_checks/', params=params) + if not response: + return [] + return [DriverCheckReport(**report) for report in response] + + async def create_driver_check_report(self, report: DriverCheckReportIn) -> DriverCheckReport | None: + response = await self._reports_rout('POST', 'driver_checks/', json=report.model_dump()) + if not response: + return None + return DriverCheckReport(**response) diff --git a/src/YandexApiManager/data_models.py b/src/YandexApiManager/data_models.py index 5de981b..9a0349d 100644 --- a/src/YandexApiManager/data_models.py +++ b/src/YandexApiManager/data_models.py @@ -283,4 +283,47 @@ class GroupInspectionCheek(BaseInspectionsCheckModel, BasicModel): class DriverInspectionCheek(BaseInspectionsCheckModel, BasicModel): - drive_inspection: DriverInspection = Field(description="Инспекция водителя") \ No newline at end of file + drive_inspection: DriverInspection = Field(description="Инспекция водителя") + + +class SupplyHoursConditionReport(UUIDModel, BasicModel): + supply_hours_condition: Optional[SupplyHoursCondition] = Field(description="Условие по часам поставки", default=None) + driver: Optional[Driver] = Field(description="Водитель", default=None) + supply_duration: int = Field(description="Время работы в часах", default=0) + is_fulfilled: bool = Field(description="Соблюдение условия", default=False) + + +class SupplyHoursConditionReportIn(BaseModel): + supply_hours_condition_id: Optional[int] = Field(description="Условие по часам поставки", default=None) + driver_id: Optional[int] = Field(description="Водитель", default=None) + supply_duration: Optional[int] = Field(description="Время работы в часах", default=0) + is_fulfilled: Optional[bool] = Field(description="Соблюдение условия", default=False) + + +class CheckReport(UUIDModel, BasicModel): + owner: Optional[User] = Field(description="Владелец", default=None) + supply_hours_condition_report: Optional[SupplyHoursConditionReportIn] = Field(description="Водитель", default=None) + action_do: Optional[Action] = Field(description="Действие", default=None) + +class YandexFleetCheckReport(CheckReport): + yandex_fleet_check: Optional[YandexFleetInspectionCheeks] = Field(description="Инспекция флота", default=None) + +class GroupCheckReport(CheckReport): + group_check: Optional[GroupInspectionCheek] = Field(description="Инспекция группы", default=None) + +class DriverCheckReport(CheckReport): + driver_check: Optional[DriverInspectionCheek] = Field(description="Инспекция водителя", default=None) + +class CheckReportIn(BaseModel): + owner_id: Optional[int] = Field(description="Владелец", default=None) + supply_hours_condition_report_id: Optional[int] = Field(description="Водитель", default=None) + action_do_id: Optional[int] = Field(description="Действие", default=None) + +class YandexFleetCheckReportIn(CheckReportIn): + yandex_fleet_check_id: Optional[int] = Field(description="Инспекция флота", default=None) + +class GroupCheckReportIn(CheckReportIn): + group_check_id: Optional[int] = Field(description="Инспекция группы", default=None) + +class DriverCheckReportIn(CheckReportIn): + driver_check_id: Optional[int] = Field(description="Инспекция водителя", default=None) \ No newline at end of file