Exemplo n.º 1
0
        private void ModifyCustomerOnSearch(object sender, Form.SubmittedEventArgs e)
        {
            if (!int.TryParse(e.Data.Get <string>("Customer ID"), out var customerId))
            {
                e.Result = "Invalid ID";
                return;
            }

            var customer = _crm.Customers.FirstOrDefault(c => c.Id == customerId);

            if (customer == null)
            {
                e.Result = "No customer with that ID";
                return;
            }

            var modifyForm = ModifyCustomer.GetComponent <Form>("modify");

            modifyForm.Set("ID", customerId.ToString());
            modifyForm.Set("Title", customer.Title);
            modifyForm.Set("Given Names", customer.GivenNames);
            modifyForm.Set("Surname", customer.Surname);
            modifyForm.Set("Date of birth", customer.BirthDate.ToString("dd/MM/yyyy"));
            modifyForm.Set("Gender", customer.Gender);

            ModifyCustomer.ActiveComponent = "modify";
        }
Exemplo n.º 2
0
        private void ModifyVehicleOnSearch(object sender, Form.SubmittedEventArgs e)
        {
            var rego = e.Data.Get <string>("Registration").ToUpper();

            if (!RegoRegex.IsMatch(rego))
            {
                e.Result = "Invalid rego";
                return;
            }

            var vehicle = _fleet.Vehicles.FirstOrDefault(v => v.Registration == rego.ToUpper());

            if (vehicle == null)
            {
                e.Result = "No vehicle with that rego";
                return;
            }

            var modifyForm = ModifyVehicle.GetComponent <Form>("modify");

            modifyForm.Set("Registration", rego);
            modifyForm.Set("Grade", vehicle.Grade);
            modifyForm.Set("Make", vehicle.Make);
            modifyForm.Set("Model", vehicle.Model);
            modifyForm.Set("Year", vehicle.Year.ToString());
            modifyForm.Set("Seat count", vehicle.SeatCount.ToString());
            modifyForm.Set("Transmission", vehicle.Transmission);
            modifyForm.Set("Fuel type", vehicle.Fuel);
            modifyForm.Set("Has GPS", vehicle.HasGps);
            modifyForm.Set("Has sunroof", vehicle.HasSunRoof);
            modifyForm.Set("Daily rate $", vehicle.DailyRate.ToString(CultureInfo.InvariantCulture));
            modifyForm.Set("Colour", vehicle.Colour);

            ModifyVehicle.ActiveComponent = "modify";
        }
Exemplo n.º 3
0
        private void DeleteVehicleOnSearch(object sender, Form.SubmittedEventArgs e)
        {
            var rego = e.Data.Get <string>("Registration").ToUpper();

            if (!RegoRegex.IsMatch(rego))
            {
                e.Result = "Invalid rego";
                return;
            }

            if (_fleet.Vehicles.All(v => v.Registration != rego))
            {
                e.Result = "No vehicle with that rego";
                return;
            }

            if (_fleet.IsRented(rego))
            {
                e.Result = "Vehicle is under rent";
                return;
            }

            var vehicle = _fleet.Vehicles.First(v => v.Registration == rego);

            var confirmForm = DeleteVehicle.GetComponent <Form>("confirm");

            confirmForm.Set("Registration", rego);
            confirmForm.Set("Make", vehicle.Make);
            confirmForm.Set("Model", vehicle.Model);
            confirmForm.Set("Year", vehicle.Year.ToString());

            DeleteVehicle.ActiveComponent = "confirm";
        }
Exemplo n.º 4
0
        private void DeleteCustomerOnSearch(object sender, Form.SubmittedEventArgs e)
        {
            if (!int.TryParse(e.Data.Get <string>("Customer ID"), out var customerId))
            {
                e.Result = "Invalid ID";
                return;
            }

            if (_crm.Customers.All(c => c.Id != customerId))
            {
                e.Result = "No customer with that ID";
                return;
            }

            if (_fleet.IsRenting(customerId))
            {
                e.Result = "Customer still renting";
                return;
            }

            var customer = _crm.Customers.First(c => c.Id == customerId);

            var confirmForm = DeleteCustomer.GetComponent <Form>("confirm");

            confirmForm.Set("ID", customerId.ToString());
            confirmForm.Set("Given Names", customer.GivenNames);
            confirmForm.Set("Surname", customer.Surname);
            confirmForm.Set("Date of birth", customer.BirthDate.ToString("dd/MM/yyyy"));

            DeleteCustomer.ActiveComponent = "confirm";
        }
Exemplo n.º 5
0
        private void FleetSearchOnSearch(object sender, Form.SubmittedEventArgs e)
        {
            var options = _fleet.Vehicles.Select(v => new[]
            {
                new Tuple <string, Vehicle>(v.Registration.ToString(), v),
                new Tuple <string, Vehicle>(v.Grade.ToString(), v),
                new Tuple <string, Vehicle>(v.Make, v),
                new Tuple <string, Vehicle>(v.Model, v),
                new Tuple <string, Vehicle>(v.Year.ToString(), v),
                new Tuple <string, Vehicle>(v.SeatCount.ToString(), v),
                new Tuple <string, Vehicle>(v.Transmission.ToString(), v),
                new Tuple <string, Vehicle>(v.Fuel.ToString(), v),
                new Tuple <string, Vehicle>(v.HasGps ? "GPS" : "No GPS", v),
                new Tuple <string, Vehicle>(v.HasSunRoof ? "Sun roof" : "No sun roof", v),
                new Tuple <string, Vehicle>(v.Colour, v),
                new Tuple <string, Vehicle>($"{v.SeatCount} seats", v),
            }).SelectMany(it => it).ToArray();

            if (e.Data.Get <string>("Search").IsEmpty())
            {
                e.Result = "Enter a search term";
                return;
            }

            var parser = new MrrcParser(e.Data.Get <string>("Search").ToUpperInvariant());
            var result = parser.Parse(parser.Tokenise());

            if (result is FailedParseResult <Expression> failure)
            {
                e.Result = failure.Message;
                return;
            }

            var success = (SuccessfulParseResult <Expression>)result;

            var matches = success.Result.Matches(options);

            var individualMatches = matches.Item1
                                    .Select(it => it.Item2)
                                    .Distinct()
                                    .Where(it => !matches.Item2.Contains(it))
                                    .ToArray();

            if (individualMatches.Length == 0)
            {
                e.Result = "No results where found";
                return;
            }

            var fleetList = FleetSearch.GetComponent <Form>("customer list");

            fleetList.Set("Search", e.Data.Get <string>("Search"));
            fleetList.GetComponent <Select>("Results")
            .SetNewMembers(individualMatches.Select(m => m.ToString()).ToArray());

            FleetSearch.ActiveComponent = "customer list";
        }
Exemplo n.º 6
0
 private void DeleteVehicleOnSubmitted(object sender, Form.SubmittedEventArgs e)
 {
     if (!_fleet.RemoveVehicle(e.Data.Get <string>("Registration")))
     {
         e.Result = "Could not delete";
     }
     else
     {
         e.Result = "Deleted vehicle";
     }
 }
Exemplo n.º 7
0
        private void ReturnVehicleOnSubmitted(object sender, Form.SubmittedEventArgs e)
        {
            var rego   = e.Data.Get <string>("Registration").ToUpper();
            var person = _fleet.ReturnVehicle(rego);

            if (person == -1)
            {
                e.Result = "Vehicle is not being rented";
                return;
            }

            e.Result = "Successful";
        }
Exemplo n.º 8
0
        private void CustomerSearchOnSearch(object sender, Form.SubmittedEventArgs e)
        {
            var options = _crm.Customers.Select(c => new[]
            {
                new Tuple <string, Customer>(c.Id.ToString(), c),
                new Tuple <string, Customer>(c.Title.ToString(), c),
                new Tuple <string, Customer>(c.GivenNames, c),
                new Tuple <string, Customer>(c.Surname, c),
                new Tuple <string, Customer>(c.Gender.ToString(), c)
            }).SelectMany(it => it).ToArray();

            if (e.Data.Get <string>("Search").IsEmpty())
            {
                e.Result = "Enter a search term";
                return;
            }

            var parser = new MrrcParser(e.Data.Get <string>("Search").ToUpperInvariant());
            var result = parser.Parse(parser.Tokenise());

            if (result is FailedParseResult <Expression> failure)
            {
                e.Result = failure.Message;
                return;
            }

            var success = (SuccessfulParseResult <Expression>)result;

            var matches = success.Result.Matches(options);

            var individualMatches = matches.Item1
                                    .Select(it => it.Item2)
                                    .Distinct()
                                    .Where(it => !matches.Item2.Contains(it))
                                    .ToArray();

            if (individualMatches.Length == 0)
            {
                e.Result = "No results where found";
                return;
            }

            var customerList = CustomerSearch.GetComponent <Form>("customer list");

            customerList.Set("Search", e.Data.Get <string>("Search"));
            customerList.GetComponent <Select>("Results")
            .SetNewMembers(individualMatches.Select(m => m.ToString()).ToArray());

            CustomerSearch.ActiveComponent = "customer list";
        }
Exemplo n.º 9
0
        private void AddCustomerOnSubmitted(object sender, Form.SubmittedEventArgs e)
        {
            if (!e.Data.TryGet("Title", out string title) || title.IsEmpty())
            {
                e.Result = "Title is required";
                return;
            }

            if (!e.Data.TryGet("Given Names", out string givenNames) || givenNames.IsEmpty())
            {
                e.Result = "Given names are required";
                return;
            }

            if (!e.Data.TryGet("Surname", out string surname) || surname.IsEmpty())
            {
                e.Result = "Surname is required";
                return;
            }

            if (!e.Data.TryGet("Date of birth", out string dobStr) || !DobRegex.IsMatch(dobStr))
            {
                e.Result = "Invalid date of birth";
                return;
            }

            if (!e.Data.TryGet("Gender", out Gender gender))
            {
                e.Result = "Gender is required";
                return;
            }

            var customer = new Customer
            {
                Title      = title,
                GivenNames = givenNames,
                Surname    = surname,
                Gender     = gender,
                BirthDate  = DateTime.ParseExact(dobStr, "dd/MM/yyyy", CultureInfo.InvariantCulture),
                Id         = _crm.NextId()
            };

            e.Result = _crm.AddCustomer(customer) ? $"Added customer {customer.Id}" : "Couldn't add customer";
        }
Exemplo n.º 10
0
        private void RentVehicleOnSubmitted(object sender, Form.SubmittedEventArgs e)
        {
            var customerId          = e.Data.Get <string>("Customer ID");
            var vehicleRegistration = e.Data.Get <string>("Vehicle Rego").ToUpper();

            if (!int.TryParse(customerId, out var customerIdNo))
            {
                e.Result = "Invalid customer ID";
                return;
            }

            if (_fleet.Vehicles.All(it => it.Registration != vehicleRegistration))
            {
                e.Result = "Vehicle not found";
                return;
            }

            if (_crm.Customers.All(it => it.Id != customerIdNo))
            {
                e.Result = "Customer not found";
                return;
            }

            if (_fleet.IsRented(vehicleRegistration))
            {
                e.Result = "Vehicle is already rented";
                return;
            }

            if (_fleet.IsRenting(customerIdNo))
            {
                e.Result = "Customer is already renting";
                return;
            }

            if (!_fleet.RentVehicle(vehicleRegistration, customerIdNo))
            {
                e.Result = "Failed to rent vehicle";
                return;
            }

            e.Result = $"Success ({_fleet.Vehicles.First(it => it.Registration == vehicleRegistration)}/d)";
        }
Exemplo n.º 11
0
        private void ModifyCustomerOnSubmitted(object sender, Form.SubmittedEventArgs e)
        {
            if (!e.Data.TryGet("Title", out string title) || title.IsEmpty())
            {
                e.Result = "Title is required";
                return;
            }

            if (!e.Data.TryGet("Given Names", out string givenNames) || givenNames.IsEmpty())
            {
                e.Result = "Given names are required";
                return;
            }

            if (!e.Data.TryGet("Surname", out string surname) || surname.IsEmpty())
            {
                e.Result = "Surname is required";
                return;
            }

            if (!e.Data.TryGet("Date of birth", out string dobStr) || !DobRegex.IsMatch(dobStr))
            {
                e.Result = "Invalid date of birth";
                return;
            }

            if (!e.Data.TryGet("Gender", out Gender gender))
            {
                e.Result = "Gender is required";
                return;
            }

            var customer = _crm.Customers
                           .First(c => c.Id == int.Parse(e.Data.Get <string>("ID")));

            customer.Title      = title;
            customer.GivenNames = givenNames;
            customer.Surname    = surname;
            customer.BirthDate  = DateTime.ParseExact(dobStr, "dd/MM/yyyy", CultureInfo.InvariantCulture);
            customer.Gender     = gender;

            e.Result = "Successfully updated customer";
        }
Exemplo n.º 12
0
        private void AddVehicleOnSubmitted(object sender, Form.SubmittedEventArgs e)
        {
            if (!e.Data.TryGet("Registration", out string rego) || !RegoRegex.IsMatch(rego))
            {
                e.Result = "Invalid rego";
                return;
            }

            if (!e.Data.TryGet("Grade", out VehicleGrade grade))
            {
                e.Result = "Grade is required";
                return;
            }

            if (!e.Data.TryGet("Make", out string make) || make.IsEmpty())
            {
                e.Result = "Make is required";
                return;
            }

            if (!e.Data.TryGet("Model", out string model) || make.IsEmpty())
            {
                e.Result = "Model is required";
                return;
            }

            if (!e.Data.TryGet("Year", out string yearStr) ||
                yearStr.Length != 4 || !int.TryParse(yearStr, out var year))
            {
                e.Result = "Year is invalid";
                return;
            }

            if (!e.Data.TryGet("Seat count", out string seatCountStr) ||
                !int.TryParse(seatCountStr.IsEmpty() ? "4" : seatCountStr, out var seatCount))
            {
                e.Result = "Seat count is invalid";
                return;
            }

            if (!e.Data.TryGet("Daily rate $", out string dailyRateStr) ||
                !double.TryParse(dailyRateStr.IsEmpty() ? "50" : dailyRateStr, out var dailyRate))
            {
                e.Result = $"Daily rate is invalid";
                return;
            }

            if (!e.Data.TryGet("Colour", out string colour))
            {
                e.Result = "Colour is required";
                return;
            }

            if (colour.IsEmpty())
            {
                colour = "Black";
            }

            var vehicle = new Vehicle
            {
                Registration = rego.ToUpper(),
                Grade        = grade,
                Make         = make,
                Model        = model,
                Year         = year,
                SeatCount    = seatCount,
                Transmission = e.Data.Get <TransmissionType>("Transmission"),
                Fuel         = e.Data.Get <FuelType>("Fuel type"),
                HasGps       = e.Data.Get <bool>("Has GPS"),
                HasSunRoof   = e.Data.Get <bool>("Has sunroof"),
                DailyRate    = dailyRate,
                Colour       = colour
            };

            e.Result = _fleet.AddVehicle(vehicle) ? "Added vehicle" : "Registration in use";
        }
Exemplo n.º 13
0
        private void ModifyVehicleOnSubmit(object sender, Form.SubmittedEventArgs e)
        {
            if (!e.Data.TryGet("Grade", out VehicleGrade grade))
            {
                e.Result = "Grade is required";
                return;
            }

            if (!e.Data.TryGet("Make", out string make) || make.IsEmpty())
            {
                e.Result = "Make is required";
                return;
            }

            if (!e.Data.TryGet("Model", out string model) || make.IsEmpty())
            {
                e.Result = "Model is required";
                return;
            }

            if (!e.Data.TryGet("Year", out string yearStr) ||
                yearStr.Length != 4 || !int.TryParse(yearStr, out var year))
            {
                e.Result = "Year is invalid";
                return;
            }

            if (!e.Data.TryGet("Seat count", out string seatCountStr) ||
                !int.TryParse(seatCountStr.IsEmpty() ? "4" : seatCountStr, out var seatCount))
            {
                e.Result = "Seat count is invalid";
                return;
            }

            if (!e.Data.TryGet("Daily rate $", out string dailyRateStr) ||
                !double.TryParse(dailyRateStr.IsEmpty() ? "50" : dailyRateStr, out var dailyRate))
            {
                e.Result = $"Daily rate is invalid";
                return;
            }

            if (!e.Data.TryGet("Colour", out string colour))
            {
                e.Result = "Colour is required";
                return;
            }

            if (colour.IsEmpty())
            {
                colour = "Black";
            }

            var vehicle = _fleet.Vehicles
                          .First(v => v.Registration == e.Data.Get <string>("Registration"));

            vehicle.Grade        = grade;
            vehicle.Make         = make;
            vehicle.Model        = model;
            vehicle.Year         = year;
            vehicle.SeatCount    = seatCount;
            vehicle.Transmission = e.Data.Get <TransmissionType>("Transmission");
            vehicle.Fuel         = e.Data.Get <FuelType>("Fuel type");
            vehicle.HasGps       = e.Data.Get <bool>("Has GPS");
            vehicle.HasSunRoof   = e.Data.Get <bool>("Has sunroof");
            vehicle.DailyRate    = dailyRate;
            vehicle.Colour       = colour;

            e.Result = "Successfully updated vehicle";
        }
Exemplo n.º 14
0
 private void DeleteCustomerOnSubmitted(object sender, Form.SubmittedEventArgs e)
 {
     e.Result = _crm.RemoveCustomer(int.Parse(e.Data.Get <string>("ID")))
         ? "Deleted customer" : "Could not delete";
 }