using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using PERMDAL.DTOs; using PERMDAL.Interfaces; using PERMDAL.QueryBuilders; namespace PERMDAL.Implementations; public class AppraisalDAL : IAppraisalDAL { private readonly IQueryExecutor _qe; public AppraisalDAL(IQueryExecutor queryExecutor) => _qe = queryExecutor; public async Task GetAppraisalAsync(int appraisalId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync( login, AppraisalQB.GET_BY_ID, new { AppraisalId = appraisalId, TenantId = login.ClientId }) .ConfigureAwait(false); public async Task> GetAppraisalListAsync( int planId, int ouId, short? status, int page, int pageSize, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, AppraisalQB.GET_LIST, new { TenantId = login.ClientId, AppraisalPlanId = planId, OUID = ouId, Status = status, Offset = (page - 1) * pageSize, PageSize = pageSize }, cancellationToken: ct) .ConfigureAwait(false) ?? Enumerable.Empty(); public async Task BulkInsertAppraisalsForPlanAsync(int appraisalPlanId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, AppraisalQB.BULK_INSERT_APPRAISALS, new { AppraisalPlanId = appraisalPlanId, TenantId = login.ClientId, CreatedBy = login.UserId, ModifiedBy = login.UserId }, cancellationToken: ct) .ConfigureAwait(false); public async Task UpdateAppraisalScoresAsync(AppraisalDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, AppraisalQB.UPDATE_SCORES, new { dto.AppraisalId, dto.OverallMeasureScore, dto.OverallGoalScore, dto.FinalPercentage, dto.PercentIncrease, dto.AmountIncrease, dto.ToDesignationId, dto.ToGradeId, TenantId = login.ClientId, ModifiedBy = login.UserId }, cancellationToken: ct) .ConfigureAwait(false); public async Task UpdateAppraisalStatusAsync( int appraisalId, short newStatus, short currentStatus, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, AppraisalQB.UPDATE_STATUS, new { AppraisalId = appraisalId, Status = newStatus, CurrentStatus = currentStatus, TenantId = login.ClientId, ModifiedBy = login.UserId }, cancellationToken: ct) .ConfigureAwait(false); public async Task MarkPayRevisionTriggeredAsync(int appraisalId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, AppraisalQB.MARK_PAY_REVISION_TRIGGERED, new { AppraisalId = appraisalId, TenantId = login.ClientId, ModifiedBy = login.UserId }, cancellationToken: ct) .ConfigureAwait(false); public async Task GetMyAppraisalAsync(int employeeId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync( login, AppraisalQB.GET_ESS_APPRAISAL, new { EmployeeId = employeeId, TenantId = login.ClientId }) .ConfigureAwait(false); public async Task GetAppraisalOwnerIdAsync(int appraisalId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync(login, AppraisalQB.GET_OWNER_EMPLOYEE_ID, new { AppraisalId = appraisalId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false); }