diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index 4d584b0..c70ab02 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -4,12 +4,32 @@ namespace App\Models; use App\Casts\MoneyCast; use App\Enums\InvoiceStatus; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; class Invoice extends Model { + use HasFactory; + public static function booted(): void + { + static::creating(function (Invoice $invoice) { + $invoice->invoice_number ??= static::generateInvoiceNumber(); + }); + } + + public static function generateInvoiceNumber(): string + { + $prefix = date('y').'-'; + + do { + $number = $prefix.str_pad(random_int(0, 99999), 5, '0', STR_PAD_LEFT); + } while (static::where('invoice_number', $number)->exists()); + + return $number; + } + protected $fillable = [ 'invoice_number', 'client_id', diff --git a/database/factories/InvoiceFactory.php b/database/factories/InvoiceFactory.php new file mode 100644 index 0000000..a123f35 --- /dev/null +++ b/database/factories/InvoiceFactory.php @@ -0,0 +1,29 @@ + InvoiceStatus::DRAFT, + 'invoice_date' => Carbon::now(), + 'due_date' => Carbon::now()->addDays(30), + 'notes' => $this->faker->word(), + 'internal_notes' => $this->faker->word(), + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + + 'client_id' => Client::factory()->withContact(), + ]; + } +} diff --git a/resources/views/components/⚡invoice-list.blade.php b/resources/views/components/⚡invoice-list.blade.php index ba1a24e..e4b7a8e 100644 --- a/resources/views/components/⚡invoice-list.blade.php +++ b/resources/views/components/⚡invoice-list.blade.php @@ -72,12 +72,12 @@ new class extends Component { @foreach($this->invoices as $invoice) - {{ $invoice->number }} + {{ $invoice->invoice_number }} {{ $invoice->client->abbreviation }} {{ $invoice->status->value }} - {{ $invoice->invoice_date }} - {{ $invoice->sent_at }} - {{ $invoice->due_date }} + {{ $invoice->invoice_date?->format('m/d/Y') }} + {{ $invoice->sent_at?->format('m/d/Y') }} + {{ $invoice->due_date?->format('m/d/Y') }} {{ formatMoney($invoice->total) }}