You are on page 1of 39

DESARROLLO DE UN MDULO PARA DOLIBARR +3.

INDICE DEL CONTENIDO


INTRODUCCIN ............................................................................................ 5

INTRODUCCIN ............................................................................. 5
CREAR UN DESCRIPTOR DE MDULO (OBLIGATORIO) ................................. 5

CREAR UN DESCRIPTOR DE MDULO.............................................. 5 CREAR SU DESCRIPTOR .................................................................. 6 PROBAR SU DESCRIPTOR ................................................................ 6


ARBOL DE UN MDULO ................................................................................. 7

ESTRUCTURA DE ARBOL DE UN MDULO ........................................ 7


CREAR TABLAS SQL Y LA CLASE PHP CON MTODOS DE ACCESO (OPCIONAL) ..................................................................................................................... 7

CREAR FICHEROS .SQL ................................................................... 8 PROBAR EL ARCHIVO .SQL ............................................................. 9 GENERAR LA CLASE PHP DE ACCESO (DAO) ................................. 10
VISUALIZACIN DE PESTAAS (OPCIONAL) .............................................. 10

AADIR O ELIMINAR PESTAAS EN LAS FICHAS ENTIDAD .......... 10 AADIR PESTAAS DE UNA FICHA ENTIDAD EN SU PROPIA PGINA ........................................................................................ 13
CREAR PGINA PANTALLA PHP (OPCIONAL) .............................................. 16

CREAR UNA PGINA PANTALLA PHP ............................................ 16 REEMPLAZAR PARTES DE TEMPLATES DE PANTALLA (VERSIN 3.3+)............................................................................................ 17 ACCESO A LA BASE DE DATOS ...................................................... 18 DEFINICIN DE ESTILOS ............................................................. 20 UTILIZAR EL SELECTOR DE FECHAS DE DOLIBARR ....................... 21

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

DEFINIR LA PGINA DE CONFIGURACIN (OPCIONAL) ............................. 21

CREAR PGINA DE EDICIN DE CONFIGURACIN........................ 21 PROBAR LA PGINA ..................................................................... 22


DEFINIR ENTRADAS DE MEN (OPCIONAL) ................................................ 22

DEFINIR ENTRADAS DE MEN ...................................................... 22 PROBAR ENTRADAS DE MEN ...................................................... 25


DEFINIR PROPIOS PERMISOS (OPCIONAL) ................................................ 25

DEFINIR PROPIOS PERMISOS ...................................................... 25


DEFINIR PROPIOS PANELES (OPCIONAL) .................................................. 26

DEFINIR PROPIOS PANELES......................................................... 26 PROBAR LOS PANELES ................................................................. 27


DEFINIR LAS EXPORTACIONES (OPCIONALES) .......................................... 27

DEFINIR LA EXPORTACIN .......................................................... 27 PROBAR LA EXPORTACIN ........................................................... 28


DEFINIR ESTILOS CSS (OPCIONAL) ........................................................... 28

CREAR Y DECLARAR LA HOJA DE ESTILOS .................................... 28 PROBAR LA HOJA DE ESTILOS ...................................................... 29


DEFINIR FUNCIONES JAVASCRIPT (OPCIONAL) ......................................... 29

DEFINIR FUNCIONES JAVASCRIPT ............................................... 29


EJECUTAR CDIGO SOBRE UN EVENTO DOLIBARR (OPCIONAL) ................. 29

EJECUTAR CDIGO SOBRE UN EVENTO DOLIBARR ....................... 29


EJECUTAR CDIGO USANDO HOOKS EN DOLIBARR .................................... 33

EJECUTAR CDIGO USANDO HOOKS EN DOLIBARR ...................... 33


AADIR UN MDULO DE NUMERACIN (OPCIONAL) .................................. 37

AADIR UN MDULO DE NUMERACIN ........................................ 37


CREACIN DE UN TEMA .............................................................................. 38

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

CREACIN DE UN NUEVO TEMA .................................................... 38

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

INTRODUCCIN INTRODUCCIN
Para crear un nuevo mdulo hay distintas fases a seguir. Este tutorial tiene como meta describir cada una de estas fases con el fin de ayudar a comprender las posibilidades de Dolibarr, como por ejemplo aadir una o varias de las siguientes funcionalidades:

Aadir nuevas tablas a la base de datos. Aadir sus propias entradas en los mens. Aadir pantallas de edicin/consulta de nuevas tablas. Aadir o eliminar pestaas en las pginas de vista/edicin de objetos (factura, producto, pedido, evento, etc.) Aadir exportaciones predefinidas a la funcin Exportar. Aadir variables de substitucin Aadir nuevas cajas a la pgina de inicio. Definir nuevos permisos. Activar cdigo automtico sobre una accin particular de Dolibarr. Insertar nuestro cdigo mediante los hooks de Dolibarr Aadir un mdulo de numeracin Aadir un modelo de documento Aadir un nuevo tema

etc. Todas estas operaciones slo estn disponibles a partir de la versin 3.2 de Dolibarr.

CREAR UN DESCRIPTOR DE MDULO (OBLIGATORIO) CREAR UN DESCRIPTOR DE MDULO

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

Cundo: Obligatorio cada vez que se desarrolla una extensin, cualquiera que sea su finalidad.

CREAR SU DESCRIPTOR
La primera fase es la de crear un fichero descriptor del mdulo. Para ello:

Crear el directorio /htdocs/mimodulo/core/modules. Seguidamente ir al directorio dev/skeletons y copiar el archivo modMyModule.class.php en el directorio htdocs/monmodule/core/modules.

A continuacin, modificar el contenido del archivo, reemplazando:

los "modMyModule" por un valor que corresponda a la finalidad de su mdulo. Este valor debe siempre comenzar por mod.

ATENCIN: El MiModulo debe estar compuesto por una serie de caracteres, siendo los nicos permitidos [A-Za-z_] con longuitud max de MyModule de 12 caracteres.

$this->numero = 10000 por un nmero de mdulo que est libre (Para saber qu nmeros ya estn siendo utilizados, vaya a la pgina "Inicio-> Info sistema-> Dolibarr-> Mdulos") Modificar eventualmente otras variables definidas por los desarrolladores (ver el comentario en el cdigo del esqueleto para ver su significado) Crear el directorio /htdocs/mimodulo/

Ahora su fichero descriptor est configurado.

PROBAR SU DESCRIPTOR
Ejecute Dolibarr y vaya a la pgina "Configuracin > Mdulo". Debera aparecer una nueva lnea con su nuevo mdulo y la posibilidad de activarlo o no (eche un vistazo a DESARROLLO DE UN MDULO PARA DOLIBARR +3.2 6

todas las pestaas de cada categora para encontrarlo). Es el valor $this->special el que determina en qu pestaa se encuentra su mdulo.

ARBOL DE UN MDULO ESTRUCTURA DE ARBOL DE UN MDULO


Crear un directorio 'mimodulo' que contendr los archivos del mdulo. Este directorio debe de estar en el directorio htdocs y contendr los siguientes subdirectorios:

mimodulo/core/modules/ debe contener el archivo descriptor del mdulo : modMiModulo.class.php mimodulo/core/triggers contiene los triggers usados mimodulo/admin/ contiene las pginad de configuracin del mdulo mimodulo/class/ contiene las clases PHP necesarias para el mdulo mimodulo/css contiene los archivos CSS necesarios para el mdulo mimodulo/img contiene las imagenes suministradas con el mdulo mimodulo/langs/xx_XX contiene los archivos de traduccin para el idioma xx_XX (como mnimo en_US) mimodulo/lib contiene las bibliotecas necesarias para el mdulo mimodulo/sql contiene los archivos SQL usador para aadir las nuevas tablas o ndices necesarios para el mdulo mimodulo/themes/mitema si el mdulo tiene su propio tema/skin build/ puede contener todos los archivos usados para compilar o construir el paquete de distribucin docs/ contiene todo lo que se refiera a documentacin. Tambin puede contener los archivos de licencia scripts/ contiene los archivos de scripts (comandos en lnea). test/ contiene los archivos de testeo unitario (datos, scripts y clases de testeo) README.txt es un archivo que resume el mdulo. La documentacin ms detallada se emplazar en el directorio docs

CREAR TABLAS SQL Y LA CLASE PHP CON MTODOS DE ACCESO (OPCIONAL)


DESARROLLO DE UN MDULO PARA DOLIBARR +3.2 7

CREAR FICHEROS .SQL


Si su mdulo de verdad requiere administrar datos que no existen en la base de datos en la versin estndar de Dolibarr, ser necesario definir ciertas tablas SQL para registrar esos datos.

Cree un subdirectorio sql en el directorio de su mdulo (por ejemplo, htdocs/mimodulo/sql), con el fin de colocar los scripts sql que va a crear.

Regla a respetar:

Agregue los archivos de orden de creacin de sus tablas siguiendo el principio de un fichero llx_mitabla.sql por tabla, eventualmente acompaado del archivo llx_mitabla.key.sql' (ver los archivos existentes en install/mysql/tables, para tomar ejemplo). En trminos de orden de gestin de datos, todos deben estar en un archivo llamado data.sql situado en la misma carpeta /mimodulo/sql/.

Ejemplo de contenido de un fichero data.sql

DELETE FROM llx_const WHERE name='MYMODULE_IT_WORKS' AND entity='__ENTITY__'; INSERT INTO llx_const (name, value, type, note, visible, entity) VALUES ('MYMODULE_IT_WORKS','1','chaine','A constant vor my module',1,'__ENTITY__');

Las rdenes SQL de los archivos deben de ser operacionales para la base de datos mysql. Nota: Los archivos de otras bases de datos no se mantienen. Se leen y se convierten al vuelo por el driver de la base de datos.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

PROBAR EL ARCHIVO .SQL


Una vez que los archivos estn listos, puede volver a Dolibarr para desactivar el mdulo, eliminar las tablas de la base de datos y reactivar el mdulo. Las tablas deben ser recreadas por la activacin del mdulo. Si no es as, verifique sus scripts o consulte los logs Dolibarr.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

GENERAR LA CLASE PHP DE ACCESO (DAO)


Una vez que su/s tabla/s estn creadas en la base de datos, vaya al directorio dev/skeletons, copie el archivo build_class_from_table.php en la el directorio sql/ de su mdulo module, y ejecute el script

php build_class_from_table.php nombretabla

Nota: Si el comando no funciona, intente con php-cli en lugar de php.

Esto genera un archivo out.nombretabla.class.php que contiene la clase de gestin de la tabla nombretabla. En esta clase se encuentran los mtodos CRUD (Create/Read/Update/Delete) ya operativos para hacer un insert, un fetch (select), un update, y un delete de una lnea de la tabla. Suprima justo el "out" del nombre del archivo y pgalo en un subdirectorio de htdocs propio en su mdulo (Por ejemplo en htdocs/mimodulo).

Un archivo out.nombretabla_script.php se genera igualmente y contiene un ejemplo de cdigo para utilizar la clase para cada uno de los cuatro mtodos CRUD.

VISUALIZACIN DE PESTAAS (OPCIONAL) AADIR O ELIMINAR PESTAAS EN LAS FICHAS ENTIDAD


Cundo : Para aadir su propia pestaa en las pestaas estandard de una ficha entidad (factura, pedido, presupuesto, miembro...)

Para ello, vaya al archivo descriptor del mdulo creado anteriormente y modifique la tabla $this->tabs:

// Array to add new pages in new tabs or remove existing one $this->tabs = array('objecttype:+tabname1:Title1:@mymodule:/mymodule/mynewtab1.php?id=_ _ID__', // To add a new tab identified by code tabname1

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

10

'objecttype:+tabname2:Title2:@mymodule:/mymodule/mynewtab2.php?id=__ID__' , // To add another new tab identified by code tabname2 'objecttype:-tabname'); remove an existing tab identified by code tabname // To

La tabla debe contener una lista de cadena, cada cadena representa una nueva pestaa. El formato de la cadena se compone de 4 partes separadas por ":"

Parte 1: El cdigo de la entidad (objecttype) en la que debe aparecer la pestaa siendo el valor de ella misma: 'thirdparty' para aadir una pestaa en la vista de tercero 'intervention' para aadir una pestaa en la vista de intervencin 'order_supplier' para aadir una pestaa en la vista de pedido a proveedor 'invoice_supplier' para aadir una pestaa en la vista de factura de proveedor 'invoice' para aadir una pestaa en la vista de factura a cliente 'order' para aadir una pestaa en la vista de pedido de cliente 'product' para aadir una pestaa en la vista de producto 'stock' para aadir una pestaa en la vista de stock 'propal' para aadir una pestaa en la vista de presupesto a cliente 'member' para aadir una pestaa en la vista de miembro 'contract' para aadir una pestaa en la vista de contrato 'user' para aadir una pestaa en la vista de usuario 'group' para aadir una pestaa en la vista de grupo 'contact' para aadir una pestaa en la vista de contacto

'categories_x' para aadir una pestaa en la vista de categora (reemplazar 'x' por el tpo de categora (0=producto, 1=proveedor, 2=cliente, 3=miembro)

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

11

Parte 2: El ttulo de la pestaa. Puede ser una etiqueta directa o mejor un cdigo de traduccin de un archivo lang. Parte 3: El nombre del archivo .lang (sin la extensin .lang) que contiene la correspondencia entre el cdigo de traduccin y la etiqueta a mostrar. Si el nombre empieza con @, Dolibarr buscar el archivo en el directorio lang del propio mdulo, es decir, htdocs/mimodulo/langs/code_CODE/mimodulo.lang, de lo contrario Dolibarr buscar el archivo de en /langs/code_CODE/mimodulo.lang

Parte 4: La url de la pgina a mostrar cuando se haga click en las pestaa. La cadena __ID__ ser reemplazada automticamente por el Id de la entidad concerniente.

Para alimentar el contenido de la pestaa con los datos de la base de datos, vea el captulo siguiente.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

12

AADIR PESTAAS DE UNA FICHA ENTIDAD EN SU PROPIA PGINA


Cundo : Para mostrar las pestaas estandard de ficha entidad (producto, tercero, etc.) en su propia pestaa de una entidad.

Hay que hacer lo siguiente :

1. Incluir los archivos que definen las funciones tiles dentro de sus archivos

Para cada ficha entidad, hay que incluir dos archivos con la instruccin

require_once($url_fichier) ;

Aqu le mostramos la lista de estos archivos (DOL_DOCUMENT_ROOT correspond au dossier dolibarr/htdocs/) :

Entidad tercero (thirdparty) : DOL_DOCUMENT_ROOT/societe.class.php DOL_DOCUMENT_ROOT/lib/company.lib.php

Entidad producto (product) : DOL_DOCUMENT_ROOT/product.class.php DOL_DOCUMENT_ROOT/lib/product.lib.php

Entidad factura (invoice) : DOL_DOCUMENT_ROOT/facture.class.php

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

13

DOL_DOCUMENT_ROOT/lib/invoice.lib.php

2. Crear y cargar el objeto a mostrar en su pestaa

Crear el objeto de la clase deseada, y recuperar los datos del objeto a partir de la base de datos. Para ello deber utilizar las funciones fetch() de la clase correspondiente, pasando el parmetro del indentificador del objeto que recupera desde la url (ej : /mononglet.php?id=1).

Ejemplo :

$id=$_GET["id"]; $product = new Product($db) ; $result = $product->fetch($id) ; //Tester $result pour vrifier que l'accs la base s'est bien pass

3. Recuperar la lista de pestaas correspondientes a la entidad seleccionada

Usar la funcin XXX_prepare_head($obj), donde XXX es le nombre de la entidad, para crear una tabla que contiene las definiciones de las pestaas a mostrar. El parmetro a pasar es el objeto del que desea mostrar las pestaas.

La tabla devuelta se compone de la siguiente manera :

$head $head[$h] afficher

// Tableau des onglets // lment dcrivant un onglet. Il y aura autant de $h que d'onglets

$head[$h][0] // Url de la page affiche quand on clique sur l'onglet $head[$h][1] // Titre de l'ongLet

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

14

$head[$h][2] // Code de l'onglet, utiliser pour choisir quel onglet sera 'actif' (voir paragraphe suivant)

Ejemplo :

$head = product_prepare_head($product, $user) ; //le paramtre $user n'est pas prsent sur certaines fonctions

4. Mostrar las pestaas en su pestaa

Use la funcin dol_fiche_head() que muestra las pestaas contenidas en la tabla $head devuelta por XX_prepare_head().

dol_fiche_head($links, $active='0', $title='', $notab=0, $picto='') $links // Tableau des onglets, appel $head plus haut. $active // Onglet actif (mettre le nom de l'onglet dfini dans votre fichier de module, ou un nom contenu dans $head[$h][2]). Cet onglet sera mis en surbrillance $title // ? $notab // Mettre ce paramtre 1 permet de ne pas afficher de zone bleue en dessous des onglets. $picto // Nom de l'image utiliser au dbut de la barre des onglet. Les choix suivant sont possibles : // // // product service company

Esta funcin muestra las pestaas deseadas y abre un elemento < div class="" > que corresponde a la zona azul bajo las pestaas (si el parmetro $notab = 0). Para cerrar la zona azul, simplemente cierre el elemento < /div > en el cdigo PHP.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

15

Nota: Para ms detalles, consulte la documentacin Doxygen o directamente el cdigo de Dolibarr.

CREAR PGINA PANTALLA PHP (OPCIONAL) CREAR UNA PGINA PANTALLA PHP
Debe crear a continuacin pantallas PHP que se basen en los datos de sus tablas utilizando los esqueletos como ejemplo del directorio dev/skeletons. (Para el desarrollo de un script en lnea de comandos, ver Desarrollo de scripts).

Para crear una nueva pgina de usuario, cree un subdirectorio de htdocs (si es que no existe ya) propio en su mdulo (En htdocs/mimodulo, por ejemplo), con el fin de ubicar en l las pginas que va a crear.

Copie all el archivo skeletons_page.php, que va a servir de punto de partida a su pgina. Modifique el archivo para que la ruta relativa de

include("../../main.inc.php)";

sea la correcta, en funcin de la profundidad del directorio en el que se encuentra el archivo (quitando o aadiendo "../"). Es en el "main" donde se carga el entorno tcnico y las habilitaciones. Los objetos variables se posicionan ahora:

$user El objeto que contiene las caractersticas del usuario y sus derechos. $conf El objeto que contiene la configuracin de Dolibarr. $db El objeto que contiene el gestor de conexin abierto a la base de datos. $langs El objeto que contiene el idioma del usuario.

A continuacin, teclee su cdigo para archivar la pgina.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

16

REEMPLAZAR PARTES DE TEMPLATES DE PANTALLA (VERSIN 3.3+)


Algunas partes de la pantalla de Dolibarr estn aisladas en archivos de plantilla. Puede desarrollar un mdulo para reemplazar una o ms de estas plantillas con las suyas.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

17

ACCESO A LA BASE DE DATOS


Si necesita realizar modificaciones en su tabla de la base de datos, utilice la clase generada ms arriba.

Si de todos modos quiere acceder a las tablas sin objeto PHP dedicado, esto es posible (por ejemplo para recuperar una lista de registros). En ese caso, piense en seguir estos ejemplos.

Para un insert, update o delete:

$db->begin();

// Debut transaction

$db->query("Ma requete insert, update ou delete"); $db->commit(); // Valide

o $db->rollback() // Annule

Para una lectura:

$resql=$db->query("Ma requete select"); if ($resql) { $num = $db->num_rows($resql); $i = 0; if ($num) { while ($i < $num) { $obj = $db->fetch_object($resql); DESARROLLO DE UN MDULO PARA DOLIBARR +3.2 18

if ($obj) { // You can use here results print $obj->field1; print $obj->field2; } $i++; } } }

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

19

DEFINICIN DE ESTILOS
Para que el aspecto de la pgina guarde coherencia con el tema Dolibarr, es necesario utilizar los estilos CSS de Dolibarr.

Por ejemplo:

class="liste_titre"1 en las etiquetas tr y td para una lnea de ttulo de tabla. class=pair o class=impair en las etiquetas tr y td de las lneas de datos de la tabla. class=flat en todos los campos en los que se teclea (input, select, textarea...) class=button en los objetos de tipo input type=submit.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

20

UTILIZAR EL SELECTOR DE FECHAS DE DOLIBARR


Si quiere, puede beneficiarse del selector de fechas en las pantallas Dolibarr. Para ello, utilice la siguiente lnea:

$form=new Form($db); $form->select_date('','mykey',0,0,0,"myform");

La cadena "mikey" identifica el campo fecha. Hace falta introducir un valor diferente en caso de que haya varios campos. La cadena "myform" es el nombre del campo "FORM" (en el formulario, name="myform" de la pgina html). La visualizacin de un selector de fecha debe por tanto estar integrada en un formulario html.

Para recuperar el valor, a la herencia de POST, el comando es:

$mydate = dol_mktime(12, 0 , 0, $_POST['mykeymonth'], $_POST['mykeyday'], $_POST['mykeyyear']); print strftime('%A %d %B %Y', $mydate);

DEFINIR LA PGINA DE CONFIGURACIN (OPCIONAL) CREAR PGINA DE EDICIN DE CONFIGURACIN


Si su mdulo ofrece varias opciones parametrizacles, es necesario crear una pgina PHP para editar las opciones (que sern guardadas en la tabla llx_const). Cree una pgina PHP llamada mimodulo_setuppage.php, que registre las opciones posibles y las ponga al da. Es necesario tomar como ejemplo una pgina de /admin que le muestre el mtodo para leer o guardar en la base de datos su opcin. Coloque esta pgina de configuracin tambin en el directorio /admin. A continuacin, en el descriptor del mdulo, modifique la variable para indicar el nombre de esta pgina PHP (no es necesario modificar la ruta, ya que la pgina estar forzosamente en el directorio /admin).

$this->config_page_url = array("monmodule_setupapage.php");

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

21

PROBAR LA PGINA
Vaya a la pgina Configuracin > mdulo. Debera aparecer un icono que permite acceder a la pgina de configuracin, y debera poder modificar estas opciones y verlas en la base de datos.

DEFINIR ENTRADAS DE MEN (OPCIONAL) DEFINIR ENTRADAS DE MEN


Para ello, hace falta definir en el archivo descriptor de men de tabla this->menu, que declara los mens. Esta tabla contiene todas las entradas que aparecern en los mens una vez que el mdulo sea activado. Los archivos de descriptor de mdulo contienen un ejemplo de cmo se declara el men superior, as como las entradas correspondientes en el men de la derecha

He aqu un ejemplo de declaracin de entradas de men en el fichero descriptor:

// Main menu entries $this->menu = array(); $r=0; // List of menus to add

// Add here entries to declare new menus // Example to declare the Top Menu entry: $this->menu[$r]=array( top menu 'fk_menu'=>0, // Put 0 if this is a

'type'=>'top',

// This is a Top menu entry

'titre'=>'MyModule top menu', 'mainmenu'=>'mymodule', 'leftmenu'=>'mymodule', 'url'=>'/mymodule/pagetop.php',

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

22

'langs'=>'mylangfile', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. 'position'=>100, 'enabled'=>'1', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. 'perms'=>'1', // Use 'perms'=>'$user->rights>mymodule->level1->level2' if you want your menu with a permission rules 'target'=>'', 'user'=>2); users, 1=external users, 2=both $r++; // 0=Menu for internal

// Example to declare a Left Menu entry: $this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=xxx', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode 'type'=>'left', 'titre'=>'MyModule left menu 1', 'mainmenu'=>'xxx', 'leftmenu'=>'mymodule', 'url'=>'/mymodule/pagelevel1.php', 'langs'=>'mylangfile', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. 'position'=>100, 'enabled'=>'1', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. 'perms'=>'1', // Use 'perms'=>'$user->rights>mymodule->level1->level2' if you want your menu with a permission rules 'target'=>'', // This is a Left menu entry

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

23

'user'=>2); users,1=external users, 2=both $r++;

// 0=Menu for internal

Para condicionar el acceso al men segun los permisos, modificar la propiedad perms de la tabla. Ver el captulo sobre permisos, un poco ms abajo, para saber como realizar los permisos.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

24

PROBAR ENTRADAS DE MEN


Desactive y reactive su mdulo bajo Dolibarr. Las entradas del men deberan aparecer despus de hacerlo (si la condicin 'enabled' est activada).

DEFINIR PROPIOS PERMISOS (OPCIONAL) DEFINIR PROPIOS PERMISOS


Cundo: Si quiere aadir nuevos permisos.

La definicin de permisos que gestionar su mdulo se hace en el archivo descriptor creado en la primera fase. Modifique la lnea $this->rights_class = 'facture' para que diga:

$this->rights_class = 'mimodulo';

A continuacin, rellene la tabla $this->rights con tantas entradas como permisos diferentes vaya a definir:

$this->rights[$r][0] = 10001; $this->rights[$r][1] = 'Texto por defecto de mi permiso'; $this->rights[$r][3] = 1; $this->rights[$r][4] = 'accion'; $this->rights[$r][5] = 'subaccion'; $r++;

En $this->rights[$r][0], introduzca un id de permiso que no haya sido ocupado ya (para saber qu id estn siendo ya utilizadas, ver el men Informacin del Sistema en una instalacin de Dolibarr que est funcionando. En $this->rights[$r][3], introduzca 1 si este permiso se atribuye por defecto a los usuarios segn son creados. En $this->rights[$r][1] introduzca un texto por defecto -que ser mostrado si no se encuentra traduccin para su permiso en el archivo admin.lang). En $thisDESARROLLO DE UN MDULO PARA DOLIBARR +3.2 25

>rights[$r][4] y $this->rights[$r][5], introduzca una cadena de accin y subaccin sin espacios. Despus puede probar si un usuario tiene los permisos bien, introduciendo la siguiente secuencia en el cdigo PHP:

if ($user->rights->mimodulo->accion->subaccion) ...

DEFINIR PROPIOS PANELES (OPCIONAL) DEFINIR PROPIOS PANELES


Cundo: Si su mdulo tiene uno o varios paneles.

Para ello, modifique las tablas $this->boxes del archivo descriptor de mdulo. Es suficiente con aadir una lnea por cada archivo de panel que se encuentre en el directorio htdocs/includes/boxes.

Ejemplo:

this->boxes[0][1]='mabox0.php' this->boxes[1][1]='mabox1.php' this->boxes[2][1]='mabox2.php' ... this->boxes[n][1]='maboxn.php'

A continuacin cree los archivos mabox0.php, mabox1.php... tomando como ejemplo los paneles existentes (en el directorio htdocs/include/boxes)

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

26

PROBAR LOS PANELES


Vaya al men Inico Configuracin Paneles. Sus paneles deben aparecer en la lista de paneles activables. Actvelos, vaya a la pgina de bienvenida y verifique que se muestran correctamente.

DEFINIR LAS EXPORTACIONES (OPCIONALES) DEFINIR LA EXPORTACIN


Para ello, descomente y modifique las tablas $this->export_xxx de su archivo descriptor de mdulo.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

27

PROBAR LA EXPORTACIN
Vaya al men "Herramientas > Exportar" de Dolibarr. Su exportacin debera aparecer en la lista de exportaciones predefinidas disponibles (si su mdulo ha sido activado correctamente). Deberan aparecer, para que pudiera elegirlos, los campos que defini en la fase anterior en las tablas correspondientes. Seleccione algunos campos y pruebe a generar un archivo de exportacin.

DEFINIR ESTILOS CSS (OPCIONAL) CREAR Y DECLARAR LA HOJA DE ESTILOS


Crear un archivo de estilos llamada mimodulo.css o mimodule.css.php y guardarla en el directorio mimodulo dentro de htdocs. Solo puede haber un archivo css propio a cada mdulo. Recordamos que es mejor usar los estilos ya existentes en Dolibarr (el archivo css usado por Dolibarr es el archivo themes/nomtheme/nombretema.css.php.

Una vez su hoja de estilos est disponible, declrela en su archivo descriptor de mdulo modificando la propiedad $this->module_parts. El valor a indicar debe ser la ruta URL relativa de su archivo css. Por ejemplo

$this->module_parts = array('css' => array('/mimodulo/css/mimodulo.css.php'));

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

28

PROBAR LA HOJA DE ESTILOS


Desactivar y reactivar su mdulo.

Ir la pgina de inicio de Dolibarr. Ver el cdigo de la pgina HTML.

Debera ver en el encabezado HTML, una lnea de declaracin de su hoja de estilos.

DEFINIR FUNCIONES JAVASCRIPT (OPCIONAL) DEFINIR FUNCIONES JAVASCRIPT


Cuando: Si en sus pantallas en PHP utiliza funciones de Javascript no disponibles en estandard (archivo lib_head.js)

Si en sus pantallas en PHP utiliza funciones javascript, es necesario asegurarse de que las funciones declaradas en un archivo javascript htdocs/mimodulo/js/monmodule.js sea cargado en la cabecera del head html.

Para pedir a Dolibarr que gestione en la generacin de la seccin header la inclusin de uno de sus archivos javascript, es necesario proporcionar como parmetro a la funcin llxHeader(), al inicio de su pgina, la URL hacia el js a incluir.

Ejemplo para la pgina /htdocs/mimodulo/mapage.php :

require('../main.inc.php'); $morejs=array("/mimomulo/js/monmodule.js"); llxHeader('','Titulo','','','','',$morejs,'',0,0);

EJECUTAR CDIGO SOBRE UN EVENTO DOLIBARR (OPCIONAL) EJECUTAR CDIGO SOBRE UN EVENTO DOLIBARR

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

29

Cundo: Si quiere que se ejecuten acciones particulares al activar ciertas acciones estandar de Dolibarr (por ejemplo, si deseramos actualizar una tabla de mi mdulo cada vez que se crea una factura en Dolibarr), har falta crear un archivo disparador (triggers).

Interfaces Dolibarr hacia el exterior

Dolibarr proporciona dos mecanismos sencillos para poder actuar en una aplicacin externa en un evento interno de Dolibarr:

Los triggers - un mecanismo para activar su cdigo cuando Dolibarr ejecute una accin (creacin de factura, edicin de un usuario, eliminacin de un pedido, etc.) El sistema Hooks - un interfaz para integrar su cdigo en un punto de entrada de Dolibarr.

Interfaces del Exterior hacia Dolibarr

Existen 3 mtodos para permitir que una aplicacin exterior inserte datos en Dolibarr (Para obtener informacin acerca del caso contrario y permitir a Dolibarr insertar datos en el exterior, consulte la pgina Interfaces Dolibarr hacia el exterior).

Las tres tcnicas posibles son las siguientes: Insercin de datos directa en la base de datos

Esta solucin requiere el conocimiento del modelo fsico y los valores autorizados de los campos. Es arriesgado y debe ser reescrito en caso de modificiacin del formato de la base de datos Dolibarr.

Ventajas: Se puede realizar en cualquier lenguaje.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

30

Inconveniente: Esta tcnica es muy desaconsejada. Al primer aumento de versin Dolibarr, este mtodo puede dejar de funcionar, siendo necesario reescribirlo. Adems, utilizando este mtodo, se pasan por alto las reglas de negociado de validacin, creando un riesgo de corrupcin de datos. Este mtodo tambin necesita conocer la base de datos Dolibarr. Uso de clases PHP

Es posible utilizar objetos de negociado de Dolibarr (Los ficheros xxx.class.php). Cada uno de estos ficheros ofrece una clase equipada con mtodos para:

la recuperacin de una entidad (el mtodo fetch) La insercin de una entidad (el mtodo create o insert) la actualizacin de una entidad (el mtodo update) la eliminacin de una entidad (el mtodo delete) si es aplicable al objeto Otros mtodos diversos propios de la entidad manipulada.

Esta tcnica es preferible a la anterior.

Ventajas: Ofrece la ventaja de pasar a travs de capas de negociado de validacin de datos. La interfaz del cdigo no debera ser sobreescrita en caso de aumento de versin de Dolibarr.

Inconvenientes: Slo se utiliza en PHP. Su cdigo debe de estar situado en el mismo servidor que los archivos Dolibarr.

Web service:

Dolibarr dispone un servidor y un cliente de ejemplo de web services en la carpeta htdocs/webservices.

El servidor utiliza la librera PHP Nusoap (sin necesidad de mdulo PHP suplementario) que ha sido modificada para trabajar tanto en PHP4 como en PHP5. DESARROLLO DE UN MDULO PARA DOLIBARR +3.2 31

Puede enviar su consulta SOAP envindola a la URL relativa /webservices/server_xxx.php

xxx es:

"other" "thirdparty" "productorservice" "invoice" "supplier_invoice"

Por ejemplo, en la demo en lnea de Dolibar, enve su consulta a http://demo.dolibarr.org/webservices/server_other.php

Slo unos pocos servicios estn disponibles. Puede obtener una lista completa de los servicios prestados llamando a la URL sin parmetros POST.

Por ejemplo, para ver todos los webservices suministrados con la versin de demo, llame simplemente a la URL siguiente sin parmetros:

http://demo.dolibarr.org/webservices/server_other.php

Para obtener el fichero WSDL que describe los contratos webservices, puede llamar a:

http://demo.dolibarr.org/webservices/server_other.php?wsdl

Cliente de web services Dolibarr 32

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

Tenga en cuenta que se encuentra disponible un ejemplo de cdigo PHP client que realiza la llamada de web services solicitando la URL /webservices/server.php Por ejemplo, en la demo en lnea, llamar a

http://demo.dolibarr.org/webservices/demo_wsclient_other.php

Listado de Services Web

La lista de servicios disponibles se puede consultar en la pgina /webservices/. Por ejemplo, en el servidor Dolibarr de demostracin, esta es la URL: http://demo.dolibarr.org/webservices/

Actualmente esta lista es muy corta, pero ser enriquezida en las versiones futuras ...

EJECUTAR CDIGO USANDO HOOKS EN DOLIBARR EJECUTAR CDIGO USANDO HOOKS EN DOLIBARR
Cundo: Cuando desee cambiar o aadir otro tipo de cdigo en un evento de negociado (vase lel captulo anterior para esto).

El sistema Hooks

Hooks es una funcionalidad de desarrollo (con Dolibarr 3.2) que permite a los desarrolladores agregar cdigo personalizado en el cdigo del ncleo de Dolibarr sin necesidad de parchear Dolibarr. Al contrario que los triggers (otra funcionalidad para interactuar con el cdigo de Dolibarr) que estn vinculados a una accin de negociado, los hooks pueden producirse en cualquier lugar y en cualquier momento, son un punto de entrada en el programa.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

33

Hooks trabaja por contexto (es decir por mdulo, ej: "productcard" para productos, "invoicecard" para facturas, etc.). Es fcil de encontrar, solo hay que burcar por "initHooks(" Hooks son funciones que pueden ser sobrecargadas por las suyas propias. Usted es el que decide si su cdigo se aade al cdigo estandar de Dolibarr o si reemplaza al cdigo de Dolibarr. Puede encontrar funciones sobrecargables buscando por "executeHooks("

Implementacin

Para usar un hook (sobrecarga de una funcin), debe de haber definido un mdulo antes (vea la wiki para ello), y entonces tiene que hacer 2 cosas:

1- Aadir su mdulo a los hooks del contexto que desee. Esto significa que cuando este contexto (mdulo) va a suceder, el mdulo ser llamado. Para ello edite su /htdocs/sumodulo/includes/modSuModulo.class.php y edite la variable $this>module_parts con algo como esto:

$this->module_parts = array( 'hooks' => array('hookcontext1','hookcontext2') // Set here all hooks context managed by module );

IMPORTANTE: Tenga cuidado: No olvide DESACTIVAR y luego ACTIVAR el mdulo en el panel de administracin para aceptar los nuevos valores de las constantes, ya que estas constantes solo se aaden a la base de datos cuando se activa el mdulo.

2- Sobrecargar un hook (una funcin) con la suya propia.

Cree un archivo /htdocs/sumodulo/class/actions_sumodulo.class.php y luego escriba algo como esto:

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

34

class ActionsYourModuleName {

/** Overloading the doActions function : replacing the parent's function with the one below * @param parameters meta datas of the hook (context, etc...)

* @param object the object you want to process (an invoice if you are in invoice module, a propale in propale's module, etc...) * @param null * @return */ function doActions($parameters, $object, $action) { print_r($parameters); echo "action: ".$action; print_r($object); action current action (if set). Generally create or edit or

void

if (in_array('somecontext',explode(':',$parameters['context']))) { // do something only for the context 'somecontext' } } }

donde

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

35

$parameters es un array de meta-datos acerca de los datos contenidos en el hook (ej: el contexto, siempre accesible mediante $parameters['context']). $object es el objeto con el que va a trabajar. Ej: el producto si se encuentra en el contexto productcard. $action es la accin si se ha enviado alguna (generalmente "create", "edit" o "view").

Listado de Hooks disponibles

Cmo encontrar hooks disponibles? Realice una bsqueda de "executeHooks(" y le ser fcil encontrar las llamadas a los mtodos Hook.

afterLogin afterPDFCreation createFrom doActions printLeftBlock printSearchForm printTopRightMenu printObjectLine formAddObject: Add a product into an element formObjectOptions: called everytime fields associated to the main object are printed or inputted (eg: creation form, datasheet, edit form, etc..). formConfirm createDictionaryFieldlist editDictionaryFieldlist viewDictionaryFieldlist

...

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

36

AADIR UN MDULO DE NUMERACIN (OPCIONAL) AADIR UN MDULO DE NUMERACIN


Cundo: Si quiere aadir una regla de numeracin no cubierta por los mdulos por defecto.

Para cada entidad creada en la aplicacin, Dolibarr le asigna una referencia. Con el fin de adaptar la referencia a cualquier uso, Dolibarr utiliza mdulos para definir la regla de generacin de esta referencia. Los mdulos se suministran como estndar, por lo tanto, algunos son genricos y se utilizan para definir la mscara de numeracin (x nmero de caracteres, con o sin prefijo, incluyendo la fecha o no, etc), pudiendo satisfacer la mayora de las necesidades. Sin embargo, an hay casos en los que el mdulo estndar incluido no responde a la necesidad. En este caso es necesario para desarrollar su propio mdulo de numeracin. . Crear un nuevo mdulo de numeracin

Por ejemplo, partiremos del principio que crearemos un nuevo mdulo de numeracin de facturas al que llamaremos 'terrebis' y que se basa en el mdulo incluido como estndar 'terre':

copiar-pegar htdocs/includes/modules/facture/terre/terre.modules.php en htdocs/includes/modules/facture/terrebis/terrebis.modules.php. Puede utilizar el nombre que desee en lugar de terrebis, siempre que no est ya en uso y que contenga solamente caracteres alfabticos.

editar el nuevo fichero para realizar las siguiente modificaciones en el cdigo :

1. Renombrar el nombre de la clase para reemplazar el nombre de clase por el nombre escogido (conservar las mismas convenciones).

2. Modificar el cdigo del mtodo info() para devolver una descripcin de su mdulo.

3. Modificar el cdigo del mtodo getExemple() para devolver un ejemplo de referencia devuelto por el mdulo. DESARROLLO DE UN MDULO PARA DOLIBARR +3.2 37

4. Modificar el cdigo del mtodo canBeActivated() para realizar solo un "return true;"

5. Modificar el cdigo del mtodo getNextValue() para devolver el siguiente nmero de referencia.

En el cdigo de esta funcin, puede utilizar los parmetros $objsoc $facture que contienen la informacin de los terceros implicados en la generacin y el objeto que participa en la generacin (Los nombres de estas variables pueden ser diferentes en funcin de la naturaleza de la entbjetidad gestionada por el mdulo). Puede utilizar adems los objetos $langs, $conf y $db, a condicin de declarrarlos mediante la lnea

global $langs, $conf, $db;

Estos objetos contienen: $langs: la informacin del idioma del usuario $conf: la configuracin de Dolibarr $db: el objeto de conexin a la base de datos que permite realizar las consultas SQL.

6. Guardar: el modelo 'terrebis' est disponible en la lista de modelos de facturas de Dolibarr Testear el mdulo

Testee este mdulo activndolo desde la pgina de configuracin del mdulo. Compruebe que las columnas de descripcin, ejemplos y valor siguiente, se obtienen informaciones coherentes (devueltas respectivamente por las funciones info(), getExample() y getNextValue() ).

CREACIN DE UN TEMA CREACIN DE UN NUEVO TEMA


Para crear un tema nuevo, ir a la carpeta 'htdocs/theme/' y copiar, por ejemplo, toda la carpeta 'dolibarr' hacia una nueva carpeta al que daremos por nombre el nombre de nuestro tema.

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

38

En esta carpeta cambiar el nombre del fichero .css por el mismo que el de la carpeta.

Modificar el fichero AUTHOR con la informcin que le concierne.

Modificar el CSS, as como las imgenes contenidas en la carpeta img para personalizar su tema.

El nombre del tema aparecer automticamente en la lista de temas utilizables en la pgina Configuracin - Interface donde podremos activarlo por defecto, o en Usuarios y grupos - Pestaa Interface usuario para activarlo para un usuario en concreto. Workcomputer.png

Difusin de su tema

Cuando haya creado un tema nuevo, puede realizar un package para su distribucin mediante el script build/makepack-dolibarrtheme.pl

Obtendr un fichero .tgz que podr enviar al rea de descargas de Dolibarr (Seccin contrib).

DESARROLLO DE UN MDULO PARA DOLIBARR +3.2

39