using AccountsDAL.DTO.Warehouse; using AccountsDAL.Query.Warehouse; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; namespace AccountsDAL.CustomCode.Warehouse { public class WarehouseAdminDAL : IWarehouseAdminDAL { private readonly IQueryExecutor _queryExecutor; public WarehouseAdminDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } // ─── Fact ───────────────────────────────────────────────────────────── public async Task GetWarehouseFactsAsync(LoginDTO login, CancellationToken ct) { var result = await _queryExecutor .QueryAsync(login, WarehouseAdminQB.GET_WAREHOUSE_FACTS, cancellationToken: ct) .ConfigureAwait(false); return JsonConvert.SerializeObject(result); } public async Task SaveWarehouseFactAsync(SaveWarehouseFactDTO dto, bool isNew, LoginDTO login, CancellationToken ct) { var sql = isNew ? WarehouseAdminQB.INSERT_WAREHOUSE_FACT : WarehouseAdminQB.UPDATE_WAREHOUSE_FACT; await _queryExecutor.ExecuteAsync(login, sql, dto, cancellationToken: ct).ConfigureAwait(false); } public async Task DeleteWarehouseFactAsync(int factId, int modifiedById, LoginDTO login, CancellationToken ct) { await _queryExecutor .ExecuteAsync(login, WarehouseAdminQB.DELETE_WAREHOUSE_FACT, new { FactId = factId, ModifiedById = modifiedById }, cancellationToken: ct) .ConfigureAwait(false); } // ─── Measure ────────────────────────────────────────────────────────── public async Task GetWarehouseMeasuresByFactAsync(int factId, LoginDTO login, CancellationToken ct) { var result = await _queryExecutor .QueryAsync(login, WarehouseAdminQB.GET_WAREHOUSE_MEASURES_BY_FACT, new { FactId = factId }, cancellationToken: ct) .ConfigureAwait(false); return JsonConvert.SerializeObject(result); } public async Task SaveWarehouseMeasureAsync(SaveWarehouseMeasureDTO dto, bool isNew, LoginDTO login, CancellationToken ct) { var sql = isNew ? WarehouseAdminQB.INSERT_WAREHOUSE_MEASURE : WarehouseAdminQB.UPDATE_WAREHOUSE_MEASURE; await _queryExecutor.ExecuteAsync(login, sql, dto, cancellationToken: ct).ConfigureAwait(false); } public async Task DeleteWarehouseMeasureAsync(int measureId, int modifiedById, LoginDTO login, CancellationToken ct) { await _queryExecutor .ExecuteAsync(login, WarehouseAdminQB.DELETE_WAREHOUSE_MEASURE, new { MeasureId = measureId, ModifiedById = modifiedById }, cancellationToken: ct) .ConfigureAwait(false); } // ─── Posting Rule ───────────────────────────────────────────────────── public async Task GetWarehousePostingRulesByFactAsync(int factId, LoginDTO login, CancellationToken ct) { var result = await _queryExecutor .QueryAsync(login, WarehouseAdminQB.GET_WAREHOUSE_POSTING_RULES_BY_FACT, new { FactId = factId }, cancellationToken: ct) .ConfigureAwait(false); return JsonConvert.SerializeObject(result); } public async Task SaveWarehousePostingRuleAsync(SaveWarehousePostingRuleDTO dto, bool isNew, LoginDTO login, CancellationToken ct) { var sql = isNew ? WarehouseAdminQB.INSERT_WAREHOUSE_POSTING_RULE : WarehouseAdminQB.UPDATE_WAREHOUSE_POSTING_RULE; await _queryExecutor.ExecuteAsync(login, sql, dto, cancellationToken: ct).ConfigureAwait(false); } public async Task DeleteWarehousePostingRuleAsync(int postingRuleId, int modifiedById, LoginDTO login, CancellationToken ct) { await _queryExecutor .ExecuteAsync(login, WarehouseAdminQB.DELETE_WAREHOUSE_POSTING_RULE, new { PostingRuleId = postingRuleId, ModifiedById = modifiedById }, cancellationToken: ct) .ConfigureAwait(false); } // ─── DIMOU ETL ──────────────────────────────────────────────────────── public async Task PopulateDimOuAsync(LoginDTO login, CancellationToken ct) { return await _queryExecutor .ExecuteAsync(login, WarehouseAdminQB.POPULATE_DIM_OU, cancellationToken: ct) .ConfigureAwait(false); } } }