WIP Tax Rates

This commit is contained in:
Nisse Lommerde 2025-01-14 17:17:04 -05:00
parent 306afd630b
commit 26532e281b
14 changed files with 177 additions and 79 deletions

@ -11,7 +11,6 @@
use Filament\Tables\Columns\Summarizers\Summarizer;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Query\Builder;
class CustomerReportResource extends Resource
{
@ -45,14 +44,13 @@ public static function table(Table $table): Table
Tables\Columns\TextColumn::make('subtotal')
->money()
->summarize(Summarizer::make()->using(function (Builder $query, Table $table) {
return '$'.
number_format(
round(Invoice::whereBetween('date', [
$table->getFilter('created_at')->getState()['created_at'] ?? '1900-01-01',
$table->getFilter('created_until')->getState()['created_until'] ?? '2100-01-01',
])->sum('subtotal'), 2), 2, '.', ',');
->summarize(Summarizer::make()->using(function ($query, Table $table) {
$createdAt = $table->getfilter('created_at')->getstate()['created_at'] ?? '1900-01-01';
$createdUntil = $table->getfilter('created_until')->getstate()['created_until'] ?? '2100-01-01';
$invoiceSum = invoice::wherebetween('date', [$createdAt, $createdUntil])->sum('subtotal');
return '$'.number_format(round($invoiceSum, 2), 2, '.', ',');
}))
->alignRight()
->getStateUsing(function (Table $table, Model $record) {
@ -86,14 +84,13 @@ public static function table(Table $table): Table
Tables\Columns\TextColumn::make('total')
->money()
->summarize(Summarizer::make()->using(function (Builder $query, Table $table) {
return '$'.
number_format(
round(Invoice::whereBetween('date', [
$table->getFilter('created_at')->getState()['created_at'] ?? '1900-01-01',
$table->getFilter('created_until')->getState()['created_until'] ?? '2100-01-01',
])->sum('total'), 2), 2, '.', ',');
->summarize(summarizer::make()->using(function ($query, table $table) {
$createdAt = $table->getfilter('created_at')->getstate()['created_at'] ?? '1900-01-01';
$createdUntil = $table->getfilter('created_until')->getstate()['created_until'] ?? '2100-01-01';
$invoiceSum = invoice::wherebetween('date', [$createdAt, $createdUntil])->sum('total');
return '$'.number_format(round($invoiceSum, 2), 2, '.', ',');
}))
->weight('bold')
->alignRight()

@ -3,6 +3,7 @@
namespace App\Filament\Admin\Resources\OrderResource\Pages;
use App\Enums\OrderAttributes;
use App\Enums\OrderStatus;
use App\Filament\Admin\Resources\OrderResource;
use App\Models\Order;
use App\Models\OrderProduct;
@ -148,7 +149,9 @@ protected function getHeaderActions(): array
->label('Save changes')
->action('save')
->icon('lucide-save'),
Actions\ReplicateAction::make()
->label('Duplicate')
->icon('lucide-copy')
->color('info')
->mutateRecordDataUsing(function (array $data): array {
@ -157,12 +160,27 @@ protected function getHeaderActions(): array
return $data;
})
->beforeReplicaSaved(function (Model $replica): void {})
->beforeReplicaSaved(function (Order $replica): void {
$replica->customer_po = 'Repeat of '.$replica->customer_po;
$replica->status = OrderStatus::DRAFT;
$replica->printed = false;
$replica->pre_production = false;
$replica->order_date = today();
$replica->due_date = today()->addDays(10);
$replica->save();
})
->successRedirectUrl(fn (Model $replica): string => OrderResource::getUrl('edit', [$replica])),
// Action::make('invoice')
// ->visible(fn () => auth()->user()->is_admin)
// ->label('To Invoice')
// ->icon('lucide-receipt-text'),
//
Action::make('print')
->icon('lucide-printer')
->url(fn (Order $record) => route('orders.pdf', $record))
->openUrlInNewTab(),
Actions\DeleteAction::make()
->icon('lucide-trash-2'),
];

@ -2,18 +2,16 @@
namespace App\Filament\Admin\Resources;
use App\Filament\Admin\Resources\TaxResource\Pages;
use App\Models\Tax;
use App\Filament\Admin\Resources\TaxRateResource\Pages;
use App\Models\TaxRate;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
class TaxResource extends Resource
class TaxRateResource extends Resource
{
// protected static ?string $model = Tax::class;
protected static ?string $navigationLabel = 'Service Tax';
protected static ?string $model = TaxRate::class;
protected static ?string $navigationIcon = 'lucide-circle-dollar-sign';
@ -48,11 +46,6 @@ public static function table(Table $table): Table
]);
}
public static function canAccess(): bool
{
return auth()->user()->is_admin;
}
public static function getRelations(): array
{
return [
@ -60,12 +53,17 @@ public static function getRelations(): array
];
}
public static function canAccess(): bool
{
return auth()->user()->is_admin;
}
public static function getPages(): array
{
return [
'index' => Pages\ListTaxes::route('/'),
'create' => Pages\CreateTax::route('/create'),
'edit' => Pages\EditTax::route('/{record}/edit'),
'index' => Pages\ListTaxRates::route('/'),
'create' => Pages\CreateTaxRate::route('/create'),
'edit' => Pages\EditTaxRate::route('/{record}/edit'),
];
}
}

@ -0,0 +1,11 @@
<?php
namespace App\Filament\Admin\Resources\TaxRateResource\Pages;
use App\Filament\Admin\Resources\TaxRateResource;
use Filament\Resources\Pages\CreateRecord;
class CreateTaxRate extends CreateRecord
{
protected static string $resource = TaxRateResource::class;
}

@ -0,0 +1,19 @@
<?php
namespace App\Filament\Admin\Resources\TaxRateResource\Pages;
use App\Filament\Admin\Resources\TaxRateResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditTaxRate extends EditRecord
{
protected static string $resource = TaxRateResource::class;
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
];
}
}

@ -0,0 +1,19 @@
<?php
namespace App\Filament\Admin\Resources\TaxRateResource\Pages;
use App\Filament\Admin\Resources\TaxRateResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListTaxRates extends ListRecords
{
protected static string $resource = TaxRateResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

@ -1,11 +0,0 @@
<?php
namespace App\Filament\Admin\Resources\TaxResource\Pages;
use App\Filament\Admin\Resources\TaxResource;
use Filament\Resources\Pages\CreateRecord;
class CreateTax extends CreateRecord
{
protected static string $resource = TaxResource::class;
}

@ -1,19 +0,0 @@
<?php
namespace App\Filament\Admin\Resources\TaxResource\Pages;
use App\Filament\Admin\Resources\TaxResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditTax extends EditRecord
{
protected static string $resource = TaxResource::class;
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
];
}
}

@ -1,19 +0,0 @@
<?php
namespace App\Filament\Admin\Resources\TaxResource\Pages;
use App\Filament\Admin\Resources\TaxResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListTaxes extends ListRecords
{
protected static string $resource = TaxResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

14
app/Models/TaxRate.php Normal file

@ -0,0 +1,14 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class TaxRate extends Model
{
/** @use HasFactory<\Database\Factories\TaxRateFactory> */
use HasFactory;
protected $fillable = ['name', 'value'];
}

@ -0,0 +1,23 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\TaxRate>
*/
class TaxRateFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('tax_rates', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->decimal('value', 8, 2);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('tax_rates');
}
};

@ -27,6 +27,7 @@ public function run(): void
QuoteSeeder::class,
InvoiceSeeder::class,
InvoiceReportSeeder::class,
TaxRateSeeder::class,
]);
User::factory()->create([

@ -0,0 +1,18 @@
<?php
namespace Database\Seeders;
use App\Models\TaxRate;
use Illuminate\Database\Seeder;
class TaxRateSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
TaxRate::create(['name' => 'GST', 'value' => 5.00]);
TaxRate::create(['name' => 'PST', 'value' => 7.00]);
}
}