using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using FrameworkDAL.CustomCode.Template; using FrameworkDAL.DTO.Menu; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.ResponseStandard; using GB5Shared.Validation; namespace FrameworkBLL.Template { public class TemplateBLL : ITemplateBLL { private readonly ITemplateDAL _TemplateDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public TemplateBLL(ITemplateDAL ITemplateDAL, AutoNumber AutoNumber, IValidation Validation) { _TemplateDAL = ITemplateDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetTemplate(int TemplateId, LoginDTO LoginDTO) { try { return await _TemplateDAL.GetTemplate(TemplateId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListTemplate(LoginDTO LoginDTO) { try { return await _TemplateDAL.GetSelectListTemplate(LoginDTO); } catch (Exception) { throw; } } public async Task SaveTemplate(TemplateDTO TemplateDTO, LoginDTO LoginDTO) { if (TemplateDTO == null) throw new ArgumentNullException(nameof(TemplateDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(TemplateDTO.TemplateCode, nameof(TemplateDTO.TemplateCode)); await _Validation.NotEmpty(TemplateDTO.TemplateName, nameof(TemplateDTO.TemplateName)); TemplateDTO.TemplateModifiedById = LoginDTO.UserId; TemplateDTO.TemplateModifiedOn = DateTime.UtcNow; int count = 1; if (TemplateDTO.TemplateId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "TEMPLATE", LoginDTO); TemplateDTO.TemplateId = autoNumberDTO.StartNumber; TemplateDTO.TemplateCreatedById = LoginDTO.UserId; TemplateDTO.TemplateCreatedOn = DateTime.UtcNow; await _TemplateDAL.SaveTemplate(TemplateDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {TemplateDTO.TemplateId}"; } else { await _TemplateDAL.UpdateTemplate(TemplateDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {TemplateDTO.TemplateId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && TemplateDTO.TemplateId > 0) await _AutoNumber.RollbackAutoNumber("TEMPLATE", TemplateDTO.TemplateId, LoginDTO); throw; } } public async Task DeleteTemplate(int TemplateId, LoginDTO LoginDTO) { try { return await _TemplateDAL.DeleteTemplate(TemplateId, LoginDTO); } catch (Exception) { throw; } } } }