benjamindiazg Posted April 28, 2016 Share Posted April 28, 2016 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 More sharing options...
tuk66 Posted April 28, 2016 Share Posted April 28, 2016 Este código genera el contenido del PDF en el archivo /classes/PaymentModule.php. Puede guardarlo mediante funciones de PHP. This code generates PDF content in the /classes/PaymentModule.php file. You can save it using PHP functions. http://php.net/manual/en/function.file-put-contents.php $file_attachement['content'] = $pdf->render(false); Link to comment Share on other sites More sharing options...
benjamindiazg Posted April 28, 2016 Author Share Posted April 28, 2016 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 More sharing options...
tuk66 Posted April 29, 2016 Share Posted April 29, 2016 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 More sharing options...
benjamindiazg Posted April 29, 2016 Author Share Posted April 29, 2016 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 } } 1 Link to comment Share on other sites More sharing options...
Recommended Posts