project QadFinancials > class BDInvoice > method GenerateSEPAReference
Description
generate the SEPA reference based on a key
Parameters
icKeyToGenerate | input | character | Key To Generate |
ocSEPAPaymentReference | output | character | generate SEPA Payment Reference |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
QadFitnesse
program code (program5/bdinvoice.p)
/* remove the spaces, put it in capitals */
assign icKeyToGenerate = replace(icKeyToGenerate, ' ', '')
icKeyToGenerate = caps(icKeyToGenerate)
viLength = length(icKeyToGenerate,"CHARACTER").
/* Convert all characters to numeric */
do viIndex = 1 to viLength on error undo, throw:
case index("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ", substring (icKeyToGenerate,viIndex,1,"CHARACTER")):
when 1 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "1".
when 2 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "2".
when 3 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "3".
when 4 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "4".
when 5 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "5".
when 6 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "6".
when 7 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "7".
when 8 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "8".
when 9 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "9".
when 10 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "0".
when 11 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "10".
when 12 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "11".
when 13 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "12".
when 14 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "13".
when 15 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "14".
when 16 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "15".
when 17 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "16".
when 18 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "17".
when 19 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "18".
when 20 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "19".
when 21 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "20".
when 22 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "21".
when 23 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "22".
when 24 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "23".
when 25 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "24".
when 26 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "25".
when 27 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "26".
when 28 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "27".
when 29 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "28".
when 30 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "29".
when 31 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "30".
when 32 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "31".
when 33 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "32".
when 34 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "33".
when 35 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "34".
when 36 then assign vcSEPAPaymentReference = vcSEPAPaymentReference + "35".
end case.
end. /* do viIndex = 1 to viLength: */
/* add the numeric value of the character RF, 2715, and '00' to the */
/* right-hand end of the creditor reference */
assign vcSEPAPaymentReference = vcSEPAPaymentReference + "271500".
/* A valid creditor reference must be a modulus of 97. */
/* Modulo 97 of vcPaymentReference should result in 1 to be a valid reference number */
/* The OpenEdge Modulo function will automatically try to convert to integer, which might not fit */
/* So we will have to do the calculation ourselves */
/* subtract the remainder from 98, and if the result is less than 10 */
/* insert a leading zero. The result is the two check digits. */
/* In order to correctly represent the complete RF Creditor Reference */
/* on an invoice, the code 'RF' and the check digits should be */
/* inserted at the left-hand end of the creditor reference */
assign viPaymentReferenceModulo97 = decimal(vcSEPAPaymentReference) - (truncate(decimal(vcSEPAPaymentReference) / 97, 0) * 97)
viResult = 98 - viPaymentReferenceModulo97
vcSEPAPaymentReference = if viResult < 10
then "RF" + "0" + string(viResult) + icKeyToGenerate
else "RF" + string(viResult) + icKeyToGenerate
no-error. /* add no-error because of decimal function */
/* ================================================ */
/* Split payment reference in blocks of four digits */
/* ================================================ */
assign viLength = length(vcSEPAPaymentReference,"CHARACTER").
do viPosition = 1 to viLength by 1 on error undo, throw:
assign ocSEPAPaymentReference = ocSEPAPaymentReference + substring(vcSEPAPaymentReference, viPosition, 1, "CHARACTER").
if viPosition modulo 4 = 0
then assign ocSEPAPaymentReference = ocSEPAPaymentReference + " ".
end. /* do viPosition = 1 to length(vcSEPAPaymentReference,"CHARACTER") by 1: */