[MERGE] merged with main trunk

bzr revid: kjo@tinyerp.com-20120702113552-r1tfw0a10l5gg2zg
bzr revid: qdp-launchpad@openerp.com-20120703083343-kdog48z36lmv9e3w
This commit is contained in:
Quentin (OpenERP) 2012-07-03 10:33:43 +02:00
commit 1cf92ce031
107 changed files with 2314 additions and 746 deletions

View File

@ -347,6 +347,39 @@ CREATE TABLE ir_model_data (
res_id integer, primary key(id)
);
-- Records foreign keys and constraints installed by a module (so they can be
-- removed when the module is uninstalled):
-- - for a foreign key: type is 'f',
-- - 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 character varying(128) NOT NULL
);
-- 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 character varying(128) NOT NULL
);
---------------------------------
-- Users
---------------------------------

View File

@ -1,23 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<menuitem id="menu_reporting" name="Reporting" sequence="90"/>
<menuitem id="menu_reporting" name="Reporting" sequence="90" groups="base.group_user"/>
<menuitem id="menu_reporting_dashboard" name="Dashboards" parent="menu_reporting" sequence="0"/>
<menuitem id="menu_reporting_config" name="Configuration" parent="menu_reporting" sequence="100" groups="base.group_system"/>
<menuitem id="menu_administration" name="Settings" sequence="100" icon="terp-administration"/>
<menuitem id="menu_administration" name="Settings" sequence="100"/>
<menuitem id="menu_management" name="Modules" parent="menu_administration" sequence="0"/>
<menuitem id="menu_config" name="Configuration" parent="menu_administration" sequence="1"/>
<menuitem id="menu_administration_shortcut" parent="menu_administration" name="Custom Shortcuts" sequence="50"/>
<menuitem id="menu_users" name="Users" parent="menu_administration" sequence="4" groups="base.group_no_one"/>
<menuitem id="menu_users" name="Users" parent="menu_administration" sequence="4"/>
<menuitem id="menu_translation" name="Translations" parent="menu_administration" sequence="7"/>
<menuitem id="menu_translation_app" name="Application Terms" parent="menu_translation" sequence="4" groups="base.group_no_one"/>
<menuitem id="menu_translation_export" name="Import / Export" groups="base.group_no_one" parent="menu_translation" sequence="3"/>
<menuitem id="menu_custom" name="Technical" parent="menu_administration" sequence="110" groups="base.group_no_one"/>
<menuitem id="next_id_2" name="User Interface" parent="menu_custom"/>
<menuitem id="menu_translation_export" name="Import / Export" parent="menu_translation" sequence="3" groups="base.group_no_one"/>
<menuitem id="menu_custom" name="Technical" parent="menu_administration" sequence="110" groups="base.group_no_one"/>
<menuitem id="next_id_2" name="User Interface" parent="menu_custom"/>
<menuitem id="menu_email" name="Email" parent="menu_custom" sequence="1"/>
<menuitem id="menu_security" name="Security" parent="menu_custom" sequence="25"/>
<menuitem id="menu_ir_property" name="Parameters" parent="menu_custom" sequence="24"/>
<menuitem id="next_id_4" name="Low Level Objects" parent="menu_custom" sequence="30"/>
<menuitem id="menu_low_workflow" name="Workflows" parent="next_id_4"/>
</data>
</openerp>

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:44+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:18+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,13 +14,13 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:44+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:19+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh
msgid "Saint Helena"
msgstr ""
msgstr "St. Helena"
#. module: base
#: view:ir.actions.report.xml:0
@ -35,7 +35,7 @@ msgstr "DagTyd"
#. module: base
#: model:ir.module.module,shortdesc:base.module_project_mailgate
msgid "Tasks-Mail Integration"
msgstr ""
msgstr "Take - Vonkpos Integrasie"
#. module: base
#: code:addons/fields.py:582
@ -44,6 +44,8 @@ msgid ""
"The second argument of the many2many field %s must be a SQL table !You used "
"%s, which is not a valid SQL table name."
msgstr ""
"Die tweede argument van die baie2baie veld %s moet 'n SQL-tabel wees! U "
"gebruik %s, wat nie 'n geldige SQL tabel naam is nie."
#. module: base
#: field:ir.ui.view,arch:0
@ -70,11 +72,26 @@ msgid ""
" * Graph of My Remaining Hours by Project\n"
" "
msgstr ""
"\n"
"Projek bestuur module volg multi-vlak projekte, take, werk wat gedoen is aan "
"take, esm.\n"
"================================================== "
"====================================\n"
"\n"
"Dit is in staat om beplanning te lewer, take te sorteer, . eso\n"
"\n"
"Bedieningspaneel vir die projek lede wat insluit:\n"
"--------------------------------------------\n"
"* Lys van my oop take\n"
"* Lys van my gedelegeerde take\n"
"* Grafiek van my projekte: Beplande vs Totale ure\n"
"* Grafiek van my Oorblywende ure per Projek\n"
" "
#. module: base
#: field:base.language.import,code:0
msgid "Code (eg:en__US)"
msgstr ""
msgstr "Kode (bv.: en__US)"
#. module: base
#: view:workflow:0
@ -84,7 +101,7 @@ msgstr ""
#: field:workflow.transition,wkf_id:0
#: field:workflow.workitem,wkf_id:0
msgid "Workflow"
msgstr ""
msgstr "Werksvloei"
#. module: base
#: selection:ir.sequence,implementation:0
@ -94,12 +111,12 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Hungarian / Magyar"
msgstr ""
msgstr "Hongaars / Magyar"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (PY) / Español (PY)"
msgstr ""
msgstr "Spaans (PY) / Español (PY)"
#. module: base
#: model:ir.module.category,description:base.module_category_project_management
@ -107,11 +124,13 @@ msgid ""
"Helps you manage your projects and tasks by tracking them, generating "
"plannings, etc..."
msgstr ""
"Help om jou projekte en take te bestuur deur dit na te volg, planne te maak, "
"ens .."
#. module: base
#: field:ir.actions.act_window,display_menu_tip:0
msgid "Display Menu Tips"
msgstr ""
msgstr "Vertoon Kieslys Wenke"
#. module: base
#: help:ir.cron,model:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:44+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:19+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:44+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:19+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -467,7 +467,7 @@ msgstr ""
#. module: base
#: field:res.bank,email:0
#: field:res.partner.address,email:0
msgid "E-Mail"
msgid "Email
msgstr ""
#. module: base
@ -544,16 +544,16 @@ msgid "\n"
"==========================================================================\n"
"\n"
"You can define your multiple levels of recall through the menu:\n"
" Accounting/Configuration/Miscellaneous/Follow-Ups\n"
" Accounting/Configuration/Miscellaneous/Follow-ups\n"
"\n"
"Once it is defined, you can automatically print recalls every day through simply clicking on the menu:\n"
" Accounting/Periodical Processing/Billing/Send followups\n"
" Accounting/Periodical Processing/Billing/Send follow-ups\n"
"\n"
"It will generate a PDF with all the letters according to the the\n"
"different levels of recall defined. You can define different policies\n"
"for different companies. You can also send mail to the customer.\n"
"\n"
"Note that if you want to check the followup level for a given partner/account entry, you can do from in the menu:\n"
"Note that if you want to check the follow-up level for a given partner/account entry, you can do from in the menu:\n"
" Accounting/Reporting/Generic Reporting/Partners/Follow-ups Sent\n"
"\n"
""
@ -7592,7 +7592,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_email_template
msgid "E-Mail Templates"
msgid "Email Templates
msgstr ""
#. module: base
@ -9455,7 +9455,7 @@ msgstr ""
#. module: base
#: field:res.partner,email:0
msgid "E-mail"
msgid "Email
msgstr ""
#. module: base
@ -12688,7 +12688,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_account_followup
msgid "Followup Management"
msgid "Follow-up Management"
msgstr ""
#. module: base

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:45+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:20+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:45+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:19+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:45+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:20+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:45+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:20+0000\n"
"X-Generator: Launchpad (build 15482)\n"
"X-Poedit-Language: Czech\n"
#. module: base

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:45+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:20+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:46+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:21+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -12,8 +12,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:47+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:21+0000\n"
"X-Generator: Launchpad (build 15482)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
"X-Poedit-SourceCharset: utf-8\n"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:52+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:26+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:51+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:25+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:52+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:26+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:53+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:27+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh
@ -3801,7 +3801,7 @@ msgstr "IVA"
#. module: base
#: field:res.users,new_password:0
msgid "Set password"
msgstr ""
msgstr "Establecer contraseña"
#. module: base
#: view:res.lang:0
@ -14477,7 +14477,7 @@ msgstr "No puede suprimir el campo '%s' !"
#. module: base
#: view:res.users:0
msgid "Allowed Companies"
msgstr ""
msgstr "Compañias permitidas"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_de

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:53+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:27+0000\n"
"X-Generator: Launchpad (build 15482)\n"
"Language: \n"
#. module: base

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:53+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:27+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:46+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:20+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:45+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:19+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -9,8 +9,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:49+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:23+0000\n"
"X-Generator: Launchpad (build 15482)\n"
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
"X-Poedit-Language: Persian\n"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:53+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:28+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:46+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:21+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:46+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:21+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:47+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:21+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:47+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:21+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:47+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:22+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:50+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:24+0000\n"
"X-Generator: Launchpad (build 15482)\n"
"Language: hr\n"
#. module: base
@ -182,7 +182,7 @@ msgstr ""
#. module: base
#: field:res.partner,ref:0
msgid "Reference"
msgstr "Referenca"
msgstr "Šifra"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_be_invoice_bba
@ -3689,8 +3689,8 @@ msgid ""
"Value Added Tax number. Check the box if the partner is subjected to the "
"VAT. Used by the VAT legal statement."
msgstr ""
"PDV broj. Označite ako je partner podvrgnut PDV-u. Korišteno pri zakonskim "
"PDV izvještajima."
"PDV broj. Označite ako je partner obveznik PDV-a. Koristi se u nekim "
"izvještajima."
#. module: base
#: selection:ir.sequence,implementation:0
@ -3785,7 +3785,7 @@ msgstr "Provjera Ean"
#. module: base
#: field:res.partner,vat:0
msgid "VAT"
msgstr "VAT"
msgstr "PDV"
#. module: base
#: field:res.users,new_password:0
@ -10051,7 +10051,7 @@ msgstr "Tjedni"
#: code:addons/base/res/res_company.py:157
#, python-format
msgid "VAT: "
msgstr ""
msgstr "PDV "
#. module: base
#: model:res.country,name:base.af

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:47+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:22+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:44+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:19+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:48+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:22+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:47+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:22+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:48+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:22+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:48+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:22+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:46+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:21+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:48+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:22+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:48+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:23+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:48+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:23+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:48+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:23+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:49+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:23+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

File diff suppressed because it is too large Load Diff

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:49+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:23+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:46+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:20+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh
@ -4920,8 +4920,9 @@ msgid ""
"You can not create this document (%s) ! Be sure your user belongs to one of "
"these groups: %s."
msgstr ""
"U kunt dit document (%s) niet maken ! Controleer of uw gebruiker behoort tot "
"één van deze groepen: %s."
"U kunt dit document (%s) niet maken ! Controleer of u voldoende rechten "
"heeft. Om dit document te kunnen maken dient u rechten te hebben tot één van "
"deze groepen: %s."
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_chat
@ -10687,8 +10688,9 @@ msgid ""
"You can not read this document (%s) ! Be sure your user belongs to one of "
"these groups: %s."
msgstr ""
"U kunt dit document (%s) niet lezen ! Controleer dat uw gebruiker behoort "
"tot één van deze groepen: %s."
"U kunt dit document (%s) niet lezen! Controleer of u voldoende rechten "
"heeft. Om dit document te kunnen lezen dient u rechten te hebben tot één van "
"deze groepen: %s."
#. module: base
#: view:res.bank:0
@ -11637,7 +11639,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr
msgid "Employee Directory"
msgstr "Werknemers map"
msgstr "Personeelsbeheer"
#. module: base
#: view:ir.cron:0
@ -14675,8 +14677,9 @@ msgid ""
"You can not delete this document (%s) ! Be sure your user belongs to one of "
"these groups: %s."
msgstr ""
"U kunt dit document (%s) niet verwijderen ! Controleer dat uw gebruiker "
"behoort tot één van deze groepen: %s."
"U kunt dit document (%s) niet verwijderen! Controleer of u voldoende rechten "
"heeft. Om dit document te kunnen verwijderen dient u rechten te hebben tot "
"één van deze groepen: %s."
#. module: base
#: model:ir.module.module,description:base.module_web_livechat

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:53+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:27+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:49+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:24+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:49+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:24+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:52+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:26+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:50+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:24+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:50+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:24+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:50+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:25+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:50+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:25+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:44+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:19+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:50+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:24+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:54+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:28+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:51+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:25+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh
@ -1197,6 +1197,21 @@ msgid ""
"At the end of the month, the planning manager can also check if the encoded "
"timesheets are respecting the planned time on each analytic account.\n"
msgstr ""
"Håll koll på din planering\n"
"Denna modul hjälper dig att hantera dina projektplaner.\n"
"============================================\n"
"\n"
"Den här modulen är baserad på objektbokföringen och är helt integrerad med\n"
"* Tidrapporteringen\n"
"* Semesterplaneringen\n"
"* Projektledningen\n"
"\n"
"Varje avdelningschef har full kontroll över all allokerad tid för all "
"personer inom ansvarsområdet, inklusive godkänd ledighet eller om det "
"fortfarande finns lediga resurser för aktiviteter.\n"
"\n"
"Vid månadsslut kan planeringen jämföras med inrapporterad tid och "
"planeringen gjord för varje objektkonto.\n"
#. module: base
#: selection:ir.property,type:0
@ -2292,6 +2307,21 @@ msgid ""
"re-invoice your customer's expenses if your work by project.\n"
" "
msgstr ""
"\n"
"Denna moduls uppgift är att hantera anställdas utlägg\n"
"==========================================\n"
"\n"
"Hela arbetsflödet genomförs:\n"
"* Preliminära kostnader\n"
"* Bekräftelse av tidrapporten genom den anställde\n"
"* Validering av sin chef\n"
"* Validering av bokförare och faktureringen\n"
"* Betalning av fakturan till den anställde\n"
"\n"
"Denna modul använder också objektredovisning och är kompatibel med\n"
"tidrapport-modulen så att du kommer att automatiskt kunna\n"
"återfaktura kundens kostnader om du använder projektmodulen.\n"
" "
#. module: base
#: field:ir.values,action_id:0
@ -2929,6 +2959,10 @@ msgid ""
"==================================================\n"
" "
msgstr ""
"\n"
"Denna modul ger en PAD i alla projekt-kanbanvyer\n"
"=======================================\n"
" "
#. module: base
#: model:ir.actions.act_window,help:base.action_country
@ -2975,7 +3009,7 @@ msgstr "Bangladesh"
#. module: base
#: model:ir.module.module,shortdesc:base.module_project_retro_planning
msgid "Project Retro-planning"
msgstr "Projekt retro-plannering"
msgstr "Projekt-retroplannering"
#. module: base
#: model:ir.module.module,shortdesc:base.module_stock_planning
@ -4130,7 +4164,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_project_issue_sheet
msgid "Timesheet on Issues"
msgstr ""
msgstr "Tidrapporter på ärenden"
#. module: base
#: model:res.partner.title,name:base.res_partner_title_ltd
@ -5394,7 +5428,7 @@ msgstr "Fält"
#. module: base
#: model:ir.module.module,shortdesc:base.module_project_long_term
msgid "Long Term Projects"
msgstr "Långsiktiga projekt"
msgstr "Långtidsprojekt"
#. module: base
#: model:res.country,name:base.ve
@ -5619,6 +5653,31 @@ msgid ""
"Budgets per Budgets.\n"
"\n"
msgstr ""
"\n"
"Denna modul gör det möjligt för bokförare att hantera objekt- och "
"tvärbudgetar.\n"
"================================================================\n"
"\n"
"När huvudbudget och budgetarna definieras (i bokföring/budgetar/),\n"
"kan projektledarna sätta planerade belopp på varje objektkonto.\n"
"\n"
"Bokförare har möjlighet att se den totala planerade beloppet för varje\n"
"budget och huvudbudget för att säkerställa att totalen inte\n"
"över-/understiger än vad han planen. Kontoplanen kan också kopplas till\n"
"till en grafisk vy.\n"
"\n"
"Tre rapporter finns tillgängliga:\n"
"1. Den första är tillgänglig från en lista med budgetutskottet. Det ger "
"spridning för dessa budgetutskottet av den analytiska konton per master "
"budgetutskottet.\n"
"\n"
"2. Den andra är en sammanfattning av den tidigare, ger endast "
"spridningskoden, för de valda budgetutskottet av den analytiska konton.\n"
"\n"
"3. Den sista är tillgänglig från den analytiska kontoplanen. Det ger att "
"sprida, för de valda analytiska konton, de master budgetutskottet per "
"budgetutskottet.\n"
"\n"
#. module: base
#: help:res.lang,iso_code:0
@ -7035,7 +7094,7 @@ msgstr ""
#. module: base
#: model:ir.ui.menu,name:base.menu_project_long_term
msgid "Long Term Planning"
msgstr "Långsiktig planering"
msgstr "Långtidsplanering"
#. module: base
#: field:ir.actions.server,message:0
@ -7616,6 +7675,13 @@ msgid ""
"all the tasks will change accordingly.\n"
" "
msgstr ""
"\n"
"Ändringsdatum i enlighet med projektets slutdatum.\n"
"=========================================\n"
"\n"
"Om slutdatum för projektet ändras så korrigeras tidsfrister och startdatum "
"för alla aktiviteter i enlighet med detta.\n"
" "
#. module: base
#: help:res.users,view:0
@ -11258,7 +11324,7 @@ msgstr "Åtgärd"
#. module: base
#: model:ir.module.module,shortdesc:base.module_event_project
msgid "Retro-Planning on Events"
msgstr ""
msgstr "Retroplannering av evenemang"
#. module: base
#: code:addons/custom.py:555
@ -11480,6 +11546,13 @@ msgid ""
"handle an issue.\n"
" "
msgstr ""
"\n"
"Denna modul tillför tidrapporter på ärenden/bugghantering i projekt\n"
"======================================================\n"
"\n"
"Arbetsloggar kan administreras för att ge underlag till de timmar ägnade åt "
"ett visst ärende.\n"
" "
#. module: base
#: model:ir.actions.act_window,name:base.ir_sequence_form
@ -13804,6 +13877,25 @@ msgid ""
"state are scheduled with taking the phase's start date\n"
" "
msgstr ""
"\n"
"Longtidsplanerings-modul som spårar planering, schemaläggning och "
"resursfördelning.\n"
"====================================================================\n"
"\n"
"egenskaper\n"
"--------\n"
"* Hantera stora projekt.\n"
"* Definiera olika faser av projekt.\n"
"* Beräkna Fasschemaläggning: Beräkna startdatum och slutdatum för de faser "
"som är i preliminär, öppen och i vilande tillstånd för givna projekt.\n"
" Om ingen projekt anges så alla i anspråktas utkastet, öppen och "
"pågående faserna.\n"
"* Beräkna schemaläggning: Det här fungerar samma som schemaläggaren knappen "
"på project.phase. Det tar projektet som argument och beräknar alla öppna, "
"preliminära och pågående aktiviteter.\n"
"* Schemalägg aktivieteter: Alla preliminära, vilande och öppna planeras med "
"fasens startdatum\n"
" "
#. module: base
#: model:ir.actions.act_window,name:base.action_workflow_activity_form
@ -14788,6 +14880,18 @@ msgid ""
"and decide on their status as they evolve.\n"
" "
msgstr ""
"\n"
"Denna modul tillför ärendehantering och buggadministration till Projekt.\n"
"=========================================================\n"
"\n"
"OpenERP tillåter dig hantera ärenden och problem som kan uppstå i ett "
"projekt\n"
"såsom buggar i ett system, klagomål eller materialproblem, En listvy ger en "
"snabb \n"
"överblick över ärendestocken, tilldela enskilda ärenden till handläggare och "
"ge \n"
"dem status i den takt de utvecklas.\n"
" "
#. module: base
#: field:res.groups,full_name:0
@ -15218,7 +15322,7 @@ msgstr "Land"
#. module: base
#: model:ir.module.module,shortdesc:base.module_project_messages
msgid "In-Project Messaging System"
msgstr ""
msgstr "Projektinternt meddelandesystem"
#. module: base
#: model:res.country,name:base.pn
@ -15550,7 +15654,7 @@ msgstr "Turks and Caicos Islands"
#. module: base
#: model:ir.module.module,shortdesc:base.module_fetchmail_project_issue
msgid "eMail Gateway for Project Issues"
msgstr "E-postbrygga för projektproblem"
msgstr "E-postbrygga för projektärenden"
#. module: base
#: field:res.partner.bank,partner_id:0
@ -15603,6 +15707,8 @@ msgid ""
"Manage relations with prospects and customers using leads, opportunities, "
"requests or issues."
msgstr ""
"Administrera relationen mellan prospektiva kunder och kunder med kundämnen, "
"affärsmöjligheter, önskemål eller ärenden."
#. module: base
#: selection:res.partner.address,type:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:51+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:25+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:51+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:25+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:51+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:25+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:51+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:26+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:52+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:26+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:52+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:26+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:53+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:27+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh
@ -170,7 +170,7 @@ msgstr "过滤条件这个字段是可选输入的,用于在输入关系型字
#. module: base
#: field:res.partner,ref:0
msgid "Reference"
msgstr "关联单号"
msgstr "号"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_be_invoice_bba
@ -9137,6 +9137,7 @@ msgid ""
"use the same timezone that is otherwise used to pick and render date and "
"time values: your computer's timezone."
msgstr ""
"用户的时区为打印报表配置正确的日期时间输出格式。设置这个值是很重要的。你应该根据你的计算机时区来选取相同的时区,因为它也影响系统中日期的选取和呈现。"
#. module: base
#: help:res.country,name:0
@ -13964,7 +13965,7 @@ msgid ""
"The default language used in the graphical user interface, when translations "
"are available. To add a new language, you can use the 'Load an Official "
"Translation' wizard available from the 'Administration' menu."
msgstr ""
msgstr "选可用的翻译作为图形界面的默认语言。你可以通过设置菜单的载入一个官方翻译来添加一个新翻译"
#. module: base
#: model:ir.module.module,description:base.module_l10n_es
@ -14978,7 +14979,7 @@ msgstr "您不能删除字段 '%s' !"
#. module: base
#: view:res.users:0
msgid "Allowed Companies"
msgstr ""
msgstr "允许的公司"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_de
@ -15864,7 +15865,7 @@ msgstr "%r 错误的浏览记录标识符,其应该为一个整数。"
#: field:res.partner.address,function:0
#: selection:workflow.activity,kind:0
msgid "Function"
msgstr "能"
msgstr "能"
#. module: base
#: view:res.widget:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:52+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:26+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-19 04:53+0000\n"
"X-Generator: Launchpad (build 15435)\n"
"X-Launchpad-Export-Date: 2012-06-27 05:27+0000\n"
"X-Generator: Launchpad (build 15482)\n"
#. module: base
#: model:res.country,name:base.sh

View File

@ -20,6 +20,8 @@
##############################################################################
import ir_model
import ir_model_constraint
import ir_model_relation
import ir_sequence
import ir_needaction
import ir_ui_menu

View File

@ -328,7 +328,7 @@
<field name="view_id" ref="action_view_tree"/>
<field name="search_view_id" ref="action_view_search"/>
</record>
<menuitem id="next_id_6" name="Actions" parent="base.next_id_4" sequence="1"/>
<menuitem id="next_id_6" name="Actions" parent="base.menu_custom" sequence="2"/>
<menuitem action="ir_sequence_actions" id="menu_ir_sequence_actions" parent="next_id_6"/>
<menuitem action="act_values_form_action" id="menu_values_form_action" parent="next_id_6"/>
<menuitem action="act_values_form_defaults" id="menu_values_form_defaults" parent="next_id_6"/>
@ -1127,6 +1127,65 @@
</field>
</record>
<record model="ir.ui.view" id="view_model_constraint_form">
<field name="name">ir.model.constraint.form</field>
<field name="model">ir.model.constraint</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Model Constraints">
<field name="type"/>
<field name="name"/>
<field name="module"/>
<field name="model"/>
<newline/>
<field name="date_update" />
<field name="date_init" />
</form>
</field>
</record>
<record id="view_model_constraint_list" model="ir.ui.view">
<field name="name">ir.model.constraint.list</field>
<field name="model">ir.model.constraint</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Model Constraints">
<field name="type"/>
<field name="name"/>
<field name="module"/>
<field name="model"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_model_relation_form">
<field name="name">ir.model.relation.form</field>
<field name="model">ir.model.relation</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="ManyToMany Relations">
<field name="name"/>
<field name="module"/>
<field name="model"/>
<newline/>
<field name="date_update" />
<field name="date_init" />
</form>
</field>
</record>
<record id="view_model_relation_list" model="ir.ui.view">
<field name="name">ir.model.relation.list</field>
<field name="model">ir.model.relation</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="ManyToMany Relations">
<field name="name"/>
<field name="module"/>
<field name="model"/>
</tree>
</field>
</record>
<record id="action_model_model" model="ir.actions.act_window">
<field name="name">Models</field>
@ -1156,6 +1215,24 @@
<menuitem action="action_model_data" id="ir_model_data_menu" parent="base.next_id_5"
groups="base.group_no_one"/>
<record id="action_model_constraint" model="ir.actions.act_window">
<field name="name">Model Constraints</field>
<field name="res_model">ir.model.constraint</field>
<field name="view_type">form</field>
<field name="view_id" ref="view_model_constraint_list"/>
</record>
<menuitem action="action_model_constraint" id="ir_model_constraint_menu" parent="base.next_id_9"
groups="base.group_no_one"/>
<record id="action_model_relation" model="ir.actions.act_window">
<field name="name">ManyToMany Relations</field>
<field name="res_model">ir.model.relation</field>
<field name="view_type">form</field>
<field name="view_id" ref="view_model_relation_list"/>
</record>
<menuitem action="action_model_relation" id="ir_model_relation_menu" parent="base.next_id_9"
groups="base.group_no_one"/>
<!-- Translations -->
<record id="view_translation_search" model="ir.ui.view">

View File

@ -222,9 +222,10 @@ class act_window(osv.osv):
help="Optional domain filtering of the destination data, as a Python expression"),
'context': fields.char('Context Value', size=250, required=True,
help="Context dictionary as Python expression, empty by default (Default: {})"),
'res_model': fields.char('Object', size=64, required=True,
'res_id': fields.integer('Record ID', help="Database ID of record to open in form view, when ``view_mode`` is set to 'form' only"),
'res_model': fields.char('Destination Model', size=64, required=True,
help="Model name of the object to open in the view window"),
'src_model': fields.char('Source Object', size=64,
'src_model': fields.char('Source Model', size=64,
help="Optional model name of the objects on which this action should be visible"),
'target': fields.selection([('current','Current Window'),('new','New Window'),('inline','Inline')], 'Target Window'),
'view_type': fields.selection((('tree','Tree'),('form','Form')), string='View Type', required=True,

View File

@ -40,7 +40,6 @@
</record>
<act_window name="System Parameters" res_model="ir.config_parameter" id="ir_config_list_action"/>
<menuitem name="System Parameters" id="ir_config_menu"
parent="base.next_id_4" action="ir_config_list_action" groups="base.group_no_one"/>
<menuitem id="ir_config_menu" name="System Parameters" parent="menu_ir_property" action="ir_config_list_action"/>
</data>
</openerp>

View File

@ -161,7 +161,7 @@ def encode_rfc2822_address_header(header_text):
class ir_mail_server(osv.osv):
"""Represents an SMTP server, able to send outgoing e-mails, with SSL and TLS capabilities."""
"""Represents an SMTP server, able to send outgoing emails, with SSL and TLS capabilities."""
_name = "ir.mail_server"
_columns = {
@ -396,7 +396,7 @@ class ir_mail_server(osv.osv):
MailDeliveryException and logs root cause.
"""
smtp_from = message['Return-Path'] or message['From']
assert smtp_from, "The Return-Path or From header is required for any outbound e-mail"
assert smtp_from, "The Return-Path or From header is required for any outbound email"
# The email's "Envelope From" (Return-Path), and all recipient addresses must only contain ASCII characters.
from_rfc2822 = extract_rfc2822_addresses(smtp_from)

View File

@ -29,8 +29,7 @@ from openerp import netsvc, pooler, tools
from openerp.tools.safe_eval import safe_eval as eval
from openerp.tools import config
from openerp.tools.translate import _
from openerp.osv.orm import except_orm, browse_record, EXT_ID_PREFIX_FK, \
EXT_ID_PREFIX_M2M_TABLE, EXT_ID_PREFIX_CONSTRAINT
from openerp.osv.orm import except_orm, browse_record
_logger = logging.getLogger(__name__)
@ -864,7 +863,7 @@ class ir_model_data(osv.osv):
cr.execute('UPDATE ir_values set value=%s WHERE model=%s and key=%s and name=%s'+where,(value, model, key, name))
return True
def _module_data_uninstall(self, cr, uid, ids, context=None):
def _module_data_uninstall(self, cr, uid, modules_to_remove, context=None):
"""Deletes all the records referenced by the ir.model.data entries
``ids`` along with their corresponding database backed (including
dropping tables, columns, FKs, etc, as long as there is no other
@ -875,6 +874,8 @@ class ir_model_data(osv.osv):
This step is performed as part of the full uninstallation of a module.
"""
ids = self.search(cr, uid, [('module', 'in', modules_to_remove)])
if uid != 1 and not self.pool.get('ir.model.access').check_groups(cr, uid, "base.group_system"):
raise except_orm(_('Permission Denied'), (_('Administrator access is required to uninstall a module')))
@ -884,7 +885,6 @@ class ir_model_data(osv.osv):
ids_set = set(ids)
wkf_todo = []
to_unlink = []
to_drop_table = []
ids.sort()
ids.reverse()
for data in self.browse(cr, uid, ids, context):
@ -893,42 +893,6 @@ class ir_model_data(osv.osv):
model_obj = self.pool.get(model)
name = tools.ustr(data.name)
if name.startswith(EXT_ID_PREFIX_FK) or name.startswith(EXT_ID_PREFIX_M2M_TABLE)\
or name.startswith(EXT_ID_PREFIX_CONSTRAINT):
# double-check we are really going to delete all the owners of this schema element
cr.execute("""SELECT id from ir_model_data where name = %s and res_id IS NULL""", (data.name,))
external_ids = [x[0] for x in cr.fetchall()]
if (set(external_ids)-ids_set):
# as installed modules have defined this element we must not delete it!
continue
if name.startswith(EXT_ID_PREFIX_FK):
name = name[len(EXT_ID_PREFIX_FK):]
# test if FK exists on this table (it could be on a related m2m table, in which case we ignore it)
cr.execute("""SELECT 1 from pg_constraint cs JOIN pg_class cl ON (cs.conrelid = cl.oid)
WHERE cs.contype=%s and cs.conname=%s and cl.relname=%s""", ('f', name, model_obj._table))
if cr.fetchone():
cr.execute('ALTER TABLE "%s" DROP CONSTRAINT "%s"' % (model_obj._table, name),)
_logger.info('Dropped FK CONSTRAINT %s@%s', name, model)
continue
if name.startswith(EXT_ID_PREFIX_M2M_TABLE):
name = name[len(EXT_ID_PREFIX_M2M_TABLE):]
cr.execute("SELECT 1 FROM information_schema.tables WHERE table_name=%s", (name,))
if cr.fetchone() and not name in to_drop_table:
to_drop_table.append(name)
continue
if name.startswith(EXT_ID_PREFIX_CONSTRAINT):
name = name[len(EXT_ID_PREFIX_CONSTRAINT):]
# test if constraint exists
cr.execute("""SELECT 1 from pg_constraint cs JOIN pg_class cl ON (cs.conrelid = cl.oid)
WHERE cs.contype=%s and cs.conname=%s and cl.relname=%s""", ('u', name, model_obj._table))
if cr.fetchone():
cr.execute('ALTER TABLE "%s" DROP CONSTRAINT "%s"' % (model_obj._table, name),)
_logger.info('Dropped CONSTRAINT %s@%s', name, model)
continue
pair_to_unlink = (model, res_id)
if pair_to_unlink not in to_unlink:
to_unlink.append(pair_to_unlink)
@ -948,17 +912,12 @@ class ir_model_data(osv.osv):
except:
_logger.info('Unable to force processing of workflow for item %s@%s in order to leave activity to be deleted', res_id, model)
# drop m2m relation tables
for table in to_drop_table:
cr.execute('DROP TABLE %s CASCADE'% (table),)
_logger.info('Dropped table %s', table)
def unlink_if_refcount(to_unlink):
for model, res_id in to_unlink:
external_ids = self.search(cr, uid, [('model', '=', model),('res_id', '=', res_id)])
if (set(external_ids)-ids_set):
# if other modules have defined this record, we must not delete it
return
continue
_logger.info('Deleting %s@%s', res_id, model)
try:
self.pool.get(model).unlink(cr, uid, [res_id], context=context)
@ -970,11 +929,18 @@ class ir_model_data(osv.osv):
if model not in ('ir.model','ir.model.fields'))
unlink_if_refcount((model, res_id) for model, res_id in to_unlink
if model == 'ir.model.fields')
ir_model_relation = self.pool.get('ir.model.relation')
relation_ids = ir_model_relation.search(cr, uid, [('module', 'in', modules_to_remove)])
ir_model_relation._module_data_uninstall(cr, uid, relation_ids, context)
unlink_if_refcount((model, res_id) for model, res_id in to_unlink
if model == 'ir.model')
cr.commit()
self.unlink(cr, uid, ids, context)
def _process_end(self, cr, uid, modules):
""" Clear records removed from updated module data.
This method is called at the end of the module loading process.

View File

@ -0,0 +1,79 @@
import logging
import openerp
from openerp import SUPERUSER_ID
from openerp.osv import fields
from openerp.osv.orm import Model
_logger = logging.getLogger(__name__)
class ir_model_constraint(Model):
"""
This model tracks PostgreSQL foreign keys and constraints used by OpenERP
models.
"""
_name = 'ir.model.constraint'
_columns = {
'name': fields.char('Constraint', required=True, size=128, select=1,
help="PostgreSQL constraint or foreign key name."),
'model': fields.many2one('ir.model', string='Model',
required=True, select=1),
'module': fields.many2one('ir.module.module', string='Module',
required=True, select=1),
'type': fields.char('Constraint Type', required=True, size=1, select=1,
help="Type of the constraint: `f` for a foreign key, "
"`u` for other constraints."),
'date_update': fields.datetime('Update Date'),
'date_init': fields.datetime('Initialization Date')
}
_sql_constraints = [
('module_name_uniq', 'unique(name, module)',
'Constraints with the same name are unique per module.'),
]
def _module_data_uninstall(self, cr, uid, ids, context=None):
"""
Delete PostgreSQL foreign keys and constraints tracked by this model.
"""
if uid != SUPERUSER_ID and not self.pool.get('ir.model.access').check_groups(cr, uid, "base.group_system"):
raise except_orm(_('Permission Denied'), (_('Administrator access is required to uninstall a module')))
context = dict(context or {})
ids_set = set(ids)
ids.sort()
ids.reverse()
to_unlink = []
for data in self.browse(cr, uid, ids, context):
model = data.model.model
model_obj = self.pool.get(model)
name = openerp.tools.ustr(data.name)
typ = data.type
# double-check we are really going to delete all the owners of this schema element
cr.execute("""SELECT id from ir_model_constraint where name=%s""", (data.name,))
external_ids = [x[0] for x in cr.fetchall()]
if (set(external_ids)-ids_set):
# as installed modules have defined this element we must not delete it!
continue
if typ == 'f':
# test if FK exists on this table (it could be on a related m2m table, in which case we ignore it)
cr.execute("""SELECT 1 from pg_constraint cs JOIN pg_class cl ON (cs.conrelid = cl.oid)
WHERE cs.contype=%s and cs.conname=%s and cl.relname=%s""", ('f', name, model_obj._table))
if cr.fetchone():
cr.execute('ALTER TABLE "%s" DROP CONSTRAINT "%s"' % (model_obj._table, name),)
_logger.info('Dropped FK CONSTRAINT %s@%s', name, model)
if typ == 'u':
# test if constraint exists
cr.execute("""SELECT 1 from pg_constraint cs JOIN pg_class cl ON (cs.conrelid = cl.oid)
WHERE cs.contype=%s and cs.conname=%s and cl.relname=%s""", ('u', name, model_obj._table))
if cr.fetchone():
cr.execute('ALTER TABLE "%s" DROP CONSTRAINT "%s"' % (model_obj._table, name),)
_logger.info('Dropped CONSTRAINT %s@%s', name, model)
to_unlink.append(data.id)
self.unlink(cr, uid, to_unlink, context)

View File

@ -0,0 +1,65 @@
import logging
import openerp
from openerp import SUPERUSER_ID
from openerp.osv import fields
from openerp.osv.orm import Model
_logger = logging.getLogger(__name__)
class ir_model_relation(Model):
"""
This model tracks PostgreSQL tables used to implement OpenERP many2many
relations.
"""
_name = 'ir.model.relation'
_columns = {
'name': fields.char('Relation Name', required=True, size=128, select=1,
help="PostgreSQL table name implementing a many2many relation."),
'model': fields.many2one('ir.model', string='Model',
required=True, select=1),
'module': fields.many2one('ir.module.module', string='Module',
required=True, select=1),
'date_update': fields.datetime('Update Date'),
'date_init': fields.datetime('Initialization Date')
}
def _module_data_uninstall(self, cr, uid, ids, context=None):
"""
Delete PostgreSQL many2many relations tracked by this model.
"""
if uid != SUPERUSER_ID and not self.pool.get('ir.model.access').check_groups(cr, uid, "base.group_system"):
raise except_orm(_('Permission Denied'), (_('Administrator access is required to uninstall a module')))
ids_set = set(ids)
to_drop_table = []
ids.sort()
ids.reverse()
to_unlink = []
for data in self.browse(cr, uid, ids, context):
model = data.model
model_obj = self.pool.get(model)
name = openerp.tools.ustr(data.name)
# double-check we are really going to delete all the owners of this schema element
cr.execute("""SELECT id from ir_model_relation where name = %s""", (data.name,))
external_ids = [x[0] for x in cr.fetchall()]
if (set(external_ids)-ids_set):
# as installed modules have defined this element we must not delete it!
continue
cr.execute("SELECT 1 FROM information_schema.tables WHERE table_name=%s", (name,))
if cr.fetchone() and not name in to_drop_table:
to_drop_table.append(name)
to_unlink.append(data.id)
self.unlink(cr, uid, to_unlink, context)
# drop m2m relation tables
for table in to_drop_table:
cr.execute('DROP TABLE %s CASCADE'% (table),)
_logger.info('Dropped table %s', table)
cr.commit()

View File

@ -24,16 +24,16 @@ from operator import itemgetter
from osv import osv, fields
from tools.translate import _
class ir_needaction_users_rel(osv.osv):
'''
ir_needaction_users_rel holds data related to the needaction
mechanism inside OpenERP. A row in this model is characterized by:
class ir_needaction_users_rel(osv.Model):
''' ir_needaction_users_rel holds data related to the needaction
mechanism inside OpenERP. A row in this model is characterized
by:
- res_model: model of the record requiring an action
- res_id: ID of the record requiring an action
- user_id: foreign key to the res.users table, to the user that
has to perform the action
This model can be seen as a many2many, linking (res_model, res_id) to
users (those whose attention is required on the record).'''
- user_id: foreign key to the res.users table, to the user that has to
perform the action
This model can be seen as a many2many, linking (res_model, res_id) to users
(those whose attention is required on the record). '''
_name = 'ir.needaction_users_rel'
_description = 'Needaction relationship table'
@ -78,50 +78,47 @@ class ir_needaction_users_rel(osv.osv):
return True
class ir_needaction_mixin(osv.osv):
class ir_needaction_mixin(osv.Model):
'''Mixin class for objects using the need action feature.
Need action feature can be used by objects willing to be able to
signal that an action is required on a particular record. If in the
business logic an action must be performed by somebody, for instance
validation by a manager, this mechanism allows to set a list of
users asked to perform an action.
Need action feature can be used by objects having to be able to
signal that an action is required on a particular record. If in
the business logic an action must be performed by somebody, for
instance validation by a manager, this mechanism allows to set a
list of users asked to perform an action.
This class wraps a class (ir.ir_needaction_users_rel) that behaves
like a many2many field. However, no field is added to the model
inheriting from this mixin class. This class handles the low-level
considerations of updating relationships. Every change made on the
record calls a method that updates the relationships.
This class wraps a class (ir.ir_needaction_users_rel) that
behaves like a many2many field. This class handles the low-level
considerations of updating relationships. Every change made on
the record calls a method that updates the relationships.
Objects using the 'need_action' feature should override the
``get_needaction_user_ids`` method. This methods returns a dictionary
whose keys are record ids, and values a list of user ids, like
in a many2many relationship. Therefore by defining only one method,
you can specify if an action is required by defining the users
that have to do it, in every possible situation.
Objects using the 'need_action' feature should override the
``get_needaction_user_ids`` method. This methods returns a
dictionary whose keys are record ids, and values a list of user
ids, like in a many2many relationship. Therefore by defining
only one method, you can specify if an action is required by
defining the users that have to do it, in every possible
situation.
This class also offers several global services,:
This class also offers several global services:
- ``needaction_get_record_ids``: for the current model and uid, get
all record ids that ask this user to perform an action. This
mechanism is used for instance to display the number of pending
actions in menus, such as Leads (12)
all record ids that ask this user to perform an action. This
mechanism is used for instance to display the number of pending
actions in menus, such as Leads (12)
- ``needaction_get_action_count``: as ``needaction_get_record_ids``
but returns only the number of action, not the ids (performs a
search with count=True)
- ``needaction_get_user_record_references``: for a given uid, get all
the records that ask this user to perform an action. Records
are given as references, a list of tuples (model_name, record_id)
but returns only the number of action, not the ids (performs a
search with count=True)
The ``ir_needaction_mixin`` class adds a function field on models inheriting
from the class. This field allows to state whether a given record has
a needaction for the current user. This is usefull if you want to customize
views according to the needaction feature. For example, you may want to
set records in bold in a list view if the current user has an action to
perform on the record. This makes the class not a pure abstract class,
but allows to easily use the action information.'''
The ``ir_needaction_mixin`` class adds a calculated field
``needaction_pending``. This function field allows to state
whether a given record has a needaction for the current user.
This is usefull if you want to customize views according to the
needaction feature. For example, you may want to set records in
bold in a list view if the current user has an action to perform
on the record. '''
_name = 'ir.needaction_mixin'
_description = '"Need action" mixin'
_description = 'Need action mixin'
def get_needaction_pending(self, cr, uid, ids, name, arg, context=None):
res = {}
@ -129,13 +126,19 @@ class ir_needaction_mixin(osv.osv):
for id in ids:
res[id] = uid in needaction_user_ids[id]
return res
def search_needaction_pending(self, cr, uid, self_again, field_name, criterion, context=None):
ids = self.needaction_get_record_ids(
cr, uid, uid, limit=1024, context=context)
return [('id', 'in', ids)]
_columns = {
'needaction_pending': fields.function(get_needaction_pending, type='boolean',
string='Need action pending',
help='If True, this field states that users have to perform an action. \
This field comes from the needaction mechanism. Please refer \
to the ir.needaction_mixin class.'),
'needaction_pending': fields.function(
get_needaction_pending, type='boolean',
fnct_search=search_needaction_pending,
string='Need action pending',
help="If True, this field states that users have to perform an " \
"action This field comes from the ir.needaction_mixin class."),
}
#------------------------------------------------------
@ -146,7 +149,7 @@ class ir_needaction_mixin(osv.osv):
""" Returns the user_ids that have to perform an action
:return: dict { record_id: [user_ids], }
"""
return dict.fromkeys(ids, [])
return dict((id,list()) for id in ids)
def create(self, cr, uid, values, context=None):
rel_obj = self.pool.get('ir.needaction_users_rel')
@ -191,14 +194,5 @@ class ir_needaction_mixin(osv.osv):
get the number of actions it has to perform"""
rel_obj = self.pool.get('ir.needaction_users_rel')
return rel_obj.search(cr, uid, [('res_model', '=', self._name), ('user_id', '=', user_id)], limit=limit, count=True, context=context)
def needaction_get_record_references(self, cr, uid, user_id, offset=None, limit=None, order=None, context=None):
"""For a given user_id, get all the records that asks this user to
perform an action. Records are given as references, a list of
tuples (model_name, record_id).
This method is trans-model."""
rel_obj = self.pool.get('ir.needaction_users_rel')
rel_ids = rel_obj.search(cr, uid, [('user_id', '=', user_id)], offset=offset, limit=limit, order=order, context=context)
return map(itemgetter('res_model', 'res_id'), rel_obj.read(cr, uid, rel_ids, ['res_model', 'res_id'], context=context))
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -8,8 +8,9 @@
<field name="arch" type="xml">
<form string="Create Menu" version="7.0">
<header>
<button name="menu_create" string="Create _Menu" type="object"/>
<button special="cancel" string="_Cancel"/>
<button name="menu_create" string="Create _Menu" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<group>
<field name="name"/>

View File

@ -317,7 +317,7 @@
<field name="context">{'search_default_active':1}</field>
<field name="search_view_id" ref="view_workflow_instance_search"/>
</record>
<menuitem action="action_workflow_instance_form" id="menu_workflow_instance" parent="base.menu_low_workflow"/>
<menuitem action="action_workflow_instance_form" id="menu_workflow_instance" parent="base.menu_workflow_root"/>
<!--
================================
@ -383,7 +383,7 @@
<field name="context">{'search_default_active':1}</field>
<field name="search_view_id" ref="view_workflow_workitem_search"/>
</record>
<menuitem action="action_workflow_workitem_form" id="menu_workflow_workitem" parent="base.menu_low_workflow"/>
<menuitem action="action_workflow_workitem_form" id="menu_workflow_workitem" parent="base.menu_workflow_root"/>
</data>
</openerp>

View File

@ -378,10 +378,11 @@ class module(osv.osv):
including the deletion of all database structures created by the module:
tables, columns, constraints, etc."""
ir_model_data = self.pool.get('ir.model.data')
ir_model_constraint = self.pool.get('ir.model.constraint')
modules_to_remove = [m.name for m in self.browse(cr, uid, ids, context)]
data_ids = ir_model_data.search(cr, uid, [('module', 'in', modules_to_remove)])
ir_model_data._module_data_uninstall(cr, uid, data_ids, context)
ir_model_data.unlink(cr, uid, data_ids, context)
constraint_ids = ir_model_constraint.search(cr, uid, [('module', 'in', modules_to_remove)])
ir_model_constraint._module_data_uninstall(cr, uid, constraint_ids, context)
ir_model_data._module_data_uninstall(cr, uid, modules_to_remove, context)
self.write(cr, uid, ids, {'state': 'uninstalled'})
return True

View File

@ -7,7 +7,12 @@
<field name="model">base.language.export</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Export Translations">
<form string="Export Translations" version="7.0">
<header>
<button name="act_getfile" string="_Export" type="object" states="choose" class="oe_highlight"/>
<label string="or" states="choose"/>
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<group col="8">
<group colspan="3">
<field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/>
@ -35,17 +40,6 @@
<field height="80" name="advice" nolabel="1" colspan="4"/>
</group>
</group>
<group colspan="8" col="8" states="choose">
<separator string="" colspan="8"/>
<label colspan="6" width="220"/>
<button icon="gtk-cancel" name="act_cancel" special="cancel" string="_Close" type="object"/>
<button icon="gtk-ok" name="act_getfile" string="_Export" type="object"/>
</group>
<group colspan="8" col="8" states="get">
<separator string="" colspan="8"/>
<label colspan="7" width="220"/>
<button icon="gtk-close" name="act_destroy" special="cancel" string="_Close" type="object"/>
</group>
</group>
</form>
</field>

View File

@ -9,16 +9,19 @@
<field name="arch" type="xml">
<form string="Import Translation" version="7.0">
<header>
<button name="import_lang" string="_Import" type="object" icon="gtk-ok"/>
<button special="cancel" string="_Close" icon="gtk-cancel"/>
<button name="import_lang" string="_Import" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<separator string="Import Translation" colspan="2"/>
<label nolabel="1" string="If you need another language than the official ones available, you can import a language pack from here. Other OpenERP languages than the official ones can be found on launchpad." colspan="2"/>
<group col="4">
<field name="name"/>
<field name="code"/>
<field name="data"/>
<field name="overwrite"/>
<group>
<separator string="Import Translation" colspan="2"/>
<label nolabel="1" string="If you need another language than the official ones available, you can import a language pack from here. Other OpenERP languages than the official ones can be found on launchpad." colspan="2"/>
<group col="4">
<field name="name"/>
<field name="code"/>
<field name="data"/>
<field name="overwrite"/>
</group>
</group>
</form>
</field>

View File

@ -7,7 +7,12 @@
<field name="model">base.language.install</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Load a Translation">
<form string="Load a Translation" version="7.0">
<header>
<button name="lang_install" string="Load" type="object" states="init" class="oe_highlight"/>
<label string="or" states="init"/>
<button string="Cancel" class="oe_link" special="cancel"/>
</header>
<group colspan="4" col="8">
<group colspan="1">
<field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/>
@ -30,17 +35,6 @@ You must change the preferences of the user and open a new menu to view the chan
</group>
</group>
</group>
<group colspan="8" col="8" states="init">
<separator string="" colspan="8"/>
<label colspan="6" width="220"/>
<button special="cancel" string="Cancel" icon="gtk-cancel" colspan="1"/>
<button name="lang_install" string="Load" type="object" icon="gtk-ok" colspan="1"/>
</group>
<group colspan="8" col="8" states="done">
<separator string="" colspan="8"/>
<label colspan="7" width="220"/>
<button special="cancel" string="Close" icon="gtk-ok"/>
</group>
</form>
</field>
</record>

View File

@ -9,7 +9,7 @@
<field name="arch" type="xml">
<form string="System Configuration Done" version="7.0">
<header>
<button special="cancel" string="_Ok"/>
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<label string="All pending configuration wizards have been executed. You may restart individual wizards via the list of configuration wizards."/>
</form>

View File

@ -7,7 +7,14 @@
<field name="model">base.module.import</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Import module">
<form string="Import module" version="7.0">
<header>
<button name="importzip" string="Import module" type="object" states="init" class="oe_highlight"/>
<label string="or" states="init"/>
<button name="action_module_open" string="Open Modules" type="object" states="done" class="oe_highlight"/>
<label string="or" states="done"/>
<button string="Cancel" class="oe_link" special="cancel"/>
</header>
<group col="8">
<group colspan="3" col="1">
<field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/>
@ -29,18 +36,6 @@ After importing a new module you can install it by clicking on the button "Insta
<label string="Module file successfully imported!" colspan="4"/>
</group>
</group>
<group colspan="8" col="8" states="init">
<separator string="" colspan="8"/>
<label colspan="6" width="220"/>
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="importzip" string="Import module" type="object" icon="gtk-apply"/>
</group>
<group colspan="8" col="8" states="done">
<separator string="" colspan="8"/>
<label colspan="6" width="220"/>
<button special="cancel" string="Close" icon="gtk-ok"/>
<button name="action_module_open" string="Open Modules" type="object" icon="gtk-go-forward"/>
</group>
</group>
</form>
</field>

View File

@ -9,8 +9,9 @@
<field name="arch" type="xml">
<form string="Scan for new modules" version="7.0">
<header>
<button name="watch_dir" string="Check new modules" type="object" icon="gtk-ok"/>
<button special="cancel" string="Close" icon="gtk-cancel"/>
<button name="watch_dir" string="Check new modules" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<label string="This function will check if you installed new modules in the 'addons' path of your server installation."/>
</form>

View File

@ -7,7 +7,14 @@
<field name="model">base.module.update</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Update Module List">
<form string="Update Module List" version="7.0">
<header>
<button name="update_module" string="Update" type="object" states="init" class="oe_highlight"/>
<label string="or" states="init"/>
<button name="action_module_open" string="Open Modules" type="object" states="done" class="oe_highlight"/>
<label string="or" states="done"/>
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<group col="8">
<group colspan="3">
<field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/>
@ -28,18 +35,6 @@
<field name="add" colspan="4"/>
</group>
</group>
<group colspan="8" col="8" states="init">
<separator string="" colspan="8"/>
<label colspan="6" width="220"/>
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="update_module" string="Update" type="object" icon="gtk-ok"/>
</group>
<group colspan="8" col="8" states="done">
<separator string="" colspan="8"/>
<label colspan="6" width="220"/>
<button special="cancel" string="Close" icon="gtk-ok"/>
<button name="action_module_open" string="Open Modules" type="object" icon="gtk-go-forward"/>
</group>
</group>
</form>
</field>

View File

@ -46,16 +46,19 @@ class base_module_upgrade(osv.osv_memory):
ids = self.get_module_list(cr, uid, context=context)
if not ids:
res['arch'] = '''<form string="Apply Scheduled Upgrades" version="7.0">
<header>
<button name="config" string="Start configuration" type="object" icon="gtk-ok"/>
<button special="cancel" string="Close" icon="gtk-cancel"/>
</header>
<separator string="System update completed" colspan="4"/>
<label align="0.0" string="The selected modules have been updated / installed !" colspan="4"/>
<label align="0.0" string="We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)." colspan="4"/>
</form>'''
res['arch'] = """
<form string="Apply Scheduled Upgrades" version="7.0">
<header>
<button name="config" string="Start configuration" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel"/>
</header>
<separator string="System update completed"/>
<label string="The selected modules have been updated / installed !"/>
<newline/>
<label string="We suggest to reload the page to see the new menus."/>
</form>
"""
return res
def get_module_list(self, cr, uid, context=None):
@ -80,14 +83,14 @@ class base_module_upgrade(osv.osv_memory):
JOIN ir_module_module_dependency d ON (m.id = d.module_id)
LEFT JOIN ir_module_module m2 ON (d.name = m2.name)
WHERE m.id in %s and (m2.state IS NULL or m2.state IN %s)""",
(tuple(ids), ('uninstalled',)))
(tuple(ids), ('uninstalled',)))
unmet_packages = [x[0] for x in cr.fetchall()]
if unmet_packages:
raise osv.except_osv(_('Unmet dependency !'),
_('Following modules are not installed or unknown: %s') % ('\n\n' + '\n'.join(unmet_packages)))
ir_module.download(cr, uid, ids, context=context)
cr.commit() # save before re-creating cursor below
cr.commit() # save before re-creating cursor below
pooler.restart_pool(cr.dbname, update_module=True)

View File

@ -9,11 +9,12 @@
<field name="arch" type="xml">
<form string="System Update" version="7.0">
<header>
<button name="upgrade_module" string="Update" type="object" icon="gtk-go-forward"/>
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="upgrade_module" string="Update" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel"/>
</header>
<label string="Your system will be updated."/>
<label string="Note that this operation might take a few minutes."/>
<div><label string="Your system will be updated."/></div>
<div><label string="Note that this operation might take a few minutes."/></div>
<separator string="Modules to Update"/>
<field name="module_info"/>
</form>
@ -45,11 +46,12 @@
<field name="arch" type="xml">
<form string="Apply Scheduled Upgrades" version="7.0">
<header>
<button name="config" string="Start configuration" type="object" icon="gtk-ok"/>
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="config" string="Start configuration" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel"/>
</header>
<label string="The selected modules have been updated / installed !"/>
<label string="We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)."/>
<div><label string="The selected modules have been updated / installed !"/></div>
<div><label string="We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)."/></div>
</form>
</field>
</record>

View File

@ -6,7 +6,12 @@
<field name="model">base.update.translations</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Synchronize Terms">
<form string="Synchronize Terms" version="7.0">
<header>
<button name="act_update" string="Update" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel"/>
</header>
<group col="8">
<group colspan="3">
<field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/>
@ -18,12 +23,6 @@
<separator string="Synchronize Translation" colspan="4"/>
<field name="lang" colspan="4"/>
</group>
<group colspan="8" col="8">
<separator string="" colspan="8"/>
<label colspan="6" width="220"/>
<button icon="gtk-cancel" name="act_cancel" special="cancel" string="Cancel" type="object"/>
<button icon="gtk-ok" name="act_update" string="Update" type="object"/>
</group>
</group>
</form>
</field>

View File

@ -24,30 +24,30 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Publisher Warranty Contract" version="7.0">
<header>
<button name="check_validity" string="Validate" type="object"
attrs="{'invisible':[('state','in',['valid', 'terminated', 'canceled'])]}"/>
<button name="check_validity" string="Refresh Validation Dates" type="object"
attrs="{'invisible':[('state','in',['unvalidated'])]}"/>
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<sheet>
<group col="3" colspan="4">
<group col="2">
<group col="3">
<group>
<field name="name"/>
</group>
<group col="2">
<group>
<field name="date_start"/>
<field name="date_stop"/>
<field name="check_support"/>
</group>
<group col="2">
<group>
<field name="state"/>
<field name="kind"/>
<field name="check_opw"/>
</group>
<group col="2" colspan="3">
<button name="check_validity" icon="camera_test.png
" string="Validate" type="object"
attrs="{'invisible':[('state','in',['valid', 'terminated', 'canceled'])]}"/>
<button name="check_validity" icon="camera_test.png" string="Refresh Validation Dates" type="object"
attrs="{'invisible':[('state','in',['unvalidated'])]}"/>
</group>
</group>
</sheet>
</sheet>
</form>
</field>
</record>
@ -93,7 +93,12 @@
<field name="model">publisher_warranty.contract.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Register a Contract">
<form string="Register a Contract" version="7.0">
<header>
<button name="action_validate" string="Register" type="object" states="draft" class="oe_highlight" />
<label string="or" states="draft"/>
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<group colspan="4" col="8">
<group colspan="1">
<field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/>
@ -115,17 +120,6 @@
</group>
</group>
</group>
<group colspan="8" col="8" states="draft">
<separator string="" colspan="8"/>
<label colspan="6" width="220"/>
<button special="cancel" string="Cancel" icon="gtk-cancel" colspan="1"/>
<button name="action_validate" string="Register" type="object" icon="gtk-apply" colspan="1"/>
</group>
<group colspan="8" col="8" states="finished">
<separator string="" colspan="8"/>
<label colspan="7" width="220"/>
<button special="cancel" string="Close" icon="gtk-ok"/>
</group>
</form>
</field>
</record>

View File

@ -66,7 +66,6 @@
<field name="view_type">form</field>
<field name="view_id" ref="ir_property_view_tree"/>
</record>
<menuitem id="menu_ir_property" name="Parameters" parent="menu_custom" groups="base.group_no_one" sequence="24"/>
<menuitem id="menu_ir_property_form_all" parent="menu_ir_property" action="ir_property_form"/>
</data>
</openerp>

View File

@ -35,7 +35,7 @@ class Bank(osv.osv):
'state': fields.many2one("res.country.state", 'Fed. State',
domain="[('country_id', '=', country)]"),
'country': fields.many2one('res.country', 'Country'),
'email': fields.char('E-Mail', size=64),
'email': fields.char('Email', size=64),
'phone': fields.char('Phone', size=64),
'fax': fields.char('Fax', size=64),
'active': fields.boolean('Active'),

View File

@ -7,10 +7,9 @@
<field name="arch" type="xml">
<form version="7.0">
<header>
<button name="action_next" type="object"
string="Apply" icon="gtk-go-forward" class="oe_highlight"/>
<button name="action_skip" type="object" special="cancel"
string="Cancel" icon="gtk-jump-to"/>
<button name="action_next" type="object" string="Apply" class="oe_highlight"/>
or
<button name="action_skip" type="object" special="cancel" string="Cancel" class="oe_link"/>
</header>
<group string="res_config_contents"/>
</form>
@ -24,10 +23,13 @@
<field name="arch" type="xml">
<form string="Next Configuration Step" version="7.0">
<header>
<button name="action_next" type="object"
string="Continue" icon="gtk-go-forward" class="oe_highlight"/>
<button name="action_next" type="object" string="Continue" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<field name="note"/>
<group>
<field name="note"/>
</group>
</form>
</field>
</record>
@ -39,10 +41,9 @@
<field name="arch" type="xml">
<form version="7.0">
<header>
<button name="action_next" type="object"
string="Install Modules" icon="gtk-go-forward" class="oe_highlight"/>
<button name="action_skip" type="object" special="cancel"
string="Cancel" icon="gtk-jump-to"/>
<button name="action_next" type="object" string="Install Modules" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<separator string="title" colspan="4"/>
</form>

View File

@ -89,7 +89,7 @@ class res_partner_category(osv.osv):
'active' : fields.boolean('Active', help="The active field allows you to hide the category without removing it."),
'parent_left' : fields.integer('Left parent', select=True),
'parent_right' : fields.integer('Right parent', select=True),
'partner_ids': fields.many2many('res.partner', 'res_partner_category_rel', 'category_id', 'partner_id', 'Partners'),
'partner_ids': fields.many2many('res.partner', id1='category_id', id2='partner_id', string='Partners'),
}
_constraints = [
(osv.osv._check_recursion, 'Error ! You can not create recursive categories.', ['parent_id'])
@ -144,7 +144,7 @@ class res_partner(osv.osv):
'website': fields.char('Website',size=64, help="Website of Partner or Company"),
'comment': fields.text('Notes'),
'address': fields.one2many('res.partner.address', 'partner_id', 'Contacts'), # should be removed in version 7, but kept until then for backward compatibility
'category_id': fields.many2many('res.partner.category', 'res_partner_category_rel', 'partner_id', 'category_id', 'Tags'),
'category_id': fields.many2many('res.partner.category', id1='partner_id', id2='category_id', string='Tags'),
'credit_limit': fields.float(string='Credit Limit'),
'ean13': fields.char('EAN13', size=13),
'active': fields.boolean('Active'),
@ -163,7 +163,7 @@ class res_partner(osv.osv):
'state_id': fields.many2one("res.country.state", 'State', domain="[('country_id','=',country_id)]"),
'country_id': fields.many2one('res.country', 'Country'),
'country': fields.related('country_id', type='many2one', relation='res.country', string='Country'), # for backward compatibility
'email': fields.char('E-Mail', size=240),
'email': fields.char('Email', size=240),
'phone': fields.char('Phone', size=64),
'fax': fields.char('Fax', size=64),
'mobile': fields.char('Mobile', size=64),
@ -446,7 +446,7 @@ class res_partner_address(osv.osv):
'city': fields.char('City', size=128),
'state_id': fields.many2one("res.country.state", 'Fed. State', domain="[('country_id','=',country_id)]"),
'country_id': fields.many2one('res.country', 'Country'),
'email': fields.char('E-Mail', size=240),
'email': fields.char('Email', size=240),
'phone': fields.char('Phone', size=64),
'fax': fields.char('Fax', size=64),
'mobile': fields.char('Mobile', size=64),

View File

@ -115,15 +115,12 @@
</h1>
<h2 attrs="{'invisible': [('is_company','=', True)]}">
<label for="parent_id" class="oe_edit_only oe_inline"/>
<field name="parent_id"
domain="[('is_company', '=', True)]" context="{'default_is_company': True}"
class="oe_inline"
on_change="onchange_address(use_parent_address, parent_id)"/>,
<label for="function" class="oe_inline oe_edit_only" />
<field name="function" class="oe_inline" placeholder="Job Position"/>
</h2>
<field name="category_id" widget="many2many_tags" placeholder="Tags..."/>
</div>

View File

@ -45,7 +45,7 @@
<field name="search_view_id" ref="view_res_widget_search"/>
</record>
<menuitem action="res_widget_act_window" id="menu_res_widget_act_window" parent="base.next_id_2" />
<record id="res_widget_user_tree" model="ir.ui.view">
<field name="name">res.widget.user.tree</field>
<field name="model">res.widget.user</field>
@ -70,7 +70,7 @@
<field name="user_id"/>
<field name="sequence"/>
</group>
</sheet>
</sheet>
</form>
</field>
</record>
@ -89,10 +89,13 @@
<field name="arch" type="xml">
<form string="Widget Wizard" col="4" version="7.0">
<header>
<button name="res_widget_add" string="Add" type="object"/>
<button special="cancel" string="Cancel" icon="gtk-cancel" />
<button name="res_widget_add" string="Add" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel" />
</header>
<field name="widgets_list"/>
<group>
<field name="widgets_list"/>
</group>
</form>
</field>
</record>

View File

@ -677,6 +677,7 @@
<rng:optional><rng:attribute name="context"/></rng:optional>
<rng:optional><rng:attribute name="confirm"/></rng:optional>
<rng:optional><rng:attribute name="help"/></rng:optional>
<rng:optional><rng:attribute name="class"/></rng:optional>
<rng:optional><rng:attribute name="default_focus"/></rng:optional>
<rng:zeroOrMore>
<rng:choice>

View File

@ -1,5 +1,5 @@
.oe_module_vignette {
padding: 14px;
padding: 8px;
}
.oe_module_icon, .oe_module_desc {
display: inline-block;

View File

@ -54,7 +54,10 @@ class test_ir_values(common.TransactionCase):
ir_values.set(self.cr, self.uid, 'action', 'tree_but_open', 'OnDblClick Action', ['unexisting_model'], 'ir.actions.act_window,10', isobject=True)
ir_values.set(self.cr, self.uid, 'action', 'tree_but_open', 'OnDblClick Action 2', ['unexisting_model'], 'ir.actions.act_window,11', isobject=True)
ir_values.set(self.cr, self.uid, 'action', 'client_action_multi', 'Side Wizard', ['unexisting_model'], 'ir.actions.act_window,12', isobject=True)
ir_values.set(self.cr, self.uid, 'action', 'client_print_multi', 'Nice Report', ['unexisting_model'], 'ir.actions.report.xml,45', isobject=True)
report_ids = self.registry('ir.actions.report.xml').search(self.cr, self.uid, [], {})
reports = self.registry('ir.actions.report.xml').browse(self.cr, self.uid, report_ids, {})
report_id = [report.id for report in reports if not report.groups_id][0] # assume at least one
ir_values.set(self.cr, self.uid, 'action', 'client_print_multi', 'Nice Report', ['unexisting_model'], 'ir.actions.report.xml,%s'%report_id, isobject=True)
ir_values.set(self.cr, self.uid, 'action', 'client_action_relate', 'Related Stuff', ['unexisting_model'], 'ir.actions.act_window,14', isobject=True)
# Replace one action binding to set a new name.
@ -86,7 +89,7 @@ class test_ir_values(common.TransactionCase):
assert len(actions) == 1, "Mismatching number of bound actions"
assert len(actions[0]) == 3, "Malformed action definition"
assert actions[0][1] == 'Nice Report', 'Bound action does not match definition'
assert isinstance(actions[0][2], dict) and actions[0][2]['id'] == 45, 'Bound action does not match definition'
assert isinstance(actions[0][2], dict) and actions[0][2]['id'] == report_id, 'Bound action does not match definition'
actions = ir_values.get(self.cr, self.uid, 'action', 'client_action_relate', ['unexisting_model'])
assert len(actions) == 1, "Mismatching number of bound actions"
@ -96,4 +99,4 @@ class test_ir_values(common.TransactionCase):
if __name__ == '__main__':
unittest2.main()
unittest2.main()

View File

@ -493,7 +493,7 @@ def get_test_modules(module, submodule, explode):
# It seems the module has no `tests` sub-module, no problem.
pass
else:
print 'Can not `import %s`.' % module
_logger.exception('Can not `import %s`.', module)
return []
# Discover available test sub-modules.
@ -554,6 +554,7 @@ def run_unit_tests(module_name):
"""
import unittest2
ms = get_test_modules(module_name, '__fast_suite__', explode=False)
# TODO: No need to try again if the above call failed because of e.g. a syntax error.
ms.extend(get_test_modules(module_name, '__sanity_checks__', explode=False))
suite = unittest2.TestSuite()
for m in ms:

View File

@ -70,11 +70,6 @@ _schema = logging.getLogger(__name__ + '.schema')
# List of etree._Element subclasses that we choose to ignore when parsing XML.
from openerp.tools import SKIPPED_ELEMENT_TYPES
# Prefixes for external IDs of schema elements
EXT_ID_PREFIX_FK = "_foreign_key_"
EXT_ID_PREFIX_M2M_TABLE = "_m2m_rel_table_"
EXT_ID_PREFIX_CONSTRAINT = "_constraint_"
regex_order = re.compile('^(([a-z0-9_]+|"[a-z0-9_]+")( *desc| *asc)?( *, *|))+$', re.I)
regex_object_name = re.compile(r'^[a-z0-9_.]+$')
@ -1742,6 +1737,15 @@ class BaseModel(object):
# translate view
if 'lang' in context:
if node.text and node.text.strip():
trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.text.strip())
if trans:
node.text = node.text.replace(node.text.strip(), trans)
if node.tail and node.tail.strip():
trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.tail.strip())
if trans:
node.tail = node.tail.replace(node.tail.strip(), trans)
if node.get('string') and not result:
trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('string'))
if trans == node.get('string') and ('base_model_name' in context):
@ -1750,18 +1754,13 @@ class BaseModel(object):
trans = self.pool.get('ir.translation')._get_source(cr, user, context['base_model_name'], 'view', context['lang'], node.get('string'))
if trans:
node.set('string', trans)
if node.get('confirm'):
trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('confirm'))
if trans:
node.set('confirm', trans)
if node.get('sum'):
trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('sum'))
if trans:
node.set('sum', trans)
if node.get('help'):
trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('help'))
if trans:
node.set('help', trans)
for attr_name in ('confirm', 'sum', 'help', 'placeholder'):
attr_value = node.get(attr_name)
if attr_value:
trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], attr_value)
if trans:
node.set(attr_name, trans)
for f in node:
if children or (node.tag == 'field' and f.tag in ('filter','separator')):
@ -2737,13 +2736,45 @@ class BaseModel(object):
_schema.debug("Table '%s': column '%s': dropped NOT NULL constraint",
self._table, column['attname'])
# quick creation of ir.model.data entry to make uninstall of schema elements easier
def _make_ext_id(self, cr, ext_id):
cr.execute('SELECT 1 FROM ir_model_data WHERE name=%s AND module=%s', (ext_id, self._module))
def _save_constraint(self, cr, constraint_name, type):
"""
Record the creation of a constraint for this model, to make it possible
to delete it later when the module is uninstalled. Type can be either
'f' or 'u' depending on the constraing being a foreign key or not.
"""
assert type in ('f', 'u')
cr.execute("""
SELECT 1 FROM ir_model_constraint, ir_module_module
WHERE ir_model_constraint.module=ir_module_module.id
AND ir_model_constraint.name=%s
AND ir_module_module.name=%s
""", (constraint_name, self._module))
if not cr.rowcount:
cr.execute("""INSERT INTO ir_model_data (name,date_init,date_update,module,model)
VALUES (%s, now() AT TIME ZONE 'UTC', now() AT TIME ZONE 'UTC', %s, %s)""",
(ext_id, self._module, self._name))
cr.execute("""
INSERT INTO ir_model_constraint
(name, date_init, date_update, module, model, type)
VALUES (%s, now() AT TIME ZONE 'UTC', now() AT TIME ZONE 'UTC',
(SELECT id FROM ir_module_module WHERE name=%s),
(SELECT id FROM ir_model WHERE model=%s), %s)""",
(constraint_name, self._module, self._name, type))
def _save_relation_table(self, cr, relation_table):
"""
Record the creation of a many2many for this model, to make it possible
to delete it later when the module is uninstalled.
"""
cr.execute("""
SELECT 1 FROM ir_model_relation, ir_module_module
WHERE ir_model_relation.module=ir_module_module.id
AND ir_model_relation.name=%s
AND ir_module_module.name=%s
""", (relation_table, self._module))
if not cr.rowcount:
cr.execute("""INSERT INTO ir_model_relation (name, date_init, date_update, module, model)
VALUES (%s, now() AT TIME ZONE 'UTC', now() AT TIME ZONE 'UTC',
(SELECT id FROM ir_module_module WHERE name=%s),
(SELECT id FROM ir_model WHERE model=%s))""",
(relation_table, self._module, self._name))
# checked version: for direct m2o starting from `self`
def _m2o_add_foreign_key_checked(self, source_field, dest_model, ondelete):
@ -3084,7 +3115,7 @@ class BaseModel(object):
""" Create the foreign keys recorded by _auto_init. """
for t, k, r, d in self._foreign_keys:
cr.execute('ALTER TABLE "%s" ADD FOREIGN KEY ("%s") REFERENCES "%s" ON DELETE %s' % (t, k, r, d))
self._make_ext_id(cr, "%s%s_%s_fkey" % (EXT_ID_PREFIX_FK, t, k))
self._save_constraint(cr, "%s_%s_fkey" % (t, k), 'f')
cr.commit()
del self._foreign_keys
@ -3173,7 +3204,7 @@ class BaseModel(object):
def _m2m_raise_or_create_relation(self, cr, f):
m2m_tbl, col1, col2 = f._sql_names(self)
self._make_ext_id(cr, EXT_ID_PREFIX_M2M_TABLE + m2m_tbl)
self._save_relation_table(cr, m2m_tbl)
cr.execute("SELECT relname FROM pg_class WHERE relkind IN ('r','v') AND relname=%s", (m2m_tbl,))
if not cr.dictfetchall():
if not self.pool.get(f._obj):
@ -3209,7 +3240,7 @@ class BaseModel(object):
for (key, con, _) in self._sql_constraints:
conname = '%s_%s' % (self._table, key)
self._make_ext_id(cr, EXT_ID_PREFIX_CONSTRAINT + conname)
self._save_constraint(cr, conname, 'u')
cr.execute("SELECT conname, pg_catalog.pg_get_constraintdef(oid, true) as condef FROM pg_constraint where conname=%s", (conname,))
existing_constraints = cr.dictfetchall()
sql_actions = {

Some files were not shown because too many files have changed in this diff Show More