Hola @nuria_tienda y @marcos94,
@marcos94 tiene razón, la referencia de las notas de crédito en PrestaShop 1.7.x (y versiones anteriores) se genera en el momento de la creación y no está diseñada para ser modificada fácilmente después a través del método update() del ObjectModel. El campo reference se considera casi inmutable una vez que la nota de crédito existe.
Para lograr lo que necesitas, la forma más directa sin un módulo dedicado es realizar un override del AdminCreditSlipsController y, en lugar de confiar en ObjectModel::update(), ejecutar una consulta directa a la base de datos para modificar solo ese campo. Esto es un 'hack' pero funciona si se hace con cuidado. Aquí te dejo un snippet que sobrescribe el método postProcess para incluir la lógica de actualización directa:
class AdminCreditSlipsController extends AdminCreditSlipsControllerCore
{
public function postProcess()
{
if (Tools::isSubmit('submitAddcredit_slip') || Tools::isSubmit('submitUpdatemodule')) {
// Tu lógica de formulario y validación aquí
// ...
}
if (Tools::isSubmit('id_credit_slip') && Tools::isSubmit('custom_reference_field_name')) {
$idCreditSlip = (int)Tools::getValue('id_credit_slip');
Este código asume que tienes un campo en tu formulario de edición de nota de crédito llamado custom_reference_field_name. Asegúrate de añadir ese campo al formulario. Este método actualiza la referencia directamente en la tabla ps_credit_slip antes de que parent::postProcess() haga lo suyo. Es crucial que el nombre del campo del formulario coincida.
Para una solución más robusta y mantenible, especialmente si no quieres lidiar con overrides manuales que pueden romperse en futuras actualizaciones, te recomendaría un módulo especializado. Por ejemplo, el módulo Cambio de número de comprobante de crédito está diseñado específicamente para esta tarea y te ahorrará problemas a largo plazo.