belongsTo(OrdenProduccion::class); } public function proveedor() { return $this->belongsTo(Proveedor::class); } /* Lógica de negocio */ protected static function booted() { $createTrasladoFn = function ($acabado) { if ($acabado->cantidad_recibida !== null) { // Evitar duplicados $exists = \App\Models\TrasladoPrenda::where('referencia_type', self::class) ->where('referencia_id', $acabado->id) ->exists(); if (! $exists) { $destino = 'bodega'; \App\Models\TrasladoPrenda::crearDesdeReferencia( $acabado, 'acabados', $destino ); // Avanzar la OP al cerrar este proceso $acabado->ordenProduccion?->avanzarEstado(); } } if ( $acabado->fecha_recepcion && $acabado->cantidad_recibida !== null ) { // Validar si ya no quedan procesos pendientes $pendientes = self::where('orden_produccion_id', $acabado->orden_produccion_id) ->whereNull('fecha_recepcion') ->exists(); if (!$pendientes) { $acabado->ordenProduccion?->update([ 'estado' => 'finalizada', ]); } } }; static::updated($createTrasladoFn); static::saved($createTrasladoFn); } }