From 85c446bc57f989e027b29b31a00ec14bd77669a4 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Thu, 15 Aug 2024 10:17:11 -0700 Subject: [PATCH] Refactor testing js file and made more modular. --- Fortellis Notes.md | 18 +++ fortellis-scratch.js | 305 ++++++++++++++++++++++++++++++++++++ fortellis.js | 362 +++++++++++++++++-------------------------- 3 files changed, 466 insertions(+), 219 deletions(-) create mode 100644 Fortellis Notes.md create mode 100644 fortellis-scratch.js diff --git a/Fortellis Notes.md b/Fortellis Notes.md new file mode 100644 index 000000000..0cb7e1941 --- /dev/null +++ b/Fortellis Notes.md @@ -0,0 +1,18 @@ +Fortellis Notes + +Subscription ID +* Appears to give us a list of all dealerships we have access to, and `apiDmsInfo` contains the integrations that are enabled for that dealership. +* Will likely need to filter based on the DMS ID or something? +* Should store the whole subscription object. Contains department information needed in subsequent calls. + + +Department ID +* May have multiple departments. Appears that financial stuff goes to Accounting, History will go to Service. +* TODO: How do we handle the multiple departments that may come up. + + +# Feedback +* Receiving bad request errors, with no details. API errors page doesn't indicate what's wrong. + +# API Error +* Not in real time - appaers to be every 3 minutes? diff --git a/fortellis-scratch.js b/fortellis-scratch.js new file mode 100644 index 000000000..b37e6e87c --- /dev/null +++ b/fortellis-scratch.js @@ -0,0 +1,305 @@ +const path = require('path'); +const Dinero = require('dinero.js'); +const { gql } = require('graphql-request'); +const queries = require('./server/graphql-client/queries'); +const GraphQLClient = require('graphql-request').GraphQLClient; +const logger = require('./server/utils/logger'); +const AxiosLib = require('axios').default; +const axios = AxiosLib.create(); +const uuid = require('uuid').v4; + +const FORTELLIS_KEY = 'X1FxzLyOk3kjHvMbzdPQXFZShkdbgzuo'; +const FORTELLIS_SECRET = '7Yvs0wpQeHcUS5r95ht8pqOaAvBq7dHV'; +const FORTELLIS_AUTH_URL = 'https://identity.fortellis.io/oauth2/aus1p1ixy7YL8cMq02p7/v1/token'; +const FORTELLIS_URL = 'https://api.fortellis.io'; +const SubscriptionID = '5b527d7d-baf3-40bc-adae-e7a541e37363'; +let SubscriptionMeta = null; +//const SubscriptionID = "cb59fa04-e53e-4b57-b071-80a48ebc346c"; + +function sleep(time, callback) { + var stop = new Date().getTime(); + while (new Date().getTime() < stop + time) {} + callback(); +} +async function GetAuthToken() { + const { + data: { access_token, expires_in, token_type }, + } = await axios.post( + FORTELLIS_AUTH_URL, + {}, + { + auth: { + username: FORTELLIS_KEY, + password: FORTELLIS_SECRET, + }, + params: { + grant_type: 'client_credentials', + scope: 'anonymous', + }, + }, + ); + return access_token; +} + +async function FetchSubscriptions() { + const access_token = await GetAuthToken(); + try { + const subscriptions = await axios.get( + `https://subscriptions.fortellis.io/v1/solution/subscriptions`, + { + headers: { Authorization: `Bearer ${access_token}` }, + }, + ); + + return subscriptions.data.subscriptions; + } catch (error) { + console.log('🚀 ~ FetchSubscriptions ~ error:', error); + } +} +async function GetBulkVendors() { + const departmentIds = (await FetchSubscriptions()) + .find((s) => s.subscriptionId === SubscriptionID) //Get the subscription object. + ?.apiDmsInfo.find((info) => info.name === 'CDK Drive Async Vendors')?.departments; //Departments are categorized by API name and have an array of departments. + + const access_token = await GetAuthToken(); + const ReqId = uuid(); + try { + //TODO: This is pointing towards the test environment. Need to carefully watch for the production switch. + const Vendors = await axios.get(`https://api.fortellis.io/cdk-test/drive/vendor/v2/bulk`, { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionID, + 'Request-Id': ReqId, + 'Department-Id': departmentIds[0].id, + }, + }); + + //Returns a long poll. Need to wait specified seconds until checking. + console.log( + '🚀 ~ GetBulkVendors ~ Vendors - waiting to execute callback:', + Vendors.data.checkStatusAfterSeconds, + ); + sleep(Vendors.data.checkStatusAfterSeconds * 1000, async () => { + const VendorsResult = await axios.get(Vendors.data._links.status.href, { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionID, + 'Request-Id': ReqId, + 'Department-Id': departmentIds[0].id, + }, + }); + + //This may have to check again if it isn't ready. + const VendorsResult2 = await axios.get(VendorsResult.data._links.result.href, { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionID, + 'Request-Id': ReqId, + 'Department-Id': departmentIds[0].id, + }, + }); + console.log('🚀 ~ sleep ~ VendorsResult2:', VendorsResult2); + }); + + console.log('🚀 ~ GetBulkVendors ~ Vendors:', ReqId, Vendors.data); + } catch (error) { + console.log('🚀 ~ GetBulkVendors ~ error:', ReqId, error); + } +} + +async function FetchVehicles({ SubscriptionID }) { + const access_token = await GetAuthToken(); + try { + //This doesn't seem to work as it is for production only. + const Vehicles = await axios.get(`https://api.fortellis.io/cdkdrive/service/v1/vehicles/`, { + headers: { Authorization: `Bearer ${access_token}`, 'Subscription-Id': SubscriptionID }, + }); + console.log('🚀 ~ FetchVehicles ~ Vehicles:', Vehicles); + + return Vehicles.data; + } catch (error) { + console.log('🚀 ~ FetchVehicles ~ error:', error); + } +} + +async function PostVehicleServiceHistory() { + const access_token = await GetAuthToken(); + const ReqId = uuid(); + const departmentIds = (await FetchSubscriptions()) + .find((s) => s.subscriptionId === SubscriptionID) //Get the subscription object. + ?.apiDmsInfo.find((info) => info.name === 'CDK Drive Async Vendors')?.departments; //Departments are categorized by API name and have an array of departments. + + //Need to get a vehicle ID from somewhere. + const vehicles = await FetchVehicles({ SubscriptionID }); + try { + //TODO: This is pointing towards the test environment. Need to carefully watch for the production switch. + const Vendors = await axios.post( + `https://api.fortellis.io/cdk-test/drive/post/service-vehicle-history-mgmt/v2/ + `, + { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionID, + 'Request-Id': ReqId, + 'Department-Id': departmentIds[0].id, + }, + }, + ); + } catch (error) { + console.log('🚀 ~ PostVehicleServiceHistory ~ error:', ReqId, error); + } +} + +//PostVehicleServiceHistory(); +//GetBulkVendors(); + +async function GetDepartmentId() { + const departmentIds = await FetchSubscriptions(); + console.log('🚀 ~ GetDepartmentId ~ departmentIds:', departmentIds); + const departmentIds2 = departmentIds + .find((s) => s.subscriptionId === SubscriptionID) //Get the subscription object. + ?.apiDmsInfo.find((info) => info.name === 'CDK Drive Async Vendors')?.departments; //Departments are categorized by API name and have an array of departments. + + return departmentIds[0].id; +} +//////////////////GL WIP Section ////////////////////// +async function OrgHelpers() { + console.log('Executing Org Helpers'); + const ReqId = uuid(); + const access_token = await GetAuthToken(); + const DepartmentId = await GetDepartmentId(); + + try { + //This doesn't seem to work as it is for production only. + const OrgHelpers = await axios.get( + `https://api.fortellis.io/cdk-test/drive/businessofficeglwippost/orgHelper`, + { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionID, + 'Request-Id': ReqId, + 'Department-Id': DepartmentId, + }, + }, + ); + console.log('🚀 ~ OrgHelpers ~ Data:', OrgHelpers); + + return OrgHelpers.data; + } catch (error) { + console.log('🚀 ~ OrgHelpers ~ error:', error); + } +} +async function JournalHelpers({ glCompanyNumber }) { + console.log('Executing Journal Helpers'); + const ReqId = uuid(); + const access_token = await GetAuthToken(); + const DepartmentId = await GetDepartmentId(); + + try { + //This doesn't seem to work as it is for production only. + const JournalHelpers = await axios.get( + `https://api.fortellis.io/cdk-test/drive/businessofficeglwippost/jrnlHelper/${glCompanyNumber}`, + { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionID, + 'Request-Id': ReqId, + 'Department-Id': DepartmentId, + }, + }, + ); + console.log('🚀 ~ JournalHelpers ~ Data:', JournalHelpers); + return JournalHelpers.data; + } catch (error) { + console.log('🚀 ~ JournalHelpers ~ error:', error); + } +} + +async function GlSalesChain() { + console.log('Executing GL Sales Chain'); + const ReqId = uuid(); + const access_token = await GetAuthToken(); + const DepartmentId = await GetDepartmentId(); + + try { + //This doesn't seem to work as it is for production only. + const GlSalesChain = await axios.get( + `https://api.fortellis.io/cdk-test/drive/businessofficeglwippost/glSalesChain`, + { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionID, + 'Request-Id': ReqId, + 'Department-Id': DepartmentId, + }, + }, + ); + console.log('🚀 ~ GlSalesChain ~ Data:', GlSalesChain); + return GlSalesChain.data; + } catch (error) { + console.log('🚀 ~ GlSalesChain ~ error:', error); + } +} +async function GlExpenseAllocation() { + console.log('Executing GL Expense Allocation'); + const ReqId = uuid(); + const access_token = await GetAuthToken(); + const DepartmentId = await GetDepartmentId(); + + try { + //This doesn't seem to work as it is for production only. + const GlExpenseAllocation = await axios.get( + `https://api.fortellis.io/cdk-test/drive/businessofficeglwippost/glExpenseAllocation`, + { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionID, + 'Request-Id': ReqId, + 'Department-Id': DepartmentId, + }, + }, + ); + console.log('🚀 ~ GlExpenseAllocation ~ Data:', GlExpenseAllocation); + return GlExpenseAllocation.data; + } catch (error) { + console.log('🚀 ~ GlSalesChain ~ error:', error); + } +} + +///EXEC FUNCTIONS +async function PostAccountsGLWIP() { + //const orgHelpers = await OrgHelpers(); + //const jrnlHelpers = await JournalHelpers({ glCompanyNumber: orgHelpers[0].coID }); + + //const glSalesChain = await GlSalesChain(); + const glExpenseAllocation = await GlExpenseAllocation(); +} + +//PostAccountsGLWIP(); + +async function GetCOA() { + console.log('Executing GetCOA'); + const ReqId = uuid(); + const access_token = await GetAuthToken(); + const DepartmentId = await GetDepartmentId(); + + try { + //This doesn't seem to work as it is for production only. + const GetCOA = await axios.get( + `https://api.fortellis.io/cdk-test/drive/chartofaccounts/v2/bulk`, + { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionID, + 'Request-Id': ReqId, + 'Department-Id': DepartmentId, + }, + }, + ); + console.log('🚀 ~ GetCOA ~ Data:', GetCOA); + return GetCOA.data; + } catch (error) { + console.log('🚀 ~ GetCOA ~ error:', error); + } +} +GetCOA(); diff --git a/fortellis.js b/fortellis.js index 129693f15..d5bcad4ba 100644 --- a/fortellis.js +++ b/fortellis.js @@ -1,19 +1,22 @@ -const path = require("path"); -const Dinero = require("dinero.js"); -const { gql } = require("graphql-request"); -const queries = require("./server/graphql-client/queries"); -const GraphQLClient = require("graphql-request").GraphQLClient; -const logger = require("./server/utils/logger"); -const AxiosLib = require("axios").default; +const path = require('path'); +const Dinero = require('dinero.js'); +const { gql } = require('graphql-request'); +const queries = require('./server/graphql-client/queries'); +const GraphQLClient = require('graphql-request').GraphQLClient; +const logger = require('./server/utils/logger'); +const { header } = require('./server/email/html'); +const { Transaction } = require('firebase-admin/firestore'); +const AxiosLib = require('axios').default; const axios = AxiosLib.create(); -const uuid = require("uuid").v4; +const uuid = require('uuid').v4; -const FORTELLIS_KEY = "X1FxzLyOk3kjHvMbzdPQXFZShkdbgzuo"; -const FORTELLIS_SECRET = "JPSAqenpF4CT2buD"; -const FORTELLIS_AUTH_URL = "https://identity.fortellis.io/oauth2/aus1p1ixy7YL8cMq02p7/v1/token"; -const FORTELLIS_URL = "https://api.fortellis.io"; -const SubscriptionID = "5b527d7d-baf3-40bc-adae-e7a541e37363"; -//const SubscriptionID = "cb59fa04-e53e-4b57-b071-80a48ebc346c"; +const FORTELLIS_KEY = 'X1FxzLyOk3kjHvMbzdPQXFZShkdbgzuo'; +const FORTELLIS_SECRET = '7Yvs0wpQeHcUS5r95ht8pqOaAvBq7dHV'; +const FORTELLIS_AUTH_URL = 'https://identity.fortellis.io/oauth2/aus1p1ixy7YL8cMq02p7/v1/token'; +const FORTELLIS_URL = 'https://api.fortellis.io'; +const ENVSubscriptionID = '5b527d7d-baf3-40bc-adae-e7a541e37363'; +let SubscriptionMeta = null; +//const ENVSubscriptionID = 'cb59fa04-e53e-4b57-b071-80a48ebc346c'; function sleep(time, callback) { var stop = new Date().getTime(); @@ -21,21 +24,23 @@ function sleep(time, callback) { callback(); } async function GetAuthToken() { + //Done with Authorization Code Flow + //https://docs.fortellis.io/docs/tutorials/solution-integration/authorization-code-flow/ const { - data: { access_token, expires_in, token_type } + data: { access_token, expires_in, token_type }, } = await axios.post( FORTELLIS_AUTH_URL, {}, { auth: { username: FORTELLIS_KEY, - password: FORTELLIS_SECRET + password: FORTELLIS_SECRET, }, params: { - grant_type: "client_credentials", - scope: "anonymous" - } - } + grant_type: 'client_credentials', + scope: 'anonymous', + }, + }, ); return access_token; } @@ -43,224 +48,143 @@ async function GetAuthToken() { async function FetchSubscriptions() { const access_token = await GetAuthToken(); try { - const subscriptions = await axios.get(`https://subscriptions.fortellis.io/v1/solution/subscriptions`, { - headers: { Authorization: `Bearer ${access_token}` } - }); - - return subscriptions.data.subscriptions; - } catch (error) { - console.log("🚀 ~ FetchSubscriptions ~ error:", error); - } -} -async function GetBulkVendors() { - const departmentIds = (await FetchSubscriptions()) - .find((s) => s.subscriptionId === SubscriptionID) //Get the subscription object. - ?.apiDmsInfo.find((info) => info.name === "CDK Drive Async Vendors")?.departments; //Departments are categorized by API name and have an array of departments. - - const access_token = await GetAuthToken(); - const ReqId = uuid(); - try { - //TODO: This is pointing towards the test environment. Need to carefully watch for the production switch. - const Vendors = await axios.get(`https://api.fortellis.io/cdk-test/drive/vendor/v2/bulk`, { - headers: { - Authorization: `Bearer ${access_token}`, - "Subscription-Id": SubscriptionID, - "Request-Id": ReqId, - "Department-Id": departmentIds[0].id - } - }); - - //Returns a long poll. Need to wait specified seconds until checking. - console.log("🚀 ~ GetBulkVendors ~ Vendors - waiting to execute callback:", Vendors.data.checkStatusAfterSeconds); - sleep(Vendors.data.checkStatusAfterSeconds * 1000, async () => { - const VendorsResult = await axios.get(Vendors.data._links.status.href, { - headers: { - Authorization: `Bearer ${access_token}`, - "Subscription-Id": SubscriptionID, - "Request-Id": ReqId, - "Department-Id": departmentIds[0].id - } - }); - - //This may have to check again if it isn't ready. - const VendorsResult2 = await axios.get(VendorsResult.data._links.result.href, { - headers: { - Authorization: `Bearer ${access_token}`, - "Subscription-Id": SubscriptionID, - "Request-Id": ReqId, - "Department-Id": departmentIds[0].id - } - }); - console.log("🚀 ~ sleep ~ VendorsResult2:", VendorsResult2); - }); - - console.log("🚀 ~ GetBulkVendors ~ Vendors:", ReqId, Vendors.data); - } catch (error) { - console.log("🚀 ~ GetBulkVendors ~ error:", ReqId, error); - } -} - -async function FetchVehicles({ SubscriptionID }) { - const access_token = await GetAuthToken(); - try { - //This doesn't seem to work as it is for production only. - const Vehicles = await axios.get(`https://api.fortellis.io/cdkdrive/service/v1/vehicles/`, { - headers: { Authorization: `Bearer ${access_token}`, "Subscription-Id": SubscriptionID } - }); - console.log("🚀 ~ FetchVehicles ~ Vehicles:", Vehicles); - - return Vehicles.data; - } catch (error) { - console.log("🚀 ~ FetchVehicles ~ error:", error); - } -} - -async function PostVehicleServiceHistory() { - const access_token = await GetAuthToken(); - const ReqId = uuid(); - const departmentIds = (await FetchSubscriptions()) - .find((s) => s.subscriptionId === SubscriptionID) //Get the subscription object. - ?.apiDmsInfo.find((info) => info.name === "CDK Drive Async Vendors")?.departments; //Departments are categorized by API name and have an array of departments. - - //Need to get a vehicle ID from somewhere. - const vehicles = await FetchVehicles({ SubscriptionID }); - try { - //TODO: This is pointing towards the test environment. Need to carefully watch for the production switch. - const Vendors = await axios.post( - `https://api.fortellis.io/cdk-test/drive/post/service-vehicle-history-mgmt/v2/ - `, + const subscriptions = await axios.get( + `https://subscriptions.fortellis.io/v1/solution/subscriptions`, { - headers: { - Authorization: `Bearer ${access_token}`, - "Subscription-Id": SubscriptionID, - "Request-Id": ReqId, - "Department-Id": departmentIds[0].id - } - } + headers: { Authorization: `Bearer ${access_token}` }, + }, ); + SubscriptionMeta = subscriptions.data.subscriptions.find( + (s) => s.subscriptionId === ENVSubscriptionID, + ); + return SubscriptionMeta; } catch (error) { - console.log("🚀 ~ PostVehicleServiceHistory ~ error:", ReqId, error); + console.log('🚀 ~ FetchSubscriptions ~ error:', error); } } -//PostVehicleServiceHistory(); -//GetBulkVendors(); +async function GetDepartmentId({ apiName, debug = false }) { + if (debug) { + console.log('API Names & Departments '); + console.log('==========='); + console.log( + JSON.stringify( + SubscriptionMeta.apiDmsInfo.map((a) => ({ + name: a.name, + departments: a.departments.map((d) => d.id), + })), + null, + 4, + ), + ); + console.log('==========='); + } + const departmentIds2 = SubscriptionMeta.apiDmsInfo //Get the subscription object. + .find((info) => info.name === apiName)?.departments; //Departments are categorized by API name and have an array of departments. -async function GetDepartmentId() { - const departmentIds = (await FetchSubscriptions()) - .find((s) => s.subscriptionId === SubscriptionID) //Get the subscription object. - ?.apiDmsInfo.find((info) => info.name === "CDK Drive Async Vendors")?.departments; //Departments are categorized by API name and have an array of departments. - - return departmentIds[0].id; + return departmentIds2[0].id; } -//////////////////GL WIP Section ////////////////////// -async function OrgHelpers() { - console.log("Executing Org Helpers"); + +async function MakeFortellisCall({ + apiName, + url, + headers = {}, + body = {}, + type = 'post', + debug = false, +}) { + if (debug) console.log(`Executing ${type} to ${url}`); const ReqId = uuid(); const access_token = await GetAuthToken(); - const DepartmentId = await GetDepartmentId(); + const DepartmentId = await GetDepartmentId({ apiName, debug }); - try { - //This doesn't seem to work as it is for production only. - const OrgHelpers = await axios.get(`https://api.fortellis.io/cdk-test/drive/businessofficeglwippost/orgHelper`, { - headers: { - Authorization: `Bearer ${access_token}`, - "Subscription-Id": SubscriptionID, - "Request-Id": ReqId, - "Department-Id": DepartmentId - } - }); - console.log("🚀 ~ OrgHelpers ~ Data:", OrgHelpers); - - return OrgHelpers.data; - } catch (error) { - console.log("🚀 ~ OrgHelpers ~ error:", error); - } -} -async function JournalHelpers({ glCompanyNumber }) { - console.log("Executing Journal Helpers"); - const ReqId = uuid(); - const access_token = await GetAuthToken(); - const DepartmentId = await GetDepartmentId(); - - try { - //This doesn't seem to work as it is for production only. - const JournalHelpers = await axios.get( - `https://api.fortellis.io/cdk-test/drive/businessofficeglwippost/jrnlHelper/${glCompanyNumber}`, - { - headers: { - Authorization: `Bearer ${access_token}`, - "Subscription-Id": SubscriptionID, - "Request-Id": ReqId, - "Department-Id": DepartmentId - } - } + if (debug) { + console.log( + `ReqID: ${ReqId} | SubscriptionID: ${SubscriptionMeta.subscriptionId} | DepartmentId: ${DepartmentId}`, ); - console.log("🚀 ~ JournalHelpers ~ Data:", JournalHelpers); - return JournalHelpers.data; - } catch (error) { - console.log("🚀 ~ JournalHelpers ~ error:", error); + console.log(`Body Contents: ${JSON.stringify(body, null, 4)}`); } -} - -async function GlSalesChain() { - console.log("Executing GL Sales Chain"); - const ReqId = uuid(); - const access_token = await GetAuthToken(); - const DepartmentId = await GetDepartmentId(); try { - //This doesn't seem to work as it is for production only. - const GlSalesChain = await axios.get( - `https://api.fortellis.io/cdk-test/drive/businessofficeglwippost/glSalesChain`, - { - headers: { - Authorization: `Bearer ${access_token}`, - "Subscription-Id": SubscriptionID, - "Request-Id": ReqId, - "Department-Id": DepartmentId - } - } - ); - console.log("🚀 ~ GlSalesChain ~ Data:", GlSalesChain); - return GlSalesChain.data; - } catch (error) { - console.log("🚀 ~ GlSalesChain ~ error:", error); - } -} -async function GlExpenseAllocation() { - console.log("Executing GL Expense Allocation"); - const ReqId = uuid(); - const access_token = await GetAuthToken(); - const DepartmentId = await GetDepartmentId(); + let result; + switch (type) { + case 'post': + default: + result = await axios.post(url, body, { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionMeta.subscriptionId, + 'Request-Id': ReqId, + 'Department-Id': DepartmentId, + ...headers, + }, + }); + break; + case 'get': + result = await axios.get(url, { + headers: { + Authorization: `Bearer ${access_token}`, + 'Subscription-Id': SubscriptionMeta.subscriptionId, + 'Request-Id': ReqId, + 'Department-Id': DepartmentId, + ...headers, + }, + }); + break; + } - try { - //This doesn't seem to work as it is for production only. - const GlExpenseAllocation = await axios.get( - `https://api.fortellis.io/cdk-test/drive/businessofficeglwippost/glExpenseAllocation`, - { - headers: { - Authorization: `Bearer ${access_token}`, - "Subscription-Id": SubscriptionID, - "Request-Id": ReqId, - "Department-Id": DepartmentId - } - } - ); - console.log("🚀 ~ GlExpenseAllocation ~ Data:", GlExpenseAllocation); - return GlExpenseAllocation.data; + if (debug) { + console.log(`ReqID: ${ReqId} Data`); + console.log(JSON.stringify(result.data, null, 4)); + } + return result.data; } catch (error) { - console.log("🚀 ~ GlSalesChain ~ error:", error); + console.log(`ReqID: ${ReqId} Error`, error.response?.data); + console.log(`ReqID: ${ReqId} Full Error`, JSON.stringify(error, null, 4)); } } -///EXEC FUNCTIONS -async function PostAccountsGLWIP() { - //const orgHelpers = await OrgHelpers(); - //const jrnlHelpers = await JournalHelpers({ glCompanyNumber: orgHelpers[0].coID }); - - //const glSalesChain = await GlSalesChain(); - const glExpenseAllocation = await GlExpenseAllocation(); +async function GetCOA() { + console.log('Executing GetCOA'); + await MakeFortellisCall({ + debug: true, + type: 'get', + url: `https://api.fortellis.io/cdk-test/drive/chartofaccounts/v2/bulk`, + }); } -PostAccountsGLWIP(); +async function StartWIP() { + const TransactionWip = MakeFortellisCall({ + url: 'https://api.fortellis.io/cdk-test/drive/glpost/startWIP', + body: { + acctgDate: '2023-09-26', //job.invoice + desc: 'TEST TRANSACTION', + docType: '3', //pulled from Doc Type workbook + m13Flag: '0', // Is this a M13 entry. Presumanbly always 0 + refer: 'RO12345', //Supposed to be a doc reference number. Presumably the RO? + srcCo: '1', + srcJrnl: '75', + userID: 'csr', //bodyshop user + userName: 'PROGRAM, PARTNER*ADP', //Can leave blank to have this return to default. + }, + debug: true, + }); + + return TransactionWip; +} + +async function DoTheThings() { + await FetchSubscriptions(); + //What do we have access to? + // console.log('Sub Access : ', SubscriptionMeta.apiDmsInfo.map((i) => i.name).join(', ')); + //await GetCOA(); + await MakeFortellisCall({ + type: 'get', + debug: true, + apiName: 'CDK Drive Post Accounts GL WIP', + url: 'https://api.fortellis.io/cdk-test/drive/glwippost/orgHelper', + }); + //await StartWIP(); +} + +DoTheThings();