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 LogisticsDAL.CustomCode.Vehicle; using LogisticsDAL.DTO.Vehicle; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LogisticsBLL.Vehicle { public class VehicleBLL : IVehicleBLL { private readonly IVehicleDAL _VehicleDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public VehicleBLL(IVehicleDAL VehicleDAL, AutoNumber AutoNumber, IValidation Validation) { _VehicleDAL = VehicleDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetVehicle(int VehicleId, LoginDTO LoginDTO) { try { return await _VehicleDAL.GetVehicle(VehicleId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveVehicle(VehicleDTO VehicleDTO, LoginDTO LoginDTO) { if (VehicleDTO == null) throw new ArgumentNullException(nameof(VehicleDTO)); AutoNumberDTO? autoNumberDTO = null; try { VehicleDTO.VehicleModifiedById = LoginDTO.UserId; VehicleDTO.VehicleModifiedOn = DateOnly.FromDateTime(DateTime.UtcNow); int count = 1; if (VehicleDTO.VehicleId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "Vehicle", LoginDTO); VehicleDTO.VehicleId = autoNumberDTO.StartNumber; VehicleDTO.VehicleCreatedById = LoginDTO.UserId; VehicleDTO.VehicleCreatedOn = DateOnly.FromDateTime(DateTime.UtcNow); await _VehicleDAL.SaveVehicle(VehicleDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {VehicleDTO.VehicleId}"; } else { await _VehicleDAL.UpdateVehicle(VehicleDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {VehicleDTO.VehicleId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && VehicleDTO.VehicleId > 0) await _AutoNumber.RollbackAutoNumber("Vehicle", VehicleDTO.VehicleId, LoginDTO); throw; } } public async Task GetSelectListVehicle(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _VehicleDAL.GetSelectListVehicle(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task DeleteVehicle(int VehicleId, LoginDTO LoginDTO) { try { return await _VehicleDAL.DeleteVehicle(VehicleId, LoginDTO); } catch (Exception) { throw; } } } }