'integer', 'variant_id' => 'integer', 'fecha_reserva' => 'datetime', 'importe' => 'decimal:2', 'tipo_pago' => EntryReservationPaymentType::class, ]; } protected static function booted(): void { static::saving(function (self $reservation): void { if ($reservation->variant_id === null) { return; } $variant = Variant::withTrashed()->findOrFail($reservation->variant_id); // Existing variant-based callers can keep creating reservations as before. $reservation->catalog_item_id ??= $variant->catalog_item_id; if ($reservation->catalog_item_id !== $variant->catalog_item_id) { throw ValidationException::withMessages([ 'variant_id' => 'La variante no pertenece al ítem del catálogo seleccionado.', ]); } }); } /** @return BelongsTo */ public function catalogItem(): BelongsTo { return $this->belongsTo(CatalogItem::class)->withTrashed(); } /** @return BelongsTo */ public function batch(): BelongsTo { return $this->belongsTo(ReservationBatch::class, 'batch_id'); } /** @return BelongsTo */ public function variant(): BelongsTo { return $this->belongsTo(Variant::class)->withTrashed(); } public function ticket(): BelongsTo { return $this->belongsTo(Ticket::class); } public function inventory(): BelongsTo { return $this->belongsTo(Inventory::class); } }