apuntes_curso_openERP.pdf

35
Curso de openERP Fecha: del 19 al 23 de julio del 2010 Ponentes: Ana Juaristi (Consultora independiente), Carlos Liebana carlos.liebana-ting.es y Hugo Santos hugo.santos-ting.es (empresa: ting!, de Leon) Curso de openERP Introducción Iniciación al entorno OpenERP - OpenObjet Bazaar Launchpad Instalación y mantenimiento del servidor Instalación sobre Ubuntu 10.04 Server LTS Instalación de Postgres Instalación de dependencias python y xml Archivo de configuración Fichero de arranque del servidor Gestión de la BBDD Instalación del cliente de openERP Launchpad Bazaar Instalar entorno de desarrollo Eclipse+Pydev Para MAC Instalar la base de datos de openERP Instalar la localización española Ejercicio de instalación de la localización en una base de datos nueva Instalación del cliente Koo para KDE Instalación del servidor web Workflows desde el interfaz web Arquitectura Desarrollo en openERP Introducción ¿Qué contiene un módulo de openerp? Python Archivos de un módulo de openERP Modificar un módulo de openerp con eclipse Instalar acceso a código con conexiones remotas Realizar nuestro primer módulo en openERP Creación de un módulo para la gestión de instalaciones de openERP Crear la vista Métodos self.search y self.browse

Transcript of apuntes_curso_openERP.pdf

Page 1: apuntes_curso_openERP.pdf

Curso de openERPFecha: del 19 al 23 de julio del 2010Ponentes: Ana Juaristi (Consultora independiente), Carlos Liebana carlos.liebana-ting.es y Hugo Santos hugo.santos-ting.es (empresa: ting!, de Leon)

Curso de openERPIntroducciónIniciación al entorno OpenERP - OpenObjet

BazaarLaunchpad

Instalación y mantenimiento del servidorInstalación sobre Ubuntu 10.04 Server LTS

Instalación de PostgresInstalación de dependencias python y xmlArchivo de configuraciónFichero de arranque del servidorGestión de la BBDD

Instalación del cliente de openERPLaunchpad

BazaarInstalar entorno de desarrollo Eclipse+Pydev

Para MACInstalar la base de datos de openERP

Instalar la localización españolaEjercicio de instalación de la localización en una base de datos nuevaInstalación del cliente Koo para KDE

Instalación del servidor webWorkflows desde el interfaz web

ArquitecturaDesarrollo en openERP

Introducción¿Qué contiene un módulo de openerp?

PythonArchivos de un módulo de openERPModificar un módulo de openerp con eclipseInstalar acceso a código con conexiones remotas

Realizar nuestro primer módulo en openERPCreación de un módulo para la gestión de instalaciones de openERP

Crear la vistaMétodos

self.search y self.browse

Page 2: apuntes_curso_openERP.pdf

Campos de las tablas de la bbddwrite(..) = update en la bbddcreate(..)copy(..)

Herencia en Python-openERPImplementar seguridad a los módulos

Lógica de los workflowsWizardsCopias de seguridadReportes, Informes

Módulo base_report_designerAhora veremos el módulo de pxgo_openoffice_reports para informesOtra forma de hacer informes - KasparsMódulo base_reports_creatoriReport for JasperReport

Web services - XML-RPCImportación / Exportación de datosCopias de seguridad

Referencias

Page 3: apuntes_curso_openERP.pdf

Fecha: 2010-7-19

Introducción

- Modular- Nacio en el año 2002- Versión actual: 5.0.12 (¿octubre 2010, v6.0?), el cliente web de la 6.0 está muy mejorado con respecto a la v.5. Al migrar de la 5.0 a la 6.0 habrá que tocar algo del código, o bien algún script de migración que prepare la comunidad. Los módulos que adaptan la fiscalidad a un páis concreto = módulos de localización, en la versión 6.0 quieren certificar (incluirlos en el core) los que ya hay españoles (para la 5.0.12 hay una rama aparte en openObject), la única pega es que luego openERP tiene que aprobar cualquier sugerencia y tardará más la rama en actualizarla y pierdes un poco la independencia.

Iniciación al entorno OpenERP - OpenObjet- OpenObjet = Framework (RAD) para hacer cualquier aplicación. Orientado a objetos, Python, postgresSQL. Lo bueno de este framework es que se puede aplicar a cualquier cosa que hagamos.- Una de las aplicaciones de openObjet es openERP- La propiedad de herencia que tiene al ser orientado a objetos te permite añadir módulos nuevos o modificarlos muy facilmente.- BI (Bussines inteligence), todavía no está maduro, no está operativo- El framework fué consecuencia del proyecto. El desarrollo se hace sobre openObject (openERP es una aplicación de openObject)

Bazaarhttp://angelmoya.es/openerp/launchpad-y-bazaar-para-colaborar-con-openerp/114 módulos oficialesextra_addons + community unos 400

LaunchpadY esto ¿qué es?. Es un sitio Web donde los colaboradores de OpenERP de todo el mundo, comparten y publican sus proyectos. Cualquier módulo en desarrollo está en el launchpad, las traducciones, los errores, las sugerencias de mejora o de desarrollo de nuevos módulos están en el launchpad.

Instalación y mantenimiento del servidorSistema operativo recomendado: Ubuntu Server 10.4 LTS

Page 4: apuntes_curso_openERP.pdf

Tres o cuatro maneras de instalación:- desde las fuentes (donde openERP cuelgan su código)- desde los paquetes compilados, repositorios de Ubuntu. Pueden estar desactualizados, ya que puede que Ubuntu cuando lo compiló fuera una versión anterior.- Scripts automatizados (Iñaki Fernandez). www.openerpappliance.com. All-in-one para Ubuntu. Te baja la rama- Appliance. www.openerpappliance.com. Tiene ya todo instalado Ubuntu+openERP. Versiones 5.0, 5.0 spanish (tiene la localización española). Sólo terminal (no desktop). También la versión 6.0 (con y sin desktop) y la 5.0 desktop.

Para actualizar entre versiones (secundarias) 5.x, ningún problema, con el atributo --updateall, pero recomendable probar antes en entornos no p

Entramos en aulaerp.com --> Instalación sobre Linux UbuntuLa versión Ubuntu 10.04 LTS tiene la versión 6.0 de python

Para temas de instalarlo sobre servidores virtualizados:- Proxmox- ESXi de VWare (es un linux mínimo gratuito para instalarlo bajo windows)- Mokafive

Módulo de migración de datos:http://kndati.lv tiene un script para migrar de la 4.2 a la 5.0openERP madre sacará un script oficial

Instalación sobre Ubuntu 10.04 Server LTS$ sudo apt-get update$ sudo apt-get upgrade

Instalación de PostgresInstalar postgreSQL servidor, cliente y la interfaz web de control phppgadmin$ sudo apt-get install postgresql postgresql-client phppgadminSe ha instalado la versión de postgresql 8.4.4

Creación de un usuario “openerp” para la bbdd postgres para acceder sólo a la BBDD de openERP, para ello entramos con el usuario postgres que es administrador total en la BBDD y lo creamos$ sudo su postgres$ createuser --pwprompt --createdb --no-createrole --encrypted --no-superuser openerp$ exitQue pueda crear bbdds en postgres, no puede crear roles y no es superusuario, la contraseña se guarda encriptada

Instalación de dependencias python y xml

Page 5: apuntes_curso_openERP.pdf

$ sudo apt-get install python python-libxml2 python-libxslt1 python-lxmlpara que pueda hacer peticiones de python a postgres$ sudo apt-get install python-psycopg2 python-imaging python-reportlab$ sudo apt-get install python-pyparsing python-pydot graphviz python-matplotlib python-numpy python-tz gs-gpl python-pychart python-egenix-mxdatetime python-vobject

Opcional: Para permitir conexiones desde otro equipo que no sea localhost, modificar el fichero (ver manual carlos-debian)$ sudo gedit /etc/postgresql/8.3/main/pg_hba.conf

Opcional: Si debe soportarse el envío de emails mediante SSL deberíamos instalar este otro paquete:$ sudo apt-get install python-openssl

Para el módulo PowerMail instalaremos Python Mako (Sharoon Thomas, creador del módulo powemail)$ sudo apt-get install python-mako

Descargar el servidor de openerp en /usr/src luego al hacer la instalación, ya colocará los archivos en la ruta correcta$ cd /usr/src$ sudo wget <copiar y pegar el enlace de openerp.com/download aqui>$ sudo tar -zxvf <fichero.tar.gz> Nos metemos en la carpeta que acabamos de descomprimir, y ejecutamos el servidor para probarlo, sin instalarlo, pero tenemos que levantarlo con el usuario de postgres “postgres” que es admin de todas las bbdds de postgres. Se arranca openerp y se queda esperando conexiones.$ sudo su postgres$ /usr/src/bin/openerp-server.py

en la carpeta /bin/addons --> addons oficiales/bin/extra-addons --> no oficiales/bin/commynity --> los de la comunidad

Ejecutar el servidor sin cambiar a usuario postgres y ejecutarlo con el usuario que hemos creado antes:$ ./openerp-server.py -r openerp -w <pass de openerp>Si le ponemos al final un “-s” en la ruta raiz que está ejecutando el servidor (csanchez) nos genera una plantilla del fichero de config del servidor .openerp_serverrc, si vuelvo a ejecutarlo con -s nos machacará el anterior que tenemosSi luego lanzo el servidor $./openerp-server.py (sin más parámetros) cogerá el archivo de configuración que si es que está en /home/<usuario>/.openerp_serverrc

Archivo de configuraciónArrancamos el servidor con el usuario de postgres “openerp” y su password:$./openerp-server.py -r openerp -w <passopenerp> -sctrl+z para detenerlo

Page 6: apuntes_curso_openERP.pdf

NOTA: lo ideal es hacer todo esto con un usuario del sistema que sea “openerp”, no con el “csanchez” que estamos haciendo todo esto. El fichero de configuración lo copiaremos más adelante a /etc

Parámetros importantes de fichero de configuración:dp_port = False --> con esto veré todas las bbdds que tengo de openerp disponiblesroot_path --> dónde están los ficheros .py de openerpdb_password --> password del usuario “openerp” que hemos creado antes para la bbdd de openerpdb_user --> usuario creado antes con el usuario postgres para acceso a la bbdd openerp “openerp” (el que ponemos después de -r en el comando anterior)- admin_password --> cambiar la contraseña “admin” que tiene por defecto a la hora de crear la bbdd desde el cliente openERP la primera vez

Cliente KDE de openerp, koo --> pyro : para modificar datos de más de un registro a la vez, sin tener que cambiar uno a uno (como cuando actualizamos la información de más de una canción en Itunes).

Poner el fichero de configuración con los permisos 600 (solo lectura y escritura para el usuario)$ chmod 600 /home/<user>/.openerp_serverrc

Ahora vamos a instalar openerp (para que lo copie en su sitio correcto, con los permisos correctos. El script de inicio que veremos ahora tirará de estos ficheros)$ cd /usr/src/openerp-server-5.0.12/$sudo python setup.py installTe lo instala todo el código de openERP en la ruta de python: /usr/local/python2.6/dist-packages/openerp-serverluego puedes borrar lo que tienes descomprimido en /usr/srcDesde esa ruta se puede lanzar el servidor a mano con (pero lo arrancaremo en el init.d, en el proceso de arranque del OS):openerp-server --config=<ruta del fichero que lo dejaremos en /etc/>

Fichero de arranque del servidorCrear el usuario de sistema que va a arrancar con en el init.d$sudo useradd openerpel script de arranque lo bajamos (de aula openerp anexo 4, script alternativo openerp-start.sh, sacado del script del appliance de Iñaki)------------#!/bin/sh

### BEGIN INIT INFO # Provides: openerp-server # Required-Start: $syslog # Required-Stop: $syslog # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6

Page 7: apuntes_curso_openERP.pdf

# Short-Description: Enterprise Resource Management software # Description: OpenERP is a complete ERP and CRM software. ### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin #Al hacer el setup.py install copia en este directorio este ejecutableDAEMON=/usr/local/bin/openerp-server #Nombre del script que está en /etc/init.dNAME=openerp-server DESC=openerp-server #Usuario con el que ejecutará el servidorUSER=openerp#Ruta del fichero de configuración (Default: /etc/openerp-server.cfg). CONFIGFILE="/etc/openerp-server.cfg"

test -x ${DAEMON} || exit 0

set -e

case "${1}" in start) echo -n "Starting ${DESC}: "

start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \--chuid ${USER} --background --make-pidfile \--exec ${DAEMON} -- --config=$CONFIGFILE

echo "${NAME}." ;;

stop) echo -n "Stopping ${DESC}: "

start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \--oknodo echo "${NAME}." ;;

restart|force-reload) echo -n "Restarting ${DESC}: "

start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \--oknodo

sleep 1

Page 8: apuntes_curso_openERP.pdf

start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \--chuid ${USER} --background --make-pidfile \--exec ${DAEMON} -- --config=/etc/openerp-server.conf

echo "${NAME}." ;;

*) N=/etc/init.d/${NAME} echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2 exit 1 ;; esac

exit 0

------------lo cambiamos de nombre a openerp-server.shlo copiamos en /etc/init.d/le damos permisos de ejecución para todos los usuarios$sudo chmod +x /etc/init.d/openerp-server.shy ahora para que se arranque con el OS$sudo update-rc.d openerp-server defaults

Copiar la plantilla del fichero de configuración anterior que está en /home/<usuario>/.open-serverrc a /etc/openerp-server.confCrear una VARIABLE en el script que sea DIRCONFIG que apunte a /etc/openerp-server.conf

Cuidado que el usuario “openerp” del sistema tenga permisos de ejecución de /usr/bin/openerp y lectura de /etc/openerp-server.conf

Retocar el fichero de /etc/openerp-server.conf:addons_path = /usr/local/lib/ppython2.6/dist-packages/openerp-server/addonsroot_path = /usr/local/lib/python2.6/dist-packages/openerp-server

NOTA: mirar las diapositivas de TING! para los permisos del script de arranquePrimero ejecutat el servidor con 98 y luego arrancar el servidor web con 99update-rc.d openerp-server defaults 98update-rc.d openerp-web defautls 99

Recomendaciones:No instalar y desinstalar módulos con ligereza, ya que puede dar un casqueTener un servidor de preproducción para ir probando las cosas que hacemos. Tener un directorio a pelo (otra instalación) para tema de pruebas que se ejecute a mano y no tenerlo en /etc/init.d

Page 9: apuntes_curso_openERP.pdf

No tocar nada en las tablas directamente, o borrar unos registro de la BBDD

Gestión de la BBDD$sudo apt-get install phppgadmin

Instalación del cliente de openERPDescargarnos el cliente de la página de openerp.com/download con wget

LaunchpadTodo el repositorio de openERP está en www.launchpad.net/openobjectOverview: resumen del proyectotodo el código está en: CODE --> proyectos independientes que está en el proyecto openobjectHay ramas: oficiales, no oficiales

Quality: 25 miembros de OPENERP S.A., controla los addons 113 módulos de la oficialCommiters: controlan los extra-addons (80 miembros de empresas que son partner y otras que no lo son). Subes unos cuantos módulos y puedes solicitar que te cambien de estado.Community/beginners: cualquier persona que desarrolle un módulo en su casa y lo suba. Aquí sólo hay una rama.

Versiones: 5.0 y la trunk (la que viene a futuro, en este caso la 6.0)commiters_trunk = módulos extra y que son para la versión 6.0

BazaarCommit = una actualizaciónSi nos bajasmos Idoia y yo una versión, la modifica Idoia y la sube, luego la modifico yo y la subo, machacaría lo de Idoia. Eso se controla con launchpad (plataforma repositorio) y se utiliza Bazaar(un DVCS) para controlar todas estas modificaciones sean correctas y no se machaque el código.

Si detectamos un BUG hay que reportarlo, subir un BUG y un patch. Funciona muy bien, si es un bug muy importante te lo pueden solucionar hasta en 2 horas.

Para instalar bazaar:$mkdir launchpad/openerp$sudo apt-get install bzr $bzr branch lp:openobject-client-kde (puedes bajar lo que quieras, pero si quieres subir no te va a dejar, hasta que no te registres)$nano bzr_set.py (modificar la variable VERSION para decidir qué es lo que me quiero bajar) --> luego ejecutamos ese script y nos bajará todas las ramas que seleccionemos en la variableTener un bzr_set.py de cada versión con la que quiero probar y un directorio p.e uno para la trunk y otra para la 5.0

Page 10: apuntes_curso_openERP.pdf

Lo ideal es a la hora de interactuar con Launchpad- crearnos un usuario- para bajar código bzr branch lp:...rama (mirarlo en la web el nombre)- bzr pull

Desarrollar una serie de módulos y luego pedir al Commiter que te los suba de community y pasar a ser Commiter.

Instalar entorno de desarrollo Eclipse+Pydev

Para MAC1.- Descargar Eclipse Clasic de http://www.eclipse.org/downloads/2.- Instalar Eclipse3.- Configurar Eclipse para desarrollar en python:

PydevStart Eclipse and go to Help -> Install New Software. Add http://pydev.org/updates, and install the latest version (1.5.1 as of writing).Then setup your python interpreter, Auto Config should go right and choose 2.6.Now disable code analysis: Open Eclipse Preferences -> Pydev -> Editor -> Code Analysis and uncheck Do code analysis?

You will be asked to specify the where Python interpreter is located:

Please configure a Python or Jython interpreter in Window -> Preferences -> PyDevbefore creating a new Pydev project

Press Apple key and , (Preferences) and browse to the Python Interpreters submenuChoose New in the upper right and browse to /usr/bin/pythonEclipse will then take care of the rest for you – ie. updating the $PYTHONPATHNOTE: I use Eclipse 3.3.2 on Mac OS 10.5.2.

4.- Referenciashttp://www.thecredence.com/lang/es/configure-eclipse-for-python/http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=eclipseHelioshttp://www.leccionespracticas.com/informatica-utilidades-internet/utilizando-eclipse-para-programar-python-en-entorno-git/

Instalar la base de datos de openERPTenemos que abrir por primera vez el cliente openERP y desde él crearemos la base de datos:

Page 11: apuntes_curso_openERP.pdf

- archvio - bases de datos - nueva base de datos --> passwd= admin por defecto (está en el fichero /etc/openerp-server.cfg)- quitar que carge los datos de demo, cuando lo hagamos en producción- el otro usuario es el administrador de la aplicación openerp que puede hacer todo en openerp app

Perfiles = una aglutinación de un montón de módulos, para una instalación en producción tenemos que poner un perfíl MINIMO (luego ya iremos añadiendo). El más completo es Manufacturing

Poner los datos de la empresa y los informes del cliente (pié de página y cabecera)

Interfaz simplificada: seleccionar extendida ya que vemos una nueva pestaña llamada “extra-info”Usuarios: nada, saltar paso

A partir de aquí hay que instalar la LOCALIZACIÓN española y luego los módulos que quiere el cliente, para ello:- administración - módulos - pero aquí no veo los módulos para españa- si quisiera instalar otro módulo - seleccionarlo - aceptar actualizaciones recomendadas y si necesita más módulos/dependencias las instalaría. Si detecta que hay un módulo que no lo encuentra o dependencia, habría que bajarlo de launchpad

Server = 114 módulos, extraaddons = unos 400 módulos (si los meto en la carpeta addons, ya estarán instalados, pero hay que decirle luego desde openerp cliente -> actualizar lista de módulos, lo que hace es verificar si en la carpeta addons hay nuevos módulos). Luego ir a módulos - base (dependen todos de este módulo) --> actualizar, entonces te carga todas las actualizaciones que hay de los módulos. No hace falta compilar (en como php). Si toca la estructura de la base de datos --> update_all

Si hay que cambiar algo --> hacer un parche, subirlo a launchpad, etc..., NO TOCAR EL CÓDIGO FUENTE DIRECTAMENTE ya que estaríamos haciendo un fork y luego al actualizar algún módulo de los que hemos cambiado, nos machacaría los nuestros. Habría que hacer una EXTENSIÓN de lo que viene de OpenERP.

Fecha: 2010-7-20

Instalar la localización españolaDescargar de https://launchpad.net/openobject --> code --> la rama de openerp-spain -->

https://code.launchpad.net/~openerp-spain-team/openerp-spain/5.0 --> View the branch content --> a un directorio, 3 carpetas , extraddons --> lo que hay dentro copiarlo en /server/bin/addons, no copiar la carpeta si no sus módulos.Ir al cliente de openERP y actualizar la lista de módulos.l10n_ : los módulos de localización española comienzan así

mkdir /usr/src/launchpad/openerp-spain/descargar aquí bajándolo con el comando de bazzar (estará en la web el lp:XXXXX): $ bzr branch lp:openerp-spainnos metemos en extra_addons/ de lo que nos hemos descargado y

Page 12: apuntes_curso_openERP.pdf

copiar en ..../dist-pakages/apenerp-server/addons (o el directorio dónde lo tenemos instalado, ver el fichero de conf y el fichero de arranque para ver dónde lo tenemos instalado) lo que hay dentro de extra_addons (se puede hacer enlaces simbólicos en vez de copiar también) y dentro de l10n_es y l10n_es_extras tambiénAhora entramos en el cliente de openERP y le damos a --> actualizar lista de módulos (nos encontrará 4 nuevos)

-------------------- notas web ----------------------------------------Cómo instalar OpenERP Server y OpenERP Client en Debian con localización española (en la misma máquina)Artilanes - Posted on 30 Marzo 2010Versiones:Debian SqueezePostgreSQL 8.4.2-2+b1OpenERP Server 5.0.7-1OpenERP Client 5.0.7-1Bazaar 2.1.0-11. Instalamos los paquetes openerp-server y openerp-client y todas sus dependencias.2. Nos aseguramos que el servidor PostgreSQL está corriendo:# /etc/init.d/postgresql-X.X restartDonde X.X es el número de versión de nuestro PostgreSQL3. Creamos el usuario de la base de datos:# su - postgres -c "createuser --createdb --no-createrole --pwprompt openerp"Dejando la contraseña en blanco (ambas veces) y respondiendo afirmativamente a "¿Será el nuevo rol un superusuario?"4. Reiniciamos openerp-server# /etc/init.d/openerp-server restartEl siguiente paso es generar el Plan General de Contabilidad de 2008 y de impuestos desde la plantilla correspondiente a España. En el momento de redactar este artículo no figuraban como oficiales los módulos OpenERP para España, así que será necesario descargarlos desde launchpad.net (https://launchpad.net/openerp-spain) con la aplicación Bazaar.5. Si no tenemos Bazaar, debemos instalar el paquete bzr.6. Entramos en el directorio /etc/opt para no andar dejando archivos desperdigados# cd /etc/opt/6. Descargamos las versiones más recientes de los módulos openerp-spain# bzr branch lp:openerp-spain7. Cambiamos el propietario de los archivos# chown -R openerp.root openerp-spain8. Y copiamos todo al directorio addons de openerp-server# cp -r openerp-spain/l10n_es/* /usr/lib/openerp-server/addons# cp -r openerp-spain/l10n_es_extras/* /usr/lib/openerp-server/addons# cp -r openerp-spain/extra_addons/* /usr/lib/openerp-server/addons9. (Opcional) Copiamos los archivos de localización para Catalunya en el directorio addons de openerp-server# cp -r openerp-spain/l10n_ca_ES/* /usr/lib/openerp-server/addons10. Descargamos las versiones más recientes de los módulos trunk-extra-addons# bzr branch lp:~openerp-commiter/openobject-addons/trunk-extra-addons11. Cambiamos el propietario de los archivos# chown -R openerp.root trunk-extra-addons

Page 13: apuntes_curso_openERP.pdf

12. Y copiamos los siguientes módulos al directorio addons de openerp-server# cp -r trunk-extra-addons/account_payment_extension /usr/lib/openerp-server/addons# cp -r trunk-extra-addons/sale_payment /usr/lib/openerp-server/addons# cp -r trunk-extra-addons/label /usr/lib/openerp-server/addons# cp -r trunk-extra-addons/partner_spam /usr/lib/openerp-server/addons# cp -r trunk-extra-addons/smtpclient /usr/lib/openerp-server/addons13. Por último descargamos las versiones más recientes de los módulos extra-5.0# bzr branch lp:openobject-addons/extra-5.014. Cambiamos el propietario de los archivos# chown -R openerp.root extra-5.015. Y copiamos el siguiente módulo al directorio addons de openerp-server# cp -r extra-5.0/account_financial_report /usr/lib/openerp-server/addonsAhora debemos iniciar openerp-client y en el menú "Archivo" > "Bases de datos" > "Nueva base de datos" para crear una nueva base de datos y desactivamos la opción "Cargar datos de demostración" (de otro modo se generaría un error durante el proceso de instalación de los módulos).Una vez creada la base de datos, continuar con el asistente de configuración hasta definir los usuarios del sistema. Al llegar al punto "Definir ejercicios fiscales y seleccionar plan contable" hacer click en "Saltar paso" para cancelar el asistente. De esta manera evitamos los errores que surgirían al instalar la plantilla contable y los ejercicios.Desde el cliente OpenERP: Administración > Administración de módulos > Actualizar lista de módulos. Esta opción actualiza la lista de módulos y añade los nuevos en la lista de los "no instalados".Desde el cliente OpenERP: Administración > Administración de módulos > Módulos > Módulos no instalados. Instalar el nuevo módulo "l0n_ES_pyme_install" y todas sus dependencias.Crear los topónimos del Estado español (crear las provincias mediante el asistente que se ejecuta automáticamente al instalar el anterior módulo).Crear la cuentas del Plan General de Contabilidad a partir de la plantilla (mediante el menú Contabilidad y finanzas > Configuración > Contabilidad financiera > Plantillas > Generar plan contable a partir de una plantilla de plan contable).Instalar el módulo l10n_ES_pyme_custom y todas sus dependencias (este módulo crea ejercicios para 2009 y 2010).---------------------------------------------------------------------------

Copiar también extra_addons y community_addons en .../bin/addons del servidor, así tendremos más de 500 módulos para probar. (ver más abajo cómo descargar estos módulos)Recomendación: no instalarlo en producción para un cliente

----------------- web de Ana Juaristi, openerpsite.com para bajar todos los módulos en vez de bajar uno a uno, hay un programa .py que nos descarga toda la rama ------------------Os descargais la rama como está descrito en un montón de sitios. Vereis que baja un script python muy sencillobzr_set.py que lo que hace es descargar todas las ramas de la distribución que se quiera (4.2, 5.0, trunk…). Para seleccionar la distribución, es necesario editarlo y poner DEFAULT= “versión que se quiera descargar”Pasos para descargar las ramas de una distribución “de tirón”. En el ejemplo voy a utilizar 5.0, pero sería exactamente igual con trunk o 4.2 :

● Abrir el script bzr_set.py, asignar DEFAULT=’5.0′

Page 14: apuntes_curso_openERP.pdf

● Crear un directorio cualquiera, por ejemplo, openerp5.0● cd openerp5.0● copiar el script bzr_set.py en ese directorio● ejecutarlo de la siguiente forma pyhton2.5 bzr-set.py● Vereis que dentro de openerp5.0 os crea la siguiente estructura

○ web –> ficheros servidor web para acceso con el explorador○ server –> servidor openerp○ client –> cliente openerp○ addons –> Modulos “oficiales” versión 5.0○ addons-extra –> Módulos extra de commiters○ addons-community –> Módulos extra de community

● Con esto, ya teneis los fuentes de la 5.0 descargados en vuestro ordenador. Para actualizarlos basta con ejecutar $pyhton bzr-set.py tal y como habeis hecho antes.

cuando haces un $python bzr-set.py se actualiza todo lo que tenemos bajadosnota: se puede actualizar el bzr-set.py y añadir que nos baje openerp-spain, powermail, etc... lo que queramos tener-------------------------------------------------------------------------------------

Al hacer $bzr branch lp:openerpsi nos da un error en debian de la versión de bazaar añadir en los repositoriosdeb http://ppa.launchpad.net/bzr/ubuntu intrepid mainluego modificar el script bzr-set.py para que nos baje la versión 5.0lanzar el .py$python bzr-set.py --> tarda un poco tener pacienciapuede que nos salga un warning, no pasa nada y esperar a que termine.Luego copiar en .../bin/addons de openerpserver (ver fichero de /etc/.conf para ver la ruta donde está openerp-server) los extra-addons, comunity, etc...Desde el cliente --> actualizar lista de módulos

Para seguir con la instalación de la localización española, después de añadir los módulos de localizaciónNos vamos a los módulos sin instalar: l10n_es_pyme_install y hacemos doble click (desde el cliente openERP) - programar para instalación - aplicar programacionesHay que tener los extra-addons instalados para que no nos de errornota: CUIDADO HAY QUE TENER LA INSTALACIÓN MÍNIMA (ver los pasos anteriores para la instalación de la base de datos)Si da time-out cuando le demos a instalar el módulo --> volver a darle a “aplicar actualizaciones programadas”

Asistente:- saltar el plan contable (crear cuentas y demás), siguiente- especificar mensaje --> siguiente

Page 15: apuntes_curso_openERP.pdf

- crear- configurar la logística de los pedidos de ventasi el envío es directo: todo disponible, entonces lo envíafacturar desde: las de servicio desde pedido de venta (pues no hay albaranes)solo de entrega- seleccionar versión de los .. provinciasoficial de cada comunidad, castellano: si van a venir datos de cargas de otros sitios --> seleccionar castellano, y luego poner gipuzkoa-gipuzkoasi, si : para que te recupere el código de la provinciacrear, siguienteahora en install: aparecerá instalado

- Nos vamos al menú, refrescar y veremos nuevos móduloscontabilidad - configuración - config. financiera - plantillas - generar plan contable a partir de una plantilla - doble clicknúmero de dígitos --> preguntar al contableel plan general es ¿contable o pymes? dependiendo de lo que se facture al año - plantilla plan contable --> preguntar al contableNos vamos a contabilidad financiera - cuentas generales - listado de cuentas

- nos vamos a la lista de módulos y buscamos custom --> l10n_es_ pyme_customprogramar para la instalación - aplicar aplicaciones programadasNos vamos al menú y refrescarahora en contabilidad - tendremos --> informes oficiales

- instalar otro asistente que está en EMPRESAS - bancos - asistente importación de bancos - importarte añade todos los códigos de los bancos

- contabilidad - configuración - extractos bancarios C43 - asistente de importación (bajar de la web del banco)carga el maestro de códigos bancarios C43 para que al importar los extractos de los bancos no nos de error

Ejercicio de instalación de la localización en una base de datos nuevaSeguir los pasos anteriores

Instalación del cliente Koo para KDEhttp://www.nan-tic.com/http://albert-nan.blogspot.com/http://www.nan-tic.com/koo-platform_esLibrerías a instalar: python-qt4, python-qt4-dev

Instalación del servidor web

Page 16: apuntes_curso_openERP.pdf

Descargar el cliente web desde openerp.com/downloadSi ejecuto el cliente con el comando ./openerp-web.py y me da un error instalar las dependencias: apt-get install python-setuptools python-dev...(ver en aula erp)ejecutar $sudo openerp-web-5.0.12/lib/populate.sh

Arquitectura:BBDD - servidor openERP - servidorWEB (no hace falta apache, pero si estás en internet es recomendable instalar Apache) - Navegador (cliente web)

Para ejecutar el cliente Linux GTK de openerp en MAC nos podemos conectar con ssh -X root-ipserver y luego ejecutar el cliente web con $sudo openerp-client

Desde el cliente web, tenemos una opción de personalizar (abajo a la izquierda) en el que podemos cambiar el formulario web y nos cambia lo necesario en la BBDD (p.e. crear un neuvo campo,e tc...). PERO CUIDADO YA QUE SE CREA SOBRE LA VERSIÓN CORE DE OPENERP Y SI ACTUALIZO ME CARGO TODO LO REALIZADO.

Es mejor utilizar el cliente GTK (escritorio) que el web. Si lo queremos utilizar desde casa utilizar VPNs.

Workflows desde el interfaz webWorkfow dentro del propio objetoPero cuidado al modificar esto. Normalmente no haría falta tocarlo

Se pueden crear con DIA diagramas UML y luego hay un proyecto que te pasa esto a código Python

Los procesos para validar para pasar de un estado a otro, se pueden modificar también desde el cliente web

Cliente web de la 6.0: http://87.106.151.184:8081 --> bbdd:cursos admin/admin

ArquitecturaCon la conexión XML-RPC desde php se podría hacer.El cliente no tiene nada.Modelo vista controlador: separa los datos-modelo (tablas postgres) del controlador-lógica de negocio (ficheros de python) de la interfaz-vista (xml)

Desarrollo en openERP

Introducción

Page 17: apuntes_curso_openERP.pdf

Python: Lenguaje interpretado y Orientados a objetosOpenObject: Framework orientado a objetos, creado en python y con bbdd postgres

¿Qué contiene un módulo de openerp?Para que openERP interprete un módulo tiene que cumplir (diapo-5) unas estructuras de carpetas y ficheros.carpetas: i18n - todos los ficheros de idiomasprocess - diagrama de flujo que tiene definido el módulo en concreto. Cuándo y como cambia de estado el objeto/móduloreport - los informes que tiene el móduloarchivos xml: indicarle que tiene un botón y cuando pulsa decirle qué va hacersecurity: todos los permisos de acceso a ese módulotest/demo: datos de prueba del módulo (cuando cargamos datos de prueba, no están en la bbdd, si no en estos archivos)wizard: asistentes de openerp (Informes, wizards, accesos directos están en la parte derecha del cliente openerp)

Ficheros:Siempre hay un objeto .py (con el nombre del módulo) y otros .py con los objetos con los que está relacionado este módulo (partnerts y stock)objeto_data-xml --> la vista del objeto

cuando arranca el servidor hace la compilación del código y convierte un archivo .py en .pyz que es el que se ejecuta en openerp

Antes de ponerte a programar, hay un módulo que me permite validar casos de uso que yo creo a la hora de crear un módulo ORPEscenari (tienes que saber programar en Ruby). La versión 6 tiene este módulo yamOML

En todas las pantallas se pueden importar y exportar datos. P.e exportas los partnerts a un csv lo retocas y luego lo importas. Marcar import compatible para que luego te añada las FKs pero no puedes sacar datos de tablas relacionadas.

PythonPara ejecutar el interprete de pythonpob-ap-mbp-01:~ csanchez$ pythonPython 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) [GCC 4.2.1 (Apple Inc. build 5646)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> print "hola mundo"hola mundo

Page 18: apuntes_curso_openERP.pdf

Si nos da un error ascii, es pq hay que definir la codificación del fichero en python

Cada sentencia en una líneaCrear un nuevo proyecto con eclipse:file - new pydev projecten preferencias de python ver dónde está el ejecutablepara crear un nuevo fichero: botón derecho carpeta del proyecto - new fileen src - new pydev module

Tipos básicosNúmeros, cadenas de caractéres, booleanostexto: entre comillas dobles y simples

Para operaciones complejas aritméticas: tener el módulo math

Listas = arrayspueden contener cualquier tipo de dato (objetos, enteros, etc....)las variables se pueden crear en cualquier línea y no hay que decir de que tipo es

Tuplasson listas inmutables

DiccionariosUna colección de elementos. i Todos los datos inmutables

No hay que poner begin, end, ni llaves, simplemente espacios en blanco

Condiciones, buclesif, while, for in, para salir de los bucles: breakpara continuar en lo bucles: continue

Declarado de funcionesClases

Archivo __init__.py, tiene una serie de imports que tiene que importar

Comentarios: PEP index mirar en la web de python.orghttp://www.python.org/dev/peps/Guía de estilo de código python: http://www.python.org/dev/peps/pep-0008/

* Una tabla en postgres = una clase en openerp / python

Referencias Python

Page 19: apuntes_curso_openERP.pdf

en la página de python - library referencehttp://www.python.org/doc/ -> library referenceLibro: python para todosPython: http://mundogeek.net/etiqueta/python

one2many - es un wigchet p.e para líneas de un pedidomany2one - son los campos que sale la carpeta + lupamany2many - campos que tiene añadir y quitar (un producto tiene más de un impuesto)

preparar para instalación - actualizar - lee una clase nueva -- entonces en la bbdd crea una tabla nueva (el mapeador de objetos, el API es osv que es del que heredan todos los objetos creados en los módulos de pyhton)Los atributos que defines en el objeto --> se generarán como campos/etributos en una nueva tabla en postgres con el nombre de la clase del objetoSi borro un módulo, los campos/tablas me quedarán en postgres

Archivos de un módulo de openERPTodos los .pyc se recompilan al arrancar el servidor/módulo desde los .pymódulo account:- account.py : todas la clases, la propia account/objeto, todas las funciones de la clase account, siempre está nombremódulo.py- __init.py__ :carpetas: report y wizards es lo que veo en la parte de la derecha

los import - primero busca el nombre.py del import, si no lo encuentra buscará una carpeta con el noombre del import y dentro el __init__.py --> y en el init le digo cual es el .py que tiene que cargar- todas tienen que tener: traducciones, la carpeta i18n

Modificar un módulo de openerp con eclipsereferenciashttp://angelmoya.es/openerp/instalar-y-configurar-eclipse-para-trabajar-con-openerp/http://www.aulaerp.com/aula/mod/resource/view.php?id=154

new - projecto pydev - openerp - en location seleccionar la carpeta de .../openerp-server/addons (antes la tenemos que tener mapeada con smb://)desmarcar: crear SRC

run - create manage and run configuratións - python run - new :Crear una nueva configuración en el apartado “Python Run”, eligiendo como “Project” el nuestro y como “Main module” openerp-server.py, le damos a “Apply” y luego a “Run” y debería funcionar.- browser project: seleccionar openerp (hemos creado en el punto anteior) - main module: seleccionar ${workspace_loc:openERP1/bin/openerp-server.py}

Page 20: apuntes_curso_openERP.pdf

- en argumentos - poner el usuario de acceso a la base de datos (mirar el fichero de configuración dbuser y dbpassword, no hace falta ponerlo!!)

Si nos da un error con la librería lxml, es pq en la máquina dónde está eclipse hay que instalar las librerías lxmlhttp://lsimons.wordpress.com/2008/08/31/how-to-install-lxml-python-module-on-mac-os-105-leopard/

Para controlar un módulo creado:Luego en eclipse, puedo seleccionar hacer un dedug (poniendo un breakpoint en el código, haciendo click a la izquierda, el servidor se para y pasa todo el dedug a eclipse para ver las variables etc...,), para ejecutar en modo degun hacer click en el bichito

Ahora tenemos que tenemos eclipse con soporte para python y xml, vamos a instalar las plantillas para completar código que tenemos en esta webhttp://code.google.com/p/openerp-eclipse-template/. Tenemos dos plantillas una para completar código de python y otra para completar xml. Descargate las plantillas como pone en la web por svn, directamente desde aquí:

● template python● template xml

Instalar la plantilla de pythonwindows/eclipse - preferencias - pydev - code completion - templates (editor/templates en eclipse para mac) - import - y seleccionar el archivo descargado - okluego al escribir un archivo .py nuevo si escribimos al inicio __terp__ (enter)

Instalar la plantilla de xmleclipse - preferencias - web y xml - templates

Instalar acceso a código con conexiones remotasReferenciashttp://jpablobr.com/past/install-eclipse-rse-target-management-project-plug-inhttp://www.userlinux.net/1294_eclipse_rse_plugin.html

Probando Eclipse he notado que hay varias funciones esenciales -al menos para mi- que necesitan ser activadas mediante la instalación de un plugin. Una de estas características básicas es la edición remota. Con el plugin RSE es muy sencillo.

Para instalarlo simplemente vamos a Help » Software Updates » Find and Install » Search for new features to install y en la ventana de diálogo que aparece seleccionamos New Remote Site. Le llamamos RSE y en url rellenamos lo siguiente: http://download.eclipse.org/dsdp/tm/updates/2.0

Luego en windows - open perpestive - other - seleccionar RSE

Page 21: apuntes_curso_openERP.pdf

arriba local - boton derecho - new conexion - ssh - rellenar datos - seleccionar sftp

Fecha: 21-7-2010

Realizar nuestro primer módulo en openERP---- de la web de Angel Moya, introducción ----La arquitectura MVC (Modelo Vista Controlador) sirve para separar los datos, de la lógica de negocio y de la interfaz de usuario, OpenERP sigue esta arquitectura, el modelo son las tablas de postgres, la vista son los XML que definen la interfaz de usuario del módulo y el Controlador son los Objetos creados en python. En esta entrada vamos a ver la estructura de los módulos y como crear un primer módulo muy sencillo.Lo primero que necesitamos saber es donde se almacenan los módulos y la estructura que tienen. Si estas ejecutando el servidor de OpenERP como he indicado en el post anterior los módulos se almacenan en el directorio:/home/usuario/openerp/openerp-server/bin/addonsPodemos crear en este directorio la carpeta para nuestro módulo, dentro de la carpeta del modulo se guardan los ficheros del código, tanto los fuentes escritos en python, las vistas en xml, los informes… en este ejemplo vamos a empezar a hacer un módulo muy simple y luego iremos añadiendo cosas. Los archivos mínimos para este módulo de ejemplo son los siguientes:

● __init__.py

● __terp__.py

● coche.py

● coche_view.xmlComo los módulos de OpenERP son paquetes python tiene que existir el fichero __init__.py que puede definir atributos y métodos del paquete, en este caso solo contendrá los import de los ficheros y directorios que contengan código. En nuestro ejemplo es simplemente:import cocheEl fichero __terp__.py contiene la descripción del modulo:{"name" : "coche","author" : "Angel","version" : "0.1","depends" : ["base"],#esta es la lista de los módulos de los que depende"init_xml" : [],"update_xml" : ["coche_view.xml"], #aquí indicamos la vista"category" : "Enterprise Specific Modules/Coches","active": False,"installable": True}En coche.py tenemos tanto el controlador como el modelo, tenemos el controlador porque se trata de una clase python en la que definimos el comportamiento, y tenemos el módelo porque esta clase hereda de la clase osv (Object Service) que implementa una capa de ORM (Object-Relational mapping), para los que venimos de java lo que sería hibernate. Así las clases que creamos heredando de osv y siguiendo esta estructura crean las tablas en la base de datos.from osv import osv, fieldsclass coche(osv.osv):_name = 'coche'_columns = {'modelo': fields.char('Modelo', size=64),

Page 22: apuntes_curso_openERP.pdf

'matricula': fields.char('Matricula', size=64),}coche()Como vemos importamos osv para que coche herede de el, e importamos también fields para definir el tipo de las columnas, en este ejemplo solo hemos usado cadenas de caracteres, ya veremos mas tipos de columnas.El último fichero de nuestro ejemplo es coche_view.xml, en el se define la vista, en este ejemplo se ha creado la entrada para el menú y la definición de la ventana listado y formulario.<openerp><data> <record model="ir.actions.act_window" id="action_coche_form"> <field name="res_model">coche</field> <field name="domain">[]</field> </record> <menuitem name="Coches" id="menu_coche_coche_form"/> <menuitem name="Coches" id="menu_coche_form" parent="coche.menu_coche_coche_form" action="action_coche_form"/> <record model="ir.ui.view" id="view_coche_form"> <field name="name">coche</field> <field name="model">coche</field> <field name="type">form</field> <field name="priority" eval="5"/> <field name="arch" type="xml"> <form string="Coche"> <field name="modelo" select="1"/> <field name="matricula" select="1" /> </form> </field> </record> <record model="ir.ui.view" id="view_coche_tree"> <field name="name">coche</field> <field name="model">coche</field> <field name="type">tree</field> <field name="priority" eval="5"/> <field name="arch" type="xml"> <tree string="Coche"> <field name="modelo" select="1"/> <field name="matricula" select="1" /> </tree> </field> </record></data></openerp>Una vez tenemos este código en el directorio /openerp-server/bin/addons/coche podemos reiniciar openerp-server con la opción “-u coche” para recargar el módulo.Este ejemplo es un módulo muy sencillo que simplemente permite gestionar en OpenERP una lista de matriculas y modelos de coches, en siguientes post iré ampliando este módulo y mostrando otras características del desarrollo.Para profundizar mas en el desarrollo ahora que tenemos una base puedes mirar el developer book de la wiki y el memento que resume todo lo necesario para desarrollar en OpenERP.----------------------------- fin --------------------------

Page 23: apuntes_curso_openERP.pdf

Creación de un módulo para la gestión de instalaciones de openERPnueva carpeta - servidores - crear los 3 archivos __init__.py y __terp__.py

__terp__.pycopiar la estructura de cualquier __terp__.py de cualquier módulo (training) y cambiar los datos:name: el nombre de nuestro módulodepends: base (el módulo núcleo de openerp, siempre dependen de él cualquier módulo y si necesita algún otro módulo se añadiría aquí)en demo_xml (por si tienes que dejar datos de carga de prueba) y init_xml y update_xml dejarlos sin nada 'active' : False,'installable' : True, --> si se puede instalar

__init__.pyimport servidores //nombre del módulo

servidores.pycopiar la licencia de openERP y ...-------from osv import osv, fields

#declarar la clase y que herede de osvclass servidores_servidores(osv.osv): _name = 'servidores.servidores' _description = 'Mi descripción' _columns = { 'name': fields.char('Nombre', size=64), 'ip': fields.char('Ip', size=20), 'notas': fields.text('Notas'), 'fecha_alta': fields.date('Fecha alta'), #para relacionarlo con una empresa que ya está en la bbdd, mirar en modulos personalizacion - estructura de la base de datos - campos - objeto 'cliente': fields.many2one('res.partner', 'Cliente'), 'nom_usuario': fields.char('Nom.Usuario', size=64), 'password': fields.char('Password', size=64), }servidores_servidores()--------Nos vamos al cliente - actualizar servidor - programar actualización - instalar, pero no veremos nada

Crear la vistaen eclipse crear un nuevo fichero servidores_view.xml para poder ver algoabrir un view de otro módulo y copiar-pegar (lo que hay después de <data><record model="ir.ui.view" id="view_support_delivery_form">aquí le damos el nombre que será servidores_vistaprincipalsi luego voy a heredar esta vista, se utilizará el id

Page 24: apuntes_curso_openERP.pdf

<field name="name">view.dummy.support.delivery.form</field>nombre que quiera darle a este objeto que se verá en openerp en la lista de objetos <field name="model">dummy.support.delivery</field>a qué modelo hace referencia (el class que hemos creado en el fichero.py el name de la clase): _name = 'servidores.servidores' <field name="type">form</field> <field name="arch" type="xml">si hay una de inherit_id quiere decir que es heredadoa partir de aquí comienza la definición de la vista (los campos)

collage expand = expandir a un ancho de 4 lo que sea (para que ocupe el espacio correcto). Esta dividido en bloques de 4 la pantallaEl standar te pone etiqueta-campo, etiqueta-campo

Si se nos olvida un campo:- cambiar la clase y añadir el campo- parar servidor/arrancar- volver a instalar el módulo

Si cambiamos un tipo de dato (integer - double):- cambiar en la base de datos

Si borramos un módulo:- se mantiene creado en la bbdd la tabla

Dentro del _terp_.pyen update_xml

‘servidores_view.xml’,

ahora sólo queda actualizar el módulo desde el cliente openERP - programar actualización (dentro del módulo) - aplicar actualizacionesSi añado al <field name="notas" colspan="4"/>un colspan me mostrará el campo ocupando toda la pantalla (las 4 columnas en lo que lo divide), luego hay que actualizar el módulo para que se cumpla.

Ver más tipos de campo, le añadiremos más tipos al objeto servidores- añadir objeto cambios, añadir las relaciones- definir en las vista en el .xml el nuevo campo cambios

Para colorear los XML:- help - instalar software - seleccionar: Helios - desplegar: web-xml - seleccionar: eclipse xml editor and tools - reiniciar eclipse

Si nos da un error el cliente al ejecutar servidores de que nos falta el campo “cambios”Si no nos crea en la bbdd la nueva tabla servidores.cambiosMatar el servidor kill -9 buscado por ps aux-grep openerpArrancar el servidor

Page 25: apuntes_curso_openERP.pdf

/usr/src/open../bin/openserver.py --update=all --config=/etc/openerp-server.cfg¿Por qué al crear el módulo servidores lo ha cogido bien, pero luego al hacer el cambio de añadir lo de servidores.cambios aunque lo actualizabamos el módulo desde el cliente, no se creaba en la bbdd la tabla servidores.cambios?

many2manycrea una tabla con 2 campos y relaciona unos con otros

Ahora crearemos una pestaña en SERVIDORESarchivo: servidores3

Fecha: 2010-7-22

Métodoshttp://doc.openerp.com/developer/2_5_Objects_Fields_Methods/methods.htmlTodos los objetos tienen de base una serie de métodos por defecto (heredados de ovn)Desde esos métodos de los objetos heredados los podemos ajustar. Primero tenemos que llamar al método de la superclase (ovn).cursor - la instancia de la bbdd que se está ejecutando en ese momentocontext - idioma del cliente, grupo al que pertenece el usuario, etc...

recuperar todos los campos de la bbdd de unos IDs que van entre el 4 y 27:for obj in self.browse(cursor de la bbdd, uid del usuario que está haciendo el browse, 4-27)

res(obj.id) = len(obj.cambios_ids) --> recuperando un valor/campo de este objetoreturn res

self = soy yo mismo, el objeto en el que estoy. Una nube en el que hay n objetos. P.e. un pull de pedidos.self.search = buscar algo dentro de mi propia clase, como si hicieramos un select a una bbdd

self.search y self.browseId_pedidos = self.search ( cursor, uid, condiciones del where select) --> un select sólo de IDs --> recupera sólo IDs (internos de la bbdd, se ven en las tablas de la bbdd, la clave primaria de la tabla)self.browse(cr, uid, Id_pedidos) --> select * where id=XXXXX --> recupera todos los campos

Campos de las tablas de la bbddID = contador interno de la tabla

Servidores.servidores

Columna Tipo de dato No Nulo Predeterminado Restricciones

id integer NOT NULL nextval('servidores_se

Page 26: apuntes_curso_openERP.pdf

rvidores_id_seq'::regclass)

create_uid integer

create_date

timestamp without time zone

write_date timestamp without time zone

write_uid integer

nom_usuario

character varying(64)

name character varying(64)

fecha_alta date

ip character varying(20)

password character varying(64)

cliente integer

notas text

Facturas_object = self.pool.get (account.invoice) --> aquí tengo todas las facturas (un pool de facturascuando hago un search --> Facturas_Ids = .. (pq recupero ids)cuando hago un browse --> Factura_IdA poder ser llamarle Invoice en vez de Factura

write(..) = update en la bbddse hace un diccionario values=(‘nombre’=valerio, ‘edad’=11, ‘otro’=res(0)), estos datos los puedo recoger de diferentes sitioscuando tengo los values se los paso al writewrite(cursor, uid,id del objeto que quiero escribir, values)

create(..)create(cursor, uid, values)

copy(..)copiar un objeto entero de uno a otro, pero nos crea otro id diferente para ese nuevo objeto

Nota: no hace falta saber python, lo importante es saber el ORM (Object-Relational mapping) y la hoja 3 de métodos que nos han dado.http://angelmoya.es/openerp/como-empezar-a-desarrollar-modulos-en-openerp-22/http://www.openobject.com/memento/http://doc.openerp.com/developer/index.html

Page 27: apuntes_curso_openERP.pdf

Herencia en Python-openERPEsto es bueno, ya que si hacemos un módulo luego podría que al actualizarse openerp y sale una versión nueva, puede que perdamos todo, pero con la herencia lo conservamos.Si tenemos que cambiar un módulo de openERP, lo que tenemos que hacer es una extensión/herencia de ese módulo y ese fork es el que tocamos. Así cuando haya una actualización no le afectará a la extensión/herencia.

0.- Nos creamos un nuevo módulo/carpeta en ../bin/addons, con la estructura de ficheros que tiene que tener __init__, etc...

1.- En __terp__ poner en depens, de dónde lo heredoVamos a realizar una extensión del módulo Servidores llamada Servidores_ExtendedCopiar el __terp__ de servidores y cambiar datos, las vistas .xml serán nuevas servidores_extended.xml y en depens añadir además de base, servidores

Nos creamos una nueva clase, aunque se llame igual (ya que si le cambiamos el nombre, nos crearía otra nueva tabla en la bbdd)

class servidores_servidores(osv.osv):_name= ‘servidores.servidores’ --> poner el mismo nombre

_inherit = ‘servidores.servidores’ --> aquí heredamos, nos saca las columnas que tiene los métodos, etc...

_columns = (# ---> aquí le añadimos los nuevos campos que queremos ponerle a este módulo

heredado# --> las columnas que hereda del padre también están aquí aunque no se ponen#lista tipo combo, una tupla de tuplas‘tipo’: fileds.selection(((‘linux’,’Linux’),(tupla2),(tupla3)), ‘Tipo’)

)_defaults = (

#como le tenemos que pasar una función se hace con lambda‘tipo’: lambda *a: ‘otro’,

)servidores_servidores()

2.- Luego creamos los formularios y vistas en XML

Implementar seguridad a los módulos

Page 28: apuntes_curso_openERP.pdf

Si lo hacemos sobre el módulo original (servidores.servidores), esto se aplicará también sobre servidores_extendedLos permisos se dejan en un .csv

3 conceptos de seguridad: grupos, roles y usuarios

- gruposno son grupos de usuarios, si no bloques de permisos que puedes asignar a los usuarios. Son item que me dan permisos a a ciertos objetos. P.e. creamos un grupo servidores = directivas de grupo (un grupo de permisos). Meto en el grupo servidores todos aquellos usuarios que quiero que tengan acceso a servidores.

En MENUS: defino los menus que verán los usuairos que están metidos en ese grupo. Si no pongo nada en los menus no restringo nada, si pongo varios menús, los usuarios que pertenezcan a ese grupo sólo verán esas vistas.

Permisos de acceso: si quiero que el grupo Human Resouces Manager tenga acceso a ciertas partes lo definiré aquí

- rolesWorkflow: un pedido va de borrador a confirmado, si alguien lo valida.Aquellos objetos que pueden tener estados (en propuesto), y que pueden ir a otros estados dependiendo de dónde se haga click (crear factura ó cancelar pedido). Si el workflow tiene un muñequito es que tiene que ser manual el cambio de estado por una persona.Los roles son aquellos permisos que se les definen a qué personas tienen derecho de p.e aprobar compra y otro rol de resolver compra (p.e).Si a un usuario le doy el rol de facturas --> podrá confirmar facturasPor pantalla sólo de puede crear un rol nuevo, pero luego para asignarlo a una persona hay que hacerlo desde el código.

- usuarios

Un truco --> módulo de grabación --> record moduleTodo lo que hemos visto, se puede hacer desde openerp (el objeto, módulo, __init__, __terp__, etc....), Todo lo que haces en una instalación de openerp de pruebas te lo va grabando y luego se puede exportar e importar en otro servidor de producción (como si fuera un módulo).

Lógica de los workflowsnanpartnerdisk - módulo que modifica el workflow Desde el cliente web se pueden ver los workflow (p.e de un pedido de ventas) - en el propio pedido - personalizarUn workflow --> puede afectar a otros workflows (subworflows)Los rectángulos son sub-worflowsLas elipses son estados

Page 29: apuntes_curso_openERP.pdf

Los círculos son funcionesPara definir los workfows en los xml --> ver página 5/7 de los doc. técnica el memento

Todo este dibujo lo vas definiendo en los XML:- caja- estados- transicionesEstas definiciones de los XML se pueden modificar desde openERP --> no recomendable modificar un flujo desde openERP (puede que se fastidie a futuro)Administración - objetos de bajo nivel -elementos del flujo - instancias - stcok picking base

Normalmente no hace falta cambiar un workflow, ya que están muy bien definidos ya.NO hay herencia en flujos, luego al acutalizar openERP habría que hacer las modificaciones de nuevo

WizardsAcciones que tú realizas sobre un determinado objeto (enviar un sms, ver la estructura de la compañía, ..), pueden ser genéricas de un objeto.Son pantallas de asistentes, contienen una sucesión de pasos.Se puede utilizar para pedir datos.

Copias de seguridadBajarnos el módulo http://www.openerp.com/download/modules/trunk/auto_backup.zipTe lo instala en administración - configuración - configura backuple dices dónde quieres que te deje la copia de seguridad de la base de datos

2010-7-23

Page 30: apuntes_curso_openERP.pdf

Reportes, InformesInstalación y configuración de Jasper reports: http://www.aulaerp.com/aula/course/view.php?id=23SI NO VAMOS A UTLIZAR LOS MODULOS QUE NO SEAN DE JASPER, NO INSTALARLOS, PUEDE QUE NOS DE ERROR AL INSTALAR JASPER

El módulo “report_designer”Arquitectura de report_designer ¿qué hace?Me crea un interfaz en openerp, exporta un .sxw a openoffice 1.0, editar el informe en openoffice (negrita, tablas, etc...) y luego subo ese .sxw modificado a openerpsxw2rmp.py: cuando yo subo el informe me hace la traducción de openoffice al lenguaje rml, si yo modificara ese rml directamente podría modificar el informe también

Nos bajamos ireport: http://sourceforge.net/projects/ireport/files/

Módulo base_report_designerInstalamos el módulo: base_report_designer (desde los módulos)Administración - personalización - diseñador de informesseleccionamos el informe - buscamos pedidoguardar como pedidooriginal.swx en el escritorio - le hago una copia y modifico esa copia (con openoffice) - luego subiré ese fichero que he modificadoestos informes están en - sales / reports / sales_---.rml y sales_...sxw (si modifico el rml se ve el cambio, si modifico el sxw no se ve el cambio, tengo que subirlo con el asistente de report_designer)administración - usuarios -arbol de la compañia - compañias (meterlo en favoritos): aquí tenemos las cabeceras, pies de página etc.. de informes, logos <!-- You Logo - Change X,Y,Width and Height --> <image x="1.3cm" y="27.6cm" height="40.0" >[[company.logo]]</image>el .sxw --> modifica la parte central

el .SXW[[repeatIn(objects,'o')]] // estas dos líneas se ponen siempre[[ setLang(o.partner_id.lang) ]]

[[ o.state=='draft' and removeParentNode('para') ]] Purchase Order Confirmation N° [[ o.name ]]Si el estado del objeto es borrador ponme presupuesto y si no es borrador pedido

Los 0. = datos del pedido[[repeatIn(o.order_line,'line')]]

Lo modificamos y luego los subimos - administrador - diseñador de informes - subir el informe modificado - selecciono de disco el que he modificado (tener la copia por si lo he hecho mal)

Administración - objetos de bajo nivel - acciones - informes xml (aquí están todos los informes del sistema definidos)Busco mi pedido de ventasveo la ruta del .rml --> el que me ejecuta cuando le doy al botón impresión

Page 31: apuntes_curso_openERP.pdf

Tipo: pdf (puedes seleccionar p.e odt, pero parece que no funciona), si queremos que cuando le de a imprimir me salga que pueda seleccionar --> tendría que hacer un wizard (para elegir los parámetros de impresión)recargar desde adjunto: te imprime desde el que ya está en la cache de antes (adjunto viejo), si le cambian el importe y saca el viejo tendremos que desmarcar esta marcaabajo en la hoja veo el id del informe(report) que luego lo utilizaré en el objeto Action - report (ver siguiente)

Action - wizard (vimos ayer) ahora vemos Action - report en administración - documentos de bajo nivel - conexiones acciones cliente (los wizard también están aquí definidos) - busco el presupuesto en tipo de acción - y aquí pondré el id del informe del punto anteriorconexiones acciones cliente = el botón que nos sale en la parte derecha y la acción será el rml que hemos definido antes

Ahora veremos el módulo de pxgo_openoffice_reports para informesEsta es otra forma de hacer informes (creo que para cambios pequeños es mucho mejor la opción anteiror)

Si nos da un error al instalar el módulo: parar el servidor, $sudo easy_install relatorio, $sudo easy_install pycha, volver a ejecutar el servidorEn administración - personalización - openoffice.reportsbuscar el nombre del objeto: servidoresabrir openoffice - crear una tabla (6 columnas, 2 filas) y se van rellenado los campos

<FOR EACH=”O.IN_OBJECTS>

Nombre Cliente Dir. IP Usuario Password Fecha Alta

o.name o.cliente.name o.ip o.usuario o.password

Nos situamos debajo de Nombre:Insertar campos - otros - funciones - comodín - formato texto:comodín: o.nameEl resto de campos igual pero con otro nombre en la fecha de alta = formatLang(o.fecha_alta, date=true) --> para que me saque en formato spanishLo guardamos con formato odt - informes_servidores

volvemos a pxgo_reports en openerp :nombre: imprimir informe servidores (boton)model: darle a buscar - categorías del servidornombre interno: servidores.servidores.printtipo: openoffice - pdf outputluego seleccionamos una nueva entrada - seleccionamos el .odt que hemos creado antes

Page 32: apuntes_curso_openERP.pdf

Otra forma de hacer informes - Kasparshttp://kndati.lv/index.php/en/openerp/open-erp-addons/reporting-engine/76-openofficeorg-reporting-engine-installationhttp://kndati.lv/index.php?lang=en --> motor de informes para openerphttp://www.openerpsite.com/el-nuevo-motor-de-informes-de-kaspars-sraps-para-openerp/1389.html

Módulo base_reports_creatorAl instalar veremos que tiene dependencia de “board” - panel de controlEs un constructor de querys SQL (contra BBDD)tableros - configuración - informes personalizados seleccionar varios objetos (varias tablas)seleccionar los campos (e ir grabando)filtrosseguridad - poner para qué grupo es este informey luego en interrogación SQL tendré la Query realizada

Luego me voy a la empresa (a la zona que he hecho el informe), en la parte de arriba me aparecen los filtros que he seleccionado y luego nos aparecerá el botón de imprimir pantalla

iReport for JasperReporthttp://www.aulaerp.com/aula/course/view.php?id=23

Descargar de sourceforge, versión actual 3.7.4

Instalar el módulo: openobject-cliente-kdeAntes desde el servidor: bzr branch lp:openobject-client-kdeEntramos a la carpeta que se ha creado, el módulo está dentro de la subcarpeta server-modules, copiamos la carpeta jasper_reports y la pegamos en el directorio addons del servidor.Instalamos el módulo jasper_reports como cualquier otro módulo de OpenERP.* Si nos da un error al instalar jasper_reports, crear una base de datos nueva limpia (puede que alguno de los módulos anteriores instalados haga conflicto). En la bbdd de producción mirar el log. Se pude hacer comentar la línea de __terp__.py del módulo jasper_report la línea de seguridad (security, ir.model.csv e instalarlo otra vez.Podemos probar a ver si todo funciona correctamente entrando en empresas e imprimiendo el informe de prueba que se crea cuando se instala el módulo clicando en Jasper partners, si todo ha ido bien significa que todo está bien instalado. Si ocurriese algún error lo veríamos en el log del servidor.Nota: El informe de prueba sólo está disponible si se ha instalado el módulo japser reports con datos de ejemplo.

Page 33: apuntes_curso_openERP.pdf

Administración - personalización - Jaspert reports - wizard: model: empresa, y el otro campo es profundidad de los objetos hacia abajoNos genera un xml que es el que le pasaremos a ireport

Ireport:

1.- crear una nueva conexión nueva (xml file) a partir del fichero xml creado por aopenerp- expresion: /data/record (expresión xpath)- en create definir las fechas y los números

2.- seleccionar un informe, plantilla

- en blanco- botón dcho sobre nombre - edit query - query language - xpath - a la derecha record - botón derecho - set record node - desplegamos record - nos sale los campos y los arrantramos a la parte de abajo - ok- los tenemos en la parte izquierda en FIELDS - los arrastramos al informe - count(para contar el número de direcciones, o empresas ), lo normal es seleccionar el FIELD VALUE- luego en la parte derecha en propiedades podemos editar el tipo letra, etc...

Las zonas del informe se dividen en:● title Aparece sólo al inicio del informe. El título se escribe en está sección.

Ejemplo: “Mi primera factura”● pageHeader Aparece en la parte superior de cada página. Puede contener

información como la fecha y hora, nombre de la organización, etc.● columnHeader Sirve para listar los nombres de los campos que se van a

presentar (desplegar). Por ejemplo: “Nombre del Empleado”, “Hora de Entrada”, “Hora de Salida”, “Horas trabajadas”, “Fecha”, etc.

● detail En esta sección se despliegan los valores correspondientes a las entradas de campos definidas en la sección anterior. Por ejemplo “Juan Perez”, “09:00”, “18:00”, “9”,”2005-04-27”

● columnFooter Puede presentar información sumarizada para cada uno de los campos. Por ejemplo “Total de Horas Trabajadas: 180”

● pageFooter Aparece en la parte inferior de cada página. Este parte puede presentar, el contador de páginas como “Página 1/7”

● summary Esta sección se usa para proporcionar información sumarizada de los campos presentes en la sección “detail” por ejemplo para el caso de las horas trabajadas de cada empleado se puede definir un objeto gráfico tipo “pie” para tener una mejor comparación y comprensión visual de los datos.

P.e una empresa puede tener más de una dirección, hace una línea por cada dirección:1 a muchos (iteración, es como un for al campo address): dejarlo en la zona de detalles y luego bton dcho sobre el nombre del informe, propiedades, y en el campo propierties, ... , añadir una nueva, ponemos el nombre de la relación = OPENERP_RELATIONS (todo en mayúsculas), en el valor de la propiedad entre corchetes (‘address’)

Page 34: apuntes_curso_openERP.pdf

Para agregar nuestro informe diseñado con iReport:Administración / Jasper Reports / Jasper ReportsCrearemos un nuevo registro y seleccionamos el modelo que hace uso este informe. En la pantalla siguiente vemos nuestro informe para las facturas:

Web services - XML-RPC

Importación / Exportación de datos1-opciónETL (extraen datos de múltiples fuentes, hacen un transformación y lo cargan)akretion terminatooor - video de youtubede varias fuentes (mysql, elkartuz, etc...) ---> terminatooor --> openerphay que programar en ruby para hacer una inserción en la bbdd

2-opcióno con CSV e importar

Copias de seguridad1-opciónModúlo auto_backup

2-opciónscript utlizando el comando pg_dumphttp://sourceforge.net/projects/autopgsqlbackup/files/ http://www.cyberciti.biz/tips/howto-backup-postgresql-databases.html

Page 35: apuntes_curso_openERP.pdf

Referencias

Bienvenido a los foros www.openerpsite.com/foro-openerpLos foros de openerp en launchpad (en la zona de expertos)https://launchpad.net/openerp-spain/http://openerp.com/forum/http://doc.openerp.com/http://angelmoya.es/category/openerp/http://www.openerp.com/download/modules/ --> todos los módulos de openERPhttp://groups.google.es/group/openerp-spain

Para la descarga de módulos en vez de utilizar bazaar:http://openerp.com/download/modules