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 - - Menu - menu - ir.actions.act_window - - ir.ui.menu - tree - [('parent_id', '=', False)] - 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 @@ + Address Book + Configuration 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 @@ + Administration 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,))