mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
update decay calculation once again
This commit is contained in:
parent
0ba6403817
commit
91f6e04dc5
@ -200,6 +200,7 @@ class StateBalancesController extends AppController
|
||||
continue;
|
||||
}
|
||||
$transaction_id = $transaction['transaction_id'];
|
||||
//echo "transaction id: $transaction_id <br>";
|
||||
$decay_transaction = NULL;
|
||||
$state_balance = $this->StateBalances->newEntity();
|
||||
|
||||
@ -211,20 +212,22 @@ class StateBalancesController extends AppController
|
||||
'transaction_id IN' => [$transaction_id, $prev_transaction['transaction_id']],
|
||||
'state_user_id' => $user['id']
|
||||
])
|
||||
->order(['transaction_id ASC'])
|
||||
->order(['balance_date ASC'])
|
||||
->toArray();
|
||||
|
||||
$prev = $stateUserTransactions[0];
|
||||
if($prev->balance > 0) {
|
||||
// var_dump($stateUserTransactions);
|
||||
$current = $stateUserTransactions[1];
|
||||
//echo "decay between " . $prev->transaction_id . " and " . $current->transaction_id . "<br>";
|
||||
$interval = $current->balance_date->diff($prev->balance_date);
|
||||
$state_balance->amount = $prev->balance;
|
||||
$state_balance->record_date = $prev->balance_date;
|
||||
$diff_amount = $state_balance->partDecay($current->balance_date);
|
||||
|
||||
//echo $interval->format('%R%a days');
|
||||
$decay_transaction = [
|
||||
//echo "prev balance: " . $prev->balance . ", diff_amount: $diff_amount, summe: " . (-intval($prev->balance - $diff_amount)) . "<br>";
|
||||
$decay_transaction = [
|
||||
'type' => 'decay',
|
||||
'balance' => -intval($prev->balance - $diff_amount),
|
||||
'decay_duration' => $interval->format('%a days, %H hours, %I minutes, %S seconds'),
|
||||
|
||||
@ -102,7 +102,7 @@ class StateBalancesTable extends Table
|
||||
$state_user_transactions = $stateUserTransactionsTable
|
||||
->find()
|
||||
->where(['state_user_id' => $stateUserId])
|
||||
->order(['transaction_id ASC'])
|
||||
->order(['balance_date ASC'])
|
||||
//->contain(false);
|
||||
;
|
||||
|
||||
@ -183,12 +183,18 @@ class StateBalancesTable extends Table
|
||||
->where(['id IN' => array_keys($transaction_ids)])
|
||||
->contain(['TransactionCreations', 'TransactionSendCoins']);
|
||||
|
||||
$transactions_indiced = [];
|
||||
foreach($transactions as $transaction) {
|
||||
$transactions_indiced[$transaction->id] = $transaction;
|
||||
}
|
||||
$balance_cursor = $this->newEntity();
|
||||
$i = 0;
|
||||
foreach($transactions as $transaction) {
|
||||
foreach($state_user_transactions_array as $state_user_transaction) {
|
||||
$transaction = $transactions_indiced[$state_user_transaction->transaction_id];
|
||||
if($transaction->transaction_type_id > 2) {
|
||||
continue;
|
||||
}
|
||||
//echo "transaction id: ".$transaction->id . "<br>";
|
||||
$amount_date = null;
|
||||
$amount = 0;
|
||||
|
||||
@ -219,7 +225,8 @@ class StateBalancesTable extends Table
|
||||
} else {
|
||||
$balance_cursor->amount = $balance_cursor->partDecay($amount_date) + $amount;
|
||||
}
|
||||
|
||||
//echo "new balance: " . $balance_cursor->amount . "<br>";
|
||||
|
||||
$balance_cursor->record_date = $amount_date;
|
||||
$state_user_transaction_index = $transaction_ids[$transaction->id];
|
||||
$state_user_transactions_array[$state_user_transaction_index]->balance = $balance_cursor->amount;
|
||||
|
||||
@ -90,8 +90,8 @@ class StateBalancesControllerTest extends TestCase
|
||||
$response = $this->getAndParseWithoutCompare('/state-balances/ajaxGetBalance/' . $session_id);
|
||||
|
||||
$this->assertEquals('success', $response->state);
|
||||
$this->assertEquals(7321828, $response->balance);
|
||||
$this->assertLessThan(7321828, $response->decay);
|
||||
$this->assertEquals(7321825, $response->balance);
|
||||
$this->assertLessThan(7321825, $response->decay);
|
||||
|
||||
}
|
||||
|
||||
@ -127,8 +127,8 @@ class StateBalancesControllerTest extends TestCase
|
||||
|
||||
$response = $this->getAndParseWithoutCompare('/state-balances/ajaxGetBalance/' . $session_id);
|
||||
$this->assertEquals('success', $response->state);
|
||||
$this->assertEquals(9112595, $response->balance);
|
||||
$this->assertLessThan(9112595, $response->decay);
|
||||
$this->assertEquals(9112592, $response->balance);
|
||||
$this->assertLessThan(9112592, $response->decay);
|
||||
}
|
||||
|
||||
public function testAjaxGetBalanceInvalidSession()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user