Jump to content

Recommended Posts

Hola a todos!

 

me gustaría poder guardar las facturas que se generan de los pedidos. Siempre que se genere un factura (por ejemplo al cambiar el pedido de estado), que se guarde dicho PDF físicamente en una carpeta. Lo necesito para después con un proceso externo, obtener dicha factura por FTP.

 

¿Alguien sabe como puedo hacerlo?

 

 

Muchas gracias!

Link to comment
Share on other sites

No consigo hacerlo. Estoy metiendo el siguiente codigo dentro de AdminPdfController, en la función generatePDF

public function generatePDF($object, $template)
{
   $pdf = new PDF($object, $template, Context::getContext()->smarty);
   $pdf->render();

   // Añadido por mi
   $file_attachement['content'] = $pdf->render(false);
   $file_attachement['mime'] = 'application/pdf';
   file_put_contents(_PS_ROOT_DIR_."/pdf_order_invoices/order.pdf", file_get_contents($file_attachement));
}

Tengo que decir que soy nuevo en el mundo de Prestashop, así que es posible que esté poniendo alguna tonteria.

 

Este código se lanza cuando generamos un fichero PDF, por ejemplo cuando pulsamos sobre la factura de un pedido.

 

Evidentemente estoy haciendo algo mal, pero no consigo solucionarlo...

 

 

Link to comment
Share on other sites

Archivar $file_attachement['content'], no $file_attachement. También debe utilizar diferentes nombres de archivo.

 

Store $file_attachement['content'], not $file_attachement. You should also use different file names.

Link to comment
Share on other sites

Finalmente he conseguido que funcione.

 

Cuando un cliente realiza el pago de un pedido, o cuando lo hacemos desde el backoffice, se genera automáticamente la factura en una determinada ruta (en mi caso, en una carpeta nueva llamada pdf_order_invoices dentro de docs.

 

Para ello he sobreescrito el método validateOrder de clase PaymentModule cambiándolo ligeramente, y he situado este nuevo fichero en override/classes/PaymentModule.php

 

Él código es el siguiente:

abstract class PaymentModule extends PaymentModuleCore
{

public function validateOrder($id_cart, $id_order_state, $amount_paid, $payment_method = 'Unknown',
        $message = null, $extra_vars = array(), $currency_special = null, $dont_touch_amount = false,
        $secure_key = false, Shop $shop = null)
    {
           //Código de PaymentModuleCore.validateOrder() hasta el bloque que viene comentado con "// Join PDF invoice"
           //Tras ese bloque, metemos el siguiente código

            //Para generar la factura y guardarla físicamente al realizarse el pago de un pedido, tanto en el frontoffice como en el backoffice
                        // Creamos el registro de la factura en BD, en la tabla ps_order_invoice
                        $order->setInvoice(true);

                        //Obtenemos los datos de la factura
                        $order_invoice_list_aux = $order->getInvoicesCollection();
                        
                        //Instanciamos el objeto PDF con los datos de la factura
                        $pdfAux = new PDF($order_invoice_list_aux, PDF::TEMPLATE_INVOICE, $this->context->smarty);
                        
                        //Generamos la factura
                        $file_attachementAux = $pdfAux->render(false);
                        //Damos el nombre al pdf que vamos a generar
                        $nombreFicheroSalida = 'oi_'.str_pad((string)$order->id, 10,"0",STR_PAD_LEFT).'.pdf';
                        //Guardamos la factura en la ruta correspondiente
                        file_put_contents(_PS_ROOT_DIR_."/docs/pdf_order_invoices/".$nombreFicheroSalida, $file_attachementAux);
                        // FIN Codigo Añadido

            //Resto de código de validateOrder

    }

}
  • Like 1
Link to comment
Share on other sites

  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...