fix decay in old view and force using intval for all balance calculations

This commit is contained in:
Dario Rekowski on RockPI 2021-04-15 11:10:59 +00:00
parent 3e9552f1e8
commit 25d05ab539
3 changed files with 24 additions and 20 deletions

View File

@ -191,9 +191,12 @@ class StateBalancesController extends AppController
$current_state_balance = null;
$cursor = 0;
$transactions_reversed = array_reverse($transactions);
$decay_transactions = [];
$maxI = count($transactions_reversed);
foreach($transactions_reversed as $i => $transaction) {
if(!isset($transaction['transaction_id'])) {
//echo "missing transaction<br>";
continue;
}
$transaction_id = $transaction['transaction_id'];
@ -219,17 +222,11 @@ class StateBalancesController extends AppController
$state_balance->amount = $prev->balance;
$state_balance->record_date = $prev->balance_date;
$diff_amount = $state_balance->partDecay($current->balance_date);
/* echo "prev date: $prev->balance_date, current date: $current->balance_date, interval: ";
var_dump($interval);
echo "<br>";
echo "prev balance: $prev->balance<br>diff: $diff_amount<br>";
echo "current balance: $current->balance<br>";
*
*/
//echo $interval->format('%R%a days');
$decay_transaction = [
'type' => 'decay',
'balance' => -($prev->balance - $diff_amount),
'balance' => -intval($prev->balance - $diff_amount),
'decay_duration' => $interval->format('%a days, %H hours, %I minutes, %S seconds'),
'memo' => ''
];
@ -237,8 +234,9 @@ class StateBalancesController extends AppController
}
if($decay_transaction) {
array_splice($transactions_reversed, $i + $cursor, 0, [$decay_transaction]);
$cursor++;
$decay_transactions[] = $decay_transaction;
//array_splice($transactions_reversed, $i + $cursor, 0, [$decay_transaction]);
//$cursor++;
}
if($i == $maxI-1) {
$stateUserTransaction = $stateUserTransactionsTable
@ -248,18 +246,24 @@ class StateBalancesController extends AppController
//var_dump($stateUserTransaction);
$state_balance->amount = $stateUserTransaction->balance;
$state_balance->record_date = $stateUserTransaction->balance_date;
$transactions_reversed[] = [
$decay_transactions[] = [
//$transactions_reversed[] = [
'type' => 'decay',
'balance' => -($stateUserTransaction->balance - $state_balance->decay),
'balance' => -intval($stateUserTransaction->balance - $state_balance->decay),
'decay_duration' => $stateUserTransaction->balance_date->timeAgoInWords(),
'memo' => ''
];
}
}
$final_transactions = [];
foreach($transactions_reversed as $i => $transaction) {
$final_transactions[] = $transaction;
$final_transactions[] = $decay_transactions[$i];
}
// for debugging
$calculated_balance = 0;
foreach($transactions_reversed as $tr) {
foreach($final_transactions as $tr) {
if($tr['type'] == 'send') {
$calculated_balance -= intval($tr['balance']);
} else {
@ -268,7 +272,7 @@ class StateBalancesController extends AppController
}
$this->set('calculated_balance', $calculated_balance);
$this->set('transactions', array_reverse($transactions_reversed));
$this->set('transactions', array_reverse($final_transactions));
$this->set('transactionExecutingCount', $session->read('Transactions.executing'));
$this->set('balance', $session->read('StateUser.balance'));
$this->set('timeUsed', microtime(true) - $startTime);

View File

@ -64,7 +64,7 @@ class StateBalance extends Entity
return $this->amount;
}
//return $this->amount;
return $this->amount * pow(0.99999997802044727, $decay_duration);
return intval($this->amount * pow(0.99999997802044727, $decay_duration));
}
public function partDecay($target_date)
@ -74,7 +74,7 @@ class StateBalance extends Entity
return $this->amount;
}
//return 0;
return $this->amount * pow(0.99999997802044727, $decay_duration);
return intval($this->amount * pow(0.99999997802044727, $decay_duration));
}
public function decayDuration($target_date)

View File

@ -195,12 +195,12 @@ class StateBalancesTable extends Table
if($transaction->transaction_type_id == 1) { // creation
$temp = $transaction->transaction_creations[0];
$balance_temp = $this->newEntity();
/*$balance_temp = $this->newEntity();
$balance_temp->amount = $temp->amount;
$balance_temp->record_date = $temp->target_date;
$amount = $balance_temp->partDecay($transaction->received);
$amount_date = $transaction->received;
*/
$amount = intval($temp->amount);//$balance_temp->partDecay($transaction->received);
$amount_date = $temp->target_date;
//$amount_date =
} else if($transaction->transaction_type_id == 2) { // transfer