/// <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);
        }
Пример #3
0
        /// <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();
        }
Пример #4
0
        /// <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();
        }
Пример #6
0
 /// <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));
 }