This commit is contained in:
2026-03-01 15:06:22 +03:00
parent aff088723a
commit 8b05a2d512
15 changed files with 540 additions and 5 deletions
@@ -39,3 +39,38 @@ class HoursTransactionsDAO:
delete(HoursTransaction).where(HoursTransaction.id == transaction_id)
)
await self.session.commit()
async def delete(self, transaction_id: int) -> None:
await self.session.execute(
delete(HoursTransaction).where(HoursTransaction.id == transaction_id)
)
await self.session.commit()
async def get_by_period(self, start_date, end_date) -> list[HoursTransaction]:
"""Получает транзакции за период"""
from datetime import datetime, time
start_datetime = datetime.combine(start_date, time.min)
end_datetime = datetime.combine(end_date, time.max)
result = await self.session.execute(
select(HoursTransaction)
.where(HoursTransaction.created_at >= start_datetime)
.where(HoursTransaction.created_at <= end_datetime)
.order_by(HoursTransaction.created_at.asc())
)
return list(result.scalars().all())
async def get_by_period(self, start_date, end_date) -> list[HoursTransaction]:
from datetime import datetime, time
start_datetime = datetime.combine(start_date, time.min)
end_datetime = datetime.combine(end_date, time.max)
result = await self.session.execute(
select(HoursTransaction)
.where(HoursTransaction.created_at >= start_datetime)
.where(HoursTransaction.created_at <= end_datetime)
.order_by(HoursTransaction.created_at.asc())
)
return list(result.scalars().all())
@@ -28,3 +28,6 @@ class FloorsRepository:
async def delete_floor(self, floor_id: int) -> None:
await self.floors_dao.delete(floor_id)
async def get_by_id(self, floor_id: int) -> Floor | None:
return await self.get_floor_by_id(floor_id)
@@ -121,3 +121,6 @@ class HoursTransactionsRepository:
self, transaction_id: int
) -> HoursTransaction | None:
return await self.transactions_dao.get_by_id(transaction_id)
async def get_by_period(self, start_date, end_date) -> list[HoursTransaction]:
return await self.transactions_dao.get_by_period(start_date, end_date)
@@ -26,3 +26,9 @@ class ReportingPeriodsRepository:
async def delete_period(self, period_id: int) -> None:
await self.reporting_periods_dao.delete(period_id)
async def get_by_id(self, period_id: int) -> ReportingPeriod | None:
return await self.get_period_by_id(period_id)
async def get_all(self) -> list[ReportingPeriod]:
return await self.get_all_periods()
@@ -103,3 +103,6 @@ class ResidentsRepository:
async def delete_resident(self, resident_id: int) -> None:
await self.residents_dao.delete(resident_id)
async def get_by_id(self, resident_id: int) -> Resident | None:
return await self.get_resident_by_id(resident_id)
@@ -24,3 +24,6 @@ class RoomsRepository:
async def delete_room(self, room_id: int) -> None:
await self.rooms_dao.delete(room_id)
async def get_by_id(self, room_id: int) -> Room | None:
return await self.get_room_by_id(room_id)
+18
View File
@@ -33,6 +33,7 @@ from dutylog.infrastructure.database.repositories.reporting_periods_repository i
ReportingPeriodsRepository,
)
from dutylog.infrastructure.utils.config import Config, load_config
from dutylog.services.report_service import ReportService
class ConfigProvider(Provider):
@@ -118,3 +119,20 @@ class RepositoryProvider(Provider):
self, reporting_periods_dao: ReportingPeriodsDAO
) -> ReportingPeriodsRepository:
return ReportingPeriodsRepository(reporting_periods_dao)
class ServiceProvider(Provider):
@provide(scope=Scope.REQUEST)
def get_report_service(
self,
hours_transactions_repository: HoursTransactionsRepository,
residents_repository: ResidentsRepository,
rooms_repository: RoomsRepository,
floors_repository: FloorsRepository,
) -> ReportService:
return ReportService(
hours_transactions_repository,
residents_repository,
rooms_repository,
floors_repository,
)