Beispiel #1
0
        public void TestReadTransporters()
        {
            string filename          = @".\\Data\\test_transporter.json";
            TransporterRepository tr = new TransporterRepository(filename);
            var  transporters        = tr.GetTransporters();
            bool goodCount           = transporters.Count == 3;

            Assert.IsTrue(goodCount);
            Assert.IsTrue(transporters[0].Name == "Bobby");
        }
        /*
         *  Get the Best Transporter to use for the given input data.
         */
        public BestTransporter GetBestTransporter(TransporterQueryInput userData)
        {
            // Get the transporters from the repository - This data could be cached for better performance if we had thousands of transporters
            string transportersFilename        = _config.GetSection("AppSettings")["TransportRepositoryFilename"];
            TransporterRepository repo         = new TransporterRepository(transportersFilename);
            List <Transporter>    transporters = repo.GetTransporters();

            // Find the Best Transporter and the cost to transport.
            double?cost            = null;
            string transporterName = "";

            foreach (Transporter t in transporters)
            {
                // first see if you can use current transporter
                if (userData.Time >= t.StartTime && userData.Time <= t.EndTime)
                {
                    // check for refrigeration not needed (all transporters allowed) or if Refridge needed only use transporters with Refridge cablable transports
                    if (userData.RefrigerationRequired == false || userData.RefrigerationRequired == t.RefridgeratedBox)
                    {
                        // calc cost and see if this is the lowest cost transporter
                        double currCost = userData.Distance * t.CostPerMile;
                        if (cost == null || currCost < cost)
                        {
                            cost            = currCost;
                            transporterName = t.Name;
                        }
                    }
                }
            }

            // check if we found a transporter
            BestTransporter bestTrans = new BestTransporter();

            if (cost == null || transporterName.Length == 0)
            {
                // no transporters available for this time.
                bestTrans.Error = "No Transporter is available";
                bestTrans.FoundTransporterToUse = false;
            }
            else
            {
                // Found a transporter to use
                bestTrans.Error = "";
                bestTrans.FoundTransporterToUse = true;
            }
            // return Name and Cost if data is available.
            bestTrans.Name = transporterName;
            bestTrans.Cost = cost;
            return(bestTrans);
        }
Beispiel #3
0
 public TransporterService()
 {
     this.transporterRepo = new TransporterRepository();
 }