using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; 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.PriceCategory; using MMDAL.DTO.PriceCategory; namespace MMBLL.PriceCategory { public class PriceCategoryBLL : IPriceCategoryBLL { private readonly IPriceCategoryDAL _PriceCategoryDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public PriceCategoryBLL(IPriceCategoryDAL IPriceCategoryDAL,AutoNumber AutoNumber, IValidation Validation) { _PriceCategoryDAL = IPriceCategoryDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetSelectListPriceCategory(CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _PriceCategoryDAL.GetSelectListPriceCategory(criteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task GetPriceCategory(int PriceCategoryId, LoginDTO LoginDTO) { try { return await _PriceCategoryDAL.GetPriceCategory(PriceCategoryId, LoginDTO); } catch (Exception) { throw; } } public async Task SavePriceCategory(PriceCategoryDTO PriceCategoryDTO, LoginDTO LoginDTO) { if (PriceCategoryDTO == null) throw new ArgumentNullException(nameof(PriceCategoryDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(PriceCategoryDTO.PriceCategoryCode, nameof(PriceCategoryDTO.PriceCategoryCode)); await _Validation.NotEmpty(PriceCategoryDTO.PriceCategoryName, nameof(PriceCategoryDTO.PriceCategoryName)); PriceCategoryDTO.PriceCategoryModifiedById = LoginDTO.UserId; PriceCategoryDTO.PriceCategoryModifiedOn = DateTime.UtcNow; int InitialId = PriceCategoryDTO.PriceCategoryId; int count = 1 + InitialId; if (InitialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "PRICECATEGORY", LoginDTO); PriceCategoryDTO.PriceCategoryId = AutoNumberDTO.StartNumber; PriceCategoryDTO.PriceCategoryCreatedById = LoginDTO.UserId; PriceCategoryDTO.PriceCategoryCreatedOn = DateTime.UtcNow; await _PriceCategoryDAL.SavePriceCategory(PriceCategoryDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {PriceCategoryDTO.PriceCategoryId}"; } else { await _PriceCategoryDAL.UpdatePriceCategory(PriceCategoryDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {PriceCategoryDTO.PriceCategoryId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && PriceCategoryDTO.PriceCategoryId > 0) await _AutoNumber.RollbackAutoNumber("PRICECATEGORY", PriceCategoryDTO.PriceCategoryId, LoginDTO); throw; } } public async Task DeletePriceCategory(int PriceCategoryId, LoginDTO LoginDTO) { try { return await _PriceCategoryDAL.DeletePriceCategory(PriceCategoryId, LoginDTO); } catch (Exception) { throw; } } } }