Conditions | 15 |
Paths | 50 |
Total Lines | 101 |
Code Lines | 58 |
Lines | 0 |
Ratio | 0 % |
Changes | 3 | ||
Bugs | 0 | Features | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
135 | private function generateTransaction(int $bunqAccountId, array $entry): array |
||
136 | { |
||
137 | $return = [ |
||
138 | 'apply_rules' => $this->configuration->isRules(), |
||
139 | 'error_if_duplicate_hash' => true, |
||
140 | 'transactions' => [ |
||
141 | [ |
||
142 | 'type' => 'withdrawal', // reverse |
||
143 | 'date' => substr($entry['created'], 0, 10), |
||
144 | 'datetime' => $entry['created'], // not used in API, only for transaction filtering. |
||
145 | 'amount' => 0, |
||
146 | 'description' => $entry['description'], |
||
147 | 'order' => 0, |
||
148 | 'currency_code' => $entry['currency_code'], |
||
149 | 'tags' => [$entry['type'], $entry['sub_type']], |
||
150 | ], |
||
151 | ], |
||
152 | ]; |
||
153 | |||
154 | // save meta: |
||
155 | $return['transactions'][0]['bunq_payment_id'] = $entry['id']; |
||
156 | $return['transactions'][0]['external_id'] = $entry['id']; |
||
157 | $return['transactions'][0]['internal_reference'] = $bunqAccountId; |
||
158 | |||
159 | // give "auto save" transactions a different description: |
||
160 | if ('SAVINGS' === $entry['type'] && 'PAYMENT' === $entry['sub_type']) { |
||
161 | $return['transactions'][0]['description'] = '(auto save transaction)'; |
||
162 | } |
||
163 | |||
164 | if (1 === bccomp($entry['amount'], '0')) { |
||
165 | // amount is positive: deposit or transfer. Bunq account is destination |
||
166 | $return['transactions'][0]['type'] = 'deposit'; |
||
167 | $return['transactions'][0]['amount'] = $entry['amount']; |
||
168 | |||
169 | // destination is bunq |
||
170 | $return['transactions'][0]['destination_id'] = (int) $this->accounts[$bunqAccountId]; |
||
171 | |||
172 | // source is the other side: |
||
173 | $return['transactions'][0]['source_iban'] = $entry['counter_party']['iban']; |
||
174 | $return['transactions'][0]['source_name'] = $entry['counter_party']['display_name']; |
||
175 | |||
176 | $mappedId = $this->getMappedId($entry['counter_party']['display_name'], (string) $entry['counter_party']['iban']); |
||
177 | if (null !== $mappedId && 0 !== $mappedId) { |
||
178 | $mappedType = $this->getMappedType($mappedId); |
||
179 | $return['transactions'][0]['type'] = $this->getTransactionType($mappedType, 'asset'); |
||
180 | $return['transactions'][0]['source_id'] = $mappedId; |
||
181 | unset($return['transactions'][0]['source_iban'], $return['transactions'][0]['source_name']); |
||
182 | } |
||
183 | //Log::debug(sprintf('Mapped ID is %s', var_export($mappedId, true))); |
||
184 | // check target accounts as well: |
||
185 | $iban = $entry['counter_party']['iban']; |
||
186 | if ((null === $mappedId || 0 === $mappedId) && isset($this->targetAccounts[$iban])) { |
||
187 | Log::debug(sprintf('Found IBAN %s in target accounts (ID %d). Type is %s', $iban, $this->targetAccounts[$iban], $this->targetTypes[$iban])); |
||
188 | |||
189 | // type: source comes from $targetTypes, destination is asset (see above). |
||
190 | $return['transactions'][0]['type'] = $this->getTransactionType($this->targetTypes[$iban] ?? '', 'asset'); |
||
191 | $return['transactions'][0]['source_id'] = $this->targetAccounts[$iban]; |
||
192 | unset($return['transactions'][0]['source_iban'], $return['transactions'][0]['source_name']); |
||
193 | Log::debug(sprintf('Replaced source IBAN %s with ID #%d (type %s).', $iban, $this->targetAccounts[$iban], $this->targetTypes[$iban])); |
||
194 | } |
||
195 | unset($iban); |
||
196 | } |
||
197 | |||
198 | // TODO these two if statements are mirrors of each other. |
||
199 | |||
200 | if (-1 === bccomp($entry['amount'], '0')) { |
||
201 | // amount is negative: withdrawal or transfer. |
||
202 | $return['transactions'][0]['amount'] = bcmul($entry['amount'], '-1'); |
||
203 | |||
204 | // source is bunq: |
||
205 | $return['transactions'][0]['source_id'] = (int) $this->accounts[$bunqAccountId]; |
||
206 | |||
207 | // dest is shop |
||
208 | $return['transactions'][0]['destination_iban'] = $entry['counter_party']['iban']; |
||
209 | $return['transactions'][0]['destination_name'] = $entry['counter_party']['display_name']; |
||
210 | |||
211 | $mappedId = $this->getMappedId($entry['counter_party']['display_name'], (string) $entry['counter_party']['iban']); |
||
212 | //Log::debug(sprintf('Mapped ID is %s', var_export($mappedId, true))); |
||
213 | if (null !== $mappedId && 0 !== $mappedId) { |
||
214 | $return['transactions'][0]['destination_id'] = $mappedId; |
||
215 | $mappedType = $this->getMappedType($mappedId); |
||
216 | $return['transactions'][0]['type'] = $this->getTransactionType('asset', $mappedType); |
||
217 | unset($return['transactions'][0]['destination_iban'], $return['transactions'][0]['destination_name']); |
||
218 | } |
||
219 | |||
220 | // check target accounts as well: |
||
221 | $iban = $entry['counter_party']['iban']; |
||
222 | if ((null === $mappedId || 0 === $mappedId) && isset($this->targetAccounts[$iban])) { |
||
223 | Log::debug(sprintf('Found IBAN %s in target accounts (ID %d). Type is %s', $iban, $this->targetAccounts[$iban], $this->targetTypes[$iban])); |
||
224 | |||
225 | // source is always asset, destination depends on $targetType. |
||
226 | $return['transactions'][0]['type'] = $this->getTransactionType('asset', $this->targetTypes[$iban] ?? ''); |
||
227 | $return['transactions'][0]['destination_id'] = $this->targetAccounts[$iban]; |
||
228 | unset($return['transactions'][0]['destination_iban'], $return['transactions'][0]['destination_name']); |
||
229 | Log::debug(sprintf('Replaced source IBAN %s with ID #%d (type %s).', $iban, $this->targetAccounts[$iban], $this->targetTypes[$iban])); |
||
230 | } |
||
231 | unset($iban); |
||
232 | } |
||
233 | app('log')->debug(sprintf('Parsed bunq transaction #%d', $entry['id'])); |
||
234 | |||
235 | return $return; |
||
236 | } |
||
321 |