DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.2 INDICE DEL CONTENIDO INTRODUCCIÓN ............................................................................................ 5 INTRODUCCIÓN ............................................................................. 5 CREAR UN DESCRIPTOR DE MÓDULO (OBLIGATORIO) ................................. 5 CREAR UN DESCRIPTOR DE MÓDULO.............................................. 5 CREAR SU DESCRIPTOR .................................................................. 6 PROBAR SU DESCRIPTOR ................................................................ 6 ARBOL DE UN MÓDULO ................................................................................. 7 ESTRUCTURA DE ARBOL DE UN MÓDULO ........................................ 7 CREAR TABLAS SQL Y LA CLASE PHP CON MÉTODOS DE ACCESO (OPCIONAL) ..................................................................................................................... 7 CREAR FICHEROS .SQL ................................................................... 8 PROBAR EL ARCHIVO .SQL ............................................................. 9 GENERAR LA CLASE PHP DE ACCESO (DAO) ................................. 10 VISUALIZACIÓN DE PESTAÑAS (OPCIONAL) .............................................. 10 AÑADIR O ELIMINAR PESTAÑAS EN LAS FICHAS ENTIDAD .......... 10 AÑADIR PESTAÑAS DE UNA FICHA ENTIDAD EN SU PROPIA PÁGINA ........................................................................................ 13 CREAR PÁGINA PANTALLA PHP (OPCIONAL) .............................................. 16 CREAR UNA PÁGINA PANTALLA PHP ............................................ 16 REEMPLAZAR PARTES DE TEMPLATES DE PANTALLA (VERSIÓN 3.3+)............................................................................................ 17 ACCESO A LA BASE DE DATOS ...................................................... 18 DEFINICIÓN DE ESTILOS ............................................................. 20 UTILIZAR EL SELECTOR DE FECHAS DE DOLIBARR ....................... 21 DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.2 2 DEFINIR LA PÁGINA DE CONFIGURACIÓN (OPCIONAL) ............................. 21 CREAR PÁGINA DE EDICIÓN DE CONFIGURACIÓN........................ 21 PROBAR LA PÁGINA ..................................................................... 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 EXPORTACIÓN .......................................................... 27 PROBAR LA EXPORTACIÓN ........................................................... 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 CÓDIGO SOBRE UN EVENTO DOLIBARR (OPCIONAL) ................. 29 EJECUTAR CÓDIGO SOBRE UN EVENTO DOLIBARR ....................... 29 EJECUTAR CÓDIGO USANDO HOOKS EN DOLIBARR .................................... 33 EJECUTAR CÓDIGO USANDO HOOKS EN DOLIBARR ...................... 33 AÑADIR UN MÓDULO DE NUMERACIÓN (OPCIONAL) .................................. 37 AÑADIR UN MÓDULO DE NUMERACIÓN ........................................ 37 CREACIÓN DE UN TEMA .............................................................................. 38 DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.2 3 ........ 38 DESARROLLO DE UN MÓDULO PARA DOLIBARR +3..............................CREACIÓN DE UN NUEVO TEMA ...........2 4 ..... ) Añadir exportaciones predefinidas a la función “Exportar”. Añadir pantallas de edición/consulta de nuevas tablas. Activar código automático sobre una acción particular de Dolibarr. Añadir o eliminar pestañas en las páginas de vista/edición de objetos (factura. pedido. Insertar nuestro código mediante los hooks de Dolibarr Añadir un módulo de numeración Añadir un modelo de documento Añadir un nuevo tema etc. Todas estas operaciones sólo están disponibles a partir de la versión 3. como por ejemplo añadir una o varias de las siguientes funcionalidades: Añadir nuevas tablas a la base de datos. Añadir variables de substitución Añadir nuevas cajas a la página de inicio. etc.INTRODUCCIÓN INTRODUCCIÓN Para crear un nuevo módulo 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.2 5 . Definir nuevos permisos. producto.2 de Dolibarr. Añadir sus propias entradas en los menús. evento. CREAR UN DESCRIPTOR DE MÓDULO (OBLIGATORIO) CREAR UN DESCRIPTOR DE MÓDULO DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. Este valor debe siempre comenzar por mod. A continuación. PROBAR SU DESCRIPTOR Ejecute Dolibarr y vaya a la página "Configuración > Módulo". ATENCIÓN: El MiModulo debe estar compuesto por una serie de caracteres. Debería aparecer una nueva línea con su nuevo módulo y la posibilidad de activarlo o no (eche un vistazo a DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.2 6 . CREAR SU DESCRIPTOR La primera fase es la de crear un fichero descriptor del módulo. siendo los únicos permitidos [A-Za-z_] con longuitud max de MyModule de 12 caracteres. modificar el contenido del archivo. Para ello: • Crear el directorio /htdocs/mimodulo/core/modules. vaya a la página "Inicio-> Info sistema-> Dolibarr-> Módulos") Modificar eventualmente otras variables definidas por los desarrolladores (ver el comentario en el código del esqueleto para ver su significado) Crear el directorio /htdocs/mimodulo/ Ahora su fichero descriptor está configurado.php en el directorio htdocs/monmodule/core/modules. cualquiera que sea su finalidad. • • • $this->numero = 10000 por un número de módulo que esté libre (Para saber qué números ya están siendo utilizados.Cuándo: Obligatorio cada vez que se desarrolla una extensión. Seguidamente ir al directorio dev/skeletons y copiar el archivo modMyModule.class. reemplazando: • los "modMyModule" por un valor que corresponda a la finalidad de su módulo. test/ contiene los archivos de testeo unitario (datos.todas las pestañas de cada categoría para encontrarlo). La documentación más detallada se emplazará en el directorio docs CREAR TABLAS SQL Y LA CLASE PHP CON MÉTODOS DE ACCESO (OPCIONAL) DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.class. scripts y clases de testeo) README. ARBOL DE UN MÓDULO ESTRUCTURA DE ARBOL DE UN MÓDULO Crear un directorio 'mimodulo' que contendrá los archivos del módulo.php mimodulo/core/triggers contiene los triggers usados mimodulo/admin/ contiene las páginad de configuración del módulo mimodulo/class/ contiene las clases PHP necesarias para el módulo mimodulo/css contiene los archivos CSS necesarios para el módulo mimodulo/img contiene las imagenes suministradas con el módulo mimodulo/langs/xx_XX contiene los archivos de traducción para el idioma xx_XX (como mínimo en_US) mimodulo/lib contiene las bibliotecas necesarias para el módulo mimodulo/sql contiene los archivos SQL usador para añadir las nuevas tablas o índices necesarios para el módulo mimodulo/themes/mitema si el módulo tiene su propio tema/skin build/ puede contener todos los archivos usados para compilar o construir el paquete de distribución docs/ contiene todo lo que se refiera a documentación. También puede contener los archivos de licencia scripts/ contiene los archivos de scripts (comandos en línea). Es el valor $this->special el que determina en qué pestaña se encuentra su módulo. Este directorio debe de estar en el directorio htdocs y contendrá los siguientes subdirectorios: mimodulo/core/modules/ debe contener el archivo descriptor del módulo : modMiModulo.2 7 .txt es un archivo que resume el módulo. Ejemplo de contenido de un fichero data.sql' (ver los archivos existentes en install/mysql/tables. Cree un subdirectorio sql en el directorio de su módulo (por ejemplo. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.'__ENTITY__').sql situado en la misma carpeta /mimodulo/sql/.1. con el fin de colocar los scripts sql que va a crear. Las órdenes SQL de los archivos deben de ser operacionales para la base de datos mysql. note. todos deben estar en un archivo llamado data. eventualmente acompañado del archivo llx_mitabla.SQL Si su módulo de verdad requiere administrar datos que no existen en la base de datos en la versión estándar de Dolibarr. Nota: Los archivos de otras bases de datos no se mantienen.key. Regla a respetar: • • Agregue los archivos de orden de creación de sus tablas siguiendo el principio de un fichero llx_mitabla. INSERT INTO llx_const (name. será necesario definir ciertas tablas SQL para registrar esos datos.sql DELETE FROM llx_const WHERE name='MYMODULE_IT_WORKS' AND entity='__ENTITY__'.'A constant vor my module'. visible. En términos de orden de gestión de datos.CREAR FICHEROS . entity) VALUES ('MYMODULE_IT_WORKS'.'1'.2 8 .sql por tabla.'chaine'. htdocs/mimodulo/sql). para tomar ejemplo). value. Se leen y se convierten al vuelo por el driver de la base de datos. type. Las tablas deben ser recreadas por la activación del módulo.SQL Una vez que los archivos estén listos. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. Si no es así. verifique sus scripts o consulte los logs Dolibarr. eliminar las tablas de la base de datos y reactivar el módulo. puede volver a Dolibarr para desactivar el módulo.2 9 .PROBAR EL ARCHIVO . intente con php-cli en lugar de php. VISUALIZACIÓN DE PESTAÑAS (OPCIONAL) AÑADIR O ELIMINAR PESTAÑAS EN LAS FICHAS ENTIDAD Cuándo : Para añadir su propia pestaña en las pestañas estandard de una ficha entidad (factura.php en la el directorio sql/ de su módulo module..nombretabla. pedido.php se genera igualmente y contiene un ejemplo de código para utilizar la clase para cada uno de los cuatro métodos CRUD.php nombretabla Nota: Si el comando no funciona. Un archivo out. Esto genera un archivo out.2 10 . y ejecute el script php build_class_from_table. vaya al directorio dev/skeletons. copie el archivo build_class_from_table. y un delete de una línea de la tabla.nombretabla_script. miembro.php?id=_ _ID__'. vaya al archivo descriptor del módulo 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. Suprima justo el "out" del nombre del archivo y pógalo en un subdirectorio de htdocs propio en su módulo (Por ejemplo en htdocs/mimodulo).) Para ello.GENERAR LA CLASE PHP DE ACCESO (DAO) Una vez que su/s tabla/s estén creadas en la base de datos.php que contiene la clase de gestión de la tabla “nombretabla”.. un fetch (select). // To add a new tab identified by code tabname1 DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. un update.class. En esta clase se encuentran los métodos CRUD (Create/Read/Update/Delete) ya operativos para hacer un insert. presupuesto. remove an existing tab identified by code tabname // To La tabla debe contener una lista de cadena. cada cadena representa una nueva pestaña.'objecttype:+tabname2:Title2:@mymodule:/mymodule/mynewtab2.2 11 . El formato de la cadena se compone de 4 partes separadas por ":" • Parte 1: El código de la entidad (objecttype) en la que debe aparecer la pestaña siendo el valor de ella misma: 'thirdparty' para añadir una pestaña en la vista de tercero 'intervention' para añadir una pestaña en la vista de intervención 'order_supplier' para añadir una pestaña en la vista de pedido a proveedor 'invoice_supplier' para añadir una pestaña en la vista de factura de proveedor 'invoice' para añadir una pestaña en la vista de factura a cliente 'order' para añadir una pestaña en la vista de pedido de cliente 'product' para añadir una pestaña en la vista de producto 'stock' para añadir una pestaña en la vista de stock 'propal' para añadir una pestaña en la vista de presupesto a cliente 'member' para añadir una pestaña en la vista de miembro 'contract' para añadir una pestaña en la vista de contrato 'user' para añadir una pestaña en la vista de usuario 'group' para añadir una pestaña en la vista de grupo 'contact' para añadir una pestaña en la vista de contacto 'categories_x' para añadir una pestaña en la vista de categoría (reemplazar 'x' por el típo de categoría (0=producto. // To add another new tab identified by code tabname2 'objecttype:-tabname'). 1=proveedor. 3=miembro) DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. 2=cliente.php?id=__ID__' . de lo contrario Dolibarr buscará el archivo de en /langs/code_CODE/mimodulo. Si el nombre empieza con @. htdocs/mimodulo/langs/code_CODE/mimodulo. Parte 3: El nombre del archivo . Puede ser una etiqueta directa o mejor un código de traducción de un archivo lang. vea el capítulo siguiente.lang) que contiene la correspondencia entre el código de traducción y la etiqueta a mostrar. Dolibarr buscará el archivo en el directorio lang del propio módulo.2 12 .lang • Parte 4: La url de la página a mostrar cuando se haga click en las pestaña.lang (sin la extensión .lang. Para alimentar el contenido de la pestaña con los datos de la base de datos. La cadena __ID__ será reemplazada automáticamente por el Id de la entidad concerniente.• • Parte 2: El título de la pestaña. es decir. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. class. tercero. hay que incluir dos archivos con la instrucción require_once($url_fichier) .php DOL_DOCUMENT_ROOT/lib/product.lib. Incluir los archivos que definen las funciones útiles dentro de sus archivos Para cada ficha entidad. 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.php DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. etc.2 13 .) en su propia pestaña de una entidad.php • Entidad factura (invoice) : DOL_DOCUMENT_ROOT/facture.class. Hay que hacer lo siguiente : 1.AÑADIR PESTAÑAS DE UNA FICHA ENTIDAD EN SU PROPIA PÁGINA Cuándo : Para mostrar las pestañas estandard de ficha entidad (producto.php • Entidad producto (product) : DOL_DOCUMENT_ROOT/product.lib. pasando el parámetro del indentificador del objeto que recupera desde la url (ej : /mononglet. $product = new Product($db) . La tabla devuelta se compone de la siguiente manera : $head $head[$h] afficher // Tableau des onglets // Élément décrivant un onglet. donde XXX es le nombre de la entidad. Recuperar la lista de pestañas correspondientes a la entidad seleccionada Usar la función XXX_prepare_head($obj). para crear una tabla que contiene las definiciones de las pestañas a mostrar. $result = $product->fetch($id) . Ejemplo : $id=$_GET["id"].php 2.DOL_DOCUMENT_ROOT/lib/invoice.lib.php?id=1). Crear y cargar el objeto a mostrar en su pestaña Crear el objeto de la clase deseada. Il y aura autant de $h que d'onglets à $head[$h][0] // Url de la page affichée quand on clique sur l'onglet $head[$h][1] // Titre de l'ongLet DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.2 14 . Para ello deberá utilizar las funciones fetch() de la clase correspondiente. y recuperar los datos del objeto a partir de la base de datos. //Tester $result pour vérifier que l'accès à la base s'est bien passé 3. El parámetro a pasar es el objeto del que desea mostrar las pestañas. $active // Onglet actif (mettre le nom de l'onglet défini dans votre fichier de module.$head[$h][2] // Code de l'onglet. appelé $head plus haut. $user) . $active='0'. à utiliser pour choisir quel onglet sera 'actif' (voir paragraphe suivant) Ejemplo : $head = product_prepare_head($product. ou un nom contenu dans $head[$h][2]). simplemente cierre el elemento < /div > en el código PHP. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. $picto='') $links // Tableau des onglets. $title=''. Cet onglet sera mis en surbrillance $title // ? $notab // Mettre ce paramètre à 1 permet de ne pas afficher de zone bleue en dessous des onglets. $picto // Nom de l'image à utiliser au début de la barre des onglet. dol_fiche_head($links.2 15 . Mostrar las pestañas en su pestaña Use la función dol_fiche_head() que muestra las pestañas contenidas en la tabla $head devuelta por XX_prepare_head(). $notab=0. Les choix suivant sont possibles : // // // product service company Esta función muestra las pestañas deseadas y abre un elemento < div class="" > que corresponde a la zona azul bajo las pestañas (si el parámetro $notab = 0). Para cerrar la zona azul. //le paramètre $user n'est pas présent sur certaines fonctions 4. Nota: Para más detalles.. sea la correcta.php)". por ejemplo). teclee su código para archivar la página./main./").. CREAR PÁGINA PANTALLA PHP (OPCIONAL) CREAR UNA PÁGINA PANTALLA PHP Debe crear a continuación pantallas PHP que se basen en los datos de sus tablas utilizando los esqueletos como ejemplo del directorio dev/skeletons. $db – El objeto que contiene el gestor de conexión abierto a la base de datos.php. consulte la documentación Doxygen o directamente el código de Dolibarr.2 16 ./. (Para el desarrollo de un script en línea de comandos. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. Los objetos variables se posicionan ahora: • • • • $user – El objeto que contiene las características del usuario y sus derechos. A continuación.. Para crear una nueva página de usuario. ver Desarrollo de scripts). en función de la profundidad del directorio en el que se encuentra el archivo (quitando o añadiendo ". $conf – El objeto que contiene la configuración de Dolibarr. Modifique el archivo para que la ruta relativa de include(". con el fin de ubicar en él las páginas que va a crear. cree un subdirectorio de htdocs (si es que no existe ya) propio en su módulo (En htdocs/mimodulo. que va a servir de punto de partida a su página.inc. Es en el "main" donde se carga el entorno técnico y las habilitaciones. Copie allí el archivo skeletons_page. $langs – El objeto que contiene el idioma del usuario. REEMPLAZAR PARTES DE TEMPLATES DE PANTALLA (VERSIÓN 3. Puede desarrollar un módulo para reemplazar una o más de estas plantillas con las suyas.2 17 . DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.3+) Algunas partes de la pantalla de Dolibarr están aisladas en archivos de plantilla. // Debut transaction $db->query("Ma requete insert. if ($resql) { $num = $db->num_rows($resql). DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.ACCESO A LA BASE DE DATOS Si necesita realizar modificaciones en su tabla de la base de datos. utilice la clase generada más arriba. $i = 0. $db->commit().2 18 . update ou delete"). Para un insert. En ese caso. esto es posible (por ejemplo para recuperar una lista de registros). if ($num) { while ($i < $num) { $obj = $db->fetch_object($resql). piense en seguir estos ejemplos. update o delete: $db->begin(). Si de todos modos quiere acceder a las tablas sin objeto PHP dedicado. // Valide o $db->rollback() // Annule Para una lectura: $resql=$db->query("Ma requete select"). if ($obj) { // You can use here results print $obj->field1. } } } DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. print $obj->field2.2 19 . } $i++. Por ejemplo: • • • • class="liste_titre"1 en las etiquetas tr y td para una línea de título de tabla. class=”pair” o class=”impair” en las etiquetas tr y td de las líneas de datos de la tabla. select.2 20 . DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. es necesario utilizar los estilos CSS de Dolibarr..) class=”button” en los objetos de tipo input type=”submit”. class=”flat” en todos los campos en los que se teclea (input.DEFINICIÓN DE ESTILOS Para que el aspecto de la página guarde coherencia con el tema Dolibarr.. textarea. Para ello. $_POST['mykeyyear']).0. $form->select_date(''. $mydate). La visualización de un selector de fecha debe por tanto estar integrada en un formulario html. ya que la página estará forzosamente en el directorio /admin).0. que registre las opciones posibles y las ponga al día.UTILIZAR EL SELECTOR DE FECHAS DE DOLIBARR Si quiere. La cadena "mikey" identifica el campo fecha. Para recuperar el valor. $this->config_page_url = array("monmodule_setupapage. $_POST['mykeyday']. 0. $_POST['mykeymonth']. Hace falta introducir un valor diferente en caso de que haya varios campos.2 21 . utilice la siguiente línea: $form=new Form($db). A continuación."myform"). a la herencia de POST. 0 . Es necesario tomar como ejemplo una página de /admin que le muestre el método para leer o guardar en la base de datos su opción. print strftime('%A %d %B %Y'. puede beneficiarse del selector de fechas en las pantallas Dolibarr. Cree una página PHP llamada mimodulo_setuppage. DEFINIR LA PÁGINA DE CONFIGURACIÓN (OPCIONAL) CREAR PÁGINA DE EDICIÓN DE CONFIGURACIÓN Si su módulo ofrece varias opciones parametrizacles. Coloque esta página de configuración también en el directorio /admin.php"). modifique la variable para indicar el nombre de esta página PHP (no es necesario modificar la ruta.php. en el descriptor del módulo. el comando es: $mydate = dol_mktime(12. es necesario crear una página PHP para editar las opciones (que serán guardadas en la tabla llx_const). La cadena "myform" es el nombre del campo "FORM" (en el formulario. name="myform" de la página html).0. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.'mykey'. que declara los menús.php'. Debería aparecer un icono que permite acceder a la página de configuración.PROBAR LA PÁGINA Vaya a la página Configuración > módulo. Esta tabla contiene todas las entradas que aparecerán en los menús una vez que el módulo sea activado. // 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. 'mainmenu'=>'mymodule'. // Put 0 if this is a 'type'=>'top'. 'leftmenu'=>'mymodule'. Los archivos de descriptor de módulo contienen un ejemplo de cómo se declara el menú superior. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. 'url'=>'/mymodule/pagetop. así como las entradas correspondientes en el menú de la derecha He aquí un ejemplo de declaración de entradas de menú en el fichero descriptor: // Main menu entries $this->menu = array(). y debería poder modificar estas opciones y verlas en la base de datos. $r=0. DEFINIR ENTRADAS DE MENÚ (OPCIONAL) DEFINIR ENTRADAS DE MENÚ Para ello. // This is a Top menu entry 'titre'=>'MyModule top menu'.2 22 . hace falta definir en el archivo descriptor de menú de tabla this->menu. 'titre'=>'MyModule left menu 1'. 'perms'=>'1'. 1=external users. // 0=Menu for internal // Example to declare a Left Menu entry: $this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=xxx'. 'langs'=>'mylangfile'. 2=both $r++. // Define condition to show or hide menu entry. // Lang file to use (without .2 23 . // Lang file to use (without . // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx.fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode 'type'=>'left'. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. 'mainmenu'=>'xxx'. 'position'=>100.'langs'=>'mylangfile'.php'. 'user'=>2).lang) by module. // Define condition to show or hide menu entry. 'leftmenu'=>'mymodule'. 'enabled'=>'1'. File must be in langs/code_CODE/ directory. 'url'=>'/mymodule/pagelevel1. // Use 'perms'=>'$user->rights>mymodule->level1->level2' if you want your menu with a permission rules 'target'=>''.lang) by module. 'enabled'=>'1'. 'perms'=>'1'. 'position'=>100. // This is a Left menu entry DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. File must be in langs/code_CODE/ directory. users. // Use 'perms'=>'$user->rights>mymodule->level1->level2' if you want your menu with a permission rules 'target'=>''. users. para saber como realizar los permisos. 2=both $r++. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. un poco más abajo.2 24 .1=external users. modificar la propiedad perms de la tabla. Ver el capítulo sobre permisos. // 0=Menu for internal Para condicionar el acceso al menú segun los permisos.'user'=>2). En $this->rights[$r][1] introduzca un texto por defecto -que será mostrado si no se encuentra traducción para su permiso en el archivo admin. $this->rights[$r][5] = 'subaccion'.PROBAR ENTRADAS DE MENÚ Desactive y reactive su módulo bajo Dolibarr. La definición de permisos que gestionará su módulo se hace en el archivo descriptor creado en la primera fase. Modifique la línea $this->rights_class = 'facture' para que diga: $this->rights_class = 'mimodulo'. $this->rights[$r][3] = 1. ver el menú Información del Sistema en una instalación de Dolibarr que esté funcionando. Las entradas del menú deberían aparecer después de hacerlo (si la condición 'enabled' está activada). En $this->rights[$r][0]. En $this->rights[$r][3]. rellene la tabla $this->rights con tantas entradas como permisos diferentes vaya a definir: $this->rights[$r][0] = 10001. introduzca 1 si este permiso se atribuye por defecto a los usuarios según son creados. En $thisDESARROLLO DE UN MÓDULO PARA DOLIBARR +3. DEFINIR PROPIOS PERMISOS (OPCIONAL) DEFINIR PROPIOS PERMISOS Cuándo: Si quiere añadir nuevos permisos. $this->rights[$r][4] = 'accion'. A continuación. $this->rights[$r][1] = 'Texto por defecto de mi permiso'.lang). $r++. introduzca un id de permiso que no haya sido ocupado ya (para saber qué id están siendo ya utilizadas.2 25 . 2 26 . DEFINIR PROPIOS PANELES (OPCIONAL) DEFINIR PROPIOS PANELES Cuándo: Si su módulo tiene uno o varios paneles. Es suficiente con añadir una línea por cada archivo de panel que se encuentre en el directorio htdocs/includes/boxes. Ejemplo: this->boxes[0][1]='mabox0. mabox1.php' A continuación cree los archivos mabox0.>rights[$r][4] y $this->rights[$r][5].php.. Para ello.. introduzca una cadena de acción y subacción sin espacios.. Después puede probar si un usuario tiene los permisos bien.. this->boxes[n][1]='maboxn. modifique las tablas $this->boxes del archivo descriptor de módulo.php' this->boxes[1][1]='mabox1. tomando como ejemplo los paneles existentes (en el directorio htdocs/include/boxes) DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. introduciendo la siguiente secuencia en el código PHP: if ($user->rights->mimodulo->accion->subaccion) ...php' .php' this->boxes[2][1]='mabox2.php. vaya a la página de bienvenida y verifique que se muestran correctamente. descomente y modifique las tablas $this->export_xxx de su archivo descriptor de módulo. DEFINIR LAS EXPORTACIONES (OPCIONALES) DEFINIR LA EXPORTACIÓN Para ello.2 27 . Sus paneles deben aparecer en la lista de paneles activables.PROBAR LOS PANELES Vaya al menú Inico – Configuración – Paneles. Actívelos. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.css. DEFINIR ESTILOS CSS (OPCIONAL) CREAR Y DECLARAR LA HOJA DE ESTILOS Crear un archivo de estilos llamada mimodulo. Su exportación debería aparecer en la lista de exportaciones predefinidas disponibles (si su módulo ha sido activado correctamente).css o mimodule. Deberían aparecer.php')). El valor a indicar debe ser la ruta URL relativa de su archivo css.css. Por ejemplo $this->module_parts = array('css' => array('/mimodulo/css/mimodulo.PROBAR LA EXPORTACIÓN Vaya al menú "Herramientas > Exportar" de Dolibarr. para que pudiera elegirlos. Una vez su hoja de estilos esté disponible. Seleccione algunos campos y pruebe a generar un archivo de exportación. Solo puede haber un archivo css propio a cada módulo. los campos que definió en la fase anterior en las tablas correspondientes.2 28 . declárela en su archivo descriptor de módulo modificando la propiedad $this->module_parts.php y guardarla en el directorio mimodulo dentro de htdocs.php.css. Recordamos que es mejor usar los estilos ya existentes en Dolibarr (el archivo css usado por Dolibarr es el archivo themes/nomtheme/nombretema. 0).$morejs. 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. Ejemplo para la página /htdocs/mimodulo/mapage.php : require('.0..2 29 . es necesario proporcionar como parámetro a la función llxHeader(). la URL hacia el js a incluir.''.php').''. Ir la página de inicio de Dolibarr. al inicio de su página. $morejs=array("/mimomulo/js/monmodule. Ver el código de la página HTML.''.js"). llxHeader(''. Debería ver en el encabezado HTML.js) Si en sus pantallas en PHP utiliza funciones javascript./main.inc.js sea cargado en la cabecera del head html.''. EJECUTAR CÓDIGO SOBRE UN EVENTO DOLIBARR (OPCIONAL) EJECUTAR CÓDIGO SOBRE UN EVENTO DOLIBARR DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.'Titulo'. es necesario asegurarse de que las funciones declaradas en un archivo javascript htdocs/mimodulo/js/monmodule.PROBAR LA HOJA DE ESTILOS Desactivar y reactivar su módulo. Para pedir a Dolibarr que gestione en la generación de la sección header la inclusión de uno de sus archivos javascript.''. una línea de declaración de su hoja de estilos. Ventajas: Se puede realizar en cualquier lenguaje.un interfaz para integrar su código en un punto de entrada de Dolibarr. Las tres técnicas posibles son las siguientes: Inserción de datos directa en la base de datos Esta solución requiere el conocimiento del modelo físico y los valores autorizados de los campos. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. hará falta crear un archivo disparador (triggers). consulte la página Interfaces Dolibarr hacia el exterior).2 30 . etc. si deseáramos actualizar una tabla de mi módulo cada vez que se crea una factura en Dolibarr). Interfaces del Exterior hacia Dolibarr Existen 3 métodos para permitir que una aplicación exterior inserte datos en Dolibarr (Para obtener información acerca del caso contrario y permitir a Dolibarr insertar datos en el exterior. Es arriesgado y debe ser reescrito en caso de modificiación del formato de la base de datos Dolibarr.Cuándo: Si quiere que se ejecuten acciones particulares al activar ciertas acciones estandar de Dolibarr (por ejemplo.un mecanismo para activar su código cuando Dolibarr ejecute una acción (creación de factura. edición de un usuario. Interfaces Dolibarr hacia el exterior Dolibarr proporciona dos mecanismos sencillos para poder actuar en una aplicación externa en un evento interno de Dolibarr: • • Los triggers .) El sistema Hooks . eliminación de un pedido. class. creando un riesgo de corrupción de datos. Web service: Dolibarr dispone un servidor y un cliente de ejemplo de web services en la carpeta htdocs/webservices. utilizando este método. Inconvenientes: Sólo se utiliza en PHP. Ventajas: Ofrece la ventaja de pasar a través de capas de negociado de validación de datos. Además.Inconveniente: Esta técnica es muy desaconsejada. El servidor utiliza la librería PHP Nusoap (sin necesidad de módulo PHP suplementario) que ha sido modificada para trabajar tanto en PHP4 como en PHP5.2 31 . Uso de clases PHP Es posible utilizar objetos de negociado de Dolibarr (Los ficheros xxx.php). Su código debe de estar situado en el mismo servidor que los archivos Dolibarr. se pasan por alto las reglas de negociado de validación. este método puede dejar de funcionar. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. Esta técnica es preferible a la anterior. Al primer aumento de versión Dolibarr. Este método también necesita conocer la base de datos Dolibarr. Cada uno de estos ficheros ofrece una clase equipada con métodos para: • • • • • la recuperación de una entidad (el método fetch) La inserción de una entidad (el método create o insert) la actualización de una entidad (el método update) la eliminación de una entidad (el método delete) si es aplicable al objeto Otros métodos diversos propios de la entidad manipulada. siendo necesario reescribirlo. La interfaz del código no debería ser sobreescrita en caso de aumento de versión de Dolibarr. org/webservices/server_other.php?wsdl • Cliente de web services Dolibarr 32 DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.2 .php xxx es: • • • • • "other" "thirdparty" "productorservice" "invoice" "supplier_invoice" Por ejemplo.dolibarr. envíe su consulta a http://demo. para ver todos los webservices suministrados con la versión de demo. Por ejemplo.org/webservices/server_other. llame simplemente a la URL siguiente sin parámetros: http://demo.org/webservices/server_other. puede llamar a: http://demo. Puede obtener una lista completa de los servicios prestados llamando a la URL sin parámetros POST.php Para obtener el fichero WSDL que describe los contratos webservices. en la demo en línea de Dolibar.php Sólo unos pocos servicios están disponibles.Puede enviar su consulta SOAP enviándola a la URL relativa /webservices/server_xxx.dolibarr.dolibarr. org/webservices/demo_wsclient_other. Por ejemplo. llamar a http://demo.dolibarr. EJECUTAR CÓDIGO USANDO HOOKS EN DOLIBARR EJECUTAR CÓDIGO USANDO HOOKS EN DOLIBARR Cuándo: Cuando desee cambiar o añadir otro tipo de código en un evento de negociado (véase lel capítulo anterior para esto).php Por ejemplo.2 33 . en la demo en línea. El sistema Hooks Hooks es una funcionalidad de desarrollo (con Dolibarr 3.Tenga en cuenta que se encuentra disponible un ejemplo de código PHP client que realiza la llamada de web services solicitando la URL /webservices/server. Al contrario que los triggers (otra funcionalidad para interactuar con el código de Dolibarr) que están vinculados a una acción de negociado.dolibarr.org/webservices/ Actualmente esta lista es muy corta. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.. son un punto de entrada en el programa. pero será enriquezida en las versiones futuras . esta es la URL: http://demo.. los hooks pueden producirse en cualquier lugar y en cualquier momento.php • Listado de Services Web La lista de servicios disponibles se puede consultar en la página /webservices/.2) que permite a los desarrolladores agregar código personalizado en el código del núcleo de Dolibarr sin necesidad de parchear Dolibarr. en el servidor Dolibarr de demostración. 'hookcontext2') // Set here all hooks context managed by module ). debe de haber definido un módulo antes (vea la wiki para ello). 2. solo hay que burcar por "initHooks(" Hooks son funciones que pueden ser sobrecargadas por las suyas propias. Para ello edite su /htdocs/sumodulo/includes/modSuModulo.Hooks trabaja por contexto (es decir por módulo.class.php y edite la variable $this>module_parts con algo como esto: $this->module_parts = array( 'hooks' => array('hookcontext1'. etc.). Usted es el que decide si su código se añade al código estandar de Dolibarr o si reemplaza al código de Dolibarr.Sobrecargar un hook (una función) con la suya propia.2 34 . IMPORTANTE: Tenga cuidado: No olvide DESACTIVAR y luego ACTIVAR el módulo en el panel de administración para aceptar los nuevos valores de las constantes.Añadir su módulo a los hooks del contexto que desee. ej: "productcard" para productos. el módulo será llamado. Puede encontrar funciones sobrecargables buscando por "executeHooks(" Implementación Para usar un hook (sobrecarga de una función).php y luego escriba algo como esto: DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. y entonces tiene que hacer 2 cosas: 1. "invoicecard" para facturas.class. Es fácil de encontrar. ya que estas constantes solo se añaden a la base de datos cuando se activa el módulo. Esto significa que cuando este contexto (módulo) va a suceder. Cree un archivo /htdocs/sumodulo/class/actions_sumodulo. ) * @param object the object you want to process (an invoice if you are in invoice module. echo "action: ".2 35 . a propale in propale's module. print_r($object).$action. $object. $action) { print_r($parameters)..$parameters['context']))) { // do something only for the context 'somecontext' } } } donde DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.explode(':'.) * @param null * @return */ function doActions($parameters. Generally create or edit or void if (in_array('somecontext'. action current action (if set). etc...class ActionsYourModuleName { /** Overloading the doActions function : replacing the parent's function with the one below * @param parameters meta datas of the hook (context. etc.. siempre accesible mediante $parameters['context']).$parameters es un array de meta-datos acerca de los datos contenidos en el hook (ej: el contexto. etc. $object es el objeto con el que va a trabajar. Ej: el producto si se encuentra en el contexto productcard. edit form.. Listado de Hooks disponibles ¿Cómo encontrar hooks disponibles? Realice una búsqueda de "executeHooks(" y le será fácil encontrar las llamadas a los métodos 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. "edit" o "view").2 36 .). DESARROLLO DE UN MÓDULO PARA DOLIBARR +3... $action es la acción si se ha enviado alguna (generalmente "create". datasheet. formConfirm createDictionaryFieldlist editDictionaryFieldlist viewDictionaryFieldlist . Puede utilizar el nombre que desee en lugar de terrebis.php. Con el fin de adaptar la referencia a cualquier uso. siempre que no esté ya en uso y que contenga solamente caracteres alfabéticos.php en htdocs/includes/modules/facture/terrebis/terrebis. pudiendo satisfacer la mayoría de las necesidades.2 37 . etc). aún hay casos en los que el módulo estándar incluido no responde a la necesidad. Sin embargo. partiremos del principio que crearemos un nuevo módulo de numeración de facturas al que llamaremos 'terrebis' y que se basa en el módulo incluido como estándar 'terre': copiar-pegar htdocs/includes/modules/facture/terre/terre. Modificar el código del método info() para devolver una descripción de su módulo.AÑADIR UN MÓDULO DE NUMERACIÓN (OPCIONAL) AÑADIR UN MÓDULO DE NUMERACIÓN Cuándo: Si quiere añadir una regla de numeración no cubierta por los módulos por defecto. editar el nuevo fichero para realizar las siguiente modificaciones en el código : 1. 2. Los módulos se suministran como estándar.modules. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. algunos son genéricos y se utilizan para definir la máscara de numeración (x número de caracteres. con o sin prefijo. Para cada entidad creada en la aplicación. . Dolibarr le asigna una referencia. incluyendo la fecha o no. En este caso es necesario para desarrollar su propio módulo de numeración. Dolibarr utiliza módulos para definir la regla de generación de esta referencia.modules. por lo tanto. 3. Crear un nuevo módulo de numeración Por ejemplo. Renombrar el nombre de la clase para reemplazar el nombre de clase por el nombre escogido (conservar las mismas convenciones). Modificar el código del método getExemple() para devolver un ejemplo de referencia devuelto por el módulo. $conf. DESARROLLO DE UN MÓDULO PARA DOLIBARR +3. Modificar el código del método getNextValue() para devolver el siguiente número de referencia. puede utilizar los parámetros $objsoc ó $facture que contienen la información de los terceros implicados en la generación y el objeto que participa en la generación (Los nombres de estas variables pueden ser diferentes en función de la naturaleza de la entbjetidad gestionada por el módulo)." 5. $db. Modificar el código del método canBeActivated() para realizar solo un "return true. ejemplos y valor siguiente. Guardar: el modelo 'terrebis' está disponible en la lista de modelos de facturas de Dolibarr Testear el módulo Testee este módulo activándolo desde la página de configuración del módulo. CREACIÓN DE UN TEMA CREACIÓN DE UN NUEVO TEMA Para crear un tema nuevo. por ejemplo. Estos objetos contienen: $langs: la información del idioma del usuario $conf: la configuración de Dolibarr $db: el objeto de conexión a la base de datos que permite realizar las consultas SQL. a condición de declarrarlos mediante la línea global $langs. getExample() y getNextValue() ). toda la carpeta 'dolibarr' hacia una nueva carpeta al que daremos por nombre el nombre de nuestro tema.2 38 . En el código de esta función. ir a la carpeta 'htdocs/theme/' y copiar. 6. se obtienen informaciones coherentes (devueltas respectivamente por las funciones info(). Puede utilizar además los objetos $langs. $conf y $db. Compruebe que las columnas de descripción.4. css por el mismo que el de la carpeta.Interface donde podremos activarlo por defecto.pl Obtendrá un fichero . Workcomputer. así como las imágenes contenidas en la carpeta img para personalizar su tema. puede realizar un package para su distribución mediante el script build/makepack-dolibarrtheme. El nombre del tema aparecerá automáticamente en la lista de temas utilizables en la página Configuración . DESARROLLO DE UN MÓDULO PARA DOLIBARR +3.png Difusión de su tema Cuando haya creado un tema nuevo.Pestaña Interface usuario para activarlo para un usuario en concreto.2 39 . o en Usuarios y grupos . Modificar el CSS.En esta carpeta cambiar el nombre del fichero .tgz que podrá enviar al área de descargas de Dolibarr (Sección contrib). Modificar el fichero AUTHOR con la informción que le concierne.