/// <summary>
        /// Inserts and sends an order to WebFleet, and dispatches the order
        /// to the target object within WebFleet
        /// </summary>
        /// <param name="orderNumber"></param>
        /// <param name="assignToObjectNumber"></param>
        /// <param name="orderText"></param>
        /// <returns></returns>
        public bool SendOrder(string orderNumber, string assignToObjectNumber, bool sendToDevice, bool autoStartJob, string orderText = "")
        {
            var webService = new ordersClient();

            var automations = new List <OrderAutomation?>();

            if (autoStartJob)
            {
                automations = new List <OrderAutomation?>()
                {
                    OrderAutomation.START,
                    OrderAutomation.ACCEPT,
                    OrderAutomation.NAVIGATING_TO,
                };
            }

            var codes    = new List <OrderStateCode?>();
            var response = webService.sendOrder(GetAuthenticationParameters(), GetGeneralParameters(),
                                                new BasicOrderParameter()
            {
                orderNo   = orderNumber,
                orderText = orderText
            },
                                                new ObjectIdentityParameter()
            {
                objectNo = assignToObjectNumber,
            },
                                                new AdvancedSendOrderParameter()
            {
                orderAutomations = automations.ToArray(),
                stateCode        = codes.ToArray()
            });

            return(HandleResult(response));
        }
        /// <summary>
        /// Inserts an order to WebFleet, but does not send the order message
        /// and must manually be dispatched to an object within WebFleet
        /// </summary>
        /// <param name="orderNumber"></param>
        /// <param name="assignToObjectNumber"></param>
        /// <param name="orderText"></param>
        /// <param name="scheduledArrivalTime"> </param>
        /// <returns></returns>
        public bool InsertOrder(string orderNumber, string assignToObjectNumber, string orderText = "", string webfleetLocationId = "",
                                DateTime?scheduledArrivalTime = null)
        {
            if (string.IsNullOrEmpty(assignToObjectNumber))
            {
                return(false);
            }
            var webService = new ordersClient();
            var destOrder  = new DestinationOrderParameter()
            {
                addrNoToUseAsDestination = webfleetLocationId, orderNo = orderNumber, orderText = orderText
            };

            if (scheduledArrivalTime.HasValue)
            {
                destOrder.scheduledCompletionDateAndTimeSpecified = true;
                destOrder.scheduledCompletionDateAndTime          = scheduledArrivalTime.Value.AddHours(6); // todo datetime dynamic helper
            }
            else
            {
                // set local time
            }

            var resp = webService.insertDestinationOrder(
                GetAuthenticationParameters(),
                GetGeneralParameters(),
                destOrder,
                new ObjectIdentityParameter()
            {
                objectNo = assignToObjectNumber
            },
                new AdvancedInsertOrderParameter());

            if (resp.statusCode != 0)
            {
                resp = webService.insertDestinationOrder(
                    GetAuthenticationParameters(),
                    GetGeneralParameters(),
                    destOrder,
                    new ObjectIdentityParameter()
                {
                },
                    new AdvancedInsertOrderParameter()
                {
                });
            }

            if (resp.statusCode != 0)
            {
                var errorStatus = resp.statusCode;  // something went wrong, log todo
            }

            return(HandleResult(resp));
        }
        public bool DeleteOrder(string orderNumber, bool markDeleted)
        {
            var webService = new ordersClient();
            var response   = webService.deleteOrder(GetAuthenticationParameters(), GetGeneralParameters(),
                                                    new DeleteOrderParameter()
            {
                markDeleted          = markDeleted,
                markDeletedSpecified = true,
                orderNo = orderNumber
            });

            return(HandleResult(response));
        }
        public bool AssignOrder(string orderNumber, string assignToObjectNumber)
        {
            var webService = new ordersClient();
            var response   = webService.assignOrder(GetAuthenticationParameters(), GetGeneralParameters(),
                                                    new AssignOrderParameter()
            {
                orderNo  = orderNumber,
                objectNo = assignToObjectNumber
            },
                                                    new AdvancedAssignOrderParameter());

            return(HandleResult(response));
        }
        /// <summary>
        /// Removes all orders from the device and optionally
        /// marks them as deleted in WebFleet
        /// </summary>
        /// <param name="objectNumber"></param>
        /// <param name="markDeleted"></param>
        /// <returns></returns>
        public bool ClearOrders(string objectNumber, bool markDeleted)
        {
            var webService = new ordersClient();
            var response   = webService.clearOrders(GetAuthenticationParameters(), GetGeneralParameters(),
                                                    new ClearOrdersParameter()
            {
                objectNo             = objectNumber,
                markDeleted          = markDeleted,
                markDeletedSpecified = true
            });

            return(HandleResult(response));
        }