@@ -4,6 +4,7 @@ import type {
44 QuickBooksCreateDepositParams ,
55 QuickBooksCreateJournalEntryParams ,
66 QuickBooksDepositLineInput ,
7+ QuickBooksGlobalTaxCalculation ,
78 QuickBooksJournalEntityType ,
89 QuickBooksJournalLineInput ,
910 QuickBooksJournalPostingType ,
@@ -13,6 +14,8 @@ import type {
1314import {
1415 assertQuickBooksSparseUpdate ,
1516 optionalQuickBooksString ,
17+ quickBooksCurrencyRef ,
18+ quickBooksGlobalTaxCalculation ,
1619 quickBooksReference ,
1720 requiredQuickBooksString ,
1821 validateQuickBooksDate ,
@@ -29,6 +32,16 @@ const JOURNAL_LINE_KEYS = new Set([
2932] )
3033const DEPOSIT_LINE_KEYS = new Set ( [ 'amount' , 'accountId' , 'description' ] )
3134
35+ /**
36+ * JournalEntry is the one entity in this module whose `GlobalTaxCalculation`
37+ * Intuit documents without `NotApplicable`: "Allowed values are: TaxExcluded,
38+ * TaxInclusive."
39+ */
40+ const JOURNAL_ENTRY_GLOBAL_TAX_CALCULATIONS : readonly QuickBooksGlobalTaxCalculation [ ] = [
41+ 'TaxExcluded' ,
42+ 'TaxInclusive' ,
43+ ]
44+
3245function parseJsonArray ( value : unknown , fieldName : string ) : unknown [ ] | undefined {
3346 if ( value == null || value === '' ) return undefined
3447 let parsed = value
@@ -241,11 +254,13 @@ export function buildQuickBooksDepositLines(lines: QuickBooksDepositLineInput[])
241254}
242255
243256function transactionHeader ( params : {
257+ currencyCode ?: string
244258 transactionDate ?: string
245259 documentNumber ?: string
246260 privateNote ?: string
247261} ) : Record < string , unknown > {
248262 return filterUndefined ( {
263+ CurrencyRef : quickBooksCurrencyRef ( params . currencyCode ) ,
249264 TxnDate : validateQuickBooksDate ( params . transactionDate , 'transactionDate' ) ,
250265 DocNumber : optionalQuickBooksString ( params . documentNumber ) ,
251266 PrivateNote : optionalQuickBooksString ( params . privateNote ) ,
@@ -262,10 +277,14 @@ export function buildQuickBooksCreateJournalEntryBody(
262277 params : QuickBooksCreateJournalEntryParams
263278) : Record < string , unknown > {
264279 requirePostingConfirmation ( params . confirmPosting )
265- return {
280+ return filterUndefined ( {
266281 ...transactionHeader ( params ) ,
282+ GlobalTaxCalculation : quickBooksGlobalTaxCalculation (
283+ params . globalTaxCalculation ,
284+ JOURNAL_ENTRY_GLOBAL_TAX_CALCULATIONS
285+ ) ,
267286 Line : buildQuickBooksJournalLines ( params . lines ) ,
268- }
287+ } )
269288}
270289
271290export function buildQuickBooksUpdateJournalEntryBody (
@@ -285,23 +304,31 @@ export function buildQuickBooksUpdateJournalEntryBody(
285304export function buildQuickBooksCreateDepositBody (
286305 params : QuickBooksCreateDepositParams
287306) : Record < string , unknown > {
288- return {
307+ return filterUndefined ( {
289308 DepositToAccountRef : quickBooksReference ( params . depositAccountId , 'depositAccountId' ) ,
290309 ...transactionHeader ( params ) ,
310+ GlobalTaxCalculation : quickBooksGlobalTaxCalculation ( params . globalTaxCalculation ) ,
291311 Line : buildQuickBooksDepositLines ( params . lines ) ,
292- }
312+ } )
293313}
294314
315+ /**
316+ * Intuit documents the Deposit sparse update as "only elements specified in the
317+ * request are updated. Missing elements are left untouched", so
318+ * `DepositToAccountRef` is sent only when the caller is actually changing it.
319+ */
295320export function buildQuickBooksUpdateDepositBody (
296321 params : QuickBooksUpdateDepositParams
297322) : Record < string , unknown > {
298- const body = {
323+ const body = filterUndefined ( {
299324 Id : requiredQuickBooksString ( params . depositId , 'depositId' ) ,
300325 SyncToken : requiredQuickBooksString ( params . syncToken , 'syncToken' ) ,
301326 sparse : true ,
302- DepositToAccountRef : quickBooksReference ( params . depositAccountId , 'depositAccountId' ) ,
327+ DepositToAccountRef : params . depositAccountId
328+ ? quickBooksReference ( params . depositAccountId , 'depositAccountId' )
329+ : undefined ,
303330 ...transactionHeader ( params ) ,
304- }
305- assertQuickBooksSparseUpdate ( body , 4 )
331+ } ) as Record < string , unknown >
332+ assertQuickBooksSparseUpdate ( body )
306333 return body
307334}
0 commit comments