Commits

Pablo Caro Revuelta committed 70146be

Mas info no-pyflakes no-pep8

Comments (0)

Files changed (7)

Binary file added.

curso_openerp.rst

 Los productos tienen su propio modulo.
 
 Lanzo el cliente en verbose con:
-python openerp-cliente -v
+python openerp-client -v
 En el cliente da información contextual. (tengo pantallazo)
 para ver lo mismo en el cliente web hay que usar la vista de desarrollador, en la "i" activando el modo desarrollador.
 También en con el over sobre el nombre del campo.
 
 Nota: Alfredo recomienda tener ficheros de vistas separados.
 
+=============================
+Día 6. 20/11 Vistas avanzadas
+=============================
 
+Hoy es Juan Ignacio el profesor.
 
-==============
-Mi Instalación
-==============
+Explicación sobre colspan.
+Por defecto la pantalla está divido en 4. Por defecto un widget toma 2 (label + campo)
+El comienzo del campo se situa en relación al label.
 
-Problema 1:  "None openerp.netsvc: Object Error"
-------------------------------------------------
+Nos enseña como crear una cuenta y como crear un proyecto en launchpad.
+https://launchpad.net/projects/+new
 
-Con el servidor descargado de bazar me da error al acceder (crea y borra bases de datos perfectamente)::
+Nos enseña bzr:
 
-  2012-11-06 06:52:20,428 14244 ERROR None openerp.netsvc: Object Error
-  Object publisher_warranty.contract doesn't exist
-  Traceback (most recent call last):
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/netsvc.py", line 361, in dispatch_rpc
-      result = ExportService.getService(service_name).dispatch(method, params)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/service/web_services.py", line 585, in dispatch
-      res = fn(db, uid, *params)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py", line 167, in execute_kw
-      return self.execute(db, uid, obj, method, *args, **kw or {})
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py", line 121, in wrapper
-      return f(self, dbname, *args, **kwargs)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py", line 176, in execute
-      res = self.execute_cr(cr, uid, obj, method, *args, **kw)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py", line 163, in execute_cr
-      raise except_osv('Object Error', 'Object %s doesn\'t exist' % str(obj))
-  except_osv: ('Object Error', "Object publisher_warranty.contract doesn't exist")
+`Bazar en 5 minutos <http://doc.bazaar.canonical.com/beta/es/mini-tutorial/index.html>`_.
 
+Hacemos el push directamente a launchpad::
 
-Me he descargado el nightly build del 20 de octubre y con ese puedo entrar.
+    bzr push lp:~pcaro/prueba-curso-openero/trunk
 
-Problema 2: account_refund_original no disponible
--------------------------------------------------
+https://launchpad.net/prueba-curso-openero/trunk/+setbranch
 
-Al instalar la localización española (l10n_es_pyme_account) me dice::
+Crear una nueva serie es como una rama.
 
-  Intenta instalar el módulo 'l10n_es_aeat_mod349' que depende del módulo 'account_refund_original'.
-  Este último módulo no está disponible en su sistema.
+Vistas avanzadas
+================
+Veo como con "xml copy editor" puedo probar si una expresión xpath es correcta (f9)
 
-Y eso que he actualizado todos los módulos, en la opción "Actualizar la lista de módulos"
-Me descargo los módulos extra y ya avanza::
+Para definir más de un xpath hay que meterlos dentro de una etiqueta data.
 
-   bzr branch lp:openobject-addons/extra-trunk
+Vamos revisando el módulo idea
+------------------------------
+El modulo idea sigue usando los select pero ya casi no se usan.
+Desde la versión 5 por ejemplo tampoco se hacen accesos directos a la base de datos.
 
+Los botones normales llevan en el nombre, el nombre del método. Lod botones de tipo
+acción tienen nombre de sustitución. Ejemplo: %(idea.action_ida_post_vote)d
 
-Problema 3: Al instalar la localización española
-------------------------------------------------
+En los menus se puede añadir el campo "sequencia" con prioridades. Menor número,
+significa mayor prioridad.
 
-::
 
-  2012-11-06 08:00:12,276 17906 ERROR curso openerp.tools.convert: Parse error in /home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-spain/l10n_es_pyme_account/pyme_data.xml:6:
-  <record id="account_journal_diariogeneral0" model="account.journal">
-              <field eval="&quot;&quot;&quot;GRAL&quot;&quot;&quot;" name="code"/>
-              <field eval="[(6,0,[])]" name="account_control_ids"/>
-              <field name="user_id" ref="base.user_root"/>
-              <field eval="0" name="centralisation"/>
-              <field eval="0" name="group_invoice_lines"/>
-              <field eval="&quot;&quot;&quot;general&quot;&quot;&quot;" name="type"/>
-              <field name="view_id" ref="account.account_journal_view"/>
-              <field eval="[(6,0,[])]" name="type_control_ids"/>
-              <field name="sequence_id" ref="l10n_es.sequence_journal"/>
-              <field eval="1" name="active"/>
-              <field eval="0" name="update_posted"/>
-              <field eval="&quot;&quot;&quot;General&quot;&quot;&quot;" name="name"/>
-              <field eval="0" name="refund_journal"/>
-              <field eval="0" name="entry_posted"/>
-          </record>
-  Traceback (most recent call last):
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py", line 890, in parse
-      self._tags[rec.tag](self.cr, rec, n)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py", line 848, in _tag_record
-      f_val = self.id_get(cr, f_ref)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py", line 867, in id_get
-      res = self.model_id_get(cr, id_str)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py", line 876, in model_id_get
-      return model_data_obj.get_object_reference(cr, self.uid, mod, id_str)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py", line 18, in lookup
-      r = self.lookup(self2, cr, *args)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py", line 46, in lookup
-      value = d[key] = self.method(self2, cr, *args)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/addons/base/ir/ir_model.py", line 654, in get_object_reference
-      data_id = self._get_id(cr, uid, module, xml_id)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py", line 18, in lookup
-      r = self.lookup(self2, cr, *args)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py", line 46, in lookup
-      value = d[key] = self.method(self2, cr, *args)
-    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/addons/base/ir/ir_model.py", line 647, in _get_id
-      raise ValueError('No such external ID currently defined in the system: %s.%s' % (module, xml_id))
-  ValueError: No such external ID currently defined in the system: l10n_es.sequence_journal
+Vistas kanban
+-------------
+En la 6.1 sólo los proyectos tienen vista de este tipo. En la 7.0 ya todos.
+Lo vemos en project/project_view.xml
+Las vistan kanban sólo se ven en el web.
+Para mirar, mejor en trunk (7.0) la vista de producto.
 
-Leyendo en https://bugs.launchpad.net/openerp-spain/+bug/944218 dice que::
 
-  Estás usando el l10n_es que hay en el repositorio de addons, que está desactualizado, debes usar el l10n_es de openerp-spain/6.1 que ya incluye esa corrección desde el principio.
+Ejercicio 1
+-----------
 
-  Yes, this sequence exists in l10n_es from lp:openerp-spain/6.1 since revno 277
+1. Instalamos base_contact
+2. En libreta de direcciones - contactos, añadir una solapa redes sociales.
 
 
-Pero si estoy usando eso. De hecho veo el cambio que indican::
+================
+Día 7. 22/11 ORM
+================
 
-  $ bzr log |less
+Nos pasa un fichero ORM.pdf
 
-  revno: 321
-  committer: Juan Antonio Martin <jamartin@lambdasoftware.net>
-  branch nick: 6.1
-  ...skipping...
-  revno: 277
-  committer: Omar (pexego) <omar@pexego.es>
-  branch nick: 6.1_new
-  timestamp: Mon 2012-01-23 13:34:32 +0100
-  message:
-    [FIX] Use of ir module in l10n_es_toponyms_region and l10n_es_toponyms.
-    > [REF] l10n_es_toponyms: config.ES.toponyms -> config.es.toponyms.
-    > [ADD] l10n_es: Account journal sequence with references from l10n_es_pyme_account.
-    > [REF] l10n_es: Closed method for terceros_rec, terceros_pay and tax changed to unreconciled
-
-
-Pruebo cambiando el orden en addons_path: Reinstalo la base de datos y el server, pero se repite el error.
-En la prueba anterior había dejado el primero el addons del propio servidor. Ahora voy a poner el primero
-el de la localización española. Así si funciona.
-
-
-Problema 4: : ¡El nombre del diaro debe ser único por compañía!
----------------------------------------------------------------
-En "Generar plan contrable a partir de plan contable"
-No me pasa ya en una nueva base de datos curso_nov2 (habia olvidado lo de secuencias separdas)
-
-Problema 5: Al intentar crear los ejercicios fiscales. Uncaught Error: Unknown field state in domain [["state","in",["done"]]]
-Me estaba equivocando de botón. Ya no me pasa
-
-
-El cliente no lo puedo usar desde el virtualenv, para ello lo lanzo con mi python de sistema.
-
-
-====================
-Instalacion de bazar
-====================
-
-En sistemas debian::
-
-    apt-get install bzr bzrtools
-
-Para interfaz visual QT (`qbzr <http://doc.bazaar.canonical.com/plugins/en/qbzr-plugin.html>`_.)::
-
-    apt-get install qbrz
-
-Plugin  `colo <http://doc.bazaar.canonical.com/plugins/en/colo-plugin.html>`_::
-
-    mkdir -p ~/.bazaar/plugins
-    if [ ! -d ~/.bazaar/plugins/colo ]; then
-        echo Installing bzr-colo
-        bzr branch lp:bzr-colo ~/.bazaar/plugins/colo
-    fi
-
-bzrtools
-========
-bzr shelve
-bzr unshelve
-bzr shelf ls
-bzr shelf show
-bzr shelf del
-

curso_openerp.sublime-workspace

 		"selected_items":
 		[
 			[
+				"field",
+				"fields.text	fields.text"
+			],
+			[
 				"Op",
 				"OpenERP : model	OpenERP : model"
 			],
 				"fields.float	fields.float"
 			],
 			[
-				"field",
-				"fields.date	fields.date"
-			],
-			[
 				"_",
 				"_name	org.python.pydev.editor.templates.python"
 			],
 	"buffers":
 	[
 		{
-			"contents": "==========\nAsistentes\n==========\n\nJuan Ignacio Ubeda. Profesor\nAlfredo. Profesor\n\nAlejandro Santana (Empresa: Anubía en Galicia en Vigo) Arch linux\nCarlos Llamas Bruzzone. Datamatic (Uruguay).\n\nMikel Trasserra (Minorisa)\nDavid Ponsa\nMiguel Angel Castillo\n\nJuan José Inge. Sorrio (Vizcaya). Ingeos.\nJorge Lopez Monterubio\n\n\n============\nDía 1. 30/10\n============\n\nVemos presentación, usando screenleap, y hablamos todos por skype.\n\nArquitectura\n------------\nKoo: cliente que desarrolló una empresa española llamada ~Nantic\n\nProtocolos.\nNet-rpc: 8070\nxml-rpc: 8069\n\nLos módulos van en la carpeta \"addons\". Normalmente o se copian o se hacen enlaces simbólicos,\ntambién se pueden añadir las rutas a los módulos en el fichero de configuración (separados por coma).\n\nEn la 6.1 se arrancan los dos servidores a vez (servidor web y openerp).\n\nNormalmente la instalación se hace en linux, no se recomienda instalar en windows.\n\nIgnacio no usa los instaladores para instalar en producción. Lo usa todo en un\ndirectorio, que permite tener por ejemplo varios simultaneamente. El lo instala\ncomo \"en desarrollo\"\n\nLa comunidad\n------------\nLaunchpad.\nLa comunidad española: grande, muchos partners, y mucho movimiento. De las más\npotentes en openerp. Grupo de localización españa.\n\nAna Juaristi está desde el principio.\nPechego\nMontic\n\nLuego da los nicks y nos pide que nos registremos en la localización española.\n\n\nRAD OpenObject y enlaces de interes\n-----------------------------------\ndoc.openerp.com\nwww.openerpsite.com: Blog Avanzosc/Ana Juaristi\nwwww.informaticartica.blogspot.com: blog del profesor. Juan Ignacio.\n\ngrupo de google de localización española: openerp-spain\n\nEl projecto de Medial se paró.\n\n\nLaunchpad\n---------\nVemos acceso con Launchpad\n\nEn launchpad el projecto se llama openobject\nhttps://launchpad.net/openobject\nY tiene proyectos hijos como:\nhttps://code.launchpad.net/openobject-server\n\nInstalo bzr y me hago usuario en launchpad. Con contraseña.\nExiste la herramienta Bazaar Explorer\n\nUsan gunicorn para que se utilizen todos los procesadores.\nNormamente se abre el gunicrom.conf.py y se edita.\n\nNos enseña como reportar un bug.\nLo hace en code.launchpad.net/~/avanzosc/\nLanchpad usa Rosetta para traducir. Se guarda cada 10 términos.\n\nMe mandan un correo y puedo entrar en el moodle de openerp\n\nTerminal\n--------\nAñadir al sys.path tanto openerp como addons\ndb, pool = openerp.pooler.get_db_and_pool('test_kitchen')\n\n\n[14:18] <pcaro> hi all\n[14:20] <pcaro>  anyone know how to get python shell of openerp? Adding \"openerp\" and \"addonds\" to pythonpath y can accesses my module model class, but then I need cursor and uid. I am a newbe trying practice with the orm ...\n[14:21] --> noaXess se ha unido a este canal (~noaXess@catv-165-002.tbwil.ch).\n[14:22] <flox> depending what you try to do, you can use ERPpeek to try things\n[14:24] <flox> http://pypi.python.org/pypi/ERPpeek\n[14:26] --> chegga se ha unido a este canal (~checker@pd95caab3.dip0.t-ipconnect.de).\n[14:28] <pcaro> flox, thaks for the link. I am only trying practice with the orm. I am learning. In django and zope I usually test using a python shell. Isn't common to do that in openobject develoment?\n[14:29] [Whois] flox es ~florentxi@unaffiliated/flox (florentxicluna)\n[14:29] [Whois] flox es usuario en los canales: #openobject\n[14:29] [Whois] flox está conectado vía verne.freenode.net (Newark, NJ, US).\n[14:29] [Whois] flox ha estado inactivo durante 4 minutos y 32 segundos.\n[14:29] [Whois] flox ha estado conectado desde 13-11-12 14:03:25.\n[14:29] [Whois] flox está conectado ahora como flox.\n[14:29] [Whois] Fin de la lista WHOIS.\n[14:31] <Marmotte> maybe you can try my patch, which adds a --interactive argument to the openerp server (it launches the openerp server, then falls into a standard python interactive shell)\n[14:31] <Marmotte> https://code.launchpad.net/~syleam/openobject-server/trunk-interactive_mode/+merge/92148\n[14:32] <Marmotte> I use it for development purpose :)\n[14:33] <flox> ERPpeek does it too :-)\n[14:33] <Marmotte> with the same syntax as in modules ?\n[14:34] <flox> it's not documented, I've to add an helper\n[14:34] <Marmotte> I quickly tested ERPpeek, don't really use it for now\n[14:34] <Marmotte> (but I know I have to use it more :D)\n[14:35] <pcaro> Thanks!! What a goog community!! ERPpeek looks like impresive. I will use in the future. \n[14:36] <flox> well, it can either connect through RPC or using \"import openerp\"\n[14:36] <flox> then I've to add an helper: get_pool = openerp.modules.registry.RegistryManager.get\n[14:36] <flox> (I did it locally, but not yet committed)\n[14:36] <Marmotte> ok :)\n[14:36] <flox> which allows to grab a \"pool\" object\n[14:37] <flox> then cr = pool.db.cursor(), and you can play with it\n[14:37] <flox> I did it already for troubleshooting\n[14:37] <Marmotte> I only work on 6.0, \"import openerp\" is not available on this version :)\n[14:38] <flox> this feature of ERPpeek is only tested in 6.1\n[14:38] <flox> (for other versions, it supports RPC connection)\n\n\nDescarga\n--------\n\n::\n\n  ~/src/yaco/erp/curso\n  pcaro@davinci$ bzr branch lp:openobject-server/6.1\n\n  ~/src/yaco/erp/curso/openobject-server\n  pcaro@davinci$ bzr revno\n  4517\n\n\n  pcaro@davinci$ bzr pull\n  Using saved parent location: http://bazaar.launchpad.net/~openerp/openobject-server/trunk/\n  No revisions to pull.\n\n\nDescargar:\nserver, openerp-web, addons-extra, addons-community y localización española\n\nEl suele bajar el ninightly el servidor:\nnighty.openerp.com\nEste tiene ya dentro los addons oficiales.\n\nAquí están los addons oficiales.\nhttps://code.launchpad.net/openobject-addons\nextra-trunk son los addons de la 6.1\nPara la 7 hay un proyecto aparte openerp-extra-addons con una rama para la 7.\n\nhttps://code.launchpad.net/~openerp-community/openobject-addons/trunk-addons-community\n\n\n\nopenerp/server/openerp/addons\n\nInstalación\n-----------\n\nPara la 6.1 están todavía localizando, en avanzo tienen modulos localizados.\n\n# Forzar a crear un archivo de configuración en la carpeta de usuario\n# que lo genera: .openerp_serverrc se usa la opcción -s\n# Lo crea con las rutas sobre la que estoy ejecutando el servidor.\n./openerp-server -s\n\n# Para lanzar hay que indicar  el archivo de configuración\n./openerp-server --config=\"/home/pcaro/.openerp_serverrcc_613\"\n\nUsan el python del sistema de ubuntu\n\nJuan Ignacio tenía un script  para  la 6.0: http://openmrp.es/curso/depen\n\nNos enseña como instalar el postgresql y configurar el fichero pg_hba.conf\nCambia ident por md5 en \"local\", para conexión libre.\ncreateuser --createdb --username postgres --no-createrole --no-superuser --pwprompt nov2012\n\nLos logins y los password están almacenados en texto plano en openerp.\n\n\nInstalación de un servidor:\n1. Actualización del sistema\n1. Instalamos postgres y bz\n1. Instalar las dependencias\n1. Creamos la base de datos\n1. Modificar el pg_hba.conf, quitar el ident por md5\n1. sudo adduser --system --home=/opt/openerp --group openerp\n# Para loguear\n1. sudo su - openerp -s /bin/bash\n\n\nPara instalar con el servidor oficial, en server:\nsudo ./setup.py install\nQue lo install en /usr/local/lib/python2.7/dist-packages\n\nEn el archivo de configuración, en\naddons_path: rutas con directorios de módulos separados por comas\nadmin_passwd: contraseña en claro, \"superadminpassword\"\ndb_host: Host del servidor de base de datos\ndb_name: Si ponemos un nombre usa esa\ndb_port: 5432\ndb_template = template0\nlist_db: listar bases de datos\nlog_handler = [':INFO']\nlog_file = (False es todo en pantalla) El archivo *tiene* que existir\npid_file = Se indica si se quiere una ruta en concreto\nproxy_mode Para conexión segura con SSL. En el blog hay un tutorial\n\n\nnet_rpc es conexión segura.\nNo olvidar crear el archivo de log y que el usuario de openrpc sera el dueño del archivo de configuración con con chown, etc.\n\n\nEl propietario del archivo de configuración tiene que ser el mismo que ejecute\nel servidor (o tener permisos).\nTras el chown recursivo sule ponerle un 640\nHay un script de inicio dentro del server en carpeta server/install/\nun openerp-server.init\nNo olvidar poner update-rc.d para\n$ sudo update-rc.d openerp-server default\n\n\n\nLa 6.1 conecta el servidor con xmlrcp\n\nJuanjo usa vmplayer en el windows\n\nAntes usaban cherrypy, pero ahora va mejor con werkzeug\nWerzeug, en una ubuntu anterior al 12, es antiguo y es mejor instalarlo con pip\nsudo apt-get install python-pip, etc.\n\nUna vez lanzado se conecta uno al localhost:8069\n\n\nNueva base de datos. Configuración\n----------------------------------\n\nCrea una nueva base de datos\n\n1. En configuración, ir a usuario en administrador le damos permiso de ascceso,\nPonermos en usabilidad la vista extendida\n\n2. Así tengo la opcion \"Actualizar la lista de módulos\"\n\n3. Buscamos: \"l10n_es_pyme\" e instalamos \"l10n_es_pyme_account\". Instala  muchos módulos.\nNo poner simplemente el l10n_es_pyme\n\nPulsamos en instalar confiuración y cuando dice configurar el plan de cuentas (plan contable) hay que cancelar\n\n4. De nuevo se va uno al permiso del usuario y se da permisos. (tengo pantallazo)\n\nEn lo de configuración financiera para la compañía falla.\n\n5. Generar plan contrable a partir de plan contable.\nAsí que en confugraicón - asistentes de configuración, generar plan contable a partil de plantill ade plan contable.\nEn número de dígitos, luego no se puede cambiar, no hay problema con de más.\nPor defecto aparece cliqueado secuencias de diarios separadas. QUITAR siempre.\nPlantilla: plan general contable por defecto.\nHay un problema en la 6.1, el diario de efectivo choca con otro. Asi que se borra antes de aplicar o se renombra.\n\n6. Ahora se va contabilidad y al ver el plan contable da un error. SE va configuación, contabiidad financiera, periodos,\nejercicios fiscales crear: Ej 2012\nSe crean periodos mensuales o trimestales. Se elimina el periodo de apertura que te porque vamos a usar el asistente para crealos.\n\nLuego vamos al plan contable, a abrir.\n\nLo siguiente es la configuación de los diarios.\nHay que instalar simpre los módulos. (configuración, módulos): nan_account_inboice Sequence\n\nAsí en contabilidad, configuración, financira, diarios, en los diarios de compras, existen \"una lína datos de facturación\"\n\n\nNecesitaría un documento de configuración de un diario, dice que lo va a dar.\n\nEn acerca de: Está \"el activar el modo desarrollador\". Para quitar se quita el parámetro debug de la rl\n\nSomos el primer curso en la 6.1.\nNos bajamos el eclipse normal. pydev y plantillas para vistas xml y clases de python.\n\ntryton\n------\nEs un fork, el creador es un extrabajador. Le ha realizado cambios en el nucleo,\npor ejemplo soporta otras bases de datos.\nTiene pocos módulos, no tiene todavía la localización española.\nAhora mismo hay mucha diferencia. No se puede hacer una instalación de producción seria.\n\nopenerp 7??\nFecha de lanzamiento era octubre, pero siguen\n\nVirtualenv\n----------\nSiguiendo:\nhttp://toporojo.es/blog/2012/05/17/instalar-virtualenv-openerp-6-1-desde-cero/\n\n::\n\n  $ mkdir openerp6.1 && cd openerp6.1\n  $ bzr branch lp:openobject-server/6.1 server\n  $ bzr branch lp:openobject-addons/6.1 addons\n  $ bzr branch lp:openerp-web/6.1 web\n  $ bzr branch lp:openerp-spain/6.1 openerp-spain\n   bzr branch lp:~chucu/+junk/OERP6.1-requirements\n\n  Traceback (most recent call last):\n    File \"./openerp-server\", line 41, in <module>\n      import openerp\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/__init__.py\", line 38, in <module>\n      import service\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/service/__init__.py\", line 37, in <module>\n      import openerp.service.workers\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/service/workers.py\", line 10, in <module>\n      import psutil\n  ImportError: No module named psutil\n\nLo instalo con pip y funciona.\n$ pip install psutil\n\n2012-10-30 12:25:09,541 21492 CRITICAL ? openerp.modules.module: Couldn't load module web\n2012-10-30 12:25:09,542 21492 CRITICAL ? openerp.modules.module: No module named docutils.core\n\n\n\nImportError: No module named docutils.core\n\nLo instalo con pip y funciona.\n$ pip install docutils\n\n\n\n=====\nDia 2\n=====\n\nHerramientas para instalar:\n\nEclipse\n-------\nPara desarrollar, necesitamos eclipse: con pydev y el soporte de xml\nRecomienda el eclipse clasic\n\nHelp -> Install new software ->  en work with: http://pydev.org/updates\n\nSe instala pydev.... Ahi que instalar unos certificados..\n\nPara abrir pydev. en window - open perspective - other- pydev\n\n\nWork with: en el desplegable (galileo, o la versión que tengamos). Yo indigo\n\nBusco Web, Xml. and java EE Development. Se despliga. Se instala Eclise XMl Editor and Tools\n\nEn windows - Preference - Pydev. Interpreter python. Si esta vacio se seleciona autoconfig.\n\nInstalamos las plantillas para desarrollar  en openerp.\nhttp://code.google.com/p/openerp-eclipse-template/\n\n\nPreferences - pydev - editor - templates- import - templates-openerp.xml\nSi tienes una plantilla __terp__ están importadas.\nSe recomienda modificar la de licencia. OpenERPLIcence\n\n\nPreferences - xml - xmlfiles - editor - templates- import - Openerp-eclipse-xml-template.xml\nsi tengo act_window ya está importado correctamente.\n\n\nPoedit\n------\napt-get install poedit\n\nPgAdmin\n-------\napt-get install pgadmin3\n\nEditor de copia xml. Xml copy editor\n------------------------------------\nLo usaremos para editar los xpath\n\napt-get install xmlcopyeditor\n\n\n\nObjetos de openerp\n===================\n\nEn el cliente pesado, en configuración - Personalización - Estructura de la base de datos\nUna factura por ejemplo es account.invoce\nEn el código está en /home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/addons/account\nComo no hay un account_invoce, está dentro de account. No hay ninguún invoce.py pero si un account_invoice.py\nEstá la clase. El nombre de la clase se  pone separado por guiones bajos.\n\nEjercicio: buscar el objecto empresa res.partner\nEstá en: base/res/res_partner.py\nTodos los objetos principales están en base.\nLos productos tienen su propio modulo.\n\nLanzo el cliente en verbose con:\npython openerp-cliente -v\nEn el cliente da información contextual. (tengo pantallazo)\npara ver lo mismo en el cliente web hay que usar la vista de desarrollador, en la \"i\" activando el modo desarrollador.\nTambién en con el over sobre el nombre del campo.\n\n\nEstructura de un módulo\n=======================\nSe va a addons y vemos el modulo idea\nRecomienda tener impreso el memento técnico. Que esta basado en el modulo educacional idea.\nhttp://doc.openerp.com/memento/OpenERP_Technical_Memento_v0.6.4.pdf\nOjo, bzr_set.py no funciona para la 6.1\n\nLo mínimo es el __init__, el modulo principal (idea.py) y el descriptor (__openerp__.py un  diccionario python)\nNormalmente las vistas no se separarn dentro de view sino que se meten a la misma altura del  modulo principal (idea.py)\n\nOpcionales:\n\n* i18n: Traducción\n* demo: Los datos se almacenan en xml o csv.\n* report: informes, report son en rml. Tira de plantillas mako.\n* security: permisos y grupos especificios. xml y csv\n* wizards. python y xmls para asistentes\n* workflow: flujos de trabajo\n* __terp__.py ahora se llama __openerp__.py\n\n::\n\n  (venv)~/src/yaco/erp/curso/openerp6.1/server/openerp/addons/idea\n  pcaro@davinci$ tree -L 1\n  .\n  ├── i18n\n  ├── idea_data.xml\n  ├── idea.py\n  ├── idea_view.xml\n  ├── idea_workflow.xml\n  ├── images\n  ├── __init__.py\n  ├── __openerp__.py\n  ├── report\n  ├── security\n  ├── test\n  └── wizard\n\nEl descriptor\n-------------\nNombre y versión\nLas categorías no está muy claro que se pone. Se puede poner una existente en otro módulo.\nEs para el usuario filtrar los módulos.\nComplejidad es nuevo.\nLa descripción aparace al instalar en el cliente.\ndepends: lista de dependancias de nuestro modulo. Siempre el base (pero no se pone si depende de otro por\ndependencias transitivas)\ninit_xml: vistas que inicializan datos en nuestro módulo.\nupdate_xml: Todos los archivos xml (y csv) que carga nuestro modulo para ver las vistas\ndemo_xml: Datos de inicialización de demo.\ntest: Lista de ficheros yml\ninstalable: siempre True\ncertificate: Si es un módulo certificado por openerp, ellos te han dado un número de certificación.\nimages: imagenes que se pueden cargar desde el modulo\napplication: True si creas una aplicación.\n\nFichero principal (idea.py)\n---------------------------\nClasses, modelos de base de datos, etc.\n\n\nUsuarios, permisos y grupos.\n============================\n\nEn configuración, usuarios (pantallazo), puedo indicar grupos ya formados.\nAdemás de los permisos simple de usuario, están los grupos de permisos.\nAquí están las pantallas menús y permisos de accesos.\nComo es difícil de controlar aquí los cambios, lo mejor es duplicar el grupo  y en la réplica trabajas.\nAsi por ejemplo se pueden crear grupos por trabajador, por departamento, etc.\nRecomienda que para cada usuario en el sistema crear un grupo. Así duplico el grupo, y quito el usuario del grupo inicial,\nañadiendo la nuevo. En es grupo es el que toqueteo.\n\nEn los grupos también están las reglas.\nPor ejemplo en gestión de ventas/User-Own Leads Only\n\nVentajas clientes web o gtk\n===========================\nCampos de fecha en gtk tienen funcionalidad que no tiene el web:\n\n* = hoy\n* +5d 5 días\n* +4w 4 semanas más de  la fecha que tengo\n\nEl cliente web tiene de bueno que primero tienes que pular en \"editar\"\nNosotros vamos a usar el gtk para desarrollar.\n\n\nNuevo proyecto en eclipse\n=========================\n\nNuevo proyecto para el servidor de openerp.\n-------------------------------------------\nfile - new - project - general - project- Nombre: Server 6.1 (quitamos use default location)\nEn location seleccionamos /home/pcaro/src/yaco/erp/curso/openerp6.1/server\nLuego nos vamos al proyecto - Segundo boton del ratón - convertir en proyecto python\nConfiguramos un lanzador, para ello  en el servidor se le añade la extensión .py al ejecutable del servidor (openerp-server.py).\n\nNuevo proyecto de discos musicales\n----------------------------------\nfile - new proejct - general - project - Nombre\nLo convertimos en proyecto pydev. También puedo elegir directamente pydev pero indicando (no configurar el pythonpath)\nNuevo directorio en el proyecto: disc_management\n\nEn este caso vamos a crear un archivo pythonm por modelo.\nCrearlos los archivos  con new - file (__init__.py y __openerp__.py)\nCreamos discs.py\n\nVemos los campos básicos.\n\nen el __init__.py Op<ctr-space> y agrego la licencia\n__openerp__.py: En el terminal __terp<ctr-space> es una plantilla antigua no de la 6.0\n\ndisc.py: licencia y plantilla openerp model (también esta antigua)::\n\n  from osv import osv\n  from osv import fields\n\n    class discs(osv.osv):\n        _name = 'discs'\n        _description = 'Disc Library'\n\n        _columns = {\n                'name':fields.char('Title', size=64),\n                'description': fields.text(\"Description\", size=256),\n                'year': fields.date('Published'),\n                'format': fields.selection([('vinyl', 'Vinyl'), ('cd', 'CD'), ('mp3', 'MP3'), ('mp4', 'MP4')], 'Format'),\n                'active': fields.boolean('Active'),\n            }\n    discs()\n\nSi es un nombre compuesto, en la clase se escribe con guionn bajo y el nombre separado con punto.\nPara la vista dist_management_view.xml\nctrl-space - Declaración de xml\nctrl-space - openerp_tab\nctrl-space - comentario\nctrl-space - menu item (solo con id y name)\n\nctrl-space - tree_view\n  En el nombre de la vista se pone lo mismo que el id pero con puntos.\n  modelo es el nombre de la clase\n\nctrl-space - form view (segundo botón - source - format permite formatear el xml)\nctrls-space - view_action\nctrls-space - menu_item_parent para submenus Al submenu se le dice el padre\n\n\nVamos a enlazar el módulo al servidro de open-erp en la consola\nUna vez enlacado: Configuración: Actualizar lista de módulos y debería encontrar uno más.\nVoy a  los módulos y lo instalo.\n\nSi se hacen cambios en las vistas hay que reinciar el servidor.\n\n\"active\" es un nombre de campo especial que hace como si estuviera borrado.\nEs una buena práctica tener un \"active\"\n\n\n===========\nDía 3. 8/11\n===========\n\nNos vuelve a repetir la descarga de la instalación.\nExplicando lo de los addons que se repiten. La filolosofía es no repetir trabajo\nque ya está hecho. En principio no deberían haber módulos iguales en ramas diferentes,\npero por ejemplo en la localización española, openerp ya incluye uno llamado l10n_es\nasí que está machacado.\n\nEl descarga el nightly (con addons oficiales)  y luego pone addons-extra (creando enlaces simbólicos sin machacar nada).\nDespués enlaces de los addons-community (tamboco machaca nada).\nLuego pone los addons de la rama española (oficial), quitando el modulo l10n_es, Después linca los modulos de la rama de avanzos. Esta rama sí machaca algunos oficiales, así que borra algunos.\n\nEl servidor de openerp lee los zips. Quidado se no tener zips en addons.\nMirar que no haya enlaces rotos.\n\n\n\nbase_module_record\n------------------\nEn configuración módulos *base_module_record*.\nTiene un  botón para ir grabando los movimientos que haces y crea un modulo nuevo\ncon toda la configuración que has hecho, sin tener que desarrollar nada.\n\n\nEjercicio de crear los autores\n------------------------------\nVista de lista: nombre\nvista formulario: nombre, activo\nAcción de ventana con \"autores\".\n\nPara canciones es lo mismo\nVista de lista: nombre\nvista formulario: nombre, activo, tracktime\nAcción de ventana con \"autores\".\n\nCreación de una vista de búsqueda\n---------------------------------\nHacer en el ejercicio un botón para filtar los  inactivos\n\n\nValores por defecto.\n--------------------\nHacemos que el campo de selección tenga por defecto cd  y\nque activo sea True. Para ello se usa *_defaults* y llamables::\n\n  _defaults= {\n    'format': lambda *a: 'cd',\n    'active': lambda *a: True,\n  }\n\nCampos relacionales\n-------------------\n\nVemos los widgets:\n\n* One2many: Vemos los campos relacionales en pedidos, en lineas de de pedido.\n  El widget tiene botones + y paginador\n* Many2One en el pedido se ven como carpetitas\n* En catagorias de clientes vemos el many2many (Tiene un boton en gtk con nombre 'Añadir').\n\nRellenamos el ejemplo:\n\nLos nombres de tablas intermedias de many2may se  suelen terminar con el prefijo: 'rel'. Ejemplo::\n\n    _columns = {\n          'discs_ids': fields.many2many('discs', 'auth_disc_rel', 'author_id', 'discs_id', 'Discs')\n      }\n\nPara solucionar problemas con importaciones y creación, crea una nueva herencia de discos\npara añadir el nuevo campo (en lugar de hacerlo en discs.py)::\n\n    _columns = {\n            'name': fields.char('Name', size=64),\n            'discs_ids': fields.many2many('discs', 'auth_disc_rel', 'author_id', 'discs_id', 'Discs')\n            'active': fields.boolean('Active'),\n        }\n\nPara el one2many::\n\n  'song_ids': fields.one2many('song', 'author', 'Singing songs'),\n\n\n\nLuego añadimos los campos a las vistas.\n\nCampos obligatorios\n-------------------\nBasta con poner el atributo *required* a True en el  field.\nEn la interfaz de usuario gtk se pone azul.\n\nCampos de solo lectura\n----------------------\nBasta con poner el atributo *readonly* a True en el  field.\nEn la interfaz de usuario gtk ya está de solo lectura.\n\n\nBotón\n-----\nHacemos un botón básico en autores::\n\n  def button_ok(self, cr, uid, ids, *args):\n      print 'Botón ok pulsado!'\n      return True\n\nY ponemos el boton en la vista formulario del autor::\n\n  <button name=\"button_ok\" string=\"Mostrar mensaje\" type=\"object\" icon=\"gtk-ok\" />\n\nPregunta: ¿Qué pasa al desinstalar un módulo?\nAl desinstalar un módulo, los datos siguen en base de datos.\n\n\nContexto, Agrupaciones y coloreado\n----------------------------------\nNos muestra en un modulo como poner contexto, agrupaciones y coloreado.\n\nLos colores en el tree lo hace  con un atributo colors::\n\n  colors=\"red:format in ('cd');blue:format in ('mp3');#FF0008:format in ('mp4')\"\n\n\nEn la vista search  de los discs. Mete un *newline* y debajo un grupo con \"span=0\"::\n\n  <group expand=\"0\" string=\"Group by curso\" grups=\"base.group_extended\">\n    <filter .... context=\"{'grop_by':'year'}\" domain=\"[]\"\n  </group>\n\n===========\nDía 4. 13/11\n===========\n\nVamos revisando el memento técnico.\n\nEl campo select no se usa mucho.\n\nEl atributo translate=True, añade una banderita y eso da la opción de traducir el campo.\n\nEn los campos binarios hay dos opciones en la vista.\n  * Por defecto aparece: seleccionar, abrir, guardar como y elminar\n  * En la vista pone widget=\"image\" y aparecen icondos para guardar y tal y muetra la imagen.\n\nCampos reference: Se hace referencia a campos ya existentes usando las propiedades del campo original.\n\nForm elements\n-------------\ncolspan, col: Por defecto openerp divide la pantalla en 4.\ninvisible: campos que tienen que estar en las vistas, pero que sean invisibles para el usuario.\n  Tambien se pueden poner condiciones, if un campo no está creado poner estos campos invisibles, etc.\npassword: tiene el incoveniente que en modo lista se ve texto plano!! Así que ocultarlo simpre en modo lista\non_change: es de lo más usado.\nPrestar atención a los widgets como progessbar, many2may, email, etc\nVemos uso de notebook y page\n\nEjercicio: Módulo de cocina\nIdeas:\n\n* coste y precio se pude copiar del módulo de producto.\n* poner la biografía con un notebook y un page\n* Los cocineros no se relacionan con usuario, aunque es lo que se haría en un modelo\nserio\n\nNos pasará el modulo como muestra.\n\nLos _name de las clases tienen que ser unicos así que se suele separar por puntos\nEj: cooking.restaurant\n\nHerencias útiles:\n\nproduct_product. Producto.\nres.partner.address Direcciones de empresa.\n\n\n\n==============\nMi Instalación\n==============\n\nProblema 1:  \"None openerp.netsvc: Object Error\"\n------------------------------------------------\n\nCon el servidor descargado de bazar me da error al acceder (crea y borra bases de datos perfectamente)::\n\n  2012-11-06 06:52:20,428 14244 ERROR None openerp.netsvc: Object Error\n  Object publisher_warranty.contract doesn't exist\n  Traceback (most recent call last):\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/netsvc.py\", line 361, in dispatch_rpc\n      result = ExportService.getService(service_name).dispatch(method, params)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/service/web_services.py\", line 585, in dispatch\n      res = fn(db, uid, *params)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py\", line 167, in execute_kw\n      return self.execute(db, uid, obj, method, *args, **kw or {})\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py\", line 121, in wrapper\n      return f(self, dbname, *args, **kwargs)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py\", line 176, in execute\n      res = self.execute_cr(cr, uid, obj, method, *args, **kw)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py\", line 163, in execute_cr\n      raise except_osv('Object Error', 'Object %s doesn\\'t exist' % str(obj))\n  except_osv: ('Object Error', \"Object publisher_warranty.contract doesn't exist\")\n\n\nMe he descargado el nightly build del 20 de octubre y con ese puedo entrar.\n\nProblema 2: account_refund_original no disponible\n-------------------------------------------------\n\nAl instalar la localización española (l10n_es_pyme_account) me dice::\n\n  Intenta instalar el módulo 'l10n_es_aeat_mod349' que depende del módulo 'account_refund_original'.\n  Este último módulo no está disponible en su sistema.\n\nY eso que he actualizado todos los módulos, en la opción \"Actualizar la lista de módulos\"\nMe descargo los módulos extra y ya avanza::\n\n   bzr branch lp:openobject-addons/extra-trunk\n\n\nProblema 3: Al instalar la localización española\n------------------------------------------------\n\n::\n\n  2012-11-06 08:00:12,276 17906 ERROR curso openerp.tools.convert: Parse error in /home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-spain/l10n_es_pyme_account/pyme_data.xml:6:\n  <record id=\"account_journal_diariogeneral0\" model=\"account.journal\">\n              <field eval=\"&quot;&quot;&quot;GRAL&quot;&quot;&quot;\" name=\"code\"/>\n              <field eval=\"[(6,0,[])]\" name=\"account_control_ids\"/>\n              <field name=\"user_id\" ref=\"base.user_root\"/>\n              <field eval=\"0\" name=\"centralisation\"/>\n              <field eval=\"0\" name=\"group_invoice_lines\"/>\n              <field eval=\"&quot;&quot;&quot;general&quot;&quot;&quot;\" name=\"type\"/>\n              <field name=\"view_id\" ref=\"account.account_journal_view\"/>\n              <field eval=\"[(6,0,[])]\" name=\"type_control_ids\"/>\n              <field name=\"sequence_id\" ref=\"l10n_es.sequence_journal\"/>\n              <field eval=\"1\" name=\"active\"/>\n              <field eval=\"0\" name=\"update_posted\"/>\n              <field eval=\"&quot;&quot;&quot;General&quot;&quot;&quot;\" name=\"name\"/>\n              <field eval=\"0\" name=\"refund_journal\"/>\n              <field eval=\"0\" name=\"entry_posted\"/>\n          </record>\n  Traceback (most recent call last):\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py\", line 890, in parse\n      self._tags[rec.tag](self.cr, rec, n)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py\", line 848, in _tag_record\n      f_val = self.id_get(cr, f_ref)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py\", line 867, in id_get\n      res = self.model_id_get(cr, id_str)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py\", line 876, in model_id_get\n      return model_data_obj.get_object_reference(cr, self.uid, mod, id_str)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py\", line 18, in lookup\n      r = self.lookup(self2, cr, *args)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py\", line 46, in lookup\n      value = d[key] = self.method(self2, cr, *args)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/addons/base/ir/ir_model.py\", line 654, in get_object_reference\n      data_id = self._get_id(cr, uid, module, xml_id)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py\", line 18, in lookup\n      r = self.lookup(self2, cr, *args)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py\", line 46, in lookup\n      value = d[key] = self.method(self2, cr, *args)\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/addons/base/ir/ir_model.py\", line 647, in _get_id\n      raise ValueError('No such external ID currently defined in the system: %s.%s' % (module, xml_id))\n  ValueError: No such external ID currently defined in the system: l10n_es.sequence_journal\n\nLeyendo en https://bugs.launchpad.net/openerp-spain/+bug/944218 dice que::\n\n  Estás usando el l10n_es que hay en el repositorio de addons, que está desactualizado, debes usar el l10n_es de openerp-spain/6.1 que ya incluye esa corrección desde el principio.\n\n  Yes, this sequence exists in l10n_es from lp:openerp-spain/6.1 since revno 277\n\n\nPero si estoy usando eso. De hecho veo el cambio que indican::\n\n  $ bzr log |less\n\n  revno: 321\n  committer: Juan Antonio Martin <jamartin@lambdasoftware.net>\n  branch nick: 6.1\n  ...skipping...\n  revno: 277\n  committer: Omar (pexego) <omar@pexego.es>\n  branch nick: 6.1_new\n  timestamp: Mon 2012-01-23 13:34:32 +0100\n  message:\n    [FIX] Use of ir module in l10n_es_toponyms_region and l10n_es_toponyms.\n    > [REF] l10n_es_toponyms: config.ES.toponyms -> config.es.toponyms.\n    > [ADD] l10n_es: Account journal sequence with references from l10n_es_pyme_account.\n    > [REF] l10n_es: Closed method for terceros_rec, terceros_pay and tax changed to unreconciled\n\n\nPruebo cambiando el orden en addons_path: Reinstalo la base de datos y el server, pero se repite el error.\nEn la prueba anterior había dejado el primero el addons del propio servidor. Ahora voy a poner el primero\nel de la localización española. Así si funciona.\n\n\nProblema 4: : ¡El nombre del diaro debe ser único por compañía!\n---------------------------------------------------------------\nEn \"Generar plan contrable a partir de plan contable\"\nNo me pasa ya en una nueva base de datos curso_nov2 (habia olvidado lo de secuencias separdas)\n\nProblema 5: Al intentar crear los ejercicios fiscales. Uncaught Error: Unknown field state in domain [[\"state\",\"in\",[\"done\"]]]\nMe estaba equivocando de botón. Ya no me pasa\n\n\nEl cliente no lo puedo usar desde el virtualenv, para ello lo lanzo con mi python de sistema.\n\n\n",
+			"contents": "==========\nAsistentes\n==========\n\nJuan Ignacio Ubeda. Profesor\nAlfredo de la Fuente Muniain. Profesor\n\nAlejandro Santana (Empresa: Anubía en Galicia en Vigo) Arch linux\nCarlos Llamas Bruzzone. Datamatic (Uruguay).\n\nMikel Trasserra (Minorisa)\nDavid Ponsa\nMiguel Angel Castillo\n\nJuan José Inge. Sorrio (Vizcaya). Ingeos.\nJorge Lopez Monterubio\n\n\n============\nDía 1. 30/10\n============\n\nVemos presentación, usando screenleap, y hablamos todos por skype.\n\nArquitectura\n------------\nKoo: cliente que desarrolló una empresa española llamada ~Nantic\n\nProtocolos.\nNet-rpc: 8070\nxml-rpc: 8069\n\nLos módulos van en la carpeta \"addons\". Normalmente o se copian o se hacen enlaces simbólicos,\ntambién se pueden añadir las rutas a los módulos en el fichero de configuración (separados por coma).\n\nEn la 6.1 se arrancan los dos servidores a vez (servidor web y openerp).\n\nNormalmente la instalación se hace en linux, no se recomienda instalar en windows.\n\nIgnacio no usa los instaladores para instalar en producción. Lo usa todo en un\ndirectorio, que permite tener por ejemplo varios simultaneamente. El lo instala\ncomo \"en desarrollo\"\n\nLa comunidad\n------------\nLaunchpad.\nLa comunidad española: grande, muchos partners, y mucho movimiento. De las más\npotentes en openerp. Grupo de localización españa.\n\nAna Juaristi está desde el principio.\nPechego\nMontic\n\nLuego da los nicks y nos pide que nos registremos en la localización española.\n\n\nRAD OpenObject y enlaces de interes\n-----------------------------------\ndoc.openerp.com\nwww.openerpsite.com: Blog Avanzosc/Ana Juaristi\nwwww.informaticartica.blogspot.com: blog del profesor. Juan Ignacio.\n\ngrupo de google de localización española: openerp-spain\n\nEl projecto de Medial se paró.\n\n\nLaunchpad\n---------\nVemos acceso con Launchpad\n\nEn launchpad el projecto se llama openobject\nhttps://launchpad.net/openobject\nY tiene proyectos hijos como:\nhttps://code.launchpad.net/openobject-server\n\nInstalo bzr y me hago usuario en launchpad. Con contraseña.\nExiste la herramienta Bazaar Explorer\n\nUsan gunicorn para que se utilizen todos los procesadores.\nNormamente se abre el gunicrom.conf.py y se edita.\n\nNos enseña como reportar un bug.\nLo hace en code.launchpad.net/~/avanzosc/\nLanchpad usa Rosetta para traducir. Se guarda cada 10 términos.\n\nMe mandan un correo y puedo entrar en el moodle de openerp\n\nTerminal\n--------\nAñadir al sys.path tanto openerp como addons\ndb, pool = openerp.pooler.get_db_and_pool('test_kitchen')\n\n\n[14:18] <pcaro> hi all\n[14:20] <pcaro>  anyone know how to get python shell of openerp? Adding \"openerp\" and \"addonds\" to pythonpath y can accesses my module model class, but then I need cursor and uid. I am a newbe trying practice with the orm ...\n[14:21] --> noaXess se ha unido a este canal (~noaXess@catv-165-002.tbwil.ch).\n[14:22] <flox> depending what you try to do, you can use ERPpeek to try things\n[14:24] <flox> http://pypi.python.org/pypi/ERPpeek\n[14:26] --> chegga se ha unido a este canal (~checker@pd95caab3.dip0.t-ipconnect.de).\n[14:28] <pcaro> flox, thaks for the link. I am only trying practice with the orm. I am learning. In django and zope I usually test using a python shell. Isn't common to do that in openobject develoment?\n[14:29] [Whois] flox es ~florentxi@unaffiliated/flox (florentxicluna)\n[14:29] [Whois] flox es usuario en los canales: #openobject\n[14:29] [Whois] flox está conectado vía verne.freenode.net (Newark, NJ, US).\n[14:29] [Whois] flox ha estado inactivo durante 4 minutos y 32 segundos.\n[14:29] [Whois] flox ha estado conectado desde 13-11-12 14:03:25.\n[14:29] [Whois] flox está conectado ahora como flox.\n[14:29] [Whois] Fin de la lista WHOIS.\n[14:31] <Marmotte> maybe you can try my patch, which adds a --interactive argument to the openerp server (it launches the openerp server, then falls into a standard python interactive shell)\n[14:31] <Marmotte> https://code.launchpad.net/~syleam/openobject-server/trunk-interactive_mode/+merge/92148\n[14:32] <Marmotte> I use it for development purpose :)\n[14:33] <flox> ERPpeek does it too :-)\n[14:33] <Marmotte> with the same syntax as in modules ?\n[14:34] <flox> it's not documented, I've to add an helper\n[14:34] <Marmotte> I quickly tested ERPpeek, don't really use it for now\n[14:34] <Marmotte> (but I know I have to use it more :D)\n[14:35] <pcaro> Thanks!! What a goog community!! ERPpeek looks like impresive. I will use in the future.\n[14:36] <flox> well, it can either connect through RPC or using \"import openerp\"\n[14:36] <flox> then I've to add an helper: get_pool = openerp.modules.registry.RegistryManager.get\n[14:36] <flox> (I did it locally, but not yet committed)\n[14:36] <Marmotte> ok :)\n[14:36] <flox> which allows to grab a \"pool\" object\n[14:37] <flox> then cr = pool.db.cursor(), and you can play with it\n[14:37] <flox> I did it already for troubleshooting\n[14:37] <Marmotte> I only work on 6.0, \"import openerp\" is not available on this version :)\n[14:38] <flox> this feature of ERPpeek is only tested in 6.1\n[14:38] <flox> (for other versions, it supports RPC connection)\n\n\nDescarga\n--------\n\n::\n\n  ~/src/yaco/erp/curso\n  pcaro@davinci$ bzr branch lp:openobject-server/6.1\n\n  ~/src/yaco/erp/curso/openobject-server\n  pcaro@davinci$ bzr revno\n  4517\n\n\n  pcaro@davinci$ bzr pull\n  Using saved parent location: http://bazaar.launchpad.net/~openerp/openobject-server/trunk/\n  No revisions to pull.\n\n\nDescargar:\nserver, openerp-web, addons-extra, addons-community y localización española\n\nEl suele bajar el ninightly el servidor:\nnighty.openerp.com\nEste tiene ya dentro los addons oficiales.\n\nAquí están los addons oficiales.\nhttps://code.launchpad.net/openobject-addons\nextra-trunk son los addons de la 6.1\nPara la 7 hay un proyecto aparte openerp-extra-addons con una rama para la 7.\n\nhttps://code.launchpad.net/~openerp-community/openobject-addons/trunk-addons-community\n\n\n\nopenerp/server/openerp/addons\n\nInstalación\n-----------\n\nPara la 6.1 están todavía localizando, en avanzo tienen modulos localizados.\n\n# Forzar a crear un archivo de configuración en la carpeta de usuario\n# que lo genera: .openerp_serverrc se usa la opcción -s\n# Lo crea con las rutas sobre la que estoy ejecutando el servidor.\n./openerp-server -s\n\n# Para lanzar hay que indicar  el archivo de configuración\n./openerp-server --config=\"/home/pcaro/.openerp_serverrcc_613\"\n\nUsan el python del sistema de ubuntu\n\nJuan Ignacio tenía un script  para  la 6.0: http://openmrp.es/curso/depen\n\nNos enseña como instalar el postgresql y configurar el fichero pg_hba.conf\nCambia ident por md5 en \"local\", para conexión libre.\ncreateuser --createdb --username postgres --no-createrole --no-superuser --pwprompt nov2012\n\nLos logins y los password están almacenados en texto plano en openerp.\n\n\nInstalación de un servidor:\n1. Actualización del sistema\n1. Instalamos postgres y bz\n1. Instalar las dependencias\n1. Creamos la base de datos\n1. Modificar el pg_hba.conf, quitar el ident por md5\n1. sudo adduser --system --home=/opt/openerp --group openerp\n# Para loguear\n1. sudo su - openerp -s /bin/bash\n\n\nPara instalar con el servidor oficial, en server:\nsudo ./setup.py install\nQue lo install en /usr/local/lib/python2.7/dist-packages\n\nEn el archivo de configuración, en\naddons_path: rutas con directorios de módulos separados por comas\nadmin_passwd: contraseña en claro, \"superadminpassword\"\ndb_host: Host del servidor de base de datos\ndb_name: Si ponemos un nombre usa esa\ndb_port: 5432\ndb_template = template0\nlist_db: listar bases de datos\nlog_handler = [':INFO']\nlog_file = (False es todo en pantalla) El archivo *tiene* que existir\npid_file = Se indica si se quiere una ruta en concreto\nproxy_mode Para conexión segura con SSL. En el blog hay un tutorial\n\n\nnet_rpc es conexión segura.\nNo olvidar crear el archivo de log y que el usuario de openrpc sera el dueño del archivo de configuración con con chown, etc.\n\n\nEl propietario del archivo de configuración tiene que ser el mismo que ejecute\nel servidor (o tener permisos).\nTras el chown recursivo sule ponerle un 640\nHay un script de inicio dentro del server en carpeta server/install/\nun openerp-server.init\nNo olvidar poner update-rc.d para\n$ sudo update-rc.d openerp-server default\n\n\n\nLa 6.1 conecta el servidor con xmlrcp\n\nJuanjo usa vmplayer en el windows\n\nAntes usaban cherrypy, pero ahora va mejor con werkzeug\nWerzeug, en una ubuntu anterior al 12, es antiguo y es mejor instalarlo con pip\nsudo apt-get install python-pip, etc.\n\nUna vez lanzado se conecta uno al localhost:8069\n\n\nNueva base de datos. Configuración\n----------------------------------\n\nCrea una nueva base de datos\n\n1. En configuración, ir a usuario en administrador le damos permiso de ascceso,\nPonermos en usabilidad la vista extendida\n\n2. Así tengo la opcion \"Actualizar la lista de módulos\"\n\n3. Buscamos: \"l10n_es_pyme\" e instalamos \"l10n_es_pyme_account\". Instala  muchos módulos.\nNo poner simplemente el l10n_es_pyme\n\nPulsamos en instalar confiuración y cuando dice configurar el plan de cuentas (plan contable) hay que cancelar\n\n4. De nuevo se va uno al permiso del usuario y se da permisos. (tengo pantallazo)\n\nEn lo de configuración financiera para la compañía falla.\n\n5. Generar plan contrable a partir de plan contable.\nAsí que en confugraicón - asistentes de configuración, generar plan contable a partil de plantill ade plan contable.\nEn número de dígitos, luego no se puede cambiar, no hay problema con de más.\nPor defecto aparece cliqueado secuencias de diarios separadas. QUITAR siempre.\nPlantilla: plan general contable por defecto.\nHay un problema en la 6.1, el diario de efectivo choca con otro. Asi que se borra antes de aplicar o se renombra.\n\n6. Ahora se va contabilidad y al ver el plan contable da un error. SE va configuación, contabiidad financiera, periodos,\nejercicios fiscales crear: Ej 2012\nSe crean periodos mensuales o trimestales. Se elimina el periodo de apertura que te porque vamos a usar el asistente para crealos.\n\nLuego vamos al plan contable, a abrir.\n\nLo siguiente es la configuación de los diarios.\nHay que instalar simpre los módulos. (configuración, módulos): nan_account_inboice Sequence\n\nAsí en contabilidad, configuración, financira, diarios, en los diarios de compras, existen \"una lína datos de facturación\"\n\n\nNecesitaría un documento de configuración de un diario, dice que lo va a dar.\n\nEn acerca de: Está \"el activar el modo desarrollador\". Para quitar se quita el parámetro debug de la rl\n\nSomos el primer curso en la 6.1.\nNos bajamos el eclipse normal. pydev y plantillas para vistas xml y clases de python.\n\ntryton\n------\nEs un fork, el creador es un extrabajador. Le ha realizado cambios en el nucleo,\npor ejemplo soporta otras bases de datos.\nTiene pocos módulos, no tiene todavía la localización española.\nAhora mismo hay mucha diferencia. No se puede hacer una instalación de producción seria.\n\nopenerp 7??\nFecha de lanzamiento era octubre, pero siguen\n\nVirtualenv\n----------\nSiguiendo:\nhttp://toporojo.es/blog/2012/05/17/instalar-virtualenv-openerp-6-1-desde-cero/\n\n::\n\n  $ mkdir openerp6.1 && cd openerp6.1\n  $ bzr branch lp:openobject-server/6.1 server\n  $ bzr branch lp:openobject-addons/6.1 addons\n  $ bzr branch lp:openerp-web/6.1 web\n  $ bzr branch lp:openerp-spain/6.1 openerp-spain\n   bzr branch lp:~chucu/+junk/OERP6.1-requirements\n\n  Traceback (most recent call last):\n    File \"./openerp-server\", line 41, in <module>\n      import openerp\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/__init__.py\", line 38, in <module>\n      import service\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/service/__init__.py\", line 37, in <module>\n      import openerp.service.workers\n    File \"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/service/workers.py\", line 10, in <module>\n      import psutil\n  ImportError: No module named psutil\n\nLo instalo con pip y funciona.\n$ pip install psutil\n\n2012-10-30 12:25:09,541 21492 CRITICAL ? openerp.modules.module: Couldn't load module web\n2012-10-30 12:25:09,542 21492 CRITICAL ? openerp.modules.module: No module named docutils.core\n\n\n\nImportError: No module named docutils.core\n\nLo instalo con pip y funciona.\n$ pip install docutils\n\n\n\n=====\nDia 2\n=====\n\nHerramientas para instalar:\n\nEclipse\n-------\nPara desarrollar, necesitamos eclipse: con pydev y el soporte de xml\nRecomienda el eclipse clasic\n\nHelp -> Install new software ->  en work with: http://pydev.org/updates\n\nSe instala pydev.... Ahi que instalar unos certificados..\n\nPara abrir pydev. en window - open perspective - other- pydev\n\n\nWork with: en el desplegable (galileo, o la versión que tengamos). Yo indigo\n\nBusco Web, Xml. and java EE Development. Se despliga. Se instala Eclise XMl Editor and Tools\n\nEn windows - Preference - Pydev. Interpreter python. Si esta vacio se seleciona autoconfig.\n\nInstalamos las plantillas para desarrollar  en openerp.\nhttp://code.google.com/p/openerp-eclipse-template/\n\n\nPreferences - pydev - editor - templates- import - templates-openerp.xml\nSi tienes una plantilla __terp__ están importadas.\nSe recomienda modificar la de licencia. OpenERPLIcence\n\n\nPreferences - xml - xmlfiles - editor - templates- import - Openerp-eclipse-xml-template.xml\nsi tengo act_window ya está importado correctamente.\n\n\nPoedit\n------\napt-get install poedit\n\nPgAdmin\n-------\napt-get install pgadmin3\n\nEditor de copia xml. Xml copy editor\n------------------------------------\nLo usaremos para editar los xpath\n\napt-get install xmlcopyeditor\n\n\n\nObjetos de openerp\n===================\n\nEn el cliente pesado, en configuración - Personalización - Estructura de la base de datos\nUna factura por ejemplo es account.invoce\nEn el código está en /home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/addons/account\nComo no hay un account_invoce, está dentro de account. No hay ninguún invoce.py pero si un account_invoice.py\nEstá la clase. El nombre de la clase se  pone separado por guiones bajos.\n\nEjercicio: buscar el objecto empresa res.partner\nEstá en: base/res/res_partner.py\nTodos los objetos principales están en base.\nLos productos tienen su propio modulo.\n\nLanzo el cliente en verbose con:\npython openerp-client -v\nEn el cliente da información contextual. (tengo pantallazo)\npara ver lo mismo en el cliente web hay que usar la vista de desarrollador, en la \"i\" activando el modo desarrollador.\nTambién en con el over sobre el nombre del campo.\n\n\nEstructura de un módulo\n=======================\nSe va a addons y vemos el modulo idea\nRecomienda tener impreso el memento técnico. Que esta basado en el modulo educacional idea.\nhttp://doc.openerp.com/memento/OpenERP_Technical_Memento_v0.6.4.pdf\nOjo, bzr_set.py no funciona para la 6.1\n\nLo mínimo es el __init__, el modulo principal (idea.py) y el descriptor (__openerp__.py un  diccionario python)\nNormalmente las vistas no se separarn dentro de view sino que se meten a la misma altura del  modulo principal (idea.py)\n\nOpcionales:\n\n* i18n: Traducción\n* demo: Los datos se almacenan en xml o csv.\n* report: informes, report son en rml. Tira de plantillas mako.\n* security: permisos y grupos especificios. xml y csv\n* wizards. python y xmls para asistentes\n* workflow: flujos de trabajo\n* __terp__.py ahora se llama __openerp__.py\n\n::\n\n  (venv)~/src/yaco/erp/curso/openerp6.1/server/openerp/addons/idea\n  pcaro@davinci$ tree -L 1\n  .\n  ├── i18n\n  ├── idea_data.xml\n  ├── idea.py\n  ├── idea_view.xml\n  ├── idea_workflow.xml\n  ├── images\n  ├── __init__.py\n  ├── __openerp__.py\n  ├── report\n  ├── security\n  ├── test\n  └── wizard\n\nEl descriptor\n-------------\nNombre y versión\nLas categorías no está muy claro que se pone. Se puede poner una existente en otro módulo.\nEs para el usuario filtrar los módulos.\nComplejidad es nuevo.\nLa descripción aparace al instalar en el cliente.\ndepends: lista de dependancias de nuestro modulo. Siempre el base (pero no se pone si depende de otro por\ndependencias transitivas)\ninit_xml: vistas que inicializan datos en nuestro módulo.\nupdate_xml: Todos los archivos xml (y csv) que carga nuestro modulo para ver las vistas\ndemo_xml: Datos de inicialización de demo.\ntest: Lista de ficheros yml\ninstalable: siempre True\ncertificate: Si es un módulo certificado por openerp, ellos te han dado un número de certificación.\nimages: imagenes que se pueden cargar desde el modulo\napplication: True si creas una aplicación.\n\nFichero principal (idea.py)\n---------------------------\nClasses, modelos de base de datos, etc.\n\n\nUsuarios, permisos y grupos.\n============================\n\nEn configuración, usuarios (pantallazo), puedo indicar grupos ya formados.\nAdemás de los permisos simple de usuario, están los grupos de permisos.\nAquí están las pantallas menús y permisos de accesos.\nComo es difícil de controlar aquí los cambios, lo mejor es duplicar el grupo  y en la réplica trabajas.\nAsi por ejemplo se pueden crear grupos por trabajador, por departamento, etc.\nRecomienda que para cada usuario en el sistema crear un grupo. Así duplico el grupo, y quito el usuario del grupo inicial,\nañadiendo la nuevo. En es grupo es el que toqueteo.\n\nEn los grupos también están las reglas.\nPor ejemplo en gestión de ventas/User-Own Leads Only\n\nVentajas clientes web o gtk\n===========================\nCampos de fecha en gtk tienen funcionalidad que no tiene el web:\n\n* = hoy\n* +5d 5 días\n* +4w 4 semanas más de  la fecha que tengo\n\nEl cliente web tiene de bueno que primero tienes que pular en \"editar\"\nNosotros vamos a usar el gtk para desarrollar.\n\n\nNuevo proyecto en eclipse\n=========================\n\nNuevo proyecto para el servidor de openerp.\n-------------------------------------------\nfile - new - project - general - project- Nombre: Server 6.1 (quitamos use default location)\nEn location seleccionamos /home/pcaro/src/yaco/erp/curso/openerp6.1/server\nLuego nos vamos al proyecto - Segundo boton del ratón - convertir en proyecto python\nConfiguramos un lanzador, para ello  en el servidor se le añade la extensión .py al ejecutable del servidor (openerp-server.py).\n\nNuevo proyecto de discos musicales\n----------------------------------\nfile - new proejct - general - project - Nombre\nLo convertimos en proyecto pydev. También puedo elegir directamente pydev pero indicando (no configurar el pythonpath)\nNuevo directorio en el proyecto: disc_management\n\nEn este caso vamos a crear un archivo pythonm por modelo.\nCrearlos los archivos  con new - file (__init__.py y __openerp__.py)\nCreamos discs.py\n\nVemos los campos básicos.\n\nen el __init__.py Op<ctr-space> y agrego la licencia\n__openerp__.py: En el terminal __terp<ctr-space> es una plantilla antigua no de la 6.0\n\ndisc.py: licencia y plantilla openerp model (también esta antigua)::\n\n  from osv import osv\n  from osv import fields\n\n    class discs(osv.osv):\n        _name = 'discs'\n        _description = 'Disc Library'\n\n        _columns = {\n                'name':fields.char('Title', size=64),\n                'description': fields.text(\"Description\", size=256),\n                'year': fields.date('Published'),\n                'format': fields.selection([('vinyl', 'Vinyl'), ('cd', 'CD'), ('mp3', 'MP3'), ('mp4', 'MP4')], 'Format'),\n                'active': fields.boolean('Active'),\n            }\n    discs()\n\nSi es un nombre compuesto, en la clase se escribe con guionn bajo y el nombre separado con punto.\nPara la vista dist_management_view.xml\nctrl-space - Declaración de xml\nctrl-space - openerp_tab\nctrl-space - comentario\nctrl-space - menu item (solo con id y name)\n\nctrl-space - tree_view\n  En el nombre de la vista se pone lo mismo que el id pero con puntos.\n  modelo es el nombre de la clase\n\nctrl-space - form view (segundo botón - source - format permite formatear el xml)\nctrls-space - view_action\nctrls-space - menu_item_parent para submenus Al submenu se le dice el padre\n\n\nVamos a enlazar el módulo al servidro de open-erp en la consola\nUna vez enlacado: Configuración: Actualizar lista de módulos y debería encontrar uno más.\nVoy a  los módulos y lo instalo.\n\nSi se hacen cambios en las vistas hay que reinciar el servidor.\n\n\"active\" es un nombre de campo especial que hace como si estuviera borrado.\nEs una buena práctica tener un \"active\"\n\n\n===========\nDía 3. 8/11\n===========\n\nNos vuelve a repetir la descarga de la instalación.\nExplicando lo de los addons que se repiten. La filolosofía es no repetir trabajo\nque ya está hecho. En principio no deberían haber módulos iguales en ramas diferentes,\npero por ejemplo en la localización española, openerp ya incluye uno llamado l10n_es\nasí que está machacado.\n\nEl descarga el nightly (con addons oficiales)  y luego pone addons-extra (creando enlaces simbólicos sin machacar nada).\nDespués enlaces de los addons-community (tamboco machaca nada).\nLuego pone los addons de la rama española (oficial), quitando el modulo l10n_es, Después linca los modulos de la rama de avanzos. Esta rama sí machaca algunos oficiales, así que borra algunos.\n\nEl servidor de openerp lee los zips. Quidado se no tener zips en addons.\nMirar que no haya enlaces rotos.\n\n\n\nbase_module_record\n------------------\nEn configuración módulos *base_module_record*.\nTiene un  botón para ir grabando los movimientos que haces y crea un modulo nuevo\ncon toda la configuración que has hecho, sin tener que desarrollar nada.\n\n\nEjercicio de crear los autores\n------------------------------\nVista de lista: nombre\nvista formulario: nombre, activo\nAcción de ventana con \"autores\".\n\nPara canciones es lo mismo\nVista de lista: nombre\nvista formulario: nombre, activo, tracktime\nAcción de ventana con \"autores\".\n\nCreación de una vista de búsqueda\n---------------------------------\nHacer en el ejercicio un botón para filtar los  inactivos\n\n\nValores por defecto.\n--------------------\nHacemos que el campo de selección tenga por defecto cd  y\nque activo sea True. Para ello se usa *_defaults* y llamables::\n\n  _defaults= {\n    'format': lambda *a: 'cd',\n    'active': lambda *a: True,\n  }\n\nCampos relacionales\n-------------------\n\nVemos los widgets:\n\n* One2many: Vemos los campos relacionales en pedidos, en lineas de de pedido.\n  El widget tiene botones + y paginador\n* Many2One en el pedido se ven como carpetitas\n* En catagorias de clientes vemos el many2many (Tiene un boton en gtk con nombre 'Añadir').\n\nRellenamos el ejemplo:\n\nLos nombres de tablas intermedias de many2may se  suelen terminar con el prefijo: 'rel'. Ejemplo::\n\n    _columns = {\n          'discs_ids': fields.many2many('discs', 'auth_disc_rel', 'author_id', 'discs_id', 'Discs')\n      }\n\nPara solucionar problemas con importaciones y creación, crea una nueva herencia de discos\npara añadir el nuevo campo (en lugar de hacerlo en discs.py)::\n\n    _columns = {\n            'name': fields.char('Name', size=64),\n            'discs_ids': fields.many2many('discs', 'auth_disc_rel', 'author_id', 'discs_id', 'Discs')\n            'active': fields.boolean('Active'),\n        }\n\nPara el one2many::\n\n  'song_ids': fields.one2many('song', 'author', 'Singing songs'),\n\n\n\nLuego añadimos los campos a las vistas.\n\nCampos obligatorios\n-------------------\nBasta con poner el atributo *required* a True en el  field.\nEn la interfaz de usuario gtk se pone azul.\n\nCampos de solo lectura\n----------------------\nBasta con poner el atributo *readonly* a True en el  field.\nEn la interfaz de usuario gtk ya está de solo lectura.\n\n\nBotón\n-----\nHacemos un botón básico en autores::\n\n  def button_ok(self, cr, uid, ids, *args):\n      print 'Botón ok pulsado!'\n      return True\n\nY ponemos el boton en la vista formulario del autor::\n\n  <button name=\"button_ok\" string=\"Mostrar mensaje\" type=\"object\" icon=\"gtk-ok\" />\n\nPregunta: ¿Qué pasa al desinstalar un módulo?\nAl desinstalar un módulo, los datos siguen en base de datos.\n\n\nContexto, Agrupaciones y coloreado\n----------------------------------\nNos muestra en un modulo como poner contexto, agrupaciones y coloreado.\n\nLos colores en el tree lo hace  con un atributo colors::\n\n  colors=\"red:format in ('cd');blue:format in ('mp3');#FF0008:format in ('mp4')\"\n\n\nEn la vista search  de los discs. Mete un *newline* y debajo un grupo con \"span=0\"::\n\n  <group expand=\"0\" string=\"Group by curso\" grups=\"base.group_extended\">\n    <filter .... context=\"{'grop_by':'year'}\" domain=\"[]\"\n  </group>\n\n===========\nDía 4. 13/11\n===========\n\nVamos revisando el memento técnico.\n\nEl campo select no se usa mucho.\n\nEl atributo translate=True, añade una banderita y eso da la opción de traducir el campo.\n\nEn los campos binarios hay dos opciones en la vista.\n  * Por defecto aparece: seleccionar, abrir, guardar como y elminar\n  * En la vista pone widget=\"image\" y aparecen icondos para guardar y tal y muetra la imagen.\n\nCampos reference: Se hace referencia a campos ya existentes usando las propiedades del campo original.\n\nForm elements\n-------------\ncolspan, col: Por defecto openerp divide la pantalla en 4.\ninvisible: campos que tienen que estar en las vistas, pero que sean invisibles para el usuario.\n  Tambien se pueden poner condiciones, if un campo no está creado poner estos campos invisibles, etc.\npassword: tiene el incoveniente que en modo lista se ve texto plano!! Así que ocultarlo simpre en modo lista\non_change: es de lo más usado.\nPrestar atención a los widgets como progessbar, many2may, email, etc\nVemos uso de notebook y page\n\nEjercicio: Módulo de cocina\nIdeas:\n\n* coste y precio se pude copiar del módulo de producto.\n* poner la biografía con un notebook y un page\n* Los cocineros no se relacionan con usuario, aunque es lo que se haría en un modelo\nserio\n\nNos pasará el modulo como muestra.\n\nLos _name de las clases tienen que ser unicos así que se suele separar por puntos\nEj: cooking.restaurant\n\nHerencias útiles:\n\nproduct_product. Producto.\nres.partner.address Direcciones de empresa.\n\n============\nDía 5. 15/11\n============\n\nSe presenta Alfredo.\nNos envía un pdf\n\nEvento \"on_change\"\n------------------\nLos parámetros extra (despúes de self, cr, uid, ids)son fields.\n\nExplica dos atributos nuevos de los campos (ejemplo con lineas de coste y de investigación):\ndomain: Indica una condición para le one2many. Sólo mostrará lineas con una condición\nattrs: Da atributos con condiciones, Ej: el atributo readonly (de la línea) será True si historical_ok is True.\n\nEs importante los domains y los attrs hayq que definirlos en dos sitios SIEMPRE.\nEn el modelo y en la vista xml.\n\nCampo referencia\n----------------\nSe puede definir un grupo de objectos a los que puedo acceder, o crear etc a través del campo.\nPara definir los objetos a los que podemos hacer referencia, debemos de ir a ConfiguraciónObjetos de Bajo Nivel / Solicitudes / Tipos de referencia en solicitudes.\nVer addons/sale/sale_data.xml\nSe indica una función en el atributo *select* para seleccionar el objecto a tratar.\nSiempre se suele usar la misma.\nOjo: en las plantillas pone una lista en el select en lugar de la función.\n\n\nCampos calculados\n-----------------\nNos explica los campos calculados siguiendo su documento\n\n\nCampos \"related\"\n----------------\nCopia el valor de un campo que esté en otra tabla\nAdemás del campo de realación hay que VOLVER A INDICAR en relation la tabla de la relación.\n\n\nHerencia\n--------\n\nDe classes\n++++++++++\nSe heredan todos los atributos y los métodos.\nres.partner se refiere tanto a clientes como a proveedores.\n\nLa nueva clase debe hereader de osv.osv y por convención se le pone el mimo nombre que la padre.\nHay que poner el _inherit con el nombre del que queremos heredar.\nVer ejemplo de añadir campo facebook.\n\nNos va a indicar una nomenclatura.\n\nEjemplo: en un one2mamy se llama el atributo con nombre de clase (con guiones) + '_ids'\nSi es una may2one es con sufijo '_id'\n\nSobrescribir métodos. Si dos modulos sobrescribe lo mismo es por dependencias definidas el orden de carga.\n\nDe vistas\n+++++++++\nUna vista que hereda tiene un field indicando la herencia::\n\n    <field name=\"inherit_id\" ref=\"carpetapadre.idVistaPadre\" />\n\ncarpetapadre: Es la carpeta del modulo. La que cuelga de addons Ej: acount.\nidVistaPade: El id del record. con model ir.ui.view y que tiene el tipo form\n\nNomenclatura: las vista de herencia, se les pone el mismo id que del padre pero\nterminado en '_inh' (de inherid).\n\nEn la arquitectura de la vista (fild arch) añado los campos nuevos y usamos el\natributo position para indicar dónde va el nuevo campo::\n\n     <field name=\"campo1\" position=\"after\">\n        <field name=\"nuevocampo\" />\n    </field>\n\nEl valor de position puede ser: after, before o replace.\nPara ocultar un campo es poner position=\"replace\"  sólo sin volver a definir::\n\n    <field name=\"campo1\" position=\"replace\" />\n\nPara meter algo que no sea un field, tengo que usar xpath.\nNota el ejemplo usa un field, pero podría usar un group, o un button, para\nla seleccón de xpath::\n\n    <xpath expr=\"/form/group/field[@name='stock_id']\" position=\"after\">\n        <field name=\"journal_id\" colspan=\"4\"/>\n    </path>\n\nEn xpath se suelen usar rutas relativas de xpath, con \"//\" dentro de la expresión xpath.\n\n\nNomenclatura: Si hago módulos de extensión se suelen llamar son sufijo '_ext'\ny a veces con prefijo nombre de empresa.\nLos modulos igual: author_ext.py y author_view_ext.xml\n\nNota: Alfredo recomienda tener ficheros de vistas separados.\n\n=============================\nDía 6. 20/11 Vistas avanzadas\n=============================\n\nHoy es Juan Ignacio el profesor.\n\nExplicación sobre colspan.\nPor defecto la pantalla está divido en 4. Por defecto un widget toma 2 (label + campo)\nEl comienzo del campo se situa en relación al label.\n\nNos enseña como crear una cuenta y como crear un proyecto en launchpad.\nhttps://launchpad.net/projects/+new\n\nNos enseña bzr:\n\n`Bazar en 5 minutos <http://doc.bazaar.canonical.com/beta/es/mini-tutorial/index.html>`_.\n\nHacemos el push directamente a launchpad::\n\n    bzr push lp:~pcaro/prueba-curso-openero/trunk\n\nhttps://launchpad.net/prueba-curso-openero/trunk/+setbranch\n\nCrear una nueva serie es como una rama.\n\nVistas avanzadas\n================\nVeo como con \"xml copy editor\" puedo probar si una expresión xpath es correcta (f9)\n\nPara definir más de un xpath hay que meterlos dentro de una etiqueta data.\n\nVamos revisando el módulo idea\n------------------------------\nEl modulo idea sigue usando los select pero ya casi no se usan.\nDesde la versión 5 por ejemplo tampoco se hacen accesos directos a la base de datos.\n\nLos botones normales llevan en el nombre, el nombre del método. Lod botones de tipo\nacción tienen nombre de sustitución. Ejemplo: %(idea.action_ida_post_vote)d\n\nEn los menus se puede añadir el campo \"sequencia\" con prioridades. Menor número,\nsignifica mayor prioridad.\n\n\nVistas kanban\n-------------\nEn la 6.1 sólo los proyectos tienen vista de este tipo. En la 7.0 ya todos.\nLo vemos en project/project_view.xml\nLas vistan kanban sólo se ven en el web.\nPara mirar, mejor en trunk (7.0) la vista de producto.\n\n\nEjercicio 1\n-----------\n\n1. Instalamos base_contact\n2. En libreta de direcciones - contactos, añadir una solapa redes sociales.\n\n",
 			"file": "curso_openerp.rst",
-			"file_size": 30374,
-			"file_write_time": 1352814438000000,
+			"file_size": 31015,
+			"file_write_time": 1353411909000000,
 			"settings":
 			{
-				"buffer_size": 32719,
+				"buffer_size": 30820,
 				"line_ending": "Unix"
 			}
 		},
 		{
-			"file": "/home/pcaro/tmp/test_openerp_buildout/parts/openerp-6.1-20121106-003219/openerp/addons/idea/idea.py",
+			"file": "/home/pcaro/src/yaco/erp/erp/fabfile.py",
 			"settings":
 			{
-				"buffer_size": 13769,
+				"buffer_size": 2309,
 				"line_ending": "Unix"
 			}
 		},
 		{
-			"contents": "========\nEmpresas\n========\n\nPartners openerp en España: http://www.openerp.com/es/taxonomy/term/99\n\n\nAvanzoc\n-------\nLa empresa que nos da el curso.\n\n\nzikzakmedia\n------------\nhttp://www.zikzakmedia.com/es/sobre-nosotros\n\nTrabajan con Tryton además de openerp\nTambién hacen cosas django\n\nTienen un sitema de openerp en la nube: http://www.zzsaas.com/\nhttps://bitbucket.org/zikzakmedia/\nhttps://github.com/zikzakmedia\n\n\nAula erp es una projecto en común de zikzakmedia y avanzos.\nAhora está un poco parado. Hay otro proyecto en camino.\nLos funcionales de la 6 están baratos y los de la 5 son\n\nNanty?\n--------\n\n\nTop Consultant Software Creations S.L\n-------------------------------------\nPartner de Plata!!!\nSan Sebastián de los Reyes. Madrid\n\n\n\n\n\nViavansi\n--------\n\n\n========\nUsuarios\n========\nFlorent Xicluna\n----------------\nMe ha contestado en el irc. Nick flox\nEl autor de http://pypi.python.org/pypi/ERPpeek\n\nSylvain Garancher\n-----------------\nMe ha contestado en el irc. Tiene un parche (que no fue aceptado) para ejecutar una shell\nen el servidor de openerp\nirc nick: Marmotte\n\n",
-			"file": "no_publicar.txt",
-			"file_size": 543,
-			"file_write_time": 1352801456000000,
+			"contents": "\nValidación pep8 y pyflakes\n==========================\n\nValidación xml\n==============\n\nDentro de server están las gramáticas relaxNG.\n\npcaro@davinci$ busca rng\n./import_xml.rng\n./addons/base/rng\n./addons/base/rng/view.rng\n\n\n",
+			"file": "openerp_sublime.rst",
+			"file_size": 172,
+			"file_write_time": 1353410148000000,
 			"settings":
 			{
-				"buffer_size": 1085,
-				"line_ending": "Unix"
-			}
-		},
-		{
-			"contents": "\n",
-			"settings":
-			{
-				"buffer_size": 1,
-				"line_ending": "Unix"
-			}
-		},
-		{
-			"file": "kitchen/ejercicio_cocina_2012.txt",
-			"settings":
-			{
-				"buffer_size": 739,
-				"line_ending": "Windows"
-			}
-		},
-		{
-			"file": "kitchen/kitchen_view.xml",
-			"settings":
-			{
-				"buffer_size": 1583,
-				"line_ending": "Unix"
-			}
-		},
-		{
-			"file": "kitchen/recipe.py",
-			"settings":
-			{
-				"buffer_size": 576,
-				"line_ending": "Unix"
-			}
-		},
-		{
-			"file": "/home/pcaro/tmp/test_openerp_buildout/buildout.cfg",
-			"settings":
-			{
-				"buffer_size": 1131,
+				"buffer_size": 224,
 				"line_ending": "Unix"
 			}
 		}
 	"build_system": "Packages/Python/Python.sublime-build",
 	"command_palette":
 	{
-		"height": 103.0,
+		"height": 126.0,
 		"selected_items":
 		[
 			[
+				"opener",
+				"Snippet: opener_tag"
+			],
+			[
+				"de",
+				"Snippet: xml declaration"
+			],
+			[
+				"op mo",
+				"Snippet: OpenERP : model"
+			],
+			[
+				"mode",
+				"Snippet: Model"
+			],
+			[
+				"inhe",
+				"Snippet: form_view_inherit"
+			],
+			[
+				"decl",
+				"Snippet: xml declaration"
+			],
+			[
+				"snippet: Op",
+				"Snippet: opener_tag"
+			],
+			[
+				"model",
+				"Snippet: Model"
+			],
+			[
+				"snip inhe",
+				"Snippet: _inherits"
+			],
+			[
+				"snippet: inh",
+				"Snippet: _inherit"
+			],
+			[
+				"side",
+				"View: Toggle Side Bar"
+			],
+			[
+				"snipp refere",
+				"Snippet: fields.reference"
+			],
+			[
+				"python",
+				"Set Syntax: Python"
+			],
+			[
+				"sideb",
+				"View: Toggle Side Bar"
+			],
+			[
 				"Snippet: xml",
 				"Snippet: xml declaration"
 			],
 	},
 	"file_history":
 	[
+		"/home/pcaro/tmp/liferay-portal-6.1.1-ce-ga2/jboss-7.1.1/domain/configuration/domain.xml",
+		"/home/pcaro/tmp/liferay-portal-6.1.1-ce-ga2/jboss-7.1.1/bin/domain.sh",
+		"/home/pcaro/tmp/jboss-as-7.1.1.Final/domain/configuration/host-master.xml",
+		"/home/pcaro/tmp/jboss-as-7.1.1.Final/domain/configuration/host.xml",
+		"/home/pcaro/tmp/jboss-as-7.1.1.Final/domain/configuration/domain.xml",
+		"/home/pcaro/.bashrc",
+		"/home/pcaro/workspace/curso/mi_instalacion.rst",
+		"/home/pcaro/workspace/curso/disc_management_extension/__init__.py",
+		"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/addons/base/res/res_partner.py",
+		"/home/pcaro/tmp/test_openerp_buildout/buildout.cfg",
+		"/home/pcaro/workspace/curso/no_publicar.txt",
+		"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/addons/base/rng/view.rng",
+		"/home/pcaro/workspace/curso/disc_management_extension/disc_management_extendion_rest_partner_view_ext.xml",
+		"/home/pcaro/workspace/curso/disc_management_extension/author_ext.py",
+		"/home/pcaro/workspace/curso/disc_management_extension/author_ext_view.xml",
+		"/home/pcaro/workspace/curso/disc_management_extension/discs_ext_view.xml",
+		"/home/pcaro/workspace/curso/disc_management/author_view.xml",
+		"/home/pcaro/workspace/curso/disc_management_extension/discs_ext.py",
+		"/home/pcaro/tmp/openerp_dev_setup/Makefile",
+		"/home/pcaro/tmp/openerp_dev_setup/Makefile_helper.py",
+		"/home/pcaro/workspace/curso/disc_management_extension/__openerp__.py",
+		"/home/pcaro/workspace/curso/disc_management/__openerp__.py",
+		"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/addons/product/product.py",
+		"/home/pcaro/workspace/curso/kitchen/recipe.py",
+		"/home/pcaro/workspace/curso/kitchen/kitchen_view.xml",
+		"/home/pcaro/workspace/curso/kitchen/ejercicio_cocina_2012.txt",
+		"/home/pcaro/tmp/test_openerp_buildout/parts/openerp-6.1-20121106-003219/openerp/addons/idea/idea.py",
 		"/home/pcaro/workspace/curso/kitchen/__init__.py",
 		"/home/pcaro/workspace/curso/disc_management/__init__.py",
 		"/home/pcaro/workspace/curso/disc_management/disc_management_view.xml",
 		"/home/pcaro/Desktop/temporal/openerp_curso/openerp-eclipse-template-read-only/Openerp-eclipse-xml-template.xml",
 		"/home/pcaro/workspace/curso/disc_management/author.py",
 		"/home/pcaro/src/yaco/erp/curso/openerp6.1/addons/product/product.py",
-		"/home/pcaro/workspace/curso/kitchen/recipe.py",
-		"/home/pcaro/workspace/curso/disc_management/__openerp__.py",
 		"/home/pcaro/workspace/curso/kitchen/__openerp__.py",
 		"/home/pcaro/Desktop/temporal/openerp_curso/openerp-eclipse-template-read-only/templates-openerp.xml",
 		"/home/pcaro/workspace/curso/openerp_serverrc",
 		"/home/pcaro/src/yaco/proyectos-internos/yaco.ticket/.hg/hgrc",
 		"/tmp/tonteria.py",
 		"/home/pcaro/programas/hg-prompt/prompt.py",
-		"/home/pcaro/.bashrc",
 		"/home/pcaro/src/pcaro/little_scripts/requirements-dev.txt",
 		"/home/pcaro/src/pcaro/little_scripts/requirements.txt",
 		"/home/pcaro/.config/sublime-text-2/Packages/User/SideBarEnhancements/Open With/Side Bar.sublime-menu",
 		"/home/pcaro/workspace/curso/curso_openerp.txt",
 		"/home/pcaro/workspace/curso/.hg/hgrc",
 		"/home/pcaro/Desktop/temporal/openerp_curso/curso_openerp.txt",
-		"/home/pcaro/tmp/openerp_dev_setup/Makefile",
-		"/home/pcaro/tmp/test_openerp_buildout/buildout.cfg",
 		"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp_serverrc",
 		"/home/pcaro/src/yaco/erp/curso/openerp6.1/web/addons/web/controllers/main.py",
 		"/home/pcaro/.config/sublime-text-2/Packages/HTML/html.sublime-snippet",
 		"/home/pcaro/src/devUtils_out/requirements.txt",
 		"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/addons/idea/__openerp__.py",
 		"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/addons/account/account_invoice.py",
-		"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/addons/base/res/res_partner.py",
 		"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/addons/account/partner.py",
 		"/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/addons/crm/res_partner.py",
 		"/home/pcaro/src/yaco/erp/curso/openerp6.1/server/install/openerp-server.conf",
 		"/home/pcaro/.pythonbrew/venvs/Python-2.7.3/micrositios/lib/python2.7/site-packages/skwissh/templates/base/base.html",
 		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/system/admin.py",
 		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/site/static/css/custom.css",
-		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/templates/server-detail.html",
-		"/home/pcaro/micrositios/monitor/micromonitor/micromonitor/settings.py",
-		"/home/pcaro/micrositios/monitor/micromonitor/micromonitor/settings_local.py",
-		"/home/pcaro/micrositios/monitor/micromonitor/micromonitor/urls.py",
-		"/home/pcaro/micrositios/monitor/micromonitor/micromonitor/site/templates/layout.html",
-		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/templates/section-graph.html",
-		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/system/templates/system/base.html",
-		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/templates/section-probe.html",
-		"/home/pcaro/micrositios/monitor/micromonitor/micromonitor/skwissh_urls.py",
-		"/home/pcaro/tmp/test_django-skwissh/django-skwissh/skwissh/admin.py",
-		"/home/pcaro/micrositios/django/contrib/sites/admin.py",
-		"/home/pcaro/micrositios/monitor/micromonitor/micromonitor/templates/server-list.html",
-		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/templates/section-group.html",
-		"/home/pcaro/micrositios/monitor/micromonitor/micromonitor/system/admin.py",
-		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/skwissh_urls.py",
-		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/templates/server-list.html",
-		"/home/pcaro/tmp/test_django-skwissh/django-skwissh/skwissh/templatetags/skwissh_templatetags.py",
-		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/templates/cronlog_list.html",
-		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/templates/probe-list.html",
-		"/home/pcaro/tmp/test_django-skwissh/django-skwissh/skwissh/urls.py",
-		"/home/pcaro/.pythonbrew/venvs/Python-2.7.3/micrositios/lib/python2.7/site-packages/skwissh/templates/server-list.html",
-		"/home/pcaro/tmp/test_django-skwissh/django-skwissh/skwissh/models.py"
+		"/home/pcaro/src/yaco/proyectos/micrositios/monitor/micromonitor/micromonitor/templates/server-detail.html"
 	],
 	"find":
 	{
-		"height": 36.0
+		"height": 43.0
 	},
 	"find_in_files":
 	{
 		"case_sensitive": false,
 		"find_history":
 		[
+			"securi",
+			"PortalRealm",
+			"PortalREal",
+			"port",
+			"profile",
+			"domain",
+			"config",
+			"full-sockets",
+			" pos",
+			" pos ",
+			"pos",
+			"addons-extr",
+			"lang_get",
+			"float",
+			"config",
+			"colo",
+			"colo-",
+			"colo",
+			"#--------------------------------------------------------------------",
 			"def _product_price",
 			"_product_price",
 			"_(",
 			"admin:",
 			"form",
 			"content",
-			"form",
-			"title",
-			"mysite",
-			"url",
-			"urls",
-			"url",
-			"item2",
-			"TEMPLATE_CONTEXT_PROCESSORS",
-			"process",
-			"nav",
-			"../img/",
-			"img",
-			"thead",
-			"sortremove",
-			"input",
-			"user_change_password",
-			"password",
-			"password_change",
-			"password_change_template",
-			"change_pa"
+			"form"
 		],
 		"highlight": true,
 		"in_selection": false,
 	"groups":
 	[
 		{
-			"selected": 0,
+			"selected": 1,
 			"sheets":
 			[
 				{
 					"file": "curso_openerp.rst",
 					"settings":
 					{
-						"buffer_size": 32719,
+						"buffer_size": 30820,
 						"regions":
 						{
 						},
 						"selection":
 						[
 							[
-								5013,
-								5013
+								30819,
+								30819
 							]
 						],
 						"settings":
 							"syntax": "Packages/RestructuredText/reStructuredText.tmLanguage"
 						},
 						"translation.x": 0.0,
-						"translation.y": 2836.0,
+						"translation.y": 23905.0,
 						"zoom_level": 1.0
 					},
 					"type": "text"
 				},
 				{
 					"buffer": 1,
-					"file": "/home/pcaro/tmp/test_openerp_buildout/parts/openerp-6.1-20121106-003219/openerp/addons/idea/idea.py",
+					"file": "/home/pcaro/src/yaco/erp/erp/fabfile.py",
 					"settings":
 					{
-						"buffer_size": 13769,
+						"buffer_size": 2309,
 						"regions":
 						{
 						},
 						"selection":
 						[
 							[
-								1390,
-								1390
-							]
-						],
-						"settings":
-						{
-							"annotations":
-							[
-								"TODO",
-								"README",
-								"FIXME"
-							],
-							"csslint_options":
-							{
-								"adjoining-classes": "warning",
-								"box-model": true,
-								"box-sizing": "warning",
-								"compatible-vendor-prefixes": "warning",
-								"display-property-grouping": true,
-								"duplicate-background-images": "warning",
-								"duplicate-properties": true,
-								"empty-rules": true,
-								"errors": true,
-								"fallback-colors": "warning",
-								"floats": "warning",
-								"font-faces": "warning",
-								"font-sizes": "warning",
-								"gradients": "warning",
-								"ids": "warning",
-								"import": "warning",
-								"important": "warning",
-								"known-properties": true,
-								"outline-none": "warning",
-								"overqualified-elements": "warning",
-								"qualified-headings": "warning",
-								"regex-selectors": "warning",
-								"rules-count": "warning",
-								"shorthand": "warning",
-								"star-property-hack": "warning",
-								"text-indent": "warning",
-								"underscore-property-hack": "warning",
-								"unique-headings": "warning",
-								"universal-selector": "warning",
-								"vendor-prefix": true,
-								"zero-units": "warning"
-							},
-							"gjslint_ignore":
-							[
-								110
-							],
-							"gjslint_options":
-							[
-							],
-							"javascript_linter": "jshint",
-							"jshint_options":
-							{
-								"browser": true,
-								"evil": true,
-								"regexdash": true,
-								"sub": true,
-								"trailing": true,
-								"wsh": true
-							},
-							"pep8": true,
-							"pep8_ignore":
-							[
-								"E501"
-							],
-							"perl_linter": "perlcritic",
-							"pyflakes_ignore":
-							[
-							],
-							"pyflakes_ignore_import_*": true,
-							"sublimelinter": true,
-							"sublimelinter_delay": 2,
-							"sublimelinter_disable":
-							[
-							],
-							"sublimelinter_executable_map":
-							{
-							},
-							"sublimelinter_fill_outlines": false,
-							"sublimelinter_gutter_marks": false,
-							"sublimelinter_mark_style": "outline",
-							"sublimelinter_notes": false,
-							"sublimelinter_objj_check_ascii": false,
-							"sublimelinter_popup_errors_on_save": false,
-							"sublimelinter_syntax_map":
-							{
-								"C++": "c",
-								"Python Django": "python",
-								"Ruby on Rails": "ruby"
-							},
-							"sublimelinter_wrap_find": true,
-							"syntax": "Packages/Djaneiro/Syntaxes/Python Django.tmLanguage"
-						},
-						"translation.x": 0.0,
-						"translation.y": 2250.0,
-						"zoom_level": 1.0
-					},
-					"type": "text"
-				},
-				{
-					"buffer": 2,
-					"file": "no_publicar.txt",
-					"settings":
-					{
-						"buffer_size": 1085,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								783,
-								783
-							]
-						],
-						"settings":
-						{
-							"annotations":
-							[
-								"TODO",
-								"README",
-								"FIXME"
-							],
-							"csslint_options":
-							{
-								"adjoining-classes": "warning",
-								"box-model": true,
-								"box-sizing": "warning",
-								"compatible-vendor-prefixes": "warning",
-								"display-property-grouping": true,
-								"duplicate-background-images": "warning",
-								"duplicate-properties": true,
-								"empty-rules": true,
-								"errors": true,
-								"fallback-colors": "warning",
-								"floats": "warning",
-								"font-faces": "warning",
-								"font-sizes": "warning",
-								"gradients": "warning",
-								"ids": "warning",
-								"import": "warning",
-								"important": "warning",
-								"known-properties": true,
-								"outline-none": "warning",
-								"overqualified-elements": "warning",
-								"qualified-headings": "warning",
-								"regex-selectors": "warning",
-								"rules-count": "warning",
-								"shorthand": "warning",
-								"star-property-hack": "warning",
-								"text-indent": "warning",
-								"underscore-property-hack": "warning",
-								"unique-headings": "warning",
-								"universal-selector": "warning",
-								"vendor-prefix": true,
-								"zero-units": "warning"
-							},
-							"gjslint_ignore":
-							[
-								110
-							],
-							"gjslint_options":
-							[
-							],
-							"is_xml": false,
-							"javascript_linter": "jshint",
-							"jshint_options":
-							{
-								"browser": true,
-								"evil": true,
-								"regexdash": true,
-								"sub": true,
-								"trailing": true,
-								"wsh": true
-							},
-							"pep8": true,
-							"pep8_ignore":
-							[
-								"E501"
-							],
-							"perl_linter": "perlcritic",
-							"pyflakes_ignore":
-							[
-							],
-							"pyflakes_ignore_import_*": true,
-							"sublimelinter": true,
-							"sublimelinter_delay": 2,
-							"sublimelinter_disable":
-							[
-							],
-							"sublimelinter_executable_map":
-							{
-							},
-							"sublimelinter_fill_outlines": false,
-							"sublimelinter_gutter_marks": false,
-							"sublimelinter_mark_style": "outline",
-							"sublimelinter_notes": false,
-							"sublimelinter_objj_check_ascii": false,
-							"sublimelinter_popup_errors_on_save": false,
-							"sublimelinter_syntax_map":
-							{
-								"C++": "c",
-								"Python Django": "python",
-								"Ruby on Rails": "ruby"
-							},
-							"sublimelinter_wrap_find": true,
-							"syntax": "Packages/Djaneiro/Syntaxes/HTML (Django).tmLanguage"
-						},
-						"translation.x": 0.0,
-						"translation.y": 836.0,
-						"zoom_level": 1.0
-					},
-					"type": "text"
-				},
-				{
-					"buffer": 3,
-					"settings":
-					{
-						"buffer_size": 1,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								0,
-								0
-							]
-						],
-						"settings":
-						{
-							"auto_name": "",
-							"is_xml": false,
-							"syntax": "Packages/Text/Plain text.tmLanguage"
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"type": "text"
-				},
-				{
-					"buffer": 4,
-					"file": "kitchen/ejercicio_cocina_2012.txt",
-					"settings":
-					{
-						"buffer_size": 739,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								370,
-								370
-							]
-						],
-						"settings":
-						{
-							"annotations":
-							[
-								"TODO",
-								"README",
-								"FIXME"
-							],
-							"csslint_options":
-							{
-								"adjoining-classes": "warning",
-								"box-model": true,
-								"box-sizing": "warning",
-								"compatible-vendor-prefixes": "warning",
-								"display-property-grouping": true,
-								"duplicate-background-images": "warning",
-								"duplicate-properties": true,
-								"empty-rules": true,
-								"errors": true,
-								"fallback-colors": "warning",
-								"floats": "warning",
-								"font-faces": "warning",
-								"font-sizes": "warning",
-								"gradients": "warning",
-								"ids": "warning",
-								"import": "warning",
-								"important": "warning",
-								"known-properties": true,
-								"outline-none": "warning",
-								"overqualified-elements": "warning",
-								"qualified-headings": "warning",
-								"regex-selectors": "warning",
-								"rules-count": "warning",
-								"shorthand": "warning",
-								"star-property-hack": "warning",
-								"text-indent": "warning",
-								"underscore-property-hack": "warning",
-								"unique-headings": "warning",
-								"universal-selector": "warning",
-								"vendor-prefix": true,
-								"zero-units": "warning"
-							},
-							"gjslint_ignore":
-							[
-								110
-							],
-							"gjslint_options":
-							[
-							],
-							"is_xml": false,
-							"javascript_linter": "jshint",
-							"jshint_options":
-							{
-								"browser": true,
-								"evil": true,
-								"regexdash": true,
-								"sub": true,
-								"trailing": true,
-								"wsh": true
-							},
-							"pep8": true,
-							"pep8_ignore":
-							[
-								"E501"
-							],
-							"perl_linter": "perlcritic",
-							"pyflakes_ignore":
-							[
-							],
-							"pyflakes_ignore_import_*": true,
-							"sublimelinter": true,
-							"sublimelinter_delay": 2,
-							"sublimelinter_disable":
-							[
-							],
-							"sublimelinter_executable_map":
-							{
-							},
-							"sublimelinter_fill_outlines": false,
-							"sublimelinter_gutter_marks": false,
-							"sublimelinter_mark_style": "outline",
-							"sublimelinter_notes": false,
-							"sublimelinter_objj_check_ascii": false,
-							"sublimelinter_popup_errors_on_save": false,
-							"sublimelinter_syntax_map":
-							{
-								"C++": "c",
-								"Python Django": "python",
-								"Ruby on Rails": "ruby"
-							},
-							"sublimelinter_wrap_find": true,
-							"syntax": "Packages/Djaneiro/Syntaxes/HTML (Django).tmLanguage"
-						},
-						"translation.x": 0.0,
-						"translation.y": 225.0,
-						"zoom_level": 1.0
-					},
-					"type": "text"
-				},
-				{
-					"buffer": 5,
-					"file": "kitchen/kitchen_view.xml",
-					"settings":
-					{
-						"buffer_size": 1583,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								414,
-								414
-							]
-						],
-						"settings":
-						{
-							"annotations":
-							[
-								"TODO",
-								"README",
-								"FIXME"
-							],
-							"csslint_options":
-							{
-								"adjoining-classes": "warning",
-								"box-model": true,
-								"box-sizing": "warning",
-								"compatible-vendor-prefixes": "warning",
-								"display-property-grouping": true,
-								"duplicate-background-images": "warning",
-								"duplicate-properties": true,
-								"empty-rules": true,
-								"errors": true,
-								"fallback-colors": "warning",
-								"floats": "warning",
-								"font-faces": "warning",
-								"font-sizes": "warning",
-								"gradients": "warning",
-								"ids": "warning",
-								"import": "warning",
-								"important": "warning",
-								"known-properties": true,
-								"outline-none": "warning",
-								"overqualified-elements": "warning",
-								"qualified-headings": "warning",
-								"regex-selectors": "warning",
-								"rules-count": "warning",
-								"shorthand": "warning",
-								"star-property-hack": "warning",
-								"text-indent": "warning",
-								"underscore-property-hack": "warning",
-								"unique-headings": "warning",
-								"universal-selector": "warning",
-								"vendor-prefix": true,
-								"zero-units": "warning"
-							},
-							"gjslint_ignore":
-							[
-								110
-							],
-							"gjslint_options":
-							[
-							],
-							"is_xml": true,
-							"javascript_linter": "jshint",
-							"jshint_options":
-							{
-								"browser": true,
-								"evil": true,
-								"regexdash": true,
-								"sub": true,
-								"trailing": true,
-								"wsh": true
-							},
-							"pep8": true,
-							"pep8_ignore":
-							[
-								"E501"
-							],
-							"perl_linter": "perlcritic",
-							"pyflakes_ignore":
-							[
-							],
-							"pyflakes_ignore_import_*": true,
-							"sublimelinter": true,
-							"sublimelinter_delay": 2,
-							"sublimelinter_disable":
-							[
-							],
-							"sublimelinter_executable_map":
-							{
-							},
-							"sublimelinter_fill_outlines": false,
-							"sublimelinter_gutter_marks": false,
-							"sublimelinter_mark_style": "outline",
-							"sublimelinter_notes": false,
-							"sublimelinter_objj_check_ascii": false,
-							"sublimelinter_popup_errors_on_save": false,
-							"sublimelinter_syntax_map":
-							{
-								"C++": "c",
-								"Python Django": "python",
-								"Ruby on Rails": "ruby"
-							},
-							"sublimelinter_wrap_find": true,
-							"syntax": "Packages/XML/XML.tmLanguage"
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"type": "text"
-				},
-				{
-					"buffer": 6,
-					"file": "kitchen/recipe.py",
-					"settings":
-					{
-						"buffer_size": 576,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								204,
-								204
+								180,
+								180
 							]
 						],
 						"settings":
 					"type": "text"
 				},
 				{
-					"buffer": 7,
-					"file": "/home/pcaro/tmp/test_openerp_buildout/buildout.cfg",
+					"buffer": 2,
+					"file": "openerp_sublime.rst",
 					"settings":
 					{
-						"buffer_size": 1131,
+						"buffer_size": 224,
 						"regions":
 						{
 						},
 						"selection":
 						[
 							[
-								45,
-								45
+								57,
+								57
 							]
 						],
 						"settings":
 								"Ruby on Rails": "ruby"
 							},
 							"sublimelinter_wrap_find": true,
-							"syntax": "Packages/Djaneiro/Syntaxes/Buildout Config.tmLanguage"
+							"syntax": "Packages/RestructuredText/reStructuredText.tmLanguage"
 						},
 						"translation.x": 0.0,
 						"translation.y": 0.0,
 		"selected_items":
 		[
 			[
+				"micr",
+				"/home/pcaro/micrositios/micrositios.sublime-project"
+			],
+			[
+				"micro",
+				"/home/pcaro/micrositios/micrositios.sublime-project"
+			],
+			[
 				"mi",
 				"/home/pcaro/micrositios/micrositios.sublime-project"
 			],
 	"show_open_files": true,
 	"show_tabs": true,
 	"side_bar_visible": true,
-	"side_bar_width": 165.0,
+	"side_bar_width": 259.0,
 	"status_bar_visible": true
 }

disc_management/__openerp__.py

 # -*- encoding: utf-8 -*-
 ##############################################################################
 #
-#    Avanzosc, Open Source Management Solution    
+#    Avanzosc, Open Source Management Solution
 #    Copyright (C) 2004-2010 Juan Ignacio Ubeda (http://www.avanzosc.com). All Rights Reserved
-#    
+#
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
     This module manages a Disc Library
     """,
     "init_xml": [],
-    'update_xml': ['author_view.xml',
-                   'discs_view.xml',
+    'update_xml': ['discs_view.xml',
+                   'author_view.xml',
                    'songs_view.xml'],
     'demo_xml': [],
     'installable': True,

ejercicio_vistas_avanzadas.odt

Binary file added.

mi_instalacion.rst

+
+==============
+Mi Instalación
+==============
+
+Problema 1:  "None openerp.netsvc: Object Error"
+------------------------------------------------
+
+Con el servidor descargado de bazar me da error al acceder (crea y borra bases de datos perfectamente)::
+
+  2012-11-06 06:52:20,428 14244 ERROR None openerp.netsvc: Object Error
+  Object publisher_warranty.contract doesn't exist
+  Traceback (most recent call last):
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/netsvc.py", line 361, in dispatch_rpc
+      result = ExportService.getService(service_name).dispatch(method, params)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/service/web_services.py", line 585, in dispatch
+      res = fn(db, uid, *params)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py", line 167, in execute_kw
+      return self.execute(db, uid, obj, method, *args, **kw or {})
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py", line 121, in wrapper
+      return f(self, dbname, *args, **kwargs)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py", line 176, in execute
+      res = self.execute_cr(cr, uid, obj, method, *args, **kw)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/osv/osv.py", line 163, in execute_cr
+      raise except_osv('Object Error', 'Object %s doesn\'t exist' % str(obj))
+  except_osv: ('Object Error', "Object publisher_warranty.contract doesn't exist")
+
+
+Me he descargado el nightly build del 20 de octubre y con ese puedo entrar.
+
+Problema 2: account_refund_original no disponible
+-------------------------------------------------
+
+Al instalar la localización española (l10n_es_pyme_account) me dice::
+
+  Intenta instalar el módulo 'l10n_es_aeat_mod349' que depende del módulo 'account_refund_original'.
+  Este último módulo no está disponible en su sistema.
+
+Y eso que he actualizado todos los módulos, en la opción "Actualizar la lista de módulos"
+Me descargo los módulos extra y ya avanza::
+
+   bzr branch lp:openobject-addons/extra-trunk
+
+
+Problema 3: Al instalar la localización española
+------------------------------------------------
+
+::
+
+  2012-11-06 08:00:12,276 17906 ERROR curso openerp.tools.convert: Parse error in /home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-spain/l10n_es_pyme_account/pyme_data.xml:6:
+  <record id="account_journal_diariogeneral0" model="account.journal">
+              <field eval="&quot;&quot;&quot;GRAL&quot;&quot;&quot;" name="code"/>
+              <field eval="[(6,0,[])]" name="account_control_ids"/>
+              <field name="user_id" ref="base.user_root"/>
+              <field eval="0" name="centralisation"/>
+              <field eval="0" name="group_invoice_lines"/>
+              <field eval="&quot;&quot;&quot;general&quot;&quot;&quot;" name="type"/>
+              <field name="view_id" ref="account.account_journal_view"/>
+              <field eval="[(6,0,[])]" name="type_control_ids"/>
+              <field name="sequence_id" ref="l10n_es.sequence_journal"/>
+              <field eval="1" name="active"/>
+              <field eval="0" name="update_posted"/>
+              <field eval="&quot;&quot;&quot;General&quot;&quot;&quot;" name="name"/>
+              <field eval="0" name="refund_journal"/>
+              <field eval="0" name="entry_posted"/>
+          </record>
+  Traceback (most recent call last):
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py", line 890, in parse
+      self._tags[rec.tag](self.cr, rec, n)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py", line 848, in _tag_record
+      f_val = self.id_get(cr, f_ref)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py", line 867, in id_get
+      res = self.model_id_get(cr, id_str)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/convert.py", line 876, in model_id_get
+      return model_data_obj.get_object_reference(cr, self.uid, mod, id_str)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py", line 18, in lookup
+      r = self.lookup(self2, cr, *args)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py", line 46, in lookup
+      value = d[key] = self.method(self2, cr, *args)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/addons/base/ir/ir_model.py", line 654, in get_object_reference
+      data_id = self._get_id(cr, uid, module, xml_id)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py", line 18, in lookup
+      r = self.lookup(self2, cr, *args)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/openerp-6.1-20121019-233229/openerp/tools/cache.py", line 46, in lookup
+      value = d[key] = self.method(self2, cr, *args)
+    File "/home/pcaro/src/yaco/erp/curso/openerp6.1/server/openerp/addons/base/ir/ir_model.py", line 647, in _get_id
+      raise ValueError('No such external ID currently defined in the system: %s.%s' % (module, xml_id))
+  ValueError: No such external ID currently defined in the system: l10n_es.sequence_journal
+
+Leyendo en https://bugs.launchpad.net/openerp-spain/+bug/944218 dice que::
+
+  Estás usando el l10n_es que hay en el repositorio de addons, que está desactualizado, debes usar el l10n_es de openerp-spain/6.1 que ya incluye esa corrección desde el principio.
+
+  Yes, this sequence exists in l10n_es from lp:openerp-spain/6.1 since revno 277
+
+
+Pero si estoy usando eso. De hecho veo el cambio que indican::
+
+  $ bzr log |less
+
+  revno: 321
+  committer: Juan Antonio Martin <jamartin@lambdasoftware.net>
+  branch nick: 6.1
+  ...skipping...
+  revno: 277
+  committer: Omar (pexego) <omar@pexego.es>
+  branch nick: 6.1_new
+  timestamp: Mon 2012-01-23 13:34:32 +0100
+  message:
+    [FIX] Use of ir module in l10n_es_toponyms_region and l10n_es_toponyms.
+    > [REF] l10n_es_toponyms: config.ES.toponyms -> config.es.toponyms.
+    > [ADD] l10n_es: Account journal sequence with references from l10n_es_pyme_account.
+    > [REF] l10n_es: Closed method for terceros_rec, terceros_pay and tax changed to unreconciled
+
+
+Pruebo cambiando el orden en addons_path: Reinstalo la base de datos y el server, pero se repite el error.
+En la prueba anterior había dejado el primero el addons del propio servidor. Ahora voy a poner el primero
+el de la localización española. Así si funciona.
+
+
+Problema 4: : ¡El nombre del diaro debe ser único por compañía!
+---------------------------------------------------------------
+En "Generar plan contrable a partir de plan contable"
+No me pasa ya en una nueva base de datos curso_nov2 (habia olvidado lo de secuencias separdas)
+
+Problema 5: Al intentar crear los ejercicios fiscales. Uncaught Error: Unknown field state in domain [["state","in",["done"]]]
+Me estaba equivocando de botón. Ya no me pasa
+
+
+El cliente no lo puedo usar desde el virtualenv, para ello lo lanzo con mi python de sistema.
+
+
+====================
+Instalacion de bazar
+====================
+
+En sistemas debian::
+
+    apt-get install bzr bzrtools
+
+Para interfaz visual QT (`qbzr <http://doc.bazaar.canonical.com/plugins/en/qbzr-plugin.html>`_.)::
+
+    apt-get install qbrz
+
+Plugin  `colo <http://doc.bazaar.canonical.com/plugins/en/colo-plugin.html>`_::
+
+    mkdir -p ~/.bazaar/plugins
+    if [ ! -d ~/.bazaar/plugins/colo ]; then
+        echo Installing bzr-colo
+        bzr branch lp:bzr-colo ~/.bazaar/plugins/colo
+    fi
+
+bzrtools
+========
+bzr shelve
+bzr unshelve
+bzr shelf ls
+bzr shelf show
+bzr shelf del
+

openerp_sublime.rst

+
+Validación xml
+==============
+
+Dentro de server están las gramáticas relaxNG.
+
+pcaro@davinci$ busca rng
+./import_xml.rng
+./addons/base/rng
+./addons/base/rng/view.rng
+
+