feat: time tracking

This commit is contained in:
2024-08-03 05:39:05 +03:00
parent 82c9126d87
commit 58220a246b
7 changed files with 245 additions and 63 deletions

View File

@@ -167,11 +167,10 @@ class PayrollService(BaseService):
)
return response
async def _create_payment_record_hourly(
def get_amount(
self,
creator: User,
user: User,
record_schema: PaymentRecordCreateSchema
work_units: int
):
pay_rate: PayRate = user.pay_rate
overtime_threshold = 0
@@ -183,13 +182,22 @@ class PayrollService(BaseService):
overtime_rate = pay_rate.overtime_rate
if overtime_threshold == 0 or overtime_rate == 0:
base_units = record_schema.work_units
base_units = work_units
overtime_units = 0
else:
overtime_units = max(0, record_schema.work_units - overtime_threshold)
base_units = record_schema.work_units - overtime_units
overtime_units = max(0, work_units - overtime_threshold)
base_units = work_units - overtime_units
amount = pay_rate.base_rate * base_units + overtime_rate * overtime_units
return pay_rate.base_rate * base_units + overtime_rate * overtime_units
async def _create_payment_record_hourly(
self,
creator: User,
user: User,
record_schema: PaymentRecordCreateSchema
):
pay_rate: PayRate = user.pay_rate
amount = self.get_amount(user, record_schema.work_units)
payment_record_dict = record_schema.model_dump()
del payment_record_dict['user']
payment_record_dict.update({
@@ -202,54 +210,14 @@ class PayrollService(BaseService):
stmt = (
insert(
PaymentRecord
).values(
)
.values(
**payment_record_dict
)
)
await self.session.execute(stmt)
await self.session.commit()
async def _create_payment_record_daily(
self,
creator: User,
user: User,
record_schema: PaymentRecordCreateSchema
):
pay_rate: PayRate = user.pay_rate
amount = pay_rate.base_rate * record_schema.work_units
payment_record_dict = record_schema.model_dump()
del payment_record_dict['user']
payment_record_dict.update({
'created_by_user_id': creator.id,
'created_at': datetime.datetime.now(),
'payroll_scheme_key': pay_rate.payroll_scheme.key,
'amount': amount,
'user_id': record_schema.user.id
})
async def _create_payment_record_monthly(
self,
creator: User,
user: User,
record_schema: PaymentRecordCreateSchema
) -> CreatePaymentRecordResponse:
pay_rate: PayRate = user.pay_rate
amount = pay_rate.base_rate * record_schema.work_units
payment_record_dict = record_schema.model_dump()
del payment_record_dict['user']
payment_record_dict.update({
'created_by_user_id': creator.id,
'created_at': datetime.datetime.now(),
'payroll_scheme_key': pay_rate.payroll_scheme.key,
'amount': amount,
'user_id': record_schema.user.id
})
async def create_payment_record(
self,
request: CreatePaymentRecordRequest,
@@ -282,7 +250,8 @@ class PayrollService(BaseService):
stmt = (
delete(
PaymentRecord
).where(
)
.where(
PaymentRecord.id == request.payment_record_id
)
)