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 DtoDeparture GetEntryById(string id)
 {
     return(DepartureMapper.ConvertEntityToDTO(_departureRepository.GetById(id)));
 }
 public IEnumerable <DtoDeparture> GetDepartures()
 {
     return(DepartureMapper.ConvertEntityToDTO(_departureRepository.List().ToList()));
 }