Hola @elenaauto,
Los compañeros @guillermostore13 y @pablo_bici tocan puntos muy importantes. Modificar la fecha de una factura es una operación delicada en PrestaShop por varias razones:
- Integridad de datos:
date_add en OrderInvoice es la fecha de creación. Cambiarla puede romper la coherencia con la fecha del pedido, el estado del pedido, y la numeración consecutiva. PrestaShop no está diseñado para permitir un cambio fácil de este campo.
- Overrides frágiles: Como bien mencionan, un override de
AdminInvoicesController es una solución temporal y propensa a fallos con cada actualización de PrestaShop, ya que el código base de los controladores puede cambiar.
- Impacto en PDFs: La generación del PDF de la factura se basa en el objeto
OrderInvoice y sus fechas. Un cambio incorrecto podría generar PDFs desactualizados o con errores.
Tu intento de override es un buen punto de partida para entender el problema. La línea date_add = Tools::getValue('new_invoice_date'); es el problema, ya que date_add espera un objeto DateTime o una cadena en formato Y-m-d H:i:s que luego se convierte. Además, debes asegurarte de que el método processEditInvoiceDate se llama correctamente tras el envío de un formulario. Un ejemplo de cómo actualizar la fecha de forma más controlada (aunque con las advertencias mencionadas) sería:
// Dentro de un método de un módulo o un override bien estructurado
public function updateInvoiceDate($id_invoice, $new_date_string)
{
$invoice = new OrderInvoice((int)$id_invoice);
if (!Validate::isLoadedObject($invoice)) {
return false;
}
try {
$new_datetime = new DateTime($new_date_string);
$invoice->date_add = $new_datetime->format('Y-m-d H:i:s');
Este snippet muestra cómo usar un objeto DateTime para una asignación correcta. Sin embargo, esto no aborda el reto de la interfaz de usuario, la validación de fechas o el manejo de regeneración del PDF. Para una solución completa y mantenible que te permita gestionar cambio de fecha sin tocar el código core y que esté diseñada para funcionar con las últimas versiones de PrestaShop (incluido PS 8.2.3), mi recomendación es utilizar un módulo especializado. Estos módulos están diseñados para integrar esta funcionalidad de forma segura, respetando la lógica de PrestaShop y la integridad de los datos, y suelen incluir la interfaz necesaria en el back office.