belongsTo(Proveedor::class); } public function ordenProduccion() { return $this->belongsTo(OrdenProduccion::class); } /* Lógica de negocio */ protected static function booted() { static::saving(function ($tintoreria) { if ($tintoreria->cantidad_recibida !== null) { $tintoreria->perdidas = $tintoreria->cantidad_enviada - $tintoreria->cantidad_recibida; } }); $createTrasladoFn = function ($tintoreria) { if ($tintoreria->cantidad_recibida !== null) { // Evitar duplicados $exists = \App\Models\TrasladoPrenda::where('referencia_type', self::class) ->where('referencia_id', $tintoreria->id) ->exists(); if (! $exists) { // Mapear "perdidas" a prendas_defectuosas en el traslado $payload = [ 'prendas_defectuosas' => $tintoreria->perdidas ?? 0, ]; $destino = 'acabados'; \App\Models\TrasladoPrenda::crearDesdeReferencia( $tintoreria, 'tintoreria', $destino, $payload ); // Avanzar la OP al cerrar el paso $tintoreria->ordenProduccion?->avanzarEstado(); } } if ( $tintoreria->fecha_recepcion && $tintoreria->cantidad_recibida !== null ) { $tintoreria->ordenProduccion?->avanzarEstado(); } }; static::updated($createTrasladoFn); static::saved($createTrasladoFn); } }