using AccountsDAL.DTO.TDSCategory; using AccountsDAL.DTO.Voucher; using AccountsDAL.Query.TDSCategory; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using GB5Shared.GenerateAutoNumber; using GB5Shared.Validation; namespace AccountsDAL.CustomCode.TDSCategory { public class TDSCategoryDAL : ITDSCategoryDAL { private readonly IQueryExecutor _QueryExecutor; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public TDSCategoryDAL(IQueryExecutor IQueryExecutor, AutoNumber AutoNumber, IValidation validation) { _QueryExecutor = IQueryExecutor; _AutoNumber = AutoNumber; _Validation = validation; } public async Task GetTDSCategory(int TDSCategoryId, LoginDTO LoginDTO) { try { string Sql = TDSCategoryQB.GET_TDSCATEGORY; var Parameters = new { tdscategoryid = TDSCategoryId }; TDSCategoryDTO TDSCategoryDTO = await _QueryExecutor.QuerySingleAsync(LoginDTO, Sql, Parameters); return JsonConvert.SerializeObject(TDSCategoryDTO); } catch (Exception) { throw; } } public async Task GetTDSCategoryForAccount(int AccountId, LoginDTO LoginDTO) { try { string Sql = TDSCategoryQB.GET_TDSCATEGORY_FOR_ACCOUNT; var Parameters = new { AccountId }; var Result = await _QueryExecutor.QueryAsync(LoginDTO, Sql, Parameters); return JsonConvert.SerializeObject(Result); } catch (Exception) { throw; } } public async Task GetSelectListTDSCategory(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO, bool IsCount = false) { try { string Json = ""; if (IsCount == false) { string SQL = TDSCategoryQB.GET_SELECTLIST_TDSCATEGORY; var parameter = new { firstnumber = FirstNumber, maxresult = MaxResult }; var Result = await _QueryExecutor.QueryAsync(LoginDTO, SQL, parameter); Json = JsonConvert.SerializeObject(Result); } else { int Count = 0; Json = Count.ToString(); } return Json; } catch (Exception) { throw; } } public async Task SaveTDSCategory(TDSCategoryDTO TDSCategoryDTO, LoginDTO LoginDTO) { try { const string Sql = TDSCategoryQB.SAVE_TDSCATEGORY; return await _QueryExecutor.ExecuteAsync(LoginDTO, Sql, TDSCategoryDTO); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.SaveErrorMessage}"); throw new Exception(Error); } } public async Task UpdateTDSCategory(TDSCategoryDTO TDSCategoryDTO, LoginDTO LoginDTO) { try { const string Sql = TDSCategoryQB.UPDATE_TDSCATEGORY; return await _QueryExecutor.ExecuteAsync(LoginDTO, Sql, TDSCategoryDTO); } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.UpdateErrorMessage}"); throw new Exception(Error); } } public async Task DeleteTDSCategory(int TDSCategoryId, LoginDTO LoginDTO) { try { string sql = TDSCategoryQB.DELETE_TDSCATEGORY; var parameter = new { tdscategoryid = TDSCategoryId }; var result = await _QueryExecutor.ExecuteAsync(LoginDTO, sql, parameter); if (result > 0) { return $"{SuccessResponse.DeleteSuccessMessage}"; } else { return $"{ErrorResponse.DeleteNotFoundMessage}"; } } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.DeleteErrorMessage}"); throw new Exception(Error); } } public async Task GetTDSDetailsFromVoucher(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { var parameter = new { OUId = LoginDTO.WorkOUId, CategoryId = ReadIntCriteria(CriteriaDTO, "categoryid") ?? -1, PeriodFromDate = ReadDateCriteria(CriteriaDTO, "periodfromdate"), PeriodToDate = ReadDateCriteria(CriteriaDTO, "periodtodate") }; var Result = await _QueryExecutor.QueryAsync(LoginDTO, TDSCategoryQB.GET_TDSDETAILS_FOR_VOUCHER, parameter); return JsonConvert.SerializeObject(Result); } catch (Exception) { throw; } } private static int? ReadIntCriteria(CriteriaDTO criteriaDTO, string fieldName) { if (criteriaDTO?.SectionCriteriaList == null) return null; foreach (var section in criteriaDTO.SectionCriteriaList) { if (section?.AttributesCriteriaList == null) continue; foreach (var attr in section.AttributesCriteriaList) { if (!string.Equals(attr.FieldName, fieldName, StringComparison.OrdinalIgnoreCase)) continue; return int.TryParse(attr.FieldValue?.ToString(), out var value) ? value : null; } } return null; } private static DateTime? ReadDateCriteria(CriteriaDTO criteriaDTO, string fieldName) { if (criteriaDTO?.SectionCriteriaList == null) return null; foreach (var section in criteriaDTO.SectionCriteriaList) { if (section?.AttributesCriteriaList == null) continue; foreach (var attr in section.AttributesCriteriaList) { if (!string.Equals(attr.FieldName, fieldName, StringComparison.OrdinalIgnoreCase)) continue; return DateTime.TryParse(attr.FieldValue?.ToString(), out var value) ? value : null; } } return null; } } }