public RxoBaseResponseEntity CallSendOrder(RxoSendOrderRequest modelSendOrder)
        {
            int    iReturnFromResponse = 0;
            string soapResult          = "";


            ////////////////////////////////////
            //
            // ...config stuff
            //
            ////////////////////////////////////

            modelSendOrder.ORIGIN_NAME = configRxoWs.ORIGIN_NAME;


            ////////////////////////////////////
            //
            // create the service response
            //
            ////////////////////////////////////

            RxoBaseResponseEntity responseSendOrder = new RxoBaseResponseEntity();


            ////////////////////////////////////
            //
            // Create the HTTP web request
            //
            ////////////////////////////////////

            HttpWebRequest request = CreateWebRequestForSendOrder(configRxoWs);

            ////////////////////////////////////
            //
            // Prepare the SOAP Request
            //
            ////////////////////////////////////

            string stringRequest = @"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:rxo=""http://rxo.webservices.luxottica.it/""  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                        <soapenv:Header/>
                                        <soapenv:Body>
                                           <rxo:rxoOrder>
                                              <arg0 id=""{0}"">
                                                 <HEADER>	
                                                 <ORIGIN>
                                                    <NAME>{1}</NAME>
                                                 </ORIGIN>
                                                 <DATE_REQUESTED>{2}</DATE_REQUESTED>
                                                 <ACCOUNT class=""orderBy"">
                                                 <ACCOUNT_ID>{3}</ACCOUNT_ID>
                                                 </ACCOUNT>
                                                 <ACCOUNT class=""shipTo"">
                                                 <ACCOUNT_ID>{3}</ACCOUNT_ID>
                                                 </ACCOUNT>
                                                 <ACCOUNT class=""billTo"">
                                                 <ACCOUNT_ID>{3}</ACCOUNT_ID>
                                                 </ACCOUNT>
                                                 <PATIENT>
                                                 <FIRST_NAME>{4}</FIRST_NAME>
                                                 <LAST_NAME>{4}</LAST_NAME>
                                                 </PATIENT>
                                                 </HEADER> 
         
                                                 <LENS eye=""R"">
                                                    <SALES_ARTICLE>{5}</SALES_ARTICLE>
                                                    <SPHERE>{6}</SPHERE>
                                                    <CYLINDER>{7}</CYLINDER>
                                                    <AXIS>{8}</AXIS>
                                                    <PD>
                                                       <DISTANCE>{9}</DISTANCE>
                                                    </PD>
                                                    <ADD>{10}</ADD>
                                                    <SEG_HEIGHT xsi:nil=""true"">{11}</SEG_HEIGHT>
                                                    <OC_HEIGHT class=""Height"">{12}</OC_HEIGHT>
                                                    <OPC></OPC>
                                                 </LENS>

                                                 <LENS eye=""L"">
                                                    <SALES_ARTICLE>{5}</SALES_ARTICLE>
                                                    <SPHERE>{13}</SPHERE>
                                                    <CYLINDER>{14}</CYLINDER>
                                                    <AXIS>{15}</AXIS>
                                                    <PD>
                                                       <DISTANCE>{16}</DISTANCE>
                                                    </PD>
                                                    <ADD>{17}</ADD>
                                                    <SEG_HEIGHT xsi:nil=""true"">{18}</SEG_HEIGHT>
                                                    <OC_HEIGHT class=""Height"">{19}</OC_HEIGHT>
                                                    <OPC/>
                                                 </LENS>

                                                 <ITEMS>
                                                    <FRAME>
                                                       <UPC>{20}</UPC>
                                                       <DBL>{21}</DBL>
                                                    </FRAME>
                                                 </ITEMS>
                                              </arg0>
                                           </rxo:rxoOrder>
                                        </soapenv:Body>
                                     </soapenv:Envelope>";


            stringRequest = stringRequest.Replace("{0}", modelSendOrder.arg0);

            XDocument baseRequest = XDocument.Parse(stringRequest);

            //
            // Update <HEADER><ORIGIN><NAME>
            //
            IEnumerable <XElement> TagORIGIN = baseRequest.Descendants("ORIGIN");

            foreach (XElement _element in TagORIGIN)
            {
                if (_element.Name.LocalName == "ORIGIN")
                {
                    _element.Element("NAME").Value = modelSendOrder.ORIGIN_NAME;
                }
            }

            //
            // Update <HEADER><DATE_REQUESTED>
            //
            IEnumerable <XElement> TagDATE_REQUESTED = baseRequest.Descendants("HEADER");

            foreach (XElement _element in TagDATE_REQUESTED)
            {
                if (_element.Name.LocalName == "HEADER")
                {
                    _element.Element("DATE_REQUESTED").Value = DateTime.Now.ToString("yyyy-MM-dd");
                }
            }

            //
            // Update <HEADER><ORIGIN><ACCOUNT>
            //
            IEnumerable <XElement> TagACCOUNT = baseRequest.Descendants("ACCOUNT");

            foreach (XElement _element in TagACCOUNT)
            {
                if (_element.Name.LocalName == "ACCOUNT")
                {
                    _element.Element("ACCOUNT_ID").Value = modelSendOrder.ACCOUNT;
                }
            }

            //
            // Update <HEADER><ORIGIN><PATIENT>
            //
            IEnumerable <XElement> TagPATIENT = baseRequest.Descendants("PATIENT");

            foreach (XElement _element in TagPATIENT)
            {
                if (_element.Name.LocalName == "PATIENT")
                {
                    _element.Element("FIRST_NAME").Value = modelSendOrder.PATIENT_FIRST_NAME;
                    _element.Element("LAST_NAME").Value  = modelSendOrder.PATIENT_LAST_NAME;
                }
            }

            //
            // Update <LENS ...>
            //
            IEnumerable <XElement> TagLENSR = baseRequest.Descendants("LENS");

            foreach (XElement _element in TagLENSR)
            {
                if (_element.Name.LocalName == "LENS")
                {
                    _element.Element("SALES_ARTICLE").Value = modelSendOrder.LENS_SALES_ARTICLE;
                }

                if (_element.Name.LocalName == "LENS" && _element.FirstAttribute.Value == "R")
                {
                    _element.Element("SPHERE").Value   = modelSendOrder.LENS_R_SPHERE;
                    _element.Element("CYLINDER").Value = modelSendOrder.LENS_R_CYLINDER;
                    _element.Element("AXIS").Value     = modelSendOrder.LENS_R_AXIS;

                    XElement subPD = _element.Element("PD");
                    subPD.Element("DISTANCE").Value = modelSendOrder.LENS_R_DISTANCE;

                    if (modelSendOrder.LENS_R_TYPE == "4")
                    {
                        // Progressive
                        _element.Element("ADD").Value        = modelSendOrder.LENS_R_ADD;
                        _element.Element("SEG_HEIGHT").Value = modelSendOrder.LENS_R_SEG_HEIGHT;
                        _element.Element("OC_HEIGHT").Value  = "";
                    }
                    else
                    {
                        // Single Vision
                        _element.Element("ADD").Value        = "";
                        _element.Element("SEG_HEIGHT").Value = "";
                        _element.Element("OC_HEIGHT").Value  = modelSendOrder.LENS_R_OC_HEIGHT;
                    }
                }
                else
                {
                    _element.Element("SPHERE").Value   = modelSendOrder.LENS_L_SPHERE;
                    _element.Element("CYLINDER").Value = modelSendOrder.LENS_L_CYLINDER;
                    _element.Element("AXIS").Value     = modelSendOrder.LENS_L_AXIS;

                    XElement subPD = _element.Element("PD");
                    subPD.Element("DISTANCE").Value = modelSendOrder.LENS_L_DISTANCE;

                    if (modelSendOrder.LENS_R_TYPE == "4")
                    {
                        // Progressive
                        _element.Element("ADD").Value        = modelSendOrder.LENS_L_ADD;
                        _element.Element("SEG_HEIGHT").Value = modelSendOrder.LENS_L_SEG_HEIGHT;
                        _element.Element("OC_HEIGHT").Value  = "";
                    }
                    else
                    {
                        // Single Vision
                        _element.Element("ADD").Value        = "";
                        _element.Element("SEG_HEIGHT").Value = "";
                        _element.Element("OC_HEIGHT").Value  = modelSendOrder.LENS_L_OC_HEIGHT;
                    }
                }
            }

            //
            // Update <ITEMS><FRAME>
            //

            IEnumerable <XElement> TagFRAME = baseRequest.Descendants("FRAME");

            foreach (XElement _element in TagFRAME)
            {
                if (_element.Name.LocalName == "FRAME")
                {
                    _element.Element("UPC").Value = modelSendOrder.FRAME_UPC;
                    _element.Element("DBL").Value = modelSendOrder.FRAME_DBL;
                }
            }


            ////////////////////////////////////
            //
            //
            //
            ////////////////////////////////////

            XmlDocument soapEnvelopeXml = new XmlDocument();

            soapEnvelopeXml.LoadXml(baseRequest.ToString());

            //
            // Logging
            //
            //if (_iLoggingLevel > (int)LoggingLevelEnums.None)
            //{
            //    ExceptionLoggingService.Instance.WriteRXOWSLog("HTTPClient.InvokeRXOOrder", "rxoOrder Request", soapEnvelopeXml.InnerXml.ToString());
            //}

            ////////////////////////////////////
            //
            //
            //
            ////////////////////////////////////

            using (Stream webStream = request.GetRequestStream())

                using (StreamWriter requestWriter = new StreamWriter(webStream, System.Text.Encoding.UTF8))
                {
                    requestWriter.Write(soapEnvelopeXml.InnerXml.ToString());
                }

            ////////////////////////////////////
            //
            //
            //
            ////////////////////////////////////

            try
            {
                using (WebResponse response = request.GetResponse())
                {
                    using (StreamReader rd = new StreamReader(response.GetResponseStream()))
                    {
                        soapResult = rd.ReadToEnd();
                        Console.WriteLine(soapResult);

                        //
                        // Logging
                        //
                        //if (_iLoggingLevel > (int)LoggingLevelEnums.None)
                        //{
                        //    ExceptionLoggingService.Instance.WriteRXOWSLog("HTTPClient.InvokeRXOOrder", "rxoOrder Response", soapResult);
                        //}

                        //
                        // Now parse the response
                        //
                        string     strResponseCode = null;
                        XDocument  doc             = XDocument.Parse(soapResult);
                        XNamespace ns = "http://rxo.webservices.luxottica.it/";

                        IEnumerable <XElement> responses = doc.Descendants(ns + "rxoOrderResponse");
                        foreach (XElement _element in responses)
                        {
                            strResponseCode = (string)_element.Element("return");
                        }

                        if (strResponseCode != null)
                        {
                            iReturnFromResponse = 503;
                            Int32.TryParse(strResponseCode, out iReturnFromResponse);

                            if (iReturnFromResponse == -1)
                            {
                                responseSendOrder.ErrorCode        = iReturnFromResponse;
                                responseSendOrder.ErrorDescription = @"RXOOrder Generic Error";
                            }
                            else
                            {
                                responseSendOrder.ErrorCode        = 0;
                                responseSendOrder.ErrorDescription = strResponseCode;
                            }

                            iReturnFromResponse = responseSendOrder.ErrorCode;
                        }
                        else
                        {
                            iReturnFromResponse = 503;
                        }
                    }
                }
            }
            catch (WebException webex)
            {
                if (webex.Status == WebExceptionStatus.ProtocolError)
                {
                    var response = webex.Response as HttpWebResponse;
                    if (response != null)
                    {
                        Console.WriteLine("HTTP Status Code: " + (int)response.StatusCode);
                        iReturnFromResponse = (int)response.StatusCode;
                    }
                    else
                    {
                        // no http status code available
                    }
                }
                else if (webex.Status == WebExceptionStatus.Timeout)
                {
                    iReturnFromResponse = (int)HttpStatusCode.RequestTimeout;
                }
                else
                {
                    // no http status code available
                }
            }
            catch (Exception ex)
            {
                iReturnFromResponse = 503;
            }


            //return 0;


            responseSendOrder.ErrorCode        = iReturnFromResponse;
            responseSendOrder.ErrorDescription = DecodeResponseCodes(iReturnFromResponse);

            // Override specifics
            if (responseSendOrder.ErrorCode != -999)
            {
                responseSendOrder.ErrorCode        = responseSendOrder.ErrorCode;
                responseSendOrder.ErrorDescription = responseSendOrder.ErrorDescription;
            }


            // Auditing

            RxoWsAuditing recordAudit = new RxoWsAuditing()
            {
                DoorNumber       = modelSendOrder.ACCOUNT,
                EventName        = "SendOrder",
                EventDescription = "Send a Rxo Order to Luxottica",
                EventDate        = DateTime.Now,
                EventStatus      = responseSendOrder.ErrorCode.ToString(),
                EventRequest     = stringRequest,
                EventResponse    = soapResult
            };

            rxoRepository.AddEntity(recordAudit);

            if (!rxoRepository.SaveAll())
            {
                // ...some logging...
            }


            return(responseSendOrder);
        }
        public RxoBaseResponseEntity CallCheckFrame(RxoCheckFrameRequest modelCheckFrame)
        {
            int    iReturnFromResponse = 0;
            string soapResult          = "";

            RxoBaseResponseEntity responseCheckFrame = new RxoBaseResponseEntity();

            HttpWebRequest request = CreateWebRequest(configRxoWs);

            XmlDocument soapEnvelopeXml = new XmlDocument();

            string stringRequest = @"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:rxo=""http://rxo.webservices.luxottica.it/"">
                                        <soapenv:Header/>
                                        <soapenv:Body>
                                          <rxo:rxoCheckFrame>
                                            <arg0>{0}</arg0>
                                            <arg1>{1}</arg1>
                                          </rxo:rxoCheckFrame>
                                        </soapenv:Body>
                                      </soapenv:Envelope>";

            stringRequest = String.Format(stringRequest, modelCheckFrame.Kunnr, modelCheckFrame.Upc);

            soapEnvelopeXml.LoadXml(stringRequest);

            //
            // Logging
            //
            //if (_iLoggingLevel > (int)LoggingLevelEnums.None)
            //{
            //    ExceptionLoggingService.Instance.WriteRXOWSLog("HTTPClient.InvokeRXOCheckFrame", "rxoCheckFrame Request", soapEnvelopeXml.InnerXml.ToString());
            //}

            using (Stream stream = request.GetRequestStream())
            {
                soapEnvelopeXml.Save(stream);
            }

            try
            {
                using (WebResponse response = request.GetResponse())
                {
                    using (StreamReader rd = new StreamReader(response.GetResponseStream()))
                    {
                        soapResult = rd.ReadToEnd();
                        Console.WriteLine(soapResult);

                        //
                        // Logging
                        //
                        //if (_iLoggingLevel > (int)LoggingLevelEnums.None)
                        //{
                        //    ExceptionLoggingService.Instance.WriteRXOWSLog("HTTPClient.InvokeRXOCheckFrame", "rxoCheckFrame Response", soapResult);
                        //}

                        //
                        // Now parse the response
                        //
                        string                 strResponseCode = null;
                        XDocument              doc             = XDocument.Parse(soapResult);
                        XNamespace             ns        = "http://rxo.webservices.luxottica.it/";
                        IEnumerable <XElement> responses = doc.Descendants(ns + "rxoCheckFrameResponse");
                        foreach (XElement _element in responses)
                        {
                            strResponseCode = (string)_element.Element("return");
                        }

                        if (strResponseCode != null)
                        {
                            iReturnFromResponse = 500;
                            Int32.TryParse(strResponseCode, out iReturnFromResponse);
                        }
                        else
                        {
                            iReturnFromResponse = 501;
                        }
                    }
                }
            }
            catch (WebException webex)
            {
                if (webex.Status == WebExceptionStatus.ProtocolError)
                {
                    var response = webex.Response as HttpWebResponse;
                    if (response != null)
                    {
                        Console.WriteLine("HTTP Status Code: " + (int)response.StatusCode);
                        iReturnFromResponse = (int)response.StatusCode;
                    }
                    else
                    {
                        // no http status code available
                    }
                }
                else
                {
                    // no http status code available
                }
            }
            catch (Exception ex)
            {
                iReturnFromResponse = 501;
            }

            responseCheckFrame.WebService       = @"https://certi-my.luxottica.com:443/Stores-WS/RXOServiceImplService";
            responseCheckFrame.ErrorCode        = iReturnFromResponse;
            responseCheckFrame.ErrorDescription = DecodeResponseCodes(iReturnFromResponse);

            // Auditing

            RxoWsAuditing recordAudit = new RxoWsAuditing()
            {
                DoorNumber       = modelCheckFrame.Kunnr,
                EventName        = "CheckFrame",
                EventDescription = "Request to Luxottica Rxo WebService",
                EventDate        = DateTime.Now,
                EventStatus      = iReturnFromResponse.ToString(),
                EventRequest     = stringRequest,
                EventResponse    = soapResult
            };

            rxoRepository.AddEntity(recordAudit);

            if (!rxoRepository.SaveAll())
            {
                // ...some logging...
            }

            return(responseCheckFrame);
        }