tApiUpdateDeduction | input | temp-table | |
tApiUpdateDeductionTmp | output | temp-table | |
tApiDeductionDInvoices | output | temp-table | |
ilIsCalledFromFinancial | input | logical | true: from financial false: from TPM |
oiReturnStatus | output | integer | Return status of the method. |
/***************************************************************************************/ /* This method will validate the records of deduction details */ /***************************************************************************************/ assign oiReturnStatus = -98. /* empty temp-table tApiDeductionDInvoices */ empty temp-table tApiDeductionDInvoices. empty temp-table tApiUpdateDeductionTmp. /* go through the input temp-table */ for each tApiUpdateDeduction: /**************************************/ /* validating the DInvoice_ID */ /**************************************/ if tApiUpdateDeduction.tiDInvoiceID <= 0 or tApiUpdateDeduction.tiDInvoiceID = ? then do: assign oiReturnStatus = -1 vcErrMessage = trim(#T-69'You must specify an invoice.':100(347286977)T-69#). <M-31 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-268956':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. /* end if tApiUpdateDeduction.tiDInvoiceID <= 0 or tApiUpdateDeduction.tiDInvoiceID = ? */ /**************************************/ /* validating the tc_Status column */ /**************************************/ if tApiUpdateDeduction.tcStatus <> 'N':U and tApiUpdateDeduction.tcStatus <> 'C':U and tApiUpdateDeduction.tcStatus <> 'D':U and tApiUpdateDeduction.tcStatus <> '':U and tApiUpdateDeduction.tcStatus <> ? then do: assign oiReturnStatus = -1 vcErrMessage = trim(#T-16'You must enter a valid API activity code, such as N, C, D, ''.':100(225729845)T-16#). <M-41 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-856688':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. /******************************************/ /* validating the tiDInvoiceDeduction_ID */ /*****************************************/ if tApiUpdateDeduction.tcStatus <> 'N':U and (tApiUpdateDeduction.tiDInvoiceDeductionID = ? or tApiUpdateDeduction.tiDInvoiceDeductionID <=0) then do: assign oiReturnStatus = -1 vcErrMessage = trim(#T-13'You must specify deduction details if the API activity is not N.':100(730933055)T-13#). <M-45 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-566455':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. if tApiUpdateDeduction.tcStatus <> 'N':U and tApiUpdateDeduction.tcStatus <> '':U and tApiUpdateDeduction.tcStatus <> ? then do: <Q-40 run DInvoiceDeductionById (all) (Read) (NoCache) (input tApiUpdateDeduction.tiDInvoiceDeductionID, (DInvoiceDeductionID) output dataset tqDInvoiceDeductionById) in BDInvoice> find first tqDInvoiceDeductionById no-error. if not available tqDInvoiceDeductionById then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-76'The system cannot find deduction (&1).':100(528573576)T-76#, string(tApiUpdateDeduction.tiDInvoiceDeductionID))). <M-73 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-64889':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. /* deduction category type check */ assign vcOriginalDeductionCatType = tqDInvoiceDeductionById.tcDeductionCatType vcOriginalStatus = tqDInvoiceDeductionById.tcDInvoiceDeductionStatus. if vcOriginalStatus <> ? and vcOriginalStatus <> {&INVOICEDEDUCTSTATUS-PENDING} and vcOriginalStatus <> {&INVOICEDEDUCTSTATUS-APPROVEDCREDIT} and (tApiUpdateDeduction.tcStatus = 'C':U or tApiUpdateDeduction.tcStatus = 'D':U ) then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-8'You can only modify Pending or Approved for Credit lines for customer invoice &1 and deduction &2.':150(85729632)T-8#, string(tApiUpdateDeduction.tiDInvoiceID), tApiUpdateDeduction.tcDeductionCatCode)). <M-26 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-209044':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. end. /* end if tApiUpdateDeduction.tcStatus <> 'N':U and tApiUpdateDeduction.tcStatus <> '':U and tApiUpdateDeduction.tcStatus <> ? */ /* add the dinvoice_id info the tApiDeductionDInvoices table */ if not can-find(first tApiDeductionDInvoices where tApiDeductionDInvoices.tiDInvoiceId = tApiUpdateDeduction.tiDInvoiceID) then do: create tApiDeductionDInvoices. assign tApiDeductionDInvoices.tiDInvoiceId = tApiUpdateDeduction.tiDInvoiceID. end. /* build the temp-table tApiUpdateDeductionTmp */ create tApiUpdateDeductionTmp. buffer-copy tApiUpdateDeduction to tApiUpdateDeductionTmp. assign tApiUpdateDeductionTmp.tlNewApprovedWriteOff = no tApiUpdateDeductionTmp.tlNewRejected = no tApiUpdateDeductionTmp.tcDInvoiceDeductionPromoteCode = tApiUpdateDeduction.tcDInvoiceDeductionPromoteCode. /* calculate the total amount tc by dinvoice_id and save it to temp-table: tApiDeductionDInvoices */ find first tApiDeductionDInvoices where tApiDeductionDInvoices.tiDInvoiceId = tApiUpdateDeduction.tiDInvoiceID no-error. if tApiUpdateDeduction.tcStatus <> 'D':U then assign tApiDeductionDInvoices.tdTotalAmountTC = tApiDeductionDInvoices.tdTotalAmountTC + tApiUpdateDeduction.tdDInvoiceDeductionTC. /*************************************************************/ /* validating if it's a valid DInvoice_ID */ /* get customer deduction invoice company id and domain info */ /****************************************************************/ <Q-67 run DInvoicePrim (all) (Read) (NoCache) (input ?, (CompanyId) input tApiUpdateDeduction.tiDInvoiceID, (DInvoiceId) input ?, (PeriodYear) input ?, (JournalId) input ?, (JournalCode) input ?, (DInvoiceVoucher) output dataset tqDInvoicePrim) in BDInvoice> find first tqDInvoicePrim no-error. if not available tqDInvoicePrim then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-57'You specified an incorrect invoice (&1).':100(496498946)T-57#, string(tApiUpdateDeduction.tiDInvoiceID))). <M-63 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-872451':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. else do: assign tApiUpdateDeductionTmp.tiEntityIdTmp = tqDInvoicePrim.tiCompany_ID. /* get domain info */ <Q-2 run DomainsForCompanies (all) (Read) (NoCache) (input ?, (DomainId) input ?, (DomainCode) input tApiUpdateDeductionTmp.tiEntityIdTmp, (CompanyId) output dataset tqDomainsForCompanies) in BDomain> find first tqDomainsForCompanies no-error. if available tqDomainsForCompanies then do: assign tApiUpdateDeductionTmp.tcDomainCodeTmp = tqDomainsForCompanies.tcDomainCode tApiUpdateDeductionTmp.tiDomainIdTmp = tqDomainsForCompanies.tiDomain_ID. end. end. /* end if available tqDInvoicePrim*/ /*****************************************************/ /* validate if the status has the right value */ /*****************************************************/ if tApiUpdateDeduction.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-APPROVEDCREDIT} and tApiUpdateDeduction.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-CREDITED} and tApiUpdateDeduction.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-PENDING} and tApiUpdateDeduction.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-WRITE-OFF} and tApiUpdateDeduction.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-APPROVEWRITEOFF} and tApiUpdateDeduction.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-REJECTED} then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-10'The deduction status &1 is incorrect for customer invoice &2 and deduction &3.':100(22692708)T-10#, tApiUpdateDeduction.tcDInvoiceDeductionStatus, string(tApiUpdateDeduction.tiDInvoiceID), tApiUpdateDeduction.tcDeductionCatCode)). <M-94 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-897808':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. /* validate the status when tc_status is N */ if (tApiUpdateDeduction.tcStatus = 'N':U or tApiUpdateDeduction.tcStatus = 'C':U) and tApiUpdateDeduction.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-REJECTED} and tApiUpdateDeduction.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-APPROVEWRITEOFF} and tApiUpdateDeduction.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-PENDING} and tApiUpdateDeduction.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-APPROVEDCREDIT} then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-6'You can only change the deduction status to Pending, Rejected, Approved for Write-Off, or Approved for Credit for customer invoice &1 and deduction &2.':200(741045268)T-6#, string(tApiUpdateDeduction.tiDInvoiceID), tApiUpdateDeduction.tcDeductionCatCode)). <M-37 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-577124':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. /*****************************************************/ /* validate if the entity code has the right value */ /*****************************************************/ /* only check tc_status with N or C */ if tApiUpdateDeduction.tcStatus = 'N':U or tApiUpdateDeduction.tcStatus = 'C':U then do: if tApiUpdateDeduction.tcEntityCode = ? or tApiUpdateDeduction.tcEntityCode = '':U then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-11'You must specify an entity code for customer invoice &1 and deduction &2.':100(566442221)T-11#, string(tApiUpdateDeduction.tiDInvoiceID), tApiUpdateDeduction.tcDeductionCatCode)). <M-23 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-797290':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. <Q-46 run CompanyByCompanyCodeDomainCode (all) (Read) (NoCache) (input ?, (CompanyId) input tApiUpdateDeduction.tcEntityCode, (CompanyCode) input ?, (DomainCode) input ?, (DomainId) input ?, (CompanyIsActive) output dataset tqCompanyByCompanyCodeDomainCode) in BCompany> find first tqCompanyByCompanyCodeDomainCode no-error. if not available tqCompanyByCompanyCodeDomainCode then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-32'The entity code is incorrect for customer invoice &1 and deduction &2.':100(621999460)T-32#, string(tApiUpdateDeduction.tiDInvoiceID), tApiUpdateDeduction.tcDeductionCatCode)). <M-35 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-929881':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. assign tApiUpdateDeductionTmp.tiExpensedCompanyID = tqCompanyByCompanyCodeDomainCode.tiCompany_ID tApiUpdateDeductionTmp.tiExpensedDomainID = tqCompanyByCompanyCodeDomainCode.tiDomain_ID tApiUpdateDeductionTmp.tcExpensedDomainCode = tqCompanyByCompanyCodeDomainCode.tcDomainCode. end. /* end if tApiUpdateDeduction.tcStatus = 'N':U or tApiUpdateDeduction.tcStatus = 'C':U*/ /*****************************************************/ /* validate if the deduction has the right value */ /*****************************************************/ /* only check tc_status with N or C */ if tApiUpdateDeduction.tcStatus = 'N':U or tApiUpdateDeduction.tcStatus = 'C':U then do: if tApiUpdateDeduction.tcDeductionCatCode = ? or tApiUpdateDeduction.tcDeductionCatCode = '':U then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-25'You must specify a deduction category code for customer invoice &1.':100(328450366)T-25#, string(tApiUpdateDeduction.tiDInvoiceID))). <M-88 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-340168':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. if tApiUpdateDeduction.tcDInvoiceDeductionStatus = {&INVOICEDEDUCTSTATUS-APPROVEWRITEOFF} then do: <Q-89 run GetDeductionByCodeDomain (all) (Read) (NoCache) (input tApiUpdateDeductionTmp.tcExpensedDomainCode, (DomainCode) input tApiUpdateDeductionTmp.tcDeductionCatCode, (DeductionCatCode) output dataset tqGetDeductionByCodeDomain) in BDeductionCat> find first tqGetDeductionByCodeDomain no-error. if not available tqGetDeductionByCodeDomain then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-80'Deduction category code &1 is incorrect for customer invoice &2.':100(305528134)T-80#, tApiUpdateDeduction.tcDeductionCatCode, string(tApiUpdateDeduction.tiDInvoiceID))). <M-29 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-846912':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. end. <Q-91 run GetDeductionByCodeDomain (all) (Read) (NoCache) (input tApiUpdateDeductionTmp.tcDomainCodeTmp, (DomainCode) input tApiUpdateDeductionTmp.tcDeductionCatCode, (DeductionCatCode) output dataset tqGetDeductionByCodeDomain) in BDeductionCat> find first tqGetDeductionByCodeDomain no-error. if not available tqGetDeductionByCodeDomain then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-85'Deduction category code &1 is incorrect for customer invoice &2.':100(305528134)T-85#, tApiUpdateDeduction.tcDeductionCatCode, string(tApiUpdateDeduction.tiDInvoiceID))). <M-179 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-879865':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. else do: /* update deduction cat type info */ assign tApiUpdateDeductionTmp.tcDeductionCatType = tqGetDeductionByCodeDomain.tcDeductionCatType tApiUpdateDeductionTmp.tiDeductionCatLineId = tqGetDeductionByCodeDomain.tiDeductionCatLine_ID. end. end. /* end if tApiUpdateDeduction.tcStatus = 'N':U or tApiUpdateDeduction.tcStatus = 'C':U*/ /* fix defect FIN-7350 */ if tApiUpdateDeductionTmp.tcStatus = '':U or tApiUpdateDeductionTmp.tcStatus = ? then do: <Q-72 run GetDeductionByCodeDomain (all) (Read) (NoCache) (input tApiUpdateDeductionTmp.tcDomainCodeTmp, (DomainCode) input tApiUpdateDeductionTmp.tcDeductionCatCode, (DeductionCatCode) output dataset tqGetDeductionByCodeDomain) in BDeductionCat> find first tqGetDeductionByCodeDomain no-error. if not available tqGetDeductionByCodeDomain then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-33'Deduction category code &1 is incorrect for customer invoice &2.':100(305528134)T-33#, tApiUpdateDeduction.tcDeductionCatCode, string(tApiUpdateDeduction.tiDInvoiceID))). <M-4 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-417742':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. else do: /* update deduction cat type info */ assign tApiUpdateDeductionTmp.tcDeductionCatType = tqGetDeductionByCodeDomain.tcDeductionCatType. /* update deduction catline id info */ assign tApiUpdateDeductionTmp.tiDeductionCatLineId = tqGetDeductionByCodeDomain.tiDeductionCatLine_ID. end. end. /* end if tApiUpdateDeductionTmp.tcStatus = '':U or tApiUpdateDeductionTmp.tcStatus = '':U. */ /* validate deduction type */ if (tApiUpdateDeductionTmp.tcStatus = 'N':U or tApiUpdateDeductionTmp.tcStatus = 'C':U) and ilIsCalledFromFinancial = yes and tApiUpdateDeductionTmp.tcDeductionCatType = {&DEDUCTIONCATTYPE-PROMOTION} and tApiUpdateDeductionTmp.tcDInvoiceDeductionStatus <> {&INVOICEDEDUCTSTATUS-PENDING} then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-48'The status of the new deduction detail &1 with type 'Promotion' must be 'Pending'.':150(19445522)T-48#, tApiUpdateDeductionTmp.tcDeductionCatCode)). <M-177 run SetMessage (input vcErrMessage (icMessage), input ? (icArguments), input ? (icFieldName), input tApiUpdateDeductionTmp.tcDeductionCatCode (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-416757':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. if tApiUpdateDeductionTmp.tcStatus = 'C':U then do: if (ilIsCalledFromFinancial) and vcOriginalDeductionCatType = {&DEDUCTIONCATTYPE-PROMOTION} then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-77'&1 deduction detail is not allowed to change.':255(154344583)T-77#, {&DEDUCTIONCATTYPE-PROMOTION})). <M-50 run SetMessage (input vcErrMessage (icMessage), input ? (icArguments), input ? (icFieldName), input string(tApiUpdateDeductionTmp.tiDInvoiceDeductionID) (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-185640':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. if (ilIsCalledFromFinancial = false) and vcOriginalDeductionCatType = {&DEDUCTIONCATTYPE-STANDARD} then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-60'&1 deduction detail is not allowed to change.':255(154344583)T-60#, {&DEDUCTIONCATTYPE-STANDARD})). <M-12 run SetMessage (input vcErrMessage (icMessage), input ? (icArguments), input ? (icFieldName), input string(tApiUpdateDeductionTmp.tiDInvoiceDeductionID) (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-968613':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. end. /* end if tApiUpdateDeductionTmp.tcStatus = 'C':U */ if tApiUpdateDeductionTmp.tcStatus = 'D':U and tApiUpdateDeductionTmp.tiDInvoiceDeductionID > 0 then do: if (ilIsCalledFromFinancial) and vcOriginalDeductionCatType = {&DEDUCTIONCATTYPE-PROMOTION} then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-9'&1 deduction detail can not be deleted.':255(83399466)T-9#,{&DEDUCTIONCATTYPE-PROMOTION})). <M-19 run SetMessage (input vcErrMessage (icMessage), input ? (icArguments), input ? (icFieldName), input string(tApiUpdateDeductionTmp.tiDInvoiceDeductionID) (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-713881':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. if (ilIsCalledFromFinancial = false ) and vcOriginalDeductionCatType = {&DEDUCTIONCATTYPE-STANDARD} then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-1'&1 deduction detail can not be deleted.':255(83399466)T-1#,{&DEDUCTIONCATTYPE-STANDARD})). <M-42 run SetMessage (input vcErrMessage (icMessage), input ? (icArguments), input ? (icFieldName), input string(tApiUpdateDeductionTmp.tiDInvoiceDeductionID) (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-965686':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. end. /* end if tApiUpdateDeductionTmp.tcStatus = 'D':U and tApiUpdateDeductionTmp.tiDInvoiceDeductionID > 0 */ /*****************************************************/ /* validate if the intercompany code has the right value */ /*****************************************************/ /* only check tc_status with N, C */ if tApiUpdateDeduction.tcStatus = 'N':U or tApiUpdateDeduction.tcStatus = 'C':U then do: if tApiUpdateDeduction.tcInterCompanyCode <> ? and tApiUpdateDeduction.tcInterCompanyCode <> '' then do: <Q-7 run CompanyPrim (all) (Read) (NoCache) (input ?, (LookupCompanyId) input tApiUpdateDeduction.tcInterCompanyCode, (CompanyCode) output dataset tqCompanyPrim) in BCompany> find first tqCompanyPrim no-error. if not available tqCompanyPrim then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-44'The intercompany code you specified for customer invoice &1 and deduction &2 is incorrect.':100(597992233)T-44#, string(tApiUpdateDeduction.tiDInvoiceID), tApiUpdateDeduction.tcDeductionCatCode)). <M-86 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-125345':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. end. end. /*****************************************************/ /* validate if the tc has the right value */ /*****************************************************/ /* only check status with N, C */ if tApiUpdateDeduction.tcStatus = 'N':U or tApiUpdateDeduction.tcStatus = 'C':U then do: if tApiUpdateDeduction.tdDInvoiceDeductionTC <= 0 then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-27'The amount (TC) must be greater than zero (0) for customer invoice &1 and deduction &2.':100(557979377)T-27#, string(tApiUpdateDeduction.tiDInvoiceID), tApiUpdateDeduction.tcDeductionCatCode)). <M-84 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-162065':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. end. /*****************************************************/ /* validate if DInvoiceDeductionPostingDate column */ /*****************************************************/ if ( tApiUpdateDeduction.tcStatus = 'N':U or tApiUpdateDeduction.tcStatus = 'C':U ) and tApiUpdateDeduction.tcDInvoiceDeductionStatus = {&INVOICEDEDUCTSTATUS-APPROVEWRITEOFF} and ( tApiUpdateDeduction.ttDInvoiceDeductionPostingDate = ? or string(tApiUpdateDeduction.ttDInvoiceDeductionPostingDate) = '':U ) then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-49'You must specify a posting date if the deduction status is &1 for deduction &2.':150(788906194)T-49#, trim({&INVOICEDEDUCTSTATUS-APPROVEWRITEOFF-TR}), tApiUpdateDeduction.tcDeductionCatCode)). <M-47 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-448869':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. /*****************************************************/ /* validate ttDInvoiceDeductionApRejDate column */ /*****************************************************/ if ( tApiUpdateDeduction.tcStatus = 'N':U or tApiUpdateDeduction.tcStatus = 'C':U ) and ( tApiUpdateDeduction.tcDInvoiceDeductionStatus = {&INVOICEDEDUCTSTATUS-APPROVEWRITEOFF} or tApiUpdateDeduction.tcDInvoiceDeductionStatus = {&INVOICEDEDUCTSTATUS-REJECTED} ) and ( tApiUpdateDeduction.ttDInvoiceDeductionApRejDate = ? or string(tApiUpdateDeduction.ttDInvoiceDeductionApRejDate ) = '':U ) then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-38'You must specify approve/reject date if the deduction status is &1 or &2 for deduction &3.':150(249937196)T-38#, trim({&INVOICEDEDUCTSTATUS-APPROVEWRITEOFF-TR}), trim({&INVOICEDEDUCTSTATUS-REJECTED-TR}), tApiUpdateDeduction.tcDeductionCatCode)). <M-87 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-699216':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. /*****************************************************/ /* validating the sequence column */ /*****************************************************/ if tApiUpdateDeductionTmp.tcStatus <> 'D':U and tApiUpdateDeductionTmp.tiDInvoiceDeductionSequence = ? then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-14'You must specify a sequence for customer invoice &1 and deduction &2.':200(794687172)T-14#, string(tApiUpdateDeduction.tiDInvoiceID), tApiUpdateDeduction.tcDeductionCatCode)). <M-39 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-350698':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. /*****************************************************/ /* calculating the LC & CC values */ /*****************************************************/ if tApiUpdateDeductionTmp.tcStatus = 'N':U or tApiUpdateDeductionTmp.tcStatus = 'C':U or tApiUpdateDeductionTmp.tcStatus = '':U or tApiUpdateDeductionTmp.tcStatus = ? then do: <Q-74 run DInvoiceByIDAllInfo (all) (Read) (NoCache) (input ?, (CompanyId) input tApiUpdateDeductionTmp.tiDInvoiceID, (DInvoiceID) output dataset tqDInvoiceByIDAllInfo) in BDInvoice> find first tqDInvoiceByIDAllInfo no-error. if available tqDInvoiceByIDAllInfo then do: /* calculate LC */ tApiUpdateDeductionTmp.tdDInvoiceDeductionLC = tApiUpdateDeductionTmp.tdDInvoiceDeductionTC * tqDInvoiceByIDAllInfo.tdDInvoiceExchangeRate * tqDInvoiceByIDAllInfo.tdDInvoiceRateScale. /* calculate CC */ tApiUpdateDeductionTmp.tdDInvoiceDeductionCC = tApiUpdateDeductionTmp.tdDInvoiceDeductionTC * tqDInvoiceByIDAllInfo.tdDInvoiceCCRate * tqDInvoiceByIDAllInfo.tdDInvoiceCCScale. end. end. if tApiUpdateDeductionTmp.tiPaidInvoiceID = ? then do: assign tApiUpdateDeductionTmp.tiPaidInvoiceID = 0. end. end. /* for each tApiUpdateDeduction: */ /*****************************************************/ /* validate if the total amount has the correct value */ /*****************************************************/ for each tApiDeductionDInvoices: /* load invoice financial info by dinvoice_id */ <Q-70 run DInvoiceForFinInfo (all) (Read) (NoCache) (input ?, (CompanyId) input tApiDeductionDInvoices.tiDInvoiceId, (DInvoice_ID) output dataset tqDInvoiceForFinInfo) in BDInvoice> find first tqDInvoiceForFinInfo no-error. if available tqDInvoiceForFinInfo then do: /* checking the total amount */ if tApiDeductionDInvoices.tdTotalAmountTC <> tqDInvoiceForFinInfo.tdDInvoiceOriginalDebitTC then do: assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-15'The total TC amount entered (&1) does not equal the original debit TC amount (&3) for customer invoice (&2).':150(32365984)T-15#, string(tApiDeductionDInvoices.tdTotalAmountTC), string(tApiDeductionDInvoices.tiDInvoiceId), string(tqDInvoiceForFinInfo.tdDInvoiceOriginalDebitTC))). <M-96 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-573773':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. end. /* available tqDInvoiceForFinInfo */ else do: /* not a valid dinvoice_id */ assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-24'The invoice specified, customer invoice &1, is incorrect.':100(95677132)T-24#, string(tApiDeductionDInvoices.tiDInvoiceId))). <M-21 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-793440':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. /* not available tqDInvoiceForFinInfo */ end. /* end ach tApiDeductionDInvoices. */ /*********************************************************************************************/ /* Check if there exists Rejected status then Pending or Approved for credit is not allowed. */ /*********************************************************************************************/ for each tApiDeductionDInvoices: assign vlExistNewRejectedStatus = no. for each tApiUpdateDeductionTmp where tApiUpdateDeductionTmp.tlNewRejected and tApiUpdateDeductionTmp.tiDInvoiceID = tApiDeductionDInvoices.tiDInvoiceId: vlExistNewRejectedStatus = yes. end. if vlExistNewRejectedStatus then do: for each tApiUpdateDeductionTmp where tApiUpdateDeductionTmp.tiDInvoiceID = tApiDeductionDInvoices.tiDInvoiceId and (tApiUpdateDeductionTmp.tcStatus = {&INVOICEDEDUCTSTATUS-PENDING} or tApiUpdateDeductionTmp.tcStatus = {&INVOICEDEDUCTSTATUS-APPROVEDCREDIT}): assign oiReturnStatus = -1 vcErrMessage = trim(substitute(#T-90'The Deduction Details contain deduction lines with the Pending or Approved for Credit status. You cannot reject the deduction.':200(724480253)T-90#)). <M-34 run SetMessage (input vcErrMessage (icMessage), input '':U (icArguments), input '':U (icFieldName), input '':U (icFieldValue), input 'E':U (icType), input 3 (iiSeverity), input ? (icRowid), input 'qadfin-99486':U (icFcMsgNumber), input ? (icFcExplanation), input ? (icFcIdentification), input ? (icFcContext), output viFcReturnSuper (oiReturnStatus)) in BDInvoice> return. end. end. end. assign oiReturnStatus = 0.