$snapshot */ class PurchaseOrder extends Model { use BelongsToTenant, ImmutablePurchaseRecord; public $timestamps = false; protected $guarded = ['id']; protected function casts(): array { return ['snapshot' => 'array', 'issued_at' => 'datetime']; } /** @return HasMany */ public function items(): HasMany { return $this->hasMany(PurchaseOrderItem::class); } /** @param Builder $query */ public function scopeVisibleTo(Builder $query, User $user): void { $query->whereIn('requisition_id', Requisition::query()->visibleTo($user)->select('id')); } /** @param Builder $query */ public function scopeOperational(Builder $query): void { $query->where('purchase_orders.status', 'issued'); if (Schema::hasTable('order_cancellations')) { $query->whereNotExists(fn ($q) => $q->selectRaw('1')->from('order_cancellations as oc') ->whereColumn('oc.purchase_order_id', 'purchase_orders.id')->whereColumn('oc.tenant_id', 'purchase_orders.tenant_id') ->whereIn('oc.status', ['pending', 'approved'])); } } }