update decay calculation once again

This commit is contained in:
Dario Rekowski on RockPI 2021-04-15 11:54:50 +00:00
parent 0ba6403817
commit 91f6e04dc5
3 changed files with 19 additions and 9 deletions

View File

@ -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'),

View File

@ -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;

View File

@ -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()