| 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. |
QadFinancials
/***************************************************************************************/
/* 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.