38 lines
1.6 KiB
TypeScript
38 lines
1.6 KiB
TypeScript
import { Injectable } from "@nestjs/common";
|
|
import { Prisma, Timesheets } from "@prisma/client";
|
|
import { BaseApprovalService } from "src/common/shared/base-approval.service";
|
|
import { PrismaService } from "src/prisma/prisma.service";
|
|
|
|
@Injectable()
|
|
export class TimesheetApprovalService extends BaseApprovalService<Timesheets>{
|
|
constructor(prisma: PrismaService){super(prisma)}
|
|
//_____________________________________________________________________________________________
|
|
// APPROVAL AND DELEGATE METHODS
|
|
//_____________________________________________________________________________________________
|
|
protected get delegate() {
|
|
return this.prisma.timesheets;
|
|
}
|
|
|
|
protected delegateFor(transaction: Prisma.TransactionClient) {
|
|
return transaction.timesheets;
|
|
}
|
|
|
|
async updateApproval(id: number, isApproved: boolean): Promise<Timesheets> {
|
|
return this.prisma.$transaction((transaction) =>
|
|
this.updateApprovalWithTransaction(transaction, id, isApproved),
|
|
);
|
|
}
|
|
|
|
async cascadeApprovalWithtx(transaction: Prisma.TransactionClient, timesheetId: number, isApproved: boolean): Promise<Timesheets> {
|
|
const timesheet = await this.updateApprovalWithTransaction(transaction, timesheetId, isApproved);
|
|
await transaction.shifts.updateMany({
|
|
where: { timesheet_id: timesheetId },
|
|
data: { is_approved: isApproved },
|
|
});
|
|
await transaction.expenses.updateManyAndReturn({
|
|
where: { timesheet_id: timesheetId },
|
|
data: { is_approved: isApproved },
|
|
});
|
|
return timesheet;
|
|
}
|
|
} |