fix: fixed shifts time tracking

This commit is contained in:
2025-11-25 13:21:28 +04:00
parent 678dd18e12
commit cb0168a199
5 changed files with 168 additions and 92 deletions

View File

@@ -59,54 +59,64 @@ class TimeTrackingService(BaseService):
records.append(record)
return GetTimeTrackingRecordsResponse(records=records)
async def update_work_record(
self,
user: User,
request: UpdateTimeTrackingRecordRequest,
commit: bool = True,
) -> tuple[bool, str]:
record_user = await UserService(self.session).get_by_id(user_id=request.user_id)
if not record_user:
return False, "Указанный пользователь не найден!"
if not record_user.pay_rate:
return False, "У пользователя не указана схема оплаты!"
existing_record_stmt = (
select(
PaymentRecord
)
.where(
PaymentRecord.user_id == request.user_id,
PaymentRecord.start_date == request.date,
PaymentRecord.end_date == request.date,
)
)
amount = (
PayrollService(
self.session
)
.get_amount(
user=record_user,
work_units=request.hours
)
)
existing_record = await self.session.scalar(existing_record_stmt)
if existing_record:
existing_record: PaymentRecord
existing_record.work_units = request.hours
existing_record.amount = amount
else:
new_record = PaymentRecord(
user_id=request.user_id,
created_by_user_id=user.id,
start_date=request.date,
end_date=request.date,
created_at=datetime.datetime.now(),
payroll_scheme_key=record_user.pay_rate.payroll_scheme_key,
amount=amount,
work_units=request.hours
)
self.session.add(new_record)
if commit:
await self.session.commit()
return True, "Запись успешно добавлена"
async def update_record(
self,
user: User,
request: UpdateTimeTrackingRecordRequest
) -> UpdateTimeTrackingRecordResponse:
try:
record_user = await UserService(self.session).get_by_id(user_id=request.user_id)
if not record_user:
return UpdateTimeTrackingRecordResponse(ok=False, message="Указанный пользователь не найден!")
if not record_user.pay_rate:
return UpdateTimeTrackingRecordResponse(ok=False, message="У пользователя не указана схема оплаты!")
existing_record_stmt = (
select(
PaymentRecord
)
.where(
PaymentRecord.user_id == request.user_id,
PaymentRecord.start_date == request.date,
PaymentRecord.end_date == request.date,
)
)
amount = (
PayrollService(
self.session
)
.get_amount(
user=record_user,
work_units=request.hours
)
)
existing_record = await self.session.scalar(existing_record_stmt)
if existing_record:
existing_record: PaymentRecord
existing_record.work_units = request.hours
existing_record.amount = amount
else:
new_record = PaymentRecord(
user_id=request.user_id,
created_by_user_id=user.id,
start_date=request.date,
end_date=request.date,
created_at=datetime.datetime.now(),
payroll_scheme_key=record_user.pay_rate.payroll_scheme_key,
amount=amount,
work_units=request.hours
)
self.session.add(new_record)
await self.session.commit()
return UpdateTimeTrackingRecordResponse(ok=True, message="Запись успешно обновлена")
ok, message = await self.update_work_record(user, request)
return UpdateTimeTrackingRecordResponse(ok=ok, message=message)
except Exception as e:
return UpdateTimeTrackingRecordResponse(ok=False, message=str(e))