RVRNEXT-43 implement multiple payees in transaction controller
This commit is contained in:
parent
4e9c7f8c3c
commit
eda1415e86
@ -6,11 +6,13 @@ use RVR\Finance\ExchangeRateCalculator;
|
|||||||
use RVR\PersistentData\Model\Community;
|
use RVR\PersistentData\Model\Community;
|
||||||
use RVR\PersistentData\Model\CommunityMember;
|
use RVR\PersistentData\Model\CommunityMember;
|
||||||
use RVR\PersistentData\Model\Transaction;
|
use RVR\PersistentData\Model\Transaction;
|
||||||
|
use RVR\PersistentData\Model\TransactionPayee;
|
||||||
use RVR\PersistentData\Model\User;
|
use RVR\PersistentData\Model\User;
|
||||||
use RVR\Repository\CommunityMemberRepository;
|
use RVR\Repository\CommunityMemberRepository;
|
||||||
use RVR\Repository\CommunityRepository;
|
use RVR\Repository\CommunityRepository;
|
||||||
use RVR\Repository\CurrencyRepository;
|
use RVR\Repository\CurrencyRepository;
|
||||||
use RVR\Repository\TransactionRepository;
|
use RVR\Repository\TransactionRepository;
|
||||||
|
use RVR\Repository\TransactionPayeeRepository;
|
||||||
use RVR\Repository\EventRepository;
|
use RVR\Repository\EventRepository;
|
||||||
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
|
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
|
||||||
use SokoWeb\Interfaces\Authorization\ISecured;
|
use SokoWeb\Interfaces\Authorization\ISecured;
|
||||||
@ -28,6 +30,8 @@ class TransactionController implements IAuthenticationRequired, ISecured
|
|||||||
|
|
||||||
private TransactionRepository $transactionRepository;
|
private TransactionRepository $transactionRepository;
|
||||||
|
|
||||||
|
private TransactionPayeeRepository $transactionPayeeRepository;
|
||||||
|
|
||||||
private EventRepository $eventRepository;
|
private EventRepository $eventRepository;
|
||||||
|
|
||||||
private ?Community $community;
|
private ?Community $community;
|
||||||
@ -40,6 +44,7 @@ class TransactionController implements IAuthenticationRequired, ISecured
|
|||||||
$this->communityMemberRepository = new CommunityMemberRepository();
|
$this->communityMemberRepository = new CommunityMemberRepository();
|
||||||
$this->currencyRepository = new CurrencyRepository();
|
$this->currencyRepository = new CurrencyRepository();
|
||||||
$this->transactionRepository = new TransactionRepository();
|
$this->transactionRepository = new TransactionRepository();
|
||||||
|
$this->transactionPayeeRepository = new TransactionPayeeRepository();
|
||||||
$this->eventRepository = new EventRepository();
|
$this->eventRepository = new EventRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,16 +96,19 @@ class TransactionController implements IAuthenticationRequired, ISecured
|
|||||||
$currentPage,
|
$currentPage,
|
||||||
$itemsPerPage,
|
$itemsPerPage,
|
||||||
true,
|
true,
|
||||||
['currency', 'payer_user', 'payee_user']
|
['currency', 'payer_user']
|
||||||
) :
|
) :
|
||||||
$this->transactionRepository->getPagedByCommunity(
|
$this->transactionRepository->getPagedByCommunity(
|
||||||
$this->community,
|
$this->community,
|
||||||
$currentPage,
|
$currentPage,
|
||||||
$itemsPerPage,
|
$itemsPerPage,
|
||||||
true,
|
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', [
|
return new HtmlContent('communities/transactions', [
|
||||||
'community' => $this->community,
|
'community' => $this->community,
|
||||||
'event' => $event,
|
'event' => $event,
|
||||||
@ -108,7 +116,8 @@ class TransactionController implements IAuthenticationRequired, ISecured
|
|||||||
'pages' => ceil($numberOfTransactions / $itemsPerPage),
|
'pages' => ceil($numberOfTransactions / $itemsPerPage),
|
||||||
'currentPage' => $currentPage,
|
'currentPage' => $currentPage,
|
||||||
'numberOfTransactions' => $numberOfTransactions,
|
'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']);
|
Container::$persistentDataManager->loadRelationsFromDb($transaction, false, ['event']);
|
||||||
$event = $transaction->getEvent();
|
$event = $transaction->getEvent();
|
||||||
|
$payeeUserIds = [];
|
||||||
|
foreach ($this->transactionPayeeRepository->getAllByTransaction($transaction) as $payee) {
|
||||||
|
$payeeUserIds[] = $payee->getUserId();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$transaction = null;
|
$transaction = null;
|
||||||
$eventSlug = Container::$request->query('event');
|
$eventSlug = Container::$request->query('event');
|
||||||
@ -130,11 +143,13 @@ class TransactionController implements IAuthenticationRequired, ISecured
|
|||||||
} else {
|
} else {
|
||||||
$event = null;
|
$event = null;
|
||||||
}
|
}
|
||||||
|
$payeeUserIds = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HtmlContent('communities/transaction_edit', [
|
return new HtmlContent('communities/transaction_edit', [
|
||||||
'community' => $this->community,
|
'community' => $this->community,
|
||||||
'transaction' => $transaction,
|
'transaction' => $transaction,
|
||||||
|
'payeeUserIds' => $payeeUserIds,
|
||||||
'event' => $event,
|
'event' => $event,
|
||||||
'members' => $this->getMembers($this->community),
|
'members' => $this->getMembers($this->community),
|
||||||
'currencies' => $this->getCurrencies($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->setEventId(Container::$request->post('event_id') ?: null);
|
||||||
$transaction->setCurrencyId(Container::$request->post('currency_id'));
|
$transaction->setCurrencyId(Container::$request->post('currency_id'));
|
||||||
$transaction->setPayerUserId(Container::$request->post('payer_user_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->setDescription(Container::$request->post('description'));
|
||||||
$transaction->setSum(Container::$request->post('sum'));
|
$transaction->setSum(Container::$request->post('sum'));
|
||||||
$transaction->setTimeDate(new DateTime(Container::$request->post('time')));
|
$transaction->setTimeDate(new DateTime(Container::$request->post('time')));
|
||||||
Container::$persistentDataManager->saveToDb($transaction);
|
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]);
|
return new JsonContent(['success' => true]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteTransaction(): IContent
|
public function deleteTransaction(): IContent
|
||||||
{
|
{
|
||||||
$transaction = $this->transactionRepository->getById(Container::$request->query('transactionId'));
|
$transaction = $this->transactionRepository->getById(Container::$request->query('transactionId'));
|
||||||
|
|
||||||
|
foreach ($this->transactionPayeeRepository->getAllByTransaction($transaction) as $payee) {
|
||||||
|
Container::$persistentDataManager->deleteFromDb($payee);
|
||||||
|
}
|
||||||
|
|
||||||
Container::$persistentDataManager->deleteFromDb($transaction);
|
Container::$persistentDataManager->deleteFromDb($transaction);
|
||||||
|
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
|
Loading…
Reference in New Issue
Block a user