| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * AccountValidator.php | 
					
						
							| 
									
										
										
										
											2020-02-16 13:58:22 +01:00
										 |  |  |  * Copyright (c) 2019 james@firefly-iii.org | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2019-10-02 06:37:26 +02:00
										 |  |  |  * This file is part of Firefly III (https://github.com/firefly-iii). | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2019-10-02 06:37:26 +02:00
										 |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as | 
					
						
							|  |  |  |  * published by the Free Software Foundation, either version 3 of the | 
					
						
							|  |  |  |  * License, or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2019-10-02 06:37:26 +02:00
										 |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							| 
									
										
										
										
											2019-10-02 06:37:26 +02:00
										 |  |  |  * GNU Affero General Public License for more details. | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2019-10-02 06:37:26 +02:00
										 |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | declare(strict_types=1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace FireflyIII\Validation; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use FireflyIII\Models\Account; | 
					
						
							|  |  |  | use FireflyIII\Models\AccountType; | 
					
						
							|  |  |  | use FireflyIII\Models\TransactionType; | 
					
						
							|  |  |  | use FireflyIII\Repositories\Account\AccountRepositoryInterface; | 
					
						
							| 
									
										
										
										
											2019-04-06 08:10:50 +02:00
										 |  |  | use FireflyIII\User; | 
					
						
							| 
									
										
										
										
											2020-03-21 08:11:14 +01:00
										 |  |  | use FireflyIII\Validation\Account\AccountValidatorProperties; | 
					
						
							|  |  |  | use FireflyIII\Validation\Account\DepositValidation; | 
					
						
							| 
									
										
										
										
											2021-09-18 10:26:12 +02:00
										 |  |  | use FireflyIII\Validation\Account\LiabilityValidation; | 
					
						
							| 
									
										
										
										
											2020-03-21 08:11:14 +01:00
										 |  |  | use FireflyIII\Validation\Account\OBValidation; | 
					
						
							|  |  |  | use FireflyIII\Validation\Account\ReconciliationValidation; | 
					
						
							|  |  |  | use FireflyIII\Validation\Account\TransferValidation; | 
					
						
							|  |  |  | use FireflyIII\Validation\Account\WithdrawalValidation; | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  | use Log; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Class AccountValidator | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class AccountValidator | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-04-10 17:26:00 +02:00
										 |  |  |     use AccountValidatorProperties, WithdrawalValidation, DepositValidation, TransferValidation, ReconciliationValidation, OBValidation, LiabilityValidation; | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-10 06:34:03 +01:00
										 |  |  |     public bool                        $createMode; | 
					
						
							|  |  |  |     public string                      $destError; | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |     public ?Account                    $destination; | 
					
						
							|  |  |  |     public ?Account                    $source; | 
					
						
							| 
									
										
										
										
											2021-03-10 06:34:03 +01:00
										 |  |  |     public string                      $sourceError; | 
					
						
							|  |  |  |     private AccountRepositoryInterface $accountRepository; | 
					
						
							|  |  |  |     private array                      $combinations; | 
					
						
							|  |  |  |     private string                     $transactionType; | 
					
						
							|  |  |  |     private User                       $user; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * AccountValidator constructor. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function __construct() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-04-06 08:51:27 +02:00
										 |  |  |         $this->createMode        = false; | 
					
						
							|  |  |  |         $this->destError         = 'No error yet.'; | 
					
						
							|  |  |  |         $this->sourceError       = 'No error yet.'; | 
					
						
							|  |  |  |         $this->combinations      = config('firefly.source_dests'); | 
					
						
							|  |  |  |         $this->source            = null; | 
					
						
							|  |  |  |         $this->destination       = null; | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |         $this->accountRepository = app(AccountRepositoryInterface::class); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @return Account|null | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getSource(): ?Account | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return $this->source; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @param string $transactionType | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function setTransactionType(string $transactionType): void | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-03-10 06:34:03 +01:00
										 |  |  |         Log::debug(sprintf('Transaction type for validator is now "%s".', ucfirst($transactionType))); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |         $this->transactionType = ucfirst($transactionType); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-06 08:10:50 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @param User $user | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function setUser(User $user): void | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->user = $user; | 
					
						
							|  |  |  |         $this->accountRepository->setUser($user); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |      * @param array $array | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |      * | 
					
						
							|  |  |  |      * @return bool | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |     public function validateDestination(array $array): bool | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |         Log::debug('Now in AccountValidator::validateDestination()', $array); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |         if (null === $this->source) { | 
					
						
							| 
									
										
										
										
											2019-04-06 08:10:50 +02:00
										 |  |  |             Log::error('Source is NULL, always FALSE.'); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |             $this->destError = 'No source account validation has taken place yet. Please do this first or overrule the object.'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         switch ($this->transactionType) { | 
					
						
							|  |  |  |             default: | 
					
						
							|  |  |  |                 $this->destError = sprintf('AccountValidator::validateDestination cannot handle "%s", so it will always return false.', $this->transactionType); | 
					
						
							|  |  |  |                 Log::error(sprintf('AccountValidator::validateDestination cannot handle "%s", so it will always return false.', $this->transactionType)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 $result = false; | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             case TransactionType::WITHDRAWAL: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateWithdrawalDestination($array); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |                 break; | 
					
						
							|  |  |  |             case TransactionType::DEPOSIT: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateDepositDestination($array); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |                 break; | 
					
						
							|  |  |  |             case TransactionType::TRANSFER: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateTransferDestination($array); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2019-06-16 13:16:04 +02:00
										 |  |  |             case TransactionType::OPENING_BALANCE: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateOBDestination($array); | 
					
						
							| 
									
										
										
										
											2019-06-16 13:16:04 +02:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2021-04-10 17:26:00 +02:00
										 |  |  |             case TransactionType::LIABILITY_CREDIT: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateLCDestination($array); | 
					
						
							| 
									
										
										
										
											2021-04-10 17:26:00 +02:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2019-06-23 05:53:01 +02:00
										 |  |  |             case TransactionType::RECONCILIATION: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateReconciliationDestination($array); | 
					
						
							| 
									
										
										
										
											2019-06-23 05:53:01 +02:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $result; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |      * @param array $array | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |      * | 
					
						
							|  |  |  |      * @return bool | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |     public function validateSource(array $array): bool | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |         Log::debug('Now in AccountValidator::validateSource()', $array); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |         switch ($this->transactionType) { | 
					
						
							|  |  |  |             default: | 
					
						
							| 
									
										
										
										
											2021-03-10 06:34:03 +01:00
										 |  |  |                 Log::error(sprintf('AccountValidator::validateSource cannot handle "%s", so it will do a generic check.', $this->transactionType)); | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateGenericSource($array); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |                 break; | 
					
						
							|  |  |  |             case TransactionType::WITHDRAWAL: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateWithdrawalSource($array); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |                 break; | 
					
						
							|  |  |  |             case TransactionType::DEPOSIT: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateDepositSource($array); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |                 break; | 
					
						
							|  |  |  |             case TransactionType::TRANSFER: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateTransferSource($array); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2019-06-16 13:16:04 +02:00
										 |  |  |             case TransactionType::OPENING_BALANCE: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateOBSource($array); | 
					
						
							| 
									
										
										
										
											2019-06-16 13:16:04 +02:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2021-04-10 17:26:00 +02:00
										 |  |  |             case TransactionType::LIABILITY_CREDIT: | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateLCSource($array); | 
					
						
							| 
									
										
										
										
											2021-04-10 17:26:00 +02:00
										 |  |  |                 break; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-23 05:53:01 +02:00
										 |  |  |             case TransactionType::RECONCILIATION: | 
					
						
							| 
									
										
										
										
											2019-12-20 07:15:40 +01:00
										 |  |  |                 Log::debug('Calling validateReconciliationSource'); | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |                 $result = $this->validateReconciliationSource($array); | 
					
						
							| 
									
										
										
										
											2019-06-23 05:53:01 +02:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $result; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * @param array $accountTypes | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return bool | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-03-21 08:11:14 +01:00
										 |  |  |     protected function canCreateTypes(array $accountTypes): bool | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-06-08 06:19:21 +02:00
										 |  |  |         Log::debug('Can we create any of these types?', $accountTypes); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |         /** @var string $accountType */ | 
					
						
							|  |  |  |         foreach ($accountTypes as $accountType) { | 
					
						
							|  |  |  |             if ($this->canCreateType($accountType)) { | 
					
						
							| 
									
										
										
										
											2019-06-08 06:19:21 +02:00
										 |  |  |                 Log::debug(sprintf('YES, we can create a %s', $accountType)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |                 return true; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-06-08 06:19:21 +02:00
										 |  |  |         Log::debug('NO, we cant create any of those.'); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-29 15:00:29 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @param string $accountType | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return bool | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function canCreateType(string $accountType): bool | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $canCreate = [AccountType::EXPENSE, AccountType::REVENUE, AccountType::INITIAL_BALANCE, AccountType::LIABILITY_CREDIT]; | 
					
						
							|  |  |  |         if (in_array($accountType, $canCreate, true)) { | 
					
						
							|  |  |  |             return true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |      * @param array $validTypes | 
					
						
							|  |  |  |      * @param array $data | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |      * | 
					
						
							|  |  |  |      * @return Account|null | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |     protected function findExistingAccount(array $validTypes, array $data): ?Account | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |         Log::debug('Now in findExistingAccount', $data); | 
					
						
							|  |  |  |         $accountId     = array_key_exists('id', $data) ? $data['id'] : null; | 
					
						
							|  |  |  |         $accountIban   = array_key_exists('iban', $data) ? $data['iban'] : null; | 
					
						
							|  |  |  |         $accountNumber = array_key_exists('number', $data) ? $data['number'] : null; | 
					
						
							|  |  |  |         $accountName   = array_key_exists('name', $data) ? $data['name'] : null; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |         // find by ID
 | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |         if (null !== $accountId && $accountId > 0) { | 
					
						
							| 
									
										
										
										
											2021-06-30 06:17:38 +02:00
										 |  |  |             $first = $this->accountRepository->find($accountId); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |             if ((null !== $first) && in_array($first->accountType->type, $validTypes, true)) { | 
					
						
							| 
									
										
										
										
											2019-08-16 21:38:35 +02:00
										 |  |  |                 return $first; | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |         // find by iban
 | 
					
						
							| 
									
										
										
										
											2022-01-07 19:24:14 +01:00
										 |  |  |         if (null !== $accountIban && '' !== (string) $accountIban) { | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |             $first = $this->accountRepository->findByIbanNull($accountIban, $validTypes); | 
					
						
							|  |  |  |             if ((null !== $first) && in_array($first->accountType->type, $validTypes, true)) { | 
					
						
							|  |  |  |                 return $first; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // find by number
 | 
					
						
							| 
									
										
										
										
											2022-01-07 19:24:14 +01:00
										 |  |  |         if (null !== $accountNumber && '' !== (string) $accountNumber) { | 
					
						
							| 
									
										
										
										
											2021-12-18 12:35:17 +01:00
										 |  |  |             $first = $this->accountRepository->findByAccountNumber($accountNumber, $validTypes); | 
					
						
							|  |  |  |             if ((null !== $first) && in_array($first->accountType->type, $validTypes, true)) { | 
					
						
							|  |  |  |                 return $first; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |         // find by name:
 | 
					
						
							| 
									
										
										
										
											2022-01-07 19:24:14 +01:00
										 |  |  |         if ('' !== (string) $accountName) { | 
					
						
							| 
									
										
										
										
											2019-08-16 21:38:35 +02:00
										 |  |  |             return $this->accountRepository->findByName($accountName, $validTypes); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-16 21:38:35 +02:00
										 |  |  |         return null; | 
					
						
							| 
									
										
										
										
											2019-03-31 13:36:49 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-17 12:09:03 +02:00
										 |  |  | } |