mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-12 15:35:15 +00:00
New stuff for encrypted amounts.
This commit is contained in:
@@ -74,9 +74,7 @@ class ReportQuery implements ReportQueryInterface
|
|||||||
if ($journal->amount != 0) {
|
if ($journal->amount != 0) {
|
||||||
return $journal;
|
return $journal;
|
||||||
}
|
}
|
||||||
// @codeCoverageIgnoreStart
|
} // @codeCoverageIgnore
|
||||||
}
|
|
||||||
// @codeCoverageIgnoreEnd
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
@@ -193,9 +191,7 @@ class ReportQuery implements ReportQueryInterface
|
|||||||
if ($journal->amount != 0) {
|
if ($journal->amount != 0) {
|
||||||
return $journal;
|
return $journal;
|
||||||
}
|
}
|
||||||
// @codeCoverageIgnoreStart
|
} // @codeCoverageIgnore
|
||||||
}
|
|
||||||
// @codeCoverageIgnoreEnd
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
|
@@ -149,15 +149,12 @@ class Cleanup
|
|||||||
unset($set, $entry, $metadata);
|
unset($set, $entry, $metadata);
|
||||||
|
|
||||||
//encrypt budget limit amount
|
//encrypt budget limit amount
|
||||||
|
|
||||||
//encrypt limit repetition amount
|
//encrypt limit repetition amount
|
||||||
//encrypt piggy bank event amount
|
//encrypt piggy bank event amount
|
||||||
//encrypt piggy bank repetition currentamount
|
//encrypt piggy bank repetition currentamount
|
||||||
//encrypt piggy bank targetamount
|
//encrypt piggy bank targetamount
|
||||||
|
|
||||||
//encrypt preference name (add field)
|
//encrypt preference name (add field)
|
||||||
//encrypt preference data (add field)
|
//encrypt preference data (add field)
|
||||||
|
|
||||||
//encrypt transaction amount
|
//encrypt transaction amount
|
||||||
}
|
}
|
||||||
if ($count == 0 && $run) {
|
if ($count == 0 && $run) {
|
||||||
|
@@ -150,6 +150,23 @@ class Account extends Model
|
|||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $value
|
||||||
|
*
|
||||||
|
* @return float|int
|
||||||
|
*/
|
||||||
|
public function getVirtualBalanceAttribute($value)
|
||||||
|
{
|
||||||
|
if (is_null($this->virtual_balance_encrypted)) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
$value = intval(Crypt::decrypt($this->virtual_balance_encrypted));
|
||||||
|
$value = $value / 100;
|
||||||
|
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||||
@@ -203,6 +220,17 @@ class Account extends Model
|
|||||||
$this->attributes['encrypted'] = true;
|
$this->attributes['encrypted'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $value
|
||||||
|
*/
|
||||||
|
public function setVirtualBalanceAttribute($value)
|
||||||
|
{
|
||||||
|
// save in cents:
|
||||||
|
$value = intval($value * 100);
|
||||||
|
$this->attributes['virtual_balance_encrypted'] = Crypt::encrypt($value);
|
||||||
|
$this->attributes['virtual_balance'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||||
|
@@ -14,6 +14,38 @@ class Bill extends Model
|
|||||||
protected $fillable
|
protected $fillable
|
||||||
= ['name', 'match', 'amount_min', 'match_encrypted', 'name_encrypted', 'user_id', 'amount_max', 'date', 'repeat_freq', 'skip', 'automatch', 'active',];
|
= ['name', 'match', 'amount_min', 'match_encrypted', 'name_encrypted', 'user_id', 'amount_max', 'date', 'repeat_freq', 'skip', 'automatch', 'active',];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $value
|
||||||
|
*
|
||||||
|
* @return float|int
|
||||||
|
*/
|
||||||
|
public function getAmountMaxAttribute($value)
|
||||||
|
{
|
||||||
|
if (is_null($this->amount_max_encrypted)) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
$value = intval(Crypt::decrypt($this->amount_max_encrypted));
|
||||||
|
$value = $value / 100;
|
||||||
|
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $value
|
||||||
|
*
|
||||||
|
* @return float|int
|
||||||
|
*/
|
||||||
|
public function getAmountMinAttribute($value)
|
||||||
|
{
|
||||||
|
if (is_null($this->amount_min_encrypted)) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
$value = intval(Crypt::decrypt($this->amount_min_encrypted));
|
||||||
|
$value = $value / 100;
|
||||||
|
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
@@ -56,6 +88,28 @@ class Bill extends Model
|
|||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $value
|
||||||
|
*/
|
||||||
|
public function setAmountMaxAttribute($value)
|
||||||
|
{
|
||||||
|
// save in cents:
|
||||||
|
$value = intval($value * 100);
|
||||||
|
$this->attributes['amount_max_encrypted'] = Crypt::encrypt($value);
|
||||||
|
$this->attributes['amount_max'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $value
|
||||||
|
*/
|
||||||
|
public function setAmountMinAttribute($value)
|
||||||
|
{
|
||||||
|
// save in cents:
|
||||||
|
$value = intval($value * 100);
|
||||||
|
$this->attributes['amount_min_encrypted'] = Crypt::encrypt($value);
|
||||||
|
$this->attributes['amount_min'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $value
|
* @param $value
|
||||||
*/
|
*/
|
||||||
|
148
database/migrations/2015_05_22_172026_changes_for_v3409.php
Normal file
148
database/migrations/2015_05_22_172026_changes_for_v3409.php
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @SuppressWarnings(PHPMD.ShortMethodName)
|
||||||
|
*
|
||||||
|
* Class ChangesForV3409
|
||||||
|
*/
|
||||||
|
class ChangesForV3409 extends Migration
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
// remove decryption, but this will destroy amounts.
|
||||||
|
|
||||||
|
Schema::table(
|
||||||
|
'accounts', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('virtual_balance_encrypted');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
Schema::table(
|
||||||
|
'bills', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('amount_min_encrypted');
|
||||||
|
$table->dropColumn('amount_max_encrypted');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
Schema::table(
|
||||||
|
'budget_limits', function (Blueprint $table) {
|
||||||
|
|
||||||
|
$table->dropColumn('amount_encrypted');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
Schema::table(
|
||||||
|
'limit_repetitions', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('amount_encrypted');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
Schema::table(
|
||||||
|
'piggy_bank_events', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('amount_encrypted');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
Schema::table(
|
||||||
|
'piggy_bank_repetitions', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('currentamount_encrypted');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
Schema::table(
|
||||||
|
'piggy_banks', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('targetamount_encrypted');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
Schema::table(
|
||||||
|
'preferences', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('name_encrypted');
|
||||||
|
$table->dropColumn('data_encrypted');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
Schema::table(
|
||||||
|
'transactions', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('amount_encrypted');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
// encrypt account virtual balance:
|
||||||
|
Schema::table(
|
||||||
|
'accounts', function (Blueprint $table) {
|
||||||
|
$table->string('virtual_balance_encrypted')->nullable()->after('virtual_balance');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// encrypt bill amount_min and amount_max:
|
||||||
|
Schema::table(
|
||||||
|
'bills', function (Blueprint $table) {
|
||||||
|
$table->string('amount_min_encrypted')->nullable()->after('amount_min');
|
||||||
|
$table->string('amount_max_encrypted')->nullable()->after('amount_max');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// encrypt budget limit amount
|
||||||
|
Schema::table(
|
||||||
|
'budget_limits', function (Blueprint $table) {
|
||||||
|
$table->string('amount_encrypted')->nullable()->after('amount');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
// encrypt limit repetition amount
|
||||||
|
Schema::table(
|
||||||
|
'limit_repetitions', function (Blueprint $table) {
|
||||||
|
$table->string('amount_encrypted')->nullable()->after('amount');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
// encrypt piggy bank event amount
|
||||||
|
Schema::table(
|
||||||
|
'piggy_bank_events', function (Blueprint $table) {
|
||||||
|
$table->string('amount_encrypted')->nullable()->after('amount');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
// encrypt piggy bank repetition currentamount
|
||||||
|
Schema::table(
|
||||||
|
'piggy_bank_repetitions', function (Blueprint $table) {
|
||||||
|
$table->string('currentamount_encrypted')->nullable()->after('currentamount');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// encrypt piggy bank targetamount
|
||||||
|
Schema::table(
|
||||||
|
'piggy_banks', function (Blueprint $table) {
|
||||||
|
$table->string('targetamount_encrypted')->nullable()->after('targetamount');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
// encrypt preference name (add field)
|
||||||
|
// encrypt preference data (add field)
|
||||||
|
Schema::table(
|
||||||
|
'preferences', function (Blueprint $table) {
|
||||||
|
$table->smallInteger('name_encrypted', false, true)->default(0)->after('name');
|
||||||
|
$table->smallInteger('data_encrypted', false, true)->default(0)->after('data');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// encrypt transaction amount
|
||||||
|
Schema::table(
|
||||||
|
'transactions', function (Blueprint $table) {
|
||||||
|
$table->string('amount_encrypted')->nullable()->after('amount');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -134,7 +134,9 @@ class TestDataSeeder extends Seeder
|
|||||||
|
|
||||||
$acc_a = Account::create(['user_id' => $user->id, 'account_type_id' => $assetType->id, 'name' => 'Checking account', 'active' => 1]);
|
$acc_a = Account::create(['user_id' => $user->id, 'account_type_id' => $assetType->id, 'name' => 'Checking account', 'active' => 1]);
|
||||||
$acc_b = Account::create(['user_id' => $user->id, 'account_type_id' => $assetType->id, 'name' => 'Savings account', 'active' => 1]);
|
$acc_b = Account::create(['user_id' => $user->id, 'account_type_id' => $assetType->id, 'name' => 'Savings account', 'active' => 1]);
|
||||||
$acc_c = Account::create(['user_id' => $user->id, 'account_type_id' => $assetType->id, 'name' => 'Delete me', 'active' => 1]);
|
$acc_c = Account::create(
|
||||||
|
['user_id' => $user->id, 'account_type_id' => $assetType->id, 'name' => 'Delete me', 'active' => 1, 'virtual_balance' => 123.45]
|
||||||
|
);
|
||||||
|
|
||||||
// create account meta:
|
// create account meta:
|
||||||
AccountMeta::create(['account_id' => $acc_a->id, 'name' => 'accountRole', 'data' => 'defaultAsset']);
|
AccountMeta::create(['account_id' => $acc_a->id, 'name' => 'accountRole', 'data' => 'defaultAsset']);
|
||||||
@@ -514,27 +516,6 @@ class TestDataSeeder extends Seeder
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $name
|
|
||||||
*
|
|
||||||
* @return PiggyBank|null
|
|
||||||
*/
|
|
||||||
protected function findPiggyBank($name)
|
|
||||||
{
|
|
||||||
// account
|
|
||||||
$user = User::whereEmail('thegrumpydictator@gmail.com')->first();
|
|
||||||
/** @var Budget $budget */
|
|
||||||
foreach (PiggyBank::get() as $piggyBank) {
|
|
||||||
$account = $piggyBank->account()->first();
|
|
||||||
if ($piggyBank->name == $name && $user->id == $account->user_id) {
|
|
||||||
return $piggyBank;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $name
|
* @param $name
|
||||||
*
|
*
|
||||||
@@ -680,5 +661,26 @@ class TestDataSeeder extends Seeder
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $name
|
||||||
|
*
|
||||||
|
* @return PiggyBank|null
|
||||||
|
*/
|
||||||
|
protected function findPiggyBank($name)
|
||||||
|
{
|
||||||
|
// account
|
||||||
|
$user = User::whereEmail('thegrumpydictator@gmail.com')->first();
|
||||||
|
/** @var Budget $budget */
|
||||||
|
foreach (PiggyBank::get() as $piggyBank) {
|
||||||
|
$account = $piggyBank->account()->first();
|
||||||
|
if ($piggyBank->name == $name && $user->id == $account->user_id) {
|
||||||
|
return $piggyBank;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,100 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use FireflyIII\Helpers\Report\ReportQuery;
|
|
||||||
use FireflyIII\Models\AccountMeta;
|
|
||||||
use FireflyIII\Models\PiggyBankRepetition;
|
|
||||||
use FireflyIII\Models\Transaction;
|
|
||||||
use League\FactoryMuffin\Facade as FactoryMuffin;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @SuppressWarnings(PHPMD.TooManyMethods)
|
|
||||||
* Class ReportQueryTest
|
|
||||||
*/
|
|
||||||
class ReportQueryTest extends TestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var ReportQuery
|
|
||||||
*/
|
|
||||||
protected $object;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets up the fixture, for example, opens a network connection.
|
|
||||||
* This method is called before a test is executed.
|
|
||||||
*/
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
FactoryMuffin::create('FireflyIII\User');
|
|
||||||
$this->object = new ReportQuery;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tears down the fixture, for example, closes a network connection.
|
|
||||||
* This method is called after a test is executed.
|
|
||||||
*/
|
|
||||||
public function tearDown()
|
|
||||||
{
|
|
||||||
parent::tearDown();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testBalancedTransactionsList()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testBalancedTransactionsSum()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetAllAccounts()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetBudgetSummary()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetTransactionsWithoutBudget()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIncomeInPeriod()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testJournalsByBudget()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testJournalsByCategory()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testJournalsByExpenseAccount()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testJournalsByRevenueAccount()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSharedExpenses()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSharedExpensesByCategory()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Reference in New Issue
Block a user