From d74598c877fef2d908486794a9b25857d96524cc Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Tue, 18 Apr 2023 10:59:28 -0400 Subject: [PATCH] filter diamond invoices by trial balance code --- data/config.cemetery.ssm.js | 2 +- data/config.cemetery.ssm.ts | 2 +- helpers/functions.config.d.ts | 1 + helpers/functions.config.js | 1 + helpers/functions.config.ts | 5 +++ helpers/functions.dynamicsGP.js | 33 ++++++++++++++++++++ helpers/functions.dynamicsGP.ts | 55 +++++++++++++++++++++++++++++++-- types/configTypes.d.ts | 3 +- types/configTypes.ts | 4 ++- 9 files changed, 100 insertions(+), 6 deletions(-) diff --git a/data/config.cemetery.ssm.js b/data/config.cemetery.ssm.js index 7420457d..0e8e8c16 100644 --- a/data/config.cemetery.ssm.js +++ b/data/config.cemetery.ssm.js @@ -60,6 +60,6 @@ config.settings.workOrders.workOrderMilestoneDateRecentBeforeDays = 7; config.settings.workOrders.workOrderMilestoneDateRecentAfterDays = 30; config.settings.dynamicsGP = { integrationIsEnabled: true, - lookupOrder: ['diamond/cashReceipt', 'invoice'] + lookupOrder: ['diamond/cashReceipt', 'diamond/extendedInvoice'] }; export default config; diff --git a/data/config.cemetery.ssm.ts b/data/config.cemetery.ssm.ts index bb406830..24b39a8e 100644 --- a/data/config.cemetery.ssm.ts +++ b/data/config.cemetery.ssm.ts @@ -83,7 +83,7 @@ config.settings.workOrders.workOrderMilestoneDateRecentAfterDays = 30 config.settings.dynamicsGP = { integrationIsEnabled: true, - lookupOrder: ['diamond/cashReceipt', 'invoice'] + lookupOrder: ['diamond/cashReceipt', 'diamond/extendedInvoice'] } export default config diff --git a/helpers/functions.config.d.ts b/helpers/functions.config.d.ts index 6a703fe1..0986bf62 100644 --- a/helpers/functions.config.d.ts +++ b/helpers/functions.config.d.ts @@ -54,4 +54,5 @@ export declare function getProperty(propertyName: 'settings.dynamicsGP.mssqlConf export declare function getProperty(propertyName: 'settings.dynamicsGP.lookupOrder'): configTypes.DynamicsGPLookup[]; export declare function getProperty(propertyName: 'settings.dynamicsGP.accountCodes'): string[]; export declare function getProperty(propertyName: 'settings.dynamicsGP.itemNumbers'): string[]; +export declare function getProperty(propertyName: 'settings.dynamicsGP.trialBalanceCodes'): string[]; export declare const keepAliveMillis: number; diff --git a/helpers/functions.config.js b/helpers/functions.config.js index fc88bb77..615d5a07 100644 --- a/helpers/functions.config.js +++ b/helpers/functions.config.js @@ -54,6 +54,7 @@ configFallbackValues.set('settings.dynamicsGP.integrationIsEnabled', false); configFallbackValues.set('settings.dynamicsGP.lookupOrder', ['invoice']); configFallbackValues.set('settings.dynamicsGP.accountCodes', []); configFallbackValues.set('settings.dynamicsGP.itemNumbers', []); +configFallbackValues.set('settings.dynamicsGP.trialBalanceCodes', []); export function getProperty(propertyName) { const propertyNameSplit = propertyName.split('.'); let currentObject = config; diff --git a/helpers/functions.config.ts b/helpers/functions.config.ts index b5e64725..c568d3c6 100644 --- a/helpers/functions.config.ts +++ b/helpers/functions.config.ts @@ -101,6 +101,7 @@ configFallbackValues.set('settings.dynamicsGP.integrationIsEnabled', false) configFallbackValues.set('settings.dynamicsGP.lookupOrder', ['invoice']) configFallbackValues.set('settings.dynamicsGP.accountCodes', []) configFallbackValues.set('settings.dynamicsGP.itemNumbers', []) +configFallbackValues.set('settings.dynamicsGP.trialBalanceCodes', []) /* * Set up function overloads @@ -239,6 +240,10 @@ export function getProperty( propertyName: 'settings.dynamicsGP.itemNumbers' ): string[] +export function getProperty( + propertyName: 'settings.dynamicsGP.trialBalanceCodes' +): string[] + export function getProperty(propertyName: string): unknown { const propertyNameSplit = propertyName.split('.') diff --git a/helpers/functions.dynamicsGP.js b/helpers/functions.dynamicsGP.js index 73f9df31..bd22bbbf 100644 --- a/helpers/functions.dynamicsGP.js +++ b/helpers/functions.dynamicsGP.js @@ -34,6 +34,17 @@ function filterInvoice(invoice) { } return invoice; } +function filterExtendedInvoice(invoice) { + if (filterInvoice(invoice) === undefined) { + return undefined; + } + const trialBalanceCodes = configFunctions.getProperty('settings.dynamicsGP.trialBalanceCodes'); + if (trialBalanceCodes.length > 0 && + trialBalanceCodes.includes(invoice.trialBalanceCode ?? '')) { + return invoice; + } + return undefined; +} async function _getDynamicsGPDocument(documentNumber, lookupType) { let document; switch (lookupType) { @@ -78,6 +89,28 @@ async function _getDynamicsGPDocument(documentNumber, lookupType) { documentTotal: receipt.total }; } + break; + } + case 'diamond/extendedInvoice': { + let invoice = await diamond.getDiamondExtendedGPInvoice(documentNumber); + if (invoice !== undefined) { + invoice = filterExtendedInvoice(invoice); + } + if (invoice !== undefined) { + document = { + documentType: 'Invoice', + documentNumber: invoice.invoiceNumber, + documentDate: invoice.documentDate, + documentDescription: [ + invoice.comment1, + invoice.comment2, + invoice.comment3, + invoice.comment4 + ], + documentTotal: invoice.documentAmount + }; + } + break; } } return document; diff --git a/helpers/functions.dynamicsGP.ts b/helpers/functions.dynamicsGP.ts index 678c4589..b901be70 100644 --- a/helpers/functions.dynamicsGP.ts +++ b/helpers/functions.dynamicsGP.ts @@ -8,8 +8,12 @@ import * as configFunctions from './functions.config.js' import type { DynamicsGPLookup } from '../types/configTypes' import type { DynamicsGPDocument } from '../types/recordTypes.js' -import { type DiamondCashReceipt } from '@cityssm/dynamics-gp/diamond/types.js' -import { type GPInvoice } from '@cityssm/dynamics-gp/gp/types.js' +import type { + DiamondExtendedGPInvoice, + DiamondCashReceipt +} from '@cityssm/dynamics-gp/diamond/types' + +import type { GPInvoice } from '@cityssm/dynamics-gp/gp/types' if (configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled')) { gp.setMSSQLConfig( @@ -64,6 +68,27 @@ function filterInvoice(invoice: GPInvoice): GPInvoice | undefined { return invoice } +function filterExtendedInvoice( + invoice: DiamondExtendedGPInvoice +): DiamondExtendedGPInvoice | undefined { + if (filterInvoice(invoice) === undefined) { + return undefined + } + + const trialBalanceCodes = configFunctions.getProperty( + 'settings.dynamicsGP.trialBalanceCodes' + ) + + if ( + trialBalanceCodes.length > 0 && + trialBalanceCodes.includes(invoice.trialBalanceCode ?? '') + ) { + return invoice + } + + return undefined +} + async function _getDynamicsGPDocument( documentNumber: string, lookupType: DynamicsGPLookup @@ -118,6 +143,32 @@ async function _getDynamicsGPDocument( documentTotal: receipt.total } } + + break + } + case 'diamond/extendedInvoice': { + let invoice = await diamond.getDiamondExtendedGPInvoice(documentNumber) + + if (invoice !== undefined) { + invoice = filterExtendedInvoice(invoice) + } + + if (invoice !== undefined) { + document = { + documentType: 'Invoice', + documentNumber: invoice.invoiceNumber, + documentDate: invoice.documentDate, + documentDescription: [ + invoice.comment1, + invoice.comment2, + invoice.comment3, + invoice.comment4 + ], + documentTotal: invoice.documentAmount + } + } + + break } } diff --git a/types/configTypes.d.ts b/types/configTypes.d.ts index 7dbd8329..77472da4 100644 --- a/types/configTypes.d.ts +++ b/types/configTypes.d.ts @@ -67,10 +67,11 @@ export interface Config { lookupOrder?: DynamicsGPLookup[]; accountCodes?: string[]; itemNumbers?: string[]; + trialBalanceCodes?: string[]; }; }; } -export type DynamicsGPLookup = 'diamond/cashReceipt' | 'invoice'; +export type DynamicsGPLookup = 'diamond/cashReceipt' | 'diamond/extendedInvoice' | 'invoice'; interface ConfigApplication { applicationName?: string; backgroundURL?: string; diff --git a/types/configTypes.ts b/types/configTypes.ts index 65b8ab17..c5377587 100644 --- a/types/configTypes.ts +++ b/types/configTypes.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line node/no-extraneous-import import type { config as MSSQLConfig } from 'mssql' export interface Config { @@ -68,11 +69,12 @@ export interface Config { lookupOrder?: DynamicsGPLookup[] accountCodes?: string[] itemNumbers?: string[] + trialBalanceCodes?: string[] } } } -export type DynamicsGPLookup = 'diamond/cashReceipt' | 'invoice' +export type DynamicsGPLookup = 'diamond/cashReceipt' | 'diamond/extendedInvoice' | 'invoice' interface ConfigApplication { applicationName?: string