WIP quickbooks testing.
This commit is contained in:
30
src/main/quickbooks-desktop/QuickbooksConnector.cs
Normal file
30
src/main/quickbooks-desktop/QuickbooksConnector.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using Interop.QBFC16; // Ensure this matches your DLL version
|
||||
|
||||
public class QuickBooksConnector
|
||||
{
|
||||
public string ProcessQBXML(string qbxmlRequest)
|
||||
{
|
||||
try
|
||||
{
|
||||
QBSessionManager sessionManager = new QBSessionManager();
|
||||
sessionManager.OpenConnection("", "YourAppName");
|
||||
sessionManager.BeginSession("", ENOpenMode.omDontCare);
|
||||
|
||||
IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest("US", 13, 0);
|
||||
requestMsgSet.AppendXML(qbxmlRequest);
|
||||
|
||||
IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);
|
||||
string qbxmlResponse = responseMsgSet.ToXMLString();
|
||||
|
||||
sessionManager.EndSession();
|
||||
sessionManager.CloseConnection();
|
||||
|
||||
return qbxmlResponse;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return $"Error: {ex.Message}";
|
||||
}
|
||||
}
|
||||
}
|
||||
114
src/main/quickbooks-desktop/quickbooks-desktop.ts
Normal file
114
src/main/quickbooks-desktop/quickbooks-desktop.ts
Normal file
@@ -0,0 +1,114 @@
|
||||
import * as Winax from "winax";
|
||||
import log from "electron-log/main";
|
||||
|
||||
import { Request, Response } from "express";
|
||||
import { UUID } from "crypto";
|
||||
import errorTypeCheck from "../../util/errorTypeCheck";
|
||||
import _ from "lodash";
|
||||
import store from "../store/store";
|
||||
|
||||
export async function handleQuickBookRequest(
|
||||
req: Request,
|
||||
res: Response,
|
||||
): Promise<void> {
|
||||
//TODO: Add OS sysstem checking. This can only happen on windows machines.
|
||||
const QbFilePath: string = `C:\\Users\\PatrickFic\\Development\\FRODO COLLISION.QBW`;
|
||||
// ||
|
||||
// (store.get("settings.qbFilePath") as string) F
|
||||
|
||||
if (_.isEmpty(QbFilePath)) {
|
||||
res.status(400).json({ error: "Quickbooks file path not set" });
|
||||
return;
|
||||
}
|
||||
|
||||
const qbxmlRequestList = req.body as Array<{
|
||||
id: UUID;
|
||||
okStatusCodes: Array<string>;
|
||||
qbxml: string;
|
||||
}>;
|
||||
|
||||
const returnResponse: Array<{
|
||||
Id: UUID;
|
||||
Success: boolean;
|
||||
ErrorMessage: string;
|
||||
}> = [];
|
||||
|
||||
//Connect to the QuickBooks File
|
||||
let requestProcessor;
|
||||
try {
|
||||
requestProcessor = new Winax.Object("QBXMLRP2.RequestProcessor.2");
|
||||
requestProcessor.OpenConnection(QbFilePath, "ShopPartnerActualRequest");
|
||||
} catch (error) {
|
||||
log.error(
|
||||
"Error instnatiating QuickBooks Request Processor",
|
||||
QbFilePath,
|
||||
errorTypeCheck(error),
|
||||
);
|
||||
res.status(500).json({ error: "Error connecting to QuickBooks" });
|
||||
return;
|
||||
}
|
||||
|
||||
const ticket = requestProcessor.BeginSession(QbFilePath, 2); //2 indicated qbFileOpenModeDoNotCare
|
||||
log.info("Quickbooks Ticket", ticket);
|
||||
for (const qbxmlRequest of qbxmlRequestList) {
|
||||
try {
|
||||
//TODO: Refactor to not create a new connection every time.
|
||||
const QuickBooksResponse = requestProcessor.ProcessRequest(
|
||||
ticket,
|
||||
qbxmlRequest.qbxml,
|
||||
);
|
||||
log.info("QuickBooks Raw Response: ", QuickBooksResponse);
|
||||
returnResponse.push({
|
||||
Id: qbxmlRequest.id,
|
||||
Success:
|
||||
QuickBooksResponse.StatusCode === "0" ||
|
||||
qbxmlRequest.okStatusCodes.includes(QuickBooksResponse.StatusCode),
|
||||
ErrorMessage: QuickBooksResponse,
|
||||
});
|
||||
} catch (error) {
|
||||
log.error(
|
||||
"Error running transaction",
|
||||
ticket,
|
||||
qbxmlRequest,
|
||||
errorTypeCheck(error),
|
||||
);
|
||||
}
|
||||
}
|
||||
requestProcessor.EndSession(ticket);
|
||||
requestProcessor.CloseConnection();
|
||||
res.json(qbxmlRequestList);
|
||||
}
|
||||
|
||||
//This set of functions works.
|
||||
export function TestQB(): void {
|
||||
let requestProcessor, ticket;
|
||||
try {
|
||||
requestProcessor = new Winax.Object("QBXMLRP.RequestProcessor.1");
|
||||
const connection = requestProcessor.OpenConnection("", "ShopPartnerOneoFf");
|
||||
|
||||
ticket = requestProcessor.BeginSession("", 2); //2 indicated qbFileOFpenModeDoNotCare
|
||||
|
||||
const qbre = requestProcessor.ProcessRequest(
|
||||
ticket,
|
||||
`<?qbxml version="16.0"?>
|
||||
<QBXML>
|
||||
<QBXMLMsgsRq onError="stopOnError">
|
||||
<AccountQueryRq requestID="1"> </AccountQueryRq>
|
||||
</QBXMLMsgsRq>
|
||||
</QBXML>`,
|
||||
);
|
||||
} catch (error) {
|
||||
log.error(
|
||||
"Error instnatiating QuickBooks Request Processor",
|
||||
|
||||
errorTypeCheck(error),
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
log.log("Ticket", ticket);
|
||||
requestProcessor.EndSession(ticket);
|
||||
requestProcessor.CloseConnection();
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user