From cab2b2c478487765f9c9b71393419d0de63a23f3 Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Tue, 11 Feb 2025 22:11:53 -0500 Subject: [PATCH] #98 Product Services Sum / Totals --- .../Admin/Resources/ServiceTypeResource.php | 45 ++++++++++++++----- app/Models/ServiceType.php | 2 +- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/app/Filament/Admin/Resources/ServiceTypeResource.php b/app/Filament/Admin/Resources/ServiceTypeResource.php index 34cfb3d..1bfa967 100644 --- a/app/Filament/Admin/Resources/ServiceTypeResource.php +++ b/app/Filament/Admin/Resources/ServiceTypeResource.php @@ -9,6 +9,8 @@ use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Columns\Summarizers\Sum; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Model; @@ -42,44 +44,65 @@ public static function table(Table $table): Table { return $table ->columns([ - Tables\Columns\TextColumn::make('name') + TextColumn::make('name') ->label('Code'), - Tables\Columns\TextColumn::make('value') + TextColumn::make('value') ->label('Long Name') ->extraHeaderAttributes(['class' => 'w-full']), - Tables\Columns\TextColumn::make('quantity') + TextColumn::make('productServices.amount') ->alignRight() ->getStateUsing(function (Table $table, Model $record) { return $record->getQuantityAttribute( $table->getFilter('created_at')->getState()['created_at'], $table->getFilter('created_until')->getState()['created_until'] ); - }), + }) + ->summarize(Sum::make('amount') + ->label('') + ->using(fn (Table $table, $query) => $query + ->when($createdAt = $table->getFilter('created_at')->getState()['created_at'] ?? null, + fn ($q) => $q->whereDate('created_at', '>=', $createdAt)) + ->when($createdUntil = $table->getFilter('created_until')->getState()['created_until'] ?? null, + fn ($q) => $q->whereDate('created_at', '<=', $createdUntil)) + ->sum('amount') + ) + ), - Tables\Columns\TextColumn::make('amount') + TextColumn::make('productServices.amount_price') ->alignRight() + ->money() ->getStateUsing(function (Table $table, Model $record) { return $record->getAmountAttribute( $table->getFilter('created_at')->getState()['created_at'], $table->getFilter('created_until')->getState()['created_until'] ); }) - ->money('usd'), + ->summarize(Sum::make('amount_price') + ->label('') + ->money() + ->using(fn (Table $table, $query) => $query + ->when($createdAt = $table->getFilter('created_at')->getState()['created_at'] ?? null, + fn ($q) => $q->whereDate('created_at', '>=', $createdAt)) + ->when($createdUntil = $table->getFilter('created_until')->getState()['created_until'] ?? null, + fn ($q) => $q->whereDate('created_at', '<=', $createdUntil)) + ->sum('amount_price') + ) + ), - Tables\Columns\TextColumn::make('salesPercentage') + TextColumn::make('salesPercentage') ->alignRight() + ->suffix('%') + ->label('% sales') ->getStateUsing(function (Table $table, Model $record) { return $record->getSalesPercentageAttribute( $table->getFilter('created_at')->getState()['created_at'], $table->getFilter('created_until')->getState()['created_until'] ); - }) - ->suffix('%') - ->label('% sales'), + }), - Tables\Columns\TextColumn::make('averagePrice') + TextColumn::make('averagePrice') ->getStateUsing(function (Table $table, Model $record) { return $record->getAveragePriceAttribute( $table->getFilter('created_at')->getState()['created_at'], diff --git a/app/Models/ServiceType.php b/app/Models/ServiceType.php index 85bccf5..15b4d8f 100644 --- a/app/Models/ServiceType.php +++ b/app/Models/ServiceType.php @@ -42,7 +42,7 @@ public function getSalesPercentageAttribute($created_at = null, $created_until = { $query = ProductService::query() ->when($created_at, fn ($query) => $query->whereDate('created_at', '>=', $created_at)) - ->when($created_until, fn ($query) => $query->whereDate('created_until', '<=', $created_until)); + ->when($created_until, fn ($query) => $query->whereDate('created_at', '<=', $created_until)); $total = $query->count();