using AdminDAL.CustomCode.Company; using AdminDAL.DTO.Company; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.ResponseStandard; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using GB5Shared.Resource.Response; using GB5Shared.Validation; namespace AdminBLL.Company { public class CompanyBLL : ICompanyBLL { private readonly ICompanyDAL _CompanyDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public CompanyBLL(ICompanyDAL CompanyDAL, AutoNumber AutoNumber, IValidation validation) { _CompanyDAL = CompanyDAL; _AutoNumber = AutoNumber; _Validation = validation; } public async Task GetCompany(int CompanyId, LoginDTO LoginDTO) { try { return await _CompanyDAL.GetCompany(CompanyId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListCompany(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _CompanyDAL.GetSelectListCompany(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task SaveCompany(CompanyDTO companyDTO, LoginDTO loginDTO) { if (companyDTO == null) throw new ArgumentNullException(nameof(companyDTO)); AutoNumberDTO? autoNumberDTO = null; try { // Validations await _Validation.NotEmpty(companyDTO.CompanyCode, nameof(companyDTO.CompanyCode)); await _Validation.NotEmpty(companyDTO.CompanyName, nameof(companyDTO.CompanyName)); // Modified Information companyDTO.CompanyModifiedById = loginDTO.UserId; companyDTO.CompanyModifiedOn = DateTime.UtcNow; int count = 1; if (companyDTO.CompanyId == 0) { // Generate Auto Number autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "COMPANY", loginDTO); companyDTO.CompanyId = autoNumberDTO.StartNumber; // Created Information companyDTO.CompanyCreatedById = loginDTO.UserId; companyDTO.CompanyCreatedOn = DateTime.UtcNow; await _CompanyDAL.SaveCompany(companyDTO, loginDTO); return $"{SuccessResponse.SaveSuccessMessage} {companyDTO.CompanyId}"; } else { await _CompanyDAL.UpdateCompany(companyDTO, loginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {companyDTO.CompanyId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { // Rollback autonumber if creation failed if (autoNumberDTO != null && companyDTO.CompanyId > 0) await _AutoNumber.RollbackAutoNumber("COMPANY", companyDTO.CompanyId, loginDTO); throw; } } public async Task> DeleteCompany(int CompanyId, LoginDTO LoginDTO) { try { return await _CompanyDAL.DeleteCompany(CompanyId, LoginDTO); } catch (Exception) { throw; } } } }