public IActionResult Post([FromBody] RxoSendOrderViewModel model) { try { if (ModelState.IsValid) { var newSendOrderRequest = new RxoSendOrderRequest() { arg0 = model.OrderGroupID, ACCOUNT = model.UserName, PATIENT_FIRST_NAME = model.OrderGroupID, PATIENT_LAST_NAME = model.DisplayID, LENS_SALES_ARTICLE = model.LensCode, // // LENS R // LENS_R_TYPE = model.RightEye.Lens_Type, LENS_R_SPHERE = model.RightEye.sphere, LENS_R_CYLINDER = model.RightEye.cylinder, LENS_R_AXIS = model.RightEye.axis, LENS_R_DISTANCE = model.RightEye.DI, LENS_R_ADD = model.RightEye.add, LENS_R_SEG_HEIGHT = (model.RightEye.ProgHeight == null ? "" : model.RightEye.ProgHeight), LENS_R_OC_HEIGHT = (model.RightEye.MonoHeight == null ? "" : model.RightEye.MonoHeight), // // LENS L // LENS_L_TYPE = model.LeftEye.Lens_Type, LENS_L_SPHERE = model.LeftEye.sphere, LENS_L_CYLINDER = model.LeftEye.cylinder, LENS_L_AXIS = model.LeftEye.axis, LENS_L_DISTANCE = model.LeftEye.DI, LENS_L_ADD = model.LeftEye.add, LENS_L_SEG_HEIGHT = (model.LeftEye.ProgHeight == null ? "" : model.LeftEye.ProgHeight), LENS_L_OC_HEIGHT = (model.LeftEye.MonoHeight == null ? "" : model.LeftEye.MonoHeight), // // FRAME // FRAME_UPC = model.FrameID, FRAME_DBL = "" }; // Invoke the Service var RxoWsResponse = luxotticaRxoSvc.CallSendOrder(newSendOrderRequest); return(Ok(RxoWsResponse)); } else { // Show the errors return(BadRequest("SendOrder invalid model")); } } catch (Exception ex) { logger.LogError($"Luxottica SendOrder Error : {ex}"); return(BadRequest("SendOrder Error")); } }
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 IActionResult SendOrder([FromForm] RxoSendOrderViewModel model) { try { if (ModelState.IsValid) { var newSendOrderRequest = new RxoSendOrderRequest() { arg0 = model.OrderGroupID, ACCOUNT = model.UserName, PATIENT_FIRST_NAME = model.OrderGroupID, PATIENT_LAST_NAME = model.DisplayID, LENS_SALES_ARTICLE = model.LensCode, // // LENS R // LENS_R_TYPE = model.RightEye.Lens_Type, LENS_R_SPHERE = model.RightEye.sphere, LENS_R_CYLINDER = model.RightEye.cylinder, LENS_R_AXIS = model.RightEye.axis, LENS_R_DISTANCE = model.RightEye.DI, LENS_R_ADD = model.RightEye.add, LENS_R_SEG_HEIGHT = model.RightEye.ProgHeight, LENS_R_OC_HEIGHT = model.RightEye.MonoHeight, // // LENS L // LENS_L_TYPE = model.LeftEye.Lens_Type, LENS_L_SPHERE = model.LeftEye.sphere, LENS_L_CYLINDER = model.LeftEye.cylinder, LENS_L_AXIS = model.LeftEye.axis, LENS_L_DISTANCE = model.LeftEye.DI, LENS_L_ADD = model.LeftEye.add, LENS_L_SEG_HEIGHT = model.LeftEye.ProgHeight, LENS_L_OC_HEIGHT = model.LeftEye.MonoHeight, // // FRAME // FRAME_UPC = model.FrameID, FRAME_DBL = "" }; // Invoke the Service var RxoWsResponse = luxotticaRxoSvc.CallSendOrder(newSendOrderRequest); ViewBag.UserMessage = RxoWsResponse; ModelState.Clear(); } else { // Show the errors ViewBag.UserMessage = "Error"; } } catch (Exception ex) { logger.LogError($"Luxottica CheckOrder Error : {ex}"); } return(View()); }