Example #1
0
        // GET: Statistics
        public async Task <IActionResult> Index()
        {
            var vehicles = await _context.ParkedVehicle.ToListAsync();

            var currentParkedVehicles = vehicles.Where(a => a.TimeStampCheckOut == null).ToList();

            double totalCurrentParkedVehicleMinutes = 0;
            int    totalNumberOfWheels = 0;
            var    currentTime         = DateTime.Now;

            currentParkedVehicles.ForEach(a => {
                totalNumberOfWheels += a.NumberOfWheels;
                var timeSpan         = currentTime - a.TimeStampCheckIn;
                totalCurrentParkedVehicleMinutes += timeSpan.TotalMinutes;
            });

            var statisticsModel = new StatisticsViewModel()
            {
                TotalNumberOfParkedVehicles  = currentParkedVehicles.Count,
                TotalNumberOfWheels          = totalNumberOfWheels,
                CurrentSumMinutes            = totalCurrentParkedVehicleMinutes,
                CurrentSumParkingFeesDisplay = ParkingFee.DisplayAsCurrency(totalCurrentParkedVehicleMinutes) + $" (Minutes: {Math.Round(totalCurrentParkedVehicleMinutes, 2)}) "
            };

            return(View(statisticsModel));
        }
        public void ParkingFee_ShouldBeValidMinMaxHoursAndCost()
        {
            ParkingFee sut = new ParkingFee(0, 2, 5);

            Assert.That(sut.GetMinTimeInHours(), Is.EqualTo(0));
            Assert.That(sut.GetMaxTimeInHours(), Is.EqualTo(2));
            Assert.That(sut.GetCost(), Is.EqualTo(5));
        }
Example #3
0
        public ParkingFee ValidateVehicleClamped(string accessToken, ParkingDetails objParkingDetails)
        {
            ParkingFee obj_ParkingFee = new ParkingFee();

            try
            {
                string baseUrl = Convert.ToString(App.Current.Properties["BaseURL"]);
                using (var client = new HttpClient())
                {
                    client.BaseAddress = new Uri(baseUrl);
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    // Add the Authorization header with the AccessToken.
                    client.DefaultRequestHeaders.Add("Authorization", "bearer  " + accessToken);
                    // create the URL string.
                    string url = "api/InstaConsumer/ValidateVehicleClamped";
                    // make the request

                    var json    = JsonConvert.SerializeObject(objParkingDetails);
                    var content = new StringContent(json, Encoding.UTF8, "application/json");
                    HttpResponseMessage response = client.PostAsync(url, content).Result;
                    if (response.IsSuccessStatusCode)
                    {
                        string jsonString = response.Content.ReadAsStringAsync().Result;
                        if (jsonString != null)
                        {
                            APIResponse apiResult = JsonConvert.DeserializeObject <APIResponse>(jsonString);

                            if (apiResult.Result)
                            {
                                obj_ParkingFee = JsonConvert.DeserializeObject <ParkingFee>(Convert.ToString(apiResult.Object));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return(obj_ParkingFee);
        }
        public async Task <IActionResult> Receipt(ParkedVehicle vehout)
        {
            var vehicleType = await _context.VehicleType.FirstOrDefaultAsync(a => a.Id == vehout.VehicleTypeId);

            var member = await _context.Member.FirstOrDefaultAsync(a => a.Id == vehout.MemberId);

            var     tin       = vehout.TimeStampCheckIn;
            var     tout      = vehout.TimeStampCheckOut ?? DateTime.Now;
            Receipt prReceipt = new Receipt
            {
                MemberName        = member.Name,
                LicenseNumber     = vehout.LicenseNumber,
                Type              = vehicleType.Name,
                Color             = vehout.Color,
                Model             = vehout.Model,
                NumberOfWheels    = vehout.NumberOfWheels,
                TimeStampCheckIn  = tin,
                TimeStampCheckOut = tout,
                //Cash = Math.Round((tout - tin).TotalMinutes),
                FeeDisplay = ParkingFee.DisplayAsCurrency(tin, tout)
            };

            return(View(prReceipt));
        }
        public void GetParkingFee(int locationParkingLotID, int duration)
        {
            try
            {
                IsOnline = VerifyInternet();

                if (IsOnline)
                {
                    ParkingDetails objParkingDetails = new ParkingDetails();
                    objParkingDetails.LocationParkingLotID = locationParkingLotID;
                    objParkingDetails.VehicleTypeID        = VehicleTypeID;
                    objParkingDetails.ParkingHours         = duration;
                    objParkingDetails.Amount = Convert.ToDecimal(objCustomerParkingSlotDetails.PriceAmount);

                    if (App.Current.Properties.ContainsKey("apitoken"))
                    {
                        var        json      = JsonConvert.SerializeObject(objParkingDetails);
                        var        content   = new StringContent(json, Encoding.UTF8, "application/json");
                        ParkingFee resultObj = dal_LocationParkingLot.GetParkingFee(Convert.ToString(App.Current.Properties["apitoken"]), objParkingDetails);

                        if (resultObj.VehicleTypeID != 0)
                        {
                            lblHourlyPrice.Text = resultObj.HourlyPrice;

                            double duration_double = 0;
                            currentTime = DateTime.Now;

                            DateTime LotOpenTime  = DateTime.Parse(resultObj.LotOpenTime);
                            DateTime LotCloseTime = DateTime.Parse(resultObj.LotCloseTime);

                            objCustomerParkingSlotDetails.LotOpenTime  = LotOpenTime;
                            objCustomerParkingSlotDetails.LotCloseTime = LotCloseTime;

                            if (objCustomerParkingSlotDetails.To >= LotCloseTime)
                            {
                                lblExpiryMessage.Text = Convert.ToString(LotCloseTime.ToString("hh:mm tt"));
                                stkExpiry.IsVisible   = false;
                                stkPrice.IsVisible    = false;
                                btnPay.IsVisible      = false;
                                btnCheckIn.IsVisible  = false;
                                DisplayAlert("", "Parking Lot closes at " + Convert.ToString(Convert.ToDateTime(LotCloseTime).ToString("hh:mm tt")).ToLower() + " today", "Ok");
                                return;
                            }
                            else
                            {
                                TimeSpan ts = LotCloseTime - currentTime;
                                duration_double     = ts.TotalHours;
                                stkTiming.IsVisible = duration_double <= 1 ? false : true;
                                stkTimingFlag       = stkTiming.IsVisible;
                                duration            = stkTimingFlag ? duration : Duration;
                            }

                            ExpectedEndTime_date = objCustomerParkingSlotDetails.To.AddHours(duration) <= LotCloseTime?objCustomerParkingSlotDetails.To.AddHours(duration) : LotCloseTime;

                            lblExpiryMessage.Text = ExpectedEndTime_date.ToString("hh:mm tt");
                            lblParkingFee.Text    = Convert.ToString(resultObj.Price.ToString("N2"));
                            Duration  = duration;
                            IsFullDay = resultObj.IsFullDay;

                            stkExpiry.IsVisible = true;
                            stkPrice.IsVisible  = true;
                            btnPay.IsVisible    = true;
                        }
                        else
                        {
                            btnPay.IsVisible      = false;
                            lblParkingFee.Text    = "0";
                            lblExpiryMessage.Text = Convert.ToString(currentTime.AddHours(Duration).ToString("hh:mm tt"));
                            DisplayAlert("Result - GetParkingFee", "Pricing and Lot timings not available", "Ok");
                        }
                    }
                }
                else
                {
                    DisplayAlert("", "Please check your network connectivity", "Ok");
                }
            }
            catch (Exception ex)
            {
                btnPay.IsVisible   = false;
                lblParkingFee.Text = "0";
                DisplayAlert("Failed - GetParkingFee", Convert.ToString(ex.Message), "Ok");
            }
        }
        public ParkingFee ValidateVehicleClamped()
        {
            ParkingFee resultObj = new ParkingFee();

            try
            {
                IsOnline = VerifyInternet();

                if (IsOnline)
                {
                    using (HttpClient client = new HttpClient())
                    {
                        client.BaseAddress = new Uri(Convert.ToString(App.Current.Properties["BaseURL"]));
                        // We want the response to be JSON.
                        client.DefaultRequestHeaders.Accept.Clear();
                        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                        List <System.Collections.Generic.KeyValuePair <string, string> > postData = new List <KeyValuePair <string, string> >();
                        postData.Add(new KeyValuePair <string, string>("grant_type", "password"));
                        postData.Add(new KeyValuePair <string, string>("username", "Kiran"));
                        postData.Add(new KeyValuePair <string, string>("password", "1234"));
                        FormUrlEncodedContent content = new FormUrlEncodedContent(postData);
                        // Post to the Server and parse the response.
                        var response = client.PostAsync("Token", content).Result;
                        if (response.IsSuccessStatusCode)
                        {
                            var        jsonString   = response.Content.ReadAsStringAsync();
                            OAuthToken responseData = JsonConvert.DeserializeObject <OAuthToken>(jsonString.Result);
                            string     Access_Token = responseData.access_token;
                            App.Current.Properties["apitoken"] = Access_Token;
                        }
                    }

                    ParkingDetails objParkingDetails = new ParkingDetails();
                    objParkingDetails.CustomerParkingSlotID = objCustomerParkingSlotDetails.CustomerParkingSlotID;
                    objParkingDetails.ActualEndTime         = objCustomerParkingSlotDetails.To.ToString("MM/dd/yyyy hh:mm tt");
                    objParkingDetails.CurrentTime           = DateTime.Now.ToString("MM/dd/yyyy hh:mm tt");
                    objParkingDetails.LocationParkingLotID  = objCustomerParkingSlotDetails.LocationParkingLotID;
                    objParkingDetails.VehicleTypeID         = objCustomerParkingSlotDetails.VehicleTypeID;
                    objParkingDetails.Amount = Convert.ToDecimal(objCustomerParkingSlotDetails.PriceAmount);

                    TimeSpan ts       = Convert.ToDateTime(DateTime.Now) - Convert.ToDateTime(objCustomerParkingSlotDetails.To);
                    int      duration = ts.Hours;
                    objParkingDetails.ParkingHours = duration;

                    if (App.Current.Properties.ContainsKey("apitoken"))
                    {
                        var json    = JsonConvert.SerializeObject(objParkingDetails);
                        var content = new StringContent(json, Encoding.UTF8, "application/json");
                        resultObj = dal_LocationParkingLot.ValidateVehicleClamped(Convert.ToString(App.Current.Properties["apitoken"]), objParkingDetails);
                    }
                }
                else
                {
                    DisplayAlert("", "Please check your network connectivity", "Ok");
                }
            }
            catch (Exception ex)
            {
                lblOverStayFee.Text = "0";
                lblClampFee.Text    = "0";
                lblTotal.Text       = "0";
                DisplayAlert("Failed - ValidateVehicleClamped", Convert.ToString(ex.Message), "Ok");
            }
            return(resultObj);
        }
        private async void stk_CheckOutTapped(object sender, EventArgs e)
        {
            try
            {
                IsOnline = VerifyInternet();

                if (IsOnline)
                {
                    ParkingFee objParkingFee = new ParkingFee();
                    this.IsBusy = true;
                    DateTime ActualEndTime = Convert.ToDateTime(objCustomerParkingSlotDetails.To);

                    TimeSpan ds;
                    int      days;
                    currentTime = DateTime.Now;
                    ds          = (currentTime.Date - Convert.ToDateTime(objCustomerParkingSlotDetails.To).Date);
                    days        = Convert.ToInt32(ds.Days);

                    ShowLoading(true);

                    await Task.Run(() =>
                    {
                        objParkingFee = ValidateVehicleClamped();
                    });

                    if (objParkingFee.CustomerParkingSlotID != 0 && objParkingFee.StatusID != 5 && objParkingFee.StatusID != 6)
                    {
                        lblWarning.Text     = "'" + Convert.ToString(objParkingFee.ViolationWarningCount) + "' Warning(s) Completed";
                        lblOverStayFee.Text = objParkingFee.Price == 0 ? "0" : Convert.ToString(decimal.Truncate(objParkingFee.Price));
                        lblClampFee.Text    = objParkingFee.ClampFee == 0 ? "0" : Convert.ToString(decimal.Truncate(objParkingFee.ClampFee));
                        lblTotal.Text       = Convert.ToDecimal(objParkingFee.Price) + Convert.ToDecimal(objParkingFee.ClampFee) == 0 ? "0" :
                                              Convert.ToString(decimal.Truncate((Convert.ToDecimal(objParkingFee.Price) + Convert.ToDecimal(objParkingFee.ClampFee))));
                        lblClampReason.Text = objParkingFee.ClampReason;

                        if (objParkingFee.IsClamp)
                        {
                            stkSupervisor.IsVisible   = true;
                            stkClampWarning.IsVisible = true;
                            IsClamp = objParkingFee.IsClamp;
                            SupervisorPhoneNumber = objParkingFee.PhoneNumber;
                            lblSupervisor.Text    = objParkingFee.SupervisorName;
                            lblPhoneNumber.Text   = objParkingFee.PhoneNumber;
                            ShowLoading(false);
                            StklauoutactivityIndicator.IsVisible = false;
                            await DisplayAlert("", "Sorry! Your vehicle is clamped. Please visit the Parking Lot", "Ok");

                            return;
                        }
                        else
                        {
                            if (days <= 0)
                            {
                                if (objParkingFee.Price != 0)
                                {
                                    if (ActualEndTime < currentTime)
                                    {
                                        var confirmed = await DisplayAlert("", "Please confirm that you want to Check Out your Vehicle " + lblRegistrationNumber.Text + "", "Yes", "No");

                                        if (confirmed)
                                        {
                                            CustomerParkingSlot obj_CustomerParkingSlot = new CustomerParkingSlot();
                                            obj_CustomerParkingSlot.CustomerParkingSlotID  = objCustomerParkingSlotDetails.CustomerParkingSlotID;
                                            obj_CustomerParkingSlot.ExpectedStartTime      = objCustomerParkingSlotDetails.From.ToString("MM/dd/yyyy hh:mm tt");
                                            obj_CustomerParkingSlot.ActualEndTime          = DateTime.Now.ToString("MM/dd/yyyy hh:mm tt");
                                            obj_CustomerParkingSlot.CustomerID             = objCustomerParkingSlotDetails.CustomerID;
                                            obj_CustomerParkingSlot.LocationName           = "CHECKOUT";
                                            obj_CustomerParkingSlot.LocationParkingLotName = objCustomerParkingSlotDetails.LocationParkingLotName;
                                            obj_CustomerParkingSlot.PaidAmount             = Convert.ToDecimal(objParkingFee.Price == 0 ? "0" : Convert.ToString(decimal.Truncate(objParkingFee.Price)));

                                            obj_CustomerParkingSlot.Duration = Convert.ToString(objParkingFee.Hours);
                                            ShowLoading(false);
                                            await Navigation.PushAsync(new RazorPayment(obj_CustomerParkingSlot, null));
                                        }
                                        else
                                        {
                                            ShowLoading(false);
                                            StklauoutactivityIndicator.IsVisible = false;
                                        }
                                    }
                                }
                                else
                                {
                                    var confirmed = await DisplayAlert("", "Please confirm that you want to Check Out your Vehicle " + lblRegistrationNumber.Text + "", "Yes", "No");

                                    if (confirmed)
                                    {
                                        CustomerParkingSlot obj_CustomerParkingSlot = new CustomerParkingSlot();
                                        obj_CustomerParkingSlot.CustomerParkingSlotID = objCustomerParkingSlotDetails.CustomerParkingSlotID;
                                        obj_CustomerParkingSlot.ExpectedStartTime     = objCustomerParkingSlotDetails.From.ToString("MM/dd/yyyy hh:mm tt");
                                        obj_CustomerParkingSlot.ActualEndTime         = DateTime.Now.ToString("MM/dd/yyyy hh:mm tt");
                                        obj_CustomerParkingSlot.CustomerID            = objCustomerParkingSlotDetails.CustomerID;

                                        TimeSpan ts = Convert.ToDateTime(DateTime.Now) - Convert.ToDateTime(objCustomerParkingSlotDetails.From);
                                        obj_CustomerParkingSlot.Duration = Convert.ToString(ts.Hours);

                                        obj_CustomerParkingSlot.PaidAmount = 0;

                                        if (App.Current.Properties.ContainsKey("apitoken"))
                                        {
                                            var json    = JsonConvert.SerializeObject(obj_CustomerParkingSlot);
                                            var content = new StringContent(json, Encoding.UTF8, "application/json");
                                            CustomerParkingSlotDetails resultObj = dal_Customer.UpdateCheckOut(Convert.ToString(App.Current.Properties["apitoken"]), obj_CustomerParkingSlot);

                                            if (resultObj.CustomerParkingSlotID != 0)
                                            {
                                                App.Current.Properties["CustomerParkingSlotID"] = "0";
                                                Application.Current.SavePropertiesAsync();
                                                ShowLoading(false);
                                                StklauoutactivityIndicator.IsVisible = false;
                                                await DisplayAlert("", "Thank you for parking with us!", "Ok");

                                                int CustomerID = 0;
                                                if (App.Current.Properties.ContainsKey("CustomerID"))
                                                {
                                                    CustomerID = Convert.ToInt32(App.Current.Properties["CustomerID"]);
                                                }

                                                await Navigation.PushAsync(new Home(null, CustomerID));
                                            }
                                            else
                                            {
                                                ShowLoading(false);
                                                StklauoutactivityIndicator.IsVisible = false;
                                                await DisplayAlert("", "Check Out failed", "Ok");
                                            }
                                        }
                                    }
                                    else
                                    {
                                        ShowLoading(false);
                                        StklauoutactivityIndicator.IsVisible = false;
                                    }
                                }
                            }
                            else
                            {
                                ShowLoading(false);
                                StklauoutactivityIndicator.IsVisible = false;
                                await DisplayAlert("", "This Vehicle cannot be Checked Out. Please visit the Parking Lot.", "Ok");

                                return;
                            }
                        }
                    }
                    else
                    {
                        if (objParkingFee.StatusID == 5 || objParkingFee.StatusID == 6)
                        {
                            lblOverStayFee.Text = "0";
                            lblClampFee.Text    = "0";
                            lblTotal.Text       = "0";
                            ShowLoading(false);
                            StklauoutactivityIndicator.IsVisible = false;
                            await DisplayAlert("", "Your Vehicle has been Checked Out!", "Ok");

                            int CustomerID = 0;
                            if (App.Current.Properties.ContainsKey("CustomerID"))
                            {
                                CustomerID = Convert.ToInt32(App.Current.Properties["CustomerID"]);
                            }

                            await Navigation.PushAsync(new Home(null, CustomerID));
                        }
                        else
                        {
                            //await DisplayAlert("Status -  CustomerParkingSlotID : ", Convert.ToString(objParkingFee.StatusID) + " - " + Convert.ToString(objParkingFee.CustomerParkingSlotID), "Ok");
                        }
                    }
                }
                else
                {
                    await DisplayAlert("", "Please check your network connectivity", "Ok");

                    return;
                }
            }
            catch (Exception ex)
            {
                ShowLoading(false);
                StklauoutactivityIndicator.IsVisible = false;
                await DisplayAlert("Failed - CheckOut", Convert.ToString(ex.Message), "Ok");
            }
        }
        private async void stk_ExtendTimeTapped(object sender, EventArgs e)
        {
            try
            {
                TimeSpan ds;
                int      days;
                currentTime = DateTime.Now;
                ds          = (currentTime.Date - Convert.ToDateTime(objCustomerParkingSlotDetails.To).Date);
                days        = Convert.ToInt32(ds.Days);

                ParkingFee objParkingFee = new ParkingFee();

                objCustomerParkingSlotDetails.LotOpenTime  = Convert.ToDateTime(objCustomerParkingSlotDetails.LotOpeningTime);
                objCustomerParkingSlotDetails.LotCloseTime = Convert.ToDateTime(objCustomerParkingSlotDetails.LotClosingTime);

                ShowLoading(true);
                await Task.Run(() =>
                {
                    objParkingFee = ValidateVehicleClamped();
                });

                if (objParkingFee.CustomerParkingSlotID != 0 && objParkingFee.StatusID != 5 && objParkingFee.StatusID != 6)
                {
                    lblWarning.Text     = "'" + Convert.ToString(objParkingFee.ViolationWarningCount) + "' Warning(s) Completed";
                    lblOverStayFee.Text = objParkingFee.Price == 0 ? "0" : Convert.ToString(decimal.Truncate(objParkingFee.Price));
                    lblClampFee.Text    = objParkingFee.ClampFee == 0 ? "0" : Convert.ToString(decimal.Truncate(objParkingFee.ClampFee));
                    lblTotal.Text       = Convert.ToDecimal(objParkingFee.Price) + Convert.ToDecimal(objParkingFee.ClampFee) == 0 ? "0" :
                                          Convert.ToString(decimal.Truncate((Convert.ToDecimal(objParkingFee.Price) + Convert.ToDecimal(objParkingFee.ClampFee))));
                    lblClampReason.Text = objParkingFee.ClampReason;

                    if (objParkingFee.IsClamp)
                    {
                        stkSupervisor.IsVisible   = true;
                        stkClampWarning.IsVisible = true;
                        IsClamp = objParkingFee.IsClamp;
                        SupervisorPhoneNumber = objParkingFee.PhoneNumber;
                        lblSupervisor.Text    = objParkingFee.SupervisorName;
                        lblPhoneNumber.Text   = objParkingFee.PhoneNumber;
                        ShowLoading(false);
                        StklauoutactivityIndicator.IsVisible = false;
                        await DisplayAlert("", "Sorry! Your vehicle is clamped. Please visit the Parking Lot", "Ok");

                        return;
                    }
                    else
                    {
                        if (objCustomerParkingSlotDetails.ApplicationTypeID == Convert.ToInt32(App.Current.Properties["PassApplicationTypeID"]))
                        {
                            ShowLoading(false);
                            StklauoutactivityIndicator.IsVisible = false;
                            await DisplayAlert("", "You have a valid pass! Extend time not required", "Ok");

                            return;
                        }
                        else
                        {
                            if (days <= 0)
                            {
                                if (currentTime >= objCustomerParkingSlotDetails.LotCloseTime)
                                {
                                    ShowLoading(false);
                                    StklauoutactivityIndicator.IsVisible = false;
                                    await DisplayAlert("", "Please visit the Parking Lot! You cannot Extend Time for this Vehicle", "Ok");
                                }
                                else
                                {
                                    ShowLoading(false);
                                    StklauoutactivityIndicator.IsVisible = false;
                                    await Navigation.PushAsync(new ExtendSession(objCustomerParkingSlotDetails));
                                }
                            }
                            else
                            {
                                ShowLoading(false);
                                StklauoutactivityIndicator.IsVisible = false;
                                await DisplayAlert("", "Please visit the Parking Lot! You cannot Extend Time for this Vehicle", "Ok");
                            }
                        }
                    }
                }
                else
                {
                    if (objParkingFee.StatusID == 5 || objParkingFee.StatusID == 6)
                    {
                        lblOverStayFee.Text = "0";
                        lblClampFee.Text    = "0";
                        lblTotal.Text       = "0";
                        ShowLoading(false);
                        StklauoutactivityIndicator.IsVisible = false;
                        await DisplayAlert("", "Your Vehicle has been Checked Out!", "Ok");

                        int CustomerID = 0;
                        if (App.Current.Properties.ContainsKey("CustomerID"))
                        {
                            CustomerID = Convert.ToInt32(App.Current.Properties["CustomerID"]);
                        }

                        await Navigation.PushAsync(new Home(null, CustomerID));
                    }
                    else
                    {
                        //await DisplayAlert("Status -  CustomerParkingSlotID : ", Convert.ToString(objParkingFee.StatusID) + " - " + Convert.ToString(objParkingFee.CustomerParkingSlotID), "Ok");
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }