/// <summary> /// this is a method to show details for specific vehicle /// </summary> /// <returns></returns> public string printDetails() { List <Service> vehicleServices = CarList.services != null && CarList.services.Count > 0 ? CarList.services.FindAll(s => s.vehicleID == this.Id) : new List <Service>(); Service latestService = vehicleServices != null && vehicleServices.Count > 0 ? Service.getLatestService(vehicleServices) : null; //double kmSinceLastService = latestService != null ? (this.VehicleOdometer - latestService.ServiceOdometer) : 0; double kmSinceLastService = vehicleServices != null ? this.VehicleOdometer - vehicleServices.Last(v => v.vehicleID == Id).ServiceOdometer : 0; Journey relatedJourneys = CarList.journeys.Find(j => j.vehicleID == Id); bool requiresService = vehicleServices != null && vehicleServices.Count > 0 ? Service.requiresService(vehicleServices) : false; string requiresServiceText = requiresService ? "Yes" : "No"; StringBuilder sb = new StringBuilder(); sb.AppendLine($"Vehicle: {this.CarManufacture} {this.CarModel} {this.CarYear}"); sb.AppendLine($"Registration No: {this.RegistrationID}"); double distanceTravelled = this.getTotalDistanceTravelled(); if (distanceTravelled > 0) { sb.AppendLine($"Distance Travelled: {distanceTravelled} km"); } else { sb.AppendLine($"This vehicle never used before for journeys"); } int serviceCount = this.serviceCount; if (serviceCount > 0) { sb.AppendLine($"Total Services: {this.serviceCount}"); } else { sb.AppendLine($"Total Services: no record"); } sb.AppendLine($"Car Revenue: {this.TotalRentalCost.ToString("C")}"); sb.AppendLine($"KM Since last service: {kmSinceLastService} km"); double fuelEconomy = FuelPurchase.getFuelEconomy(this.Id); if (fuelEconomy > 0) { sb.AppendLine($"Fuel Economy: {fuelEconomy} km/L"); } else { sb.AppendLine($"Fuel Economy: not available yet"); } sb.AppendLine($"Requires service: {requiresServiceText}"); return(sb.ToString()); }
/// <summary> /// this is a method to get the fuel economy by /// seacrhing totalKmtravelled divided by total fuel /// </summary> /// <param name="VId"></param> /// <returns></returns> public static double getFuelEconomy(Guid VId) { Vehicle relatedVehicle = CarList.vehicles.Find(v => v.Id == VId); Journey relatedJourneys = CarList.journeys.Find(j => j.vehicleID == VId); List <FuelPurchase> fuelPurchases = CarList.fuelPurchases.Where(fp => fp.VId == relatedJourneys.vehicleID).ToList(); List <Journey> allJourneysRelatedWithFps = CarList.journeys.Where(j => j.vehicleID == relatedVehicle.Id).ToList(); double totalKmTravelled = 0.0; double totalFuelUsed = 0.0; if (fuelPurchases != null) { totalFuelUsed = fuelPurchases.Sum(fps => fps.FuelQuantity); totalKmTravelled = allJourneysRelatedWithFps.Max(max => max.EndOdometer) - allJourneysRelatedWithFps.Min(min => min.StartOdometer); } return(totalKmTravelled / totalFuelUsed); }
/// <summary> /// this is a click event to delete journey /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ButtonDeleteJourney_Clicked(object sender, RoutedEventArgs e) { Button deleteJourneyButton = sender as Button; Journey j = deleteJourneyButton.CommandParameter as Journey; deleteJourney(j); Vehicle vehicle = CarList.vehicles.Find(v => v.Id == j.vehicleID); Booking booking = CarList.bookings.Find(b => b.id == BookingID); List <Journey> journeys = CarList.journeys.FindAll(journey => journey.BookingID == BookingID); JourneysListView.ItemsSource = journeys; journeysListChanged = true; booking.updateRentPrice(journeys); vehicle.updateTotalRentCost(CarList.bookings.FindAll(b => b.Vehicleid == vehicle.Id)); j.SaveJourney(CarList.journeys); vehicle.SaveVehicles(CarList.vehicles); vehicleListView.ItemsSource = CarList.vehicles; vehicleListView.Items.Refresh(); }
/// <summary> /// this is a click event to delete selected row of booking /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ButtonDeleteBooking_Clicked(object sender, RoutedEventArgs e) { Button deleteBookingButton = sender as Button; Booking detailsForBooking = deleteBookingButton.DataContext as Booking; deleteBooking(detailsForBooking); CollectionViewSource.GetDefaultView(BookingsListView.ItemsSource).Refresh(); bookingListChanged = true; detailsForBooking.SaveBookings(bookings); Vehicle relatedVehicle = CarList.vehicles.Find(v => v.Id == detailsForBooking.Vehicleid); List <Booking> allBookingsWithRelatedVehicle = CarList.bookings != null && CarList.bookings.Count > 0 ? CarList.bookings.FindAll(b => b.Vehicleid == relatedVehicle.Id): null; Journey allJourneysRelatedWithBooking = CarList.journeys != null && CarList.journeys.Count > 0 ?CarList.journeys.Find(j => j.BookingID == detailsForBooking.id): null; if (allJourneysRelatedWithBooking != null) { CarList.journeys.Remove(allJourneysRelatedWithBooking); allJourneysRelatedWithBooking.SaveJourney(CarList.journeys); } relatedVehicle.updateTotalRentCost(allBookingsWithRelatedVehicle); relatedVehicle.SaveVehicles(CarList.vehicles); vehicleListView.ItemsSource = CarList.vehicles; vehicleListView.Items.Refresh(); }
/// <summary> /// this is a method to update odometer /// </summary> public void updateOdometer() { if (CarList.vehicles.Count > 0) { vehicles.ForEach(v => { List <Journey> associatedJourneys = CarList.journeys.FindAll(j => j.vehicleID == v.Id).ToList <Journey>(); List <Journey> journeysUpToToday = associatedJourneys .Where(j => DateTime.Compare(j.JourneyEndedAt, DateTime.Now) <= 0) .ToList <Journey>(); DateTime latestJourneyDate; if (journeysUpToToday.Count > 0) { latestJourneyDate = journeysUpToToday.Max(j => j.JourneyEndedAt).Date; Journey latestJourney = associatedJourneys.Find(j => (j.JourneyEndedAt - latestJourneyDate).TotalDays == 0); v.VehicleOdometer = latestJourney.EndOdometer; } }); } VehicleListView.Items.Refresh(); }
/// <summary> /// this is a bool to test the delete method /// </summary> /// <param name="j"></param> /// <returns></returns> public static bool deleteJourney(Journey j) { return(CarList.journeys.Remove(j)); }