Como agregar informacion de campos personalizados a informes PDF de Vtiger

En ocasiones es ncesario que nuestros informes o formatos PDF contengan informacion extra que default no viene programado en los modulos de Vtiger, y muchas veces dicha informacion ni siquiera existe en la base de datos de una instalacion limpia de Vtiger (cuando recien instalamos), muchas veces la informacion se encuentra en campos personalizados que nosotros vamos agregando conforme pasa el tiempo.

En esta entrada aprenderemos como agregar informacion de un campo personalizado al informe de PDF  de Invoice, que no se limita a este modulo, es igual para cualquier otro, por ejemplo: SalesOrder.

Para agregar informacion al formato PDF de Invoice debes abrir el archivo modules/Invoice/InvoicePDFController.php

En dicho archivo, existe la clase Vtiger_InvoicePDFController, la cual tiene cuatro metodos, solo voy a mencionar dos por el momento:
– function buildHeaderModelColumnCenter()
– function buildHeaderModelColumnRight()

el formato PDF, si lo analizas, tiene una columna central, en donde se imprime informacion del cliente, numero de pedido, etc. para dicha informacion, la clase Vtiger_InvoicePDFController usa el metodo buildHeaderModelColumnCenter().

Y para la columna de la derecha vez que imprime informacion de fecha y direccione tanto de factura como de entrega, para esto el metodo usado es buildHeaderModelColumnRight().

Ahora bien, como agregar informacion?

Tenemos que agregar la etiqueta y el valor, para este ejemplo voy a agregar la etiqueta y el valor a la columna central del informe, para lo que modifico el metodo buildHeaderModelColumnCenter():

function buildHeaderModelColumnCenter() {
    // Agregando informacion de campos personalizados para Imprimir en el formato PDF
    // Defino el nombre del Modulo del que quiero extraer la informnacion
    $accountModname = 'Accounts';
    // Defino el nombre del campo que quiero obtener, en este caso es un campo personalizado
    $fieldname = 'cf_494';

    // Obtengo una instancia del modulo "Accounts" para el registro del cliente en cuestion ( $this->focusColumnValue('account_id') )
    $modObj = CRMEntity::getInstance($accountModname);
    $modObj->retrieve_entity_info($this->focusColumnValue('account_id'), $accountModname);

    // Asigno la etiqueta y el valor obtenido de la instancia Accounts a variable normales
    $customDataLabel = "RFC";
    $customDataValue = $modObj->column_fields[$fieldname];

    // -------------------------------- //

    $customerName = $this->resolveReferenceLabel($this->focusColumnValue('account_id'), 'Accounts');
    $contactName = $this->resolveReferenceLabel($this->focusColumnValue('contact_id'), 'Contacts');
    $purchaseOrder = $this->focusColumnValue('vtiger_purchaseorder');
    $salesOrder = $this->resolveReferenceLabel($this->focusColumnValue('salesorder_id'));

    $customerNameLabel = getTranslatedString('Customer Name', $this->moduleName);
    $contactNameLabel = getTranslatedString('Contact Name', $this->moduleName);
    $purchaseOrderLabel = getTranslatedString('Purchase Order', $this->moduleName);
    $salesOrderLabel = getTranslatedString('Sales Order', $this->moduleName);

    $modelColumnCenter = array(
        $customerNameLabel => $customerName,
        $purchaseOrderLabel => $purchaseOrder,
        $contactNameLabel => $contactName,
        $salesOrderLabel => $salesOrder,
        // Agrego los datos personalizados al Array de Modelos para mi PDF
        $customDataLabel => $customDataValue,
    );
    return $modelColumnCenter;
}

En el ejemplo obtengo datos de la cuenta del cliente al cual pertenece la Factura actual, en este caso el dato obtenido pertenece a un campo personalizado que esta identificado por “cf_494”, pero puede ser cualquier otro campo.

***Tip para conocer el nombre del campo:

– Recomiendo usar Mozilla Firefox, agregar la extension FireBug.

-Despues abrir el listado de cuentas, abrir cualquier cuenta, despues buscar el campo deseado, colocar el puntero del mouse encima, dar click en el link “editar” que aparece.

-Por ultimo hacer click derecho del mouse y seleccionar “Inspeccionar elemento conFirebug”. Con esto se abre el panel de propiedades y codigo dentro de FireBug. como se muestra en la siguiente imagen:

En la imagen esta marcado en un ovalo Rojo el nombre del campo que deben usar obtener el dato deseado.

En esta otra imagen muestro como quedo mi ejemplo en PDF:

Espero sea de utilidad para los visitantes.

Saludos cordiales.

Chava

Anuncios

3 comentarios en “Como agregar informacion de campos personalizados a informes PDF de Vtiger

  1. I was just seeking this info for some time. After six hours of continuous Googleing, at last I got it in your web site. I wonder what is the lack of Google strategy that don’t rank this kind of informative websites in top of the list. Generally the top sites are full of garbage. ddeacgfkkgkd

  2. Agradezco tu publicación enormemente ya que me a sido de gran ayuda. Aparte de ello quisiera consultar lo siguiente:

    En la versión 6 me presentaba correctamente la información de los encabezados, ahora en la versión 7 me superpone la columna derecha por sobre la columna central. ¿Esto cómo se puede corregir?

    Saludos!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s