From 26532e281b0024a43317b132aa8ae8be65878cab Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Tue, 14 Jan 2025 17:17:04 -0500 Subject: [PATCH] WIP Tax Rates --- .../Resources/CustomerReportResource.php | 27 ++++++++--------- .../OrderResource/Pages/EditOrder.php | 20 ++++++++++++- .../{TaxResource.php => TaxRateResource.php} | 26 ++++++++--------- .../TaxRateResource/Pages/CreateTaxRate.php | 11 +++++++ .../TaxRateResource/Pages/EditTaxRate.php | 19 ++++++++++++ .../TaxRateResource/Pages/ListTaxRates.php | 19 ++++++++++++ .../Resources/TaxResource/Pages/CreateTax.php | 11 ------- .../Resources/TaxResource/Pages/EditTax.php | 19 ------------ .../Resources/TaxResource/Pages/ListTaxes.php | 19 ------------ app/Models/TaxRate.php | 14 +++++++++ database/factories/TaxRateFactory.php | 23 +++++++++++++++ ...25_01_14_221133_create_tax_rates_table.php | 29 +++++++++++++++++++ database/seeders/DatabaseSeeder.php | 1 + database/seeders/TaxRateSeeder.php | 18 ++++++++++++ 14 files changed, 177 insertions(+), 79 deletions(-) rename app/Filament/Admin/Resources/{TaxResource.php => TaxRateResource.php} (75%) create mode 100644 app/Filament/Admin/Resources/TaxRateResource/Pages/CreateTaxRate.php create mode 100644 app/Filament/Admin/Resources/TaxRateResource/Pages/EditTaxRate.php create mode 100644 app/Filament/Admin/Resources/TaxRateResource/Pages/ListTaxRates.php delete mode 100644 app/Filament/Admin/Resources/TaxResource/Pages/CreateTax.php delete mode 100644 app/Filament/Admin/Resources/TaxResource/Pages/EditTax.php delete mode 100644 app/Filament/Admin/Resources/TaxResource/Pages/ListTaxes.php create mode 100644 app/Models/TaxRate.php create mode 100644 database/factories/TaxRateFactory.php create mode 100644 database/migrations/2025_01_14_221133_create_tax_rates_table.php create mode 100644 database/seeders/TaxRateSeeder.php diff --git a/app/Filament/Admin/Resources/CustomerReportResource.php b/app/Filament/Admin/Resources/CustomerReportResource.php index 76e340c..bc18d83 100644 --- a/app/Filament/Admin/Resources/CustomerReportResource.php +++ b/app/Filament/Admin/Resources/CustomerReportResource.php @@ -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() diff --git a/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php b/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php index 3f892a0..569e5e0 100644 --- a/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php +++ b/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php @@ -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'), ]; diff --git a/app/Filament/Admin/Resources/TaxResource.php b/app/Filament/Admin/Resources/TaxRateResource.php similarity index 75% rename from app/Filament/Admin/Resources/TaxResource.php rename to app/Filament/Admin/Resources/TaxRateResource.php index 7f6eed7..a92151c 100644 --- a/app/Filament/Admin/Resources/TaxResource.php +++ b/app/Filament/Admin/Resources/TaxRateResource.php @@ -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'), ]; } } diff --git a/app/Filament/Admin/Resources/TaxRateResource/Pages/CreateTaxRate.php b/app/Filament/Admin/Resources/TaxRateResource/Pages/CreateTaxRate.php new file mode 100644 index 0000000..ac778a6 --- /dev/null +++ b/app/Filament/Admin/Resources/TaxRateResource/Pages/CreateTaxRate.php @@ -0,0 +1,11 @@ + */ + use HasFactory; + + protected $fillable = ['name', 'value']; +} diff --git a/database/factories/TaxRateFactory.php b/database/factories/TaxRateFactory.php new file mode 100644 index 0000000..1a697b0 --- /dev/null +++ b/database/factories/TaxRateFactory.php @@ -0,0 +1,23 @@ + + */ +class TaxRateFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/database/migrations/2025_01_14_221133_create_tax_rates_table.php b/database/migrations/2025_01_14_221133_create_tax_rates_table.php new file mode 100644 index 0000000..1d422d8 --- /dev/null +++ b/database/migrations/2025_01_14_221133_create_tax_rates_table.php @@ -0,0 +1,29 @@ +id(); + $table->string('name'); + $table->decimal('value', 8, 2); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('tax_rates'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 1462362..978bfab 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -27,6 +27,7 @@ public function run(): void QuoteSeeder::class, InvoiceSeeder::class, InvoiceReportSeeder::class, + TaxRateSeeder::class, ]); User::factory()->create([ diff --git a/database/seeders/TaxRateSeeder.php b/database/seeders/TaxRateSeeder.php new file mode 100644 index 0000000..639cd03 --- /dev/null +++ b/database/seeders/TaxRateSeeder.php @@ -0,0 +1,18 @@ + 'GST', 'value' => 5.00]); + TaxRate::create(['name' => 'PST', 'value' => 7.00]); + } +}