Example #1
0
        ///////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////

        public AssignOrdersOperation(SolverContext context,
                                     Schedule schedule,
                                     AssignOrdersParams inputParams,
                                     SolveOptions options)
            : base(context, schedule, options)
        {
            Debug.Assert(inputParams != null);
            _inputParams = inputParams;
        }
Example #2
0
        /// <summary>
        /// Adjusts VRP job request for cases when target sequence parameter is set.
        /// Does nothing if <paramref name="parameters"/> have no target sequence
        /// or order to be assigned is a violated one.
        /// </summary>
        /// <param name="request">Request to be adjusted.</param>
        /// <param name="parameters">Assign orders operation parameters to be
        /// used for adjusting the request.</param>
        /// <param name="violations">Collection of violations to be checked.</param>
        /// <exception cref="T:ESRI.ArcLogistics.Routing.RouteException">when
        /// <paramref name="request"/> does not contain order from
        /// <paramref name="parameters"/>.</exception>
        private void _AdjustRequestWithTargetSequence(
            SubmitVrpJobRequest request,
            AssignOrdersParams parameters,
            IEnumerable <Violation> violations)
        {
            Debug.Assert(request != null);
            Debug.Assert(parameters != null);
            Debug.Assert(violations != null);

            if (!parameters.TargetSequence.HasValue)
            {
                return;
            }

            Debug.Assert(parameters.OrdersToAssign.Count == 1); // must contain a single order
            Debug.Assert(parameters.TargetRoutes.Count == 1);   // must contain a single route

            var orderToAssign = parameters.OrdersToAssign.First();

            Debug.Assert(orderToAssign != null);

            if (violations.Any(v => v.AssociatedObject == orderToAssign))
            {
                return;
            }

            GPFeature targetFeature;

            if (!_FindTargetFeature(request.Orders, orderToAssign, out targetFeature))
            {
                throw new RouteException(Properties.Messages.Error_InternalRouteError);
            }

            // free place for new order position
            var targetSequence = parameters.TargetSequence.Value;

            Debug.Assert(targetSequence > 0);

            if (_HasSequence(request.Orders, targetSequence))
            {
                _ShiftSequence(request.Orders, targetSequence);
            }

            // set assignment attributes
            var targetRoute = parameters.TargetRoutes.First();

            Debug.Assert(targetRoute != null);

            targetFeature.Attributes.Set(NAAttribute.SEQUENCE, targetSequence);
            targetFeature.Attributes.Set(NAAttribute.ROUTE_NAME, targetRoute.Id.ToString());
            targetFeature.Attributes.Set(NAAttribute.ASSIGNMENT_RULE,
                                         (int)NAOrderAssignmentRule.esriNAOrderPreserveRouteAndRelativeSequence);
        }
        ///////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////

        public AssignOrdersStep2(SolverContext context,
                                 Schedule schedule,
                                 SolveRequestData reqData,
                                 AssignOrdersParams inputParams,
                                 IList <RouteResult> prevRouteResults,
                                 IList <Violation> prevViolations,
                                 SolveOptions options)
            : base(context, schedule, options)
        {
            _reqData          = reqData;
            _inputParams      = inputParams;
            _prevRouteResults = prevRouteResults;
            _prevViolations   = prevViolations;
        }
Example #4
0
        public AssignOrdersOperation(SolverContext context,
                                     Schedule schedule,
                                     AssignOrdersParams inputParams,
                                     SolveOptions options,
                                     SolveRequestData reqData,
                                     AssignOrdersReqBuilder reqBuilder,
                                     List <Violation> violations)
            : base(context, schedule, options)
        {
            Debug.Assert(inputParams != null);
            Debug.Assert(reqData != null);
            Debug.Assert(reqBuilder != null);
            Debug.Assert(violations != null);

            _inputParams = inputParams;
            _reqData     = reqData;
            _reqBuilder  = reqBuilder;
            _violations  = violations;
        }
Example #5
0
        public Guid AssignOrdersAsync(Schedule schedule,
                                      ICollection <Order> ordersToAssign,
                                      ICollection <Route> targetRoutes,
                                      int?targetSequence,
                                      bool keepViolatedOrdersUnassigned,
                                      SolveOptions options)
        {
            AssignOrdersParams inputParams = new AssignOrdersParams(
                ordersToAssign,
                targetRoutes,
                targetSequence,
                keepViolatedOrdersUnassigned);

            AssignOrdersOperation operation = new AssignOrdersOperation(
                _context,
                schedule,
                inputParams,
                options);

            return(_RunAsync(operation));
        }