Example #1
0
        public Drayage.Optimization.Model.Planning.Plan MapDomainToModelWithoutPlaceHolder(FRATIS.SFL.Domain.Planning.Plan plan)
        {
            var model = new Plan();

            model.InjectFrom <DomainToModelValueInjection>(plan);

            foreach (var driverPlan in plan.DriverPlans)
            {
                var modelDriverPlan = model.DriverPlans.FirstOrDefault(f => f.Id == driverPlan.Id);

                if (modelDriverPlan == null)
                {
                    continue;
                }

                var driver = driverPlan.Driver ?? _driverService.GetById(driverPlan.DriverId);

                var driverModel = new Drayage.Optimization.Model.Orders.Driver();
                driverModel.InjectFrom <DomainToModelValueInjection>(driver);

                modelDriverPlan.Driver = driverModel.InjectFrom(driver) as Drayage.Optimization.Model.Orders.Driver;

                modelDriverPlan.RouteSegmentStatistics = new List <RouteSegmentStatistics>();

                if (driverPlan.Driver.IsPlaceholderDriver)
                {
                    continue;
                }

                modelDriverPlan.JobPlans = modelDriverPlan.JobPlans.OrderBy(f => f.SortOrder).ToList();
                foreach (var jobPlan in driverPlan.JobPlans)
                {
                    //var driverPlanJob = _planService.GetPlanDriverJobsById(jobPlan.Id);

                    var modelJobPlan = modelDriverPlan.JobPlans.FirstOrDefault(f => f.Id == jobPlan.Id);
                    modelJobPlan.Job = modelJobPlan.Job ?? new Drayage.Optimization.Model.Orders.Job();

                    MapDomainToModel(jobPlan.Job, modelJobPlan.Job, plan.PlanConfig.DueDate);
                }
                if (driverPlan.RouteSegmentMetrics == null)
                {
                    driverPlan.RouteSegmentMetrics = new List <RouteSegmentMetric>();
                }

                foreach (var x in driverPlan.RouteSegmentMetrics)
                {
                    var rss        = new RouteSegmentStatistics();
                    var endStop    = ConvertRouteStop(x.EndStop);
                    var startStop  = ConvertRouteStop(x.StartStop);
                    var statistics = new RouteStatistics();
                    var startTime  = new TimeSpan(x.StartTime ?? 0);

                    statistics.TotalCapacity       = 0;
                    statistics.TotalExecutionTime  = new TimeSpan(x.TotalExecutionTime);
                    statistics.TotalIdleTime       = new TimeSpan(x.TotalIdleTime);
                    statistics.TotalQueueTime      = new TimeSpan(x.TotalQueueTime);
                    statistics.TotalTravelDistance = x.TotalTravelDistance;
                    statistics.TotalTravelTime     = new TimeSpan(x.TotalTravelTime);

                    rss.EndStop           = endStop;
                    rss.StartStop         = startStop;
                    rss.StartTime         = startTime;
                    rss.Statistics        = statistics;
                    rss.WhiffedTimeWindow = false;
                    modelDriverPlan.RouteSegmentStatistics.Add(rss);
                }
            }

            return(model);
        }