Cree facturas en PDF que ninguna otra tienda Magento tiene

La factura es un documento comercial obligatorio utilizado por usted y millones de otras tiendas en línea.

¿Cómo destacar en un entorno tan competitivo?

¿Cómo hacer que el documento sea claro, único y sin altos costos?

Hoy hablaremos sobre cómo hacerlo sin ninguna habilidad de desarrollo. Consideraremos cómo hacer facturas automáticamente, adjuntar una factura en PDF a un correo electrónico y crear una versión en PDF personalizada.

¡Empecemos!

Resumen del artículo [ ocultar ]

  • Cómo crear facturas enviadas automáticamente en Magento 2 mediante programación
  • Cómo adjuntar una factura en PDF a un correo electrónico en Magento 2
    • Solución 1
    • Solución 2
  • Personaliza tu factura en PDF
    • Agregue su logotipo a la factura en PDF usando la configuración del panel de administración de vainilla
    • Opciones de personalización avanzadas con el módulo de factura en PDF de Amasty

Cómo crear facturas enviadas automáticamente en Magento 2 mediante programación

Todos los comerciantes de Magento 2 buscan personalizar el PDF de la factura para reducir el tiempo dedicado al proceso y destacar frente a la competencia. Sin embargo, para hacerlo automáticamente, debe desarrollar un módulo personalizado.

Si no desea desperdiciar dinero en el desarrollo de extensiones personalizadas o no tiene tiempo para desarrollar extensiones usted mismo, entonces puede probar nuestras Acciones de pedidos masivos . Este módulo le permite crear facturas de forma masiva en la cuadrícula de pedidos. Ya no necesita abrir cada pedido uno por uno para hacer una factura. ¡Ahorre su tiempo para ofertas más importantes!

IR A ACCIONES DE PEDIDO MASIVO

 

Digamos que está seguro de sus habilidades de desarrollo y desea crear un módulo personalizado. Así que echa un vistazo a los siguientes consejos que hemos preparado para ti.

Paso 1. Vaya a app/code/<Vendor>/<Module>/etc , cree module.xml e inserte el siguiente código:
div.embedPastebin { text-align:left; padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } div.embedPastebin { } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,’Bitstream Vera Sans Mono’,’Courier’,monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; }

Datos alojados con ♥ por Pastebin.comDescargar RawVer original
  1. <? versión xml = «1.0» ?>
  2. <config xmlns_xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi_noNamespaceSchemaLocation=»urn:magento:framework:Module/etc/module.xsd»>
  3. <nombre del módulo=»<Proveedor>_<Módulo>» setup_version=»1.0.0″>
  4. </módulo>
  5. </config>

Paso 2. Agregue registration.php a app/code/<Vendor>/<Module> y registre el mod ingresando el código:
div.embedPastebin { text-align:left; padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } div.embedPastebin { } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,’Bitstream Vera Sans Mono’,’Courier’,monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; }

Datos alojados con ♥ por Pastebin.comDescargar RawVer original
  1. <?php
  2.  
  3. MagentoFrameworkComponentComponentRegistrar :: registro (
  4. MagentoFrameworkComponentComponentRegistrar :: MÓDULO ,
  5. ‘<Proveedor>_<Módulo>’ ,
  6. __DIR__
  7. ) ;

Paso 3. Luego vaya a <Proveedor>/<Módulo>/etc y cree events.xml . Utilice este código:
div.embedPastebin { text-align:left; padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } div.embedPastebin { } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,’Bitstream Vera Sans Mono’,’Courier’,monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; }

Datos alojados con ♥ por Pastebin.comDescargar RawVer original
  1. <? versión xml = «1.0» ?>
  2. <config xmlns_xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi_noNamespaceSchemaLocation=»urn:magento:framework:Event/etc/events.xsd»>
  3.     <nombre del evento=»checkout_submit_all_after»>
  4.         <observer name=»Vendor>_<Module>::auto_invoice_shipment_checkout_submit_all_after» instance=»<Vendor><Module>ObserverCheckoutAllSubmitAfterObserver»/>
  5.     </evento>
  6. </config>

Paso 4. Para este paso, debe crear una clase de observador. Vaya a <Vendor>/<Module>/Observer y agregue el archivo CheckoutAllSubmitAfterObserver.php , luego ingrese el código:
div.embedPastebin { text-align:left; padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } div.embedPastebin { } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,’Bitstream Vera Sans Mono’,’Courier’,monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; }

Datos alojados con ♥ por Pastebin.comDescargar RawVer original
  1. <?php
  2.  
  3. espacio de nombres < Proveedor > < Módulo > Observador ;
  4.  
  5. use MagentoFrameworkEventObserver ;
  6. use MagentoFrameworkEventObserverInterface ;
  7. use < Vendor > < Módulo > HelperData ;
  8.  
  9. clase CheckoutAllSubmitAfterObserver implementa ObserverInterface
  10. {
  11.     /**
  12.      *
  13.      * @var Datos
  14.      */
  15.     $ ayudante protegido ;
  16.  
  17.     /**
  18.      * @param Datos $ayudante
  19.      */
  20.     función pública __construcción (
  21. $ ayudante de         datos
  22.     ) {
  23.         $esto -> ayudante = $ayudante ;
  24.     }
  25.  
  26.     /**
  27.      *
  28.      * @param Observador $observador
  29.      * @return $esto
  30.      */
  31.     ejecución de función pública ( Observador $ observador )
  32.     {
  33.         if ( ! $this -> ayudante -> isEnabled ( ) ) {
  34.             devolver $esto ;
  35.         }
  36.  
  37.         $pedido = $observador -> getEvent ( ) -> getOrder ( ) ;
  38.         if ( ! $pedido -> getId ( ) ) {
  39.             devolver $esto ;
  40.         }
  41.  
  42.         $factura = $esto -> ayudante -> crearfactura ( $pedido ) ;
  43.         si ( $ factura ) {
  44.             $this -> ayudante -> createShipment ( $pedido , $factura ) ;
  45.         }
  46.  
  47.         devolver $esto ;
  48.     }
  49. }

Paso 5. Lo último que debe hacer es crear un archivo Data.php en <Vendor>/<Module>/Helper y pegar este código:
div.embedPastebin { text-align:left; padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } div.embedPastebin { } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,’Bitstream Vera Sans Mono’,’Courier’,monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; }

Datos alojados con ♥ por Pastebin.comDescargar RawVer original
  1. <?php
  2.  
  3. espacio de nombres < Proveedor > < Módulo > Helper ;
  4.  
  5. use MagentoFrameworkAppHelperAbstractHelper ;
  6. use MagentoFrameworkAppConfigScopeConfigInterface ;
  7. use MagentoSalesModelResourceModelOrderInvoiceCollectionFactory ;
  8. use MagentoSalesModelServiceInvoiceService ;
  9. use MagentoSalesModelOrderShipmentFactory ;
  10. use MagentoFrameworkDBTransactionFactory ;
  11. use MagentoFrameworkAppHelperContext ;
  12.  
  13. clase Datos extiende AbstractHelper
  14. {
  15.     const MODULE_ENABLED = ‘<Proveedor>_<Módulo>_auto_invoice_shipment/settings/enabled’ ;
  16.  
  17.     /**
  18.      * @var ScopeConfigInterfaz
  19.      */
  20.     protegido $scopeConfig ;
  21.  
  22.     /**
  23.      *
  24.      * @var CollectionFactory
  25.      */
  26.     $invoiceCollectionFactory protegido ;
  27.  
  28.     /**
  29.      *
  30.      * @var FacturaServicio
  31.      */
  32.     servicio $factura protegido ;
  33.  
  34.     /**
  35.      *
  36.      * @var fábrica de envíos
  37.      */
  38.     fábrica de envío $ protegida ;
  39.  
  40.     /**
  41.      *
  42.      * @var fábrica de transacciones
  43.      */
  44.     $transactionFactory protegido ;
  45.  
  46.     función pública __construcción (
  47.         Contexto $contexto ,
  48.         ScopeConfigInterface $scopeConfig ,
  49.         CollectionFactory $facturaCollectionFactory ,
  50.         ServicioFactura $servicioFactura ,
  51.         fábrica de envíos $ fábrica de envíos ,
  52.         TransactionFactory $transactionFactory
  53.     )
  54.     {
  55.         padre :: __construcción ( $contexto ) ;
  56.         $esto -> scopeConfig = $scopeConfig ;
  57.         $this -> factureCollectionFactory = $invoiceCollectionFactory ;
  58.         $this -> serviciofactura = $serviciofactura ;
  59.         $this -> fábricadeenvíos = $fábricadeenvíos ;
  60.         $esto -> fábrica de transacciones = $ fábrica de transacciones ;
  61.     }
  62.  
  63.     función pública crear factura ( $ pedido )
  64.     {
  65.         prueba {
  66.             $facturas = $esto -> facturaCollectionFactory -> crear ( )
  67.                 -> addAttributeToFilter ( ‘order_id’ , array ( ‘eq’ => $order -> getId ( ) ) ) ;
  68.  
  69.             $facturas -> getSelect ( ) -> límite ( 1 ) ;
  70.  
  71.             if ( ( int ) $facturas -> cuenta ( ) !== 0 || ! $pedido -> canInvoice ( ) ) {
  72.                 devolver nulo ;
  73.             }
  74.  
  75.             $factura = $esto -> serviciofactura -> prepararfactura ( $pedido ) ;
  76.             $factura -> setRequestedCaptureCase ( MagentoSalesModelOrderInvoice :: CAPTURE_OFFLINE ) ;
  77.             $factura -> registro ( ) ;
  78.             $factura -> getOrder ( ) -> setCustomerNoteNotify ( false ) ;
  79.             $factura -> obtenerPedido ( ) -> setIsInProcess ( true ) ;
  80.             $order -> addStatusHistoryComment ( ‘FACTURADO automáticamente’ , false ) ;
  81.             $transactionSave = $this -> transactionFactory -> create ( ) -> addObject ( $invoice ) -> addObject ( $invoice -> getOrder ( ) ) ;
  82.             $transacciónGuardar -> guardar ( ) ;
  83.         } atrapar ( Excepción $e ) {
  84.             $order -> addStatusHistoryComment ( ‘Mensaje de excepción: ‘ . $e -> getMessage ( ) , false ) ;
  85.             $orden -> guardar ( ) ;
  86.             devolver nulo ;
  87.         }
  88.  
  89.         devolver $factura ;
  90.     }
  91.  
  92.     función pública createShipment ( $pedido , $factura )
  93.     {
  94.         prueba {
  95.             $envio = $esto -> prepararEnvio ( $factura ) ;
  96.             si ( $ envío ) {
  97.                 $pedido -> setIsInProcess ( verdadero ) ;
  98.                 $order -> addStatusHistoryComment ( ‘ENVIADO automáticamente’ , false ) ;
  99.                 $esto – > fábrica de transacciones -> crear ( ) -> agregarObjeto ( $envío ) -> agregarObjeto ( $envío -> obtenerPedido ( ) ) -> guardar ( ) ;
  100.             }
  101.         } atrapar ( Excepción $e ) {
  102.             $order -> addStatusHistoryComment ( ‘Mensaje de excepción: ‘ . $e -> getMessage ( ) , false ) ;
  103.             $orden -> guardar ( ) ;
  104.         }
  105.     }
  106.  
  107.     preparación de la función públicaEnvío ( $ factura )
  108.     {
  109.         $envio = $esto -> envioFactory -> crear (
  110.             $factura -> obtenerPedido ( ) ,
  111.             [ ]
  112.         ) ;
  113.  
  114.         devolver $envío -> getTotalQty ( ) ? $envio -> registro ( ) : false ;
  115.     }
  116.  
  117.     /**
  118.      * Está habilitado el módulo en configuración.
  119.      *
  120.      * @return bool
  121.      */
  122.     la función pública está habilitada ( )
  123.     {
  124.         devuelve $this -> scopeConfig -> getValue ( self :: MODULE_ENABLED ) ;
  125.     }
  126. }

Paso 6. Lo último que crearemos ahora es el archivo que permite activar y desactivar este módulo en el panel de administración. Cree <Proveedor>/<Módulo>/etc/adminhtml/system.xml y use el siguiente código:
div.embedPastebin { text-align:left; padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } div.embedPastebin { } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,’Bitstream Vera Sans Mono’,’Courier’,monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; }

Datos alojados con ♥ por Pastebin.comDescargar RawVer original
  1. <? versión xml = «1.0» ?>
  2. <config xmlns_xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi_noNamespaceSchemaLocation=»urn:magento:module:Magento_Config:etc/system_file.xsd»>
  3. <sistema>
  4. <section id=»<Vendor>_<Module>_auto_invoice_shipment» translate=»label» type=»text» sortOrder=»1300″ showInDefault=»1″ showInWebsite=»1″ showInStore=»1″>
  5. <label>Envío automático de facturas</label>
  6. <tab>ventas</tab>
  7. <resource><Proveedor>_<Módulo>::auto_invoice_shipment</resource>
  8. <id de grupo=»configuración» translate=»etiqueta» sortOrder=»1000″ showInDefault=»1″ showInWebsite=»1″ showInStore=»1″>
  9. <label>Configuración de la extensión</label>
  10. <field id=»habilitado» translate=»etiqueta» type=»select» sortOrder=»10″ showInDefault=»1″ showInWebsite=»1″ showInStore=»1″ canRestore=»1″>
  11. <label>Habilitado</label>
  12. <source_model>MagentoConfigModelConfigSourceSíno</source_model>
  13. </campo>
  14. </grupo>
  15. </sección>
  16. </sistema>
  17. </config>

Y eso es todo.

Ejecute los siguientes comandos después de instalar este módulo:

php bin/magento cache:vaciar
php bin/magento setup:actualizar
php bin/magento setup:di:compilar
php bin/magento setup:static-content:implementar
php bin/magento setup:actualizar

Ahora las facturas se crearán automáticamente.

Cómo adjuntar una factura en PDF a un correo electrónico en Magento 2

Agregar una factura en PDF a un correo electrónico de confirmación es otro desafío común. Y tenemos dos soluciones para usted.

Solución 1

Si tiene buenas habilidades técnicas, puede intentar crear un módulo personalizado para esta opción. A continuación encontrará instrucciones que le ayudarán con esto.

Solución 2

O puede crear una factura personalizada con Magento 2 PDF Customizer . Este complemento le permite diseñar una plantilla de factura PDF de Magento personalizada directamente en el panel de administración utilizando una herramienta HTML/CSS y adjuntarla a sus correos electrónicos de factura. Puede configurar esto con unos pocos clics. Consideremos un ejemplo rápido. Vaya a Tiendas>Configuración>Extensiones de Amasty>Personalizador de PDF>Factura , elija una plantilla de la lista y seleccione en el menú desplegable Agregar PDF adjunto a correos electrónicos para clientes automáticamente :

Y eso es todo, así de simple.

Si todavía siente que la codificación es lo que necesita, siga las instrucciones a continuación.

Paso 1. Cree y registre un nuevo módulo como se mostró al principio del artículo . Los archivos module.xml , registration.php deben estar en cada nuevo módulo.

Paso 2. A continuación, debe anular InvoiceOrder en Magento/Sales/Model y agregar este comentario:
div.embedPastebin { text-align:left; padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } div.embedPastebin { } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,’Bitstream Vera Sans Mono’,’Courier’,monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; }

Datos alojados con ♥ por Pastebin.comDescargar RawVer original
  1. $this -> notifierInterface -> notificar ( $pedido , $factura , $comentario ) ;

Paso 3. Ahora necesita crear events.xml en <Proveedor>/<Módulo>/etc con código:
div.embedPastebin { text-align:left; padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } div.embedPastebin { } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,’Bitstream Vera Sans Mono’,’Courier’,monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; }

Datos alojados con ♥ por Pastebin.comDescargar RawVer original
  1. <? versión xml = «1.0» ?>
  2. <config xmlns_xsi=»http://www.w3.org/2001/XMLSchema-instance»
  3. xsi:noNamespaceSchemaLocation=»urna:magento:marco:Evento/etc/eventos.xsd»>
  4. <nombre del evento=’pedido_de_venta_envío_guardado_después’>
  5. <observer name=’EnviarFacturaConEnvío’
  6. instancia='<Proveedor><Módulo>ObservadorEnviarFacturaConEnvío’ />
  7. </evento>
  8. </config>

Paso 4. Agregue el observador sales_order_shipment_save_after en <Vendor>/<Module>/Observer y luego ingrese el código:
div.embedPastebin { text-align:left; padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } div.embedPastebin { } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,’Bitstream Vera Sans Mono’,’Courier’,monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; }

Datos alojados con ♥ por Pastebin.comDescargar RawVer original
  1. <?php
  2.  
  3. espacio de nombres < Proveedor > < Módulo > Observador ;
  4.  
  5. use MagentoFrameworkEventObserverInterface ;
  6. use MagentoSalesModelOrder ;
  7. use MagentoSalesModelOrderEmailSenderInvoiceSender ;
  8. use MagentoFrameworkEventObserver ;
  9.  
  10. clase SendInvoiceWithShipment implementa ObserverInterface
  11. {
  12.    
  13.     protegido $_invoiceSender ;
  14.    
  15.     función pública __construct ( FacturaRemitente $facturaRemitente )
  16.     {
  17.         $this -> _invoiceSender = $invoiceSender ;
  18.     }
  19.    
  20.     ejecución de función pública ( Observador $ observador )
  21.     {
  22.        
  23.         $pedido = $observador -> obtenerEnvío ( ) -> obtenerPedido ( ) ;
  24.         if ( ! $pedido ) {
  25.             // No envíe la factura si no se proporciona la devolución del pedido;
  26.         }
  27.        
  28.         $facturas = $pedido -> getInvoiceCollection ( ) ;
  29.        
  30.         foreach ( $facturas como $factura ) {
  31.             prueba {
  32.                 $this -> _invoiceSender -> enviar ( $factura ) ;
  33.             }
  34.             atrapar ( Excepción $e ) {
  35.                 // Hacer algo si no se pudo enviar
  36.             }
  37.         }
  38.     }
  39. }

Personaliza tu factura en PDF

Agregue su logotipo a la factura en PDF usando la configuración del panel de administración de vainilla

Puede personalizar la factura en PDF solo con su logotipo y dirección en Magento predeterminado. Para hacerlo ve a Tiendas>Configuración :

Elija Ventas en la pestaña Ventas :

Abra Diseño de factura y albarán y explore la imagen:

Luego haga clic en el botón Guardar configuración .

Opciones de personalización avanzadas con el módulo de factura en PDF de Amasty

Si quieres obtener más opciones de personalización, prueba nuestro Personalizador de PDF para Magento 2. Cuenta con un editor de HTML/CSS donde puedes cambiar el texto de tu archivo PDF, agregar variables, cambiar fuentes, colores, agregar un logo, etc. Para ello, vaya a Marketing>Plantillas PDF de Amasty . Haga clic en el botón Agregar nueva plantilla :

Elija el patrón necesario del menú desplegable y cárguelo. No solo hay una plantilla de factura, sino también una nota de crédito, un pedido y un envío:

Luego verá dónde ya se usa esta plantilla. Debe dar un título a la plantilla, puede cambiar el contenido y los estilos:

Lo que es aún más conveniente, ahora puede obtener una vista previa de los cambios antes de guardar el formulario haciendo clic en Vista previa de la plantilla :

Cuando esté listo, guarde los cambios para usar esta plantilla en sus correos electrónicos.

De esta manera, puede agregar un número ilimitado de plantillas de factura y realizar el cambio de Magento 2 de una plantilla PDF de factura existente. Este es solo uno de los ejemplos de facturas en PDF:

Así, los compradores tendrán la posibilidad en Magento de imprimir facturas en PDF y descargarlas desde su cuenta:

¿Cuáles son los beneficios? Este módulo le brinda la opción de crear facturas únicas (y no solo) sin ningún conocimiento de codificación.

¡Agregue un número ilimitado de plantillas de facturas!

 

IR AL PERSONALIZADOR DE PDF

¡Eso es todo por hoy!

No dude en hacer sus preguntas en la sección de comentarios a continuación, estaremos encantados de ayudarle.