Hola @elena89, el enfoque que estás intentando en AdminProductsController es el método tradicional de los controladores legacy de PrestaShop, pero en PrestaShop 9.1.5 (con Symfony 6.4 y PHP 8.x) tiene sus limitaciones y riesgos de mantenimiento. La forma en que processBulkchangeProductType se invoca y cómo interactúa con el EntityManager de Doctrine o los servicios de producto ha cambiado.
Tu __construct para añadir la acción masiva es correcto, pero el problema viene en la lógica del processBulkchangeProductType. Es fundamental asegurar que la actualización del objeto Product se realice correctamente y que los cambios se persistan en la base de datos. Además, la gestión de errores y notificaciones debe ser robusta.
Aquí te dejo una versión corregida que debería funcionar para actualizar el tipo de producto. La clave es instanciar el producto y usar su método update() directamente, asegurándote de que no haya otros overrides o módulos interfiriendo:
// En classes/override/controllers/admin/AdminProductsController.php
class AdminProductsController extends AdminProductsControllerCore
{
// ... constructor es correcto ...
public function processBulkchangeProductType()
{
$productIds = Tools::getValue('product_box');
if (!empty($productIds)) {
foreach ($productIds as $id_product) {
$product = new Product((int) $id_product);
He añadido el update() explícitamente y un mensaje de confirmación. Sin embargo, para entornos de producción, confiar en overrides directos de controladores legacy puede ser frágil y provocar problemas con futuras actualizaciones del core de PrestaShop. Para una solución más mantenible y con menos riesgo, te sugiero considerar un módulo dedicado que maneje estas operaciones masivas de forma más robusta, integrándose mejor con la arquitectura de Symfony. Existe una solución para cambio masivo del tipo que ofrece esta funcionalidad de manera segura.