Jump to content

Botón de generar factura debe actualizar la fecha


Recommended Posts

Buenas os escribo porque en mi empresa quieren sacar los albaranes Antes que las facturas.
El problema es que cuando se crea el albaran, se crea el registro en order_invoice y cuando generan la factura sale a fecha de albarán.

para intentar paliar con esto he hecho unas funciones en un override de orderInvocie que quiero llamar en el archivo que genera la factura ubicado en src/PrestaShopBundle/Controller/Admin/Sell/Order/OrderController.php
 

    /**
     * @AdminSecurity(
     *     "is_granted('update', request.get('_legacy_controller'))",
     *     message="You do not have permission to generate this."
     * )
     *
     * Generates invoice for given order
     *
     * @param int $orderId
     *
     * @return RedirectResponse
     */
    public function generateInvoiceAction(int $orderId): RedirectResponse
    {
      
        OrderInvoice::checkInvoiceDate($orderId);

        try {
            $this->getCommandBus()->handle(new GenerateInvoiceCommand($orderId));

            $this->addFlash('success', $this->trans('Successful update.', 'Admin.Notifications.Success'));
        } catch (Exception $e) {
            $this->addFlash('error', $this->getErrorMessageForException($e, $this->getErrorMessages($e)));
        }

        return $this->redirectToRoute('admin_orders_view', [
            'orderId' => $orderId,
        ]);
    }

y aquí llega mi problema, que no me lee OrderInvoice::checkInvoiceDate y no se como importar las funciones dentro del override de esa clase en este fichero.

alguien sabe como importar la clase? o algún metodo mejor que no precise combiar este fichero?

Link to comment
Share on other sites

  • 2 weeks later...

La forma más fácil en tu caso es no intentar llamar directamente a OrderInvoice::checkInvoiceDate() desde ese controlador moderno, porque no reconoce los overrides.

En vez de eso, puedes hacer algo así dentro del método, justo antes de generar la factura:

$order = new Order($orderId); $invoices = $order->getInvoicesCollection(); foreach ($invoices as $invoice) { if (method_exists($invoice, 'checkInvoiceDate')) { $invoice->checkInvoiceDate(); } }

Así estarás usando la clase OrderInvoice con tu override activado, y puedes llamar tus funciones sin problemas. No necesitas importar nada raro ni tocar más ficheros. Solo asegúrate de q tu override esté bien escrito y en la carpeta correcta (override/classes/order/OrderInvoice.php).

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...