using AdminDAL.CustomCode.Company; using AdminDAL.CustomCode.Period; using AdminDAL.DTO.Period; 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 Microsoft.AspNetCore.Diagnostics; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AdminBLL.Period { public class PeriodBLL : IPeriodBLL { private readonly IPeriodDAL _PeriodDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public PeriodBLL(IPeriodDAL PeriodDAL, AutoNumber AutoNumber, IValidation Validation) { _PeriodDAL = PeriodDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetPeriod(int PeriodId, LoginDTO LoginDTO) { try { return await _PeriodDAL.GetPeriod(PeriodId, LoginDTO); } catch (Exception) { throw; } } public async Task SavePeriod(PeriodDTO PeriodDTO, LoginDTO LoginDTO) { if (PeriodDTO == null) throw new ArgumentNullException(nameof(PeriodDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(PeriodDTO.PeriodCode, nameof(PeriodDTO.PeriodCode)); await _Validation.NotEmpty(PeriodDTO.PeriodName, nameof(PeriodDTO.PeriodName)); PeriodDTO.PeriodModifiedById = LoginDTO.UserId; PeriodDTO.PeriodModifiedOn = DateTime.UtcNow; int count = 1; if (PeriodDTO.PeriodId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "PERIOD", LoginDTO); PeriodDTO.PeriodId = autoNumberDTO.StartNumber; PeriodDTO.PeriodCreatedById = LoginDTO.UserId; PeriodDTO.PeriodCreatedOn = DateTime.UtcNow; await _PeriodDAL.SavePeriod(PeriodDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {PeriodDTO.PeriodId}"; } else { await _PeriodDAL.UpdatePeriod(PeriodDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {PeriodDTO.PeriodId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && PeriodDTO.PeriodId > 0) await _AutoNumber.RollbackAutoNumber("PERIOD", PeriodDTO.PeriodId, LoginDTO); throw; } } public async Task DeletePeriod(int PeriodId, LoginDTO LoginDTO) { try { return await _PeriodDAL.DeletePeriod(PeriodId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListPeriod(CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _PeriodDAL.GetSelectListPeriod(criteriaDTO, LoginDTO); } catch (Exception) { throw; } } } }