Пример #1
0
        // Genera
        public void Set_parameters(ref LTLQuoteRequest ltl_quote_request, ref QuoteData quoteData)
        {
            if (ltl_quote_request.totalCube == null)
            {
                // Do nothing
            }
            else
            {
                quoteData.totalCube = (double)ltl_quote_request.totalCube;
            }

            if (ltl_quote_request.linealFeet == null)
            {
                // Do nothing
            }
            else
            {
                quoteData.linealFeet = (double)ltl_quote_request.linealFeet;
            }


            #region pickup date

            quoteData.puDate = ltl_quote_request.pickupDate;

            #endregion

            #region Boolean flags

            for (byte i = 0; i < ltl_quote_request.items.Count; i++)
            {
                if (ltl_quote_request.items[i].hazmat == true)
                {
                    quoteData.isHazmat = true;
                    break;
                }
                else
                {
                    // Do nothing
                }
            }

            if (ltl_quote_request.items[0].length > 0)
            {
                quoteData.hasDimensions = true;
            }

            if (ltl_quote_request.items[0].freightClass > 0)
            {
                quoteData.hasFreightClass = true;
            }

            for (byte i = 0; i < ltl_quote_request.items.Count; i++)
            {
                if (ltl_quote_request.items[i].commodity == "HHG")
                {
                    quoteData.isHHG = true;
                    break;
                }
                else
                {
                    // Do nothing
                }
            }

            for (byte i = 0; i < ltl_quote_request.items.Count; i++)
            {
                if (ltl_quote_request.items[i].commodity == "USED")
                {
                    quoteData.isUSED = true;
                    break;
                }
                else
                {
                    // Do nothing
                }
            }

            double total_weight = 0.0;
            for (byte i = 0; i < ltl_quote_request.items.Count; i++)
            {
                if (ltl_quote_request.items[i].weight > 0)
                {
                    total_weight += (double)ltl_quote_request.items[i].weight;
                }
                else
                {
                    // Do nothing
                }
            }

            if (total_weight < 500 && quoteData.isHHG == true)
            {
                quoteData.isHHG_AndUnder500 = true;
            }

            #endregion

            //quoteData.username = username;

            //DB.Log("username", quoteData.username.ToString());

            quoteData.is_like_NetNet = Is_login_like_NetNet(quoteData.username);

            quoteData.is_good_USF_Holland_orig_state = Is_good_USF_Holland_orig_state(ref quoteData);

            #region Origin and Destination

            string[] split_arr;

            split_arr = ltl_quote_request.originZip.Trim().Split(' ');

            if (split_arr.Length == 2)
            {
                quoteData.origZip = split_arr[0] + split_arr[1];
            }
            else
            {
                quoteData.origZip = ltl_quote_request.originZip;
            }

            //if (ltl_quote_request.originZip)

            split_arr = ltl_quote_request.destinationZip.Trim().Split(' ');

            if (split_arr.Length == 2)
            {
                quoteData.destZip = split_arr[0] + split_arr[1];
            }
            else
            {
                quoteData.destZip = ltl_quote_request.destinationZip;
            }


            //quoteData.destZip = ltl_quote_request.destinationZip;
            quoteData.origCity  = ltl_quote_request.originCity;
            quoteData.destCity  = ltl_quote_request.destinationCity;
            quoteData.origState = ltl_quote_request.originState;
            quoteData.destState = ltl_quote_request.destinationState;

            #endregion

            quoteData.mode = "ws";

            int numOfUnits;

            SetLTLPiecesObject(out quoteData.numOfUnitsPieces, out numOfUnits, ref ltl_quote_request, ref quoteData);

            quoteData.totalUnits = numOfUnits;

            #region Accessorials

            quoteData.AccessorialsObj = new HelperFuncs.AccessorialsObj();

            HelperFuncs.setAccessorialsObject(ref quoteData, ref quoteData.AccessorialsObj,
                                              ltl_quote_request.additionalServices.RSP,
                                              ltl_quote_request.additionalServices.RSD,
                                              ltl_quote_request.additionalServices.CSP,
                                              ltl_quote_request.additionalServices.CSD,
                                              ltl_quote_request.additionalServices.ISD,
                                              ltl_quote_request.additionalServices.AMP,
                                              ltl_quote_request.additionalServices.AMD,
                                              ltl_quote_request.additionalServices.TSP,
                                              ltl_quote_request.additionalServices.TSD,
                                              ltl_quote_request.additionalServices.TGP,
                                              ltl_quote_request.additionalServices.TGD,
                                              false,
                                              false,
                                              false,
                                              false
                                              );

            #endregion
        }
Пример #2
0
        /// <summary>
        /// Genera
        /// </summary>
        private void SetLTLPiecesObject(out int numOfUnitsPieces, out int numOfUnits, ref LTLQuoteRequest ltl_quote_request,
                                        ref QuoteData quoteData)
        {
            //

            numOfUnitsPieces = 0;
            numOfUnits       = 0;

            int Quantity = 0, pieces = 0;// intResult,

            //double parsedDouble;

            //
            quoteData.m_lPieceList         = new List <LTLPiece>();
            quoteData.m_lPiece_actual_List = new List <LTLPiece>();
            //

            //
            int Units = 0, Pieces = 0;

            try
            {
                for (byte i = 1; i <= ltl_quote_request.items.Count; i++)
                {
                    if (ltl_quote_request.items[i - 1].weight > 0)
                    {
                        if (ltl_quote_request.items[i - 1].pieces > 0)
                        {
                            pieces = ltl_quote_request.items[i - 1].pieces;
                        }

                        Units  = 0;
                        Pieces = 0;
                        if (ltl_quote_request.items[i - 1].units > 0)
                        {
                            numOfUnitsPieces += ltl_quote_request.items[i - 1].units;
                            numOfUnits       += ltl_quote_request.items[i - 1].units;
                            Quantity          = ltl_quote_request.items[i - 1].units;

                            //
                            Units = ltl_quote_request.items[i - 1].units;

                            Pieces = pieces;
                        }
                        else if (ltl_quote_request.items[i - 1].pieces > 0)
                        {
                            numOfUnitsPieces += ltl_quote_request.items[i - 1].pieces;
                            Quantity          = ltl_quote_request.items[i - 1].pieces;

                            //
                            Pieces = ltl_quote_request.items[i - 1].pieces;
                        }
                        else
                        {
                            numOfUnitsPieces += 1;
                            Quantity          = 1;

                            Pieces = pieces;
                        }

                        LTLPiece ltlPiece        = new LTLPiece();
                        LTLPiece ltlPiece_actual = new LTLPiece();

                        // Set class weight and quantity
                        //---------------------------------------------------------------------------------

                        if (quoteData.isHHG.Equals(true))
                        {
                            ltlPiece.FreightClass        = "150";
                            ltlPiece_actual.FreightClass = "150";
                            //DB.Log("hhg", "");
                        }
                        else
                        {
                            ltlPiece.FreightClass        = ltl_quote_request.items[i - 1].freightClass.ToString();
                            ltlPiece_actual.FreightClass = ltl_quote_request.items[i - 1].freightClass.ToString();
                            //DB.Log("not hhg", "");
                        }

                        //ltlPiece.FreightClass = Request.QueryString["q_Class" + i.ToString()];

                        // Check if this rate has freight class
                        if (i.Equals(1) && (string.IsNullOrEmpty(ltlPiece.FreightClass) || ltlPiece.FreightClass.Equals("-1")))
                        {
                            quoteData.hasFreightClass = false;
                        }

                        if (i.Equals(1) && quoteData.isHHG_AndUnder500 == true && quoteData.extraWeight > 0)
                        {
                            // Extra weight
                            ltlPiece.Weight        = (double)ltl_quote_request.items[i - 1].weight + quoteData.extraWeight;
                            quoteData.totalWeight += ltlPiece.Weight;

                            ltlPiece_actual.Weight = (double)ltl_quote_request.items[i - 1].weight;
                            //ltlPiece_actual.Weight = (int)ltlPiece_actual.Weight;
                        }
                        else
                        {
                            // Regular case
                            ltlPiece.Weight        = (double)ltl_quote_request.items[i - 1].weight;
                            quoteData.totalWeight += ltlPiece.Weight;

                            ltlPiece_actual.Weight = (double)ltl_quote_request.items[i - 1].weight;
                            //ltlPiece_actual.Weight = (int)ltlPiece_actual.Weight;
                        }

                        ltlPiece.Quantity = Quantity;
                        ltlPiece.Units    = Units;
                        ltlPiece.Pieces   = Pieces;

                        ltlPiece_actual.Quantity = Quantity;
                        ltlPiece_actual.Units    = Units;
                        ltlPiece_actual.Pieces   = Pieces;

                        //---------------------------------------------------------------------------------

                        #region Set dimensions

                        // If there are no dims they are set to 0 by default, otherwise set dims
                        if (ltl_quote_request.items[i - 1].length > 0)
                        {
                            ltlPiece.Length        = (double)ltl_quote_request.items[i - 1].length;
                            ltlPiece_actual.Length = (double)ltl_quote_request.items[i - 1].length;
                        }
                        if (ltl_quote_request.items[i - 1].width > 0)
                        {
                            ltlPiece.Width        = (double)ltl_quote_request.items[i - 1].width;
                            ltlPiece_actual.Width = (double)ltl_quote_request.items[i - 1].width;
                        }
                        if (ltl_quote_request.items[i - 1].height > 0)
                        {
                            ltlPiece.Height        = (double)ltl_quote_request.items[i - 1].height;
                            ltlPiece_actual.Height = (double)ltl_quote_request.items[i - 1].height;
                        }

                        #endregion

                        ltlPiece.HazMat        = quoteData.isHazmat;
                        ltlPiece_actual.HazMat = quoteData.isHazmat;

                        // Commodity
                        //if (form.Get("q_Commodity" + i.ToString()) != null)
                        //{
                        //    ltlPiece.Commodity = form.Get("q_Commodity" + i.ToString());
                        //}

                        ltlPiece.Commodity        = ltl_quote_request.items[i - 1].commodity;
                        ltlPiece_actual.Commodity = ltl_quote_request.items[i - 1].commodity;

                        quoteData.m_lPieceList.Add(ltlPiece);
                        quoteData.m_lPiece_actual_List.Add(ltlPiece_actual);
                    }
                }

                quoteData.m_lPiece        = quoteData.m_lPieceList.ToArray();
                quoteData.m_lPiece_actual = quoteData.m_lPiece_actual_List.ToArray();

                #region For testing
                //for (int i = 0; i < m_lPieceList.Count; i++)
                //{
                //    DB.Log("myTest", m_lPieceList[i].FreightClass + " " + m_lPieceList[i].Weight.ToString() +
                //    " quantity: " + m_lPieceList[i].Quantity.ToString() + " length: " + m_lPieceList[i].Length.ToString()
                //    + " width: " + m_lPieceList[i].Width.ToString() + " height: " + m_lPieceList[i].Height.ToString(), "");
                //}
                #endregion
            }
            catch (Exception e)
            {
                DB.LogException("SetLTLPiecesObject", e.ToString());
            }
        }
Пример #3
0
        public HttpResponseMessage Post()
        {
            try
            {
                //--
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                //--

                #region Authentication

                var re      = Request;
                var headers = re.Headers;

                string username = "", password = "";

                if (headers.Contains("username"))
                {
                    username = headers.GetValues("username").First();
                    DB.LogGenera(iam, "username", username);
                }
                else
                {
                    DB.LogGenera(iam, "username", "none found");
                }

                if (headers.Contains("password"))
                {
                    password = headers.GetValues("password").First();
                    DB.LogGenera(iam, "password", password);
                }
                else
                {
                    DB.LogGenera(iam, "password", "none found");
                }

                #endregion

                string data = this.Request.Content.ReadAsStringAsync().Result;

                DB.LogGenera("Get_LTL_ratesController " + AppCodeConstants.mode, "Public API data", data);

                string url_string = "", request_format = "", error_response = "", response_string = "",
                       content_type = "application/json";

                LTLQuoteRequest ltl_quote_request = new LTLQuoteRequest();
                QuoteData       quoteData         = new QuoteData();

                #region Parse/Deserialize request, make sure JSON is valid

                // Parse/Deserialize request, make sure JSON is valid
                Validator vld = new Validator();
                vld.Validate_request_json(ref data, ref url_string, ref error_response, ref request_format,
                                          ref ltl_quote_request);

                #endregion

                // Xml_helper xml_helper = new Xml_helper();
                Json_helper json_helper = new Json_helper();

                Models.Public.LTL.Helper public_helper = new Models.Public.LTL.Helper();

                //DB.LogGenera(iam, "Public API url_string", url_string);
                //DB.LogGenera(iam, "Public API error_response", error_response);

                //DB.LogGenera(iam, "Public API url_string", url_string);

                string sql = "";
                if (error_response == "")
                {
                    // Do nothing
                }
                else
                {
                    //return error_response;
                    response_string = error_response;
                    var response_message = public_helper.Get_response_message(ref response_string, ref content_type);
                    sql = string.Concat("INSERT INTO Genera_Rating(QuoteID,Request_Data,Response_Data,TotalCube) VALUES(",
                                        "0,'", data, "','", response_string, "',", ltl_quote_request.totalCube,
                                        ")");
                    HelperFuncs.ExecuteNonQuery(AppCodeConstants.connStringAesAPI, ref sql, "Get_LTL_ratesController");

                    return(response_message);
                }


                // If got to here, request is valid JSON or XML
                // Convert JSON or XML to URL Encoded string and get GCM rates

                url_string = string.Concat("username="******"&password="******"&mode=ws&subdomain=www&showDLSRates=True",
                                           "&isHHG=False&isUSED=False",
                                           url_string);

                //DB.LogGenera(iam, "Public API url_string", url_string);



                Models.LTL.Helper helper = new Models.LTL.Helper();

                helper.Set_parameters(ref ltl_quote_request, ref quoteData);
                quoteData.username     = username;
                quoteData.showDLSRates = true;
                quoteData.subdomain    = "www";

                #region Check for > 4 line items

                if (quoteData.m_lPiece.Length > 4)
                {
                    DB.LogGenera(iam, "m_lPiece.Length > 4", "true");
                    response_string = json_helper.Build_error_response("35",
                                                                       "Too many freight item nodes, maximum number of item nodes is 4");

                    return(public_helper.Get_response_message(ref response_string, ref content_type));
                }
                else
                {
                    DB.LogGenera(iam, "m_lPiece.Length > 4", "false");
                }

                #endregion

                Validator validator = new Validator(ref quoteData);
                RateServiceNotification validation_result = validator.Validate_rating_request();

                #region If validation was not successful return error result

                if (validation_result.Code == "0")
                {
                    // Do nothing
                    DB.LogGenera(iam, "validation_result.Code", validation_result.Code);
                }
                else
                {
                    DB.LogGenera(iam, "validation_result.Code", validation_result.Code);

                    response_string = json_helper.Build_error_response(validation_result.Code, validation_result.Message);

                    var response_message = public_helper.Get_response_message(ref response_string, ref content_type);

                    sql = string.Concat("INSERT INTO Genera_Rating(QuoteID,Request_Data,Response_Data,TotalCube) VALUES(",
                                        "0,'", data, "','", response_string, "',", ltl_quote_request.totalCube,
                                        ")");
                    HelperFuncs.ExecuteNonQuery(AppCodeConstants.connStringAesAPI, ref sql, "Get_LTL_ratesController");

                    return(response_message);
                }

                #endregion

                quoteData.destCity = quoteData.destCity.Replace(" Twp", " Township");
                quoteData.origCity = quoteData.origCity.Replace(" Twp", " Township");

                LTL_Carriers             carriers = new LTL_Carriers(quoteData);
                SharedLTL.CarriersResult result   = carriers.GetRates();

                #region If any rates were found return rates, if not give error result

                if (result.totalQuotes == null || result.totalQuotes.Length == 0)
                {
                    #region If did not find any rates return error result

                    // If did not find any rates return error result

                    response_string = json_helper.Build_error_response("2",
                                                                       string.Concat("Could not find any rates. Please try again."));

                    var response_message = public_helper.Get_response_message(ref response_string, ref content_type);
                    sql = string.Concat("INSERT INTO Genera_Rating(QuoteID,Request_Data,Response_Data,TotalCube) VALUES(",
                                        "0,'", data, "','", response_string, "',", ltl_quote_request.totalCube,
                                        ")");
                    HelperFuncs.ExecuteNonQuery(AppCodeConstants.connStringAesAPI, ref sql, "Get_LTL_ratesController");

                    return(response_message);

                    #endregion
                }
                else
                {
                    string[] additionalServices = new string[0];

                    string requestId;

                    public_helper.StoreLTLRequestsSql(
                        ref quoteData, ref result.totalQuotes, result.totalQuotes[0].NewLogId, data, response_string,
                        out requestId);

                    response_string = json_helper.Build_response(ref result.totalQuotes);

                    var response_message = public_helper.Get_response_message(ref response_string, ref content_type);

                    #region INSERT INTO Genera_Rating

                    sql = string.Concat("INSERT INTO Genera_Rating(QuoteID,Request_Data,Response_Data,TotalCube) VALUES(",
                                        result.totalQuotes[0].NewLogId, ",'", data, "','", response_string, "',", ltl_quote_request.totalCube,
                                        ")");
                    HelperFuncs.ExecuteNonQuery(AppCodeConstants.connStringAesAPI, ref sql, "Get_LTL_ratesController");

                    #endregion

                    #region INSERT INTO ResponseTimes
                    // INSERT INTO ResponseTimes

                    int UPS_freight_milliseconds = 0, SMTL_milliseconds = 0, BestOvernite_milliseconds = 0, NewPenn_milliseconds = 0,
                        RL_milliseconds = 0, RRD_Truckload_milliseconds = 0;

                    foreach (GCMRateQuote quote in result.totalQuotes)
                    {
                        //DB.LogGenera("quote.DisplayName", "quote.DisplayName", quote.DisplayName);
                        if (quote.DisplayName == "UPS - Genera")
                        {
                            UPS_freight_milliseconds = quote.Elapsed_milliseconds;
                        }
                        else if (quote.DisplayName == "SMTL - Genera")
                        {
                            SMTL_milliseconds = quote.Elapsed_milliseconds;
                        }
                        else if (quote.DisplayName == "Best Overnite - Genera")
                        {
                            BestOvernite_milliseconds = quote.Elapsed_milliseconds;
                        }
                        else if (quote.DisplayName == "New Penn - Genera")
                        {
                            NewPenn_milliseconds = quote.Elapsed_milliseconds;
                        }
                        else if (quote.DisplayName == "R&L Carrier - Genera")
                        {
                            RL_milliseconds = quote.Elapsed_milliseconds;
                        }
                        else if (quote.DisplayName == "RRD Truckload")
                        {
                            RRD_Truckload_milliseconds = quote.Elapsed_milliseconds;
                        }
                    }

                    stopwatch.Stop();
                    int elapsedMilliseconds = (int)stopwatch.ElapsedMilliseconds;

                    //int seconds = elapsedMilliseconds / 1000;

                    //int gcm_time = 0;
                    sql = string.Concat("INSERT INTO Rate_response_times(",
                                        "QuoteID,RequestID,GCM_API,DLS,UPS_freight,SMTL,BestOvernite,NewPenn,RL,P44,Truckload) VALUES(",
                                        result.totalQuotes[0].NewLogId, ",'", requestId, "',", elapsedMilliseconds, ",", result.elapsed_milliseconds_DLS_Genera,
                                        ",", UPS_freight_milliseconds, ",", SMTL_milliseconds, ",", BestOvernite_milliseconds, ",", NewPenn_milliseconds,
                                        ",", RL_milliseconds, ",", result.elapsed_milliseconds_P44, ",", RRD_Truckload_milliseconds,
                                        ")");

                    HelperFuncs.ExecuteNonQuery(AppCodeConstants.conn_string_Genera, ref sql, "Get_LTL_ratesController");

                    #endregion

                    return(response_message);
                }

                #endregion
            }
            catch (Exception e)
            {
                #region Unknown error

                DB.LogGenera(iam, "get_ltl_rates_test", e.ToString());

                Json_helper json_helper = new Json_helper();

                string response_string = "";

                response_string = json_helper.Build_error_response("2",
                                                                   string.Concat("Could not find any rates. Please try again."));

                Models.Public.LTL.Helper public_helper = new Models.Public.LTL.Helper();
                string content_type = "application/json";
                return(public_helper.Get_response_message(ref response_string, ref content_type));

                #endregion
            }
        }