diff --git a/community_server/src/Controller/StateBalancesController.php b/community_server/src/Controller/StateBalancesController.php index 9357abddd..4a0a02cf1 100644 --- a/community_server/src/Controller/StateBalancesController.php +++ b/community_server/src/Controller/StateBalancesController.php @@ -200,6 +200,7 @@ class StateBalancesController extends AppController continue; } $transaction_id = $transaction['transaction_id']; + //echo "transaction id: $transaction_id
"; $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 . "
"; $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)) . "
"; + $decay_transaction = [ 'type' => 'decay', 'balance' => -intval($prev->balance - $diff_amount), 'decay_duration' => $interval->format('%a days, %H hours, %I minutes, %S seconds'), diff --git a/community_server/src/Model/Table/StateBalancesTable.php b/community_server/src/Model/Table/StateBalancesTable.php index 0aac39f66..a80bdbc6e 100644 --- a/community_server/src/Model/Table/StateBalancesTable.php +++ b/community_server/src/Model/Table/StateBalancesTable.php @@ -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 . "
"; $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 . "
"; + $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; diff --git a/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php b/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php index df3ff8512..cfa6bebc4 100644 --- a/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php +++ b/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php @@ -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()