@@ -47,17 +47,47 @@ public function setPaymentReference(PaymentOrder $paymentOrder): void
47
47
public function generatePaymentReference (PaymentOrder $ paymentOrder ): string
48
48
{
49
49
//Max 140 chars are allowed for a payment reference
50
- //Format: [ProjectName 70] [FSR Name 45] [?Funding ID 11] ZA[PaymentOrder ID]
50
+ //Format: R.-Nr. [Invoice-Number 20] Kd.-Nr. [Customer-Number 20]
51
+ //Format: [ProjectName 70] [FSR Name 35] [?Funding ID 20] ZA[PaymentOrder ID 9]
52
+
53
+ if (!empty ($ paymentOrder ->getInvoiceNumber ()) || !empty ($ paymentOrder ->getCustomerNumber ())) {
54
+ $ tmp = $ this ->paymentReferenceWithInvoiceAndCustomerNr ($ paymentOrder );
55
+ } else {
56
+ $ tmp = $ this ->paymentReferenceWithoutInvoiceOrCustomerNr ($ paymentOrder );
57
+ }
58
+
59
+ if (mb_strlen ($ tmp ) > 140 ) {
60
+ return new RuntimeException ('Generated Payment reference exceeds 140 characters! This should not happen unless you have a very long ID... ' );
61
+ }
62
+
63
+ return $ tmp ;
64
+ }
65
+
66
+ private function paymentReferenceWithInvoiceAndCustomerNr (PaymentOrder $ paymentOrder ): string
67
+ {
68
+ //Max 140 chars are allowed for a payment reference
69
+ //Format: R.-Nr. [Invoice-Number 23] Kd.-Nr. [Customer-Number 23] [ProjectName 45] [FSR Name 19] [?Funding ID 20] ZA[PaymentOrder ID 9] = 139
70
+
71
+ $ tmp = '' ;
72
+ if (!empty ($ paymentOrder ->getInvoiceNumber ())) {
73
+ $ tmp .= 'R.-Nr. ' . mb_strimwidth ($ paymentOrder ->getInvoiceNumber (), 0 , 23 , '' );
74
+ $ tmp .= ' ' ;
75
+ }
76
+ if (!empty ($ paymentOrder ->getCustomerNumber ())) {
77
+ $ tmp .= 'Kd.-Nr. ' . mb_strimwidth ($ paymentOrder ->getCustomerNumber (), 0 , 23 , '' );
78
+ $ tmp .= ' ' ;
79
+ }
51
80
52
81
//Project name
53
- $ tmp = mb_strimwidth ($ paymentOrder ->getProjectName (), 0 , 70 , '' );
82
+ $ tmp . = mb_strimwidth ($ paymentOrder ->getProjectName (), 0 , 45 , '' );
54
83
$ tmp .= ' ' ;
55
84
//FSR Name
56
- $ tmp .= mb_strimwidth ((string ) $ paymentOrder ->getDepartment ()->getName (), 0 , 45 , '' );
85
+ $ tmp .= mb_strimwidth ((string ) $ paymentOrder ->getDepartment ()->getName (), 0 , 15 , '' );
57
86
$ tmp .= ' ' ;
87
+
58
88
//Funding ID if existing
59
89
if ($ paymentOrder ->getFundingId () !== '' && $ paymentOrder ->getFundingId () !== '0 ' ) {
60
- $ tmp .= mb_strimwidth ($ paymentOrder ->getFundingId (), 0 , 11 , '' );
90
+ $ tmp .= mb_strimwidth ($ paymentOrder ->getFundingId (), 0 , 20 , '' );
61
91
$ tmp .= ' ' ;
62
92
}
63
93
@@ -67,9 +97,31 @@ public function generatePaymentReference(PaymentOrder $paymentOrder): string
67
97
}
68
98
$ tmp .= $ paymentOrder ->getIDString ();
69
99
70
- if (mb_strlen ($ tmp ) > 140 ) {
71
- return new RuntimeException ('Generated Payment reference exceeds 140 characters! This should not happen unless you have a very long ID... ' );
100
+ return $ tmp ;
101
+ }
102
+
103
+ private function paymentReferenceWithoutInvoiceOrCustomerNr (PaymentOrder $ paymentOrder ): string
104
+ {
105
+ //Max 140 chars are allowed for a payment reference
106
+ //Format: [ProjectName 70] [FSR Name 35] [?Funding ID 20] ZA[PaymentOrder ID 9] = 139
107
+
108
+ //Project name
109
+ $ tmp = mb_strimwidth ($ paymentOrder ->getProjectName (), 0 , 70 , '' );
110
+ $ tmp .= ' ' ;
111
+ //FSR Name
112
+ $ tmp .= mb_strimwidth ((string ) $ paymentOrder ->getDepartment ()->getName (), 0 , 35 , '' );
113
+ $ tmp .= ' ' ;
114
+ //Funding ID if existing
115
+ if ($ paymentOrder ->getFundingId () !== '' && $ paymentOrder ->getFundingId () !== '0 ' ) {
116
+ $ tmp .= mb_strimwidth ($ paymentOrder ->getFundingId (), 0 , 20 , '' );
117
+ $ tmp .= ' ' ;
118
+ }
119
+
120
+ //ZA + ID
121
+ if (null === $ paymentOrder ->getId ()) {
122
+ throw new RuntimeException ('ID is null. You have to persist the PaymentOrder before using this function! ' );
72
123
}
124
+ $ tmp .= $ paymentOrder ->getIDString ();
73
125
74
126
return $ tmp ;
75
127
}
0 commit comments