From be049fe4f6f8f278d16d3e1fe49afc80dbc8032f Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Thu, 28 May 2020 09:08:34 -0700 Subject: [PATCH] Added processing of XML. --- BodyshopUploader/Utils/HTTPServer.cs | 29 ++++++++++++++-- BodyshopUploader/Utils/QuickBooksInterop.cs | 33 +++++++++++++++---- .../ViewModels/MainViewModel.props.cs | 2 +- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/BodyshopUploader/Utils/HTTPServer.cs b/BodyshopUploader/Utils/HTTPServer.cs index e041449..a7b9730 100644 --- a/BodyshopUploader/Utils/HTTPServer.cs +++ b/BodyshopUploader/Utils/HTTPServer.cs @@ -17,14 +17,19 @@ namespace BodyshopPartner.Utils { res.WithCORS(); //res.AddHeader("Access-Control-Allow-Origin", "http://localhost:3000 https://localhost:3000 http://localhost:5000 https://localhost:5000 https://*.imex.online,imex.online"); - res.Close() ; + res.Close(); }, "OPTIONS"); Route.Add("/qb/receivables", (req, res, props) => { - Console.WriteLine("Got a hit."); + logger.Debug("/qb/receivables - POST"); + string AuthToken = req.Headers.Get("Authorization"); + string requestXML = ParseBody(req); + logger.Trace("Incoming Request XML", requestXML); + //res.WithCORS(); Utils.QuickBooksInterop.ConnectToQuickBooks(); + string result = Utils.QuickBooksInterop.processRequestFromQB(requestXML); Utils.QuickBooksInterop.DisconnectFromQuickBooks(); @@ -36,5 +41,25 @@ namespace BodyshopPartner.Utils //TODO As a part of the installer, add netsh http add urlacl url=http://+:1337/ user="Everyone HttpServer.ListenAsync(1337, System.Threading.CancellationToken.None, Route.OnHttpRequestAsync).Wait(); } + + public static string ParseBody(System.Net.HttpListenerRequest req) + { + System.IO.Stream body = req.InputStream; + System.Text.Encoding encoding = req.ContentEncoding; + System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding); + if (req.ContentType != null) + { + Console.WriteLine("Client data content type {0}", req.ContentType); + } + Console.WriteLine("Client data content length {0}", req.ContentLength64); + + Console.WriteLine("Start of client data:"); + // Convert the data to a string and display it on the console. + string s = reader.ReadToEnd(); + Console.WriteLine(s); + Console.WriteLine("End of client data:"); + body.Close(); + return s; + } } } diff --git a/BodyshopUploader/Utils/QuickBooksInterop.cs b/BodyshopUploader/Utils/QuickBooksInterop.cs index 48caa3a..d7b1df5 100644 --- a/BodyshopUploader/Utils/QuickBooksInterop.cs +++ b/BodyshopUploader/Utils/QuickBooksInterop.cs @@ -16,17 +16,25 @@ namespace BodyshopPartner.Utils private static string maxVersion; private static string companyFile = ""; private static QBFileMode mode = QBFileMode.qbFileOpenDoNotCare; - private static string appID = "IDN123"; + private static string appID = "ImEXBSP"; private static string appName = "BodyshopPartner"; public static void ConnectToQuickBooks() { - rp = new RequestProcessor2Class(); - rp.OpenConnection(appID, appName); - ticket = rp.BeginSession(companyFile, mode); - string[] versions = rp.get_QBXMLVersionsForSession(ticket); - maxVersion = versions[versions.Length - 1]; + try + { + rp = new RequestProcessor2Class(); + rp.OpenConnection(appID, appName); + ticket = rp.BeginSession(companyFile, mode); + string[] versions = rp.get_QBXMLVersionsForSession(ticket); + maxVersion = versions[versions.Length - 1]; + } + catch (Exception ex) + { + logger.Error(ex); + } + } public static void DisconnectFromQuickBooks() @@ -45,5 +53,18 @@ namespace BodyshopPartner.Utils } } } + public static string processRequestFromQB(string request) + { + try + { + return rp.ProcessRequest(ticket, request); + } + catch (Exception e) + { + logger.Error(e.Message); + return null; + } + } + } } diff --git a/BodyshopUploader/ViewModels/MainViewModel.props.cs b/BodyshopUploader/ViewModels/MainViewModel.props.cs index 27633ab..6825a8d 100644 --- a/BodyshopUploader/ViewModels/MainViewModel.props.cs +++ b/BodyshopUploader/ViewModels/MainViewModel.props.cs @@ -12,7 +12,7 @@ namespace BodyshopPartner.ViewModels public partial class MainViewModel : BaseViewModel { public GrowlNotification Growler; - private System.Timers.Timer _updateCheckTimer = new System.Timers.Timer(60 * 1000); + private System.Timers.Timer _updateCheckTimer = new System.Timers.Timer(60 * 1000 * 60); private ObservableCollection _monitoringPaths = new ObservableCollection(); public ObservableCollection MonitoringPaths