using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using GB5Shared.Validation; using PayRollDAL.DTO.Punch; using PayRollDAL.Query.Punch; using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PayRollDAL.CustomeCode.Punch { public class PunchDAL : IPunchDAL { private readonly IQueryExecutor _QueryExecutor; private readonly IValidation _Validation; public PunchDAL(IQueryExecutor QueryExecutor, IValidation validation) { _QueryExecutor = QueryExecutor; _Validation = validation; } public async Task SaveMissedPunch(PunchDTO dto, LoginDTO login, DbTransaction tx) { try { const string Sql = PunchQB.SAVE_MISSED_PUNCH; return await _QueryExecutor.ExecuteAsync(login, Sql, dto, tx); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.SaveErrorMessage}"); throw new Exception(Error); } } public async Task UpdateMissedPunch(PunchDTO dto, LoginDTO login, DbTransaction tx) { try { const string sql = PunchQB.UPDATE_MISSED_PUNCH; return await _QueryExecutor.ExecuteAsync(login, sql, dto, tx); } catch (Exception ex) { throw new Exception("Error while updating Punch", ex); } } #region MissingPunchInsert / MissingPunchInsertNew public async Task GetEmployeeTemporaryCardNumberAsync(int employeeId, LoginDTO login, CancellationToken ct = default) { try { return await _QueryExecutor.ExecuteScalarAsync( login, PunchQB.GET_EMPLOYEE_TEMPORARYCARDNUMBER, new { EmployeeId = employeeId }, cancellationToken: ct); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.GetFetchingMessge}"); throw new Exception(Error); } } public async Task> GetDeviceLogsFromPunchDbAsync(string fromDate, string toDate, string? employeeCode, LoginDTO punchDbLogin, CancellationToken ct = default) { try { string employeeFilter = string.IsNullOrEmpty(employeeCode) ? "" : "AND Employeecode = @EmployeeCode"; string sql = string.Format(PunchQB.GET_DEVICELOG_FROM_PUNCH_DB, employeeFilter); return await _QueryExecutor.QueryAsync( punchDbLogin, sql, new { FromDate = fromDate, ToDate = toDate, EmployeeCode = employeeCode }, cancellationToken: ct); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.GetFetchingMessge}"); throw new Exception(Error); } } public async Task DeleteDeviceLogFromPunchDbAsync(int id, LoginDTO punchDbLogin, DbTransaction tx, CancellationToken ct = default) { try { return await _QueryExecutor.ExecuteAsync(punchDbLogin, PunchQB.DELETE_DEVICELOG_FROM_PUNCH_DB, new { Id = id }, tx, ct); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.DeleteErrorMessage}"); throw new Exception(Error); } } public async Task InsertDeviceLogFromPunchDbAsync(PunchDownloadDeviceLogDTO row, LoginDTO login, DbTransaction tx, CancellationToken ct = default) { try { return await _QueryExecutor.ExecuteAsync(login, PunchQB.INSERT_DEVICELOG_FROM_PUNCH_DB, row, tx, ct); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.SaveErrorMessage}"); throw new Exception(Error); } } public async Task DeleteTPunchBeforeInsertingAsync(int employeeId, string fromDate, string toDate, LoginDTO login, DbTransaction tx, CancellationToken ct = default) { try { return await _QueryExecutor.ExecuteAsync( login, PunchQB.DELETE_TPUNCH_BEFORE_INSERTING, new { EmployeeId = employeeId, FromDate = fromDate, ToDate = toDate }, tx, ct); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.DeleteErrorMessage}"); throw new Exception(Error); } } public async Task> FindPunchServerConnectionNamesAsync(string tableName, LoginDTO login, CancellationToken ct = default) { try { string sql = string.Format(PunchQB.FIND_PUNCH_SERVER_CONFIG, tableName); var result = await _QueryExecutor.QueryAsync(login, sql, cancellationToken: ct); return result.ToList(); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.GetFetchingMessge}"); throw new Exception(Error); } } public async Task InsertMissingDeviceLogsFromLinkedServerAsync(int employeeId, string connectionName, string fromDate, string toDate, string tableName, LoginDTO login, DbTransaction tx, CancellationToken ct = default) { try { string sql = string.Format(PunchQB.MISSING_PUNCH_INSERT_IN_DEVICELOG, tableName, connectionName); return await _QueryExecutor.ExecuteAsync( login, sql, new { EmployeeId = employeeId, FromDate = fromDate, ToDate = toDate }, tx, ct); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.SaveErrorMessage}"); throw new Exception(Error); } } public async Task StageMissingPunchesToDeviceLogs2Async(int employeeId, string fromDate, string toDate, string tableName, LoginDTO login, DbTransaction tx, CancellationToken ct = default) { try { string employeeFilter = employeeId == -1 ? "" : "and b.EMPLOYEEID = @EmployeeId"; string sql = string.Format(PunchQB.STAGE_MISSING_PUNCHES_TO_DEVICELOGS2, tableName, employeeFilter); return await _QueryExecutor.ExecuteAsync( login, sql, new { EmployeeId = employeeId, FromDate = fromDate, ToDate = toDate }, tx, ct); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.SaveErrorMessage}"); throw new Exception(Error); } } #endregion } }