using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; using Dapper; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Logging; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.Validation; using MMDAL.DTO.Fabric; using MMDAL.Query.Fabric; using Newtonsoft.Json; namespace MMDAL.CustomCode.Fabric { public class FabricDAL : IFabricDAL { private readonly IQueryExecutor _QueryExecutor; private readonly IValidation _Validation; public FabricDAL(IQueryExecutor IQueryExecutor, IValidation IValidation) { _QueryExecutor = IQueryExecutor; _Validation = IValidation; } public async Task GetSelectListFabric(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { string SQL = FabricQB.GET_SELECTLIST_FABRIC; DynamicParameters Params = new(); Params.Add("TenantId", LoginDTO.ClientId); string? Name = GetCriteriaValue(CriteriaDTO, "Name"); long? PartyId = GetCriteriaValue(CriteriaDTO, "PartyId"); long? MerchandiserId = GetCriteriaValue(CriteriaDTO, "MerchandiserId"); long? DesignerId = GetCriteriaValue(CriteriaDTO, "DesignerId"); int? Status = GetCriteriaValue(CriteriaDTO, "Status"); bool? IsOnlyforCosting = GetCriteriaValue(CriteriaDTO, "IsOnlyforCosting"); Params.Add("Name", Name); Params.Add("PartyId", PartyId); Params.Add("MerchandiserId", MerchandiserId); Params.Add("DesignerId", DesignerId); Params.Add("Status", Status); Params.Add("IsOnlyforCosting", IsOnlyforCosting); Params.Add("UserPartyId", LoginDTO.WorkPartyId); var Result = await _QueryExecutor.QueryAsync(LoginDTO, SQL, Params); string Json = JsonConvert.SerializeObject(Result); return Json; } catch (Exception) { throw; } } private T? GetCriteriaValue(CriteriaDTO criteria, string fieldName) { var attr = criteria?.SectionCriteriaList? .SelectMany(s => s.AttributesCriteriaList) .FirstOrDefault(a => a.FieldName == fieldName); if (attr?.FieldValue == null) return default; if (attr.FieldValue is JsonElement jsonElement) { object? value = typeof(T).Name switch { "String" => jsonElement.GetString(), "Int32" => jsonElement.GetInt32(), "Int64" => jsonElement.GetInt64(), "Boolean" => jsonElement.GetBoolean(), "Decimal" => jsonElement.GetDecimal(), _ => null }; return (T?)value; } return (T?)Convert.ChangeType(attr.FieldValue, typeof(T)); } } }