diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index a2926001fb..9b9d0235e7 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -1,6 +1,5 @@ startOfMonth()); $end = Session::get('end', Carbon::now()->endOfMonth()); $accounts = $repository->getFrontpageAccounts($frontPage); + $savings = $repository->getSavingsAccounts(); foreach ($accounts as $account) { $set = $repository->getFrontpageTransactions($account, $start, $end); @@ -74,7 +74,7 @@ class HomeController extends Controller // var_dump($transactions); - return view('index', compact('count', 'title', 'subTitle', 'mainTitleIcon', 'transactions')); + return view('index', compact('count', 'title','savings', 'subTitle', 'mainTitleIcon', 'transactions')); } diff --git a/app/Models/Component.php b/app/Models/Component.php index 0c8e57a45f..7a9bba141b 100644 --- a/app/Models/Component.php +++ b/app/Models/Component.php @@ -12,6 +12,8 @@ class Component extends Model { use SoftDeletes; + protected $fillable = ['user_id', 'name','class']; + /** * @return array */ diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index 104a6b6a13..25c20e0f65 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -18,6 +18,7 @@ use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Log; use Session; +use Steam; /** * Class AccountRepository @@ -120,6 +121,43 @@ class AccountRepository implements AccountRepositoryInterface } + /** + * Get savings accounts and the balance difference in the period. + * + * @return Collection + */ + public function getSavingsAccounts() + { + $accounts = Auth::user()->accounts()->accountTypeIn(['Default account', 'Asset account'])->orderBy('accounts.name', 'ASC') + ->leftJoin('account_meta', 'account_meta.account_id', '=', 'accounts.id') + ->where('account_meta.name', 'accountRole') + ->where('account_meta.data', '"savingAsset"') + ->get(['accounts.*']); + $start = clone Session::get('start'); + $end = clone Session::get('end'); + + $accounts->each( + function (Account $account) use ($start, $end) { + $account->startBalance = Steam::balance($account, $start); + $account->endBalance = Steam::balance($account, $end); + + // diff (negative when lost, positive when gained) + $diff = $account->endBalance - $account->startBalance; + + if ($diff < 0) { + // percentage lost compared to start. + $pct = (($diff * -1) / $account->startBalance) * 100; + } else { + $pct = ($diff / $account->startBalance) * 100; + } + $account->difference = $diff; + $account->percentage = round($pct); + } + ); + + return $accounts; + } + /** * @param Account $account * diff --git a/app/Repositories/Account/AccountRepositoryInterface.php b/app/Repositories/Account/AccountRepositoryInterface.php index 020ae41b69..41de454e63 100644 --- a/app/Repositories/Account/AccountRepositoryInterface.php +++ b/app/Repositories/Account/AccountRepositoryInterface.php @@ -78,4 +78,11 @@ interface AccountRepositoryInterface * @return float */ public function leftOnAccount(Account $account); + + /** + * Get savings accounts and the balance difference in the period. + * + * @return Collection + */ + public function getSavingsAccounts(); } \ No newline at end of file diff --git a/database/seeds/TestDataSeeder.php b/database/seeds/TestDataSeeder.php index 90b5726889..6e3d97ba3d 100644 --- a/database/seeds/TestDataSeeder.php +++ b/database/seeds/TestDataSeeder.php @@ -139,7 +139,7 @@ class TestDataSeeder extends Seeder // create account meta: $meta_a = AccountMeta::create(['account_id' => $acc_a->id, 'name' => 'accountRole', 'data' => 'defaultAsset']); - $meta_b = AccountMeta::create(['account_id' => $acc_b->id, 'name' => 'accountRole', 'data' => 'defaultAsset']); + $meta_b = AccountMeta::create(['account_id' => $acc_b->id, 'name' => 'accountRole', 'data' => 'savingAsset']); $meta_c = AccountMeta::create(['account_id' => $acc_c->id, 'name' => 'accountRole', 'data' => 'defaultAsset']); // var_dump($meta_a->toArray()); // var_dump($meta_b->toArray()); diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php index 33e5610669..33da7dce45 100644 --- a/resources/views/index.blade.php +++ b/resources/views/index.blade.php @@ -57,7 +57,54 @@ Savings
Mark your asset accounts as "Savings account" to fill this panel.
+ @else + @foreach($savings as $account) + +