예제 #1
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";
        }
예제 #2
0
 public FleetManager(Fleet fleet, CustomerResourceManager crm)
 {
     _fleet = fleet;
     _crm   = crm;
     AddVehicle.Submitted += AddVehicleOnSubmitted;
     FleetSearch.GetComponent <Form>("initial search").Submitted += FleetSearchOnSearch;
     FleetSearch.GetComponent <Form>("customer list").Submitted  += FleetSearchOnSearch;
     ModifyVehicle.GetComponent <Form>("search").Submitted       += ModifyVehicleOnSearch;
     ModifyVehicle.GetComponent <Form>("modify").Submitted       += ModifyVehicleOnSubmit;
     DeleteVehicle.GetComponent <Form>("select").Submitted       += DeleteVehicleOnSearch;
     DeleteVehicle.GetComponent <Form>("confirm").Submitted      += DeleteVehicleOnSubmitted;
     RentVehicle.Submitted   += RentVehicleOnSubmitted;
     ReturnVehicle.Submitted += ReturnVehicleOnSubmitted;
     VehicleReport.PreRender += VehicleReportOnFocused;
 }