using FrameworkDAL.CustomCode.Formula; using FrameworkDAL.DTO.Formula; using FrameworkDAL.DTO.Region; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.ResponseStandard; using GB5Shared.Validation; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; namespace FrameworkBLL.Formula { public class FormulaBLL : IFormulaBLL { private readonly IFormulaDAL _FormulaDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public FormulaBLL(IFormulaDAL FormulaDAL, AutoNumber AutoNumber, IValidation Validation) { _FormulaDAL = FormulaDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetFormula(int FormulaId, LoginDTO LoginDTO) { try { return await _FormulaDAL.GetFormula(FormulaId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveFormula(FormulaDTO FormulaDTO, LoginDTO LoginDTO) { if (FormulaDTO == null) throw new ArgumentNullException(nameof(FormulaDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(FormulaDTO.FormulaCode, nameof(FormulaDTO.FormulaCode)); await _Validation.NotEmpty(FormulaDTO.FormulaName, nameof(FormulaDTO.FormulaName)); FormulaDTO.FormulaModifiedById = LoginDTO.UserId; FormulaDTO.FormulaModifiedOn = DateTime.UtcNow; int count = 1; if (FormulaDTO.FormulaId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "Formula", LoginDTO); FormulaDTO.FormulaId = autoNumberDTO.StartNumber; FormulaDTO.FormulaCreatedById = LoginDTO.UserId; FormulaDTO.FormulaCreatedOn = DateTime.UtcNow; await _FormulaDAL.SaveFormula(FormulaDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {FormulaDTO.FormulaId}"; } else { await _FormulaDAL.UpdateFormula(FormulaDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {FormulaDTO.FormulaId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && FormulaDTO.FormulaId > 0) await _AutoNumber.RollbackAutoNumber("Formula", FormulaDTO.FormulaId, LoginDTO); throw; } } public async Task GetSelectListFormula(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _FormulaDAL.GetSelectListFormula(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task DeleteFormula(int FormulaId, LoginDTO LoginDTO) { try { return await _FormulaDAL.DeleteFormula(FormulaId, LoginDTO); } catch (Exception) { throw; } } } }