From 12f3003a3af4bce546fc4bd98ce1aae3447d0422 Mon Sep 17 00:00:00 2001 From: hackerESQ Date: Tue, 27 Aug 2024 22:06:10 -0500 Subject: [PATCH] wip including working export button --- app/Exports/BackupExport.php | 6 --- app/Exports/Sheets/DailyChangesSheet.php | 6 +-- app/Exports/Sheets/DividendsSheet.php | 39 ----------------- app/Exports/Sheets/MarketDataSheet.php | 42 ------------------- app/Exports/Sheets/PortfoliosSheet.php | 4 +- app/Exports/Sheets/SplitsSheet.php | 39 ----------------- app/Exports/Sheets/TransactionsSheet.php | 16 +++++-- app/Http/Controllers/PortfolioController.php | 1 - app/Models/DailyChange.php | 7 +--- app/Models/Portfolio.php | 7 ---- app/Models/Transaction.php | 7 ---- app/Models/User.php | 5 +++ app/Support/Spotlight.php | 4 +- lang/en.json | 1 + lang/es.json | 1 + .../export-portfolios-button.blade.php | 18 +++++--- 16 files changed, 39 insertions(+), 164 deletions(-) delete mode 100644 app/Exports/Sheets/DividendsSheet.php delete mode 100644 app/Exports/Sheets/MarketDataSheet.php delete mode 100644 app/Exports/Sheets/SplitsSheet.php diff --git a/app/Exports/BackupExport.php b/app/Exports/BackupExport.php index 6f8de02..9de1ace 100644 --- a/app/Exports/BackupExport.php +++ b/app/Exports/BackupExport.php @@ -3,9 +3,6 @@ namespace App\Exports; use App\Exports\Sheets\DailyChangesSheet; -use App\Exports\Sheets\SplitsSheet; -use App\Exports\Sheets\DividendsSheet; -use App\Exports\Sheets\MarketDataSheet; use App\Exports\Sheets\PortfoliosSheet; use App\Exports\Sheets\TransactionsSheet; use Maatwebsite\Excel\Concerns\Exportable; @@ -23,9 +20,6 @@ class BackupExport implements WithMultipleSheets return [ new PortfoliosSheet, new TransactionsSheet, - new MarketDataSheet, - new DividendsSheet, - new SplitsSheet, new DailyChangesSheet ]; } diff --git a/app/Exports/Sheets/DailyChangesSheet.php b/app/Exports/Sheets/DailyChangesSheet.php index 17d4371..586cfb2 100644 --- a/app/Exports/Sheets/DailyChangesSheet.php +++ b/app/Exports/Sheets/DailyChangesSheet.php @@ -13,13 +13,13 @@ class DailyChangesSheet implements FromCollection, WithHeadings, WithTitle { return [ 'Date', - 'User', + 'Portfolio', 'Total Market Value', 'Total Cost Basis', 'Total Gain Loss', 'Total Dividends', 'Realized Gains', - 'Notes' + 'Annotation' ]; } @@ -28,7 +28,7 @@ class DailyChangesSheet implements FromCollection, WithHeadings, WithTitle */ public function collection() { - return DailyChange::myDailyChanges()->get(); + return auth()->user()->daily_changes; } /** diff --git a/app/Exports/Sheets/DividendsSheet.php b/app/Exports/Sheets/DividendsSheet.php deleted file mode 100644 index 0d6f120..0000000 --- a/app/Exports/Sheets/DividendsSheet.php +++ /dev/null @@ -1,39 +0,0 @@ -get(); + return auth()->user()->portfolios; } /** diff --git a/app/Exports/Sheets/SplitsSheet.php b/app/Exports/Sheets/SplitsSheet.php deleted file mode 100644 index 47c643d..0000000 --- a/app/Exports/Sheets/SplitsSheet.php +++ /dev/null @@ -1,39 +0,0 @@ -get(); + return auth()->user()->transactions; } /** diff --git a/app/Http/Controllers/PortfolioController.php b/app/Http/Controllers/PortfolioController.php index 368625a..a10dc1f 100644 --- a/app/Http/Controllers/PortfolioController.php +++ b/app/Http/Controllers/PortfolioController.php @@ -22,7 +22,6 @@ class PortfolioController extends Controller */ public function show(Portfolio $portfolio) { - // get portfolio metrics $metrics = cache()->tags(['metrics', 'portfolio', auth()->user()->id, $portfolio->id])->remember( 'portfolio-metrics-' . $portfolio->id, diff --git a/app/Models/DailyChange.php b/app/Models/DailyChange.php index 87d7a68..80cf328 100644 --- a/app/Models/DailyChange.php +++ b/app/Models/DailyChange.php @@ -32,19 +32,14 @@ class DailyChange extends Model protected $casts = [ 'date' => 'datetime', ]; - - public function scopeMyDailyChanges($query) - { - return $query->where('user_id', auth()->user()->id); - } public function scopePortfolio($query, $portfolio) { return $query->where('portfolio_id', $portfolio); } + public function portfolio() { return $this->belongsTo(Portfolio::class); } - } diff --git a/app/Models/Portfolio.php b/app/Models/Portfolio.php index 67a42da..51b082d 100644 --- a/app/Models/Portfolio.php +++ b/app/Models/Portfolio.php @@ -35,8 +35,6 @@ class Portfolio extends Model protected $with = ['users', 'transactions']; - protected $appends = ['owner_id']; - public function users() { return $this->belongsToMany(User::class)->withPivot('owner'); @@ -69,11 +67,6 @@ class Portfolio extends Model return $this->hasMany(DailyChange::class); } - public function scopeMyPortfolios() - { - return $this->whereRelation('users', 'id', auth()->user()->id); - } - public function scopeWithoutWishlists() { return $this->where(['wishlist' => false]); diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 7271893..06c7ab9 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -97,13 +97,6 @@ class Transaction extends Model return $query->where('symbol', $symbol); } - public function scopeMyTransactions() - { - return $this->whereHas('portfolio', function ($query) { - return $query->whereRelation('users', 'id', auth()->user()->id); - }); - } - public function refreshMarketData() { return MarketData::getMarketData($this->attributes['symbol']); diff --git a/app/Models/User.php b/app/Models/User.php index 1f0614d..aa11828 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -54,6 +54,11 @@ class User extends Authenticatable return $this->belongsToMany(Portfolio::class)->withPivot('owner'); } + public function daily_changes() + { + return $this->hasManyDeep(DailyChange::class, ['portfolio_user', Portfolio::class]); + } + public function holdings(): HasManyDeep { return $this->hasManyDeep(Holding::class, ['portfolio_user', Portfolio::class]) diff --git a/app/Support/Spotlight.php b/app/Support/Spotlight.php index a4e335c..3a300ee 100644 --- a/app/Support/Spotlight.php +++ b/app/Support/Spotlight.php @@ -18,7 +18,7 @@ class Spotlight return $results; } - $portfolios = Portfolio::myPortfolios()->where('title', 'LIKE', '%'.$request->input('search').'%')->limit(5)->get(); + $portfolios = $request->user()->portfolios()->where('title', 'LIKE', '%'.$request->input('search').'%')->limit(5)->get(); $portfolios->each(function($portfolio) use ($results) { $results->push([ @@ -29,7 +29,7 @@ class Spotlight ]); }); - $holdings = Holding::myHoldings()->where('symbol', 'LIKE', '%'.$request->input('search').'%')->limit(5)->get(); + $holdings = $request->user()->holdings()->where('holdings.symbol', 'LIKE', '%'.$request->input('search').'%')->limit(5)->get(); $holdings->each(function($holding) use ($results) { $results->push([ diff --git a/lang/en.json b/lang/en.json index 82e85cd..c82de4b 100644 --- a/lang/en.json +++ b/lang/en.json @@ -15,6 +15,7 @@ "Save": "Save", "Close": "Close", + "Hang on! You're doing that too much.": "Hang on! You're doing that too much.", "Delete Account": "Delete Account", "Permanently delete your account.": "Permanently delete your account.", "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.", diff --git a/lang/es.json b/lang/es.json index fbbd2e4..a142b3c 100644 --- a/lang/es.json +++ b/lang/es.json @@ -15,6 +15,7 @@ "Save": "Guardar", "Close": "Cerrar", + "Hang on! You're doing that too much.": "¡Por favor espere un momento!", "Delete Account": "Eliminar Cuenta", "Permanently delete your account.": "Elimina tu cuenta de forma permanente.", "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Una vez que tu cuenta sea eliminada, todos sus recursos y datos serán eliminados de forma permanente. Antes de eliminar tu cuenta, descarga cualquier dato o información que desees conservar.", diff --git a/resources/views/livewire/export-portfolios-button.blade.php b/resources/views/livewire/export-portfolios-button.blade.php index 41e0db0..e21abf0 100644 --- a/resources/views/livewire/export-portfolios-button.blade.php +++ b/resources/views/livewire/export-portfolios-button.blade.php @@ -2,25 +2,31 @@ use Livewire\Volt\Component; use Mary\Traits\Toast; +use Maatwebsite\Excel\Facades\Excel; +use App\Exports\BackupExport; +use Illuminate\Support\Facades\RateLimiter; new class extends Component { use Toast; // props - // methods - public function mount() - { + public function export() + { + if (!RateLimiter::attempt('export:'.auth()->user()->id, $perMinute = 3, fn()=>null)) { - // + $this->error(__('Hang on! You\'re doing that too much.')); + return; + } + + return Excel::download(new BackupExport, now()->format('Y_m_d') . '_investbrain_backup.xlsx'); } - }; ?>
- + {{ __('Download Export') }}
\ No newline at end of file