Example #1
0
 private async Task EmailCXMLContents(M3Order parsedOrder, string cxml)
 {
     string orderLinesHtml = HtmlGenerator.ToHtmlTable(parsedOrder.OrderLines);
     string subject        = $"cXML Order Received - PO {parsedOrder.CustomerPONumber}";
     string finalEmail     = $"{orderLinesHtml} <hr/> <textarea style='width:100%;'>{cxml}</textarea>";
     await Email.SendEmail(EmailClient, Logger, subject, "*****@*****.**", new List <string>() { Settings.OrderEmailRecipient }, finalEmail);
 }
Example #2
0
        public async Task Post()
        {
            Logger.LogInformation("Incoming cXML post request received.");
            var cxml = new StreamReader(this.Request.Body).ReadToEnd();

            //FIRST LET'S MAKE SURE WE CAN PARSE THE ORDER
            string  payloadId   = "N/A";
            M3Order parsedOrder = null;

            try
            {
                Logger.LogInformation("Parsing cXML Order");
                parsedOrder = M3Order.ParseCXMLOrder(cxml, out payloadId);
            }
            catch (Exception ex)
            {
                //Order couldn't be parsed... Let everybody know
                var html = $"Error: {ex.Message} <br/> Stack Trace: {ex.StackTrace}";
                await Email.SendEmail(EmailClient, Logger, "ERROR Reading cXML Order", "*****@*****.**", new List <string>() { Settings.OrderEmailRecipient }, html);

                this.Response.StatusCode = (int)HttpStatusCode.BadRequest;
            }


            Logger.LogInformation($"cXML Order Successfully Parsed. payloadId={payloadId}");
            Logger.LogInformation($"Saving order to S3. payloadId={payloadId}");
            await SaveCXMLToS3(cxml);

            await EmailCXMLContents(parsedOrder, cxml);

            var orderResponse = new XElement("cXML",
                                             new XAttribute("version", $"1.2.025"),
                                             new XAttribute("payloadID", $"{DateTime.Now.ToString("yyyyMMddhhmmss.1.fff")}@bargreen.com"),
                                             new XAttribute(XNamespace.Xml + "lang", "en"),
                                             new XAttribute("timestamp", DateTime.Now.ToString("yyyy-MM-ddThh:mm:ssK")),
                                             new XElement("Response",
                                                          new XElement("Status",
                                                                       new XAttribute("code", "201"),
                                                                       new XAttribute("text", "Accepted")
                                                                       )
                                                          )
                                             );

            string declaration = "<?xml version=\"1.0\" encoding=\"UTF-8\"  standalone=\"no\"?>";
            string docType     = $"<!DOCTYPE cXML SYSTEM \"http://xml.cXML.org/schemas/cXML/1.2.011/cXML.dtd\">";
            string xml         = $"{declaration}\r\n{docType}\r\n{orderResponse.ToString()}";

            this.Response.ContentType = "text/xml";
            this.Response.StatusCode  = (int)HttpStatusCode.Created;
            var utf8bytes = System.Text.Encoding.UTF8.GetBytes(xml);

            this.Response.ContentLength = utf8bytes.Length;
            this.Response.Body.Write(utf8bytes, 0, utf8bytes.Length);

            await SendPOAcknowledgment(payloadId);
        }