using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using MMDAL.CustomCode.ItemTemplatePart; using MMDAL.DTO.ItemTemplate; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.Resource.Response; using System.ComponentModel.DataAnnotations; using GB5Shared.Validation; namespace MMBLL.ItemTemplatePart { public class ItemTemplatePartBLL : IItemTemplatePartBLL { private readonly IItemTemplatePartDAL _ItemTemplatePartDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public ItemTemplatePartBLL(IItemTemplatePartDAL ItemTemplatePartDAL, AutoNumber AutoNumber, IValidation Validation) { _ItemTemplatePartDAL = ItemTemplatePartDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetItemTemplatePart(int ItemTemplatePartId, LoginDTO LoginDTO) { try { return await _ItemTemplatePartDAL.GetItemTemplatePart(ItemTemplatePartId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveItemTemplatePart(ItemTemplatePartDTO ItemTemplatePartDTO, LoginDTO LoginDTO) { if (ItemTemplatePartDTO == null) throw new ArgumentNullException(nameof(ItemTemplatePartDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(ItemTemplatePartDTO.ItemTemplatePartCode, nameof(ItemTemplatePartDTO.ItemTemplatePartCode)); await _Validation.NotEmpty(ItemTemplatePartDTO.ItemTemplatePartName, nameof(ItemTemplatePartDTO.ItemTemplatePartName)); ItemTemplatePartDTO.ItemTemplatePartModifiedById = LoginDTO.UserId; ItemTemplatePartDTO.ItemTemplatePartModifiedOn = DateTime.UtcNow; int initialId = ItemTemplatePartDTO.ItemTemplatePartId; int count = 1 + initialId; if (initialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "ITEMTEMPLATEPART", LoginDTO); ItemTemplatePartDTO.ItemTemplatePartId = AutoNumberDTO.StartNumber; ItemTemplatePartDTO.ItemTemplatePartCreatedById = LoginDTO.UserId; ItemTemplatePartDTO.ItemTemplatePartCreatedOn = DateTime.UtcNow; await _ItemTemplatePartDAL.SaveItemTemplatePart(ItemTemplatePartDTO, LoginDTO); return $"{SuccessResponse.SaveSuccesfullyCode_Name} {ItemTemplatePartDTO.ItemTemplatePartCode} &{ItemTemplatePartDTO.ItemTemplatePartCreatedByName}"; } else { await _ItemTemplatePartDAL.UpdateItemTemplatePart(ItemTemplatePartDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessfullyCode_Name} {ItemTemplatePartDTO.ItemTemplatePartCode} &{ItemTemplatePartDTO.ItemTemplatePartCreatedByName}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && ItemTemplatePartDTO.ItemTemplatePartId > 0) await _AutoNumber.RollbackAutoNumber("ITEMTEMPLATEPART", ItemTemplatePartDTO.ItemTemplatePartId, LoginDTO); throw; } } public async Task GetSelectListItemTemplatePart(CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _ItemTemplatePartDAL.GetSelectListItemTemplatePart(criteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task DeleteItemTemplatePart(int ItemTemplatePartId, LoginDTO LoginDTO) { try { return await _ItemTemplatePartDAL.DeleteItemTemplatePart(ItemTemplatePartId, LoginDTO); } catch (Exception) { throw; } } } }