diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py
index 3d0d3e4dda4..f5a9ab5a052 100644
--- a/openerp/addons/base/__openerp__.py
+++ b/openerp/addons/base/__openerp__.py
@@ -93,15 +93,11 @@ The kernel of OpenERP, needed for all installation.
'res/res_partner_image_demo.xml',
],
'test': [
- 'test/base_test.yml',
- 'test/test_osv_expression.yml',
- 'test/test_ir_rule.yml', # <-- These tests modify/add/delete ir_rules.
+ 'tests/base_test.yml',
+ 'tests/test_osv_expression.yml',
+ 'tests/test_ir_rule.yml', # <-- These tests modify/add/delete ir_rules.
],
'installable': True,
'auto_install': True,
- 'css': ['static/src/css/modules.css'],
- 'js': [
- 'static/src/js/apps.js',
- ],
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/addons/base/base.sql b/openerp/addons/base/base.sql
index b59ef8fedc9..e026ad57cd6 100644
--- a/openerp/addons/base/base.sql
+++ b/openerp/addons/base/base.sql
@@ -2,30 +2,20 @@
-- Pure SQL
-------------------------------------------------------------------------
--------------------------------------------------------------------------
--- IR dictionary
--------------------------------------------------------------------------
-
-create table ir_values
-(
- id serial,
- name varchar(128) not null,
- key varchar(128) not null,
- key2 varchar(256) not null,
- model varchar(128) not null,
- value text,
- meta text default NULL,
- res_id integer default null,
- primary key (id)
+CREATE TABLE ir_actions (
+ id serial,
+ primary key(id)
);
+CREATE TABLE ir_act_window (primary key(id)) INHERITS (ir_actions);
+CREATE TABLE ir_act_report_xml (primary key(id)) INHERITS (ir_actions);
+CREATE TABLE ir_act_url (primary key(id)) INHERITS (ir_actions);
+CREATE TABLE ir_act_server (primary key(id)) INHERITS (ir_actions);
+CREATE TABLE ir_act_client (primary key(id)) INHERITS (ir_actions);
--------------------------------------------------------------------------
--- Modules Description
--------------------------------------------------------------------------
CREATE TABLE ir_model (
id serial,
- model varchar DEFAULT ''::varchar NOT NULL,
+ model varchar NOT NULL,
name varchar,
state varchar,
info text,
@@ -34,103 +24,27 @@ CREATE TABLE ir_model (
CREATE TABLE ir_model_fields (
id serial,
- model varchar DEFAULT ''::varchar NOT NULL,
- model_id int references ir_model on delete cascade,
- name varchar DEFAULT ''::varchar NOT NULL,
+ model varchar NOT NULL,
+ model_id integer references ir_model on delete cascade,
+ name varchar NOT NULL,
relation varchar,
select_level varchar,
field_description varchar,
ttype varchar,
state varchar default 'base',
- relate boolean default False,
relation_field varchar,
translate boolean default False,
+ serialization_field_id integer references ir_model_fields on delete cascade,
primary key(id)
);
-ALTER TABLE ir_model_fields ADD column serialization_field_id int references ir_model_fields on delete cascade;
-
-
--------------------------------------------------------------------------
--- Actions
--------------------------------------------------------------------------
-
-CREATE TABLE ir_actions (
- id serial NOT NULL,
- name varchar(64) DEFAULT ''::varchar NOT NULL,
- "type" varchar(32) NOT NULL,
- usage varchar(32) DEFAULT null,
+CREATE TABLE res_lang (
+ id serial,
+ name VARCHAR(64) NOT NULL UNIQUE,
+ code VARCHAR(16) NOT NULL UNIQUE,
primary key(id)
);
-CREATE TABLE ir_act_window (
- view_id integer,
- res_model varchar(64),
- view_type varchar(16),
- "domain" varchar(250),
- primary key(id)
-)
-INHERITS (ir_actions);
-
-CREATE TABLE ir_act_report_xml (
- model varchar(64) NOT NULL,
- report_name varchar(64) NOT NULL,
- report_xsl varchar(256),
- report_xml varchar(256),
- auto boolean default true,
- primary key(id)
-)
-INHERITS (ir_actions);
-
-create table ir_act_report_custom (
- report_id int,
--- report_id int references ir_report_custom
- primary key(id)
-)
-INHERITS (ir_actions);
-
-CREATE TABLE ir_act_wizard (
- wiz_name varchar(64) NOT NULL,
- primary key(id)
-)
-INHERITS (ir_actions);
-
-CREATE TABLE ir_act_url (
- url text NOT NULL,
- target varchar(64) NOT NULL,
- primary key(id)
-)
-INHERITS (ir_actions);
-
-CREATE TABLE ir_act_server (
- primary key(id)
-)
-INHERITS (ir_actions);
-
-CREATE TABLE ir_act_client (
- primary key(id)
-)
-INHERITS (ir_actions);
-
-CREATE TABLE ir_ui_menu (
- id serial NOT NULL,
- parent_id int references ir_ui_menu on delete set null,
- name varchar(64) DEFAULT ''::varchar NOT NULL,
- icon varchar(64) DEFAULT ''::varchar,
- primary key (id)
-);
-
-select setval('ir_ui_menu_id_seq', 2);
-
----------------------------------
--- Res users
----------------------------------
-
--- level:
--- 0 RESTRICT TO USER
--- 1 RESTRICT TO GROUP
--- 2 PUBLIC
-
CREATE TABLE res_users (
id serial NOT NULL,
active boolean default True,
@@ -138,146 +52,44 @@ CREATE TABLE res_users (
password varchar(64) default null,
-- No FK references below, will be added later by ORM
-- (when the destination rows exist)
- company_id int,
- partner_id int,
- primary key(id)
-);
-alter table res_users add constraint res_users_login_uniq unique (login);
-
-CREATE TABLE res_groups (
- id serial NOT NULL,
- name varchar(64) NOT NULL,
+ company_id integer, -- references res_company,
+ partner_id integer, -- references res_partner,
primary key(id)
);
-CREATE TABLE res_groups_users_rel (
- uid integer NOT NULL references res_users on delete cascade,
- gid integer NOT NULL references res_groups on delete cascade,
- UNIQUE("uid","gid")
-);
-
-create index res_groups_users_rel_uid_idx on res_groups_users_rel (uid);
-create index res_groups_users_rel_gid_idx on res_groups_users_rel (gid);
-
-
----------------------------------
--- Workflows
----------------------------------
-
-create table wkf
-(
+create table wkf (
id serial,
name varchar(64),
osv varchar(64),
- on_create bool default False,
+ on_create bool default false,
primary key(id)
);
-create table wkf_activity
-(
- id serial,
- wkf_id int references wkf on delete cascade,
- subflow_id int references wkf on delete set null,
- split_mode varchar(3) default 'XOR',
- join_mode varchar(3) default 'XOR',
- kind varchar(16) not null default 'dummy',
- name varchar(64),
- signal_send varchar(32) default null,
- flow_start boolean default False,
- flow_stop boolean default False,
- action text default null,
- primary key(id)
-);
-
-create table wkf_transition
-(
- id serial,
- act_from int references wkf_activity on delete cascade,
- act_to int references wkf_activity on delete cascade,
- condition varchar(128) default NULL,
-
- trigger_type varchar(128) default NULL,
- trigger_expr_id varchar(128) default NULL,
-
- signal varchar(64) default null,
- group_id int references res_groups on delete set null,
-
- primary key(id)
-);
-
-create table wkf_instance
-(
- id serial,
- wkf_id int references wkf on delete restrict,
- uid int default null,
- res_id int not null,
- res_type varchar(64) not null,
- state varchar(32) not null default 'active',
- primary key(id)
-);
-
-create table wkf_workitem
-(
- id serial,
- act_id int not null references wkf_activity on delete cascade,
- inst_id int not null references wkf_instance on delete cascade,
- subflow_id int references wkf_instance on delete cascade,
- state varchar(64) default 'blocked',
- primary key(id)
-);
-
-create table wkf_witm_trans
-(
- trans_id int not null references wkf_transition on delete cascade,
- inst_id int not null references wkf_instance on delete cascade
-);
-
-create index wkf_witm_trans_inst_idx on wkf_witm_trans (inst_id);
-
-create table wkf_logs
-(
- id serial,
- res_type varchar(128) not null,
- res_id int not null,
- uid int references res_users on delete set null,
- act_id int references wkf_activity on delete set null,
- time time not null,
- info varchar(128) default NULL,
- primary key(id)
-);
-
----------------------------------
--- Modules
----------------------------------
-
CREATE TABLE ir_module_category (
id serial NOT NULL,
- create_uid integer references res_users on delete set null,
+ create_uid integer, -- references res_users on delete set null,
create_date timestamp without time zone,
write_date timestamp without time zone,
- write_uid integer references res_users on delete set null,
+ write_uid integer, -- references res_users on delete set null,
parent_id integer REFERENCES ir_module_category ON DELETE SET NULL,
name character varying(128) NOT NULL,
primary key(id)
);
-
CREATE TABLE ir_module_module (
id serial NOT NULL,
- create_uid integer references res_users on delete set null,
+ create_uid integer, -- references res_users on delete set null,
create_date timestamp without time zone,
write_date timestamp without time zone,
- write_uid integer references res_users on delete set null,
+ write_uid integer, -- references res_users on delete set null,
website character varying(256),
summary character varying(256),
name character varying(128) NOT NULL,
author character varying(128),
- url character varying(128),
icon character varying(64),
state character varying(16),
latest_version character varying(64),
shortdesc character varying(256),
- complexity character varying(32),
category_id integer REFERENCES ir_module_category ON DELETE SET NULL,
description text,
application boolean default False,
@@ -292,45 +104,15 @@ ALTER TABLE ir_module_module add constraint name_uniq unique (name);
CREATE TABLE ir_module_module_dependency (
id serial NOT NULL,
- create_uid integer references res_users on delete set null,
+ create_uid integer, -- references res_users on delete set null,
create_date timestamp without time zone,
write_date timestamp without time zone,
- write_uid integer references res_users on delete set null,
+ write_uid integer, -- references res_users on delete set null,
name character varying(128),
- version_pattern character varying(128) default NULL,
module_id integer REFERENCES ir_module_module ON DELETE cascade,
primary key(id)
);
-CREATE TABLE res_partner (
- id serial NOT NULL,
- name character varying(128),
- lang varchar(64),
- company_id int,
- primary key(id)
-);
-
-
-CREATE TABLE res_currency (
- id serial PRIMARY KEY,
- name VARCHAR(32) NOT NULL
-);
-
-CREATE TABLE res_company (
- id serial PRIMARY KEY,
- name character varying(128) not null,
- parent_id integer references res_company on delete set null,
- partner_id integer not null references res_partner,
- currency_id integer not null references res_currency
-
-);
-
-CREATE TABLE res_lang (
- id serial PRIMARY KEY,
- name VARCHAR(64) NOT NULL UNIQUE,
- code VARCHAR(16) NOT NULL UNIQUE
-);
-
CREATE TABLE ir_model_data (
id serial NOT NULL,
create_uid integer,
@@ -343,7 +125,8 @@ CREATE TABLE ir_model_data (
date_update timestamp without time zone,
module varchar NOT NULL,
model varchar NOT NULL,
- res_id integer, primary key(id)
+ res_id integer,
+ primary key(id)
);
-- Records foreign keys and constraints installed by a module (so they can be
@@ -352,49 +135,64 @@ CREATE TABLE ir_model_data (
-- - for a constraint: type is 'u' (this is the convention PostgreSQL uses).
CREATE TABLE ir_model_constraint (
id serial NOT NULL,
- create_uid integer,
- create_date timestamp without time zone,
- write_date timestamp without time zone,
- write_uid integer,
date_init timestamp without time zone,
date_update timestamp without time zone,
module integer NOT NULL references ir_module_module on delete restrict,
model integer NOT NULL references ir_model on delete restrict,
type character varying(1) NOT NULL,
- name varchar NOT NULL
+ name varchar NOT NULL,
+ primary key(id)
);
-- Records relation tables (i.e. implementing many2many) installed by a module
-- (so they can be removed when the module is uninstalled).
CREATE TABLE ir_model_relation (
id serial NOT NULL,
- create_uid integer,
- create_date timestamp without time zone,
- write_date timestamp without time zone,
- write_uid integer,
date_init timestamp without time zone,
date_update timestamp without time zone,
module integer NOT NULL references ir_module_module on delete restrict,
model integer NOT NULL references ir_model on delete restrict,
- name varchar NOT NULL
+ name varchar NOT NULL,
+ primary key(id)
);
----------------------------------
--- Users
----------------------------------
-insert into res_users (id,login,password,active,company_id,partner_id) VALUES (1,'admin','admin',true,1,1);
-insert into ir_model_data (name,module,model,noupdate,res_id) VALUES ('user_root','base','res.users',true,1);
+CREATE TABLE res_currency (
+ id serial,
+ name varchar NOT NULL,
+ primary key(id)
+);
-insert into res_partner (id, name, lang, company_id) VALUES (1, 'Your Company', 'en_US', 1);
-insert into ir_model_data (name,module,model,noupdate,res_id) VALUES ('main_partner','base','res.partner',true,1);
+CREATE TABLE res_company (
+ id serial,
+ name varchar NOT NULL,
+ partner_id integer,
+ currency_id integer,
+ primary key(id)
+);
+CREATE TABLE res_partner (
+ id serial,
+ name varchar,
+ company_id integer,
+ primary key(id)
+);
+
+
+---------------------------------
+-- Default data
+---------------------------------
insert into res_currency (id, name) VALUES (1, 'EUR');
-insert into ir_model_data (name,module,model,noupdate,res_id) VALUES ('EUR','base','res.currency',true,1);
+insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('EUR', 'base', 'res.currency', true, 1);
+select setval('res_currency_id_seq', 2);
insert into res_company (id, name, partner_id, currency_id) VALUES (1, 'Your Company', 1, 1);
-insert into ir_model_data (name,module,model,noupdate,res_id) VALUES ('main_company','base','res.company',true,1);
-
+insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('main_company', 'base', 'res.company', true, 1);
select setval('res_company_id_seq', 2);
-select setval('res_users_id_seq', 2);
+
+insert into res_partner (id, name, company_id) VALUES (1, 'Your Company', 1);
+insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('main_partner', 'base', 'res.partner', true, 1);
select setval('res_partner_id_seq', 2);
-select setval('res_currency_id_seq', 2);
+
+insert into res_users (id, login, password, active, partner_id, company_id) VALUES (1, 'admin', 'admin', true, 1, 1);
+insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('user_root', 'base', 'res.users', true, 1);
+select setval('res_users_id_seq', 2);
diff --git a/openerp/addons/base/base_data.xml b/openerp/addons/base/base_data.xml
index b6c12e111ff..728f1d43647 100644
--- a/openerp/addons/base/base_data.xml
+++ b/openerp/addons/base/base_data.xml
@@ -11,15 +11,6 @@
child_id
-
en_US
@@ -75,7 +66,6 @@
-
--
Administrator
diff --git a/openerp/addons/base/i18n/ab.po b/openerp/addons/base/i18n/ab.po
index b607b97927a..30753346fc9 100644
--- a/openerp/addons/base/i18n/ab.po
+++ b/openerp/addons/base/i18n/ab.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:37+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:43+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/af.po b/openerp/addons/base/i18n/af.po
index 18368ca9625..9233a527405 100644
--- a/openerp/addons/base/i18n/af.po
+++ b/openerp/addons/base/i18n/af.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:43+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/am.po b/openerp/addons/base/i18n/am.po
index e01800e903e..31cef008f9e 100644
--- a/openerp/addons/base/i18n/am.po
+++ b/openerp/addons/base/i18n/am.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:43+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/ar.po b/openerp/addons/base/i18n/ar.po
index 94d519ede9f..2f9ab3a5e29 100644
--- a/openerp/addons/base/i18n/ar.po
+++ b/openerp/addons/base/i18n/ar.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:44+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/bg.po b/openerp/addons/base/i18n/bg.po
index 22143793621..b57f8eb1f79 100644
--- a/openerp/addons/base/i18n/bg.po
+++ b/openerp/addons/base/i18n/bg.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:45+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
@@ -579,7 +579,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_idea
msgid "Ideas"
-msgstr ""
+msgstr "Идеи"
#. module: base
#: model:ir.module.module,description:base.module_event
@@ -668,7 +668,7 @@ msgstr "Колумбия"
#. module: base
#: model:res.partner.title,name:base.res_partner_title_mister
msgid "Mister"
-msgstr ""
+msgstr "Господин"
#. module: base
#: help:res.country,code:0
@@ -720,7 +720,7 @@ msgstr "Персонализираните полета трябва да има
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_mx
msgid "Mexico - Accounting"
-msgstr ""
+msgstr "Мексико - Счетоводство"
#. module: base
#: help:ir.actions.server,action_id:0
@@ -835,7 +835,7 @@ msgstr "Еритрея"
#. module: base
#: sql_constraint:res.company:0
msgid "The company name must be unique !"
-msgstr ""
+msgstr "Името на фирмата трябва да е уникално!"
#. module: base
#: model:ir.ui.menu,name:base.menu_base_action_rule_admin
@@ -845,7 +845,7 @@ msgstr "Автоматизирани действия"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_ro
msgid "Romania - Accounting"
-msgstr ""
+msgstr "Румъния - Счетоводство"
#. module: base
#: model:ir.model,name:base.model_res_config_settings
@@ -890,7 +890,7 @@ msgstr "шведски / svenska"
#: field:base.language.export,name:0
#: field:ir.attachment,datas_fname:0
msgid "File Name"
-msgstr ""
+msgstr "Име на файла"
#. module: base
#: model:res.country,name:base.rs
@@ -1169,6 +1169,8 @@ msgstr "TGZ Архив"
msgid ""
"Users added to this group are automatically added in the following groups."
msgstr ""
+"Потребителите добавени в тази група автоматично ще бъдат добавени и в "
+"следните групи."
#. module: base
#: code:addons/base/ir/ir_model.py:732
@@ -1205,7 +1207,7 @@ msgstr "Вид"
#. module: base
#: field:ir.mail_server,smtp_user:0
msgid "Username"
-msgstr ""
+msgstr "Потребителско име"
#. module: base
#: model:ir.module.module,description:base.module_l10n_br
@@ -1345,7 +1347,7 @@ msgstr ""
#. module: base
#: field:ir.module.category,visible:0
msgid "Visible"
-msgstr ""
+msgstr "Видим"
#. module: base
#: model:ir.actions.client,name:base.action_client_base_menu
@@ -1431,7 +1433,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_tests
msgid "Tests"
-msgstr ""
+msgstr "Тестове"
#. module: base
#: field:ir.actions.report.xml,attachment:0
@@ -1512,7 +1514,7 @@ msgstr "Отказана операция"
#. module: base
#: model:ir.module.module,shortdesc:base.module_document
msgid "Document Management System"
-msgstr ""
+msgstr "Система за управление на документи"
#. module: base
#: model:ir.module.module,shortdesc:base.module_crm_claim
@@ -1655,7 +1657,7 @@ msgstr "Не съществува език с код \"%s\""
#: model:ir.module.category,name:base.module_category_social_network
#: model:ir.module.module,shortdesc:base.module_mail
msgid "Social Network"
-msgstr ""
+msgstr "Социална мрежа"
#. module: base
#: view:res.lang:0
@@ -1814,12 +1816,12 @@ msgstr ""
#. module: base
#: field:res.partner,image_small:0
msgid "Small-sized image"
-msgstr ""
+msgstr "Картинка с малък размер"
#. module: base
#: model:ir.module.module,shortdesc:base.module_stock
msgid "Warehouse Management"
-msgstr ""
+msgstr "Управление на складове"
#. module: base
#: model:ir.model,name:base.model_res_request_link
@@ -1859,7 +1861,7 @@ msgstr "Източен Тимор"
#: view:ir.module.module:0
#, python-format
msgid "Install"
-msgstr ""
+msgstr "Инсталиране"
#. module: base
#: field:res.currency,accuracy:0
@@ -2188,7 +2190,7 @@ msgstr ""
#: model:ir.ui.menu,name:base.menu_administration
#: model:res.groups,name:base.group_system
msgid "Settings"
-msgstr ""
+msgstr "Настройки"
#. module: base
#: selection:ir.actions.act_window,view_type:0
@@ -2274,7 +2276,7 @@ msgstr ""
#. module: base
#: model:ir.module.category,name:base.module_category_tools
msgid "Extra Tools"
-msgstr ""
+msgstr "Допълнителни инструменти"
#. module: base
#: view:ir.attachment:0
@@ -2292,6 +2294,8 @@ msgid ""
"Appears by default on the top right corner of your printed documents (report "
"header)."
msgstr ""
+"По подразбиране се появява в горния десен ъгъл на принтираните документи "
+"(горния колонтитул на отчетите)"
#. module: base
#: field:base.module.update,update:0
@@ -2301,7 +2305,7 @@ msgstr "Брой обновени модули"
#. module: base
#: field:ir.cron,function:0
msgid "Method"
-msgstr ""
+msgstr "Метод"
#. module: base
#: model:ir.module.module,shortdesc:base.module_auth_crypt
@@ -2350,7 +2354,7 @@ msgstr ""
#. module: base
#: field:change.password.user,new_passwd:0
msgid "New Password"
-msgstr ""
+msgstr "Нова парола"
#. module: base
#: model:ir.actions.act_window,help:base.action_ui_view
@@ -2968,7 +2972,7 @@ msgstr ""
#: code:addons/base/ir/ir_fields.py:146
#, python-format
msgid "yes"
-msgstr ""
+msgstr "да"
#. module: base
#: field:ir.model.fields,serialization_field_id:0
@@ -3184,7 +3188,7 @@ msgstr ""
#: view:res.users:0
#, python-format
msgid "Application"
-msgstr ""
+msgstr "Приложение"
#. module: base
#: model:res.groups,comment:base.group_hr_manager
@@ -3507,7 +3511,7 @@ msgstr "workflow.activity"
#. module: base
#: view:base.language.export:0
msgid "Export Complete"
-msgstr ""
+msgstr "Изнасянето завърши"
#. module: base
#: help:ir.ui.view_sc,res_id:0
@@ -3744,7 +3748,7 @@ msgstr ""
#: field:res.company,rml_footer:0
#: field:res.company,rml_footer_readonly:0
msgid "Report Footer"
-msgstr ""
+msgstr "Долен колонтитул на отчета"
#. module: base
#: selection:res.lang,direction:0
@@ -3869,7 +3873,7 @@ msgstr ""
#: code:addons/orm.py:3902
#, python-format
msgid "Access Denied"
-msgstr ""
+msgstr "Отказан достъп"
#. module: base
#: field:res.company,name:0
@@ -3952,7 +3956,7 @@ msgstr ""
#. module: base
#: model:res.country,name:base.je
msgid "Jersey"
-msgstr ""
+msgstr "Джърси (остров)"
#. module: base
#: model:ir.model,name:base.model_ir_translation
@@ -4017,7 +4021,7 @@ msgstr ""
#. module: base
#: model:res.country,name:base.sk
msgid "Slovakia"
-msgstr ""
+msgstr "Словакия"
#. module: base
#: model:res.country,name:base.nr
@@ -4378,7 +4382,7 @@ msgstr "Обобщение"
#. module: base
#: model:ir.module.category,name:base.module_category_hidden_dependency
msgid "Dependency"
-msgstr ""
+msgstr "Зависимост"
#. module: base
#: model:ir.module.module,description:base.module_portal
@@ -4472,7 +4476,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_knowledge
msgid "Knowledge Management System"
-msgstr ""
+msgstr "Система за управление на ЗНАНИЯ"
#. module: base
#: view:workflow.activity:0
@@ -4685,7 +4689,7 @@ msgstr "Изглед"
#: code:addons/base/ir/ir_fields.py:146
#, python-format
msgid "no"
-msgstr ""
+msgstr "не"
#. module: base
#: model:ir.module.module,description:base.module_crm_partner_assign
@@ -4767,7 +4771,7 @@ msgstr ""
#. module: base
#: model:res.country,name:base.ps
msgid "Palestinian Territory, Occupied"
-msgstr ""
+msgstr "Палестинска територия, Окупирана"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_ch
@@ -4859,7 +4863,7 @@ msgstr "Правила"
#. module: base
#: field:ir.mail_server,smtp_host:0
msgid "SMTP Server"
-msgstr ""
+msgstr "SMTP сървър"
#. module: base
#: code:addons/base/module/module.py:320
@@ -5239,7 +5243,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_recruitment
msgid "Recruitment Process"
-msgstr ""
+msgstr "Процес на наемане"
#. module: base
#: model:res.country,name:base.br
@@ -5693,7 +5697,7 @@ msgstr "Монсерат"
#. module: base
#: model:ir.module.module,shortdesc:base.module_decimal_precision
msgid "Decimal Precision Configuration"
-msgstr ""
+msgstr "Настройки на десетична точност"
#. module: base
#: model:ir.model,name:base.model_ir_actions_act_url
@@ -5850,7 +5854,7 @@ msgstr ""
#. module: base
#: view:ir.translation:0
msgid "Comments"
-msgstr ""
+msgstr "Коментари"
#. module: base
#: model:res.country,name:base.et
@@ -5860,7 +5864,7 @@ msgstr "Етиопия"
#. module: base
#: model:ir.module.category,name:base.module_category_authentication
msgid "Authentication"
-msgstr ""
+msgstr "Идентификация"
#. module: base
#: model:res.country,name:base.sj
@@ -5929,7 +5933,7 @@ msgstr "Свойство при изтриване на полета много-
#. module: base
#: model:ir.module.category,name:base.module_category_accounting_and_finance
msgid "Accounting & Finance"
-msgstr ""
+msgstr "Счетоводство и финанси"
#. module: base
#: field:ir.actions.server,write_id:0
@@ -6082,7 +6086,7 @@ msgstr "Името на група не може да започва с \"-\""
#: view:ir.module.module:0
#: model:ir.ui.menu,name:base.module_mi
msgid "Apps"
-msgstr ""
+msgstr "Приложения"
#. module: base
#: view:ir.ui.view_sc:0
@@ -6135,7 +6139,7 @@ msgstr ""
#. module: base
#: view:res.partner:0
msgid "Phone:"
-msgstr ""
+msgstr "Телефон:"
#. module: base
#: field:res.partner,is_company:0
@@ -6811,7 +6815,7 @@ msgstr ""
#. module: base
#: field:res.users,id:0
msgid "ID"
-msgstr ""
+msgstr "ID"
#. module: base
#: field:ir.cron,doall:0
@@ -6833,7 +6837,7 @@ msgstr "Свързване на обекти"
#: field:ir.module.category,xml_id:0
#: field:ir.ui.view,xml_id:0
msgid "External ID"
-msgstr ""
+msgstr "Външен ID"
#. module: base
#: help:res.currency.rate,rate:0
@@ -7286,7 +7290,7 @@ msgstr "Върху множество документи"
#: view:res.users:0
#: view:wizard.ir.model.menu.create:0
msgid "or"
-msgstr ""
+msgstr "или"
#. module: base
#: model:ir.module.module,shortdesc:base.module_account_accountant
@@ -7296,7 +7300,7 @@ msgstr ""
#. module: base
#: view:ir.module.module:0
msgid "Upgrade"
-msgstr ""
+msgstr "Надгради"
#. module: base
#: model:ir.module.module,description:base.module_base_action_rule
@@ -7334,7 +7338,7 @@ msgstr "Фарьорски острови"
#. module: base
#: field:ir.mail_server,smtp_encryption:0
msgid "Connection Security"
-msgstr ""
+msgstr "Сигурност на връзката"
#. module: base
#: code:addons/base/ir/ir_actions.py:606
@@ -7437,7 +7441,7 @@ msgstr ""
#. module: base
#: model:res.partner.category,name:base.res_partner_category_14
msgid "Manufacturer"
-msgstr ""
+msgstr "Производител"
#. module: base
#: help:res.users,company_id:0
@@ -7724,7 +7728,7 @@ msgstr ""
#. module: base
#: view:ir.mail_server:0
msgid "Test Connection"
-msgstr ""
+msgstr "Тестване на връзка"
#. module: base
#: model:res.country,name:base.mm
@@ -8251,7 +8255,7 @@ msgstr "ir.ui.menu"
#. module: base
#: model:ir.module.module,shortdesc:base.module_project
msgid "Project Management"
-msgstr ""
+msgstr "Управление на проекти"
#. module: base
#: view:ir.module.module:0
@@ -8965,7 +8969,7 @@ msgstr ""
#. module: base
#: field:res.partner.title,shortcut:0
msgid "Abbreviation"
-msgstr ""
+msgstr "Абревиатура"
#. module: base
#: model:ir.ui.menu,name:base.menu_crm_case_job_req_main
@@ -9209,7 +9213,7 @@ msgstr "Справка"
#. module: base
#: model:res.partner.title,shortcut:base.res_partner_title_prof
msgid "Prof."
-msgstr ""
+msgstr "Проф."
#. module: base
#: code:addons/base/ir/ir_mail_server.py:241
@@ -9237,7 +9241,7 @@ msgstr "Уеб-страница"
#. module: base
#: selection:ir.mail_server,smtp_encryption:0
msgid "None"
-msgstr ""
+msgstr "Няма"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_holidays
@@ -10243,7 +10247,7 @@ msgstr "Питкерн"
#. module: base
#: field:res.partner,category_id:0
msgid "Tags"
-msgstr ""
+msgstr "Етикети"
#. module: base
#: view:base.module.upgrade:0
@@ -15371,7 +15375,7 @@ msgstr "Съдържание"
#. module: base
#: model:ir.module.module,shortdesc:base.module_sale_mrp
msgid "Sales and MRP Management"
-msgstr ""
+msgstr "Продажби и MRP управление"
#. module: base
#: model:ir.actions.act_window,help:base.action_partner_form
diff --git a/openerp/addons/base/i18n/bn.po b/openerp/addons/base/i18n/bn.po
index 0b90f4004aa..a76f1b75e2d 100644
--- a/openerp/addons/base/i18n/bn.po
+++ b/openerp/addons/base/i18n/bn.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:44+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/bs.po b/openerp/addons/base/i18n/bs.po
index babf20c960f..7d5877d1d05 100644
--- a/openerp/addons/base/i18n/bs.po
+++ b/openerp/addons/base/i18n/bs.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:44+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/ca.po b/openerp/addons/base/i18n/ca.po
index ffc9fde2411..86098cae3dc 100644
--- a/openerp/addons/base/i18n/ca.po
+++ b/openerp/addons/base/i18n/ca.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:45+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/cs.po b/openerp/addons/base/i18n/cs.po
index a887afb6485..3a0d1136e48 100644
--- a/openerp/addons/base/i18n/cs.po
+++ b/openerp/addons/base/i18n/cs.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:45+0000\n"
"X-Generator: Launchpad (build 16985)\n"
"X-Poedit-Language: Czech\n"
diff --git a/openerp/addons/base/i18n/da.po b/openerp/addons/base/i18n/da.po
index 4de0dfda4aa..35240a53c5f 100644
--- a/openerp/addons/base/i18n/da.po
+++ b/openerp/addons/base/i18n/da.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:46+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/de.po b/openerp/addons/base/i18n/de.po
index 77d38b8c065..0d7c16e0a13 100644
--- a/openerp/addons/base/i18n/de.po
+++ b/openerp/addons/base/i18n/de.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:48+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
@@ -8669,7 +8669,7 @@ msgstr ""
#. module: base
#: field:ir.ui.menu,needaction_enabled:0
msgid "Target model uses the need action mechanism"
-msgstr ""
+msgstr "Ziel-Modell nutzt den need_action Mechanismus"
#. module: base
#: help:ir.model.fields,relation:0
@@ -17357,7 +17357,7 @@ msgstr "Helpdesk"
#. module: base
#: field:ir.rule,perm_write:0
msgid "Apply for Write"
-msgstr ""
+msgstr "Zum Schreiben anwenden"
#. module: base
#: field:ir.ui.menu,parent_left:0
@@ -18812,7 +18812,7 @@ msgstr "Funktion"
#. module: base
#: field:ir.ui.menu,parent_right:0
msgid "Parent Right"
-msgstr ""
+msgstr "Oberkonto Rechts"
#. module: base
#: model:ir.module.category,description:base.module_category_customer_relationship_management
@@ -18887,7 +18887,7 @@ msgstr "Bedarfsmeldungen"
#. module: base
#: selection:ir.actions.act_window,target:0
msgid "Inline Edit"
-msgstr ""
+msgstr "Eingebettet Bearbeiten"
#. module: base
#: selection:ir.cron,interval_type:0
diff --git a/openerp/addons/base/i18n/el.po b/openerp/addons/base/i18n/el.po
index 83bc68b4931..3f70d07c9b8 100644
--- a/openerp/addons/base/i18n/el.po
+++ b/openerp/addons/base/i18n/el.po
@@ -12,7 +12,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:49+0000\n"
"X-Generator: Launchpad (build 16985)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po
index d51e067b3af..b46bb679903 100644
--- a/openerp/addons/base/i18n/en_GB.po
+++ b/openerp/addons/base/i18n/en_GB.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:58+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po
index 4df65aba682..c833bb73994 100644
--- a/openerp/addons/base/i18n/es.po
+++ b/openerp/addons/base/i18n/es.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:55+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/es_AR.po b/openerp/addons/base/i18n/es_AR.po
index a74699fb374..761f77faf1d 100644
--- a/openerp/addons/base/i18n/es_AR.po
+++ b/openerp/addons/base/i18n/es_AR.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:58+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/es_BO.po b/openerp/addons/base/i18n/es_BO.po
index 9d4ae622b5c..318d0d02e80 100644
--- a/openerp/addons/base/i18n/es_BO.po
+++ b/openerp/addons/base/i18n/es_BO.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:59+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/es_CL.po b/openerp/addons/base/i18n/es_CL.po
index a113e36a82e..79f873ac369 100644
--- a/openerp/addons/base/i18n/es_CL.po
+++ b/openerp/addons/base/i18n/es_CL.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:58+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/es_CR.po b/openerp/addons/base/i18n/es_CR.po
index e5a617216b6..55cf7d5c2bb 100644
--- a/openerp/addons/base/i18n/es_CR.po
+++ b/openerp/addons/base/i18n/es_CR.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:59+0000\n"
"X-Generator: Launchpad (build 16985)\n"
"Language: \n"
diff --git a/openerp/addons/base/i18n/es_DO.po b/openerp/addons/base/i18n/es_DO.po
index 140f6cfa803..2e6623389b7 100644
--- a/openerp/addons/base/i18n/es_DO.po
+++ b/openerp/addons/base/i18n/es_DO.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:58+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po
index 5804c8e377d..8781227d3d3 100644
--- a/openerp/addons/base/i18n/es_EC.po
+++ b/openerp/addons/base/i18n/es_EC.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 06:00+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/es_MX.po b/openerp/addons/base/i18n/es_MX.po
index cc4ea1ea67a..10224d774f2 100644
--- a/openerp/addons/base/i18n/es_MX.po
+++ b/openerp/addons/base/i18n/es_MX.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 06:00+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/es_PE.po b/openerp/addons/base/i18n/es_PE.po
index 46733d5b1c6..51687f4beb7 100644
--- a/openerp/addons/base/i18n/es_PE.po
+++ b/openerp/addons/base/i18n/es_PE.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 06:01+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/es_VE.po b/openerp/addons/base/i18n/es_VE.po
index 039baabe46c..7ba2a67573a 100644
--- a/openerp/addons/base/i18n/es_VE.po
+++ b/openerp/addons/base/i18n/es_VE.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:57+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po
index aa32b7585ab..bec2e7676c6 100644
--- a/openerp/addons/base/i18n/et.po
+++ b/openerp/addons/base/i18n/et.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:47+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/eu.po b/openerp/addons/base/i18n/eu.po
index 517499d3839..1594de27587 100644
--- a/openerp/addons/base/i18n/eu.po
+++ b/openerp/addons/base/i18n/eu.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:44+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/fa.po b/openerp/addons/base/i18n/fa.po
index 55137dce3ab..0ab0328154d 100644
--- a/openerp/addons/base/i18n/fa.po
+++ b/openerp/addons/base/i18n/fa.po
@@ -9,7 +9,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:46+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:53+0000\n"
"X-Generator: Launchpad (build 16985)\n"
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
"X-Poedit-Language: Persian\n"
diff --git a/openerp/addons/base/i18n/fa_AF.po b/openerp/addons/base/i18n/fa_AF.po
index 2673b2cc498..525e0aafb57 100644
--- a/openerp/addons/base/i18n/fa_AF.po
+++ b/openerp/addons/base/i18n/fa_AF.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:55+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 06:01+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/fi.po b/openerp/addons/base/i18n/fi.po
index 93f646c46e7..513907c0231 100644
--- a/openerp/addons/base/i18n/fi.po
+++ b/openerp/addons/base/i18n/fi.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:41+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:47+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/fr.po b/openerp/addons/base/i18n/fr.po
index faaa7ded49a..6e8616f07e1 100644
--- a/openerp/addons/base/i18n/fr.po
+++ b/openerp/addons/base/i18n/fr.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:41+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:48+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/fr_CA.po b/openerp/addons/base/i18n/fr_CA.po
index 96217a0ed29..ae47ed3c7b1 100644
--- a/openerp/addons/base/i18n/fr_CA.po
+++ b/openerp/addons/base/i18n/fr_CA.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:58+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/gl.po b/openerp/addons/base/i18n/gl.po
index 33e0ca7f8e0..2422f59387b 100644
--- a/openerp/addons/base/i18n/gl.po
+++ b/openerp/addons/base/i18n/gl.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:49+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/gu.po b/openerp/addons/base/i18n/gu.po
index bb053ba30fe..ec4a7998835 100644
--- a/openerp/addons/base/i18n/gu.po
+++ b/openerp/addons/base/i18n/gu.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:49+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po
index 370dc41acf9..2ec4177fbbe 100644
--- a/openerp/addons/base/i18n/he.po
+++ b/openerp/addons/base/i18n/he.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:49+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/hi.po b/openerp/addons/base/i18n/hi.po
index 0df8f74590c..a7c25ff06cc 100644
--- a/openerp/addons/base/i18n/hi.po
+++ b/openerp/addons/base/i18n/hi.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:50+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
@@ -25,6 +25,9 @@ msgid ""
"================================================\n"
" "
msgstr ""
+"\n"
+"धनादेश लेखन और मुद्रण मापांक.\n"
+" "
#. module: base
#: model:res.country,name:base.sh
@@ -34,12 +37,12 @@ msgstr "सैंट हेलेना"
#. module: base
#: view:ir.actions.report.xml:0
msgid "Other Configuration"
-msgstr ""
+msgstr "इतर समाकृति"
#. module: base
#: selection:ir.property,type:0
msgid "DateTime"
-msgstr "वेड"
+msgstr "तारीखवक़्त"
#. module: base
#: code:addons/fields.py:652
@@ -53,17 +56,17 @@ msgstr ""
#: field:ir.ui.view,arch:0
#: field:ir.ui.view.custom,arch:0
msgid "View Architecture"
-msgstr ""
+msgstr "आर्किटेक्चर"
#. module: base
#: model:ir.module.module,summary:base.module_sale_stock
msgid "Quotation, Sale Orders, Delivery & Invoicing Control"
-msgstr ""
+msgstr "उद्धरण, बिक्री आदेश, वितरण और चालान नियंत्रण"
#. module: base
#: selection:ir.sequence,implementation:0
msgid "No gap"
-msgstr ""
+msgstr "कोई अंतर नहीं"
#. module: base
#: selection:base.language.install,lang:0
diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po
index cd0597f7d39..a80cfa247b4 100644
--- a/openerp/addons/base/i18n/hr.po
+++ b/openerp/addons/base/i18n/hr.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:48+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:54+0000\n"
"X-Generator: Launchpad (build 16985)\n"
"Language: hr\n"
diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po
index c97b13187a0..f94ca524b17 100644
--- a/openerp/addons/base/i18n/hu.po
+++ b/openerp/addons/base/i18n/hu.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:50+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po
index e416c0e4a62..1ce538b27b5 100644
--- a/openerp/addons/base/i18n/hy.po
+++ b/openerp/addons/base/i18n/hy.po
@@ -9,7 +9,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:44+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/id.po b/openerp/addons/base/i18n/id.po
index 25414f99fb5..a9224ca54f7 100644
--- a/openerp/addons/base/i18n/id.po
+++ b/openerp/addons/base/i18n/id.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:50+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/is.po b/openerp/addons/base/i18n/is.po
index 125515b191f..4cec2f7e7b6 100644
--- a/openerp/addons/base/i18n/is.po
+++ b/openerp/addons/base/i18n/is.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:50+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po
index 28d29b79aaf..f4e764457c9 100644
--- a/openerp/addons/base/i18n/it.po
+++ b/openerp/addons/base/i18n/it.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:51+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/ja.po b/openerp/addons/base/i18n/ja.po
index 3af2a469283..52f3b2b2a1a 100644
--- a/openerp/addons/base/i18n/ja.po
+++ b/openerp/addons/base/i18n/ja.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:51+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/ka.po b/openerp/addons/base/i18n/ka.po
index 5dcd445e2ff..7cfe44cdea1 100644
--- a/openerp/addons/base/i18n/ka.po
+++ b/openerp/addons/base/i18n/ka.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:41+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:48+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/kk.po b/openerp/addons/base/i18n/kk.po
index f1fa010812b..8831e777f88 100644
--- a/openerp/addons/base/i18n/kk.po
+++ b/openerp/addons/base/i18n/kk.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:51+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/ko.po b/openerp/addons/base/i18n/ko.po
index 2404dae9661..0e74aa9b5f7 100644
--- a/openerp/addons/base/i18n/ko.po
+++ b/openerp/addons/base/i18n/ko.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:51+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/lt.po b/openerp/addons/base/i18n/lt.po
index 25d6e31e73d..411d7f4f1a0 100644
--- a/openerp/addons/base/i18n/lt.po
+++ b/openerp/addons/base/i18n/lt.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:45+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:52+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/lv.po b/openerp/addons/base/i18n/lv.po
index af3d0828dc7..cd74b5b13b9 100644
--- a/openerp/addons/base/i18n/lv.po
+++ b/openerp/addons/base/i18n/lv.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:45+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:52+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/mk.po b/openerp/addons/base/i18n/mk.po
index f725d265332..908712edddb 100644
--- a/openerp/addons/base/i18n/mk.po
+++ b/openerp/addons/base/i18n/mk.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:45+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:52+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/mn.po b/openerp/addons/base/i18n/mn.po
index 78ce6ac5c69..7d949110991 100644
--- a/openerp/addons/base/i18n/mn.po
+++ b/openerp/addons/base/i18n/mn.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:46+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:52+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/nb.po b/openerp/addons/base/i18n/nb.po
index 65d8cf62e7d..b3e6b194599 100644
--- a/openerp/addons/base/i18n/nb.po
+++ b/openerp/addons/base/i18n/nb.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:46+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:53+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/nl.po b/openerp/addons/base/i18n/nl.po
index 39d1bddcd75..d11253a6f48 100644
--- a/openerp/addons/base/i18n/nl.po
+++ b/openerp/addons/base/i18n/nl.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:46+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/nl_BE.po b/openerp/addons/base/i18n/nl_BE.po
index a07fb33fb4b..986cf6589bb 100644
--- a/openerp/addons/base/i18n/nl_BE.po
+++ b/openerp/addons/base/i18n/nl_BE.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:59+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/pl.po b/openerp/addons/base/i18n/pl.po
index ca3e805d7f1..7864f173966 100644
--- a/openerp/addons/base/i18n/pl.po
+++ b/openerp/addons/base/i18n/pl.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:47+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:53+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/pt.po b/openerp/addons/base/i18n/pt.po
index 0576d40462c..86914909ea2 100644
--- a/openerp/addons/base/i18n/pt.po
+++ b/openerp/addons/base/i18n/pt.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:47+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:53+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/pt_BR.po b/openerp/addons/base/i18n/pt_BR.po
index 2b19ec2c486..469c87a9f56 100644
--- a/openerp/addons/base/i18n/pt_BR.po
+++ b/openerp/addons/base/i18n/pt_BR.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:57+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po
index 6d29c529e44..7557bbe5016 100644
--- a/openerp/addons/base/i18n/ro.po
+++ b/openerp/addons/base/i18n/ro.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:47+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:54+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po
index 60c8819d04b..45d2b9114d0 100644
--- a/openerp/addons/base/i18n/ru.po
+++ b/openerp/addons/base/i18n/ru.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:48+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:54+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/sk.po b/openerp/addons/base/i18n/sk.po
index c03d0de6f72..dd32fe95856 100644
--- a/openerp/addons/base/i18n/sk.po
+++ b/openerp/addons/base/i18n/sk.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:55+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/sl.po b/openerp/addons/base/i18n/sl.po
index a62f242e210..eb436581cbc 100644
--- a/openerp/addons/base/i18n/sl.po
+++ b/openerp/addons/base/i18n/sl.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:55+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/sq.po b/openerp/addons/base/i18n/sq.po
index a0be5625110..776ca38f95b 100644
--- a/openerp/addons/base/i18n/sq.po
+++ b/openerp/addons/base/i18n/sq.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:43+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/sr.po b/openerp/addons/base/i18n/sr.po
index 3ac25b53253..56d46338c7b 100644
--- a/openerp/addons/base/i18n/sr.po
+++ b/openerp/addons/base/i18n/sr.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:48+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:54+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/sr@latin.po b/openerp/addons/base/i18n/sr@latin.po
index 30a9a0af3ab..1eba67cfbcf 100644
--- a/openerp/addons/base/i18n/sr@latin.po
+++ b/openerp/addons/base/i18n/sr@latin.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:55+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 06:01+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/sv.po b/openerp/addons/base/i18n/sv.po
index 2975c159a09..1b977a6200c 100644
--- a/openerp/addons/base/i18n/sv.po
+++ b/openerp/addons/base/i18n/sv.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:55+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/th.po b/openerp/addons/base/i18n/th.po
index ee2313badfc..eb08bcb18ef 100644
--- a/openerp/addons/base/i18n/th.po
+++ b/openerp/addons/base/i18n/th.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:56+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/tlh.po b/openerp/addons/base/i18n/tlh.po
index 199dd5d4073..dacff0ffc8d 100644
--- a/openerp/addons/base/i18n/tlh.po
+++ b/openerp/addons/base/i18n/tlh.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:56+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/tr.po b/openerp/addons/base/i18n/tr.po
index 7dc68a474cf..7dd5cbe5d89 100644
--- a/openerp/addons/base/i18n/tr.po
+++ b/openerp/addons/base/i18n/tr.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:56+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/uk.po b/openerp/addons/base/i18n/uk.po
index e678f952bb4..a6b45321ac1 100644
--- a/openerp/addons/base/i18n/uk.po
+++ b/openerp/addons/base/i18n/uk.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:56+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/ur.po b/openerp/addons/base/i18n/ur.po
index 3c8880f3270..5b661eefa53 100644
--- a/openerp/addons/base/i18n/ur.po
+++ b/openerp/addons/base/i18n/ur.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:57+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/vi.po b/openerp/addons/base/i18n/vi.po
index 68616a81d7f..1ce01dae457 100644
--- a/openerp/addons/base/i18n/vi.po
+++ b/openerp/addons/base/i18n/vi.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:57+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po
index 6e09a983dc1..5f36d5898c2 100644
--- a/openerp/addons/base/i18n/zh_CN.po
+++ b/openerp/addons/base/i18n/zh_CN.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:59+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/zh_HK.po b/openerp/addons/base/i18n/zh_HK.po
index ea043ffc98c..5f0682f797b 100644
--- a/openerp/addons/base/i18n/zh_HK.po
+++ b/openerp/addons/base/i18n/zh_HK.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:57+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/i18n/zh_TW.po b/openerp/addons/base/i18n/zh_TW.po
index 33bfe9db460..a787b302b41 100644
--- a/openerp/addons/base/i18n/zh_TW.po
+++ b/openerp/addons/base/i18n/zh_TW.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n"
+"X-Launchpad-Export-Date: 2014-04-24 05:59+0000\n"
"X-Generator: Launchpad (build 16985)\n"
#. module: base
diff --git a/openerp/addons/base/ir/ir_default.py b/openerp/addons/base/ir/ir_default.py
index 21c66c0972b..3b82b3aed8e 100644
--- a/openerp/addons/base/ir/ir_default.py
+++ b/openerp/addons/base/ir/ir_default.py
@@ -43,7 +43,5 @@ class ir_default(osv.osv):
_defaults = {
'company_id': _get_company_id,
}
-ir_default()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/addons/base/ir/ir_exports.py b/openerp/addons/base/ir/ir_exports.py
index 972a21c9047..c6d188bf02b 100644
--- a/openerp/addons/base/ir/ir_exports.py
+++ b/openerp/addons/base/ir/ir_exports.py
@@ -31,7 +31,6 @@ class ir_exports(osv.osv):
'export_fields': fields.one2many('ir.exports.line', 'export_id',
'Export ID'),
}
-ir_exports()
class ir_exports_line(osv.osv):
@@ -41,7 +40,6 @@ class ir_exports_line(osv.osv):
'name': fields.char('Field Name', size=64),
'export_id': fields.many2one('ir.exports', 'Export', select=True, ondelete='cascade'),
}
-ir_exports_line()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/addons/base/ir/ir_filters.py b/openerp/addons/base/ir/ir_filters.py
index f302fe5c7bf..418c3073f5e 100644
--- a/openerp/addons/base/ir/ir_filters.py
+++ b/openerp/addons/base/ir/ir_filters.py
@@ -142,6 +142,4 @@ class ir_filters(osv.osv):
'is_default': False
}
-ir_filters()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py
index 4608f63bd49..acfac2dd892 100644
--- a/openerp/addons/base/ir/ir_qweb.py
+++ b/openerp/addons/base/ir/ir_qweb.py
@@ -2,19 +2,27 @@
import collections
import cStringIO
import datetime
+import hashlib
import json
import logging
import math
+import os
import re
import sys
import xml # FIXME use lxml and etree
+import itertools
+import lxml.html
+from urlparse import urlparse
import babel
import babel.dates
-import werkzeug.utils
+import werkzeug
from PIL import Image
+import openerp.http
import openerp.tools
+import openerp.tools.func
+import openerp.tools.lru
from openerp.tools.safe_eval import safe_eval as eval
from openerp.osv import osv, orm, fields
from openerp.tools.translate import _
@@ -396,6 +404,22 @@ class QWeb(orm.AbstractModel):
pass
return self.render(cr, uid, template, d)
+ def render_tag_call_assets(self, element, template_attributes, generated_attributes, qwebcontext):
+ """ This special 't-call' tag can be used in order to aggregate/minify javascript and css assets"""
+ name = template_attributes['call-assets']
+
+ # Backward compatibility hack for manifest usage
+ qwebcontext['manifest_list'] = openerp.addons.web.controllers.main.manifest_list
+
+ d = qwebcontext.copy()
+ d.context['inherit_branding'] = False
+ content = self.render_tag_call(
+ element, {'call': name}, generated_attributes, d)
+ if qwebcontext.get('debug'):
+ return content
+ bundle = AssetsBundle(name, html=content)
+ return bundle.to_html()
+
def render_tag_set(self, element, template_attributes, generated_attributes, qwebcontext):
if "value" in template_attributes:
qwebcontext[template_attributes["set"]] = self.eval_object(template_attributes["value"], qwebcontext)
@@ -821,7 +845,6 @@ class RelativeDatetimeConverter(osv.AbstractModel):
return babel.dates.format_timedelta(
value - reference, add_direction=True, locale=locale)
-
class Contact(orm.AbstractModel):
_name = 'ir.qweb.field.contact'
_inherit = 'ir.qweb.field.many2one'
@@ -836,7 +859,7 @@ class Contact(orm.AbstractModel):
id = getattr(record, field_name).id
field_browse = self.pool[column._obj].browse(cr, openerp.SUPERUSER_ID, id, context={"show_address": True})
- value = werkzeug.utils.escape( field_browse.name_get()[0][1] )
+ value = field_browse.name_get()[0][1]
val = {
'name': value.split("\n")[0],
@@ -951,4 +974,237 @@ def get_field_type(column, options):
"""
return options.get('widget', column._type)
+class AssetsBundle(object):
+ cache = openerp.tools.lru.LRU(32)
+ rx_css_import = re.compile("(@import[^;{]+;?)", re.M)
+
+ def __init__(self, xmlid, html=None, debug=False):
+ self.debug = debug
+ self.xmlid = xmlid
+ self.javascripts = []
+ self.stylesheets = []
+ self.remains = []
+ self._checksum = None
+ if html:
+ self.parse(html)
+
+ def parse(self, html):
+ fragments = lxml.html.fragments_fromstring(html)
+ for el in fragments:
+ if isinstance(el, basestring):
+ self.remains.append(el)
+ elif isinstance(el, lxml.html.HtmlElement):
+ src = el.get('src')
+ href = el.get('href')
+ if el.tag == 'style':
+ self.stylesheets.append(StylesheetAsset(source=el.text))
+ elif el.tag == 'link' and el.get('rel') == 'stylesheet' and self.can_aggregate(href):
+ self.stylesheets.append(StylesheetAsset(url=href))
+ elif el.tag == 'script' and not src:
+ self.javascripts.append(JavascriptAsset(source=el.text))
+ elif el.tag == 'script' and self.can_aggregate(src):
+ self.javascripts.append(JavascriptAsset(url=src))
+ else:
+ self.remains.append(lxml.html.tostring(el))
+ else:
+ try:
+ self.remains.append(lxml.html.tostring(el))
+ except Exception:
+ # notYETimplementederror
+ raise NotImplementedError
+
+ def can_aggregate(self, url):
+ return not urlparse(url).netloc and not url.startswith(('/web/css', '/web/js'))
+
+ def to_html(self, sep='\n'):
+ response = []
+ if self.stylesheets:
+ response.append('' % self.xmlid)
+ if self.javascripts:
+ response.append('' % self.xmlid)
+ response.extend(self.remains)
+
+ return sep.join(response)
+
+ @openerp.tools.func.lazy_property
+ def last_modified(self):
+ return max(itertools.chain(
+ (asset.last_modified for asset in self.javascripts),
+ (asset.last_modified for asset in self.stylesheets),
+ [datetime.datetime(1970, 1, 1)],
+ ))
+
+ @openerp.tools.func.lazy_property
+ def checksum(self):
+ checksum = hashlib.new('sha1')
+ for asset in itertools.chain(self.javascripts, self.stylesheets):
+ checksum.update(asset.content.encode("utf-8"))
+ return checksum.hexdigest()
+
+ def js(self):
+ key = 'js_' + self.checksum
+ if key not in self.cache:
+ content =';\n'.join(asset.minify() for asset in self.javascripts)
+ self.cache[key] = content
+ if self.debug:
+ return "/*\n%s\n*/\n" % '\n'.join(
+ [asset.filename for asset in self.javascripts if asset.filename]) + self.cache[key]
+ return self.cache[key]
+
+ def css(self):
+ key = 'css_' + self.checksum
+ if key not in self.cache:
+ content = '\n'.join(asset.minify() for asset in self.stylesheets)
+ # move up all @import rules to the top
+ matches = []
+ def push(matchobj):
+ matches.append(matchobj.group(0))
+ return ''
+
+ content = re.sub(self.rx_css_import, push, content)
+
+ matches.append(content)
+ content = u'\n'.join(matches)
+ self.cache[key] = content
+ if self.debug:
+ return "/*\n%s\n*/\n" % '\n'.join(
+ [asset.filename for asset in self.javascripts if asset.filename]) + self.cache[key]
+ return self.cache[key]
+
+class WebAsset(object):
+ def __init__(self, source=None, url=None):
+ self.source = source
+ self.url = url
+ self._filename = None
+ self._content = None
+
+ @property
+ def filename(self):
+ if self._filename is None and self.url:
+ module = filter(None, self.url.split('/'))[0]
+ try:
+ mpath = openerp.http.addons_manifest[module]['addons_path']
+ except Exception:
+ raise KeyError("Could not find asset '%s' for '%s' addon" % (self.url, module))
+ self._filename = mpath + self.url.replace('/', os.path.sep)
+ return self._filename
+
+ @property
+ def content(self):
+ if self._content is None:
+ self._content = self.get_content()
+ return self._content
+
+ def get_content(self):
+ if self.source:
+ return self.source
+
+ with open(self.filename, 'rb') as fp:
+ return fp.read().decode('utf-8')
+
+ def minify(self):
+ return self.content
+
+ @property
+ def last_modified(self):
+ if self.source:
+ # TODO: return last_update of bundle's ir.ui.view
+ return datetime.datetime(1970, 1, 1)
+ return datetime.datetime.fromtimestamp(os.path.getmtime(self.filename))
+
+class JavascriptAsset(WebAsset):
+ def minify(self):
+ return rjsmin(self.content)
+
+class StylesheetAsset(WebAsset):
+ rx_import = re.compile(r"""@import\s+('|")(?!'|"|/|https?://)""", re.U)
+ rx_url = re.compile(r"""url\s*\(\s*('|"|)(?!'|"|/|https?://|data:)""", re.U)
+ rx_sourceMap = re.compile(r'(/\*# sourceMappingURL=.*)', re.U)
+
+ def _get_content(self):
+ if self.source:
+ return self.source
+
+ with open(self.filename, 'rb') as fp:
+ firstline = fp.readline()
+ m = re.match(r'@charset "([^"]+)";', firstline)
+ if m:
+ encoding = m.group(1)
+ else:
+ encoding = "utf-8"
+ # "reinject" first line as it's not @charset
+ fp.seek(0)
+
+ return fp.read().decode(encoding)
+
+ def get_content(self):
+ content = self._get_content()
+ if self.url:
+ web_dir = os.path.dirname(self.url)
+
+ content = self.rx_import.sub(
+ r"""@import \1%s/""" % (web_dir,),
+ content,
+ )
+
+ content = self.rx_url.sub(
+ r"url(\1%s/" % (web_dir,),
+ content,
+ )
+ return content
+
+ def minify(self):
+ # remove existing sourcemaps, make no sense after re-mini
+ content = self.rx_sourceMap.sub('', self.content)
+ # comments
+ content = re.sub(r'/\*.*?\*/', '', content, flags=re.S)
+ # space
+ content = re.sub(r'\s+', ' ', content)
+ content = re.sub(r' *([{}]) *', r'\1', content)
+ return content
+
+def rjsmin(script):
+ """ Minify js with a clever regex.
+ Taken from http://opensource.perlig.de/rjsmin
+ Apache License, Version 2.0 """
+ def subber(match):
+ """ Substitution callback """
+ groups = match.groups()
+ return (
+ groups[0] or
+ groups[1] or
+ groups[2] or
+ groups[3] or
+ (groups[4] and '\n') or
+ (groups[5] and ' ') or
+ (groups[6] and ' ') or
+ (groups[7] and ' ') or
+ ''
+ )
+
+ result = re.sub(
+ r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]|\r?'
+ r'\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|'
+ r'\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?:(?<=[(,=:\[!&|?{};\r\n]'
+ r')(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/'
+ r'))*((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*'
+ r'(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/)[^\047"/\000-\040]*'
+ r'))|(?:(?<=[\000-#%-,./:-@\[-^`{-~-]return)(?:[\000-\011\013\014\01'
+ r'6-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*((?:/(?![\r\n/*])[^/'
+ r'\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]'
+ r'*)*\]))[^/\\\[\r\n]*)*/)[^\047"/\000-\040]*))|(?<=[^\000-!#%&(*,./'
+ r':-@\[\\^`{|~])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/'
+ r'*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]))(?:[\000-\011\013\01'
+ r'4\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040"#'
+ r'%-\047)*,./:-@\\-^`|-~])|(?<=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-'
+ r'\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=[^'
+ r'\000-#%-,./:-@\[-^`{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|'
+ r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=\+)|(?<=-)((?:[\000-\011\0'
+ r'13\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=-)|(?:[\0'
+ r'00-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+|(?:'
+ r'(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*'
+ r']*\*+(?:[^/*][^*]*\*+)*/))*)+', subber, '\n%s\n' % script
+ ).strip()
+ return result
+
# vim:et:
diff --git a/openerp/addons/base/ir/ir_rule.py b/openerp/addons/base/ir/ir_rule.py
index 9926fd689ac..96b7da4f590 100644
--- a/openerp/addons/base/ir/ir_rule.py
+++ b/openerp/addons/base/ir/ir_rule.py
@@ -172,7 +172,4 @@ class ir_rule(osv.osv):
self.clear_cache(cr,uid)
return res
-ir_rule()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py
index 6a2267e9176..e368498eb77 100644
--- a/openerp/addons/base/ir/ir_ui_view.py
+++ b/openerp/addons/base/ir/ir_ui_view.py
@@ -20,15 +20,19 @@
##############################################################################
import collections
import copy
+import datetime
+import dateutil
+from dateutil.relativedelta import relativedelta
import fnmatch
import logging
-from lxml import etree
-from operator import itemgetter
import os
+import time
+from operator import itemgetter
+
import simplejson
import werkzeug
-
import HTMLParser
+from lxml import etree
import openerp
from openerp import tools
@@ -873,9 +877,13 @@ class view(osv.osv):
values = dict()
qcontext = dict(
keep_query=keep_query,
- request=request,
+ request=request, # might be unbound if we're not in an httprequest context
+ debug=request.debug if request else False,
json=simplejson,
quote_plus=werkzeug.url_quote_plus,
+ time=time,
+ datetime=datetime,
+ relativedelta=relativedelta,
)
qcontext.update(values)
@@ -973,12 +981,23 @@ class view(osv.osv):
def _validate_module_views(self, cr, uid, module):
"""Validate architecture of all the views of a given module"""
assert not self.pool._init or module in self.pool._init_modules
+ xmlid_filter = ''
+ params = (module,)
+ if self.pool._init:
+ # only validate the views that are still existing...
+ xmlid_filter = "AND md.name IN %s"
+ names = tuple(name for (xmod, name), (model, res_id) in self.pool.model_data_reference_ids.items() if xmod == module and model == self._name)
+ if not names:
+ # no views for this module, nothing to validate
+ return
+ params += (names,)
cr.execute("""SELECT max(v.id)
FROM ir_ui_view v
LEFT JOIN ir_model_data md ON (md.model = 'ir.ui.view' AND md.res_id = v.id)
WHERE md.module = %s
+ {0}
GROUP BY coalesce(v.inherit_id, v.id)
- """, (module,))
+ """.format(xmlid_filter), params)
for vid, in cr.fetchall():
if not self._check_xml(cr, uid, [vid]):
diff --git a/openerp/addons/base/ir/ir_ui_view_view.xml b/openerp/addons/base/ir/ir_ui_view_view.xml
index 93f5008962f..d3ac3058054 100644
--- a/openerp/addons/base/ir/ir_ui_view_view.xml
+++ b/openerp/addons/base/ir/ir_ui_view_view.xml
@@ -59,6 +59,7 @@
+
diff --git a/openerp/addons/base/res/ir_property.py b/openerp/addons/base/res/ir_property.py
index 6d7c611b5ae..c6cfd0d9d68 100644
--- a/openerp/addons/base/res/ir_property.py
+++ b/openerp/addons/base/res/ir_property.py
@@ -182,9 +182,4 @@ class ir_property(osv.osv):
'|', ('company_id', '=', cid), ('company_id', '=', False)]
return domain
-ir_property()
-
-
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/openerp/addons/base/res/res_bank.py b/openerp/addons/base/res/res_bank.py
index 00d18d08078..cc29c50928a 100644
--- a/openerp/addons/base/res/res_bank.py
+++ b/openerp/addons/base/res/res_bank.py
@@ -51,9 +51,6 @@ class Bank(osv.osv):
result.append((bank.id, (bank.bic and (bank.bic + ' - ') or '') + bank.name))
return result
-Bank()
-
-
class res_partner_bank_type(osv.osv):
_description='Bank Account Type'
_name = 'res.partner.bank.type'
@@ -67,7 +64,6 @@ class res_partner_bank_type(osv.osv):
_defaults = {
'format_layout': lambda *args: "%(bank_name)s: %(acc_number)s"
}
-res_partner_bank_type()
class res_partner_bank_type_fields(osv.osv):
_description='Bank type fields'
@@ -80,8 +76,6 @@ class res_partner_bank_type_fields(osv.osv):
'readonly': fields.boolean('Readonly'),
'size': fields.integer('Max. Size'),
}
-res_partner_bank_type_fields()
-
class res_partner_bank(osv.osv):
'''Bank Accounts'''
@@ -234,6 +228,4 @@ class res_partner_bank(osv.osv):
result['state_id'] = part.state_id.id
return {'value': result}
-res_partner_bank()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/addons/base/res/res_company_view.xml b/openerp/addons/base/res/res_company_view.xml
index 5139623031f..f38e1066858 100644
--- a/openerp/addons/base/res/res_company_view.xml
+++ b/openerp/addons/base/res/res_company_view.xml
@@ -80,33 +80,30 @@
-
-
+
+
-
+
+
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
diff --git a/openerp/addons/base/res/res_currency.py b/openerp/addons/base/res/res_currency.py
index 19444786935..d92969b564f 100644
--- a/openerp/addons/base/res/res_currency.py
+++ b/openerp/addons/base/res/res_currency.py
@@ -235,8 +235,6 @@ class res_currency(osv.osv):
else:
return from_amount * rate
-res_currency()
-
class res_currency_rate_type(osv.osv):
_name = "res.currency.rate.type"
_description = "Currency Rate Type"
@@ -244,8 +242,6 @@ class res_currency_rate_type(osv.osv):
'name': fields.char('Name', size=64, required=True, translate=True),
}
-res_currency_rate_type()
-
class res_currency_rate(osv.osv):
_name = "res.currency.rate"
_description = "Currency Rate"
@@ -261,7 +257,5 @@ class res_currency_rate(osv.osv):
}
_order = "name desc"
-res_currency_rate()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml
index a5f04a120a7..b545ec7a458 100644
--- a/openerp/addons/base/res/res_partner_view.xml
+++ b/openerp/addons/base/res/res_partner_view.xml
@@ -340,7 +340,7 @@
-
+
diff --git a/openerp/addons/base/res/res_security.xml b/openerp/addons/base/res/res_security.xml
index 0c8c0202d60..cb122e09bc8 100644
--- a/openerp/addons/base/res/res_security.xml
+++ b/openerp/addons/base/res/res_security.xml
@@ -7,9 +7,11 @@
diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py
index 32e81ee600f..f85f6949d2d 100644
--- a/openerp/addons/base/res/res_users.py
+++ b/openerp/addons/base/res/res_users.py
@@ -28,7 +28,7 @@ import openerp
from openerp import SUPERUSER_ID
from openerp import tools
import openerp.exceptions
-from openerp.osv import fields,osv
+from openerp.osv import fields,osv, expression
from openerp.osv.orm import browse_record
from openerp.tools.translate import _
@@ -56,13 +56,33 @@ class res_groups(osv.osv):
def _search_group(self, cr, uid, obj, name, args, context=None):
operand = args[0][2]
operator = args[0][1]
- values = operand.split('/')
- group_name = values[0]
- where = [('name', operator, group_name)]
- if len(values) > 1:
- application_name = values[0]
- group_name = values[1]
- where = ['|',('category_id.name', operator, application_name)] + where
+ lst = True
+ if isinstance(operand, bool):
+ domains = [[('name', operator, operand)], [('category_id.name', operator, operand)]]
+ if operator in expression.NEGATIVE_TERM_OPERATORS == (not operand):
+ return expression.AND(domains)
+ else:
+ return expression.OR(domains)
+ if isinstance(operand, basestring):
+ lst = False
+ operand = [operand]
+ where = []
+ for group in operand:
+ values = filter(bool, group.split('/'))
+ group_name = values.pop().strip()
+ category_name = values and '/'.join(values).strip() or group_name
+ group_domain = [('name', operator, lst and [group_name] or group_name)]
+ category_domain = [('category_id.name', operator, lst and [category_name] or category_name)]
+ if operator in expression.NEGATIVE_TERM_OPERATORS and not values:
+ category_domain = expression.OR([category_domain, [('category_id', '=', False)]])
+ if (operator in expression.NEGATIVE_TERM_OPERATORS) == (not values):
+ sub_where = expression.AND([group_domain, category_domain])
+ else:
+ sub_where = expression.OR([group_domain, category_domain])
+ if operator in expression.NEGATIVE_TERM_OPERATORS:
+ where = expression.AND([where, sub_where])
+ else:
+ where = expression.OR([where, sub_where])
return where
_columns = {
@@ -154,8 +174,7 @@ class res_users(osv.osv):
"a change of password, the user has to login again."),
'signature': fields.text('Signature'),
'active': fields.boolean('Active'),
- 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at logon for this user, in addition to the standard menu."),
- 'menu_id': fields.many2one('ir.actions.actions', 'Menu Action', help="If specified, the action will replace the standard menu for this user."),
+ 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at log on for this user, in addition to the standard menu."),
'groups_id': fields.many2many('res.groups', 'res_groups_users_rel', 'uid', 'gid', 'Groups'),
# Special behavior for this field: res.company.search() will only return the companies
# available to the current user (should be the user's companies?), when the user_preference
@@ -217,16 +236,6 @@ class res_users(osv.osv):
return [c]
return False
- def _get_menu(self,cr, uid, context=None):
- dataobj = self.pool.get('ir.model.data')
- try:
- model, res_id = dataobj.get_object_reference(cr, uid, 'base', 'action_menu_admin')
- if model != 'ir.actions.act_window':
- return False
- return res_id
- except ValueError:
- return False
-
def _get_group(self,cr, uid, context=None):
dataobj = self.pool.get('ir.model.data')
result = []
@@ -244,7 +253,6 @@ class res_users(osv.osv):
'password': '',
'active': True,
'customer': False,
- 'menu_id': _get_menu,
'company_id': _get_company,
'company_ids': _get_companies,
'groups_id': _get_group,
diff --git a/openerp/addons/base/res/res_users_view.xml b/openerp/addons/base/res/res_users_view.xml
index 8a3f372af7a..ba1cee1e140 100644
--- a/openerp/addons/base/res/res_users_view.xml
+++ b/openerp/addons/base/res/res_users_view.xml
@@ -201,7 +201,6 @@
-
diff --git a/openerp/addons/base/rng/view.rng b/openerp/addons/base/rng/view.rng
index 794eade6b89..d996dfd971f 100644
--- a/openerp/addons/base/rng/view.rng
+++ b/openerp/addons/base/rng/view.rng
@@ -652,6 +652,7 @@
+
diff --git a/openerp/addons/base/security/base_security.xml b/openerp/addons/base/security/base_security.xml
index 27e55bf24d1..c0f4242198c 100644
--- a/openerp/addons/base/security/base_security.xml
+++ b/openerp/addons/base/security/base_security.xml
@@ -43,6 +43,7 @@
diff --git a/openerp/addons/base/test/test_auth.yml b/openerp/addons/base/test/test_auth.yml
deleted file mode 100644
index 62132f01406..00000000000
--- a/openerp/addons/base/test/test_auth.yml
+++ /dev/null
@@ -1,73 +0,0 @@
--
- I will now stress the authentication layer of the ORM
--
- I create a test user.
--
- !record {model: res.users, id: res_user_test_a1}:
- name: Test Auth User 1
- login: test_base_a1
- password: 'base-test-passwd'
- active: True
--
- I will prepare the context
--
- !python {model: res.users }: |
- from openerp.tools import config
- host = config.get_misc('httpd', 'interface')
- port = config.get_misc('httpd', 'port', 8069)
- if not host:
- host = config.get('xmlrpc_interface')
- port = config.get('xmlrpc_port') or self.port
- if host == '0.0.0.0' or not host:
- host = '127.0.0.1'
- port = int(port)
- context['test_xmlrpc_url'] = 'http://%s:%d/xmlrpc/' % (host, port)
--
- I will commit the cursor and try to login.
--
- !python {model: res.users }: |
- from xmlrpclib import ServerProxy
- cr.commit()
- try:
- logsock = ServerProxy(context['test_xmlrpc_url']+'common')
- luid = logsock.login(cr.dbname, 'test_base_a1', 'base-test-passwd')
- assert luid, "User is not activated after res.users commit!"
- except Exception:
- raise
--
- I will just try to read something as that user
--
- !python {model: res.users }: |
- from xmlrpclib import ServerProxy
- cr.commit()
- try:
- logsock = ServerProxy(context['test_xmlrpc_url']+'object')
- luid = ref('res_user_test_a1')
- res = logsock.execute(cr.dbname, luid, 'base-test-passwd', 'res.users', 'read', luid, ['name',])
- assert res and res['name'], "User cannot read its name!"
- except Exception:
- raise
--
- I will now disable the user.
--
- !record {model: res.users, id: res_user_test_a1}:
- active: False
--
- I will commit the cursor.
--
- !python {model: res.users }: |
- cr.commit()
--
- I will try to read again, connecting as the disabled user.
--
- !python {model: res.users }: |
- from xmlrpclib import ServerProxy
- cr.commit()
- try:
- logsock = ServerProxy(context['test_xmlrpc_url']+'object')
- luid = ref('res_user_test_a1')
- res = logsock.execute(cr.dbname, luid, 'base-test-passwd', 'res.users', 'read', luid, ['name',])
- raise AssertionError("User should not be enabled!")
- except Fault, e:
- if e.faultCode != 'AccessDenied':
- raise
diff --git a/openerp/addons/base/test/base_test.yml b/openerp/addons/base/tests/base_test.yml
similarity index 93%
rename from openerp/addons/base/test/base_test.yml
rename to openerp/addons/base/tests/base_test.yml
index baf8aa88815..e73d8177fc0 100644
--- a/openerp/addons/base/test/base_test.yml
+++ b/openerp/addons/base/tests/base_test.yml
@@ -302,3 +302,17 @@
float_round(0.01, precision_digits=3, precision_rounding=0.01)
except AssertionError:
pass
+-
+ Test res.groups name search
+-
+ !python {model: res.groups}: |
+ all_groups = self.search(cr, uid, [])
+ full_names = [(group.id, group.full_name) for group in self.browse(cr, uid, all_groups)]
+ group_ids = self.search(cr, uid, [('full_name', 'like', '%Sale%')])
+ assert set(group_ids) == set([id for (id, full_name) in full_names if 'Sale' in full_name]), "did not match search for 'Sale'"
+ group_ids = self.search(cr, uid, [('full_name', 'like', '%Technical%')])
+ assert set(group_ids) == set([id for (id, full_name) in full_names if 'Technical' in full_name]), "did not match search for 'Technical'"
+ group_ids = self.search(cr, uid, [('full_name', 'like', '%Sales /%')])
+ assert set(group_ids) == set([id for (id, full_name) in full_names if 'Sales /' in full_name]), "did not match search for 'Sales /'"
+ group_ids = self.search(cr, uid, [('full_name', 'in', ['Administration / Access Rights','Contact Creation'])])
+ assert group_ids, "did not match search for 'Administration / Access Rights' and 'Contact Creation'"
diff --git a/openerp/addons/base/test/test_ir_rule.yml b/openerp/addons/base/tests/test_ir_rule.yml
similarity index 100%
rename from openerp/addons/base/test/test_ir_rule.yml
rename to openerp/addons/base/tests/test_ir_rule.yml
diff --git a/openerp/addons/base/test/test_osv_expression.yml b/openerp/addons/base/tests/test_osv_expression.yml
similarity index 100%
rename from openerp/addons/base/test/test_osv_expression.yml
rename to openerp/addons/base/tests/test_osv_expression.yml
diff --git a/openerp/addons/base/workflow/workflow.py b/openerp/addons/base/workflow/workflow.py
index eb50fe56e68..7c53320155b 100644
--- a/openerp/addons/base/workflow/workflow.py
+++ b/openerp/addons/base/workflow/workflow.py
@@ -2,7 +2,7 @@
##############################################################################
#
# OpenERP, Open Source Business Applications
-# Copyright (C) 2004-2012 OpenERP S.A. ().
+# Copyright (C) 2004-2014 OpenERP S.A. ().
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -137,10 +137,12 @@ class wkf_instance(osv.osv):
_rec_name = 'res_type'
_log_access = False
_columns = {
+ 'uid': fields.integer('User'), # FIXME no constraint??
'wkf_id': fields.many2one('workflow', 'Workflow', ondelete='cascade', select=True),
'res_id': fields.integer('Resource ID'),
'res_type': fields.char('Resource Object', size=64),
'state': fields.char('Status', size=32),
+ 'transition_ids': fields.many2many('workflow.transition', 'wkf_witm_trans', 'inst_id', 'trans_id'),
}
def _auto_init(self, cr, context=None):
super(wkf_instance, self)._auto_init(cr, context)
diff --git a/openerp/cli/server.py b/openerp/cli/server.py
index 18ac69c38e2..5d731a9ad41 100644
--- a/openerp/cli/server.py
+++ b/openerp/cli/server.py
@@ -81,8 +81,11 @@ def report_configuration():
def rm_pid_file():
config = openerp.tools.config
- if not openerp.evented and os.path.exists(config['pidfile']):
- os.unlink(config['pidfile'])
+ if not openerp.evented and config['pidfile']:
+ try:
+ os.unlink(config['pidfile'])
+ except OSError:
+ pass
def setup_pid_file():
""" Create a file with the process id written in it.
diff --git a/openerp/http.py b/openerp/http.py
index c9181d2c211..d1cd7f6144d 100644
--- a/openerp/http.py
+++ b/openerp/http.py
@@ -559,7 +559,7 @@ class HttpRequest(WebRequest):
response.set_cookie(k, v)
return response
- def render(self, template, qcontext=None, **kw):
+ def render(self, template, qcontext=None, lazy=True, **kw):
""" Lazy render of QWeb template.
The actual rendering of the given template will occur at then end of
@@ -568,8 +568,12 @@ class HttpRequest(WebRequest):
:param basestring template: template to render
:param dict qcontext: Rendering context to use
+ :param dict lazy: Lazy rendering is processed later in wsgi response layer (default True)
"""
- return Response(template=template, qcontext=qcontext, **kw)
+ response = Response(template=template, qcontext=qcontext, **kw)
+ if not lazy:
+ return response.render()
+ return response
def not_found(self, description=None):
""" Helper for 404 response, return its result from the method
@@ -601,6 +605,16 @@ class ControllerType(type):
# flag old-style methods with req as first argument
for k, v in attrs.items():
if inspect.isfunction(v) and hasattr(v, 'original_func'):
+ # Set routing type on original functions
+ routing_type = v.routing.get('type')
+ parent = [claz for claz in bases if isinstance(claz, ControllerType) and hasattr(claz, k)]
+ parent_routing_type = getattr(parent[0], k).original_func.routing_type if parent else routing_type or 'http'
+ if routing_type is not None and routing_type is not parent_routing_type:
+ routing_type = parent_routing_type
+ _logger.warn("Subclass re-defines with different type than original."
+ " Will use original type: %r" % (cls.__module__, cls.__name__, k, parent_routing_type))
+ v.original_func.routing_type = routing_type or parent_routing_type
+
spec = inspect.getargspec(v.original_func)
first_arg = spec.args[1] if len(spec.args) >= 2 else None
if first_arg in ["req", "request"]:
@@ -660,15 +674,6 @@ def routing_map(modules, nodb_only, converters=None):
for claz in reversed(mv.im_class.mro()):
fn = getattr(claz, mv.func_name, None)
if fn and hasattr(fn, 'routing') and fn not in methods_done:
- fn_type = fn.routing.get('type')
- if not routing_type:
- routing_type = fn_type
- else:
- if fn_type and routing_type != fn_type:
- _logger.warn("Subclass re-defines with different type than original."
- " Will use original type: %r", fn.__module__, fn.__name__, routing_type)
- fn.routing['type'] = routing_type
- fn.original_func.routing_type = routing_type
methods_done.append(fn)
routing.update(fn.routing)
if not nodb_only or nodb_only == (routing['auth'] == "none"):
@@ -1224,10 +1229,11 @@ class Root(object):
try:
with openerp.tools.mute_logger('openerp.sql_db'):
ir_http = request.registry['ir.http']
- except psycopg2.OperationalError:
- # psycopg2 error. At this point, that means the
- # database probably does not exists anymore. Log the
- # user out and fall back to nodb
+ except (AttributeError, psycopg2.OperationalError):
+ # psycopg2 error or attribute error while constructing
+ # the registry. That means the database probably does
+ # not exists anymore or the code doesnt match the db.
+ # Log the user out and fall back to nodb
request.session.logout()
result = _dispatch_nodb()
else:
@@ -1295,6 +1301,11 @@ class CommonController(Controller):
""" Method used by client APIs to contact OpenERP. """
return dispatch_rpc(service, method, args)
+ @route('/gen_session_id', type='json', auth="none")
+ def gen_session_id(self):
+ nsession = root.session_store.new()
+ return nsession.sid
+
# register main wsgi handler
root = Root()
openerp.service.wsgi_server.register_wsgi_handler(root)
diff --git a/openerp/release.py b/openerp/release.py
index 99de8e00bde..1a9c863660c 100644
--- a/openerp/release.py
+++ b/openerp/release.py
@@ -30,7 +30,7 @@ RELEASE_LEVELS_DISPLAY = {ALPHA: ALPHA,
# properly comparable using normal operarors, for example:
# (6,1,0,'beta',0) < (6,1,0,'candidate',1) < (6,1,0,'candidate',2)
# (6,1,0,'candidate',2) < (6,1,0,'final',0) < (6,1,2,'final',0)
-version_info = (7, 'saas~4', 0, FINAL, 0)
+version_info = (8, 0, 0, ALPHA, 1)
version = '.'.join(map(str, version_info[:2])) + RELEASE_LEVELS_DISPLAY[version_info[3]] + str(version_info[4] or '')
series = serie = major_version = '.'.join(map(str, version_info[:2]))
diff --git a/openerp/tests/common.py b/openerp/tests/common.py
index e881959a31b..1d9841692e7 100644
--- a/openerp/tests/common.py
+++ b/openerp/tests/common.py
@@ -229,6 +229,7 @@ class HttpCase(TransactionCase):
# kill phantomjs if phantom.exit() wasn't called in the test
if phantom.poll() is None:
phantom.terminate()
+ phantom.wait()
self._wait_remaining_requests()
_logger.info("phantom_run execution finished")
diff --git a/openerp/tools/amount_to_text.py b/openerp/tools/amount_to_text.py
index 1dd8f7a6074..68b37f70dd3 100644
--- a/openerp/tools/amount_to_text.py
+++ b/openerp/tools/amount_to_text.py
@@ -24,7 +24,7 @@
#-------------------------------------------------------------
-to_19_fr = ( 'zéro', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six',
+to_19_fr = ( u'zéro', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six',
'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize',
'quatorze', 'quinze', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf' )
tens_fr = ( 'vingt', 'trente', 'quarante', 'Cinquante', 'Soixante', 'Soixante-dix', 'Quatre-vingts', 'Quatre-vingt Dix')
diff --git a/openerp/tools/convert.py b/openerp/tools/convert.py
index a4231529b8f..23e2f61e0dc 100644
--- a/openerp/tools/convert.py
+++ b/openerp/tools/convert.py
@@ -808,8 +808,8 @@ form: module.record_id""" % (xml_id,)
f_ref = field.get("ref",'').encode('utf-8')
f_search = field.get("search",'').encode('utf-8')
f_model = field.get("model",'').encode('utf-8')
- if not f_model and model._columns.get(f_name,False):
- f_model = model._columns[f_name]._obj
+ if not f_model and model._all_columns.get(f_name,False):
+ f_model = model._all_columns[f_name].column._obj
f_use = field.get("use",'').encode('utf-8') or 'id'
f_val = False
@@ -821,9 +821,9 @@ form: module.record_id""" % (xml_id,)
# browse the objects searched
s = f_obj.browse(cr, self.uid, f_obj.search(cr, self.uid, q))
# column definitions of the "local" object
- _cols = self.pool[rec_model]._columns
+ _cols = self.pool[rec_model]._all_columns
# if the current field is many2many
- if (f_name in _cols) and _cols[f_name]._type=='many2many':
+ if (f_name in _cols) and _cols[f_name].column._type=='many2many':
f_val = [(6, 0, map(lambda x: x[f_use], s))]
elif len(s):
# otherwise (we are probably in a many2one field),
@@ -833,17 +833,17 @@ form: module.record_id""" % (xml_id,)
if f_ref=="null":
f_val = False
else:
- if f_name in model._columns \
- and model._columns[f_name]._type == 'reference':
+ if f_name in model._all_columns \
+ and model._all_columns[f_name].column._type == 'reference':
val = self.model_id_get(cr, f_ref)
f_val = val[0] + ',' + str(val[1])
else:
f_val = self.id_get(cr, f_ref)
else:
f_val = _eval_xml(self,field, self.pool, cr, self.uid, self.idref)
- if model._columns.has_key(f_name):
+ if f_name in model._all_columns:
import openerp.osv as osv
- if isinstance(model._columns[f_name], osv.fields.integer):
+ if isinstance(model._all_columns[f_name].column, osv.fields.integer):
f_val = int(f_val)
res[f_name] = f_val
diff --git a/openerp/tools/func.py b/openerp/tools/func.py
index 89cdf9fb622..7d04c62a1c9 100644
--- a/openerp/tools/func.py
+++ b/openerp/tools/func.py
@@ -34,20 +34,19 @@ class lazy_property(object):
"""
def __init__(self, fget):
self.fget = fget
- self.name = fget.__name__
def __get__(self, obj, cls):
if obj is None:
return self
value = self.fget(obj)
- setattr(obj, self.name, value)
+ setattr(obj, self.fget.__name__, value)
return value
@staticmethod
def reset_all(obj):
""" Reset all lazy properties on the instance `obj`. """
cls = type(obj)
- obj_dict = obj.__dict__
+ obj_dict = vars(obj)
for name in obj_dict.keys():
if isinstance(getattr(cls, name, None), lazy_property):
obj_dict.pop(name)
diff --git a/openerp/tools/mail.py b/openerp/tools/mail.py
index de6cd173521..7968b23f013 100644
--- a/openerp/tools/mail.py
+++ b/openerp/tools/mail.py
@@ -45,7 +45,7 @@ tags_to_kill = ["script", "head", "meta", "title", "link", "style", "frame", "if
tags_to_remove = ['html', 'body', 'font']
# allow new semantic HTML5 tags
-allowed_tags = clean.defs.tags | frozenset('article section header footer hgroup nav aside figure main'.split())
+allowed_tags = clean.defs.tags | frozenset('article section header footer hgroup nav aside figure main'.split() + [etree.Comment])
safe_attrs = clean.defs.safe_attrs | frozenset(
['style',
'data-oe-model', 'data-oe-id', 'data-oe-field', 'data-oe-type', 'data-oe-expression', 'data-oe-translate', 'data-oe-nodeid',
@@ -70,6 +70,8 @@ def html_sanitize(src, silent=True, strict=False):
'forms': True, # remove form tags
'remove_unknown_tags': False,
'allow_tags': allowed_tags,
+ 'comments': False,
+ 'processing_instructions' : False
}
if etree.LXML_VERSION >= (2, 3, 1):
# kill_tags attribute has been added in version 2.3.1
@@ -339,6 +341,10 @@ def html_email_clean(html, remove=False, shorten=False, max_length=300, expand_o
overlength_section_count = 0
cur_char_nbr = 0
for node in root.iter():
+ # comments do not need processing
+ # note: bug in node.get(value, default) for HtmlComments, default never returned
+ if node.tag == etree.Comment:
+ continue
# do not take into account multiple spaces that are displayed as max 1 space in html
node_text = ' '.join((node.text and node.text.strip(' \t\r\n') or '').split())
diff --git a/openerp/workflow/instance.py b/openerp/workflow/instance.py
index fd15eee6243..494214cd4b8 100644
--- a/openerp/workflow/instance.py
+++ b/openerp/workflow/instance.py
@@ -43,7 +43,7 @@ class WorkflowInstance(object):
assert isinstance(workflow_id, (int, long))
cr = session.cr
- cr.execute('insert into wkf_instance (res_type,res_id,uid,wkf_id) values (%s,%s,%s,%s) RETURNING id', (record.model, record.id, session.uid, workflow_id))
+ cr.execute('insert into wkf_instance (res_type,res_id,uid,wkf_id,state) values (%s,%s,%s,%s,%s) RETURNING id', (record.model, record.id, session.uid, workflow_id, 'active'))
instance_id = cr.fetchone()[0]
cr.execute('select * from wkf_activity where flow_start=True and wkf_id=%s', (workflow_id,))