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); }
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); }