Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        public static DtoDeparture convertModelToDTO(DepartureModel departureModel)
        {
            DtoDeparture dtoDeparture = new DtoDeparture();

            if (departureModel != null)
            {
                dtoDeparture.IdVehicle = departureModel.IdVehicle;
            }

            return(dtoDeparture);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }