// 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)); }
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) { } }