private void GetYRCInfo_API(ref bool isDurachem, ref string[] weight, ref string[] fclass, ref string[] nmfc, ref string[] pieces, ref int numLineItems, ref bool dimsProvided, ref string[] cube, ref string[] density, ref StringBuilder sbAccessorials, int AccOptionCount, ref string[] length, ref string[] width, ref string[] height) { //DB.Log("YRC Live", "GetYRCInfo"); YRC_Res = new YRC_Result(); try { #region Variables //DateTime today = DateTime.Today; DateTime today = quoteData.puDate; string day = today.Day.ToString(); string month = today.Month.ToString(); string year = today.Year.ToString(); string dayOfWeek = today.DayOfWeek.ToString(); dayOfWeek = dayOfWeek.Remove(3); if (day.Length == 1) { day = "0" + day; } if (month.Length == 1) { month = "0" + month; } string doc = ""; string url, referrer, contentType, accept, method; #endregion #region Country string origCountry = "USA"; string destCountry = "USA"; if (HelperFuncs.GetCountryByZip(quoteData.origZip, true, quoteData.origZip, quoteData.destZip).Equals("CANADA")) { origCountry = "CAN"; } if (HelperFuncs.GetCountryByZip(quoteData.destZip, false, quoteData.origZip, quoteData.destZip).Equals("CANADA")) { destCountry = "CAN"; } #endregion #region 10 units limit if (fclass.Length > 10) { throw new Exception("YRC Freight: Shipments of up to 10 units are handled, you have entered " + fclass.Length.ToString() + " units."); } #endregion #region Items StringBuilder items = new StringBuilder(); string itemNum = string.Empty; for (int i = 0; i < fclass.Length; i++) { itemNum = (i + 1).ToString(); items.Append(string.Concat("&LineItemWeight", itemNum, "=", weight[i])); if (fclass[i].Equals(string.Empty)) { // Use NMFC instead of class string[] forSplit = nmfc[i].Split('-'); if (forSplit.Length.Equals(2)) { items.Append(string.Concat("&LineItemNmfcPrefix", itemNum, "=", forSplit[0], "&LineItemNmfcSuffix", itemNum, "=0", forSplit[1])); } else { items.Append(string.Concat("&LineItemNmfcPrefix", itemNum, "=", nmfc[i], "&LineItemNmfcSuffix", itemNum, "=")); } } else { items.Append(string.Concat("&LineItemNmfcClass", itemNum, "=")); items.Append(fclass[i]); } items.Append(string.Concat("&LineItemCount", itemNum, "=", pieces[i])); if (dimsProvided.Equals(true)) { items.Append( string.Concat( "&LineItemPackageLength", itemNum, "=", length[i], "&LineItemPackageWidth", itemNum, "=", width[i], "&LineItemPackageHeight", itemNum, "=", height[i]) ); } } #endregion #region Make http requests referrer = ""; url = string.Concat("http://my.yrc.com/myyrc-api/national/servlet?CONTROLLER=com.rdwy.ec.rexcommon.proxy.http.controller.ProxyApiController&redir=/tfq561", "&LOGIN_USERID=", acctInfo.username, "&LOGIN_PASSWORD="******"&BusId=", acctInfo.acctNum, "&BusRole=Third%20Party&PaymentTerms=Prepaid", "&OrigCityName=", quoteData.origCity.Replace(" ", "%20"), "&OrigStateCode=", quoteData.origState, "&OrigZipCode=", quoteData.origZip, "&OrigNationCode=", origCountry, "&DestCityName=", quoteData.destCity.Replace(" ", "%20"), "&DestStateCode=", quoteData.destState, "&DestZipCode=", quoteData.destZip, "&DestNationCode=", destCountry, "&ServiceClass=STD&PickupDate=", year, month, day, "&TypeQuery=QUOTE", items, "&LineItemCount=", fclass.Length, sbAccessorials, "&AccOptionCount=", AccOptionCount); //"&AccOption1=HOMD&AccOptionCount=1"); contentType = ""; method = "GET"; accept = "*/*"; doc = (string)HelperFuncs.generic_http_request("string", null, url, referrer, contentType, accept, method, "", false); //DB.Log("YRC Live request", url); //DB.Log("YRC_Live response", doc); #endregion #region Get regular rates //string tmp = doc; bool isIntraCanada = false; if (origCountry == "CAN" && destCountry == "CAN") { if (!quoteData.username.ToLower().Equals("durachem")) { throw new Exception("Intra Canada"); // Intra Canada enabled only for durachem for now } isIntraCanada = true; } #region Get cost and transit days from the result string[] tokens = new string[3]; tokens[0] = "<TotalCharges>"; tokens[1] = ">"; tokens[2] = "<"; string costStr = HelperFuncs.scrapeFromPage(tokens, doc); //DB.Log("YRC_Live costStr", costStr); int costInt = -1; int costCents = 0; if (int.TryParse(costStr, out int testInt)) { costInt = testInt / 100; costCents = testInt % 100; //DB.Log("YRC_Live costInt costCents", costInt + " " + costCents); } if (double.TryParse(string.Concat(costInt, ".", costCents.ToString().PadLeft(2, '0')), out double costDouble)) { YRC_Res.standardLTL = costDouble; //DB.Log("YRC_Live costDouble", costDouble.ToString()); } YRC_Res.days = 5; tokens[0] = "<StandardDays>"; int.TryParse(HelperFuncs.scrapeFromPage(tokens, doc), out YRC_Res.days); #endregion #endregion } catch (Exception e) { #region Exception code DB.Log("YRC", e.ToString()); YRC_Res.standardLTL = -1; #endregion } }