====== Trucs d'OpenERP ======
===== Convertir report openoffice (sxw) a rml =====
cd bin/addons/base_report_designer/wizard/tiny_sxw2rml
./tiny_sxw2rml.py fitxer.sxw > fitxer.rml
===== Cerca dins del codi OpenERP =====
grep "text a cercar" * -r|grep "xml"|grep -v "msgid" |grep -v ".svn"|grep -v ".pyc"
===== tgz d'un mòdul d'OpenERP =====
tar --exclude=.svn --exclude=*pyc --exclude=*~ -cvzf modul.tgz modul
===== Traduccions en OpenERP ====
En OpenERP se utiliza la sintaxis al estilo gettext con _("texto") para marcar
el texto a traducir. El problema que tiene OpenERP a diferencia del
procedimiento habitual de gettext es que como se trata de un protocolo sin
estado, el idioma de la traducción puede ser distinto cada vez que se llama la
función. Por esto, a diferencia de la mayoría de aplicaciones de escritorio,
no se puede establecer el idioma del usuario de forma global.
Afortunadamente, en OpenERP tenemos la variable "context" en casi todas las
funciones y ahí dentro acostumbra a estar el idioma del usuario. Es
precisamente esto lo que utiliza OpenERP para las traducciones, pero tiene que
hacer un pequeño hack y tenemos que declarar la clase "_".
Es por esto, que en cualquier fichero que tengamos que traducir algo debemos
hacer el import correspondiente:
from tools.translate import _
Además, debemos asegurarnos que dónde están las llamadas a "_", está
disponible la variable "context". Es decir si tenemos algo del estilo:
def check(self, values):
if not values.get('field'):
raise osv.except_osv(_("Error"), _("Error!"))
def create(self, cr, uid, values, context={}):
self.mycheck(values)
No se va a traducir!! Tenemos que pasar el context como parámetro:
def check(self, values, context):
if not values.get('field'):
raise osv.except_osv(_("Error"), _("Error!"))
def create(self, cr, uid, values, context={}):
self.mycheck(values, context)
A parte de esto comentar que _() debe englobar sólo texto:
_("Value: %s") % valor
y no
_("Value: %s" % valor)
===== Correcció arbre de comptes =====
alter table account_account drop parent_left;
alter table account_account drop parent_right;
and restart the server with --update=account
===== OpenERP starting improvement =====
First thing I do after creating a new database (to develop) is to add some indexes like these:
CREATE INDEX ir_model_data__module_model_id__index ON ir_model_data (module, model, id);
CREATE INDEX ir_model_fields__model_state__index ON ir_model_fields (model, state);
That make reloading modules faster (so you save time each time you need to test your module):
SELECT ir_model_data.id FROM "ir_model_data" WHERE (ir_model_data.module IN (E'')) AND (ir_model_data.model IN (E'',E'',E'')) ORDER BY id;
(runs about 400 times when reloading modules) => goes from a total 1.8 seconds to 0.2 seconds.
SELECT * FROM ir_model_fields WHERE model=E'' AND state=E'';
(runs about 800 times when reloading modules) => goes from 1.0 second to 0.3 seconds.
That's more than 2 seconds saved each time you reload the addons or start the server.
===== Code debbuging =====
Try with this code:
import pdb; pdb.set_trace()
It will 'stop' the server and open a command-line debugger (http://docs.python.org/library/pdb.html) when the code reaches the set_trace() sentence. You can use "p variable-name" to examine variables, "n" to run next sencence, "c" to continue running, "l" to list the code... It will not replace an IDE debugger, but it's a fast and simple way to set a break-point. Smile
===== Error/log terminal =====
import netsvc
logger = netsvc.Logger()
logger.notifyChannel(_("Internet Domain"), netsvc.LOG_INFO, _("Mail from Account %s successfully Sent.") % (id))
logger.notifyChannel(_("Power Email"), netsvc.LOG_ERROR, _("Sending of Mail %s failed. Probable Reason:Could not login to server\nError: %s")% (id,error))
===== Canviar companyia/adreça principal =====
Si hem eliminat la companyia amb id=1 o l'adreça principal de l'empresa de la companyia amb id=1 podem tenir problemes en actualitzar el servidor OpenERP amb l'opció -u all.
Cal cercar les id de la nova companyia i de l'adreça principal de l'empresa de la companyia i executar aquests SQL:
UPDATE ir_model_data SET res_id=nova_id_companyia WHERE name='main_company';
UPDATE ir_model_data SET res_id=nova_id_adreca WHERE name='main_address';
===== Eliminar totes les empreses i adreces excepte les que pertanyen a les companyies =====
delete from res_partner where id not in (select partner_id from res_company);
delete from res_partner_address where partner_id not in (select partner_id from res_company) or partner_id is null;
===== Per TinyERP 4.2 (obsolet) =====
Exportar fitxer CSV per la traducció:
./tinyerp-server.py -l es_ES --i18n-export=travel.csv -d terp.4.2.0 --modules=travel
Importar fitxer CSV amb la traducció:
./tinyerp-server.py -l es_ES --i18n-import=travel.csv -d terp.4.2.0