using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using AdminDAL.CustomCode.Branch; using AdminDAL.DTO.Branch; 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; namespace AdminBLL.Branch { public class BranchBLL : IBranchBLL { private readonly IBranchDAL _BranchDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public BranchBLL(IBranchDAL IBranchDAL, AutoNumber AutoNumber, IValidation Validation) { _BranchDAL = IBranchDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetBranch(int BranchId, LoginDTO LoginDTO) { try { return await _BranchDAL.GetBranch(BranchId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListBranch(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _BranchDAL.GetSelectListBranch(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task SaveBranch(BranchDTO BranchDTO, LoginDTO LoginDTO) { if (BranchDTO == null) throw new ArgumentNullException(nameof(BranchDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(BranchDTO.BranchCode, nameof(BranchDTO.BranchCode)); await _Validation.NotEmpty(BranchDTO.BranchName, nameof(BranchDTO.BranchName)); await _Validation.NotEmpty(BranchDTO.BranchShortName, nameof(BranchDTO.BranchShortName)); BranchDTO.BranchModifiedById = LoginDTO.UserId; BranchDTO.BranchModifiedOn = DateTime.UtcNow; int count = 1; if (BranchDTO.BranchId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "BRANCH", LoginDTO); BranchDTO.BranchId = autoNumberDTO.StartNumber; BranchDTO.BranchCreatedById = LoginDTO.UserId; BranchDTO.BranchCreatedOn = DateTime.UtcNow; await _BranchDAL.SaveBranch(BranchDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {BranchDTO.BranchId}"; } else { await _BranchDAL.UpdateBranch(BranchDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {BranchDTO.BranchId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && BranchDTO.BranchId > 0) await _AutoNumber.RollbackAutoNumber("BRANCH", BranchDTO.BranchId, LoginDTO); throw; } } public async Task DeleteBranch(int BranchId, LoginDTO LoginDTO) { try { return await _BranchDAL.DeleteBranch(BranchId, LoginDTO); } catch (Exception) { throw; } } } }