51 lines
1.3 KiB
PHP
51 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Observers;
|
|
|
|
use App\Models\RepairOrder;
|
|
use App\Models\Vehicle;
|
|
use App\Models\Part;
|
|
use App\Models\MaintenanceSchedule;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Str;
|
|
|
|
|
|
|
|
|
|
class PartObserver
|
|
{
|
|
/**
|
|
* Handle the Part "creating" event.
|
|
*/
|
|
public function creating(Part $part): void
|
|
{
|
|
// Generate part number if not provided
|
|
if (empty($part->part_number)) {
|
|
$prefix = 'P-';
|
|
$partName = Str::slug(substr($part->name, 0, 3));
|
|
$latest = Part::where('part_number', 'like', $prefix . $partName . '%')
|
|
->orderBy('part_number', 'desc')
|
|
->first();
|
|
|
|
$number = 1;
|
|
if ($latest) {
|
|
$parts = explode('-', $latest->part_number);
|
|
$number = intval(end($parts)) + 1;
|
|
}
|
|
|
|
$part->part_number = $prefix . $partName . '-' . str_pad($number, 4, '0', STR_PAD_LEFT);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handle the Part "updated" event.
|
|
*/
|
|
public function updated(Part $part): void
|
|
{
|
|
// If stock drops below reorder level, could trigger notifications
|
|
if ($part->isDirty('quantity_in_stock') && $part->quantity_in_stock <= $part->reorder_level) {
|
|
// Notification logic could go here
|
|
}
|
|
}
|
|
}
|