private void GetCurrentPricing(ParkingStayModel parkingStay)
        {
            PriceControlModel currentPrice = _context.PriceControlList.First(p => parkingStay.Entry.Date >= p.InitialDate.Date && parkingStay.Exit.Value.Date <= p.FinalDate.Date);

            if (currentPrice != null)
            {
                parkingStay.CurrentPrice           = currentPrice.Price;
                parkingStay.CurrentAdditionalPrice = currentPrice.AdditionalPrice;
            }
        }
        public IActionResult Payment(long id)
        {
            ParkingStayModel model = _context.ParkingStayList.First(m => m.Id == id);

            if (model == null)
            {
                return(Redirect("Index"));
            }

            GetCurrentPricing(model);

            return(View(model));
        }
        public IActionResult RegisterEntry(ParkingStayModel parkingEntry)
        {
            var parkingStay = new ParkingStayModel()
            {
                Entry        = parkingEntry.Entry,
                VehiclePlate = parkingEntry.VehiclePlate
            };

            _context.ParkingStayList.Add(parkingStay);
            _context.SaveChanges();

            return(Redirect("Index"));
        }
 public double CalculateTotalValue(ParkingStayModel parkingStay)
 {
     if (parkingStay.Duration.TotalMinutes <= 30)
     {
         return(parkingStay.CurrentPrice / 2);
     }
     else if (parkingStay.Duration.TotalMinutes > 30 && parkingStay.Duration.TotalMinutes <= 70)
     {
         return(parkingStay.CurrentPrice);
     }
     else
     {
         var hoursToCalculate = parkingStay.Duration.Minutes <= 10 ? parkingStay.Duration.TotalHours : parkingStay.Duration.TotalHours - 1;
         return(Math.Round(hoursToCalculate) * parkingStay.CurrentPrice);
     }
 }
        public IActionResult RegisterExit(ParkingExitModel parkingExit)
        {
            ParkingStayModel parkingStay = _context.ParkingStayList.First(m => m.Id == parkingExit.Id);

            if (parkingStay == null)
            {
                return(Redirect("Index"));
            }

            parkingStay.Exit = parkingExit.Exit;

            GetCurrentPricing(parkingStay);
            parkingStay.TotalValue = _priceCalculator.CalculateTotalValue(parkingStay);

            _context.Entry(parkingStay).State = EntityState.Modified;
            _context.SaveChanges();

            return(RedirectToAction("Payment", "Parking", new { id = parkingStay.Id }));
        }