Hola @nataliabici29 y @manueldeco,
@manueldeco tiene razón en que el manejo de archivos puede ser complicado con la mezcla de legacy y Symfony en PrestaShop 8.1.5. Usar $_FILES directamente en un override así, aunque pueda funcionar en ciertos contextos, no es lo más recomendado ni seguro. Lo ideal es integrar la subida de archivos mediante un Symfony Form o al menos usar las clases de UploadedFile de Symfony para un manejo más robusto y seguro.
El problema principal con tu processImportCsv está en la validación y los campos mínimos de CartRule. La clase CartRule espera muchos más campos para poder guardar un vale correctamente, incluso si no los necesitas para tu caso de uso específico. Muchos de ellos tienen valores por defecto, pero id_shop_list, minimum_amount, minimum_amount_currency son críticos, y a menudo id_customer si es para un cliente específico.
Aquí tienes una versión corregida y más robusta de cómo podrías enfocar la creación del vale, asegurando que se establezcan los campos mínimos requeridos por CartRule para PrestaShop 8.1.5. Es una simplificación, pero debería darte una base que al menos no falle en el add() por campos faltantes.
class AdminVouchersController extends AdminVouchersControllerCore
{
public function processImportCsv()
{
// ... (el manejo de fopen, fgetcsv etc. se mantiene por simplicidad, pero mejor usar Symfony Request)
while (($data = fgetcsv($handle, 1000, ';')) !== false) {
$code = $data[0] ?? '';
$value = (float) ($data[1] ?? 0);
if (empty($code) || $value <= 0) {
$this->errors[] = $this->trans('Datos de vale inválidos o incompletos: %s', ['%s' => implode(', ', $data)], 'Admin.Notifications.Error');
Como ves, he añadido varios campos que son esenciales para la validación y el correcto funcionamiento del CartRule. Un override de este tipo funciona para una necesidad muy específica, pero tiene el riesgo de romperse con futuras actualizaciones de PrestaShop si la estructura de CartRule o AdminVouchersController cambia.
Para una solución más profesional y mantenible, especialmente si necesitas más opciones de importación o una integración más limpia, te recomiendo encarecidamente un módulo dedicado. Soluciones como Importar cupon desde CSV están diseñadas para manejar estos casos de uso de forma robusta y sin overrides manuales que pueden ser frágiles.