using System.Collections.Generic;
using System.Diagnostics;
using TQL.BZT.BLL.DataContracts;
using TQL.BZT.Rules.Utils;
using System.Data.SqlClient;
using TQL.BZT.Repositories.Imaging;
namespace TQL.BZT.Rules.CassInfo.Bunzl
public static void setGroupValues(ref TQLBZTEDI210 edi210Obj)
public static void setCustomerValues(ref TQLBZTEDI210 edi210Obj)
RulesInfoCollection rulesinfocollection = new RulesInfoCollection();
rulesinfocollection = edi210Obj.LOADHDR.RULEINFOCollection;
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "B3", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "C3", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N9", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "G62", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N1Loop1", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N1Loop1_N1", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N1Loop1_N3", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N1Loop1_N4", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "L3", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_L5", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_L0", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_L1", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_L7", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "C2", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "ITD", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "R3", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "H3", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "K1", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N1Loop1_N2", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N1Loop1_N9_2", "T");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N7Loop1", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N7", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "M7", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "SPOLoop1", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "S5Loop1", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_N9_5", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_POD", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_H1", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_H2", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_L4", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_K1_2", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_SPOLoop3", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_SPOLoop3_SPO_3", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_SPOLoop3_SDQ_3", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_N1Loop3", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_N1Loop3_N1_3", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_N1Loop3_N2_3", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_N1Loop3_N3_3", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_N1Loop3_N4_3", "F");
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "LXLoop1_N1Loop3_N9_6", "F");
bool hasValidWarehouseCode = true;
bool hasValidBillOfLadingNumber = true;
bool hasValidPurchaseOrderNumber = true;
string warehouseCode = "";
string billOfLadingNumber = "";
string purchaseOrderNumber = "";
#region Change B3_10 Qualifier from 140 "Actual" to 035 "Delivered";
foreach (RulesInfo rule in edi210Obj.LOADHDR.RULEINFOCollection.Items)
if (rule.DESTINATIONNODE == "B310" && rule.DESTINATIONVALUE == "140") rule.DESTINATIONVALUE = "035";
if (String.IsNullOrEmpty(edi210Obj.LOADHDR.LOADHDRINFO.MS3_SCAC)) edi210Obj.LOADHDR.LOADHDRINFO.MS3_SCAC = "TQYL";
if (String.IsNullOrEmpty(edi210Obj.LOADHDR.LOADHDRINFO.MS3_RSEQ)) edi210Obj.LOADHDR.LOADHDRINFO.MS3_RSEQ = "B";
if (String.IsNullOrEmpty(edi210Obj.LOADHDR.LOADHDRINFO.MS3_TRTYPE)) edi210Obj.LOADHDR.LOADHDRINFO.MS3_TRTYPE = "J";
#region Change B3_10 Qualifier from 140 "Actual" to 035 "Delivered";
foreach (RulesInfo rule in edi210Obj.LOADHDR.RULEINFOCollection.Items)
if (rule.DESTINATIONNODE == "B310" && rule.DESTINATIONVALUE == "140") rule.DESTINATIONVALUE = "035";
#region Add BT Address From Hardcoded values
StopInfo210 AddressHdr = new StopInfo210();
AddressHdr.PONUMBER = edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER;
AddressHdr.ISFIRSTSTOP = true;
AddressInfo AddressInfoColl = new AddressInfo();
AddressInfoColl.PONUMBER = edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER;
AddressInfoColl.HDRDETFLAG = "D";
AddressInfoColl.ADDRESSQUAL = "BT";
AddressInfoColl.NAME = "BUNZL C/O CASS";
AddressInfoColl.ADDRESS = "PO BOX 67";
AddressInfoColl.CITY = "ST LOUIS";
AddressInfoColl.STATE = "MO";
AddressInfoColl.ZIP = "63166";
AddressInfoColl.COUNTRY = "US";
AddressHdr.ADDRESSINFO = AddressInfoColl;
edi210Obj.STOPINFOCollection.Items.Insert(0, AddressHdr);
#region Change Address Qualifiers, Trim and UpperCase Postal code
foreach (StopInfo210 stop in edi210Obj.STOPINFOCollection.Items)
if (stop.ADDRESSINFO.ADDRESSQUAL == "SF") stop.ADDRESSINFO.ADDRESSQUAL = "SH";
if (stop.ADDRESSINFO.ADDRESSQUAL == "ST") stop.ADDRESSINFO.ADDRESSQUAL = "CN";
stop.ADDRESSINFO.ZIP = stop.ADDRESSINFO.ZIP.ToUpper().Trim();
string bunzl210_N902 = String.Empty;
if ((edi210Obj.INVOICE.INVOICEHDR.FRTTERMS == "PP" && stop.ADDRESSINFO.ADDRESSQUAL == "SH") ||
(edi210Obj.INVOICE.INVOICEHDR.FRTTERMS == "CC" && stop.ADDRESSINFO.ADDRESSQUAL == "CN") ||
(edi210Obj.INVOICE.INVOICEHDR.FRTTERMS == "TP" && (stop.ISFIRSTSTOP || stop.ISLASTSTOP))
string locName = String.Empty;
string zipcode = stop.ADDRESSINFO.ZIP.Trim();
if (zipcode.Contains(" ") && stop.ADDRESSINFO.COUNTRY.StartsWith("CA")) zipcode = zipcode.Replace(" ", "");
string address = stop.ADDRESSINFO.ADDRESS.ToUpper().Trim();
string name = stop.ADDRESSINFO.NAME.ToUpper().Trim();
#region Bunzl Warehouse Code Switch
if (address.Contains("1000") && address.Contains("AMBOY"))
if (name.Contains("R3") || name.Contains("METRO"))
if (address.Contains("3221") && address.Contains("ESPRESSO") && name.Contains("BPD"))
else if (address.Contains("1510") && address.Contains("BARTLETT") && (name.Contains("BUNZL") || name.Contains("YORK")))
if (address.Contains("3600") && address.Contains("PROGRESS"))
if (name.Contains("RETAIL"))
else if (name.Contains("SCHWARZ") && name.Contains("SUPPLY"))
else if (name.Contains("SCHWARZ") && name.Contains("BRS"))
if (address.Contains("825") && address.Contains("MAXHAM"))
if (address.Contains("400") && name.Contains("RITA"))
else if (address.Contains("400"))
else if (address.Contains("100") && name.Contains("BPD"))
else if (address.Contains("100"))
if (address.Contains("9264") && address.Contains("COLUMBUS"))
else if (address.Contains("9203") && address.Contains("KING") && (name.Contains("KING") || name.Contains("PALM")))
if (address.Contains("4037") && address.Contains("VISCOUNT") && (name.Contains("SAS") || name.Contains("SAFETY")))
if (address.Contains("6021") && address.Contains("UNION"))
if (name.Contains("R3") || name.Contains("SAFETY"))
else if (name.Contains("MAJESTIC"))
if (address.Contains("2301") && address.Contains("LUNT"))
if (name.Contains("FOODHANDLER"))
else if (name.Contains("R3"))
else if (address.Contains("2521") && address.Contains("ALLAN") && name.Contains("EARTHWISE"))
if (address.Contains("City") && address.Contains("Place") && address.Contains("200"))
if (name.Contains("CORPORATE") && name.Contains("IMPORTS"))
else if (name.Contains("CORPORATE") && name.Contains("OFFICE"))
if (address.Contains("5710"))
if (address.Contains("5710") && name.Contains("BPD") && name.Contains("CLARITY"))
else if (name.Contains("BPD"))
if (address.Contains("2005") && address.Contains("VALLEY") && address.Contains("100"))
else if (address.Contains("2005") && address.Contains("VALLEY") && address.Contains("120"))
if (address.Contains("19700") && address.Contains("23"))
if (name.Contains("BPD"))
if (address.Contains("8449") && address.Contains("MILLIKEN") && (name.Contains("FOODHANDLER") || name.Contains("RANCHO")))
if (address.Contains("3722") && address.Contains("WILLOW"))
if (name.Contains("R3") || name.Contains("SAFETY"))
else if (name.Contains("BPD"))
if (address.Contains("23502") && address.Contains("KNOX"))
else if (name.Contains("BPD"))
if (address.Contains("4240") && address.Contains("HARVESTER"))
if (name.Contains("R3") || name.Contains("SAFETY"))
if (address.Contains("12846") && address.Contains("170"))
if (name.Contains("R3") || name.Contains("SAFETY"))
bunzl210_N902 = $"*******WAREHOUSE CODE NOT FOUND, Postal Code: {zipcode}*******";
hasValidWarehouseCode = false;
if (String.IsNullOrEmpty(bunzl210_N902))
bunzl210_N902 = $"***~~~WAREHOUSE CODE NOT FOUND, Postal Code: {zipcode}~~~***";
warehouseCode = bunzl210_N902;
RefNumberInfoCollection refnumbertemp = new RefNumberInfoCollection();
#region Add Header Reference Number
foreach (RefNumberInfo refnum in edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items)
if ((refnum.REFNUMBERQUAL == "41" || refnum.REFNUMBERQUAL == "WC") && (refnum.EDISOURCE == "LM"))
RefNumberInfo hrefnumber = new RefNumberInfo();
hrefnumber.HDRDETFLAG = "H";
hrefnumber.EDI210DESTINATION = "N9";
hrefnumber.PONUMBER = edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER;
hrefnumber.REFNUMBERQUAL = "WC";
hrefnumber.REFNUMBER = warehouseCode;
edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items.Add(hrefnumber);
if ((refnum.REFNUMBERQUAL == "4" || refnum.REFNUMBERQUAL == "PO")) && (refnum.EDISOURCE == "LM"))
RefNumberInfo hrefnumber2 = new RefNumberInfo();
hrefnumber2.HDRDETFLAG = "H";
hrefnumber2.EDI210DESTINATION = "N9";
hrefnumber2.PONUMBER = edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER;
hrefnumber2.REFNUMBERQUAL = "PO";
hrefnumber2.REFNUMBER = refnum.REFNUMBER;
edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items.Add(hrefnumber2);
purchaseOrderNumber = refnum.REFNUMBER;
if ((refnum.REFNUMBERQUAL == "2" || refnum.REFNUMBERQUAL == "BM") && (refnum.EDISOURCE == "LM"))
RefNumberInfo hrefnumber3 = new RefNumberInfo();
hrefnumber3.HDRDETFLAG = "H";
hrefnumber3.EDI210DESTINATION = "N9";
hrefnumber3.PONUMBER = edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER;
hrefnumber3.REFNUMBERQUAL = "BM";
hrefnumber3.REFNUMBER = refnum.REFNUMBER;
edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items.Add(hrefnumber3);
billOfLadingNumber = refnum.REFNUMBER;
#region Validate the Purchase Order Number set hasValidPurchaseOrderNumber
if (edi210Obj.STOPINFOCollection.Items.Count() > 2)
if (!String.IsNullOrEmpty(purchaseOrderNumber))
hasValidPurchaseOrderNumber = false;
if (!(purchaseOrderNumber.Length == 6))
hasValidPurchaseOrderNumber = false;
#region Validate the billOfLadingNumber set hasValidBillOfLadingNumber
if (edi210Obj.STOPINFOCollection.Items.Count() > 2)
if (!String.IsNullOrEmpty(billOfLadingNumber))
hasValidBillOfLadingNumber = false;
if ((billOfLadingNumber.StartsWith("C") || billOfLadingNumber.StartsWith("X")) && !(billOfLadingNumber.Length == 9))
hasValidBillOfLadingNumber = false;
else if (!(billOfLadingNumber.Length == 8))
hasValidBillOfLadingNumber = false;
#region Error handling for N9
if (!hasValidWarehouseCode)
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N9", "T");
RefNumberInfo refNumError = new RefNumberInfo();
refNumError.HDRDETFLAG = "H";
refNumError.EDI210DESTINATION = "N9";
refNumError.REFNUMBERQUAL = "WC";
refNumError.REFNUMBER = $"***~~~Invalid WarehouseCode: {warehouseCode}~~~***";
edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items.Insert(0, refNumError);
edi210Obj.EDIPROPERTIES.DESTFILENAME = "CassInfo_Bunzl210Error_WarehouseCode";
if (!hasValidPurchaseOrderNumber)
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N9", "T");
RefNumberInfo refNumError = new RefNumberInfo();
refNumError.HDRDETFLAG = "H";
refNumError.EDI210DESTINATION = "N9";
refNumError.REFNUMBERQUAL = "PO";
refNumError.REFNUMBER = $"***~~~Invalid Purchase Order Number: {purchaseOrderNumber}~~~***";
edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items.Insert(0, refNumError);
edi210Obj.EDIPROPERTIES.DESTFILENAME = "CassInfo_Bunzl210Error_CustomerPO";
if (!hasValidBillOfLadingNumber)
Common.UpdateIncludeSegmentRule(ref rulesinfocollection, "N9", "T");
RefNumberInfo refNumError = new RefNumberInfo();
refNumError.HDRDETFLAG = "H";
refNumError.EDI210DESTINATION = "N9";
refNumError.REFNUMBERQUAL = "BM";
refNumError.REFNUMBER = $"***~~~Invalid Bill of Lading Number: {billOfLadingNumber}~~~***";
edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items.Insert(0, refNumError);
edi210Obj.EDIPROPERTIES.DESTFILENAME = "CassInfo_Bunzl210Error_BillOfLadingNumber";
RefNumberInfo refnumber5 = new RefNumberInfo();
refnumber5.HDRDETFLAG = "H";
refnumber5.EDI210DESTINATION = "N9";
refnumber5.REFNUMBERQUAL = "PO";
refnumber5.REFNUMBER = $"****Multiple Errors, BOL: {billOfLadingNumber}, PO: {purchaseOrderNumber}, WC: {warehouseCode}****";
edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items.Insert(0, refnumber5);
edi210Obj.EDIPROPERTIES.DESTFILENAME = "CassInfo_Bunzl210Error_All";
PopulateData(ref edi210Obj);
public static void Template(ref TQLBZTEDI210 edi210Obj)
#region Change B3_10 Qualifier from 140 "Actual" to 035 "Delivered";
foreach (RulesInfo rule in edi210Obj.LOADHDR.RULEINFOCollection.Items)
if (rule.DESTINATIONNODE == "B310" && rule.DESTINATIONVALUE == "140") rule.DESTINATIONVALUE = "035";
#region Pull LM Ref Numbers on EDI Linked Loads
if (edi210Obj.EDILoadTypes.EDILoadTypeID == 1) TQL.BZT.Rules.Utils.LM.RefNumbers.PopulateLMReferenceNumbers(ref edi210Obj);
#region Add Header Reference Number
RefNumberInfo hrefnumber = new RefNumberInfo();
hrefnumber.HDRDETFLAG = "H";
hrefnumber.EDI210DESTINATION = "N9";
hrefnumber.PONUMBER = edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER;
hrefnumber.REFNUMBERQUAL = "CN";
hrefnumber.REFNUMBER = edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER.ToString();
edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items.Add(hrefnumber);
#region Add BT Address From EDI 204
foreach (AddressInfo hdraddress in edi210Obj.LOADHDR.ADDRESSINFOCollection.Items)
if (hdraddress.ADDRESSQUAL == "BT")
StopInfo210 AddressHdr = new StopInfo210();
AddressHdr.PONUMBER = hdraddress.PONUMBER;
AddressHdr.BZTSTOPID = hdraddress.BZTSTOPID;
AddressHdr.ISFIRSTSTOP = true;
AddressInfo AddressInfoColl = new AddressInfo();
AddressInfoColl.PONUMBER = hdraddress.PONUMBER;
AddressInfoColl.BZTSTOPID = hdraddress.BZTSTOPID;
AddressInfoColl.HDRDETFLAG = hdraddress.HDRDETFLAG;
AddressInfoColl.TQLADDRESSID = hdraddress.ID;
AddressInfoColl.ADDRESSQUAL = hdraddress.ADDRESSQUAL;
AddressInfoColl.NAME = hdraddress.NAME;
AddressInfoColl.IDQUAL = hdraddress.IDQUAL;
AddressInfoColl.ID = hdraddress.ID;
AddressInfoColl.ADDRESS = hdraddress.ADDRESS;
AddressInfoColl.CITY = hdraddress.CITY;
AddressInfoColl.STATE = hdraddress.STATE;
AddressInfoColl.ZIP = hdraddress.ZIP;
AddressInfoColl.COUNTRY = hdraddress.COUNTRY;
AddressHdr.ADDRESSINFO = AddressInfoColl;
edi210Obj.STOPINFOCollection.Items.Insert(0, AddressHdr);
#region Shipment ID Validation
if (!String.IsNullOrEmpty(edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID))
if (edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID.Contains(':'))
edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID = edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID.Replace(":", "");
if (edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID.Contains('#'))
edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID = edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID.Replace("#", "");
if (edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID.Contains('\''))
edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID = edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID.Replace("'", "");
if (edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID.Contains('’'))
edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID = edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID.Replace("’", "");
string sEDIShipmentID = edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID.Trim();
if (!String.IsNullOrEmpty(sEDIShipmentID))
if (sEDIShipmentID.Contains('/'))
string[] NonShipID = sEDIShipmentID.Split('/');
if (NonShipID[0].Trim().Length == 10 && NonShipID[0].Trim().Contains("UC"))
sEDIShipmentID = NonShipID[0];
else if (NonShipID[1].Trim().Length == 10 && NonShipID[1].Trim().Contains("UC"))
sEDIShipmentID = NonShipID[1];
else if (NonShipID.Length == 3)
if (NonShipID[2].Trim().Length == 10 && NonShipID[2].Trim().Contains("UC"))
sEDIShipmentID = NonShipID[2];
sEDIShipmentID = "****Invalid Shipment ID****";
if (sEDIShipmentID.Length != 10 && !sEDIShipmentID.Contains("UC"))
sEDIShipmentID = "****Invalid Shipment ID****";
sEDIShipmentID = "****Invalid Shipment ID****";
edi210Obj.LOADHDR.LOADHDRINFO.SHIPMENTID = sEDIShipmentID.Trim();
#region Address Validation
foreach (StopInfo210 stop in edi210Obj.STOPINFOCollection.Items)
if (stop.ADDRESSINFO.NAME.Length > 30) stop.ADDRESSINFO.NAME = stop.ADDRESSINFO.NAME.Substring(0, 30);
if (!String.IsNullOrEmpty(stop.ADDRESSINFO.NAME))
if (stop.ADDRESSINFO.NAME.Contains(':')) stop.ADDRESSINFO.NAME = stop.ADDRESSINFO.NAME.Replace(":", "");
if (stop.ADDRESSINFO.NAME.Contains('#')) stop.ADDRESSINFO.NAME = stop.ADDRESSINFO.NAME.Replace("#", "");
if (stop.ADDRESSINFO.NAME.Contains('\'')) stop.ADDRESSINFO.NAME = stop.ADDRESSINFO.NAME.Replace("'", "");
if (!String.IsNullOrEmpty(stop.ADDRESSINFO.ADDRESS))
if (stop.ADDRESSINFO.ADDRESS.Contains(':')) stop.ADDRESSINFO.ADDRESS = stop.ADDRESSINFO.ADDRESS.Replace(":", "");
if (stop.ADDRESSINFO.ADDRESS.Contains('#')) stop.ADDRESSINFO.ADDRESS = stop.ADDRESSINFO.ADDRESS.Replace("#", "");
if (stop.ADDRESSINFO.ADDRESS.Contains('\'')) stop.ADDRESSINFO.ADDRESS = stop.ADDRESSINFO.ADDRESS.Replace("'", "");
if (!String.IsNullOrEmpty(stop.ADDRESSINFO.ID))
if (stop.ADDRESSINFO.ID.Contains(':')) stop.ADDRESSINFO.ID = stop.ADDRESSINFO.ADDRESS.Replace(":", "");
if (stop.ADDRESSINFO.ID.Contains('#')) stop.ADDRESSINFO.ID = stop.ADDRESSINFO.ADDRESS.Replace("#", "");
if (stop.ADDRESSINFO.ID.Contains('\'')) stop.ADDRESSINFO.ID = stop.ADDRESSINFO.ADDRESS.Replace("'", "");
#region Trim Weight to 0 decimal places
decimal loadWeight = (decimal)edi210Obj.LOADHDR.LOADHDRINFO.WEIGHT;
edi210Obj.LOADHDR.LOADHDRINFO.WEIGHT = Math.Round(loadWeight, 0);
edi210Obj.LOADHDR.LOADHDRINFO.WEIGHTQUAL = "G";
#region Trim Rate to 2 decimal places instead of 4
foreach (ChargeInfo charge in edi210Obj.INVOICE.CHARGEINFOCollection.Items)
decimal rate = (decimal)charge.LINECHARGE;
charge.LINECHARGE = decimal.Round(rate, 2);
#region Change Address Qualifiers
foreach (StopInfo210 stop in edi210Obj.STOPINFOCollection.Items)
if (stop.ADDRESSINFO.ADDRESSQUAL == "SF") stop.ADDRESSINFO.ADDRESSQUAL = "SH";
if (stop.ADDRESSINFO.ADDRESSQUAL == "ST") stop.ADDRESSINFO.ADDRESSQUAL = "CN";
if (String.IsNullOrEmpty(edi210Obj.LOADHDR.LOADHDRINFO.MS3_SCAC)) edi210Obj.LOADHDR.LOADHDRINFO.MS3_SCAC = "TQYL";
if (String.IsNullOrEmpty(edi210Obj.LOADHDR.LOADHDRINFO.MS3_RSEQ)) edi210Obj.LOADHDR.LOADHDRINFO.MS3_RSEQ = "B";
if (String.IsNullOrEmpty(edi210Obj.LOADHDR.LOADHDRINFO.MS3_TRTYPE)) edi210Obj.LOADHDR.LOADHDRINFO.MS3_TRTYPE = "J";
#region Populate LM Dates/Times
DateTime? timePickedup = TQL.BZT.Rules.Utils.LM.Picks.TimeLoaded((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER, 0);
if (timePickedup.HasValue)
DateTime pickdate = (DateTime)timePickedup;
DateTime picktime = (DateTime)timePickedup;
String pickupDate = pickdate.ToString("yyyyMMdd");
String pickupTime = picktime.ToString("HHmm");
DateTimeInfo hrefnumber2 = new DateTimeInfo();
hrefnumber2.DATE = pickupDate;
hrefnumber2.DATEQUAL = "86";
edi210Obj.LOADHDR.DATETIMEINFOCollection.Items.Add(hrefnumber2);
DateTime? loadPickUp = TQL.BZT.Rules.Utils.LM.Loads.LoadDateTime((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER);
DateTime pickup = (DateTime)loadPickUp;
String pickupDate = pickup.ToString("yyyyMMdd");
String pickupTime = pickup.ToString("HHmm");
DateTimeInfo hrefnumber2 = new DateTimeInfo();
hrefnumber2.DATE = pickupDate;
hrefnumber2.DATEQUAL = "86";
edi210Obj.LOADHDR.DATETIMEINFOCollection.Items.Add(hrefnumber2);
DateTime? timeDelivered = TQL.BZT.Rules.Utils.LM.Drops.TimeDelivered((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER, 0);
if (timeDelivered.HasValue)
DateTime DeliverDate = (DateTime)timeDelivered;
DateTime DeliverTime = (DateTime)timeDelivered;
String DelDate = DeliverDate.ToString("yyyyMMdd");
String DelTime = DeliverTime.ToString("HHmm");
DateTimeInfo hrefnumber2 = new DateTimeInfo();
hrefnumber2.DATE = DelDate;
hrefnumber2.DATEQUAL = "35";
edi210Obj.LOADHDR.DATETIMEINFOCollection.Items.Add(hrefnumber2);
DateTime? loadDelivery = TQL.BZT.Rules.Utils.LM.Loads.DeliveryDateTime((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER);
DateTime Delivery = (DateTime)loadDelivery;
String DeliverDate = Delivery.ToString("yyyyMMdd");
String pickupTime = Delivery.ToString("HHmm");
DateTimeInfo hrefnumber2 = new DateTimeInfo();
hrefnumber2.DATE = DeliverDate;
hrefnumber2.DATEQUAL = "35";
edi210Obj.LOADHDR.DATETIMEINFOCollection.Items.Add(hrefnumber2);
#region Pull Stop DateTimes
foreach (StopInfo210 stop in edi210Obj.STOPINFOCollection.Items)
stop.DATETIMEINFOCollection.Items.Clear();
foreach (StopInfo210 stop in edi210Obj.STOPINFOCollection.Items)
if (stop.STOPTYPEID == 2)
DateTime? timeDroppedStopOff = TQL.BZT.Rules.Utils.LM.Drops.TimeDeliveredByStop((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER, (int)stop.LMPICKDROPROWID);
RefNumberInfo refnum = new RefNumberInfo();
if (timeDroppedStopOff.HasValue)
DateTime dropdateStopOff = (DateTime)timeDroppedStopOff;
DateTime droptimeStopOff = (DateTime)timeDroppedStopOff;
String dropoffDate = dropdateStopOff.ToString("yyyyMMdd");
String dropoffTime = droptimeStopOff.ToString("HHmm");
DateTimeInfo dropDTI = new DateTimeInfo();
dropDTI.DATE = dropoffDate;
dropDTI.TIME = dropoffTime;
stop.DATETIMEINFOCollection.Items.Add(dropDTI);
DateTime? loadDropOff = TQL.BZT.Rules.Utils.LM.Loads.DeliveryDateTime((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER);
DateTime pickupStopOff = (DateTime)loadDropOff;
String pickupDate = pickupStopOff.ToString("yyyyMMdd");
String pickupTime = pickupStopOff.ToString("HHmm");
DateTimeInfo dropDTI = new DateTimeInfo();
dropDTI.DATE = pickupDate;
dropDTI.TIME = pickupTime;
stop.DATETIMEINFOCollection.Items.Add(dropDTI);
DateTime? timePickedupStopOff = TQL.BZT.Rules.Utils.LM.Picks.TimeLoadedByStop((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER, (int)stop.LMPICKDROPROWID);
if (timePickedupStopOff.HasValue)
DateTime pickdateStopOff = (DateTime)timePickedupStopOff;
DateTime picktimeStopOff = (DateTime)timePickedupStopOff;
String pickupDate = pickdateStopOff.ToString("yyyyMMdd");
String pickupTime = picktimeStopOff.ToString("HHmm");
DateTimeInfo pickDTI = new DateTimeInfo();
pickDTI.DATE = pickupDate;
pickDTI.TIME = pickupTime;
stop.DATETIMEINFOCollection.Items.Add(pickDTI);
DateTime? loadPickUp = TQL.BZT.Rules.Utils.LM.Loads.LoadDateTime((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER);
DateTime pickupStopOff = (DateTime)loadPickUp;
String pickupDate = pickupStopOff.ToString("yyyyMMdd");
String pickupTime = pickupStopOff.ToString("HHmm");
DateTimeInfo pickDTI = new DateTimeInfo();
pickDTI.DATE = pickupDate;
pickDTI.TIME = pickupTime;
stop.DATETIMEINFOCollection.Items.Add(pickDTI);
TQL.BZT.BLL.LMDataContracts.LoadDetail LMDetail = TQL.BZT.Rules.Utils.LM.Loads.LoadInfo((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER);
string carrierid = LMDetail.CarrierId.ToString();
string driverid = LMDetail.DriverId.ToString();
string trailernumber = "";
int? trailerID = LMDetail.TrailerId;
string gDBConnstr = System.Configuration.ConfigurationManager.ConnectionStrings["TQLConnectionStringDefault"].ConnectionString;
if (string.IsNullOrEmpty(gDBConnstr))
gDBConnstr = "Data Source=devsqlclst;Initial Catalog=TQL;Integrated Security=True;";
using (SqlConnection conn = new SqlConnection(gDBConnstr))
SqlCommand cmd = new SqlCommand("spEdiGetDriverDetails", conn);
cmd.Parameters.AddWithValue("@lCarrierId", carrierid);
cmd.Parameters.AddWithValue("@lDriver", driverid);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataReader dr = cmd.ExecuteReader();
trucknumber = dr["trucknumber"].ToString();
trailernumber = dr["trailernumber"].ToString();
RefNumberInfo hrefnumber5 = new RefNumberInfo();
hrefnumber5.EDI210DESTINATION = "TrailerNumber";
hrefnumber5.REFNUMBERQUAL = "TrailerNumber";
hrefnumber5.REFNUMBER = trailernumber;
edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items.Add(hrefnumber5);
edi210Obj.LOADHDR.LOADHDRINFO.DRIVERID = trailernumber;
string TrailerType = LMDetail.TrailerType;
RefNumberInfo hrefnumber6 = new RefNumberInfo();
hrefnumber6.EDI210DESTINATION = "TrailerType";
hrefnumber6.REFNUMBERQUAL = "TrailerType";
hrefnumber6.REFNUMBER = TrailerType;
edi210Obj.LOADHDR.REFNUMBERINFOCollection.Items.Add(hrefnumber6);
edi210Obj.LOADHDR.LOADHDRINFO.EQUIPCODE = "RT";
edi210Obj.LOADHDR.LOADHDRINFO.EQUIPCODE = "TF";
edi210Obj.LOADHDR.LOADHDRINFO.EQUIPCODE = "FT";
edi210Obj.LOADHDR.LOADHDRINFO.EQUIPCODE = "TL";
#region Reorder Stops to order on EDI 204
ReOrder210Stops(ref edi210Obj, false, true, true);
#region Pull Stops from LM
edi210Obj.STOPINFOCollection.Items.Clear();
StopInfo210Collection StopInfo210 = Utils.LM.Stops.PopulateEDI210Stops((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER, (int)edi210Obj.EDIPROPERTIES.BZTTRANSACTIONID);
edi210Obj.STOPINFOCollection = StopInfo210;
PopulateData(ref edi210Obj);
public static void ReOrder210Stops(ref TQLBZTEDI210 edi210Obj, bool EDISeq, bool LMSeq, bool RemoveCancelledStops)
StopInfo210Collection lmStops = TQL.BZT.Rules.Utils.LM.Stops.PopulateEDI210Stops((int)edi210Obj.LOADHDR.LOADHDRINFO.PONUMBER, (int)edi210Obj.LOADHDR.LOADHDRINFO.BZTTRANSACTIONID);
Dictionary<int, int> lmStopsDict = lmStops.Items.Distinct().ToDictionary(i => (int)i.LMPICKDROPROWID, i => (int)i.STOPSEQ);
var ediStopsToBeOrdered = edi210Obj.STOPINFOCollection.Items.ToList();
var ediStopsToBeOrderedNoCancelledStops = ediStopsToBeOrdered.Where(x => lmStopsDict.ContainsKey((int)x.LMPICKDROPROWID)).ToList();
var ediStopsOrdered = ediStopsToBeOrderedNoCancelledStops.OrderBy(x => lmStopsDict[(int)x.LMPICKDROPROWID]);
List<StopInfo210> ediStopsOrderedList = ediStopsOrdered.ToList();
StopInfo210Collection ediStopsOrderedWSeq = new StopInfo210Collection();
foreach (var stop in ediStopsOrderedList)
if (lmStopsDict.ContainsKey((int)stop.LMPICKDROPROWID))
stop.STOPSEQ = lmStopsDict.Single(x => x.Key == stop.LMPICKDROPROWID).Value;
ediStopsOrderedWSeq.Items.Add(stop);
edi210Obj.STOPINFOCollection = ediStopsOrderedWSeq;
TQL.BZT.Logger.LogGenerator.Log(true, false, true, true, false, "TQL.BZT.Rules.Target.ReOrder210Stops", 5100, EventLogEntryType.Error, e);
private static void PopulateData(ref TQLBZTEDI210 edi210obj)
string LoadID = string.Empty;
int PONumber = default(int);
int tpprofileid = default(int);
LoadID = edi210obj.LOADHDR.LOADHDRINFO.SHIPMENTID;
tpprofileid = (int)edi210obj.TPPROFILEINFO.TPPROFILEID;
PONumber = (int)edi210obj.LOADHDR.LOADHDRINFO.PONUMBER;
bool statusUpdated = EDIPlusAcct.InsertICabProcess(10, PONumber, 3, null, null, null);
statusUpdated = EDIPlusAcct.InsertICabProcess(10, PONumber, 3, tpprofileid.ToString(), LoadID, null);
string exMsg = string.Empty;
exMsg = String.Format("InsertICabProcess for LoadID- PONumber={0}\r\nLoadID={1}", edi210obj.LOADHDR.LOADHDRINFO.PONUMBER, (LoadID ?? string.Empty));
TQL.BZT.Logger.LogGenerator.Log(false, false, true, false, true, "TQL.BZT.Rules.CassInfo.GenericEDIPlus", "TQL.BZT.Rules.CassInfo.GenericEDIPlus.Rules210.PopulateData+\r\n" + exMsg, 2022, EventLogEntryType.Error, null);
statusUpdated = EDIPlusAcct.updateICabProcessStatus(10, PONumber, 1);
string exMsg = string.Empty;
exMsg = String.Format("updateICabProcessStatus for CASS ICab processing - PONumber={0}\r\nLoadID={1}", edi210obj.LOADHDR.LOADHDRINFO.PONUMBER, (LoadID ?? string.Empty));
TQL.BZT.Logger.LogGenerator.Log(false, false, true, false, true, "TQL.BZT.Rules.CassInfo.GenericEDIPlus", "TQL.BZT.Rules.CassInfo.GenericEDIPlus.Rules210.PopulateData+\r\n" + exMsg, 2023, EventLogEntryType.Error, null);
exMsg = "CASS - PopulateData \r\n" +
"nLoadID=" + LoadID + "\r\n";
exMsg = "CASS - PopulateData \r\n";
TQL.BZT.Logger.LogGenerator.Log(false, false, true, false, true, "TQL.BZT.Rules.CassInfo.GenericEDIPlus", "TQL.BZT.Rules.CassInfo.GenericEDIPlus.Rules210.PopulateData+\r\n" + exMsg, 2023, EventLogEntryType.Error, ex);