/// <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; } }
/// <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(); }
public StopDetailsPage(StopData data) : this() { _data = data; Title = data.Name; BindingContext = vm = new StopDetailsViewModel(data); this.Appearing += StopDetailsPage_Appearing; }
public Orders() { InitializeComponent(); stop = new StopData() { ManifestId = 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)); }
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; }
/// <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); }
/////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /// <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); }
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); }
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); }
/// <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); }
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); }
/// <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; } }
/// <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); }
/////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /// <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); }
public Orders(StopData sd) { InitializeComponent(); stop = sd; }
public StopDetailsViewModel(StopData data) { _data = data; _passages = new ObservableRangeCollection <PassageListItem>(); Title = data.Name; }
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; } }