public ActionResult <IEnumerable <DtoDeparture> > SaveDeparture(DepartureModel departure) { DtoDeparture added = new DtoDeparture(); if (ModelState.IsValid) { try { added = _departureService.RegistryDeparture(DepartureMapper.convertModelToDTO(departure)); } catch (Exception e) { if (e is AppException) { return(UnprocessableEntity(e.Message)); } else { return(BadRequest(e.Message)); } } } return(CreatedAtAction(nameof(GetDeparture), new { id = added.Id }, added)); }
public DtoDeparture RegistryDeparture(DtoDeparture departure) { double totalCharge; var departureTime = DateTime.Now; EntryEntity lastEntry = GetInfoEntryByVehicleId(departure.IdVehicle); if (lastEntry == null) { throw new DepartureException("No existe un registro de entrada para el vehículo"); } RateEntity rateEntity = _rateService.GetRateByVehicleType(lastEntry.IdVehicleType); if (rateEntity == null) { throw new DepartureException("No existe una tarifa configurada para el tipo de vehículo"); } var difference = departureTime - lastEntry.EntryTime;//Math.Ceiling((departureTime - lastEntry.EntryTime).TotalHours); int days = difference.Days; double hours = Math.Ceiling(difference.TotalHours); if (days < 1) { if (hours >= rateEntity.DayChargeFrom) { totalCharge = rateEntity.DayValue; } else { totalCharge = rateEntity.HourValue * hours; } } else { var additionalHours = hours % 24; totalCharge = days * rateEntity.DayValue; totalCharge += additionalHours * rateEntity.HourValue; } if (lastEntry.IdVehicleType == VehicleTypeEnum.motorcycle) { bool isParsed = short.TryParse(lastEntry.CC, out short cc); if (!isParsed) { throw new DepartureException("No fue posible determinar el cilindraje del vehículo"); } if (cc >= rateEntity.SpecialChargeFromCC) { totalCharge += rateEntity.SpecialChargeValue; } } var entryEntity = _departureRepository.Add(DepartureMapper.ConvertDTOToEntity(departure, lastEntry, totalCharge)); _cellService.IncreaseCell(lastEntry.IdVehicleType, 1); return(DepartureMapper.ConvertEntityToDTO(entryEntity)); }
public static DtoDeparture convertModelToDTO(DepartureModel departureModel) { DtoDeparture dtoDeparture = new DtoDeparture(); if (departureModel != null) { dtoDeparture.IdVehicle = departureModel.IdVehicle; } return(dtoDeparture); }
public static DtoDeparture ConvertEntityToDTO(DepartureEntity departureEntity) { DtoDeparture dtoDeparture = new DtoDeparture(); if (departureEntity != null) { dtoDeparture.Id = departureEntity.Id; dtoDeparture.DepartureTime = departureEntity.DepartureTime; dtoDeparture.RateValue = departureEntity.RateTotalValue; dtoDeparture.IdVehicle = departureEntity.IdVehicle; } return(dtoDeparture); }
public void GetEntryByBadId_ShouldReturn_DtoEmpty() { // Arrange var newId = Guid.NewGuid().ToString(); _departureRepository.Setup(r => r.GetById(newId)); var entryService = new DepartureService(_departureRepository.Object, _entryRepository.Object, _rateService.Object, _cellService.Object); // Act DtoDeparture result = entryService.GetEntryById(id: newId); // Assert Assert.IsNull(result.Id); }
public static DepartureEntity ConvertDTOToEntity(DtoDeparture dtoDeparture, EntryEntity entryEntity, double rateTotal) { DepartureEntity departureEntity = new DepartureEntity(); if (dtoDeparture != null) { departureEntity.DepartureTime = DateTime.Now; departureEntity.IdVehicle = dtoDeparture.IdVehicle; departureEntity.Id = Guid.NewGuid().ToString(); departureEntity.IdEntry = entryEntity.Id; departureEntity.RateTotalValue = rateTotal; } return(departureEntity); }
public static DepartureModel convertDTOToModel(DtoDeparture dtoDeparture) { DepartureModel departureModel = new DepartureModel(); if (dtoDeparture != null) { departureModel.IdVehicle = dtoDeparture.IdVehicle; departureModel.Id = dtoDeparture.Id; departureModel.DepartureTime = dtoDeparture.DepartureTime; departureModel.RateTotalValue = dtoDeparture.RateValue; departureModel.EntryTime = dtoDeparture.EntryTime; departureModel.Days = dtoDeparture.Days; departureModel.Hours = dtoDeparture.Hours; } return(departureModel); }
public void GetEntryById_ShouldReturn_DtoDepartureEntity() { // Arrange DepartureEntity departureEntity = new DepartureEntityBuilder() .WithId(Guid.NewGuid().ToString()) .Build(); _departureRepository.Setup(r => r.GetById(departureEntity.Id)).Returns(departureEntity); var entryService = new DepartureService(_departureRepository.Object, _entryRepository.Object, _rateService.Object, _cellService.Object); // Act DtoDeparture result = entryService.GetEntryById(id: departureEntity.Id); // Assert Assert.IsNotNull(result); }