[MERGE]with main branch
bzr revid: jpr@tinyerp.com-20140505095333-v514kj2dz0advdf8
This commit is contained in:
commit
1bb22f2ddd
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -11,15 +11,6 @@
|
|||
</field>
|
||||
<field name="field_parent">child_id</field>
|
||||
</record>
|
||||
<record id="action_menu_admin" model="ir.actions.act_window">
|
||||
<field name="name">Menu</field>
|
||||
<field name="usage">menu</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="view_id" ref="view_menu"/>
|
||||
<field name="res_model">ir.ui.menu</field>
|
||||
<field name="view_type">tree</field>
|
||||
<field name="domain">[('parent_id', '=', False)]</field>
|
||||
</record>
|
||||
|
||||
<record id="lang_en" model="res.lang">
|
||||
<field name="code">en_US</field>
|
||||
|
@ -75,7 +66,6 @@
|
|||
<field name="partner_id" ref="base.partner_root"/>
|
||||
<field name="company_id" ref="main_company"/>
|
||||
<field name="company_ids" eval="[(4, ref('main_company'))]"/>
|
||||
<field name="menu_id" ref="action_menu_admin"/>
|
||||
<field name="signature">--
|
||||
Administrator</field>
|
||||
</record>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -142,6 +142,4 @@ class ir_filters(osv.osv):
|
|||
'is_default': False
|
||||
}
|
||||
|
||||
ir_filters()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -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('<link href="/web/css/%s" rel="stylesheet"/>' % self.xmlid)
|
||||
if self.javascripts:
|
||||
response.append('<script type="text/javascript" src="/web/js/%s"></script>' % 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:
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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]):
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
<field name="model"/>
|
||||
<field name="inherit_id"/>
|
||||
<field name="type"/>
|
||||
<field name="arch"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Object" domain="[]" context="{'group_by':'model'}"/>
|
||||
<filter string="Type" domain="[]" context="{'group_by':'type'}"/>
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -80,33 +80,30 @@
|
|||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Reports Configuration">
|
||||
<group string="Footer Configuration">
|
||||
<page string="Report Configuration">
|
||||
<group string="Configuration">
|
||||
<field name="custom_footer" on_change="onchange_footer(custom_footer, phone, fax, email, website, vat, company_registry, bank_ids)"/>
|
||||
<field name="rml_footer" attrs="{'invisible': [('custom_footer','=',False)]}"/>
|
||||
<field name="rml_footer_readonly" attrs="{'invisible': [('custom_footer','=',True)]}"/>
|
||||
</group>
|
||||
<group string="RML Configuration">
|
||||
|
||||
<group string="Configuration (RML)" col="2" groups="base.group_no_one">
|
||||
<field name="rml_paper_format" on_change="onchange_rml_paper_format(rml_paper_format)"/>
|
||||
</group>
|
||||
<group>
|
||||
|
||||
<label for="font" />
|
||||
<div>
|
||||
<div>
|
||||
<field name="font" class="oe_inline" colspan="2" on_change="onchange_font_name(font, rml_header, rml_header2, rml_header3)" />
|
||||
<button string="(reload fonts)" name="act_discover_fonts" type="object" class="oe_link" colspan="1"/>
|
||||
</div>
|
||||
<field name="font" class="oe_inline" on_change="onchange_font_name(font, rml_header, rml_header2, rml_header3)" />
|
||||
<button string="(reload fonts)" name="act_discover_fonts" type="object" class="oe_link" colspan="1"/>
|
||||
</div>
|
||||
<div class="oe_right oe_button_box" name="button_box" colspan="2">
|
||||
<button name="%(preview_report)d" string="Preview Header/Footer" type="action"/>
|
||||
</div>
|
||||
<group col="1" colspan="2">
|
||||
<field name="rml_header"/>
|
||||
<field name="rml_header2"/>
|
||||
<field name="rml_header3"/>
|
||||
</group>
|
||||
</group>
|
||||
<div class="oe_right oe_button_box" name="button_box" groups="base.group_no_one" >
|
||||
<button name="%(preview_report)d" string="Preview Header/Footer" type="action"/>
|
||||
</div>
|
||||
<label for="rml_header" groups="base.group_no_one" />
|
||||
<field name="rml_header" groups="base.group_no_one" />
|
||||
<label for="rml_header2" groups="base.group_no_one" />
|
||||
<field name="rml_header2" groups="base.group_no_one" />
|
||||
<label for="rml_header3" groups="base.group_no_one" />
|
||||
<field name="rml_header3" groups="base.group_no_one" />
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -340,7 +340,7 @@
|
|||
<separator/>
|
||||
<field name="category_id" string="Tag" filter_domain="[('category_id','ilike', self)]"/>
|
||||
<field name="user_id"/>
|
||||
<field name="parent_id" domain="[('is_company','=',1)]" filter_domain="[('parent_id','child_of',[self])]"/>
|
||||
<field name="parent_id" domain="[('is_company','=',1)]" operator="child_of"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Salesperson" icon="terp-personal" domain="[]" context="{'group_by' : 'user_id'}" />
|
||||
<filter string="Company" context="{'group_by': 'parent_id'}"/>
|
||||
|
|
|
@ -7,9 +7,11 @@
|
|||
</record>
|
||||
|
||||
<record model="ir.ui.menu" id="menu_config_address_book">
|
||||
<field name="name">Address Book</field>
|
||||
<field eval="[(6,0,[ref('group_system'), ref('group_partner_manager')])]" name="groups_id"/>
|
||||
</record>
|
||||
<record model="ir.ui.menu" id="menu_base_config">
|
||||
<field name="name">Configuration</field>
|
||||
<field eval="[(6,0,[ref('group_system'), ref('group_partner_manager')])]" name="groups_id"/>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -201,7 +201,6 @@
|
|||
</group>
|
||||
<group string="Menus Customization" groups="base.group_no_one">
|
||||
<field name="action_id"/>
|
||||
<field domain="[('usage','=','menu')]" name="menu_id" required="True"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Messaging and Social" name="messaging">
|
||||
|
|
|
@ -652,6 +652,7 @@
|
|||
<rng:optional><rng:attribute name="event_open_popup" /></rng:optional>
|
||||
<rng:optional><rng:attribute name="attendee" /></rng:optional>
|
||||
<rng:optional><rng:attribute name="color_is_attendee" /></rng:optional>
|
||||
<rng:optional><rng:attribute name="avatar_filter" /></rng:optional>
|
||||
<rng:optional><rng:attribute name="avatar_model" /></rng:optional>
|
||||
<rng:optional><rng:attribute name="avatar_title" /></rng:optional>
|
||||
<rng:optional><rng:attribute name="use_contacts" /></rng:optional>
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
|
||||
<!-- Set accesses to menu -->
|
||||
<record model="ir.ui.menu" id="base.menu_administration">
|
||||
<field name="name">Administration</field>
|
||||
<field name="groups_id" eval="[(6,0, [ref('group_system'), ref('group_erp_manager')])]"/>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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'"
|
|
@ -2,7 +2,7 @@
|
|||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Business Applications
|
||||
# Copyright (C) 2004-2012 OpenERP S.A. (<http://openerp.com>).
|
||||
# Copyright (C) 2004-2014 OpenERP S.A. (<http://openerp.com>).
|
||||
#
|
||||
# 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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 <function %s.%s.%s> 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 <function %s.%s> 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)
|
||||
|
|
|
@ -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]))
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue