File: /home/posscale/www/printmanager/app/Models/Order.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Order extends Model
{
use HasFactory;
protected $fillable = [
'printer_instance_id',
'tenant_id',
'toner_ink_id',
'supplier_id',
'quantity',
'total_price',
'order_date',
'status',
'auto_ordered',
'user_id',
];
protected $casts = [
'auto_ordered' => 'boolean',
'order_date' => 'datetime',
];
public function tonerink()
{
return $this->belongsTo(TonerInk::class,'toner_ink_id', 'id');
}
public function supplier()
{
return $this->belongsTo(Supplier::class,'supplier_id', 'id' );
}
public function user()
{
return $this->belongsTo(User::class,'user_id','id');
}
public function getPrinterNameTenantAttribute()
{
// Ensure tenant_id exists
if (! $this->tenant_id) {
return 'Unknown';
}
tenancy()->initialize($this->tenant_id);
$printer = Printer::find($this->printer_instance_id);
$name = $printer->model_name ?? 'Unknown Printer';
$name .= " ".($printer->equipment_id ??'');
tenancy()->end();
return $name;
}
public function tenant(): BelongsTo
{
return $this->belongsTo(Tenant::class, 'tenant_id');
}
protected static function booted()
{
static::creating(function ($model) {
if (empty($model->toner_ink_id) && $model->printer_instance_id) {
$model->toner_ink_id = TonerLevelMonitoring::where('id', $model->printer_instance_id)
->value('toner_ink_id');
$model->tenant_id = TonerLevelMonitoring::where('id', $model->printer_instance_id)
->value('tenant_id');
}
});
static::updating(function ($model) {
// If printer_instance_id has changed OR toner_ink_id is missing
if ($model->isDirty('printer_instance_id')) {
$model->toner_ink_id = TonerLevelMonitoring::where('id', $model->printer_instance_id)
->value('toner_ink_id');
$model->tenant_id = TonerLevelMonitoring::where('id', $model->printer_instance_id)
->value('tenant_id');
}
if (auth()->check()) {
$model->user_id = auth()->id();
}
});
}
}