using CostingDAL.CustomCode.CostAnalysis; using CostingDAL.DTO; 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 System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CostingBLL.CostAnalysis { public class CostAnalysisBLL : ICostAnalysisBLL { private readonly ICostAnalysisDAL _CostAnalysisDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public CostAnalysisBLL(ICostAnalysisDAL CostAnalysisDAL, AutoNumber AutoNumber, IValidation Validation) { _CostAnalysisDAL = CostAnalysisDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetCostAnalysis(int CostAnalysisId, LoginDTO LoginDTO) { try { return await _CostAnalysisDAL.GetCostAnalysis(CostAnalysisId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveCostAnalysis(CostAnalysisDTO CostAnalysisDTO, LoginDTO LoginDTO) { if (CostAnalysisDTO == null) throw new ArgumentNullException(nameof(CostAnalysisDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(CostAnalysisDTO.CostAnalysisCode, nameof(CostAnalysisDTO.CostAnalysisCode)); await _Validation.NotEmpty(CostAnalysisDTO.CostAnalysisName, nameof(CostAnalysisDTO.CostAnalysisName)); CostAnalysisDTO.CostAnalysisModifiedById = LoginDTO.UserId; CostAnalysisDTO.CostAnalysisModifiedOn = DateTime.UtcNow; int count = 1; if (CostAnalysisDTO.CostAnalysisId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "COSTANALYSIS", LoginDTO); CostAnalysisDTO.CostAnalysisId = autoNumberDTO.StartNumber; CostAnalysisDTO.CostAnalysisCreatedById = LoginDTO.UserId; CostAnalysisDTO.CostAnalysisCreatedOn = DateTime.UtcNow; await _CostAnalysisDAL.SaveCostAnalysis(CostAnalysisDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {CostAnalysisDTO.CostAnalysisId}"; } else { await _CostAnalysisDAL.UpdateCostAnalysis(CostAnalysisDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {CostAnalysisDTO.CostAnalysisId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && CostAnalysisDTO.CostAnalysisId > 0) await _AutoNumber.RollbackAutoNumber("COSTANALYSIS", CostAnalysisDTO.CostAnalysisId, LoginDTO); throw; } } public async Task DeleteCostAnalysis(int CostAnalysisId, LoginDTO LoginDTO) { try { return await _CostAnalysisDAL.DeleteCostAnalysis(CostAnalysisId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListCostAnalysis(CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _CostAnalysisDAL.GetSelectListCostAnalysis(criteriaDTO, LoginDTO); } catch (Exception) { throw; } } } }