value; protected static ?string $navigationGroup = 'Reports'; protected static ?string $navigationLabel = 'Customer Reports'; protected static ?int $navigationSort = 4; public static function form(Form $form): Form { return $form ->schema([ // ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('company_name') ->label('Customer') ->sortable() ->searchable() ->extraHeaderAttributes(['class' => 'w-full']), Tables\Columns\TextColumn::make('invoices.subtotal') ->label('Subtotal') ->money() ->alignRight() ->getStateUsing(function (Table $table, Model $record) { return $record->getSubtotalAttribute( $table->getFilter('created_at')->getState()['created_at'], $table->getFilter('created_until')->getState()['created_until'] ); }) ->summarize(Sum::make('subtotal') ->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('subtotal') ) ), Tables\Columns\TextColumn::make('invoices.hst_amount') ->label('HST') ->money() ->alignRight() ->getStateUsing(fn (Table $table, Model $record) => $record->invoices() ->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('hst_amount')) ->summarize(Sum::make('hst_amount') ->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('hst_amount') ) ), Tables\Columns\TextColumn::make('invoices.gst_amount') ->label('GST') ->money() ->alignRight() ->getStateUsing(function (Table $table, Model $record) { return $record->getGstAttribute( $table->getFilter('created_at')->getState()['created_at'], $table->getFilter('created_until')->getState()['created_until'] ); }) ->summarize(Sum::make('gst_amount') ->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('gst_amount') ) ), Tables\Columns\TextColumn::make('invoices.pst_amount') ->label('PST') ->money() ->alignRight() ->getStateUsing(function (Table $table, Customer $record) { return $record->getPstAttribute( $table->getFilter('created_at')->getState()['created_at'], $table->getFilter('created_until')->getState()['created_until'] ); }) ->summarize(Sum::make('pst_amount') ->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('pst_amount') ) ), Tables\Columns\TextColumn::make('invoices.total') ->label('Total') ->money() ->weight(FontWeight::Bold) ->alignRight() ->getStateUsing(function (Table $table, Model $record) { return $record->getTotalAttribute( $table->getFilter('created_at')->getState()['created_at'], $table->getFilter('created_until')->getState()['created_until'] ); }) ->summarize(Sum::make('total') ->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('total') ) ), ]) ->filters([ Tables\Filters\Filter::make('created_at') ->form([ DatePicker::make('created_at') ->label('From date'), ]), Tables\Filters\Filter::make('created_until') ->form([ DatePicker::make('created_until') ->label('Until date'), ]), ]) ->actions([ ]) ->bulkActions([ ]); } public static function canAccess(): bool { return auth()->user()->is_admin ?? false; } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => \App\Filament\Admin\Resources\CustomerReportResource\Pages\ListCustomerReports::route('/'), ]; } }