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 ActionResult <DtoDeparture> GetDeparture(string id) { var cell = DepartureMapper.convertDTOToModel(_departureService.GetEntryById(id)); if (cell == null) { return(NotFound()); } return(Ok(cell)); }
public DtoDeparture GetEntryById(string id) { return(DepartureMapper.ConvertEntityToDTO(_departureRepository.GetById(id))); }
public IEnumerable <DtoDeparture> GetDepartures() { return(DepartureMapper.ConvertEntityToDTO(_departureRepository.List().ToList())); }