using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.PickListGenerator; using GB5Shared.QueryExecutor; using Newtonsoft.Json; using PayRollDAL.DTO.PayTaxTypeDetailSetting; using PayRollDAL.Query.PayTaxTypeDetailSetting; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PayRollDAL.CustomeCode.PayTaxTypeDetailSetting { public class PayTaxTypeDetailSettingDAL : IPayTaxTypeDetailSettingDAL { private readonly IQueryExecutor _QueryExecutor; private readonly IPickListExecutor _PickListExecutor; public PayTaxTypeDetailSettingDAL(IQueryExecutor QueryExecutor, IPickListExecutor PickListExecutor) { _QueryExecutor = QueryExecutor; _PickListExecutor = PickListExecutor; } public async Task GetSelectListPayTaxTypeDetailSetting( int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { string sql = PayTaxTypeDetailSettingQB.GET_SELECTLIST_PAYTAXTYPEDETAILSETTING_BASE; sql = await ApplyPayTaxTypeDetailSettingCriteria(sql, CriteriaDTO, LoginDTO); sql = await ApplyPayTaxTypeDetailSettingCriteria(sql, LoginDTO.UserCriteriaDTO, LoginDTO); sql += PayTaxTypeDetailSettingQB.GET_SELECTLIST_PAYTAXTYPEDETAILSETTING_PAGING_SUFFIX; var parameter = new { firstnumber = FirstNumber, maxresult = MaxResult }; var result = await _QueryExecutor.QueryAsync(LoginDTO, sql, parameter); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } private async Task ApplyPayTaxTypeDetailSettingCriteria(string sql, CriteriaDTO criteriaDTO, LoginDTO loginDTO) { string[,] criteriaMap = new string[,] { { "PayTaxTypeDetailId", "a.PAYTAXTYPEDETAILID" }, { "FieldCode", "a.FIELDCODE" }, { "Type", "a.TYPE" }, { "FieldName", "b.FIELDNAME" }, { "DisplayName", "b.DISPLAYNAME" } }; return await _PickListExecutor.ApplyCriteria(sql, criteriaMap, criteriaDTO, loginDTO); } } }