feat: time tracking
This commit is contained in:
@@ -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
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user