From 8413ca56f7e5b3125ab89cfd86f3f6d9d6382593 Mon Sep 17 00:00:00 2001 From: Dario Rekowski on RockPI Date: Wed, 7 Jul 2021 12:48:58 +0000 Subject: [PATCH 1/4] flag decay start blog with additional field in decay --- .../src/Model/Table/TransactionsTable.php | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/community_server/src/Model/Table/TransactionsTable.php b/community_server/src/Model/Table/TransactionsTable.php index 8fcd81489..3a7555ba8 100644 --- a/community_server/src/Model/Table/TransactionsTable.php +++ b/community_server/src/Model/Table/TransactionsTable.php @@ -138,6 +138,7 @@ class TransactionsTable extends Table $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances'); + $transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); $transaction_ids = []; $involved_user_ids = []; @@ -162,11 +163,15 @@ class TransactionsTable extends Table $state_balance = $stateBalancesTable->newEntity(); $final_transactions = []; + $decay_start_transaction = $transactionsTable->find()->where(['transaction_type_id' => 9]); + $decay_start_transaction_id = 0; + if($decay_start_transaction->count()) { + $decay_start_transaction_id = $decay_start_transaction->first()->id; + } + $decay_start_time = $stateBalancesTable->getDecayStartDateCached()->getTimestamp(); foreach($stateUserTransactions as $i => $su_transaction) { - - // sender or receiver when user has sended money // group name if creation // type: gesendet / empfangen / geschöpft @@ -187,7 +192,8 @@ class TransactionsTable extends Table } if($prev) { - if($prev->balance > 0) { + if($prev->balance > 0) + { $current = $su_transaction; $calculated_decay = $stateBalancesTable->calculateDecay($prev->balance, $prev->balance_date, $current->balance_date, true); $balance = floatval($prev->balance - $calculated_decay['balance']); @@ -199,7 +205,19 @@ class TransactionsTable extends Table 'decay_duration' => $calculated_decay['interval']->format('%a days, %H hours, %I minutes, %S seconds'), 'decay_start' => $calculated_decay['start_date'], 'decay_end' => $calculated_decay['end_date'] - ]; + ]; + if($prev->transaction_id < $decay_start_transaction_id && + $current->transaction_id > $decay_start_transaction_id) { + $final_transaction['decay']['decay_start_block'] = $decay_start_time; + } + // hint: use transaction id + /*if($calculated_decay['start_date'] < $decay_start_time && $calculated_decay['end_date'] > $decay_start_time) { + $final_transaction['decay']['decay_start_block'] = $decay_start_time; + } else { + echo "start block: " . $decay_start_time . "
"; + echo "start date: " . $calculated_decay['start_date'] . "
"; + echo "end date: " . $calculated_decay['end_date']. "
"; + }*/ } } } From 1dadb58086fc2e70711361dc677c148be51ff05c Mon Sep 17 00:00:00 2001 From: Dario Rekowski on RockPI Date: Wed, 7 Jul 2021 13:06:12 +0000 Subject: [PATCH 2/4] fix bug with missing decay in last transaction --- .../src/Controller/AppRequestsController.php | 11 +++++++++-- .../src/Model/Table/TransactionsTable.php | 7 ++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/community_server/src/Controller/AppRequestsController.php b/community_server/src/Controller/AppRequestsController.php index 018e0af49..43242af84 100644 --- a/community_server/src/Controller/AppRequestsController.php +++ b/community_server/src/Controller/AppRequestsController.php @@ -25,7 +25,7 @@ class AppRequestsController extends AppController $this->loadComponent('GradidoNumber'); //$this->loadComponent('JsonRpcRequestClient'); //$this->Auth->allow(['add', 'edit']); - $this->Auth->allow(['index', 'sendCoins', 'createCoins', 'getBalance', 'listTransactions']); + $this->Auth->allow(['index', 'sendCoins', 'createCoins', 'getBalance', 'listTransactions', 'getDecayStartBlock']); } @@ -335,11 +335,18 @@ class AppRequestsController extends AppController $limit = $count; $offset = 0; + $skip_first_transaction = false; if($page == 1) { $limit--; } else { $offset = (( $page - 1 ) * $count) - 1; } + if($offset) { + // move cursor one step backwards to able to load one transaction previous last which will be shown for decay calculation + $offset--; + $limit++; + $skip_first_transaction = true; + } $stateUserTransactionsQuery = $stateUserTransactionsTable ->find() @@ -362,7 +369,7 @@ class AppRequestsController extends AppController $transactions_from_db = array_reverse($transactions_from_db); } - $transactions = $transactionsTable->listTransactionsHumanReadable($transactions_from_db, $user, $decay); + $transactions = $transactionsTable->listTransactionsHumanReadable($transactions_from_db, $user, $decay, $skip_first_transaction); if($orderDirection == 'DESC') { $transactions = array_reverse($transactions); diff --git a/community_server/src/Model/Table/TransactionsTable.php b/community_server/src/Model/Table/TransactionsTable.php index 3a7555ba8..925f6f31e 100644 --- a/community_server/src/Model/Table/TransactionsTable.php +++ b/community_server/src/Model/Table/TransactionsTable.php @@ -133,7 +133,7 @@ class TransactionsTable extends Table } - public function listTransactionsHumanReadable($stateUserTransactions, array $user, $decay = true) + public function listTransactionsHumanReadable($stateUserTransactions, array $user, $decay = true, $skip_first_transaction = false) { $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers'); @@ -267,8 +267,9 @@ class TransactionsTable extends Table $final_transaction['name'] = $otherUser->first_name . ' ' . $otherUser->last_name; $final_transaction['email'] = $otherUser->email; } - - $final_transactions[] = $final_transaction; + if($i > 0 || !$skip_first_transaction) { + $final_transactions[] = $final_transaction; + } if($i == $stateUserTransactionsCount-1 && $decay) { $now = new FrozenTime(); From f78194a7672cc38d4b960b215ed52aff6880fe52 Mon Sep 17 00:00:00 2001 From: Dario Rekowski on RockPI Date: Wed, 7 Jul 2021 16:03:27 +0000 Subject: [PATCH 3/4] fix again --- community_server/src/Controller/AppRequestsController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/community_server/src/Controller/AppRequestsController.php b/community_server/src/Controller/AppRequestsController.php index 43242af84..4b81b8ac9 100644 --- a/community_server/src/Controller/AppRequestsController.php +++ b/community_server/src/Controller/AppRequestsController.php @@ -341,11 +341,14 @@ class AppRequestsController extends AppController } else { $offset = (( $page - 1 ) * $count) - 1; } - if($offset) { + if($offset && $orderDirection == 'ASC') { // move cursor one step backwards to able to load one transaction previous last which will be shown for decay calculation $offset--; $limit++; $skip_first_transaction = true; + } else if($orderDirection == 'DESC') { + $limit++; + $skip_first_transaction = true; } $stateUserTransactionsQuery = $stateUserTransactionsTable From 7f65e131cc8a749a3254971985683a481a742783 Mon Sep 17 00:00:00 2001 From: Dario Rekowski on RockPI Date: Wed, 7 Jul 2021 16:06:48 +0000 Subject: [PATCH 4/4] update test --- .../Controller/AppRequestControllerTest.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php b/community_server/tests/TestCase/Controller/AppRequestControllerTest.php index 5aeb64d8b..5ee1f3c53 100644 --- a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php +++ b/community_server/tests/TestCase/Controller/AppRequestControllerTest.php @@ -205,11 +205,12 @@ class AppRequestControllerTest extends TestCase "transaction_id": 7, "date": "2021-04-14T09:02:28+00:00", "memo": "test time 3", - "decay": { + "decay": { "balance": 6, "decay_duration": "0 days, 00 hours, 00 minutes, 28 seconds", "decay_start": 1618390920, - "decay_end": 1618390948 + "decay_end": 1618390948, + "decay_start_block": 1618390920 }, "balance": 100000, "type": "receive", @@ -237,7 +238,7 @@ class AppRequestControllerTest extends TestCase "transaction_id": 9, "date": "2021-04-14T09:31:28+00:00", "memo": "test login crash", - "decay": { + "decay": { "balance": 33, "decay_duration": "0 days, 00 hours, 02 minutes, 42 seconds", "decay_start": 1618392526, @@ -251,20 +252,20 @@ class AppRequestControllerTest extends TestCase }, { "type": "decay", - "balance": 1222493, + "balance": 1345726, "decay_duration": "on 14.04.21", "decay_start": 1618392688, - "decay_end": 1624956464, + "decay_end": 1625673853, "memo": "" } ], "transactionExecutingCount": 0, "count": 7, "gdtSum": 180000, - "timeUsed": 0.6441609859466553, - "decay_date": "2021-06-29T08:47:44+00:00", + "timeUsed": 0.44154810905456545, + "decay_date": "2021-07-07T16:04:13+00:00", "balance": 9099652, - "decay": 7877159 + "decay": 7753926 }'; $this->getAndParse('/api/list-transactions/', json_decode($expectedResult, true)); }