'date', 'subtotal' => 'decimal:2', 'tax_amount' => 'decimal:2', 'discount_amount' => 'decimal:2', 'total_amount' => 'decimal:2' ]; public function items(): HasMany { return $this->hasMany(PurchaseReturnItem::class, 'return_id'); } public function vendor(): BelongsTo { return $this->belongsTo(User::class, 'vendor_id'); } public function warehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'warehouse_id'); } public function vendorDetails(): BelongsTo { return $this->belongsTo(\Workdo\Account\Models\Vendor::class, 'vendor_id', 'user_id'); } public function originalInvoice(): BelongsTo { return $this->belongsTo(PurchaseInvoice::class, 'original_invoice_id'); } public function debitNote(): HasMany { return $this->hasMany(DebitNote::class, 'return_id'); } protected static function boot() { parent::boot(); static::creating(function ($return) { if (empty($return->return_number)) { $return->return_number = static::generateReturnNumber(); } }); } public static function generateReturnNumber(): string { $year = date('Y'); $month = date('m'); $lastReturn = static::where('return_number', 'like', "PR-{$year}-{$month}-%") ->where('created_by', creatorId()) ->orderBy('return_number', 'desc') ->first(); if ($lastReturn) { $lastNumber = (int) substr($lastReturn->return_number, -3); $nextNumber = $lastNumber + 1; } else { $nextNumber = 1; } return "PR-{$year}-{$month}-" . str_pad($nextNumber, 3, '0', STR_PAD_LEFT); } }