public ISOConnection ExportConnection(int loggedDataOrWorkItemID, EquipmentConfiguration adaptConnection) { ISOConnection isoConnection = new ISOConnection(); //First Connector Connector connector1 = DataModel.Catalog.Connectors.FirstOrDefault(c => c.Id.ReferenceId == adaptConnection.Connector1Id); if (connector1 != null) { DeviceElementConfiguration config = DataModel.Catalog.DeviceElementConfigurations.FirstOrDefault(c => c.Id.ReferenceId == connector1.DeviceElementConfigurationId); if (config != null) { string isoDeviceElementID = TaskDataMapper.InstanceIDMap.GetISOID(config.DeviceElementId); DeviceElement deviceElement = DataModel.Catalog.DeviceElements.FirstOrDefault(d => d.Id.ReferenceId == config.DeviceElementId); if (deviceElement != null) { string isoDeviceID = TaskDataMapper.InstanceIDMap.GetISOID(deviceElement.DeviceModelId); if (!string.IsNullOrEmpty(isoDeviceElementID) && !string.IsNullOrEmpty(isoDeviceElementID)) { isoConnection.DeviceIdRef_0 = isoDeviceID; isoConnection.DeviceElementIdRef_0 = TaskDataMapper.InstanceIDMap.GetISOID(connector1.Id.ReferenceId); //We want to refer to the Connector DeviceElement, not its parent referred by the config element } } } } //Second Connector Connector connector2 = DataModel.Catalog.Connectors.FirstOrDefault(c => c.Id.ReferenceId == adaptConnection.Connector2Id); if (connector2 != null) { DeviceElementConfiguration config = DataModel.Catalog.DeviceElementConfigurations.FirstOrDefault(c => c.Id.ReferenceId == connector2.DeviceElementConfigurationId); if (config != null) { string isoDeviceElementID = TaskDataMapper.InstanceIDMap.GetISOID(config.DeviceElementId); DeviceElement deviceElement = DataModel.Catalog.DeviceElements.FirstOrDefault(d => d.Id.ReferenceId == config.DeviceElementId); if (deviceElement != null) { string isoDeviceID = TaskDataMapper.InstanceIDMap.GetISOID(deviceElement.DeviceModelId); if (!string.IsNullOrEmpty(isoDeviceElementID) && !string.IsNullOrEmpty(isoDeviceElementID)) { isoConnection.DeviceIdRef_1 = isoDeviceID; isoConnection.DeviceElementIdRef_1 = TaskDataMapper.InstanceIDMap.GetISOID(connector2.Id.ReferenceId); } } } } //DataLogTriggers if (adaptConnection.DataLogTriggers.Any()) { string taskID = TaskDataMapper.InstanceIDMap.GetISOID(loggedDataOrWorkItemID); ISOTask task = TaskDataMapper.ISOTaskData.ChildElements.OfType <ISOTask>().First(t => t.TaskID == taskID); DataLogTriggerMapper dltMapper = new DataLogTriggerMapper(TaskDataMapper); task.DataLogTriggers = dltMapper.ExportDataLogTriggers(adaptConnection.DataLogTriggers).ToList(); } return(isoConnection); }
/* * public void PrepareRouteStop(RouteStop result, RouteStop previousStop, EquipmentConfiguration equipment) * { * * if (result.StopAction == StopActions.LiveLoading || result.StopAction == StopActions.LiveUnloading) * { * if (previousStop == null) * { * throw new Exception("Live action cannot be the first stop of an order"); * } * * result.PreTruckConfig = new TruckConfiguration() * { * EquipmentConfiguration = new EquipmentConfiguration() * { * Chassis = previousStop.PostTruckConfig.EquipmentConfiguration.Chassis, * ChassisOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ChassisOwner, * Container = previousStop.PostTruckConfig.EquipmentConfiguration.Container, * ContainerOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ContainerOwner, * }, * IsLoaded = previousStop.PostTruckConfig.IsLoaded * }; * * result.PostTruckConfig = new TruckConfiguration() * { * EquipmentConfiguration = new EquipmentConfiguration() * { * Chassis = previousStop.PostTruckConfig.EquipmentConfiguration.Chassis, * ChassisOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ChassisOwner, * Container = previousStop.PostTruckConfig.EquipmentConfiguration.Container, * ContainerOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ContainerOwner, * }, * IsLoaded = previousStop.PostTruckConfig.IsLoaded * }; * * if (result.StopAction == StopActions.LiveLoading) * { * result.PostTruckConfig.IsLoaded = true; * } * * if (result.StopAction == StopActions.LiveUnloading) * { * result.PostTruckConfig.IsLoaded = false; * * // mark previous live unloading stop as loaded * if (previousStop.StopAction == StopActions.LiveUnloading) * { * previousStop.PostTruckConfig.IsLoaded = true; * result.PreTruckConfig.IsLoaded = true; * } * } * * } * * else * { * result.PreTruckConfig = GetTruckConfigForAction(result.StopAction.PreState, equipment); * result.PostTruckConfig = GetTruckConfigForAction(result.StopAction.PostState, equipment); * } * * if (!IsValidRouteStop(result)) * { * Console.WriteLine(string.Format("\t\t{0} is apparently not valid for some reason.", result.Location.DisplayName)); * // throw new Exception("Invalid Route Stop"); * } * } */ public TruckConfiguration GetTruckConfigForAction(TruckState truckState, EquipmentConfiguration equipment) { TruckConfiguration truckConfiguration = null; switch (truckState) { case TruckState.Chassis: truckConfiguration = new TruckConfiguration() { EquipmentConfiguration = new EquipmentConfiguration() { Chassis = equipment.Chassis, ChassisOwner = equipment.ChassisOwner, } }; break; case TruckState.Empty: truckConfiguration = new TruckConfiguration() { EquipmentConfiguration = new EquipmentConfiguration() { Chassis = equipment.Chassis, ChassisOwner = equipment.ChassisOwner, Container = equipment.Container, ContainerOwner = equipment.ContainerOwner, } }; break; case TruckState.Loaded: truckConfiguration = new TruckConfiguration() { IsLoaded = true, EquipmentConfiguration = new EquipmentConfiguration() { Chassis = equipment.Chassis, ChassisOwner = equipment.ChassisOwner, Container = equipment.Container, ContainerOwner = equipment.ContainerOwner, } }; break; default: truckConfiguration = new TruckConfiguration(); break; } return(truckConfiguration); }
public EquipmentConfiguration ImportConnection(ISOTask task, ISOConnection isoConnection) { EquipmentConfiguration equipConfig = new EquipmentConfiguration(); StringBuilder descriptionBuilder = new StringBuilder(); //First Device Element int? connectorID = TaskDataMapper.InstanceIDMap.GetADAPTID(isoConnection.DeviceElementIdRef_0); Connector adaptConnector1 = null; if (connectorID.HasValue) { adaptConnector1 = DataModel.Catalog.Connectors.SingleOrDefault(d => d.Id.ReferenceId == connectorID.Value); if (adaptConnector1 != null) { equipConfig.Connector1Id = adaptConnector1.Id.ReferenceId; ISODeviceElement isoDeviceElement = TaskDataMapper.DeviceElementHierarchies.GetISODeviceElementFromID(isoConnection.DeviceElementIdRef_0); descriptionBuilder.Append(isoDeviceElement.Device.DeviceDesignator); descriptionBuilder.Append(":"); descriptionBuilder.Append(isoDeviceElement.DeviceElementDesignator); } } if (adaptConnector1 == null) { descriptionBuilder.Append("Unknown"); } descriptionBuilder.Append("<->"); //Second Device Element Connector adaptConnector2 = null; connectorID = TaskDataMapper.InstanceIDMap.GetADAPTID(isoConnection.DeviceElementIdRef_1); if (connectorID.HasValue) { adaptConnector2 = DataModel.Catalog.Connectors.SingleOrDefault(d => d.Id.ReferenceId == connectorID.Value); if (adaptConnector2 != null) { equipConfig.Connector2Id = adaptConnector2.Id.ReferenceId; ISODeviceElement isoDeviceElement = TaskDataMapper.DeviceElementHierarchies.GetISODeviceElementFromID(isoConnection.DeviceElementIdRef_1); descriptionBuilder.Append(isoDeviceElement.Device.DeviceDesignator); descriptionBuilder.Append(":"); descriptionBuilder.Append(isoDeviceElement.DeviceElementDesignator); } } if (adaptConnector2 == null) { descriptionBuilder.Append("Unknown"); } equipConfig.Description = descriptionBuilder.ToString(); return(equipConfig); }
public IEnumerable <EquipmentConfiguration> ImportConnections(ISOTask isoTask) { List <EquipmentConfiguration> equipConfigs = new List <EquipmentConfiguration>(); foreach (ISOConnection connection in isoTask.Connections) { EquipmentConfiguration equipConfig = ImportConnection(isoTask, connection); equipConfigs.Add(equipConfig); } return(equipConfigs); }
public EquipmentConfiguration ImportConnection(ISOTask task, ISOConnection isoConnection) { EquipmentConfiguration equipConfig = new EquipmentConfiguration(); StringBuilder descriptionBuilder = new StringBuilder(); //First Device Element int?connectorID = TaskDataMapper.InstanceIDMap.GetADAPTID(isoConnection.DeviceElementIdRef_0); if (connectorID.HasValue) { Connector adaptConnector1 = DataModel.Catalog.Connectors.Single(d => d.Id.ReferenceId == connectorID.Value); equipConfig.Connector1Id = adaptConnector1.Id.ReferenceId; ISODeviceElement isoDeviceElement = TaskDataMapper.DeviceElementHierarchies.GetISODeviceElementFromID(isoConnection.DeviceElementIdRef_0); descriptionBuilder.Append(isoDeviceElement.Device.DeviceDesignator); descriptionBuilder.Append(":"); descriptionBuilder.Append(isoDeviceElement.DeviceElementDesignator); } else { descriptionBuilder.Append("Unknown"); } descriptionBuilder.Append("<->"); //Second Device Element connectorID = TaskDataMapper.InstanceIDMap.GetADAPTID(isoConnection.DeviceElementIdRef_1); if (connectorID.HasValue) { Connector adaptConnector2 = DataModel.Catalog.Connectors.Single(d => d.Id.ReferenceId == connectorID.Value); equipConfig.Connector2Id = adaptConnector2.Id.ReferenceId; ISODeviceElement isoDeviceElement = TaskDataMapper.DeviceElementHierarchies.GetISODeviceElementFromID(isoConnection.DeviceElementIdRef_1); descriptionBuilder.Append(isoDeviceElement.Device.DeviceDesignator); descriptionBuilder.Append(":"); descriptionBuilder.Append(isoDeviceElement.DeviceElementDesignator); } else { descriptionBuilder.Append("Unknown"); } equipConfig.Description = descriptionBuilder.ToString(); //DataLogTriggers if (task.DataLogTriggers.Any()) { DataLogTriggerMapper dltMapper = new DataLogTriggerMapper(TaskDataMapper); dltMapper.ImportDataLogTriggers(task.DataLogTriggers); } return(equipConfig); }
/// <summary> /// 機器ダブルクリックイベント /// </summary> private void lstEquipments_DoubleClick(object sender, EventArgs e) { if (this.lstEquipments.SelectedIndex < 0) { return; } var model = new EquipmentConfiguration() { MakerName = this.cmbMaker.Text, EquipName = this.lstEquipments.SelectedItem.ToString(), Rating = this._equipments[this.lstEquipments.SelectedIndex].Rating }; this._eqipConf.Add(model); this.grdDetail.DataSource = new BindingList <EquipmentConfiguration>(this._eqipConf); }
/// <summary> /// 初期化処理 /// </summary> protected override void Initialize() { base.ClearBindings(this.Controls); try { this.cmbMaker.DataSource = DropDownModel.FindAllData(TABLE_NAME.MAKERS); this._eqipConf = EquipmentConfiguration.FindEquipmentConfigurationBy(this._project.ID); } catch { throw; } this.txtProjectID.DataBindings.Add("Text", this._project, "ProjectID"); this.txtName.DataBindings.Add("Text", this._project, "Name"); this.grpEnable.DataBindings.Add("Enable", this._project, "EnableFlag"); this.grdDetail.DataSource = new BindingList <EquipmentConfiguration>(this._eqipConf); }
public void MapDomainToModel(Job job, Drayage.Optimization.Model.Orders.Job optimizationJob, DateTime?planDate) { optimizationJob.InjectFrom <DomainToModelValueInjection>(job); var equipmentConfiguration = new EquipmentConfiguration(); equipmentConfiguration.InjectFrom <DomainToModelValueInjection>(job); optimizationJob.EquipmentConfiguration = equipmentConfiguration; var modelRouteStops = optimizationJob.RouteStops.ToList(); optimizationJob.RouteStops.Clear(); if (job.RouteStops != null && optimizationJob.RouteStops != null) { job.RouteStops = job.RouteStops.OrderBy(p => p.SortOrder).ToList(); int addDaysValue = 0; if (job.DueDate.HasValue && planDate.HasValue && job.DueDate.Value > planDate) { addDaysValue = (int)job.DueDate.Value.Subtract(planDate.Value).TotalDays; for (var x = 0; x < job.RouteStops.Count; x++) { if (addDaysValue >= 1) { //job.RouteStops[x].WindowStart = // job.RouteStops[x].WindowStart + // TimeSpan.FromDays(addDaysValue).Ticks; //job.RouteStops[x].WindowEnd = job.RouteStops[x].WindowEnd + // TimeSpan.FromDays(addDaysValue).Ticks; } } } var routeStopIndex = 0; foreach (var routeStop in job.RouteStops) { var modelRouteStop = modelRouteStops.FirstOrDefault(f => f.Id == routeStop.Id); if (modelRouteStop != null) { routeStop.SortOrder = routeStopIndex++; if (routeStop.Location != null && routeStop.Location.WaitingTime.HasValue) { modelRouteStop.QueueTime = new TimeSpan(0, routeStop.Location.WaitingTime.Value, 0); } // fixed hotspot if (routeStop.LocationId != null && routeStop.Location == null) { var location = _locationService.GetById((int)routeStop.LocationId); routeStop.LocationId = location.Id; routeStop.Location = location; } if (routeStop.StopAction != null) { modelRouteStop.StopAction = StopActions.Actions.FirstOrDefault(p => p.ShortName == routeStop.StopAction.ShortName); } if (routeStop.StopDelay.HasValue) { modelRouteStop.ExecutionTime = new TimeSpan(0, Convert.ToInt32(routeStop.StopDelay.Value), 0); } var dueDateLocal = _dateTimeHelper.ConvertUtcToLocalTime(job.DueDate.Value); modelRouteStop.WindowStart = new TimeSpan(routeStop.WindowStart); modelRouteStop.WindowEnd = new TimeSpan(routeStop.WindowEnd); // map stop action modelRouteStop.StopAction = MapDomainToModel(routeStop.StopAction); // Remove Dynamic stops if (routeStop.IsDynamicStop) { optimizationJob.RouteStops.Remove(modelRouteStop); } optimizationJob.RouteStops.Add(modelRouteStop); } else { var nullModelRouteStop = modelRouteStop; } } } _routeSanitizer.PrepareJob(optimizationJob); }
internal static void Prefix(string slot, ref EquipmentType __result) { EquipmentConfiguration.AddNewSlots(); }
public static void DescribeImplement(Catalog catalog, LoggedData loggedData) { Console.WriteLine(); Console.WriteLine("-----------------------"); Console.WriteLine("Equipment Configuration"); Console.WriteLine("-----------------------"); Console.WriteLine(); //A LoggedData will have a single EquipmentConfigurationGroup that contains any EquipmentConfigurations in the file EquipmentConfigurationGroup equipConfigGroup = loggedData.EquipmentConfigurationGroup; //The configuration of the equipment can vary by each region, although it is likely that the equipment configuration remains consistent across many regions //Any distinct configurations represented in the field operation will be EquipmentConfigurations within this group List <EquipmentConfiguration> distinctConfigurations = equipConfigGroup.EquipmentConfigurations; Console.WriteLine($"Field operation has {distinctConfigurations.Count} distinct equipment configuration(s)."); Console.WriteLine(); //While a single OperationData object supports a list of EquipmentConfigurations, the 2020 plugin will always reference a single EquipmentConfiguration on any one OperationData. //This allows the consumer to predictively map data based a known equipment definition for that data. //Going deeper on the first OperationData Console.WriteLine("The first region and OperationData within the field operation has this configuration:"); EquipmentConfiguration equipConfig = distinctConfigurations.SingleOrDefault(c => c.Id.ReferenceId == loggedData.OperationData.First().EquipmentConfigurationIds.Single()); //The equipment configuration maps to 2 connectors, explaining what machinery was hitched together Connector connector1 = catalog.Connectors.SingleOrDefault(c => c.Id.ReferenceId == equipConfig.Connector1Id); Connector connector2 = catalog.Connectors.SingleOrDefault(c => c.Id.ReferenceId == equipConfig.Connector2Id); //Each connector contains two pieces of information, the DeviceElementConfiguration that connector/hitch is a part of, and metadata on a specific hitch point. DeviceElementConfiguration deviceElementConfiguration1 = catalog.DeviceElementConfigurations.SingleOrDefault(c => c.Id.ReferenceId == connector1.DeviceElementConfigurationId); HitchPoint hitchPoint1 = catalog.HitchPoints.SingleOrDefault(h => h.Id.ReferenceId == connector1.HitchPointId); DeviceElementConfiguration deviceElementConfiguration2 = catalog.DeviceElementConfigurations.SingleOrDefault(c => c.Id.ReferenceId == connector2.DeviceElementConfigurationId); HitchPoint hitchPoint2 = catalog.HitchPoints.SingleOrDefault(h => h.Id.ReferenceId == connector2.HitchPointId); //DeviceElementConfigurations are a polymorphic object within ADAPT. //A DeviceElementConfiguration may be of type // MachineConfiguration (describing a tractor/vehicle) // ImplementConfiguration (describing an entire implement) // SectionConfiguration (describing a subsection or individual row of an implement) //DeviceElementConfigurations are part of a 3-object hierarchy that describes a piece of equipment //1. DeviceModel - A high-level description of the equipment: brand, manufacturer, description. Any single piece of equipment has only 1 device model. //2. DeviceElement -A hierarchical descripion part of the equipment: brand, manufacturer, description, and type of element (section, machine, implement, etc.). // A DeviceElement maps to a single DeviceModel, and may be a parent and/or child of other DeviceElements. // E.g., each section is a child of the root implement DeviceElement //3. DeviceElementConfigurations - The DeviceElementConfiguration is an extension of the DeviceElement, each mapping to a single DeviceElement, // but having specific phyproperties such as width and offsets. //The 2020 equipment configuration will always have a Machine/Vehicle as the Connector1 and an Implement as the Connector2. MachineConfiguration vehicleConfiguration = deviceElementConfiguration1 as MachineConfiguration; ImplementConfiguration implementConfiguration = deviceElementConfiguration2 as ImplementConfiguration; HitchPoint vehicleHitch = hitchPoint1; HitchPoint implementHitch = hitchPoint2; //The DeviceElements expose the hierarchy between parts of the equipment Console.WriteLine(); Console.WriteLine("Vehicle DeviceElement Hierarchy:"); DeviceElement vehicleDeviceElement = catalog.DeviceElements.SingleOrDefault(d => d.Id.ReferenceId == vehicleConfiguration.DeviceElementId); DescribeDeviceHierarchy(catalog, vehicleDeviceElement, 0, new List <DeviceElement>()); Console.WriteLine(); Console.WriteLine("Implement DeviceElement Hierarchy:"); List <DeviceElement> implementChildElements = new List <DeviceElement>(); DeviceElement implementDeviceElement = catalog.DeviceElements.SingleOrDefault(d => d.Id.ReferenceId == implementConfiguration.DeviceElementId); DescribeDeviceHierarchy(catalog, implementDeviceElement, 0, implementChildElements); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("-----------------------"); Console.WriteLine("Implement Width Values"); Console.WriteLine("-----------------------"); Console.WriteLine(); //The Implement and Section DeviceElementConfigurations carry width information. Console.WriteLine($"The {implementConfiguration.Description} is {implementConfiguration.PhysicalWidth.Value.Value} {implementConfiguration.PhysicalWidth.Value.UnitOfMeasure.Code} wide."); foreach (DeviceElement childElement in implementChildElements) { DeviceElementConfiguration deviceElementConfiguration = catalog.DeviceElementConfigurations.SingleOrDefault(c => c.DeviceElementId == childElement.Id.ReferenceId); if (deviceElementConfiguration != null) { SectionConfiguration sectionConfiguration = deviceElementConfiguration as SectionConfiguration; if (sectionConfiguration != null) { Console.WriteLine($"{sectionConfiguration.Description} is {sectionConfiguration.SectionWidth.Value.Value} {sectionConfiguration.SectionWidth.Value.UnitOfMeasure.Code} wide."); } } } Console.WriteLine(); Console.WriteLine("-----------------------"); Console.WriteLine("Equipment Offset Values"); Console.WriteLine("-----------------------"); Console.WriteLine(); //Various offset values describe where each device element is located vs. other elements via data on the device element configuration //Vehicle GPS Receiver DescribeOffset("GPS Receiver", vehicleConfiguration.GpsReceiverXOffset, vehicleConfiguration.GpsReceiverYOffset, "tractor reference point (center of rear axle)"); //Tractor hitch offset DescribeOffset("vehicle hitch point", vehicleHitch.ReferencePoint.XOffset, vehicleHitch.ReferencePoint.YOffset, "tractor reference point (center of rear axle)"); //Implement hitch offset DescribeOffset("implement hitch point", implementHitch.ReferencePoint.XOffset, implementHitch.ReferencePoint.YOffset, "implement reference point (center of implement)"); //Implmement control point offset (inverse of the prior) DescribeOffset("implement control point offset", implementConfiguration.ControlPoint.XOffset, implementConfiguration.ControlPoint.YOffset, "tractor hitch point"); //Section offsets (measured to center of each section) foreach (DeviceElement childElement in implementChildElements) { DeviceElementConfiguration deviceElementConfiguration = catalog.DeviceElementConfigurations.SingleOrDefault(c => c.DeviceElementId == childElement.Id.ReferenceId); if (deviceElementConfiguration != null) { SectionConfiguration sectionConfiguration = deviceElementConfiguration as SectionConfiguration; if (sectionConfiguration != null) { DescribeOffset($"{childElement.Description} offset", sectionConfiguration.InlineOffset, sectionConfiguration.LateralOffset, "tractor hitch point"); } } } }
internal static void Postfix(uGUI_DepthCompass __instance) { EquipmentConfiguration.RefreshPDA(); }
public void PrepareRouteStop(RouteStop result, RouteStop previousStop, EquipmentConfiguration equipment, Job job) { if (result.StopAction == StopActions.LiveLoading || result.StopAction == StopActions.LiveUnloading) { if (previousStop == null) { Console.WriteLine("Live action cannot be the first stop of an order"); Console.WriteLine(string.Format("\t\tjob={0},result.Location.DisplayName={1}", job.DisplayName, result.Location.DisplayName)); // throw new Exception("Live action cannot be the first stop of an order"); } result.PreTruckConfig = new TruckConfiguration() { EquipmentConfiguration = new EquipmentConfiguration() { Chassis = previousStop.PostTruckConfig.EquipmentConfiguration.Chassis, ChassisOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ChassisOwner, Container = previousStop.PostTruckConfig.EquipmentConfiguration.Container, ContainerOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ContainerOwner, }, IsLoaded = previousStop.PostTruckConfig.IsLoaded }; result.PostTruckConfig = new TruckConfiguration() { EquipmentConfiguration = new EquipmentConfiguration() { Chassis = previousStop.PostTruckConfig.EquipmentConfiguration.Chassis, ChassisOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ChassisOwner, Container = previousStop.PostTruckConfig.EquipmentConfiguration.Container, ContainerOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ContainerOwner, }, IsLoaded = previousStop.PostTruckConfig.IsLoaded }; if (result.StopAction == StopActions.LiveLoading) { result.PostTruckConfig.IsLoaded = true; } if (result.StopAction == StopActions.LiveUnloading) { result.PostTruckConfig.IsLoaded = false; // mark previous live unloading stop as loaded if (previousStop.StopAction == StopActions.LiveUnloading) { previousStop.PostTruckConfig.IsLoaded = true; result.PreTruckConfig.IsLoaded = true; } } } else { if (equipment == null || equipment.Chassis == null || equipment.Container == null) { if (result.StopAction.PostState != TruckState.Bobtail) { // should have equipment, container and chassis instantiated at this point if (equipment == null) { equipment = new EquipmentConfiguration(); } equipment.Container = new Container(); equipment.Chassis = new Chassis(); equipment.ChassisOwner = new ChassisOwner(); equipment.ContainerOwner = new ContainerOwner(); } } result.PreTruckConfig = GetTruckConfigForAction(result.StopAction.PreState, equipment); result.PostTruckConfig = GetTruckConfigForAction(result.StopAction.PostState, equipment); } if (!IsValidRouteStop(result)) { Console.WriteLine(string.Format("\t\t\tjob=<{0}>\n", job.DisplayName)); // throw new Exception("Invalid Route Stop"); } }