using FrameworkDAL.CustomCode.CommandPanel; using FrameworkDAL.DTO.CommandPanel; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using System; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; namespace FrameworkBLL.CommandPanel { public class CommandPanelBLL : ICommandPanelBLL { private readonly ICommandPanelDAL _commandPanelDAL; private readonly AutoNumber _autoNumber; private readonly IValidation _validation; public CommandPanelBLL( ICommandPanelDAL commandPanelDAL, AutoNumber autoNumber, IValidation validation) { _commandPanelDAL = commandPanelDAL; _autoNumber = autoNumber; _validation = validation; } public async Task GetCommandPanel(int commandPanelId, LoginDTO loginDTO) { try { return await _commandPanelDAL.GetCommandPanel(commandPanelId, loginDTO); } catch (Exception) { throw; } } public async Task SaveCommandPanel(CommandPanelDTO commandPanelDTO, LoginDTO loginDTO) { if (commandPanelDTO == null) throw new ArgumentNullException(nameof(commandPanelDTO)); AutoNumberDTO? autoNumberDTO = null; try { // 🔹 Validation (change fields as per your table) await _validation.NotEmpty(commandPanelDTO.KeyString, nameof(commandPanelDTO.KeyString)); commandPanelDTO.TenantId = loginDTO.ClientId; commandPanelDTO.ModifiedById = loginDTO.UserId; commandPanelDTO.ModifiedOn = DateTime.UtcNow; int count = 1; if (commandPanelDTO.CommandPanelId == 0) { // 🔹 AutoNumber autoNumberDTO = await _autoNumber.GetAutoNumber(count, "CommandPanel", loginDTO); commandPanelDTO.CommandPanelId = autoNumberDTO.StartNumber; commandPanelDTO.CreatedById = loginDTO.UserId; commandPanelDTO.CreatedOn = DateTime.UtcNow; await _commandPanelDAL.SaveCommandPanel(commandPanelDTO, loginDTO); return $"{SuccessResponse.SaveSuccessMessage} {commandPanelDTO.CommandPanelId}"; } else { await _commandPanelDAL.UpdateCommandPanel(commandPanelDTO, loginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {commandPanelDTO.CommandPanelId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && commandPanelDTO.CommandPanelId > 0) { await _autoNumber.RollbackAutoNumber("CommandPanel", commandPanelDTO.CommandPanelId, loginDTO); } throw; } } public async Task GetSelectListCommandPanel(int firstNumber, int maxResult, CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _commandPanelDAL.GetSelectListCommandPanel(firstNumber, maxResult, criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task DeleteCommandPanel(int commandPanelId, LoginDTO loginDTO) { try { return await _commandPanelDAL.DeleteCommandPanel(commandPanelId, loginDTO); } catch (Exception) { throw; } } public async Task GetAllCommandPanel(LoginDTO loginDTO) { try { return await _commandPanelDAL.GetAllCommandPanel(loginDTO); } catch (Exception) { throw; } } } }