using System; using System.Data.Common; using System.Linq; using System.Threading; using System.Threading.Tasks; using FAMDAL.DTO.TFam; using FAMDAL.Query.TFam; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; namespace FAMDAL.CustomCode.TFam { public class TFamDAL : ITFamDAL { private readonly IQueryExecutor _qe; public TFamDAL(IQueryExecutor qe) => _qe = qe; public async Task GetTFam(int tFamLedgerId, LoginDTO login, CancellationToken ct) { var items = await _qe.QueryAsync(login, TFamQB.GET_TFAM, new { TFamLedgerId = tFamLedgerId }, cancellationToken: ct).ConfigureAwait(false); return items.FirstOrDefault(); } public async Task SaveTFam(TFamDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) { dto.TFamCreatedOn = DateTime.UtcNow; dto.TFamCreatedById = login.UserId; dto.TFamModifiedOn = DateTime.UtcNow; dto.TFamModifiedById = login.UserId; return await _qe.ExecuteScalarAsync(login, TFamQB.SAVE_TFAM, dto, tx, cancellationToken: ct).ConfigureAwait(false); } public async Task DeleteTFam(int tFamLedgerId, int modifiedById, LoginDTO login, DbTransaction tx, CancellationToken ct) { await _qe.ExecuteAsync(login, TFamQB.SOFT_DELETE_TFAM, new { TFamLedgerId = tFamLedgerId, ModifiedById = modifiedById, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); } public async Task GetPeriodWindow(int periodId, LoginDTO login, CancellationToken ct) { var items = await _qe.QueryAsync(login, TFamQB.GET_PERIOD_WINDOW, new { PeriodId = periodId }, cancellationToken: ct).ConfigureAwait(false); return items.FirstOrDefault(); } public async Task IsAssetBatchAlreadyCapitalized(int assetId, string assetBatch, LoginDTO login, CancellationToken ct) { if (string.IsNullOrWhiteSpace(assetBatch)) return false; var count = await _qe.ExecuteScalarAsync(login, TFamQB.CHECK_ASSET_BATCH_ALREADY_CAPITALIZED, new { AssetId = assetId, AssetBatch = assetBatch }, cancellationToken: ct).ConfigureAwait(false); return count > 0; } public async Task GetSelectListTFam(int FirstNumber, int MaxResult , CriteriaDTO CriteriaDTO, LoginDTO LoginDTO, bool isCount = false) { try { string json = ""; if (!isCount) { string SQL = TFamQB.GET_TFAM_SELECTLIST; var parameters = new { firstnumber = FirstNumber, maxresult = MaxResult }; var Result = (await _qe.QueryAsync( LoginDTO, SQL, parameters)).ToList(); json = JsonConvert.SerializeObject(Result); } else { int count = 0; json = count.ToString(); } return json; } catch (Exception) { throw; } } } }