Пример #1
0
        /// <summary>
        /// Considers arrival delay in stops.
        /// </summary>
        /// <param name="arrivalDelay">Arrival delay value.</param>
        /// <param name="stops">Stops to update.</param>
        internal static void ConsiderArrivalDelayInStops(int arrivalDelay, IList <StopData> stops)
        {
            Debug.Assert(null != stops);

            if (0 == stops.Count)
            {
                return;                            // stop process
            }
            int      startIndex = stops.Count - 1; // last index
            StopData last       = stops[startIndex];

            Point?prevStopPoint = null;

            if (StopType.Lunch != last.StopType)
            {
                prevStopPoint = _GetStopPoint(last);
            }

            --startIndex; // start from before last
            // (last one on a route - don't add the value to its service time)
            Debug.Assert(0 <= startIndex);

            for (int index = startIndex; 0 <= index; --index)
            {
                StopData stop = stops[index];

                int delay = 0;
                if (StopType.Lunch != stop.StopType)
                {
                    delay = _GetArrivalDelay(arrivalDelay, stop, ref prevStopPoint);
                }

                stop.TimeAtStop += delay;
            }
        }
Пример #2
0
        /// <summary>
        /// Gets stop data for a stop where lunch stop was placed (Routing version).
        /// </summary>
        /// <param name="sortedStops">A collection of route stops sorted by their sequence
        /// numbers.</param>
        /// <param name="lunchIndex">The lunch stop index to get actual stop for.</param>
        /// <returns>A stop data for an actual stop where lunch was placed.</returns>
        internal static StopData GetActualLunchStop(IList <StopData> sortedStops, int lunchIndex)
        {
            Debug.Assert(null != sortedStops);

            StopData actualStop = null;

            if ((0 <= lunchIndex) && (lunchIndex < sortedStops.Count))
            {
                StopData stop = sortedStops[lunchIndex];
                Debug.Assert(stop.StopType == StopType.Lunch);

                // use previously stop as actual
                int indexStep = -1;

                // find actual stop in selected direction
                actualStop = _GetActualLunchStop(sortedStops, lunchIndex + indexStep, indexStep);

                // not found in seleted direction
                if (null == actualStop)
                {   // find in invert direction
                    indexStep  = -indexStep;
                    actualStop = _GetActualLunchStop(sortedStops, lunchIndex + indexStep, indexStep);
                }
            }

            // not found - stop process
            if (null == actualStop)
            {
                string message = Properties.Messages.Error_RoutingMissingBreakStop;
                throw new InvalidOperationException(message); // exception
            }

            return(actualStop);
        }
 public CloseStopPage(StopData sd, List <OrderData> odlst, List <OrderData> bodlst)
 {
     this.sd = sd;
     lstOrd  = odlst;
     lstBOrd = bodlst;
     InitializeComponent();
 }
Пример #4
0
 public StopDetailsPage(StopData data)
     : this()
 {
     _data           = data;
     Title           = data.Name;
     BindingContext  = vm = new StopDetailsViewModel(data);
     this.Appearing += StopDetailsPage_Appearing;
 }
Пример #5
0
 public Orders()
 {
     InitializeComponent();
     stop = new StopData()
     {
         ManifestId = 0
     };
 }
Пример #6
0
        /// <summary>
        /// Sets directions.
        /// </summary>
        /// <param name="dirs">Directions.</param>
        /// <param name="stops">Stop datas as direction keeper (for update).</param>
        private static void _SetDirections(IList <Direction[]> dirs, IEnumerable <StopData> stops)
        {
            Debug.Assert(stops != null);
            Debug.Assert(dirs != null);

            // sort stops respecting sequence
            var sortedStops = new List <StopData>(stops);

            SolveHelper.SortBySequence(sortedStops);

            int nDir = 0;

            // starts from fisrt, 0 element do not have directions
            for (int index = 1; index < sortedStops.Count; ++index)
            {
                StopData stop = sortedStops[index];
                if (stop.StopType != StopType.Lunch)
                {
                    if (nDir >= dirs.Count)
                    {
                        throw new RouteException(Properties.Messages.Error_InvalidDirectionsNumber); // exception
                    }
                    Direction[] stopDirs = dirs[nDir];

                    // set path
                    if (_IsDirGeometryValid(stopDirs))
                    {
                        // build path from compact geometry
                        stop.Path = _BuildPath(stopDirs);
                    }
                    else
                    {
                        // NOTE: in some cases compact geometry is not set, for example when
                        // route contains one order which point is the same as start and end
                        // locations points

                        // set geometry of associated object
                        var gc = stop.AssociatedObject as IGeocodable;
                        if (gc != null && gc.IsGeocoded)
                        {
                            stop.Path = new Polyline(new Point[] { (Point)gc.GeoLocation });
                        }
                        else
                        {
                            throw new RouteException(Properties.Messages.Error_BuildStopPathFailed); // exception
                        }
                    }

                    // set directions
                    stop.Directions = stopDirs;
                    ++nDir;
                }
            }
        }
        public Tuple <string, StopData> BuildStopPacket()
        {
            StopData obj = new StopData()
            {
                id   = "pause",
                data =
                {
                }
            };

            string json = JsonConvert.SerializeObject(obj);

            return(new Tuple <string, StopData>(json, obj));
        }
Пример #8
0
 public Stop(StopData sd)
 {
     Command      = sd.Command;
     ManifestId   = sd.ManifestId;
     DisplaySeq   = sd.DisplaySeq;
     DealerNo     = sd.DealerNo;
     DealerName   = sd.DealerName;
     Address      = sd.Address;
     PhoneNumber  = sd.PhoneNumber;
     Description  = sd.Description;
     Notes        = sd.Notes;
     TRK_CDE      = sd.TruckCode;
     CustomerId   = sd.CustomerId;
     BillComplete = sd.BillComplete;
 }
Пример #9
0
        /// <summary>
        /// Gets arrival delay for selected stop.
        /// </summary>
        /// <param name="arrivalDelay">Arrival delay value.</param>
        /// <param name="stop">Stop as source.</param>
        /// <param name="prevStopPoint">Previously stop point.</param>
        /// <returns>Arrival delay value or 0 if not need considers arrival delay.</returns>
        private static int _GetArrivalDelay(int arrivalDelay,
                                            StopData stop,
                                            ref Point?prevStopPoint)
        {
            Debug.Assert(null != stop);

            Point point = _GetStopPoint(stop);

            // if location changed
            bool needDelay = (!prevStopPoint.HasValue ||
                              (prevStopPoint.HasValue && (point != prevStopPoint)));

            prevStopPoint = point;

            return(needDelay ? arrivalDelay : 0);
        }
Пример #10
0
        ///////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////

        /// <summary>
        /// Gets stop's point.
        /// </summary>
        /// <param name="stop">Stop as source for point.</param>
        /// <returns>Stop's related point.</returns>
        private static Point _GetStopPoint(StopData stop)
        {
            Debug.Assert(null != stop);
            Debug.Assert(StopType.Lunch != stop.StopType);
            Debug.Assert(null != stop.AssociatedObject);

            var geocodable = stop.AssociatedObject as IGeocodable;

            Debug.Assert(null != geocodable);

            Point?pt = geocodable.GeoLocation;

            Debug.Assert(pt != null);

            return(pt.Value);
        }
Пример #11
0
        internal StopData GetData()
        {
            StopData stopData = new StopData();

            stopData.Distance       = this.Distance;
            stopData.SequenceNumber = this.SequenceNumber;
            stopData.WaitTime       = this.WaitTime;
            stopData.TimeAtStop     = this.TimeAtStop;
            stopData.TravelTime     = this.TravelTime;
            stopData.ArriveTime     = this.ArriveTime != null ?
                                      (DateTime)this.ArriveTime : DateTime.MinValue;
            stopData.StopType            = this.StopType;
            stopData.AssociatedObject    = this.AssociatedObject;
            stopData.OrderSequenceNumber = this.OrderSequenceNumber;
            stopData.Path       = this.Path;
            stopData.Directions = this.Directions;
            stopData.IsLocked   = this.IsLocked;

            return(stopData);
        }
Пример #12
0
        internal static Stop CreateFromData(StopData stopData)
        {
            Debug.Assert(stopData != null);

            Stop stop = new Stop();

            stop.Distance            = stopData.Distance;
            stop.SequenceNumber      = stopData.SequenceNumber;
            stop.WaitTime            = stopData.WaitTime;
            stop.TimeAtStop          = stopData.TimeAtStop;
            stop.TravelTime          = stopData.TravelTime;
            stop.ArriveTime          = stopData.ArriveTime;
            stop.StopType            = stopData.StopType;
            stop.AssociatedObject    = stopData.AssociatedObject;
            stop.OrderSequenceNumber = stopData.OrderSequenceNumber;
            stop.Path       = stopData.Path;
            stop.Directions = stopData.Directions;
            stop.IsLocked   = stopData.IsLocked;

            return(stop);
        }
Пример #13
0
        /// <summary>
        /// Gets stop data for a stop where lunch stop was placed.
        /// </summary>
        /// <param name="sortedStops">A collection of route stops sorted by their sequence
        /// numbers.</param>
        /// <param name="startIndex">Index to srart search in sortedStops.</param>
        /// <param name="indexStep">Index incrementation value (1 or -1).</param>
        /// <returns>A stop data for an actual stop where lunch was placed or NULL.</returns>
        private static StopData _GetActualLunchStop(IList <StopData> sortedStops,
                                                    int startIndex,
                                                    int indexStep)
        {
            Debug.Assert(null != sortedStops);
            Debug.Assert(startIndex < sortedStops.Count);

            StopData actualStop = null;

            for (int index = startIndex;
                 (0 <= index) && (index < sortedStops.Count);
                 index += indexStep)
            {
                StopData currStop = sortedStops[index];
                if (currStop.StopType != StopType.Lunch)
                {          // actual stop can't be lunch
                    actualStop = currStop;
                    break; // result found
                }
            }

            return(actualStop);
        }
Пример #14
0
        public IMDMMessage QueryData(Func <byte[], Task> cb, isaCommand dat)
        {
            IMDMMessage     retVal = null;
            SPCmds          SP;
            manifestRequest req; // (manifestRequest)dat;

            switch (dat.command)
            {
            case eCommand.Drivers:
                SP = SPCmds.GETAVAILABLEDRIVERS;
                break;

            case eCommand.Manifest:
                SP = SPCmds.GETDRIVERMANIFEST;
                break;

            case eCommand.Trucks:
                SP = SPCmds.GETTRUCKS;
                break;

            case eCommand.Stops:
                SP = SPCmds.GETSTOPS;
                break;

            case eCommand.Orders:
            case eCommand.OrdersLoad:
                SP = SPCmds.GETORDERS;
                break;

            case eCommand.GenerateManifest:
                SP = SPCmds.GETMANIFEST;
                break;

            default:
                throw new Exception("Not handled");
            }

            using (SqlConnection cnn = new SqlConnection(UMDDB.connectionString))
            {
                using (var adapter = new SqlDataAdapter())
                {
                    using (var command = new SqlCommand(SP.ToString(), cnn))
                    {
                        command.CommandType = CommandType.StoredProcedure;

                        switch (dat.command)
                        {
                        case eCommand.Drivers:
                            req = (manifestRequest)dat;
                            command.Parameters.AddWithValue("@SHP_DTE", SqlDbType.Date).Value = DateTime.Parse(req.date).Date.ToString("yyyy-MM-dd");
                            dat.command = eCommand.DriversLoadComplete;
                            retVal      = new DriverData()
                            {
                                RequestId = new Guid(req.requestId)
                            };
                            Logger.Info($"QueryData Drivers. Cmd:{retVal.Command.ToString()}  reqId: {retVal.RequestId.ToString()} SHP_DTE: {DateTime.Parse(req.date).Date.ToString("yyyy-MM-dd")}");
                            break;

                        case eCommand.Manifest:
                            req = (manifestRequest)dat;
                            command.Parameters.AddWithValue("@DriverId", SqlDbType.Int).Value = req.id;
                            retVal = new ManifestMasterData()
                            {
                                RequestId = new Guid(req.requestId)
                            };
                            Logger.Info($"QueryData Manifest. Cmd:{retVal.Command.ToString()}  reqId: {retVal.RequestId.ToString()}  DriverId: {req.id} ");
                            dat.command = eCommand.ManifestLoadComplete;
                            break;

                        case eCommand.Trucks:
                            req = (manifestRequest)dat;
                            command.Parameters.AddWithValue("@SHP_DTE", SqlDbType.Date).Value = DateTime.Parse(req.date).Date.ToString("yyyy-MM-dd");
                            dat.command = eCommand.TrucksLoadComplete;
                            Logger.Info($"QueryData Trucks. Cmd:{req.command.ToString()}  reqId: {new Guid(req.requestId).ToString()} SHP_DTE: {DateTime.Parse(req.date).Date.ToString("yyyy-MM-dd")}");

                            retVal = new TruckData()
                            {
                                RequestId = new Guid(req.requestId)
                            };
                            break;

                        case eCommand.Stops:
                            req = (manifestRequest)dat;
                            command.Parameters.AddWithValue("@ManifestId", SqlDbType.Int).Value = req.id;
                            dat.command = eCommand.StopsLoadComplete;
                            Logger.Info($"QueryData Stops. Cmd:{req.command.ToString()}  reqId: {new Guid(req.requestId).ToString()}  manId: {req.id}");
                            retVal = new StopData()
                            {
                                RequestId = new Guid(req.requestId)
                            };
                            break;

                        case eCommand.Orders:
                        case eCommand.OrdersLoad:
                            req = (manifestRequest)dat;
                            command.Parameters.AddWithValue("@ManifestId", SqlDbType.Int).Value = req.id;
                            dat.command = eCommand.OrdersLoadComplete;
                            command.Parameters.AddWithValue("@Stop", SqlDbType.Int).Value = req.Stop;
                            Logger.Info($"QueryData Orders. Cmd:{req.command.ToString()}  reqId: {new Guid(req.requestId).ToString()}  stop: {req.Stop.ToString()}");
                            retVal = new OrderMasterData()
                            {
                                RequestId = new Guid(req.requestId)
                            };
                            break;

                        case eCommand.GenerateManifest:
                            // req = (manifestRequest)dat;
                            command.Parameters.AddWithValue("@Link", SqlDbType.BigInt).Value = ((manifestMaster)dat).LINK;
                            dat.command = eCommand.ManifestLoadComplete;

                            Logger.Info($"QueryData GenerateManifest. " +
                                        $"Cmd:{dat.command.ToString()}  " +
                                        $"reqId: {new Guid(dat.requestId).ToString()}" +
                                        $"link: { ((manifestMaster)dat).LINK}");

                            retVal = new ManifestMasterData()
                            {
                                LINK = ((manifestMaster)dat).LINK, RequestId = new Guid(dat.requestId)
                            };
                            break;

                        default:
                        {
                            Logger.Error($"QueryData Unkonwn Command. " +
                                         $"Cmd:{retVal.Command.ToString()}  " +
                                         $"reqId: {retVal.RequestId.ToString()}");

                            throw new Exception("Not handled");
                        }
                        }
                        adapter.SelectCommand = command;
                        SqlDataReader reader = null;
                        try
                        {
                            cnn.Open();
                            reader = adapter.SelectCommand.ExecuteReader();
                        }
                        catch (Exception ex) { }

                        while (reader.Read())
                        {
                            switch (retVal.Command)
                            {
                            case eCommand.Drivers:
                                drivers drv = (drivers)MyQueryReader_Driver(reader, cb);
                                drv.requestId = dat.requestId;
                                drv.command   = eCommand.Drivers;
                                Logger.Info($"QueryData Manifest. Cmd:{drv.command.ToString()}  reqId: {new Guid(drv.requestId).ToString()}  Link: {drv.DriverId}  manId: {drv.LastName}, {drv.FirstName} ");
                                cb(drv.ToArray());
                                break;

                            case eCommand.Manifest:
                            case eCommand.GenerateManifest:
                                manifestMaster micmd = (manifestMaster)myQueryData_GetManifest(reader, cb);
                                micmd.requestId = dat.requestId;
                                micmd.command   = eCommand.Manifest;
                                Logger.Info($"QueryData Manifest. Cmd:{micmd.command.ToString()}  reqId: {new Guid(micmd.requestId).ToString()}  Link: {micmd.LINK}  manId: {micmd.id} ");
                                cb(micmd.ToArray());
                                break;

                            case eCommand.Trucks:
                                trucks tcmd = (trucks)MyQueryReader_Trucks(reader, cb);
                                tcmd.requestId = dat.requestId;
                                tcmd.command   = eCommand.Trucks;
                                Logger.Info($"QueryData Trucks. Cmd:{tcmd.command.ToString()}  reqId: {new Guid(tcmd.requestId).ToString()}  TRK_CDE: {tcmd.TruckCode}  ManId: {tcmd.ManifestId}");
                                cb(tcmd.ToArray());
                                break;

                            case eCommand.Stops:
                                stops scmd = (stops)MyQueryReader_Stops(reader, cb);
                                scmd.requestId = dat.requestId;
                                scmd.command   = eCommand.Stops;
                                Logger.Info($"QueryData Stops. Cmd:{scmd.command.ToString()} reqId: {new Guid(scmd.requestId).ToString()} manId: {scmd.ManifestId}");
                                cb(scmd.ToArray());
                                break;

                            case eCommand.Orders:
                            case eCommand.OrdersLoad:
                                var ocmd = (orders)MyQueryReader_Orders(reader, cb);
                                ocmd.requestId = dat.requestId;
                                ocmd.command   = eCommand.OrdersLoad;
                                Logger.Info($"QueryData Orders. Cmd:{ocmd.command.ToString()} reqId: {new Guid(ocmd.requestId).ToString()}");
                                cb(ocmd.ToArray());
                                break;

                            default:
                                throw new Exception("Not handled");
                            }
                        }

                        Logger.Info($"QueryData Completed. Cmd:{dat.command.ToString()} reqId: {new Guid(dat.requestId).ToString()}");
                        cb(dat.ToArray());
                    }
                }
            }

            return(retVal);
        }
Пример #15
0
        /// <summary>
        /// Gets effective TimeWindow.
        /// </summary>
        /// <param name="stop">Stop data.</param>
        /// <param name="twStart">Start timewindow (can be null).</param>
        /// <param name="twEnd">End timewindow (can be null).</param>
        /// <returns>TRUE if twStart and twEnd not null.</returns>
        private static bool _GetEffectiveTW(StopData stop,
                                            out DateTime?twStart,
                                            out DateTime?twEnd)
        {
            Debug.Assert(stop != null);

            twStart = null;
            twEnd   = null;

            bool hasTW1 = (stop.TimeWindowStart1 != null && stop.TimeWindowEnd1 != null);
            bool hasTW2 = (stop.TimeWindowStart2 != null && stop.TimeWindowEnd2 != null);

            DateTime?start = null;
            DateTime?end   = null;

            bool result = false;

            if (stop.StopType == StopType.Order || stop.StopType == StopType.Location)
            {
                // Orders and locations have 2 time windows, need to choose appropriate one.
                if (hasTW1 && hasTW2)
                {
                    // Find and set time window, where time of arrival falls within the range.
                    if (stop.ArriveTime <= (DateTime)stop.TimeWindowEnd1)
                    {
                        start = stop.TimeWindowStart1;
                        end   = stop.TimeWindowEnd1;
                    }
                    else
                    {
                        start = stop.TimeWindowStart2;
                        end   = stop.TimeWindowEnd2;
                    }
                }
                else
                {
                    // Set one of existed time windows.
                    if (hasTW1)
                    {
                        start = stop.TimeWindowStart1;
                        end   = stop.TimeWindowEnd1;
                    }
                    else if (hasTW2)
                    {
                        start = stop.TimeWindowStart2;
                        end   = stop.TimeWindowEnd2;
                    }
                }
            }
            else if (stop.StopType == StopType.Lunch)
            {
                if (hasTW1)
                {
                    // Breaks have only one time window.
                    start = stop.TimeWindowStart1;
                    end   = stop.TimeWindowEnd1;
                }
            }

            if (start != null && end != null)
            {
                twStart = start;
                twEnd   = end;

                result = true;
            }

            return(result);
        }
        void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            object[]            parameters = e.UserState as object[];
            isaCommand          cmd        = (isaCommand )parameters[0];
            Func <byte[], Task> cbsend     = null;

            if (parameters.Length == 3)
            {
                cbsend = (Func <byte[], Task>)parameters[2];
            }
            IMDMMessage mcmd = null;

            switch (cmd.command)
            {
            case eCommand.Manifest:
                mcmd = new ManifestMasterData((manifestMaster)cmd, ((manifestMaster)cmd).id);
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.ManifestLoadComplete:
                manifestRequest mreq = (manifestRequest)cmd;
                if (mreq.valist != null)
                {
                    foreach (var it in mreq.valist)
                    {
                        mcmd = new ManifestMasterData()
                        {
                            RequestId = new Guid(cmd.requestId),
                            LINK      = it,
                            SHIP_DTE  = DateTime.Today,
                            Command   = eCommand.ManifestLoadComplete
                        };
                        Sendback((O)mcmd, cbsend);
                    }
                }
                else
                {
                    mcmd = new ManifestMasterData()
                    {
                        RequestId = new Guid(cmd.requestId),
                        LINK      = -1,
                        SHIP_DTE  = DateTime.Today,
                        Command   = eCommand.ManifestLoadComplete
                    };
                    Sendback((O)mcmd, cbsend);
                }
                break;

            case eCommand.CheckManifestComplete:
                mcmd = new ManifestMasterData((manifestMaster)cmd, ((manifestMaster)cmd).id, false);
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.CheckManifest:
                mcmd = new ManifestMasterData((manifestMaster)cmd, ((manifestMaster)cmd).id, false);
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.Drivers:
                mcmd = new DriverData()
                {
                    Command = cmd.command
                };
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.DriversLoadComplete:
                mcmd = (DriverData)cmd;
                Sendback((O)mcmd, cbsend);
                CompleteBackgroundWorker(new Guid(cmd.requestId));
                break;

            case eCommand.ManifestDetails:
                mcmd = new ManifestDetailsData()
                {
                    Command = cmd.command
                };
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.AccountReceivable:
                mcmd = new AccountsReceivableData((accountReceivable)cmd);
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.ManifestDetailsComplete:
                mreq = (manifestRequest)cmd;

                if (mreq.valist != null)
                {
                    foreach (var it in mreq.valist)
                    {
                        mcmd = new ManifestDetailsData()
                        {
                            RequestId = new Guid(cmd.requestId),
                            DLR_NO    = it,
                            Command   = eCommand.ManifestDetailsComplete
                        };
                        Sendback((O)mcmd, cbsend);
                    }
                }
                else
                {
                    mcmd = new ManifestMasterData()
                    {
                        RequestId = new Guid(cmd.requestId),
                        LINK      = -1,
                        SHIP_DTE  = DateTime.Today,
                        Command   = eCommand.ManifestLoadComplete
                    };
                    Sendback((O)mcmd, cbsend);
                }
                //mcmd = new ManifestDetailsData((manifestDetails)cmd);
                //Sendback((O)mcmd, cbsend);
                //CompleteBackgroundWorker(new Guid(cmd.requestId));
                break;
            //case eCommand.OrdersLoad:
            //    mcmd = new OrderMasterData() {
            //        Command = cmd.command,
            //        ORD_NO=((orderMaster)cmd).ORD_NO,
            //        Status = ((orderMaster)cmd).Status
            //    };
            //    Sendback((O)mcmd, cbsend);
            //    break;

            case eCommand.OrdersUpload:
                mcmd = new OrderMasterData()
                {
                    Command = cmd.command,
                    ORD_NO  = ((orderMaster)cmd).ORD_NO,
                    Status  = ((orderMaster)cmd).Status
                };
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.OrderUpdatesComplete:
                mreq = (manifestRequest)cmd;

                if (mreq.valist != null)
                {
                    foreach (var it in mreq.valist)
                    {
                        mcmd = new OrderMasterData()
                        {
                            RequestId = new Guid(cmd.requestId),
                            ORD_NO    = (int)it,
                            Command   = eCommand.ManifestDetailsComplete
                        };
                        Sendback((O)mcmd, cbsend);
                    }
                }

                break;

            case eCommand.OrderDetails:
                mcmd = new OrderDetailsData((orderDetails)cmd);

                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.OrderDetailsComplete:
                mreq = (manifestRequest)cmd;

                if (mreq.valist != null)
                {
                    foreach (var it in mreq.valist)
                    {
                        mcmd = new OrderDetailsData()
                        {
                            RequestId  = new Guid(cmd.requestId),
                            ORD_NO     = it,
                            LineNumber = mreq.Stop,   // using as the count (number of OrderDetail Records Expected)
                            Command    = eCommand.OrderDetailsComplete
                        };
                        Sendback((O)mcmd, cbsend);
                    }
                }
                break;

            case eCommand.OrderOptions:
                mcmd = new OrderOptionsData((orderOptions)cmd);
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.OrderOptionsComplete:
                mreq = (manifestRequest)cmd;

                if (mreq.valist != null)
                {
                    foreach (var it in mreq.valist)
                    {
                        mcmd = new OrderOptionsData()
                        {
                            RequestId = new Guid(cmd.requestId),
                            ORD_NO    = (int)it,
                            Count     = mreq.Stop, // using as the count (number of OrderDetail Records Expected)
                            Command   = eCommand.OrderOptionsComplete
                        };
                        Sendback((O)mcmd, cbsend);
                    }
                }
                break;

            case eCommand.ScanFile:
                mcmd = new ScanFileData((scanFile)cmd);
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.Trucks:
                mcmd = new TruckData((trucks)cmd);
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.TrucksLoadComplete:
                mreq = (manifestRequest)cmd;
                mcmd = new TruckData()
                {
                    RequestId  = new Guid(cmd.requestId),
                    ManifestId = mreq.id,
                    Command    = eCommand.TrucksLoadComplete
                };
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.Stops:
                mcmd = new StopData((stops)cmd);
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.StopsLoadComplete:
                mcmd = new StopData()
                {
                    Command = cmd.command, RequestId = new Guid(cmd.requestId)
                };
                mreq = (manifestRequest)cmd;
                if (mreq.valist != null)
                {
                    foreach (var id in mreq.valist)
                    {
                        mcmd = new StopData()
                        {
                            Command = cmd.command,
                            //TruckCode = TRK_CDE,
                            RequestId = new Guid(cmd.requestId)
                        };
                        Sendback((O)mcmd, cbsend);
                    }
                }
                else
                {
                    mcmd = new StopData()
                    {
                        Command = cmd.command,
                        //TruckCode = TRK_CDE,
                        RequestId = new Guid(cmd.requestId)
                    };
                    Sendback((O)mcmd, cbsend);
                }
                break;

            case eCommand.OrdersLoad:
                mcmd = new OrderData((orders)cmd);
                Sendback((O)mcmd, cbsend);
                break;

            case eCommand.OrdersLoadComplete:
                mreq = (manifestRequest)cmd;
                if (mreq.valist != null)
                {
                    foreach (var id in mreq.valist)
                    {
                        mcmd = new OrderData()
                        {
                            Command   = cmd.command,
                            DLR_NO    = (int)id,
                            RequestId = new Guid(cmd.requestId)
                        };
                        Sendback((O)mcmd, cbsend);
                    }
                }
                else
                {
                    Logger.Info($"OrdersLoadComplete: {cmd.ToString()}");
                    mcmd = new OrderData()
                    {
                        Command = cmd.command,
//                            DLR_NO = id,
                        RequestId = new Guid(cmd.requestId)
                    };
                    Sendback((O)mcmd, cbsend);
                }

                break;

            case eCommand.UploadManifestComplete:
                mcmd = new ManifestMasterData()
                {
                    Command = cmd.command, RequestId = NewGuid(cmd.requestId)
                };
                Sendback((O)mcmd, cbsend);
                break;

            default:
                Logger.Error($"Unhandled command Backgrtound worker handler {Enum.GetName(typeof(eCommand), cmd.command)}.");
                break;
            }
        }
Пример #17
0
        /// <summary>
        /// Method gets stops date from route.
        /// </summary>
        /// <param name="route">Route to get information.</param>
        /// <returns>Collection of stops data.</returns>
        private List <StopData> _GetStops(Route route)
        {
            Debug.Assert(route != null);

            IDataObjectCollection <Stop> stops = route.Stops;
            int stopsCount = stops.Count;

            var stopDatas = new List <StopData>(stopsCount);

            for (int index = 0; index < stopsCount; ++index)
            {
                Stop stop = stops[index];

                StopData sd = new StopData();
                sd.SequenceNumber = stop.SequenceNumber;
                sd.Distance       = stop.Distance;
                sd.WaitTime       = stop.WaitTime;
                sd.TimeAtStop     = stop.TimeAtStop;
                sd.TravelTime     = stop.TravelTime;
                sd.ArriveTime     = (DateTime)stop.ArriveTime;

                if (stop.StopType == StopType.Lunch)
                {
                    // Break.

                    // ToDo - need update logic - now find only first TWBreak.
                    var twBreaks =
                        from currBreak in route.Breaks
                        where
                        currBreak is TimeWindowBreak
                        select currBreak;

                    TimeWindowBreak rtBreak = twBreaks.FirstOrDefault() as TimeWindowBreak;
                    if (rtBreak != null && rtBreak.Duration > 0.0)
                    {
                        // TODO Break

                        //// Time window.
                        //DateTime? twStart = null;
                        //DateTime? twEnd = null;
                        //if (rtBreak.TimeWindow != null)
                        //    _ConvertTW(rtBreak.TimeWindow, out twStart, out twEnd);
                        sd.TimeWindowStart1 = _TSToDate(rtBreak.From);
                        sd.TimeWindowEnd1   = _TSToDate(rtBreak.To);
                    }
                }
                else
                {
                    Debug.Assert(stop.AssociatedObject != null);

                    // Associated object id.
                    sd.AssociatedObject = stop.AssociatedObject;

                    // Geometry.
                    Point pt = _GetStopPoint(stop);
                    sd.Geometry = GPObjectHelper.PointToGPPoint(pt);

                    // Time windows.
                    DateTime?twStart1 = null;
                    DateTime?twStart2 = null;
                    DateTime?twEnd1   = null;
                    DateTime?twEnd2   = null;

                    // Type-specific data.
                    if (stop.StopType == StopType.Order)
                    {
                        Order order = stop.AssociatedObject as Order;
                        Debug.Assert(order != null);

                        // Curbapproach.
                        sd.NACurbApproach =
                            CurbApproachConverter.ToNACurbApproach(
                                _context.SolverSettings.GetDepotCurbApproach());

                        // Time window 1.
                        if (order.TimeWindow != null)
                        {
                            _ConvertTW(order.TimeWindow, out twStart1, out twEnd1);
                        }

                        // Time window 2.
                        if (order.TimeWindow2 != null)
                        {
                            _ConvertTW(order.TimeWindow2, out twStart2, out twEnd2);
                        }
                    }
                    else if (stop.StopType == StopType.Location)
                    {
                        Location loc = stop.AssociatedObject as Location;
                        Debug.Assert(loc != null);

                        // Time window.
                        if (loc.TimeWindow != null)
                        {
                            _ConvertTW(loc.TimeWindow, out twStart1, out twEnd1);
                        }
                    }

                    sd.TimeWindowStart1 = twStart1;
                    sd.TimeWindowStart2 = twStart2;
                    sd.TimeWindowEnd1   = twEnd1;
                    sd.TimeWindowEnd2   = twEnd2;
                }

                sd.RouteId  = route.Id;
                sd.StopType = stop.StopType;
                stopDatas.Add(sd);
            }

            SolveHelper.ConsiderArrivalDelayInStops(
                _context.SolverSettings.ArriveDepartDelay, stopDatas);

            return(stopDatas);
        }
Пример #18
0
        ///////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////

        /// <summary>
        /// Builds stop features.
        /// </summary>
        /// <param name="stops">Stops.</param>
        /// <returns>Created route stops recordset for stops.</returns>
        private RouteStopsRecordSet _BuildStopFeatures(IList <StopData> stops)
        {
            Debug.Assert(stops != null);

            // Sort stops respecting sequence.
            var sortedStops = new List <StopData>(stops);

            SolveHelper.SortBySequence(sortedStops);

            Debug.Assert(_context != null);

            SolveHelper.ConsiderArrivalDelayInStops(
                _context.SolverSettings.ArriveDepartDelay, sortedStops);

            // Format impedance attribute name.
            string impedanceAttrName = null;

            if (!string.IsNullOrEmpty(_context.NetworkDescription.ImpedanceAttributeName))
            {
                impedanceAttrName = string.Format(IMPEDANCE_ATTR_FORMAT,
                                                  _context.NetworkDescription.ImpedanceAttributeName);
            }

            var features = new List <GPFeature>();

            for (int index = 0; index < sortedStops.Count; ++index)
            {
                var feature = new GPFeature();

                // Attributes.
                feature.Attributes = new AttrDictionary();

                StopData sd = sortedStops[index];

                Guid objectId = Guid.Empty;
                if (sd.AssociatedObject != null)
                {
                    objectId = sd.AssociatedObject.Id;
                }

                feature.Attributes.Add(NAAttribute.NAME, objectId.ToString());
                feature.Attributes.Add(NAAttribute.ROUTE_NAME, sd.RouteId.ToString());

                // Effective time window.
                DateTime?twStart = null;
                DateTime?twEnd   = null;
                _GetEffectiveTW(sd, out twStart, out twEnd); // NOTE: ignore result
                feature.Attributes.Add(NAAttribute.TW_START, _FormatStopTime(twStart));
                feature.Attributes.Add(NAAttribute.TW_END, _FormatStopTime(twEnd));

                // Service time.
                if (impedanceAttrName != null)
                {
                    feature.Attributes.Add(impedanceAttrName, sd.TimeAtStop);
                }

                var geometry = new GeometryHolder();
                geometry.Value = sd.Geometry;

                if (sd.StopType == StopType.Lunch)
                {
                    var actualStop = SolveHelper.GetActualLunchStop(sortedStops, index);
                    geometry.Value = actualStop.Geometry;
                }

                // Set curb approach.
                var curbApproach = CurbApproachConverter.ToNACurbApproach(
                    _context.SolverSettings.GetOrderCurbApproach());
                if (sd.StopType == StopType.Location)
                {
                    curbApproach = CurbApproachConverter.ToNACurbApproach(
                        _context.SolverSettings.GetDepotCurbApproach());
                }

                feature.Attributes.Add(NAAttribute.CURB_APPROACH, (int)curbApproach);
                feature.Geometry = geometry;

                features.Add(feature);
            }

            var rs = new RouteStopsRecordSet();

            rs.Features = features.ToArray();

            // TODO: will be changed later when support custom AddLocations tool
            rs.DoNotLocateOnRestrictedElements = _context.SolverSettings.ExcludeRestrictedStreets;

            return(rs);
        }
Пример #19
0
 public Orders(StopData sd)
 {
     InitializeComponent();
     stop = sd;
 }
Пример #20
0
 public StopDetailsViewModel(StopData data)
 {
     _data     = data;
     _passages = new ObservableRangeCollection <PassageListItem>();
     Title     = data.Name;
 }
Пример #21
0
        public void HandleClientCmd(byte[] bytes_cmd, Func <byte[], Task> cbsend)
        {
            isaCommand cmd = new Command().FromArray(bytes_cmd);

            switch (cmd.command)
            {
            case eCommand.Ping:
                Logger.Debug("HandleClientCmd -  Received Ping / Replying Pong..");
                cbsend(new Command()
                {
                    command = eCommand.Pong
                }.ToArray());
                break;

            case eCommand.Pong:
                Logger.Debug("HandleClientCmd -  Received Pong");
                break;

            case eCommand.LoadFiles:
                Logger.Info("HandleClientCmd - Copy Files from Winsys Server Paths top App Server Paths:{cmd.ToString()}");
                //CopyFilesToServer(DateTime.Today);
                Logger.Info("HandleClientCmd - Replying LoadFilesComplete...");
                cbsend(new Command()
                {
                    command = eCommand.LoadFilesComplete
                }.ToArray());
                break;

            case eCommand.GenerateManifest:
                Logger.Info($"HandleClientCmd - ManifestDetails:{cmd.ToString()}");

                manifestMaster mM = (manifestMaster) new manifestMaster().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd Generate Manifest from Winsys and SqlServer:{mM.ToString()}");
                if (mM.LINK != 0)
                {
                    ManifestMasterData mmd = (ManifestMasterData)UMDServer.QueryData(cbsend, mM);
                    Logger.Info($"API Manager GenerateManifest. {mmd.ToString()}");
                }
                else
                {
                    WinSysSM.SendMessage(cmd);
                }
                break;

            case eCommand.CheckManifest:
                Logger.Info($"HandleClientCmd - CheckManifest:{cmd.ToString()}");
                //ManifestMasterData mMstData = (ManifestMasterData)new ManifestMasterData(bytes_cmd);
                manifestMaster mMst = (manifestMaster) new manifestMaster().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd Compare Manifest from Winsys to SqlServer: {mMst.ToString()}");
                ManifestMasterData mamd = (ManifestMasterData)UMDServer.QueryData(cbsend, mMst);
                Logger.Info($"API Manager GenerateManifest. {mamd.ToString()}");
                break;

            case eCommand.RunQuery:
                Logger.Info($"HandleClientCmd - ManifestDetails: {cmd.ToString()}");

                //DriverData dd = (DriverData)GetDrivers(cbsend);
                break;

            case eCommand.Manifest:
                Logger.Info($"HandleClientCmd - Manifest from Winsys and SqlServer:{cmd.ToString()}");
                cbsend(cmd.ToArray());
                break;

            case eCommand.Trucks:
                Logger.Info($"HandleClientCmd - Trucks: {cmd.ToString()}");

                isaCommand req = new manifestRequest().FromArray(bytes_cmd);
                TruckData  td  = (TruckData)UMDServer.QueryData(cbsend, req);
                Logger.Info($"HandleClientCmd - Trucks.  reqId:{req.ToString()}");
                break;

            case eCommand.ManifestDetails:
                Logger.Info($"HandleClientCmd - ManifestDetails:{cmd.ToString()}");
                isaCommand reqmd = new manifestRequest().FromArray(bytes_cmd);
                // ManifestDetailsData mdd =
                manifestDetails     manDet     = new manifestDetails();
                ManifestDetailsData manDetData = (ManifestDetailsData)manDet.FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - ManifestDetails:{manDetData.ToString()}");

                foreach (var mmd in UMDServer.Persist(SPCmds.INSERTMANIFESTDETAILS, manDetData))
                {
                    drillDown.GetOrderMasterData((ManifestDetailsData)mmd);
                    mmd.Command   = eCommand.ManifestDetails;
                    mmd.RequestId = new Guid(manDet.requestId);
                    Logger.Info($"HandleClientCmd - ManifestDetails.  Sending GetOrderMasterData:{mmd.ToString()}");
                    cbsend(((manifestDetails)mmd).ToArray());
                }
                break;

            case eCommand.Orders:
                Logger.Info($"HandleClientCmd - ManifestDetails:{cmd.ToString()}");

                var om = (orderMaster) new orderMaster().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - Orders.  reqId: {om.ToString()}");
                foreach (var omd in UMDServer.Persist(SPCmds.INSERTORDER, new OrderMasterData(om)))
                {
                    drillDown.GetOrderDetailsData((OrderMasterData)omd);
                }
                break;

            case eCommand.OrderOptions:
                Logger.Info($"HandleClientCmd - ManifestDetails:{cmd.ToString()}");

                var oo = (orderOptions) new orderOptions().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - OrderOptions:{cmd.ToString()}");
                foreach (var mmd in UMDServer.Persist(SPCmds.INSERTORDEROPTIONS, new OrderOptionsData(oo)))
                {
                    var oopt = new orderOptions((OrderOptionsData)mmd);
                    oopt.command = eCommand.OrderOptionsComplete;
                    cbsend(oopt.ToArray());
                }
                break;

            case eCommand.OrderDetails:
                Logger.Info($"HandleClientCmd - ManifestDetails:{cmd.ToString()}");

                var odt = (orderDetails) new orderDetails().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - OrderDetails: {odt.ToString()}");
                foreach (var mmd in UMDServer.Persist(SPCmds.INSERTORDERDETAILS, new OrderDetailsData(odt)))
                {
                    orderDetails odd = new orderDetails((OrderDetailsData)mmd);
                    odd.command = eCommand.OrderDetailsComplete;
                    cbsend(odd.ToArray());
                }
                break;

            case eCommand.Drivers:
                Logger.Info($"HandleClientCmd - ManifestDetails:{cmd.ToString()}");
                req = new manifestRequest().FromArray(bytes_cmd);
                DriverData dd = (DriverData)UMDServer.QueryData(cbsend, req);
                //drivers drvs = new drivers(dd);
                //drvs.command = eCommand.DriversLoadComplete;
                //cbsend(drvs.ToArray());

                //cbsend(new Command() { command = eCommand.DriversLoadComplete, value = dd.DriverId.ToString() }.ToArray());
                break;

            case eCommand.UploadManifest:
                Logger.Info($"HandleClientCmd - UploadManifest:{cmd.ToString()}");

                manifestRequest mreq = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - UploadManifest:  {mreq.ToString()}");
                //ManifestMasterData Mmd = (ManifestMasterData)cmd;
                manifestMaster            mm     = (manifestMaster) new manifestMaster().FromArray(mreq.bData);
                IEnumerable <IMDMMessage> mmdata = UMDServer.Persist(SPCmds.INSERTMANIFEST, new ManifestMasterData(mm, mm.id));
                Logger.Info($"HandleClientCmd - UploadManifest Persisted:{mm.ToString()}");

                try
                {
                    ManifestMasterData mmd = null;
                    foreach (var mmdIt in mmdata)
                    {
                        mmd = (ManifestMasterData)mmdIt;
                        Logger.Info($"HandleClientCmd - UploadManifest - Get ManifestDetails sending ManMastData Trk:{mmd.ToString()}");
                        drillDown.GetManifestDetails(mmd, cbsend);
                    }
                    if (mmd != null)
                    {
                        manifestMaster mmRet = new manifestMaster(mmd);
                        mmRet.command = eCommand.ManifestLoadComplete;
                        Logger.Info($"HandleClientCmd - UploadManifest - Done (ManifestLoadComplete):{mreq.ToString()}");
                        cbsend(mmRet.ToArray());
                    }
                }
                catch (Exception e)
                {
                    Logger.Debug("HandleClientCmd - Error exception = " + e.Message);
                }

                break;

            case eCommand.Stops:
                Logger.Info($"HandleClientCmd - Stops.  reqId:{cmd.ToString()}");
                req = new manifestRequest().FromArray(bytes_cmd);
                StopData sd   = (StopData)UMDServer.QueryData(cbsend, req);
                stops    stps = new stops(sd);
                stps.command = eCommand.StopsLoadComplete;
                cbsend(stps.ToArray());

                break;

            case eCommand.OrdersLoad:
                req = new manifestRequest().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - OrdersLoad (Start QueryData): {req.ToString()}");
                OrderData od   = (OrderData)UMDServer.QueryData(cbsend, req);
                orders    odrs = new orders(od);
                odrs.command = eCommand.OrdersLoadComplete;
                Logger.Info($"HandleClientCmd - OrdersLoad (OrdersLoadComplete): {odrs.ToString()}");
                cbsend(odrs.ToArray());
                break;

            default:
                Logger.Error("HandleClientCmd - ERROR Unknown command.  Parse Error MDM-API");
                break;
            }
        }
        public void HandleClientCmd(byte[] bytes_cmd, Func <byte[], Task> cbsend)
        {
            isaCommand cmd = new Command().FromArray(bytes_cmd);

            switch (cmd.command)
            {
            case eCommand.Ping:
                Logger.Debug("HandleClientCmd -  Received Ping / Replying Pong..");
                cbsend(new Command()
                {
                    command = eCommand.Pong
                }.ToArray());
                break;

            case eCommand.Pong:
                Logger.Debug("HandleClientCmd -  Received Pong");
                break;

            case eCommand.GenerateManifest:
                Logger.Info($"HandleClientCmd - Generate Manifest:{cmd.ToString()}");

                manifestMaster mM = (manifestMaster) new manifestMaster().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd Generate Manifest from Winsys and SqlServer:{mM.ToString()}");
                if (mM.LINK != 0)
                {
                    ManifestMasterData mmd1 = (ManifestMasterData)UMDServer.QueryData(cbsend, mM);
                    Logger.Info($"API Manager GenerateManifest QueryData Complete. {mmd1.ToString()}");
                }
                else
                {
                    WinSysSM.SendMessage(cmd);
                }

                break;

            case eCommand.CheckManifest:
                Logger.Info($"HandleClientCmd - CheckManifest: {cmd.ToString()}");
                manifestMaster mMst = (manifestMaster) new manifestMaster().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd Check Manifest in ManagerAPI/SqlServer: {mMst.ToString()}");
                ManifestMasterData mamd = (ManifestMasterData)UMDServer.QueryData(cbsend, mMst);
                Logger.Info($"API Manager Check Manifest. {mamd.ToString()}");

                break;


            case eCommand.Manifest:
                Logger.Info($"HandleClientCmd - Manifest: {cmd.ToString()}");
                cbsend(cmd.ToArray());

                break;

            case eCommand.OrdersUpload:
                Logger.Info($"HandleClientCmd - Orders: {cmd.ToString()}");
                orderMaster            om      = (orderMaster) new orderMaster().FromArray(bytes_cmd);
                List <OrderMasterData> ordList = new List <OrderMasterData>();
                Logger.Info($"Persist INSERTORDER {om.ToString()}");
//                    om.Status = OrderStatus.Shipped;
                foreach (OrderMasterData omd in UMDServer.Persist(SPCmds.INSERTORDER, new OrderMasterData(om)))
                {
                    ordList.Add(omd);
                    Logger.Info($"Orders - drillDown.GetOrderDetailsData: {omd.ToString()}");
                    omd.Command = eCommand.OrdersLoadComplete;
                }

                //foreach (var ord in ordList)
                //{
                //    drillDown.GetOrderDetailsData(ord);
                //    drillDown.GetOrderOptionsData(ord);
                //}
                drillDown.GetOrderDetailsData(ordList);
                drillDown.GetOrderOptionsData(ordList);

                Logger.Info($"INSERTORDER Complete. OrdersLoadComplete: {om.ToString()}");
                om.command = eCommand.ManifestDetailsComplete;
                cbsend(om.ToArray());

                break;

            case eCommand.CompleteOrder:
                Logger.Info($"HandleClientCmd - Close Order: {cmd.ToString()}");

                manifestRequest mreq = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);

                Logger.Info($"HandleClientCmd - CompleteOrder:  {mreq.ToString()}");

                orderMaster cs = (orderMaster) new orderMaster().FromArray(mreq.bData);

                Logger.Info($"Persist COMPLETEORDER {cs.ToString()}");

                var no = new OrderMasterData(cs);
                foreach (OrderMasterData omd in UMDServer.Persist(SPCmds.COMPLETEORDER, no))
                {
                    Logger.Info($"Persisted COMPLETEORDER {omd.ToString()}");
                    cbsend(new orderMaster(omd).ToArray());
                }

                break;

            case eCommand.CompleteStop:

                Logger.Info($"HandleClientCmd - Close Stop for Orders: {cmd.ToString()}");

                manifestRequest mreqs = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);

                Logger.Info($"HandleClientCmd - CompleteStop:  {mreqs.ToString()}");

                StopData sd = new StopData();
                sd.POD        = mreqs.bData;
                sd.ManifestId = mreqs.id;
                sd.DisplaySeq = (int)mreqs.DATA;
                sd.Orders     = new List <OrderMasterData>();
                //temp - uncomment!
                // mreqs.valist.ForEach(v => sd.Orders.Add(new OrderMasterData() { DSP_SEQ=sd.DisplaySeq, ManifestId=sd.ManifestId, ORD_NO = v }));

                Logger.Info($"Persist COMPLETESTOP {sd.ToString()}");

                foreach (StopData omd in UMDServer.Persist(SPCmds.COMPLETESTOP, sd))
                {
                    Logger.Info($"Persisted COMPLETESTOP {sd.ToString()}");
                    cbsend(new stops(sd).ToArray());
                }

                break;

            case eCommand.OrderOptions:

                //throw new Exception("This should be handled by the Receive Message handler.");
                Logger.Info($"HandleClientCmd - OrderOptions:{cmd.ToString()}");
                manifestRequest mreqoo = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);

                OrderOptionsData ood = (OrderOptionsData)UMDServer.QueryData(cbsend, mreqoo);
                Logger.Info($"API Manager QueryData OrderOptionsData. {ood.ToString()}");

                break;

            case eCommand.OrderDetails:

                Logger.Info($"HandleClientCmd - OrderDetails:{cmd.ToString()}");
                manifestRequest mreqod = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);

                OrderDetailsData odd = (OrderDetailsData)UMDServer.QueryData(cbsend, mreqod);
                Logger.Info($"API Manager OrderDetailsData QueryData. {odd.ToString()}");
                break;

            case eCommand.UploadManifest:

                Logger.Info($"HandleClientCmd - UploadManifest:{cmd.ToString()}");

                mreq = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);

                Logger.Info($"HandleClientCmd - UploadManifest:  {mreq.ToString()}");

                manifestMaster mm = (manifestMaster) new manifestMaster().FromArray(mreq.bData);

                if (!dRetCall.ContainsKey(NewGuid(mm.requestId)))
                {
                    dRetCall.Add(NewGuid(mm.requestId), cbsend);
                }

                Logger.Info($"UploadManifest cb dRetCall:  {mm.ToString()}");

                try
                {
                    foreach (ManifestMasterData mmdit in UMDServer.Persist(SPCmds.INSERTMANIFEST, new ManifestMasterData(mm, mm.id)))
                    {
                        Logger.Info($"HandleClientCmd - UploadManifest Persisted:{mmdit.ToString()}");
                        Logger.Info($"UploadManifest - Get ManifestDetails: {mmdit.ToString()}");

                        if (!dManDetails.ContainsKey(mmdit.RequestId.ToString() + mmdit.ManifestId.ToString()))
                        {
                            dManDetails.Add(mmdit.RequestId.ToString() + mmdit.ManifestId.ToString(), new List <ManifestDetailsData>());
                        }

                        drillDown.GetManifestDetails(mmdit);
                    }
                    mm.command = eCommand.UploadManifestComplete;
                    Logger.Info($"UploadManifest - ManifestLoadComplete: {mm.ToString()}");
                    cbsend(mm.ToArray());
                }
                catch (Exception e)
                {
                    Logger.Debug("HandleClientCmd - Error exception = " + e.Message);
                    dRetCall.Remove(NewGuid(mm.requestId));
                }
                break;

            case eCommand.Trucks:
                isaCommand req = new manifestRequest().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - Trucks: {req.ToString()}");
                TruckData td = (TruckData)UMDServer.QueryData(cbsend, req);
                Logger.Info($"HandleClientCmd - Trucks:  {td.ToString()}");
                break;

            case eCommand.Drivers:
                req = new manifestRequest().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - Drivers: {req.ToString()}");
                DriverData dd = (DriverData)UMDServer.QueryData(cbsend, req);
                Logger.Info($"HandleClientCmd - Drivers:  {dd.ToString()}");
                break;

            case eCommand.Stops:
                req = new manifestRequest().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd Stops:  {req.ToString()}");
                StopData sdt = (StopData)UMDServer.QueryData(cbsend, req);
                Logger.Info($"Stops QueryData:  {sdt.ToString()}");
                break;

            case eCommand.OrdersLoad:
                req = new manifestRequest().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - OrdersLoad (Start QueryData): {req.ToString()}");
                OrderData od = (OrderData)UMDServer.QueryData(cbsend, req);
                Logger.Info($"OrdersLoad QueryData: {od.ToString()}");
                break;

            case eCommand.AccountReceivable:
                req = new manifestRequest().FromArray(bytes_cmd);
                manifestRequest        mr    = (manifestRequest)req;
                accountReceivable      arecv = (accountReceivable) new accountReceivable().FromArray(mr.bData);                    Logger.Info($"HandleClientCmd - AccountRecievable");
                AccountsReceivableData ard   = (AccountsReceivableData)
                                               UMDServer.QueryData(cbsend, arecv);
                Logger.Info($"AccountsReceivables Complete.");
                break;

            default:
                Logger.Error("HandleClientCmd - ERROR Unknown command.  Parse Error MDM-API");
                break;
            }
        }