WIP Work on Payments

This commit is contained in:
Nisse Lommerde 2025-01-24 21:37:05 -05:00
parent f937302159
commit 8ba8501e53
11 changed files with 123 additions and 14 deletions

View File

@ -5,7 +5,7 @@
enum IconEnum: string enum IconEnum: string
{ {
case DEFAULT = 'heroicon-o-rectangle-stack'; case DEFAULT = 'heroicon-o-rectangle-stack';
case INVOICE = 'lucide-receipt-text'; case INVOICE = 'lucide-file-text';
case ORDER = 'lucide-shopping-cart'; case ORDER = 'lucide-shopping-cart';
case QUOTE = 'lucide-quote'; case QUOTE = 'lucide-quote';
case CUSTOMER = 'lucide-building'; case CUSTOMER = 'lucide-building';
@ -15,8 +15,8 @@ enum IconEnum: string
case TAX_RATE = 'lucide-circle-dollar-sign'; case TAX_RATE = 'lucide-circle-dollar-sign';
// case PRODUCT_SERVICE = 'heroicon-o-rectangle-stack'; // case PRODUCT_SERVICE = 'heroicon-o-rectangle-stack';
// case CUSTOMER_SALES = 'heroicon-o-rectangle-stack'; case CUSTOMER_SALES = 'lucide-file-user';
// case INVOICE_REPORT = 'heroicon-o-rectangle-stack'; case INVOICE_REPORT = 'lucide-files';
case TAB_ALL = 'lucide-layout-grid'; case TAB_ALL = 'lucide-layout-grid';
case TAB_OVERDUE = 'lucide-calendar-clock'; case TAB_OVERDUE = 'lucide-calendar-clock';

View File

@ -18,13 +18,13 @@ class CustomerReportResource extends Resource
{ {
protected static ?string $model = Customer::class; 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 public static function form(Form $form): Form
{ {

View File

@ -17,9 +17,9 @@
class InvoiceReportResource extends Resource 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'; protected static ?string $navigationLabel = 'Invoice Reports';

View File

@ -31,9 +31,9 @@ class InvoiceResource extends Resource
protected static ?string $navigationIcon = IconEnum::INVOICE->value; 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 public static function form(Form $form): Form
{ {

View File

@ -24,7 +24,7 @@ class PackingSlipResource extends Resource
protected static ?string $navigationIcon = IconEnum::PACKING_SLIP->value; protected static ?string $navigationIcon = IconEnum::PACKING_SLIP->value;
protected static ?string $navigationGroup = 'Management'; protected static ?string $navigationGroup = 'Production';
protected static ?int $navigationSort = 2; protected static ?int $navigationSort = 2;

View File

@ -18,10 +18,12 @@ class ServiceTypeResource extends Resource
protected static ?string $navigationIcon = IconEnum::DEFAULT->value; 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 ?string $label = 'Product Services';
protected static ?int $navigationSort = 2;
public static function getWidgets(): array public static function getWidgets(): array
{ {
return [ return [

View File

@ -120,4 +120,9 @@ public function invoiceReports(): BelongsToMany
{ {
return $this->belongsToMany(InvoiceReport::class); return $this->belongsToMany(InvoiceReport::class);
} }
public function payments(): BelongsToMany
{
return $this->belongsToMany(Payment)
}
} }

31
app/Models/Payment.php Normal file
View File

@ -0,0 +1,31 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
class Payment extends Model
{
use HasFactory;
protected $fillable = [
'customer_id',
'amount',
'unapplied_amount',
];
public function customer(): BelongsTo
{
return $this->belongsTo(Customer::class);
}
public function invoices(): BelongsToMany
{
return $this->belongsToMany(Invoice::class)
->withPivot('applied_amount')
->withTimestamps();
}
}

View File

@ -6,6 +6,7 @@
use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent; use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Navigation\NavigationGroup;
use Filament\Pages; use Filament\Pages;
use Filament\Panel; use Filament\Panel;
use Filament\PanelProvider; use Filament\PanelProvider;
@ -53,6 +54,13 @@ public function panel(Panel $panel): Panel
->authMiddleware([ ->authMiddleware([
Authenticate::class, Authenticate::class,
]) ])
->sidebarWidth('13rem'); ->sidebarWidth('13rem')
->navigationGroups([
NavigationGroup::make('Production'),
NavigationGroup::make('Management'),
NavigationGroup::make('Financial'),
NavigationGroup::make('Reports'),
NavigationGroup::make('Settings'),
]);
} }
} }

View File

@ -0,0 +1,32 @@
<?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('payments', function (Blueprint $table) {
$table->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');
}
};

View File

@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('invoice_payment', function (Blueprint $table) {
$table->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');
}
};