Implement invoice report table
This commit is contained in:
parent
2aaf7ab8a2
commit
9fa47077bd
@ -2,15 +2,15 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources;
|
namespace App\Filament\Resources;
|
||||||
|
|
||||||
|
use App\Enums\InvoiceStatus;
|
||||||
use App\Filament\Resources\InvoiceReportResource\Pages;
|
use App\Filament\Resources\InvoiceReportResource\Pages;
|
||||||
use App\Models\Order;
|
use App\Models\Order;
|
||||||
use Filament\Forms\Components\DatePicker;
|
use Filament\Forms\Components\DatePicker;
|
||||||
use Filament\Forms\Components\Toggle;
|
|
||||||
use Filament\Forms\Form;
|
use Filament\Forms\Form;
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Tables;
|
use Filament\Tables;
|
||||||
use Filament\Tables\Actions\Action;
|
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
class InvoiceReportResource extends Resource
|
class InvoiceReportResource extends Resource
|
||||||
{
|
{
|
||||||
@ -36,28 +36,101 @@ public static function table(Table $table): Table
|
|||||||
{
|
{
|
||||||
return $table
|
return $table
|
||||||
->columns([
|
->columns([
|
||||||
Tables\Columns\TextColumn::make('company_name')
|
Tables\Columns\TextColumn::make('year')
|
||||||
->searchable(),
|
->getStateUsing(fn (Order $record) => $record->invoice->date)
|
||||||
|
->date('Y'),
|
||||||
|
|
||||||
|
Tables\Columns\TextColumn::make('month')
|
||||||
|
->getStateUsing(fn (Order $record) => $record->invoice->date)
|
||||||
|
->date('m'),
|
||||||
|
|
||||||
|
Tables\Columns\TextColumn::make('customer_po')
|
||||||
|
->color('code')
|
||||||
|
->weight('bold')
|
||||||
|
->extraHeaderAttributes(['class' => 'w-full']),
|
||||||
|
|
||||||
|
Tables\Columns\TextColumn::make('invoice.date')
|
||||||
|
->label('Date'),
|
||||||
|
Tables\Columns\TextColumn::make('total_service_price')
|
||||||
|
->label('Subtotal')
|
||||||
|
->alignRight()
|
||||||
|
->money(),
|
||||||
|
|
||||||
|
Tables\Columns\TextColumn::make('pst')
|
||||||
|
->label('PST')
|
||||||
|
->alignRight()
|
||||||
|
->getStateUsing(fn (Order $record) => $record->invoice->pst ? $record->total_service_price * 0.07 : 0.00)
|
||||||
|
->formatStateUsing(function ($state) {
|
||||||
|
return $state == 0.00 ? '-' : '$'.$state;
|
||||||
|
}),
|
||||||
|
|
||||||
|
Tables\Columns\TextColumn::make('gst')
|
||||||
|
->label('GST')
|
||||||
|
->getStateUsing(fn (Order $record) => $record->total_service_price * 0.05)
|
||||||
|
->alignRight()
|
||||||
|
->money(),
|
||||||
|
|
||||||
|
Tables\Columns\TextColumn::make('invoice.total')
|
||||||
|
->label('Total')
|
||||||
|
->getStateUsing(function (Order $record) {
|
||||||
|
$total = $record->total_service_price * 1.05;
|
||||||
|
|
||||||
|
if ($record->invoice->pst) {
|
||||||
|
$total += $record->total_service_price * 0.07;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $total;
|
||||||
|
})
|
||||||
|
->alignRight()
|
||||||
|
->money(),
|
||||||
|
|
||||||
|
Tables\Columns\TextColumn::make('invoice.status')
|
||||||
|
->badge(InvoiceStatus::class),
|
||||||
])
|
])
|
||||||
->filters([
|
->filters([
|
||||||
|
Tables\Filters\SelectFilter::make('customer')
|
||||||
|
->relationship('customer', 'company_name')
|
||||||
|
->preload()
|
||||||
|
->searchable()
|
||||||
|
->placeholder('Select a customer...')
|
||||||
|
->selectablePlaceholder(false)
|
||||||
|
->query(function (array $data, Builder $query): Builder {
|
||||||
|
return $query
|
||||||
|
->when(! $data['value'], function (Builder $query): Builder {
|
||||||
|
return $query->where('customer_id', '-1');
|
||||||
|
})
|
||||||
|
->when($data['value'], function (Builder $query, $value): Builder {
|
||||||
|
return $query->where('customer_id', $value);
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
|
||||||
Tables\Filters\Filter::make('date_from')
|
Tables\Filters\Filter::make('date_from')
|
||||||
->form([
|
->form([DatePicker::make('date_from')])
|
||||||
DatePicker::make('date_from'),
|
->query(function (Builder $query, array $data): Builder {
|
||||||
]),
|
return $query->when($data['date_from'],
|
||||||
|
fn (Builder $query, $date): Builder => $query->whereHas('invoice', function ($query) use ($date) {
|
||||||
|
return $query->whereDate('date', '>=', $date);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
|
||||||
Tables\Filters\Filter::make('date_until')
|
Tables\Filters\Filter::make('date_until')
|
||||||
->form([
|
->form([DatePicker::make('date_until')])
|
||||||
DatePicker::make('date_from'),
|
->query(function (Builder $query, array $data): Builder {
|
||||||
]),
|
return $query->when($data['date_until'],
|
||||||
Tables\Filters\Filter::make('paid')
|
fn (Builder $query, $date): Builder => $query->whereHas('invoice', function ($query) use ($date) {
|
||||||
->form([
|
return $query->whereDate('date', '<=', $date);
|
||||||
Toggle::make('paid'),
|
})
|
||||||
]),
|
);
|
||||||
|
}),
|
||||||
|
|
||||||
], layout: Tables\Enums\FiltersLayout::AboveContent)
|
], layout: Tables\Enums\FiltersLayout::AboveContent)
|
||||||
->actions([
|
->hiddenFilterIndicators()
|
||||||
Action::make('generateReport')
|
->actions([// Action::make('generateReport')
|
||||||
->label('Make Report')
|
// ->label('Make Report')
|
||||||
->icon('lucide-sticky-note'),
|
// ->icon('lucide-sticky-note'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getEloquentQuery(): \Illuminate\Database\Eloquent\Builder
|
public static function getEloquentQuery(): \Illuminate\Database\Eloquent\Builder
|
||||||
|
@ -120,7 +120,6 @@ public static function getPages(): array
|
|||||||
return [
|
return [
|
||||||
'index' => Pages\ListServiceTypes::route('/'),
|
'index' => Pages\ListServiceTypes::route('/'),
|
||||||
'create' => Pages\CreateServiceType::route('/create'),
|
'create' => Pages\CreateServiceType::route('/create'),
|
||||||
// 'edit' => Pages\EditServiceType::route('/{record}/edit'),
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ public function getTotalProductQuantityAttribute(): int
|
|||||||
return $total;
|
return $total;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTotalServicePriceAttribute(): string
|
public function getTotalServicePriceAttribute(): float
|
||||||
{
|
{
|
||||||
$total = 0;
|
$total = 0;
|
||||||
|
|
||||||
|
BIN
public/order.pdf
BIN
public/order.pdf
Binary file not shown.
8
todos
8
todos
@ -3,3 +3,11 @@ todo
|
|||||||
- finish invoice styling
|
- finish invoice styling
|
||||||
- add to invoice button on order page
|
- add to invoice button on order page
|
||||||
- customer name to invoice title / filename
|
- customer name to invoice title / filename
|
||||||
|
|
||||||
|
renamings:
|
||||||
|
- order->total_service_price => subtotal
|
||||||
|
- amount > quantity
|
||||||
|
- amount_price > amount
|
||||||
|
|
||||||
|
|
||||||
|
orders: tabs for status or rush!!
|
Loading…
x
Reference in New Issue
Block a user