Files
compras/app/Models/PurchaseOrder.php
T
nala 63d20b10fc
tests / ci (push) Canceled after 0s
commit de armazens
2026-11-04 09:40:26 +02:00

55 lines
1.6 KiB
PHP

<?php
namespace App\Models;
use App\Models\Concerns\BelongsToTenant;
use App\Models\Concerns\ImmutablePurchaseRecord;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Schema;
/**
* @property int $id
* @property int $tenant_id
* @property int $requisition_id
* @property string $number
* @property array<string, mixed> $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<PurchaseOrderItem, $this> */
public function items(): HasMany
{
return $this->hasMany(PurchaseOrderItem::class);
}
/** @param Builder<PurchaseOrder> $query */
public function scopeVisibleTo(Builder $query, User $user): void
{
$query->whereIn('requisition_id', Requisition::query()->visibleTo($user)->select('id'));
}
/** @param Builder<PurchaseOrder> $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']));
}
}
}