mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
update transaction deliver code for new decay calculation
This commit is contained in:
parent
25d05ab539
commit
0ba6403817
@ -63,7 +63,6 @@ class TransactionBase {
|
||||
|
||||
|
||||
protected function updateStateBalance($stateUserId, $addAmountCent, $recordDate) {
|
||||
$finalBalance = 0;
|
||||
$stateBalancesTable = self::getTable('stateBalances');
|
||||
$stateBalanceQuery = $stateBalancesTable
|
||||
->find('all')
|
||||
@ -92,7 +91,7 @@ class TransactionBase {
|
||||
return $finalBalance;
|
||||
}
|
||||
|
||||
protected function addStateUserTransaction($stateUserId, $transactionId, $transactionTypeId, $balance) {
|
||||
protected function addStateUserTransaction($stateUserId, $transactionId, $transactionTypeId, $balance, $balance_date) {
|
||||
$stateUserTransactionTable = self::getTable('state_user_transactions');
|
||||
$stateUserTransactions = $stateUserTransactionTable
|
||||
->find('all')
|
||||
@ -116,12 +115,24 @@ class TransactionBase {
|
||||
$entity->transaction_id = $transactionId;
|
||||
$entity->transaction_type_id = $transactionTypeId;
|
||||
$entity->balance = $balance;
|
||||
$entity->balance_date = $balance_date;
|
||||
|
||||
if(!$stateUserTransactionTable->save($entity)) {
|
||||
$errors = $entity->getErrors();
|
||||
$this->addError('TransactionBase::addStateUserTransaction', 'error saving state user balance with: ' . json_encode($errors));
|
||||
return false;
|
||||
}
|
||||
// set balance from all state_user_transactions which came after (sorted by balance_date) to 0
|
||||
// because creation transaction can be added before other transaction which already happend
|
||||
$state_user_transactions = $stateUserTransactionTable
|
||||
->find()
|
||||
->select(['id', 'balance'])
|
||||
->where(['state_user_id' => $stateUserId, 'balance_date >' => $balance_date])
|
||||
;
|
||||
foreach($state_user_transactions as $t) {
|
||||
$t->balance = 0;
|
||||
}
|
||||
$stateUserTransactionTable->saveMany($state_user_transactions);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -7,6 +7,7 @@ namespace Model\Transactions;
|
||||
use Cake\ORM\TableRegistry;
|
||||
use Cake\Core\Configure;
|
||||
use Cake\Mailer\Email;
|
||||
use Cake\I18n\FrozenTime;
|
||||
use Cake\I18n\FrozenDate;
|
||||
|
||||
|
||||
@ -153,24 +154,20 @@ class TransactionCreation extends TransactionBase {
|
||||
$transactionCreationEntity->state_user_id = $receiverUserId;
|
||||
$transactionCreationEntity->amount = $this->getAmount();
|
||||
$transactionCreationEntity->target_date = $this->protoTransactionCreation->getTargetDate()->getSeconds();
|
||||
|
||||
$target_date = new FrozenTime($transactionCreationEntity->target_date);
|
||||
if(!$this->transactionCreationsTable->save($transactionCreationEntity)) {
|
||||
$this->addError('TransactionCreation::save', 'error saving transactionCreation with errors: ' . json_encode($transactionCreationEntity->getErrors()));
|
||||
return false;
|
||||
}
|
||||
|
||||
// update state balance
|
||||
$final_balance = $this->updateStateBalance($receiverUserId, $this->getAmount(), $transactionCreationEntity->target_date);
|
||||
$final_balance = $this->updateStateBalance($receiverUserId, $this->getAmount(), $target_date);
|
||||
if(false === $final_balance) {
|
||||
return false;
|
||||
}
|
||||
$target_date = new FrozenDate($transactionCreationEntity->target_date);
|
||||
$stateBalancesTable = self::getTable('stateBalances');
|
||||
$state_balance = $stateBalancesTable->newEntity();
|
||||
$state_balance->amount = $this->getAmount();
|
||||
$state_balance->record_date = $target_date;
|
||||
|
||||
// decay is a virtual field which is calculated from amount and now() - record_date
|
||||
if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 1, $state_balance->decay)) {
|
||||
if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 1, $this->getAmount(), $target_date)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -164,10 +164,10 @@ class TransactionTransfer extends TransactionBase {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!$this->addStateUserTransaction($senderUserId, $transaction_id, 2, $senderAmount->getAmount())) {
|
||||
if(!$this->addStateUserTransaction($senderUserId, $transaction_id, 2, $senderAmount->getAmount(), $received)) {
|
||||
return false;
|
||||
}
|
||||
if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 2, -$senderAmount->getAmount())) {
|
||||
if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 2, -$senderAmount->getAmount(), $received)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user