belongsTo(Proveedor::class); } public function ordenProduccion() { return $this->belongsTo(OrdenProduccion::class); } /* Lógica de negocio */ protected static function booted() { static::saving(function ($confeccion) { // Total a pagar if ($confeccion->cantidad_recibida !== null) { $confeccion->total_pagar = $confeccion->cantidad_recibida * $confeccion->valor_por_prenda; } // Estado automático if (!$confeccion->cantidad_recibida) { $confeccion->estado = 'pendiente'; } elseif ($confeccion->cantidad_recibida < $confeccion->cantidad_enviada) { $confeccion->estado = 'parcial'; } else { $confeccion->estado = 'completo'; } }); // Cuando se completa la confección → avanzar OP static::updated(function ($confeccion) { if ($confeccion->estado === 'completo') { $confeccion->ordenProduccion?->avanzarEstado(); } }); } }