using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using MMDAL.CustomCode.MRPPartyType; using MMDAL.DTO.MRPPartyType; namespace MMBLL.MRPPartyType { public class MRPPartyTypeBLL : IMRPPartyTypeBLL { private readonly IMRPPartyTypeDAL _MRPPartyTypeDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public MRPPartyTypeBLL(IMRPPartyTypeDAL MRPPartyTypeDAL, AutoNumber AutoNumber, IValidation Validation) { _MRPPartyTypeDAL = MRPPartyTypeDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetMRPPartyType(int MRPPartyTypeId, LoginDTO LoginDTO) { try { return await _MRPPartyTypeDAL.GetMRPPartyType(MRPPartyTypeId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListMRPPartyType(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _MRPPartyTypeDAL.GetSelectListMRPPartyType(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task SaveMRPPartyType(MRPPartyTypeDTO MRPPartyTypeDTO, LoginDTO LoginDTO) { if (MRPPartyTypeDTO == null) throw new ArgumentNullException(nameof(MRPPartyTypeDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(MRPPartyTypeDTO.MRPPartyTypeCode, nameof(MRPPartyTypeDTO.MRPPartyTypeCode)); await _Validation.NotEmpty(MRPPartyTypeDTO.MRPPartyTypeName, nameof(MRPPartyTypeDTO.MRPPartyTypeName)); MRPPartyTypeDTO.MRPPartyTypeModifiedById = LoginDTO.UserId; MRPPartyTypeDTO.MRPPartyTypeModifiedOn = DateTime.UtcNow; bool isNew = MRPPartyTypeDTO.MRPPartyTypeId == 0; if (isNew) { int detailCount = MRPPartyTypeDTO.MRPPartyTypeDetailArray?.Count ?? 0; int totalRequired = 1 + detailCount; autoNumberDTO = await _AutoNumber.GetNumberAsync(totalRequired, "MRPPARTYTYPE", LoginDTO); int nextId = autoNumberDTO.StartNumber; MRPPartyTypeDTO.MRPPartyTypeId = nextId++; MRPPartyTypeDTO.MRPPartyTypeCreatedById = LoginDTO.UserId; MRPPartyTypeDTO.MRPPartyTypeCreatedOn = DateTime.UtcNow; if (MRPPartyTypeDTO.MRPPartyTypeDetailArray?.Count > 0) { foreach (var detail in MRPPartyTypeDTO.MRPPartyTypeDetailArray) { detail.MRPPartyTypeDetailId = nextId++; detail.MRPPartyTypeId = MRPPartyTypeDTO.MRPPartyTypeId; } } await _MRPPartyTypeDAL.SaveMRPPartyType(MRPPartyTypeDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {MRPPartyTypeDTO.MRPPartyTypeId}"; } else { await _MRPPartyTypeDAL.UpdateMRPPartyType(MRPPartyTypeDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {MRPPartyTypeDTO.MRPPartyTypeId}"; } } catch { if (autoNumberDTO != null && MRPPartyTypeDTO.MRPPartyTypeId > 0) { await _AutoNumber.RollbackAutoNumber("MRPPARTYTYPE", autoNumberDTO.StartNumber, LoginDTO); } throw; } } public async Task DeleteMRPPartyType(int MRPPartyTypeId, LoginDTO LoginDTO) { try { var detailsResult = await _MRPPartyTypeDAL.DeleteMRPPartyTypeDetail(MRPPartyTypeId, LoginDTO); if (detailsResult <= 0) return $"{ErrorResponse.DeleteNotFoundMessage}"; var parentResult = await _MRPPartyTypeDAL.DeleteMRPPartyType(MRPPartyTypeId, LoginDTO); if (parentResult <= 0) return $"{ErrorResponse.DeleteNotFoundMessage}"; return $"{SuccessResponse.DeleteSuccessMessage}"; } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.DeleteErrorMessage}"); throw new Exception(Error); } } } }