From 8ba8501e5328af6853af59d4e351c61db551daab Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Fri, 24 Jan 2025 21:37:05 -0500 Subject: [PATCH] WIP Work on Payments --- app/Enums/IconEnum.php | 6 ++-- .../Resources/CustomerReportResource.php | 8 ++--- .../Admin/Resources/InvoiceReportResource.php | 4 +-- .../Admin/Resources/InvoiceResource.php | 4 +-- .../Admin/Resources/PackingSlipResource.php | 2 +- .../Admin/Resources/ServiceTypeResource.php | 4 ++- app/Models/Invoice.php | 5 +++ app/Models/Payment.php | 31 ++++++++++++++++++ app/Providers/Filament/AdminPanelProvider.php | 10 +++++- .../migrations/018_create_payments_table.php | 32 +++++++++++++++++++ .../019_create_invoice_payment_table.php | 31 ++++++++++++++++++ 11 files changed, 123 insertions(+), 14 deletions(-) create mode 100644 app/Models/Payment.php create mode 100644 database/migrations/018_create_payments_table.php create mode 100644 database/migrations/019_create_invoice_payment_table.php diff --git a/app/Enums/IconEnum.php b/app/Enums/IconEnum.php index 2d65181..1be244b 100644 --- a/app/Enums/IconEnum.php +++ b/app/Enums/IconEnum.php @@ -5,7 +5,7 @@ enum IconEnum: string { case DEFAULT = 'heroicon-o-rectangle-stack'; - case INVOICE = 'lucide-receipt-text'; + case INVOICE = 'lucide-file-text'; case ORDER = 'lucide-shopping-cart'; case QUOTE = 'lucide-quote'; case CUSTOMER = 'lucide-building'; @@ -15,8 +15,8 @@ enum IconEnum: string case TAX_RATE = 'lucide-circle-dollar-sign'; // case PRODUCT_SERVICE = 'heroicon-o-rectangle-stack'; - // case CUSTOMER_SALES = 'heroicon-o-rectangle-stack'; - // case INVOICE_REPORT = 'heroicon-o-rectangle-stack'; + case CUSTOMER_SALES = 'lucide-file-user'; + case INVOICE_REPORT = 'lucide-files'; case TAB_ALL = 'lucide-layout-grid'; case TAB_OVERDUE = 'lucide-calendar-clock'; diff --git a/app/Filament/Admin/Resources/CustomerReportResource.php b/app/Filament/Admin/Resources/CustomerReportResource.php index 0d698e5..04424d3 100644 --- a/app/Filament/Admin/Resources/CustomerReportResource.php +++ b/app/Filament/Admin/Resources/CustomerReportResource.php @@ -18,13 +18,13 @@ class CustomerReportResource extends Resource { protected static ?string $model = Customer::class; - protected static ?string $navigationGroup = 'Reports'; + protected static ?string $navigationIcon = IconEnum::CUSTOMER_SALES->value; - protected static ?string $navigationIcon = IconEnum::DEFAULT->value; + protected static ?string $navigationGroup = 'Financial'; - protected static ?string $navigationLabel = 'Customer Sales'; + protected static ?string $navigationLabel = 'Customer Reports'; - protected static ?int $navigationSort = 2; + protected static ?int $navigationSort = 3; public static function form(Form $form): Form { diff --git a/app/Filament/Admin/Resources/InvoiceReportResource.php b/app/Filament/Admin/Resources/InvoiceReportResource.php index b9c18a8..c89390c 100644 --- a/app/Filament/Admin/Resources/InvoiceReportResource.php +++ b/app/Filament/Admin/Resources/InvoiceReportResource.php @@ -17,9 +17,9 @@ class InvoiceReportResource extends Resource { - protected static ?string $navigationIcon = IconEnum::DEFAULT->value; + protected static ?string $navigationIcon = IconEnum::INVOICE_REPORT->value; - protected static ?string $navigationGroup = 'Reports'; + protected static ?string $navigationGroup = 'Financial'; protected static ?string $navigationLabel = 'Invoice Reports'; diff --git a/app/Filament/Admin/Resources/InvoiceResource.php b/app/Filament/Admin/Resources/InvoiceResource.php index 766b146..74bcf2d 100644 --- a/app/Filament/Admin/Resources/InvoiceResource.php +++ b/app/Filament/Admin/Resources/InvoiceResource.php @@ -31,9 +31,9 @@ class InvoiceResource extends Resource protected static ?string $navigationIcon = IconEnum::INVOICE->value; - protected static ?string $navigationGroup = 'Production'; + protected static ?string $navigationGroup = 'Financial'; - protected static ?int $navigationSort = 2; + protected static ?int $navigationSort = 1; public static function form(Form $form): Form { diff --git a/app/Filament/Admin/Resources/PackingSlipResource.php b/app/Filament/Admin/Resources/PackingSlipResource.php index 4ea8207..4977d16 100644 --- a/app/Filament/Admin/Resources/PackingSlipResource.php +++ b/app/Filament/Admin/Resources/PackingSlipResource.php @@ -24,7 +24,7 @@ class PackingSlipResource extends Resource protected static ?string $navigationIcon = IconEnum::PACKING_SLIP->value; - protected static ?string $navigationGroup = 'Management'; + protected static ?string $navigationGroup = 'Production'; protected static ?int $navigationSort = 2; diff --git a/app/Filament/Admin/Resources/ServiceTypeResource.php b/app/Filament/Admin/Resources/ServiceTypeResource.php index ffefe4f..dbbe323 100644 --- a/app/Filament/Admin/Resources/ServiceTypeResource.php +++ b/app/Filament/Admin/Resources/ServiceTypeResource.php @@ -18,10 +18,12 @@ class ServiceTypeResource extends Resource protected static ?string $navigationIcon = IconEnum::DEFAULT->value; - protected static ?string $navigationGroup = 'Reports'; + protected static ?string $navigationGroup = 'Financial'; protected static ?string $label = 'Product Services'; + protected static ?int $navigationSort = 2; + public static function getWidgets(): array { return [ diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index 1e77b7d..fc59b1b 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -120,4 +120,9 @@ public function invoiceReports(): BelongsToMany { return $this->belongsToMany(InvoiceReport::class); } + + public function payments(): BelongsToMany + { + return $this->belongsToMany(Payment) + } } diff --git a/app/Models/Payment.php b/app/Models/Payment.php new file mode 100644 index 0000000..fd46935 --- /dev/null +++ b/app/Models/Payment.php @@ -0,0 +1,31 @@ +belongsTo(Customer::class); + } + + public function invoices(): BelongsToMany + { + return $this->belongsToMany(Invoice::class) + ->withPivot('applied_amount') + ->withTimestamps(); + } +} diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 29759ce..d481c82 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -6,6 +6,7 @@ use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DispatchServingFilamentEvent; +use Filament\Navigation\NavigationGroup; use Filament\Pages; use Filament\Panel; use Filament\PanelProvider; @@ -53,6 +54,13 @@ public function panel(Panel $panel): Panel ->authMiddleware([ Authenticate::class, ]) - ->sidebarWidth('13rem'); + ->sidebarWidth('13rem') + ->navigationGroups([ + NavigationGroup::make('Production'), + NavigationGroup::make('Management'), + NavigationGroup::make('Financial'), + NavigationGroup::make('Reports'), + NavigationGroup::make('Settings'), + ]); } } diff --git a/database/migrations/018_create_payments_table.php b/database/migrations/018_create_payments_table.php new file mode 100644 index 0000000..333394f --- /dev/null +++ b/database/migrations/018_create_payments_table.php @@ -0,0 +1,32 @@ +id(); + + $table->foreignId('customer_id')->constrained(); + $table->decimal('amount', 8, 2); + $table->decimal('unapplied_amount', 8, 2)->nullable(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('payments'); + } +}; diff --git a/database/migrations/019_create_invoice_payment_table.php b/database/migrations/019_create_invoice_payment_table.php new file mode 100644 index 0000000..648f7d2 --- /dev/null +++ b/database/migrations/019_create_invoice_payment_table.php @@ -0,0 +1,31 @@ +id(); + + $table->foreignId('invoice_id')->constrained(); + $table->foreignId('payment_id')->constrained(); + $table->decimal('applied_amount', 8, 2); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('invoice_payment'); + } +};