ilMerge | input | logical | We have to consider 2 modes (logical input parameter ?ilMerge Yes/No): ? Retrieve lines from ExpNoteCInvoice only (e. g. the activity View). ? Retreive all open advances + retrieve lines from ExpNoteCInvoice and merge them together (e. g. Modify). |
iiExpenseNote_ID | input | integer | |
icEmployeeCode | input | character | |
tAdvances | output | temp-table | |
oiReturnStatus | output | integer | Return status of the method. |
empty temp-table tAdvances. if icEmployeeCode = "":U or icEmployeeCode = ? or icEmployeeCode = "?":U then return. if ilMerge then do: /* get employee's creditor */ <Q-1 run EmployeeLinkedToCreditorByUser (all) (Read) (NoCache) (input viCompanyId, (CompanyId) input ?, (Usr_ID) input ?, (EmployeeIsExternal) input ?, (EmployeeIsActiveExpNote) input ?, (EmployeeIsActive) input ?, (EmployeeCode) output dataset tqEmployeeLinkedToCreditorByUser) in BEmployee > find first tqEmployeeLinkedToCreditorByUser where tqEmployeeLinkedToCreditorByUser.tcEmployeeCode = icEmployeeCode no-error. if not available tqEmployeeLinkedToCreditorByUser then do: assign vcMessage = subst(#T-15'Employee code '&1' is invalid or no supplier is linked to it.':200(1900)T-15#, icEmployeeCode). <M-2 run SetMessage (input vcMessage (icMessage), input ? (icArguments), input ? (icFieldName), input ? (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'QADFIN-2425':U (icFcMsgNumber), input '' (icFcExplanation), input '' (icFcIdentification), input '' (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BExpenseNote> assign oiReturnStatus = -1. return. end. /* all prepayment invoices with open balance and type prepayment */ <Q-3 run CInvoiceByCreditor (all) (Read) (NoCache) (input viCompanyId, (CompanyId) input tqEmployeeLinkedToCreditorByUser.tiCreditor_ID, (Creditor_ID) input {&INVOICETYPE-PREPAYMENT}, (CInvoiceType) input true, (CInvoiceIsOpen) input ?, (CInvoice_ID) output dataset tqCInvoiceByCreditor) in BCInvoice > for each tqCInvoiceByCreditor: if tqCInvoiceByCreditor.tdCInvoiceBalanceDebitTC - tqCInvoiceByCreditor.tdCInvoiceBalanceCreditTC <= 0 then next. if tqCInvoiceByCreditor.tlCInvoiceIsSelected then do: /* skip the invoices that are selected but not used in ExpNotes; * it means that they are used in another module (f.e. PaymentSelection) already */ <Q-14 assign vlFcQueryRecordsAvailable = ExpNoteCInvoiceByCInvoice (NoCache) (input tqCInvoiceByCreditor.tiCInvoice_ID, (CInvoice_ID) input {&EXPENSENOTESTATUS-CONFIRMED}, (ExpNoteCInvoiceStatusCode) input viCompanyId, (CompanyId)) in BExpenseNote > if not vlFcQueryRecordsAvailable then next. end. find first tExpNoteCInvoice where tExpNoteCInvoice.ExpNote_ID = iiExpenseNote_ID and tExpNoteCInvoice.CInvoice_ID = tqCInvoiceByCreditor.tiCInvoice_ID no-error. if not available tExpNoteCInvoice then do: find first tExpNote where tExpNote.ExpNote_ID = iiExpenseNote_ID no-error. if not available tExpNote then do: assign vcMessage = subst(#T-16'An invalid expense note ID (&1) was passed to the Refresh Advances method.':150(1901)T-16#, iiExpenseNote_ID). <M-5 run SetMessage (input vcMessage (icMessage), input ? (icArguments), input ? (icFieldName), input ? (icFieldValue), input 'S':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'QADFIN-2426':U (icFcMsgNumber), input '' (icFcExplanation), input '' (icFcIdentification), input '' (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BExpenseNote> assign oiReturnStatus = -1. return. end. <M-4 run AddDetailLine (input 'ExpNoteCInvoice':U (icTable), input tExpNote.tc_Rowid (icParentRowid), output viFcReturnSuper (oiReturnStatus)) in BExpenseNote> if viFcReturnSuper < 0 then do: assign oiReturnStatus = viFcReturnSuper. return. end. assign tExpNoteCInvoice.CInvoice_ID = tqCInvoiceByCreditor.tiCInvoice_ID tExpNoteCInvoice.ExpNoteCInvoiceIsReturned = false tExpNoteCInvoice.ExpNoteCInvoiceDeductTC = 0 tExpNoteCInvoice.ExpNoteCInvoiceDeductLC = 0 tExpNoteCInvoice.ExpNoteCInvoiceToReturnTC = 0. create tAdvances. assign tAdvances.tiCInvoice_ID = tqCInvoiceByCreditor.tiCInvoice_ID tAdvances.tiExpNote_ID = iiExpenseNote_ID tAdvances.tcAdvanceCurrencyCode = tqCInvoiceByCreditor.tcCurrencyCode tAdvances.tiCurrency_ID = tqCInvoiceByCreditor.tiCInvoiceCurrency_ID tAdvances.tcAdvanceDescription = tqCInvoiceByCreditor.tcCInvoiceDescription tAdvances.tcAdvanceJournal = tqCInvoiceByCreditor.tcJournalCode tAdvances.tcAdvanceReference = tqCInvoiceByCreditor.tcCInvoiceReference tAdvances.tdOnExpNoteTC = 0 /* tExpNoteCInvoice.ExpNoteCInvoiceDeductTC */ tAdvances.tdOpenBalanceLC = tqCInvoiceByCreditor.tdCInvoiceBalanceDebitLC - tqCInvoiceByCreditor.tdCInvoiceBalanceCreditLC tAdvances.tdOpenBalanceTC = tqCInvoiceByCreditor.tdCInvoiceBalanceDebitTC - tqCInvoiceByCreditor.tdCInvoiceBalanceCreditTC tAdvances.tdToReturnTC = tExpNoteCInvoice.ExpNoteCInvoiceToReturnTC tAdvances.tdUnexplainedTC = 0 tAdvances.tiAdvanceVoucher = tqCInvoiceByCreditor.tiCInvoiceVoucher tAdvances.tiAdvanceYear = tqCInvoiceByCreditor.tiPeriodYear tAdvances.tlAdvanceReturnRest = tExpNoteCInvoice.ExpNoteCInvoiceIsReturned tAdvances.ttAdvanceDate = tqCInvoiceByCreditor.ttCInvoiceDate tAdvances.tdAdvanceExchangeRateTCLC = tqCInvoiceByCreditor.tdCInvoiceExchangeRate tAdvances.tdAdvanceExchangeRateScaleTCLC = tqCInvoiceByCreditor.tdCInvoiceRateScale. end. /* if not available tExpNoteCInvoice */ else do: if (tqCInvoiceByCreditor.tdCInvoiceBalanceDebitTC - tqCInvoiceByCreditor.tdCInvoiceBalanceCreditTC) < (tExpNoteCInvoice.ExpNoteCInvoiceDeductTC + tExpNoteCInvoice.ExpNoteCInvoiceToReturnTC) then do: assign tExpNoteCInvoice.ExpNoteCInvoiceIsReturned = false tExpNoteCInvoice.ExpNoteCInvoiceDeductTC = 0 tExpNoteCInvoice.ExpNoteCInvoiceDeductLC = 0 tExpNoteCInvoice.ExpNoteCInvoiceToReturnTC = 0 tExpNoteCInvoice.tc_Status = if tExpNoteCInvoice.tc_Status = "":U then "C":U else tExpNoteCInvoice.tc_Status. end. end. /* else - if not available tExpNoteCInvoice */ end. /* for each tqCInvoiceByCreditor */ end. /* if ilMerge */ if iiExpenseNote_ID = ? or iiExpenseNote_ID = 0 then return. assign vlQueryStarted = false. for each tExpNoteCInvoice where tExpNoteCInvoice.ExpNote_ID = iiExpenseNote_ID: if tExpNoteCInvoice.tc_Status = "D":U then next. if not vlQueryStarted then do: <Q-9 run CInvoiceByCreditor (Start) in BCInvoice > assign vlQueryStarted = true. end. <Q-6 run CInvoiceByCreditor (all) (Read) (NoCache) (input viCompanyId, (CompanyId) input ?, (Creditor_ID) input ?, (CInvoiceType) input ?, (CInvoiceIsOpen) input tExpNoteCInvoice.CInvoice_ID, (CInvoice_ID) output dataset tqCInvoiceByCreditor) in BCInvoice > find first tqCInvoiceByCreditor no-error. if not available tqCInvoiceByCreditor then do: assign vcMessage = subst(#T-17'The linked supplier invoice (&1) could not be found.':200(1902)T-17#, string(tExpNoteCInvoice.CInvoice_ID)). <M-10 run SetMessage (input vcMessage (icMessage), input ? (icArguments), input ? (icFieldName), input ? (icFieldValue), input 'D':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'QADFIN-2453':U (icFcMsgNumber), input '' (icFcExplanation), input '' (icFcIdentification), input '' (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BExpenseNote> assign oiReturnStatus = -1. return. end. if not tqCInvoiceByCreditor.tlCInvoiceIsOpen then do: /* delete the CInvoice link if the CInvoice is already closed */ if tExpNoteCInvoice.tc_Status = "N":U then assign tExpNoteCInvoice.tc_Status = "":U. else assign tExpNoteCInvoice.tc_Status = "D":U. end. else do: if not can-find(first tAdvances where tAdvances.tiCInvoice_ID = tqCInvoiceByCreditor.tiCInvoice_ID) then do: create tAdvances. assign tAdvances.tiCInvoice_ID = tqCInvoiceByCreditor.tiCInvoice_ID tAdvances.tiExpNote_ID = iiExpenseNote_ID tAdvances.tcAdvanceCurrencyCode = tqCInvoiceByCreditor.tcCurrencyCode tAdvances.tiCurrency_ID = tqCInvoiceByCreditor.tiCInvoiceCurrency_ID tAdvances.tcAdvanceDescription = tqCInvoiceByCreditor.tcCInvoiceDescription tAdvances.tcAdvanceJournal = tqCInvoiceByCreditor.tcJournalCode tAdvances.tcAdvanceReference = tqCInvoiceByCreditor.tcCInvoiceReference tAdvances.tdOnExpNoteTC = if ilMerge then 0 else tExpNoteCInvoice.ExpNoteCInvoiceDeductTC tAdvances.tdOpenBalanceLC = tqCInvoiceByCreditor.tdCInvoiceBalanceDebitLC - tqCInvoiceByCreditor.tdCInvoiceBalanceCreditLC tAdvances.tdOpenBalanceTC = tqCInvoiceByCreditor.tdCInvoiceBalanceDebitTC - tqCInvoiceByCreditor.tdCInvoiceBalanceCreditTC tAdvances.tdToReturnTC = tExpNoteCInvoice.ExpNoteCInvoiceToReturnTC tAdvances.tdUnexplainedTC = 0 tAdvances.tiAdvanceVoucher = tqCInvoiceByCreditor.tiCInvoiceVoucher tAdvances.tiAdvanceYear = tqCInvoiceByCreditor.tiPeriodYear tAdvances.tlAdvanceReturnRest = tExpNoteCInvoice.ExpNoteCInvoiceIsReturned tAdvances.ttAdvanceDate = tqCInvoiceByCreditor.ttCInvoiceDate tAdvances.tdAdvanceExchangeRateTCLC = tqCInvoiceByCreditor.tdCInvoiceExchangeRate tAdvances.tdAdvanceExchangeRateScaleTCLC = tqCInvoiceByCreditor.tdCInvoiceRateScale. end. end. end. /* for each tExpNoteCInvoice where tExpNoteCInvoice.ExpNote_ID = iiExpenseNote_ID */ if vlQueryStarted then do: <Q-8 run CInvoiceByCreditor (Stop) in BCInvoice > end. /* adjust the open balance - subtract the already confirmed expense notes */ if can-find(first tAdvances) then do: <Q-12 run ExpNoteCInvoiceByCInvoice (Start) in BExpenseNote > assign vlQueryStarted = true. end. else assign vlQueryStarted = false. for each tAdvances: <Q-11 run ExpNoteCInvoiceByCInvoice (all) (Read) (NoCache) (input tAdvances.tiCInvoice_ID, (CInvoice_ID) input {&EXPENSENOTESTATUS-CONFIRMED}, (ExpNoteCInvoiceStatusCode) input viCompanyId, (CompanyId) output dataset tqExpNoteCInvoiceByCInvoice) in BExpenseNote > for each tqExpNoteCInvoiceByCInvoice where tqExpNoteCInvoiceByCInvoice.tiExpNote_ID <> tAdvances.tiExpNote_ID: assign tAdvances.tdOpenBalanceTC = tAdvances.tdOpenBalanceTC - tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceDeductTC - tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceToReturnTC. if tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceDeductTC <> 0 and tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceDeductTC <> ? then assign tAdvances.tdOpenBalanceLC = tAdvances.tdOpenBalanceLC - tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceDeductLC - /*round(tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceToReturnTC * tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceDeductLC / tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceDeductTC, viCompanyLCDec).*/ <M-18 RoundAmount (input tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceToReturnTC * tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceDeductLC / tqExpNoteCInvoiceByCInvoice.tdExpNoteCInvoiceDeductTC (idUnroundedAmount), input viCompanyLCid (iiCurrencyID), input vcCompanyLC (icCurrencyCode)) in business>. end. if (tAdvances.tdOpenBalanceTC < 0) or (tAdvances.tdOpenBalanceTC = 0 and ilMerge = true) then do: find first tExpNoteCInvoice where tExpNoteCInvoice.CInvoice_ID = tAdvances.tiCInvoice_ID no-error. if available tExpNoteCInvoice then assign tExpNoteCInvoice.tc_Status = (if tExpNoteCInvoice.tc_Status = "N":U or tExpNoteCInvoice.tc_Status = "":U then "":U else "D":U). delete tAdvances. next. end. end. if vlQueryStarted then do: <Q-13 run ExpNoteCInvoiceByCInvoice (Stop) in BExpenseNote > end.