feature/RVRNEXT-43-split-transactions #59
@ -6,11 +6,13 @@ use RVR\Finance\ExchangeRateCalculator;
 | 
			
		||||
use RVR\PersistentData\Model\Community;
 | 
			
		||||
use RVR\PersistentData\Model\CommunityMember;
 | 
			
		||||
use RVR\PersistentData\Model\Transaction;
 | 
			
		||||
use RVR\PersistentData\Model\TransactionPayee;
 | 
			
		||||
use RVR\PersistentData\Model\User;
 | 
			
		||||
use RVR\Repository\CommunityMemberRepository;
 | 
			
		||||
use RVR\Repository\CommunityRepository;
 | 
			
		||||
use RVR\Repository\CurrencyRepository;
 | 
			
		||||
use RVR\Repository\TransactionRepository;
 | 
			
		||||
use RVR\Repository\TransactionPayeeRepository;
 | 
			
		||||
use RVR\Repository\EventRepository;
 | 
			
		||||
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
 | 
			
		||||
use SokoWeb\Interfaces\Authorization\ISecured;
 | 
			
		||||
@ -28,6 +30,8 @@ class TransactionController implements IAuthenticationRequired, ISecured
 | 
			
		||||
 | 
			
		||||
    private TransactionRepository $transactionRepository;
 | 
			
		||||
 | 
			
		||||
    private TransactionPayeeRepository $transactionPayeeRepository;
 | 
			
		||||
 | 
			
		||||
    private EventRepository $eventRepository;
 | 
			
		||||
 | 
			
		||||
    private ?Community $community;
 | 
			
		||||
@ -40,6 +44,7 @@ class TransactionController implements IAuthenticationRequired, ISecured
 | 
			
		||||
        $this->communityMemberRepository = new CommunityMemberRepository();
 | 
			
		||||
        $this->currencyRepository = new CurrencyRepository();
 | 
			
		||||
        $this->transactionRepository = new TransactionRepository();
 | 
			
		||||
        $this->transactionPayeeRepository = new TransactionPayeeRepository();
 | 
			
		||||
        $this->eventRepository = new EventRepository();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -91,16 +96,19 @@ class TransactionController implements IAuthenticationRequired, ISecured
 | 
			
		||||
                $currentPage,
 | 
			
		||||
                $itemsPerPage,
 | 
			
		||||
                true,
 | 
			
		||||
                ['currency', 'payer_user', 'payee_user']
 | 
			
		||||
                ['currency', 'payer_user']
 | 
			
		||||
            ) :
 | 
			
		||||
            $this->transactionRepository->getPagedByCommunity(
 | 
			
		||||
                $this->community,
 | 
			
		||||
                $currentPage,
 | 
			
		||||
                $itemsPerPage,
 | 
			
		||||
                true,
 | 
			
		||||
                ['event', 'currency', 'payer_user', 'payee_user']
 | 
			
		||||
                ['event', 'currency', 'payer_user']
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
        $transactions = iterator_to_array($transactions);
 | 
			
		||||
        Container::$persistentDataManager->loadMultiRelationsFromDb($transactions, 'payees', true, ['user']);
 | 
			
		||||
 | 
			
		||||
        return new HtmlContent('communities/transactions', [
 | 
			
		||||
            'community' => $this->community,
 | 
			
		||||
            'event' => $event,
 | 
			
		||||
@ -108,7 +116,8 @@ class TransactionController implements IAuthenticationRequired, ISecured
 | 
			
		||||
            'pages' => ceil($numberOfTransactions / $itemsPerPage),
 | 
			
		||||
            'currentPage' => $currentPage,
 | 
			
		||||
            'numberOfTransactions' => $numberOfTransactions,
 | 
			
		||||
            'transactions' => $transactions
 | 
			
		||||
            'transactions' => $transactions,
 | 
			
		||||
            'members' => $this->getMembers($this->community)
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -122,6 +131,10 @@ class TransactionController implements IAuthenticationRequired, ISecured
 | 
			
		||||
            }
 | 
			
		||||
            Container::$persistentDataManager->loadRelationsFromDb($transaction, false, ['event']);
 | 
			
		||||
            $event = $transaction->getEvent();
 | 
			
		||||
            $payeeUserIds = [];
 | 
			
		||||
            foreach ($this->transactionPayeeRepository->getAllByTransaction($transaction) as $payee) {
 | 
			
		||||
                $payeeUserIds[] = $payee->getUserId();
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            $transaction = null;
 | 
			
		||||
            $eventSlug = Container::$request->query('event');
 | 
			
		||||
@ -130,11 +143,13 @@ class TransactionController implements IAuthenticationRequired, ISecured
 | 
			
		||||
            } else {
 | 
			
		||||
                $event = null;
 | 
			
		||||
            }
 | 
			
		||||
            $payeeUserIds = [];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return new HtmlContent('communities/transaction_edit', [
 | 
			
		||||
            'community' => $this->community,
 | 
			
		||||
            'transaction' => $transaction,
 | 
			
		||||
            'payeeUserIds' => $payeeUserIds,
 | 
			
		||||
            'event' => $event,
 | 
			
		||||
            'members' => $this->getMembers($this->community),
 | 
			
		||||
            'currencies' => $this->getCurrencies($this->community)
 | 
			
		||||
@ -154,18 +169,48 @@ class TransactionController implements IAuthenticationRequired, ISecured
 | 
			
		||||
        $transaction->setEventId(Container::$request->post('event_id') ?: null);
 | 
			
		||||
        $transaction->setCurrencyId(Container::$request->post('currency_id'));
 | 
			
		||||
        $transaction->setPayerUserId(Container::$request->post('payer_user_id'));
 | 
			
		||||
        $transaction->setPayeeUserId(Container::$request->post('payee_user_id') ?: null);
 | 
			
		||||
        $transaction->setDescription(Container::$request->post('description'));
 | 
			
		||||
        $transaction->setSum(Container::$request->post('sum'));
 | 
			
		||||
        $transaction->setTimeDate(new DateTime(Container::$request->post('time')));
 | 
			
		||||
        Container::$persistentDataManager->saveToDb($transaction);
 | 
			
		||||
 | 
			
		||||
        $payeeUserIds = array_unique(Container::$request->post('payee_user_ids'));
 | 
			
		||||
        if (count($payeeUserIds) === $this->communityMemberRepository->countAllByCommunity($this->community)) {
 | 
			
		||||
            $payeeUserIds = [];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $currentPayees = [];
 | 
			
		||||
        foreach ($payeeUserIds as $payeeUserId) {
 | 
			
		||||
            $payee = new TransactionPayee();
 | 
			
		||||
            $payee->setTransaction($transaction);
 | 
			
		||||
            $payee->setUserId((int)$payeeUserId);
 | 
			
		||||
            $currentPayees[(int)$payeeUserId] = $payee;
 | 
			
		||||
        }
 | 
			
		||||
        $existingPayees = [];
 | 
			
		||||
        if ($transactionId) {
 | 
			
		||||
            foreach ($this->transactionPayeeRepository->getAllByTransaction($transaction) as $payee) {
 | 
			
		||||
                $existingPayees[$payee->getUserId()] = $payee;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        foreach (array_diff_key($currentPayees, $existingPayees) as $newPayee) {
 | 
			
		||||
            Container::$persistentDataManager->saveToDb($newPayee);
 | 
			
		||||
        }
 | 
			
		||||
        foreach (array_diff_key($existingPayees, $currentPayees) as $deletedPayee) {
 | 
			
		||||
            Container::$persistentDataManager->deleteFromDb($deletedPayee);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return new JsonContent(['success' => true]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function deleteTransaction(): IContent
 | 
			
		||||
    {
 | 
			
		||||
        $transaction = $this->transactionRepository->getById(Container::$request->query('transactionId'));
 | 
			
		||||
 | 
			
		||||
        foreach ($this->transactionPayeeRepository->getAllByTransaction($transaction) as $payee) {
 | 
			
		||||
            Container::$persistentDataManager->deleteFromDb($payee);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Container::$persistentDataManager->deleteFromDb($transaction);
 | 
			
		||||
 | 
			
		||||
        return new JsonContent(['success' => true]);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user