internal override void DetermineDestinationAndRounting(SortedItem sortedItem, InboundLabel label) { // string sanNumber = label.GetElementValue("SAN").Substring(0, 6); sanNumber += Helper.CheckDigitMod11(sanNumber); sortedItem.SANNUmber = sanNumber; //sortedItem.CartonNumber = label.GetElementValue("CARTON"); sortedItem.PONumber = label.GetElementValue("PO"); string shipOverride = (ShipOverride.Length > 0 ? ShipOverride : label.GetElementValue("OSOVERRIDE")); try { sortedItem.SpecialAgent = SortFactory.CreateSpecialAgent(sortedItem.Client.Number, sortedItem.Client.Division, shipOverride); ArgixTrace.WriteLine(new TraceMessage("Special Agent: " + sortedItem.SpecialAgent.Type, AppLib.EVENTLOGNAME, LogLevel.Debug, "Brain ")); sortedItem.DestinationRouting = SortFactory.CreateSANDestinationRouting(sortedItem.Client.Number, sortedItem.Client.Division, sortedItem.Freight.Shipper.NUMBER, Self.Station.TerminalID.ToString().PadLeft(2, '0'), sanNumber, sortedItem.SpecialAgent.ZONE_CODE.Trim(), sortedItem.CartonNumber, !label.IsDuplicateElementAllowed("CARTON")); if (sortedItem.SpecialAgent.IsDefault) { sortedItem.SpecialAgent = SortFactory.CreateSpecialAgentByZone(sortedItem.Client.Number, sortedItem.Client.Division, sortedItem.DestinationRouting.ZoneCode.Trim()); } ArgixTrace.WriteLine(new TraceMessage("Special Agent: " + sortedItem.SpecialAgent.Type, AppLib.EVENTLOGNAME, LogLevel.Debug, "Brain ")); if (!UPSAllowed && sortedItem.SpecialAgent.Type == "UPSSpecialAgent") { sortedItem.SpecialAgent = null; throw new ApplicationException("UPS processing disabled."); } sortedItem.TrackingNumber = sortedItem.SpecialAgent.MakeTrackingNumber(sortedItem.DestinationRouting.OSSequence); sortedItem.LabelTemplate = SortFactory.CreateOBLabelTemplate(sortedItem.DestinationRouting.OutboundLabelType, Self.Station.PrinterType); } catch (Exception ex) { sortedItem.ThrowException(new DestinationRoutingException(ex)); } }
protected override void DetermineAssignment(string[] inputs, SortedItem sortedItem) { //Override the default implementation to determine the correct assignment //dynamically; if station has only one assignment, default implementation is OK try { if (Self.Assignments.Count == 1) { //One assignment: use base implementation base.DetermineAssignment(inputs, sortedItem); } else { //Multiple assignments: determine assignment by associating the assignment //with the client who has a store with the input SAN number //Create a default SAN label (for the purpose of extracting the SAN number only) //and determine the SAN number from the inputs InboundLabel label = FreightFactory.DefaultSanInboundLabel.Copy(); label.ClearData(); try { label.DetermineInputs(inputs); } catch (Exception ex) { sortedItem.ThrowException(new InboundLabelException(ex)); } string sanNumber = label.GetElementValue("SAN").Substring(0, 6); sanNumber += Helper.CheckDigitMod11(sanNumber); //Determine the client for this SAN number and associate with an assignment Client client = EnterpriseFactory.CreateClientForStoreSAN(Self.Assignments.Item(0).InboundFreight.Client.Division, sanNumber); StationAssignment assignment = Self.Assignments.Item(client); if (assignment == null) { sortedItem.ThrowException(new ClientForSanException()); } //Associate freight and sort information sortedItem.Freight = assignment.InboundFreight; sortedItem.SortProfile = assignment.SortProfile; } } catch (InboundLabelException ex) { throw ex; } catch (ApplicationException ex) { throw ex; } catch (Exception ex) { throw new ApplicationException("Unexpected error while determining freight assignment for multiple SAN freight assignments.", ex); } }
public virtual SortedItem CreateSortedItem(string[] inputs, int weight) { // SortedItem sortedItem = Self.NewSortedItem(); try { ArgixTrace.WriteLine(new TraceMessage("Determine assignment...", AppLib.EVENTLOGNAME, LogLevel.Debug, "Brain ")); DetermineAssignment(inputs, sortedItem); ArgixTrace.WriteLine(new TraceMessage("Get inbound label with data...", AppLib.EVENTLOGNAME, LogLevel.Debug, "Brain ")); InboundLabel label = getInboundLabelWithData(sortedItem, inputs); sortedItem.CartonNumber = label.GetElementValue("CARTON"); if (!label.IsDuplicateElementAllowed("CARTON")) { Self.DuplicateCartonValidation(sortedItem); } ArgixTrace.WriteLine(new TraceMessage("Determine destination and rounting...", AppLib.EVENTLOGNAME, LogLevel.Debug, "Brain ")); DetermineDestinationAndRounting(sortedItem, label); if (weight == 0) { sortedItem.ThrowException(new ZeroWeightException()); } if (weight > SortedItem.WeightMax) { sortedItem.ThrowException(new OverWeightException(weight)); } sortedItem.Weight = weight; sortedItem.ApplyOutboundLabel(); } catch (Exception ex) { if (!sortedItem.IsError()) { sortedItem.SortException = new HaveNoIdeaWhatItIsException(ex); } sortedItem.ApplyOutboundLabel(); //Apply error label } return(sortedItem); }