Woocommerce: cómo añadir NIF a pedidos y facturas [2017] (RESUELTO)

Añadir NIF a pedidos y facturas WooCommerce

En España es necesario incluir el NIF o DNI en la factura realizada a un particular para que dicha factura sea válida. WooCommerce, el plugin que amplía la funcionalidad de WordPress para incluir una tienda online no contempla este dato por defecto.

Woocommerce también tiene otra deficiencia, y es que no dispone de la funcionalidad de generación de facturas automáticas en su núcleo.

Vamos a solucionar ambos aspectos. Para ello instala y activa estos tres plugins

1. Woocommerce Checkout manager
2. Woocommerce PDF Invoices & Packing Slips
3. WooCommerce Store Toolkit

Configurar Woocommerce Checkout Manager para añadir el NIF/CIF

Vamos a usar este plugin para añadir el campo CIF/NIF a nuestros datos de facturación (billing). Para ello vamos a las opciones del plugin (/wp-admin/admin.php?page=woocommerce-checkout-manager) y en la pestaña Billing, añadimos el nuevo campo. Quedará algo asi:

añadir nif a facturas woocommerce

A partir de este momento, el sistema pedirá al cliente que inserte su CIF/NIF en el proceso de compra.

Configurar Woocommerce PDF para añadir el NIF/CIF

El siguiente paso es configurar este plugin para que nos permita emitir facturas en pdf, enviárselas al cliente y además refleje el nuevo campo NIF/CIF que hemos creado en el paso anterior.

El primer paso consiste en copiar las plantillas del plugin a nuestro theme para crear plantillas custom. De esta forma podremos crear unas plantillas para facturas a medida y no perderlas al actualizar el plugin. Para ello copiamos /wp-content/plugins/woocommerce-pdf-invoices-packing-slips/templates/pdf/Simple a nuestro theme /wp-content/themes/MY_THEME/woocommerce/pdf/FacturaConCIF

woocommerce factura pdf con cif

Después personalizaremos nuestro archivo invoice.php (el que genera la factura en PDF) para mostrar el nuevo campo CIF/NIF.

Para averiguar cómo se llama el nuevo campo, podemos instalar y activar WooCommerce Store Toolkit y de esta forma, en la pantalla del pedido, veremos al final todas las variables personalizadas y sus valores. Algo asi:

En mi caso el campo (cuya abreviatura era myfield12) se puede recuperar con el id _billing_myfield12

Por tanto vamos a personalizar la plantilla haciendo que salga este campo también, añadiendo la siguiente línea:

 <br /><?php $wpo_wcpdf->custom_field('_billing_myfield12', 'NIF/CIF:'); ?>

El archivo /wp-content/themes/MY_THEME/woocommerce/pdf/FacturaConCIF/invoice.php, que quedará asi:

El último paso es indicarle al plugin que use nuestra plantilla custom. Para ello vamos a Woocommerce > Facturas PDF o ruta /wp-admin/admin.php?page=wpo_wcpdf_options_page&tab=template y en el desplegable, elegimos nuestra plantilla FacturaConCIF:
cif en facturas woocommerce

¡Listo!

CDS Invenio: garbage recolector

Sometimes a set of records must be deleted from CDS Invenio. If the records have fulltext files (pdf’s, jpgs, etc) as external URLs, that is no issue. On the other hand, if the record contains fulltext files that are managed with bibdocfile, when you delete a record, ONLY the marcxml information is deleted, but the PDF is still accesible. That is why you need a garbage recolector/deleter.

I’ve developed these functions:

def listDeletedFromCollname(colname, coltag='980__c'):
  # returns a list of recids that have beed deleted (they also meet that coltag=colname)
 
  from invenio.dbquery import run_sql
  query = """ SELECT distinct bibrec_bib98x.id_bibrec
              FROM bib98x, bibrec_bib98x
              WHERE bib98x.tag='%s' AND bib98x.value = '%s' AND bib98x.id = bibrec_bib98x.id_bibxxx
                    AND bibrec_bib98x.id_bibrec IN (SELECT DISTINCT bibrec_bib98x.id_bibrec
                                      FROM bibrec_bib98x, bib98x
                                      WHERE bibrec_bib98x.id_bibxxx=bib98x.id AND
                                            bib98x.tag = '980__c' AND
                                            bib98x.value = 'DELETED') """ %(coltag,colname)
  res = run_sql(query)
  deletedlist = []
  for i in res:
    deletedlist.append(i[0])
  return deletedlist
 
def fixTESISborradas(verbose=False):
   from invenio import bibdocfile
 
   # lets get a list of records that have been deleted which belong to collection '<em>TESIS</em>' (that is, 980__a=TESIS)
   listadeborradas = listDeletedFromCollname('TESIS','980__a')
   for recid in listadeborradas:
       if verbose:
           print "(listaTESISborradas) Voy a borrar los archivos asociados a '%s'" % recid
       documento = bibdocfile.BibRecDocs(recid)
       for archivo in documento.get_bibdoc_names():
           if verbose:
               print "(listaTESISborradas) ---- Archivo: '%s'" %archivo
           documento.delete_bibdoc(archivo)
       if verbose:
           print "(listaTESISborradas) --- Todos los archivos asociados a '%s' estan borrados" % recid

You can now add a system cron task which calls to fixTESISborradas to delete (rename) the fulltexts of recors which have been deleted 🙂