[MERGE] Merge with main branch
bzr revid: pso@tinyerp.com-20120731104801-i601dx1qi5iibdpb bzr revid: pso@tinyerp.com-20120807071431-y0y1osbtd2doqfyu
This commit is contained in:
@@ -98,6 +98,6 @@
|
||||
'installable': True,
|
||||
'auto_install': True,
|
||||
'certificate': '0076807797149',
|
||||
"css": [ 'static/src/css/modules.css' ],
|
||||
'css': ['static/src/css/modules.css'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-server\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:44+0000\n"
|
||||
"PO-Revision-Date: 2012-07-19 05:44+0000\n"
|
||||
"PO-Revision-Date: 2012-08-02 17:18+0000\n"
|
||||
"Last-Translator: Akira Hiyama <Unknown>\n"
|
||||
"Language-Team: Japanese <ja@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-07-20 04:37+0000\n"
|
||||
"X-Generator: Launchpad (build 15644)\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-03 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 15734)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.sh
|
||||
@@ -283,7 +283,7 @@ msgstr "イヌクウティトット語 / Inuktitut"
|
||||
#: model:ir.module.category,name:base.module_category_sales_management
|
||||
#: model:ir.module.module,shortdesc:base.module_sale
|
||||
msgid "Sales Management"
|
||||
msgstr "セールス管理"
|
||||
msgstr "受注管理"
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
@@ -1002,7 +1002,7 @@ msgstr "オマーン"
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_mrp
|
||||
msgid "MRP"
|
||||
msgstr "MRP(資材所要量計画)"
|
||||
msgstr "MRP"
|
||||
|
||||
#. module: base
|
||||
#: report:ir.module.reference.graph:0
|
||||
@@ -3795,7 +3795,7 @@ msgstr "ホスト名またはSMTPサーバのIPアドレス"
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Japanese / 日本語"
|
||||
msgstr "Japanese / 日本語"
|
||||
msgstr "日本語 / Japanese"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.report.xml,auto:0
|
||||
@@ -6423,7 +6423,7 @@ msgstr "多対1項目の属性削除"
|
||||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_accounting_and_finance
|
||||
msgid "Accounting & Finance"
|
||||
msgstr "会計と金融"
|
||||
msgstr "会計と財務"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.server,write_id:0
|
||||
@@ -6961,7 +6961,7 @@ msgstr ""
|
||||
#: field:res.request,act_to:0
|
||||
#: field:res.request.history,act_to:0
|
||||
msgid "To"
|
||||
msgstr ""
|
||||
msgstr "宛先"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.sequence:0
|
||||
@@ -7472,7 +7472,7 @@ msgstr "アクセスの作成"
|
||||
#: field:res.partner.address,state_id:0
|
||||
#: field:res.partner.bank,state_id:0
|
||||
msgid "Fed. State"
|
||||
msgstr ""
|
||||
msgstr "都道府県"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.server,copy_object:0
|
||||
@@ -7703,7 +7703,7 @@ msgstr "販売員"
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_account_accountant
|
||||
msgid "Accounting and Finance"
|
||||
msgstr "会計と金融"
|
||||
msgstr "会計と財務"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/module/module.py:429
|
||||
@@ -8215,7 +8215,7 @@ msgstr "中国語 / 简体中文"
|
||||
#: field:res.partner.address,street:0
|
||||
#: field:res.partner.bank,street:0
|
||||
msgid "Street"
|
||||
msgstr ""
|
||||
msgstr "町名番地"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.yu
|
||||
@@ -11238,7 +11238,7 @@ msgid ""
|
||||
"(default: 465)"
|
||||
msgstr ""
|
||||
"接続の暗号化方式を選択:\n"
|
||||
"・ なし: SMTPセッションはクリアテキストで行われる。\n"
|
||||
"・ なし: SMTPセッションはクリアテキストで行われます。\n"
|
||||
"・ TLS(STARTTLS):TLS暗号化はSMTPセッションの開始において要求されます(推奨)。\n"
|
||||
"・ SSL/TLS:SMTPセッションは専用のポート(デフォルト:465)によってSSL/TLSで暗号化されます。"
|
||||
|
||||
@@ -12022,7 +12022,7 @@ msgstr "%m - 月[01,12]."
|
||||
#: field:res.partner.address,city:0
|
||||
#: field:res.partner.bank,city:0
|
||||
msgid "City"
|
||||
msgstr "市"
|
||||
msgstr "市区町村"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.qa
|
||||
@@ -12413,7 +12413,7 @@ msgstr "あなたが作成 / 書き込みたいオブジェクト。もし、そ
|
||||
#: selection:ir.module.module,state:0
|
||||
#: selection:ir.module.module.dependency,state:0
|
||||
msgid "Not Installed"
|
||||
msgstr "インストールされていません。"
|
||||
msgstr "未インストール"
|
||||
|
||||
#. module: base
|
||||
#: view:workflow.activity:0
|
||||
@@ -12982,7 +12982,7 @@ msgstr "発注時の二重検証"
|
||||
#: field:res.company,street2:0
|
||||
#: field:res.partner.address,street2:0
|
||||
msgid "Street2"
|
||||
msgstr ""
|
||||
msgstr "町名番地2"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.action_view_base_module_update
|
||||
|
||||
@@ -7,14 +7,14 @@ msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:44+0000\n"
|
||||
"PO-Revision-Date: 2012-01-31 16:29+0000\n"
|
||||
"Last-Translator: Antony Lesuisse (OpenERP) <al@openerp.com>\n"
|
||||
"PO-Revision-Date: 2012-07-26 16:30+0000\n"
|
||||
"Last-Translator: Rinat Karimov <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-07-19 04:42+0000\n"
|
||||
"X-Generator: Launchpad (build 15637)\n"
|
||||
"X-Launchpad-Export-Date: 2012-07-27 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 15694)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.sh
|
||||
@@ -2732,7 +2732,7 @@ msgstr "Очистить ID"
|
||||
#. module: base
|
||||
#: view:res.groups:0
|
||||
msgid "Inherited"
|
||||
msgstr ""
|
||||
msgstr "Унаследованный"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.model.fields,serialization_field_id:0
|
||||
@@ -6614,7 +6614,7 @@ msgstr "Совет"
|
||||
#. module: base
|
||||
#: view:res.company:0
|
||||
msgid "Header/Footer of Reports"
|
||||
msgstr ""
|
||||
msgstr "Заголовок/подвал отчетов"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/res/res_users.py:746
|
||||
|
||||
+47
-135
@@ -71,7 +71,6 @@
|
||||
<field name="name"
|
||||
filter_domain="['|', '|', ('name','ilike',self), ('model','ilike',self), ('key2','ilike',self)]"
|
||||
string="Client Action"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Model" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'model'}"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'key2'}"/>
|
||||
@@ -203,7 +202,6 @@
|
||||
<search string="Sequences">
|
||||
<field name="name" string="Sequence"/>
|
||||
<field name="code"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</search>
|
||||
</field>
|
||||
@@ -392,12 +390,9 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Report Xml">
|
||||
<group col="10" colspan="4">
|
||||
<field name="name"
|
||||
filter_domain="['|', '|', '|', '|', ('name','ilike',self), ('model','ilike',self), ('type','ilike',self), ('report_name','ilike',self), ('report_type','ilike',self)]"
|
||||
string="Report"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="name"
|
||||
filter_domain="['|', '|', '|', '|', ('name','ilike',self), ('model','ilike',self), ('type','ilike',self), ('report_name','ilike',self), ('report_type','ilike',self)]"
|
||||
string="Report"/>
|
||||
<group expand="0" string="Group By" colspan="4">
|
||||
<filter string="Report Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'report_type'}"/>
|
||||
</group>
|
||||
@@ -499,11 +494,8 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Open a Window">
|
||||
<group col="10" colspan="4">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('res_model','ilike',self)]" string="Action"/>
|
||||
<field name="view_type"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('res_model','ilike',self)]" string="Action"/>
|
||||
<field name="view_type"/>
|
||||
<group expand="0" string="Group By" colspan="4">
|
||||
<filter string="View Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'view_type'}"/>
|
||||
</group>
|
||||
@@ -661,7 +653,6 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Views">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('model','ilike',self)]" string="View"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-stock_zoom"
|
||||
string="Search"
|
||||
domain="[('type', '=', 'search')]"/>
|
||||
@@ -671,10 +662,8 @@
|
||||
<filter icon="gtk-new"
|
||||
string="Form"
|
||||
domain="[('type', '=','form')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="inherit_id"/>
|
||||
<field name="type"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Object" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'model'}"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type'}"/>
|
||||
@@ -802,31 +791,26 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Attachments">
|
||||
<group colspan="4" col="10">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('datas_fname','ilike',self)]" string="Attachment"/>
|
||||
<field name="create_date"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-stage"
|
||||
string="URL"
|
||||
domain="[('type','=','url')]"/>
|
||||
<filter icon="terp-stock_align_left_24"
|
||||
string="Binary"
|
||||
domain="[('type','=','binary')]"/>
|
||||
<filter name="my_documents_filter"
|
||||
string="My Document(s)"
|
||||
icon="terp-personal"
|
||||
domain="[('create_uid','=',uid)]"
|
||||
help="Filter on my documents"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="create_uid"/>
|
||||
<field name="type"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('datas_fname','ilike',self)]" string="Attachment"/>
|
||||
<field name="create_date"/>
|
||||
<filter icon="terp-stage"
|
||||
string="URL"
|
||||
domain="[('type','=','url')]"/>
|
||||
<filter icon="terp-stock_align_left_24"
|
||||
string="Binary"
|
||||
domain="[('type','=','binary')]"/>
|
||||
<separator/>
|
||||
<filter name="my_documents_filter"
|
||||
string="My Document(s)"
|
||||
icon="terp-personal"
|
||||
domain="[('create_uid','=',uid)]"
|
||||
help="Filter on my documents"/>
|
||||
<field name="create_uid"/>
|
||||
<field name="type"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Owner" icon="terp-personal" domain="[]" context="{'group_by':'create_uid'}"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type'}" groups="base.group_no_one"/>
|
||||
<filter string="Company" icon="terp-gtk-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Month" help="Creation Month" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}"/>
|
||||
</group>
|
||||
</search>
|
||||
@@ -955,10 +939,10 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Model Description">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('model','ilike',self)]" string="Model"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-camera_test"
|
||||
string="In Memory"
|
||||
domain="[('osv_memory', '=', True)]"/>
|
||||
<separator/>
|
||||
<filter icon="terp-stock_align_left_24"
|
||||
string="Custom"
|
||||
domain="[('state', '=', 'manual')]"/>
|
||||
@@ -1035,22 +1019,21 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Fields">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('field_description','ilike',self)]" string="Field"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-gnome-cpu-frequency-applet+"
|
||||
string="Required"
|
||||
domain="[('required', '=', True)]"/>
|
||||
<separator/>
|
||||
<filter icon="terp-dialog-close"
|
||||
string="Readonly"
|
||||
domain="[('readonly', '=', True)]"/>
|
||||
<separator/>
|
||||
<filter icon="terp-translate"
|
||||
string="Translate"
|
||||
domain="[('translate', '=', True)]"/>
|
||||
<newline/>
|
||||
<field name="model_id"/>
|
||||
<field name="ttype"/>
|
||||
<field name="required"/>
|
||||
<field name="readonly"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Object" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'model_id'}"/>
|
||||
</group>
|
||||
@@ -1107,14 +1090,11 @@
|
||||
<field name="name"
|
||||
filter_domain="['|', '|', ('name','ilike',self), ('model','ilike',self), ('module','ilike',self)]"
|
||||
string="External Identifier"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-camera_test"
|
||||
string="Updatable"
|
||||
domain="[('noupdate', '=', False)]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="res_id"/>
|
||||
<field name="noupdate"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Module" icon="terp-folder-blue" domain="[]" context="{'group_by':'module'}"/>
|
||||
<filter string="Object" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'model'}"/>
|
||||
@@ -1240,7 +1220,6 @@
|
||||
<filter icon="terp-gdu-smart-failing"
|
||||
string="Untranslated"
|
||||
domain="['|',('value', '=', False),('value','=','')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="lang"/>
|
||||
<field name="src"/>
|
||||
<field name="value"/>
|
||||
@@ -1469,11 +1448,9 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Scheduled Actions">
|
||||
<field name="name" string="Scheduled Action"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="user_id" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
<field name="nextcall"/>
|
||||
<field name="active"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="User" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<filter string="Execution" icon="terp-go-month"
|
||||
@@ -1554,18 +1531,14 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Access Controls">
|
||||
<group>
|
||||
<field name="name" string="Access Control"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Global" icon="terp-stage" domain="[('group_id','=',False)]"/>
|
||||
<filter string="Full Access" icon="terp-gtk-select-all" domain="[('perm_read','=',True),('perm_write','=',True),('perm_create','=',True),('perm_unlink','=',True)]"/>
|
||||
<filter string="Read Access" icon="terp-stock_align_left_24" domain="[('perm_read','=',True)]"/>
|
||||
<filter string="Write Access" icon="terp-tools" domain="[('perm_write','=',True)]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="model_id"/>
|
||||
<field name="group_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="name" string="Access Control"/>
|
||||
<filter string="Global" icon="terp-stage" domain="[('group_id','=',False)]"/>
|
||||
<separator/>
|
||||
<filter string="Full Access" icon="terp-gtk-select-all" domain="[('perm_read','=',True),('perm_write','=',True),('perm_create','=',True),('perm_unlink','=',True)]"/>
|
||||
<filter string="Read Access" icon="terp-stock_align_left_24" domain="[('perm_read','=',True)]"/>
|
||||
<filter string="Write Access" icon="terp-tools" domain="[('perm_write','=',True)]"/>
|
||||
<field name="model_id"/>
|
||||
<field name="group_id"/>
|
||||
<group expand="0" string="Group By..." colspan="11" col="11" groups="base.group_no_one">
|
||||
<filter string="Group" icon="terp-personal" domain="[]" context="{'group_by':'group_id'}"/>
|
||||
<filter string="Object" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'model_id'}"/>
|
||||
@@ -1651,17 +1624,14 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Record Rules">
|
||||
<group>
|
||||
<field name="name" string="Record Rule"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Global" icon="terp-stage" domain="[('global','=',True)]"/>
|
||||
<filter string="Full Access" icon="terp-gtk-select-all" domain="[('perm_read','=',True),('perm_write','=',True),('perm_create','=',True),('perm_unlink','=',True)]"/>
|
||||
<filter string="Read Access" icon="terp-stock_align_left_24" domain="[('perm_read','=',True)]"/>
|
||||
<filter string="Write Access" icon="terp-tools" domain="[('perm_write','=',True)]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="model_id"/>
|
||||
<field name="groups"/>
|
||||
</group>
|
||||
<field name="name" string="Record Rule"/>
|
||||
<filter string="Global" icon="terp-stage" domain="[('global','=',True)]"/>
|
||||
<separator/>
|
||||
<filter string="Full Access" icon="terp-gtk-select-all" domain="[('perm_read','=',True),('perm_write','=',True),('perm_create','=',True),('perm_unlink','=',True)]"/>
|
||||
<filter string="Read Access" icon="terp-stock_align_left_24" domain="[('perm_read','=',True)]"/>
|
||||
<filter string="Write Access" icon="terp-tools" domain="[('perm_write','=',True)]"/>
|
||||
<field name="model_id"/>
|
||||
<field name="groups"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
@@ -1794,13 +1764,9 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Server Actions">
|
||||
<group col="10" colspan="4">
|
||||
<field name="name" string="Server Action"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="model_id"/>
|
||||
<field name="state"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="name" string="Server Action"/>
|
||||
<field name="model_id"/>
|
||||
<field name="state"/>
|
||||
<group expand="0" string="Group By" colspan="4" col="4">
|
||||
<filter string="Action Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'state'}"/>
|
||||
</group>
|
||||
@@ -1830,7 +1796,6 @@
|
||||
<tree string="Config Wizard Steps">
|
||||
<field name="sequence"/>
|
||||
<field name="action_id"/>
|
||||
<field name="category_id"/>
|
||||
<field name="type"/>
|
||||
<field name="state" readonly="1"/>
|
||||
<button name="action_launch" states="open" string="Launch" type="object" icon="gtk-execute" help="Launch Configuration Wizard"/>
|
||||
@@ -1862,7 +1827,6 @@
|
||||
<field name="action_id"/>
|
||||
<field name="type"/>
|
||||
<field name="sequence"/>
|
||||
<field name="category_id"/>
|
||||
</group>
|
||||
<group string="Groups">
|
||||
<field name="groups_id" nolabel="1" colspan="4"/>
|
||||
@@ -1878,17 +1842,9 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Actions">
|
||||
<group>
|
||||
<filter string="To Do" name="todo" icon="terp-camera_test" domain=" [('state','=','open')]" help="Wizards to be Launched"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="action_id"/>
|
||||
<field name="category_id"/>
|
||||
<field name="state"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Category" context="{'group_by': 'category_id'}" icon="terp-folder-orange"/>
|
||||
</group>
|
||||
<filter string="To Do" name="todo" icon="terp-camera_test" domain=" [('state','=','open')]" help="Wizards to be Launched"/>
|
||||
<field name="action_id"/>
|
||||
<field name="state"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
@@ -1915,50 +1871,6 @@
|
||||
<field name="args">()</field>
|
||||
</record>
|
||||
|
||||
<!-- ir.actions.todo category -->
|
||||
|
||||
<record id="ir_actions_todo_category_form" model="ir.ui.view">
|
||||
<field name="name">ir.actions.todo.category.form</field>
|
||||
<field name="model">ir.actions.todo.category</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Wizard Category" version="7.0">
|
||||
<group col="4">
|
||||
<field name="name"/>
|
||||
<field name="sequence"/>
|
||||
<field name="wizards_ids" nolabel="1" colspan="4"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="ir_actions_todo_category_tree" model="ir.ui.view">
|
||||
<field name="name">ir.actions.todo.category.tree</field>
|
||||
<field name="model">ir.actions.todo.category</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Wizard Category">
|
||||
<field name="name"/>
|
||||
<field name="sequence"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="category_administration_config" model="ir.actions.todo.category">
|
||||
<field name="name">Administration</field>
|
||||
<field name="sequence">1</field>
|
||||
</record>
|
||||
|
||||
<record id="category_sales_management_config" model="ir.actions.todo.category">
|
||||
<field name="name">Sales Management</field>
|
||||
<field name="sequence">5</field>
|
||||
</record>
|
||||
|
||||
<record id="category_tools_customization_config" model="ir.actions.todo.category">
|
||||
<field name="name">Tools / Customization</field>
|
||||
<field name="sequence">5</field>
|
||||
</record>
|
||||
|
||||
<!-- ir.mail.server -->
|
||||
<record model="ir.ui.view" id="ir_mail_server_form">
|
||||
<field name="name">ir.mail.server.form</field>
|
||||
|
||||
@@ -749,20 +749,6 @@ class act_window_close(osv.osv):
|
||||
}
|
||||
act_window_close()
|
||||
|
||||
class ir_actions_todo_category(osv.osv):
|
||||
"""
|
||||
Category of Configuration Wizards
|
||||
"""
|
||||
|
||||
_name = 'ir.actions.todo.category'
|
||||
_description = "Configuration Wizard Category"
|
||||
_columns = {
|
||||
'name':fields.char('Name', size=64, translate=True, required=True),
|
||||
'sequence': fields.integer('Sequence'),
|
||||
'wizards_ids': fields.one2many('ir.actions.todo', 'category_id', 'Configuration Wizards'),
|
||||
}
|
||||
ir_actions_todo_category()
|
||||
|
||||
# This model use to register action services.
|
||||
TODO_STATES = [('open', 'To Do'),
|
||||
('done', 'Done')]
|
||||
@@ -776,8 +762,7 @@ class ir_actions_todo(osv.osv):
|
||||
_description = "Configuration Wizards"
|
||||
_columns={
|
||||
'action_id': fields.many2one(
|
||||
'ir.actions.act_window', 'Action', select=True, required=True,
|
||||
ondelete='cascade'),
|
||||
'ir.actions.actions', 'Action', select=True, required=True),
|
||||
'sequence': fields.integer('Sequence'),
|
||||
'state': fields.selection(TODO_STATES, string='State', required=True),
|
||||
'name': fields.char('Name', size=64),
|
||||
@@ -787,14 +772,13 @@ Automatic: Runs whenever the system is reconfigured.
|
||||
Launch Manually Once: after hacing been launched manually, it sets automatically to Done."""),
|
||||
'groups_id': fields.many2many('res.groups', 'res_groups_action_rel', 'uid', 'gid', 'Groups'),
|
||||
'note': fields.text('Text', translate=True),
|
||||
'category_id': fields.many2one('ir.actions.todo.category','Category'),
|
||||
}
|
||||
_defaults={
|
||||
'state': 'open',
|
||||
'sequence': 10,
|
||||
'type': 'manual',
|
||||
}
|
||||
_order="sequence,name,id"
|
||||
_order="sequence,id"
|
||||
|
||||
def action_launch(self, cr, uid, ids, context=None):
|
||||
""" Launch Action of Wizard"""
|
||||
@@ -804,7 +788,11 @@ Launch Manually Once: after hacing been launched manually, it sets automatically
|
||||
wizard.write({'state': 'done'})
|
||||
|
||||
# Load action
|
||||
res = self.pool.get('ir.actions.act_window').read(cr, uid, wizard.action_id.id, [], context=context)
|
||||
act_type = self.pool.get('ir.actions.actions').read(cr, uid, wizard.action_id.id, ['type'], context=context)
|
||||
|
||||
res = self.pool.get(act_type['type']).read(cr, uid, wizard.action_id.id, [], context=context)
|
||||
if act_type<>'ir.actions.act_window':
|
||||
return res
|
||||
res.setdefault('context','{}')
|
||||
res['nodestroy'] = True
|
||||
|
||||
@@ -879,8 +867,10 @@ class act_client(osv.osv):
|
||||
])
|
||||
|
||||
def _set_params(self, cr, uid, id, field_name, field_value, arg, context):
|
||||
assert isinstance(field_value, dict), "params can only be dictionaries"
|
||||
self.write(cr, uid, id, {'params_store': repr(field_value)}, context=context)
|
||||
if isinstance(field_value, dict):
|
||||
self.write(cr, uid, id, {'params_store': repr(field_value)}, context=context)
|
||||
else:
|
||||
self.write(cr, uid, id, {'params_store': field_value}, context=context)
|
||||
|
||||
_columns = {
|
||||
'tag': fields.char('Client action tag', size=64, required=True,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
@@ -34,7 +35,7 @@
|
||||
<field name="key"/>
|
||||
<field name="value"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -54,13 +54,12 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Filters">
|
||||
<field name="name" string="Filter Name"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Personal" domain="[('user_id','!=',False)]" help="Filters visible only for one user"/>
|
||||
<filter string="Shared" domain="[('user_id','=',False)]" help="Filters shared with all users"/>
|
||||
<separator/>
|
||||
<filter icon="terp-personal" domain="[('user_id','in',(uid, False))]"
|
||||
name="my_filters"
|
||||
string="My Filters"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="model_id"/>
|
||||
<field name="user_id"/>
|
||||
</search>
|
||||
|
||||
@@ -178,14 +178,16 @@ class ir_model(osv.osv):
|
||||
def create(self, cr, user, vals, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
if context and context.get('manual',False):
|
||||
if context and context.get('manual'):
|
||||
vals['state']='manual'
|
||||
res = super(ir_model,self).create(cr, user, vals, context)
|
||||
if vals.get('state','base')=='manual':
|
||||
self.instanciate(cr, user, vals['model'], context)
|
||||
self.pool.get(vals['model']).__init__(self.pool, cr)
|
||||
ctx = context.copy()
|
||||
ctx.update({'field_name':vals['name'],'field_state':'manual','select':vals.get('select_level','0')})
|
||||
ctx = dict(context,
|
||||
field_name=vals['name'],
|
||||
field_state='manual',
|
||||
select=vals.get('select_level', '0'))
|
||||
self.pool.get(vals['model'])._auto_init(cr, ctx)
|
||||
#pooler.restart_pool(cr.dbname)
|
||||
return res
|
||||
@@ -335,8 +337,11 @@ class ir_model_fields(osv.osv):
|
||||
if self.pool.get(vals['model']):
|
||||
self.pool.get(vals['model']).__init__(self.pool, cr)
|
||||
#Added context to _auto_init for special treatment to custom field for select_level
|
||||
ctx = context.copy()
|
||||
ctx.update({'field_name':vals['name'],'field_state':'manual','select':vals.get('select_level','0'),'update_custom_fields':True})
|
||||
ctx = dict(context,
|
||||
field_name=vals['name'],
|
||||
field_state='manual',
|
||||
select=vals.get('select_level', '0'),
|
||||
update_custom_fields=True)
|
||||
self.pool.get(vals['model'])._auto_init(cr, ctx)
|
||||
|
||||
return res
|
||||
@@ -446,8 +451,8 @@ class ir_model_fields(osv.osv):
|
||||
# was called earlier, they will be in-sync before the _auto_init.
|
||||
# Anything we don't update in _columns now will be reset from
|
||||
# the model into ir.model.fields (db).
|
||||
ctx = context.copy()
|
||||
ctx.update({'select': vals.get('select_level','0'),'update_custom_fields':True})
|
||||
ctx = dict(context, select=vals.get('select_level', '0'),
|
||||
update_custom_fields=True)
|
||||
|
||||
for __, patch_struct in models_patch.items():
|
||||
obj = patch_struct[0]
|
||||
@@ -825,20 +830,16 @@ class ir_model_data(osv.osv):
|
||||
'res_id': inherit_id.id,
|
||||
'noupdate': noupdate,
|
||||
},context=context)
|
||||
if xml_id:
|
||||
if res_id:
|
||||
self.loads[(module, xml_id)] = (model, res_id)
|
||||
if model_obj._inherits:
|
||||
for table in model_obj._inherits:
|
||||
inherit_field = model_obj._inherits[table]
|
||||
inherit_id = model_obj.read(cr, uid, res_id,
|
||||
[inherit_field])[inherit_field]
|
||||
self.loads[(module, xml_id + '_' + \
|
||||
table.replace('.', '_'))] = (table, inherit_id)
|
||||
if xml_id and res_id:
|
||||
self.loads[(module, xml_id)] = (model, res_id)
|
||||
for table, inherit_field in model_obj._inherits.iteritems():
|
||||
inherit_id = model_obj.read(cr, uid, res_id,
|
||||
[inherit_field])[inherit_field]
|
||||
self.loads[(module, xml_id + '_' + table.replace('.', '_'))] = (table, inherit_id)
|
||||
return res_id
|
||||
|
||||
def ir_set(self, cr, uid, key, key2, name, models, value, replace=True, isobject=False, meta=None, xml_id=False):
|
||||
if type(models[0])==type([]) or type(models[0])==type(()):
|
||||
if isinstance(models[0], (list, tuple)):
|
||||
model,res_id = models[0]
|
||||
else:
|
||||
res_id=None
|
||||
@@ -858,7 +859,7 @@ class ir_model_data(osv.osv):
|
||||
res = cr.fetchone()
|
||||
if not res:
|
||||
ir_values_obj = pooler.get_pool(cr.dbname).get('ir.values')
|
||||
res = ir_values_obj.set(cr, uid, key, key2, name, models, value, replace, isobject, meta)
|
||||
ir_values_obj.set(cr, uid, key, key2, name, models, value, replace, isobject, meta)
|
||||
elif xml_id:
|
||||
cr.execute('UPDATE ir_values set value=%s WHERE model=%s and key=%s and name=%s'+where,(value, model, key, name))
|
||||
return True
|
||||
@@ -890,8 +891,6 @@ class ir_model_data(osv.osv):
|
||||
for data in self.browse(cr, uid, ids, context):
|
||||
model = data.model
|
||||
res_id = data.res_id
|
||||
model_obj = self.pool.get(model)
|
||||
name = tools.ustr(data.name)
|
||||
|
||||
pair_to_unlink = (model, res_id)
|
||||
if pair_to_unlink not in to_unlink:
|
||||
@@ -909,19 +908,19 @@ class ir_model_data(osv.osv):
|
||||
for model,res_id in wkf_todo:
|
||||
try:
|
||||
wf_service.trg_write(uid, model, res_id, cr)
|
||||
except:
|
||||
_logger.info('Unable to force processing of workflow for item %s@%s in order to leave activity to be deleted', res_id, model)
|
||||
except Exception:
|
||||
_logger.info('Unable to force processing of workflow for item %s@%s in order to leave activity to be deleted', res_id, model, exc_info=True)
|
||||
|
||||
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 set(external_ids)-ids_set:
|
||||
# if other modules have defined this record, we must not delete it
|
||||
continue
|
||||
_logger.info('Deleting %s@%s', res_id, model)
|
||||
try:
|
||||
self.pool.get(model).unlink(cr, uid, [res_id], context=context)
|
||||
except:
|
||||
except Exception:
|
||||
_logger.info('Unable to delete %s@%s', res_id, model, exc_info=True)
|
||||
|
||||
# Remove non-model records first, then model fields, and finish with models
|
||||
|
||||
@@ -164,16 +164,13 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Workflow Activity">
|
||||
<field name="name" string="Workflow Activity"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-camera_test" string="Flow Start"
|
||||
domain="[('flow_start', '=',True)]" />
|
||||
<filter icon="terp-gtk-stop" string="Flow Stop"
|
||||
domain="[('flow_stop', '=',True)]" />
|
||||
<separator orientation="vertical"/>
|
||||
<field name="wkf_id"/>
|
||||
<field name="action_id"/>
|
||||
<field name="kind"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Workflow" icon="terp-stage" domain="[]" context="{'group_by':'wkf_id'}"/>
|
||||
</group>
|
||||
@@ -242,7 +239,6 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Transition">
|
||||
<field name="signal" filter_domain="['|', ('signal','ilike',self), ('condition','ilike',self)]" string="Workflow Transition"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="act_from"/>
|
||||
<field name="act_to"/>
|
||||
</search>
|
||||
@@ -301,10 +297,8 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Workflow Instances">
|
||||
<field name="res_type" string="Resource Object"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-camera_test" string="Active" domain="[('state','=','active')]" name="active"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="wkf_id" widget="selection"/>
|
||||
<field name="wkf_id"/>
|
||||
<field name="res_id"/>
|
||||
<field name="state"/>
|
||||
</search>
|
||||
@@ -366,10 +360,8 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Workflow Workitems">
|
||||
<field name="state" string="State"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-camera_test" string="Active" name="active" domain="[('state','=','active')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="wkf_id" widget="selection"/>
|
||||
<field name="wkf_id"/>
|
||||
<field name="act_id"/>
|
||||
<field name="subflow_id"/>
|
||||
<field name="inst_id"/>
|
||||
|
||||
@@ -177,8 +177,8 @@ class module(osv.osv):
|
||||
_columns = {
|
||||
'name': fields.char("Technical Name", size=128, readonly=True, required=True, select=True),
|
||||
'category_id': fields.many2one('ir.module.category', 'Category', readonly=True, select=True),
|
||||
'shortdesc': fields.char('Module Name', size=256, readonly=True, translate=True),
|
||||
'summary': fields.char('Summary', size=256, readonly=True, translate=True),
|
||||
'shortdesc': fields.char('Module Name', size=64, readonly=True, translate=True),
|
||||
'summary': fields.char('Summary', size=64, readonly=True, translate=True),
|
||||
'description': fields.text("Description", readonly=True, translate=True),
|
||||
'author': fields.char("Author", size=128, readonly=True),
|
||||
'maintainer': fields.char('Maintainer', size=128, readonly=True),
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_point_of_sale">
|
||||
<field name="name">Point of Sales</field>
|
||||
<field name="name">Point of Sale</field>
|
||||
<field name="description">Helps you get the most out of your points of sales with fast sale encoding, simplified payment mode encoding, automatic picking lists generation and more.</field>
|
||||
<field name="sequence">13</field>
|
||||
</record>
|
||||
@@ -132,6 +132,11 @@
|
||||
<record model="res.groups" id="group_multi_company">
|
||||
<field name="category_id" ref="module_category_usability"/>
|
||||
</record>
|
||||
|
||||
<record model="res.groups" id="group_multi_currency">
|
||||
<field name="category_id" ref="module_category_usability"/>
|
||||
</record>
|
||||
|
||||
<record model="res.groups" id="group_no_one">
|
||||
<field name="category_id" ref="module_category_usability"/>
|
||||
</record>
|
||||
|
||||
@@ -41,21 +41,17 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search modules">
|
||||
<group col='10' colspan='4'>
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('shortdesc','ilike',self)]" string="Module"/>
|
||||
<field name="description" string="Keywords" filter_domain="['|', ('description', 'ilike', self), ('summary', 'ilike', self)]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter name="app" icon="terp-check" string="Apps" domain="[('application', '=', 1)]"/>
|
||||
<filter name="extra" icon="terp-check" string="Extra" domain="[('application', '=', 0)]"/>
|
||||
<filter icon="terp-check" string="Installed" domain="[('state', 'in', ['installed', 'to upgrade', 'to remove'])]"/>
|
||||
<filter icon="terp-dialog-close" string="Not Installed" domain="[('state', 'in', ['uninstalled', 'uninstallable', 'to install'])]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="category_id"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Author" icon="terp-personal" domain="[]" context="{'group_by':'author'}"/>
|
||||
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'category_id'}"/>
|
||||
</group>
|
||||
<field name="name" filter_domain="['|', '|', '|', ('description', 'ilike', self), ('summary', 'ilike', self), ('shortdesc', 'ilike', self), ('name',
|
||||
'ilike', self)]"/>
|
||||
<filter name="app" icon="terp-check" string="Apps" domain="[('application', '=', 1)]"/>
|
||||
<filter name="extra" icon="terp-check" string="Extra" domain="[('application', '=', 0)]"/>
|
||||
<separator/>
|
||||
<filter icon="terp-check" string="Installed" domain="[('state', 'in', ['installed', 'to upgrade', 'to remove'])]"/>
|
||||
<filter icon="terp-dialog-close" string="Not Installed" domain="[('state', 'in', ['uninstalled', 'uninstallable', 'to install'])]"/>
|
||||
<field name="category_id"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Author" icon="terp-personal" domain="[]" context="{'group_by':'author'}"/>
|
||||
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'category_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -120,7 +116,7 @@
|
||||
<div class="oe_title">
|
||||
<h1><field name="shortdesc"/></h1>
|
||||
<h2 class="oe_fade"><field name="summary"/></h2>
|
||||
<button name="button_install" states="uninstalled" string="Install" type="object" class="oe_highlight"/>
|
||||
<button name="button_immediate_install" states="uninstalled" string="Install" type="object" class="oe_highlight"/>
|
||||
<button name="button_upgrade" states="installed" string="Upgrade" type="object" class="oe_highlight"/>
|
||||
<button name="button_uninstall" states="installed" string="Uninstall" type="object"
|
||||
confirm="Do you confirm the uninstallation of this module? This will permanently erase all data currently stored by the module!"/>
|
||||
@@ -131,7 +127,7 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="author"/>
|
||||
<field name="website" widget="url"/>
|
||||
<field name="website" widget="url" attrs="{'invisible':[('website','=',False)]}"/>
|
||||
<field name="category_id" widget="selection"/>
|
||||
</group>
|
||||
<group>
|
||||
@@ -144,12 +140,14 @@
|
||||
<page string="Description">
|
||||
<field name="description"/>
|
||||
</page>
|
||||
<page string="Technical Data">
|
||||
<page string="Technical Data" groups="base.group_no_one">
|
||||
<group col="4">
|
||||
<field name="demo"/>
|
||||
<field name="application"/>
|
||||
<field name="state"/>
|
||||
</group>
|
||||
<label for="views_by_module" string="Created Views"/>
|
||||
<field name="views_by_module"/>
|
||||
<label for="dependencies_id"/>
|
||||
<field name="dependencies_id">
|
||||
<tree string="Dependencies">
|
||||
@@ -161,8 +159,6 @@
|
||||
<page string="Features" attrs="{'invisible':[('state','!=','installed')]}">
|
||||
<label for="menus_by_module" string="Created Menus"/>
|
||||
<field name="menus_by_module"/>
|
||||
<label for="views_by_module" string="Created Views"/>
|
||||
<field name="views_by_module"/>
|
||||
<label for="reports_by_module" string="Defined Reports"/>
|
||||
<field name="reports_by_module"/>
|
||||
</page>
|
||||
@@ -192,7 +188,10 @@
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="context">{'search_default_app':1}</field>
|
||||
<field name="search_view_id" ref="view_module_filter"/>
|
||||
<field name="help">You can install new modules in order to activate new features, menu, reports or data in your OpenERP instance. To install some modules, click on the button "Install" from the form view and then click on "Start Upgrade".</field>
|
||||
<field name="help" type="html">
|
||||
<p><b>No module found!</b></p>
|
||||
<p>You should try others search criteria.</p>
|
||||
</field>
|
||||
</record>
|
||||
<menuitem id="menu_module_tree" parent="base.menu_management" name="Modules"
|
||||
sequence="1" action="open_module_tree"/>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<form string="Import Translation" version="7.0">
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="code" string="Code" placeholder="en_US"/>
|
||||
<field name="code" string="Code" placeholder="e.g. en_US"/>
|
||||
<field name="data"/>
|
||||
<field name="overwrite"/>
|
||||
</group>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<menuitem id="menu_publisher_warranty" name="OpenERP Entreprise" parent="base.menu_administration" sequence="5"
|
||||
<menuitem id="menu_publisher_warranty" name="OpenERP Enterprise" parent="base.menu_administration" sequence="5"
|
||||
groups="base.group_no_one"/>
|
||||
|
||||
<record id="publisher_warranty_contract_tree_view" model="ir.ui.view">
|
||||
|
||||
@@ -9,12 +9,10 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Parameters">
|
||||
<field name="name" string="Name"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-project"
|
||||
string="Generic"
|
||||
help="Parameters that are used by all resources."
|
||||
domain="[('res_id','=',False)]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="fields_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</search>
|
||||
|
||||
@@ -146,9 +146,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Bank Accounts">
|
||||
<field name="bank_name" filter_domain="['|', ('bank_name','ilike',self), ('acc_number','ilike',self)]" string="Bank Name"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter name="my_bank" icon="terp-check" string="My Banks" domain="[('company_id','<>',False)]" help="Bank accounts belonging to one of your companies"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="company_id" invisible="context.get('company_hide', True)"/>
|
||||
<field name="partner_id"/>
|
||||
</search>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
</h1>
|
||||
<label for="rml_header1" class="oe_edit_only"/>
|
||||
<div>
|
||||
<field name="rml_header1" placeholder="Global Business Solutions"/>
|
||||
<field name="rml_header1" placeholder="e.g. Global Business Solutions"/>
|
||||
</div>
|
||||
</div>
|
||||
<group col="4">
|
||||
@@ -178,8 +178,8 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Multi Company">
|
||||
<field name="name" string="Name"/>
|
||||
<field name="company_id" widget="selection"/>
|
||||
<field name="company_dest_id" widget="selection"/>
|
||||
<field name="company_id"/>
|
||||
<field name="company_dest_id"/>
|
||||
<field name="object_id"/>
|
||||
</search>
|
||||
</field>
|
||||
|
||||
@@ -1,54 +1,56 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="res_config_view_base" model="ir.ui.view">
|
||||
<field name="name">res.config.view.base</field>
|
||||
<field name="model">res.config</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form version="7.0">
|
||||
<group string="res_config_contents"/>
|
||||
<footer>
|
||||
<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"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<data>
|
||||
|
||||
<record id="view_config_wizard_form" model="ir.ui.view">
|
||||
<field name="name">Compabitiliby configuration wizard</field>
|
||||
<field name="model">ir.actions.configuration.wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Next Configuration Step" version="7.0">
|
||||
<group>
|
||||
<field name="note"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_next" type="object" string="Continue" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" class="oe_link" special="cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="res_config_view_base" model="ir.ui.view">
|
||||
<field name="name">res.config.view.base</field>
|
||||
<field name="model">res.config</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form version="7.0">
|
||||
<group string="res_config_contents"/>
|
||||
<footer>
|
||||
<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"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_config_installer" model="ir.ui.view">
|
||||
<field name="name">Inheritable view for installer objects</field>
|
||||
<field name="model">res.config.installer</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form version="7.0">
|
||||
<separator string="title" colspan="4"/>
|
||||
<footer>
|
||||
<button name="action_next" type="object" string="Install Modules" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Skip" class="oe_link" special="cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_config_wizard_form" model="ir.ui.view">
|
||||
<field name="name">Compabitiliby configuration wizard</field>
|
||||
<field name="model">ir.actions.configuration.wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Next Configuration Step" version="7.0">
|
||||
<group>
|
||||
<field name="note"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_next" type="object" string="Continue" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" class="oe_link" special="cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
<record id="res_config_installer" model="ir.ui.view">
|
||||
<field name="name">Inheritable view for installer objects</field>
|
||||
<field name="model">res.config.installer</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form version="7.0">
|
||||
<separator string="title" colspan="4"/>
|
||||
<footer>
|
||||
<button name="action_next" type="object" string="Install Modules" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Skip" class="oe_link" special="cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
<field name="help">Display and manage the list of all countries that can be assigned to your partner records. You can create or delete countries to make sure the ones you are working on will be maintained.</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_localisation" name="Localisation" parent="menu_config_address_book" sequence="1"/>
|
||||
<menuitem id="menu_localisation" name="Localisation" parent="menu_config_address_book" sequence="1" groups="base.group_no_one"/>
|
||||
|
||||
<menuitem action="action_country" id="menu_country_partner" parent="menu_localisation" sequence="0" groups="base.group_no_one"/>
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
<field name="search_view_id" ref="view_currency_search"/>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_currency_form" id="menu_action_currency_form" parent="menu_localisation" sequence="3"/>
|
||||
<menuitem action="action_currency_form" id="menu_action_currency_form" parent="menu_localisation" sequence="3" groups="base.group_multi_currency"/>
|
||||
|
||||
<!--
|
||||
Currency Rate Type
|
||||
|
||||
@@ -108,15 +108,11 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Languages">
|
||||
<group>
|
||||
<field name="name"
|
||||
filter_domain="['|', '|', ('name','ilike',self), ('code','ilike',self), ('iso_code','ilike',self)]"
|
||||
string="Language"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Translatable" icon="terp-tools" domain="[('translatable','=',True)]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="direction"/>
|
||||
</group>
|
||||
<field name="name"
|
||||
filter_domain="['|', '|', ('name','ilike',self), ('code','ilike',self), ('iso_code','ilike',self)]"
|
||||
string="Language"/>
|
||||
<filter string="Translatable" icon="terp-tools" domain="[('translatable','=',True)]"/>
|
||||
<field name="direction"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -104,12 +104,15 @@ class res_partner_category(osv.osv):
|
||||
|
||||
class res_partner_title(osv.osv):
|
||||
_name = 'res.partner.title'
|
||||
_order = 'name'
|
||||
_columns = {
|
||||
'name': fields.char('Title', required=True, size=46, translate=True),
|
||||
'shortcut': fields.char('Abbreviation', required=True, size=16, translate=True),
|
||||
'shortcut': fields.char('Abbreviation', size=16, translate=True),
|
||||
'domain': fields.selection([('partner','Partner'),('contact','Contact')], 'Domain', required=True, size=24)
|
||||
}
|
||||
_order = 'name'
|
||||
_defaults = {
|
||||
'domain': 'contact',
|
||||
}
|
||||
|
||||
def _lang_get(self, cr, uid, context=None):
|
||||
lang_pool = self.pool.get('res.lang')
|
||||
@@ -135,7 +138,7 @@ class res_partner(osv.osv):
|
||||
'name': fields.char('Name', size=128, required=True, select=True),
|
||||
'date': fields.date('Date', select=1),
|
||||
'title': fields.many2one('res.partner.title','Title'),
|
||||
'parent_id': fields.many2one('res.partner','Company'),
|
||||
'parent_id': fields.many2one('res.partner', 'Owned by'),
|
||||
'child_ids': fields.one2many('res.partner', 'parent_id', 'Contacts'),
|
||||
'ref': fields.char('Reference', size=64, select=1),
|
||||
'lang': fields.selection(_lang_get, 'Language', help="If the selected language is loaded in the system, all documents related to this partner will be printed in this language. If not, it will be english."),
|
||||
@@ -161,7 +164,7 @@ class res_partner(osv.osv):
|
||||
'street2': fields.char('Street2', size=128),
|
||||
'zip': fields.char('Zip', change_default=True, size=24),
|
||||
'city': fields.char('City', size=128),
|
||||
'state_id': fields.many2one("res.country.state", 'State', domain="[('country_id','=',country_id)]"),
|
||||
'state_id': fields.many2one("res.country.state", 'State'),
|
||||
'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('Email', size=240),
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
<group col="4">
|
||||
<field name="name"/>
|
||||
<field name="shortcut"/>
|
||||
<field name="domain"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
@@ -103,22 +102,23 @@
|
||||
<field name="photo" widget='image' class="oe_avatar oe_left"/>
|
||||
<div class="oe_title">
|
||||
<div class="oe_edit_only">
|
||||
<label for="name" string="Customer Name"/>
|
||||
(<field name="is_company" on_change="onchange_type(is_company)" class="oe_inline"/> <label for="is_company" string="Is a Company?"/>)
|
||||
<label for="name"/> (
|
||||
<field name="is_company" on_change="onchange_type(is_company)" class="oe_inline"/> <label for="is_company" string="Is a Company?"/>)
|
||||
</div>
|
||||
<h1>
|
||||
<field name="name"/>
|
||||
<field name="name" default_focus="1" placeholder="Name" />
|
||||
</h1>
|
||||
<field name="category_id" widget="many2many_tags" placeholder="Select Tags"/>
|
||||
<field name="parent_id"
|
||||
placeholder="Company"
|
||||
domain="[('is_company', '=', True)]" context="{'default_is_company': True}"
|
||||
attrs="{'invisible': [('is_company','=', True)]}"
|
||||
on_change="onchange_address(use_parent_address, parent_id)"/>
|
||||
<field name="category_id" widget="many2many_tags" placeholder="Tags..."/>
|
||||
</div>
|
||||
<div class="oe_right oe_button_box" name="buttons"> </div>
|
||||
|
||||
<group>
|
||||
<group>
|
||||
<field name="parent_id"
|
||||
domain="[('is_company', '=', True)]" context="{'default_is_company': True}"
|
||||
attrs="{'invisible': [('is_company','=', True)]}"
|
||||
on_change="onchange_address(use_parent_address, parent_id)"/>,
|
||||
<label for="type" attrs="{'invisible': [('parent_id','=', False)]}"/>
|
||||
<div attrs="{'invisible': [('parent_id','=', False)]}">
|
||||
<field class="oe_inline"
|
||||
@@ -134,10 +134,10 @@
|
||||
<field name="street2"/>
|
||||
<div class="address_format">
|
||||
<field name="city" placeholder="City" style="width: 40%%"/>
|
||||
<field name="state_id" class="oe_no_button" placeholder="State" style="width: 24%%"/>
|
||||
<field name="state_id" options='{"no_open": true}' placeholder="State" style="width: 24%%"/>
|
||||
<field name="zip" placeholder="ZIP" style="width: 34%%"/>
|
||||
</div>
|
||||
<field name="country_id" placeholder="Country" class="oe_no_button"/>
|
||||
<field name="country_id" placeholder="Country" options='{"no_open": true}'/>
|
||||
</div>
|
||||
<field name="website" widget="url" placeholder="e.g. www.openerp.com"/>
|
||||
</group>
|
||||
@@ -149,12 +149,13 @@
|
||||
<field name="fax"/>
|
||||
<field name="email" widget="email"/>
|
||||
<field name="title" domain="[('domain', '=', 'contact')]"
|
||||
class="oe_no_button" attrs="{'invisible': [('is_company','=', True)]}"/>
|
||||
groups="base.group_no_one"
|
||||
options='{"no_open": true}' attrs="{'invisible': [('is_company','=', True)]}" />
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<notebook colspan="4">
|
||||
<page string="Contacts">
|
||||
<page string="Contacts" attrs="{'invisible': [('is_company','=',False)]}">
|
||||
<field name="child_ids" context="{'default_parent_id': active_id}" mode="kanban">
|
||||
<kanban>
|
||||
<field name="color"/>
|
||||
@@ -216,7 +217,7 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="customer"/>
|
||||
<field name="supplier"/>
|
||||
<field name="supplier" invisible="not context.get('default_supplier')"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="ref"/>
|
||||
@@ -246,22 +247,20 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Partner">
|
||||
<group col='10' colspan='4'>
|
||||
<field name="name"
|
||||
filter_domain="['|','|',('name','ilike',self),('parent_id','ilike',self),('ref','=',self)]"
|
||||
string="Partner"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter help="My Partners" icon="terp-personal+" domain="[('user_id','=',uid)]"/>
|
||||
<filter string="Persons" name="type_person" icon="terp-personal" domain="[('is_company','=',0)]"/>
|
||||
<filter string="Companies" name="type_company" icon="terp-partner" domain="[('is_company','=',1)]"/>
|
||||
<filter string="Customers" name="customer" icon="terp-personal" domain="[('customer','=',1)]" help="Customer Partners"/>
|
||||
<filter string="Suppliers" name="supplier" icon="terp-personal" domain="[('supplier','=',1)]" help="Supplier Partners"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="category_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="parent_id" filter_domain="[('parent_id','child_of',[self])]"/>
|
||||
</group>
|
||||
<newline />
|
||||
<field name="name"
|
||||
filter_domain="['|','|',('name','ilike',self),('parent_id','ilike',self),('ref','=',self)]"
|
||||
string="Partner"/>
|
||||
<filter help="My Partners" icon="terp-personal+" domain="[('user_id','=',uid)]"/>
|
||||
<separator/>
|
||||
<filter string="Persons" name="type_person" icon="terp-personal" domain="[('is_company','=',0)]"/>
|
||||
<filter string="Companies" name="type_company" icon="terp-partner" domain="[('is_company','=',1)]"/>
|
||||
<separator/>
|
||||
<filter string="Customers" name="customer" icon="terp-personal" domain="[('customer','=',1)]" help="Customer Partners"/>
|
||||
<separator/>
|
||||
<filter string="Suppliers" name="supplier" icon="terp-personal" domain="[('supplier','=',1)]" help="Supplier Partners"/>
|
||||
<field name="category_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="parent_id" filter_domain="[('parent_id','child_of',[self])]"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Salesman" icon="terp-personal" domain="[]" context="{'group_by' : 'user_id'}" />
|
||||
<filter string="Company" context="{'group_by': 'parent_id'}"/>
|
||||
@@ -293,6 +292,7 @@
|
||||
<field name="country_id"/>
|
||||
<field name="mobile"/>
|
||||
<field name="state_id"/>
|
||||
<field name="category_id"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_vignette">
|
||||
@@ -300,20 +300,20 @@
|
||||
<img t-att-src="kanban_image('res.partner', 'photo', record.id.value)" class="oe_kanban_image"/>
|
||||
</a>
|
||||
<div class="oe_kanban_details">
|
||||
<h4 class="oe_partner_heading"><a type="edit"><field name="name"/></a>
|
||||
</h4>
|
||||
<ul>
|
||||
<li t-if="record.parent_id.raw_value and !record.function.raw_value"><field name="parent_id"/></li>
|
||||
<li t-if="!record.parent_id.raw_value and record.function.raw_value"><field name="function"/></li>
|
||||
<li t-if="record.parent_id.raw_value and record.function.raw_value"><field name="function"/> at <field name="parent_id"/></li>
|
||||
<li t-if="record.city.raw_value and !record.country.raw_value"><field name="city"/></li>
|
||||
<li t-if="!record.city.raw_value and record.country.raw_value"><field name="country"/></li>
|
||||
<li t-if="record.city.raw_value and record.country.raw_value"><field name="city"/>, <field name="country"/></li>
|
||||
<li t-if="record.mobile.raw_value"><field name="mobile"/></li>
|
||||
<li t-if="record.phone.raw_value">Tel: <field name="phone"/></li>
|
||||
<li t-if="record.mobile.raw_value">Mobile: <field name="mobile"/></li>
|
||||
<li t-if="record.email.raw_value"><a t-attf-href="mailto:#{record.email.raw_value}"><field name="email"/></a></li>
|
||||
</ul>
|
||||
<h4 class="oe_partner_heading"><a type="edit"><field name="name"/></a></h4>
|
||||
<div class="oe_kanban_partner_categories"/>
|
||||
<div class="oe_kanban_partner_links"/>
|
||||
<ul>
|
||||
<li t-if="record.parent_id.raw_value and !record.function.raw_value"><field name="parent_id"/></li>
|
||||
<li t-if="!record.parent_id.raw_value and record.function.raw_value"><field name="function"/></li>
|
||||
<li t-if="record.parent_id.raw_value and record.function.raw_value"><field name="function"/> at <field name="parent_id"/></li>
|
||||
<li t-if="record.city.raw_value and !record.country.raw_value"><field name="city"/></li>
|
||||
<li t-if="!record.city.raw_value and record.country.raw_value"><field name="country"/></li>
|
||||
<li t-if="record.city.raw_value and record.country.raw_value"><field name="city"/>, <field name="country"/></li>
|
||||
<li t-if="record.phone.raw_value">Tel: <field name="phone"/></li>
|
||||
<li t-if="record.mobile.raw_value">Mobile: <field name="mobile"/></li>
|
||||
<li t-if="record.email.raw_value"><a t-attf-href="mailto:#{record.email.raw_value}"><field name="email"/></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -331,12 +331,14 @@
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="context">{"search_default_customer":1}</field>
|
||||
<field name="search_view_id" ref="view_res_partner_filter"/>
|
||||
<field name="help">
|
||||
Click on "Create" to add a new contact in your address book.
|
||||
<p>
|
||||
A contact is either a person or a company; a person can be linked to a company as a contact of that company.
|
||||
<p>
|
||||
You will be able to follow documents and history of your contacts (invoices, meetings, projects, etc.)
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to add a contact in your address book.
|
||||
</p><p>
|
||||
OpenERP helps you easily track all activities related to
|
||||
a customer; discussions, history of business opportunities,
|
||||
documents, etc.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_partner_form_view1" model="ir.actions.act_window.view">
|
||||
@@ -368,12 +370,14 @@
|
||||
<field name="domain">[('customer','=',1)]</field>
|
||||
<field name="context">{'default_customer':1, 'search_default_customer':1}</field>
|
||||
<field name="filter" eval="True"/>
|
||||
<field name="help">
|
||||
Click on "Create" to add a new customer in your address book.
|
||||
<p>
|
||||
A contact is either a person or a company; a person can be linked to a company as a contact of that company.
|
||||
<p>
|
||||
You will be able to follow documents and history of your contacts (invoices, meetings, projects, etc.)
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to add a contact in your address book.
|
||||
</p><p>
|
||||
OpenERP helps you easily track all activities related to
|
||||
a customer: discussions, history of business opportunities,
|
||||
documents, etc.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -386,12 +390,14 @@
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="context">{'search_default_supplier': 1,'default_customer': 0,'default_supplier': 1}</field>
|
||||
<field name="filter" eval="True"/>
|
||||
<field name="help">
|
||||
Click on "Create" to add a new supplier in your address book.
|
||||
<p>
|
||||
A supplier is either a person or a company; a person can be linked to a company as a contact of that company.
|
||||
<p>
|
||||
You will be able to follow documents and history of your contacts (invoices, meetings, projects, etc.)
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to add a contact in your address book.
|
||||
</p><p>
|
||||
OpenERP helps you easily track all activities related to
|
||||
a supplier: discussions, history of purchases,
|
||||
documents, etc.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -2,6 +2,16 @@
|
||||
<openerp>
|
||||
<data>
|
||||
<!-- res.groups -->
|
||||
<record id="view_groups_search" model="ir.ui.view">
|
||||
<field name="name">res.groups.search</field>
|
||||
<field name="model">res.groups</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Groups">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('category_id','ilike',self)]" string="Group"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_groups_form" model="ir.ui.view">
|
||||
<field name="name">res.groups.form</field>
|
||||
<field name="model">res.groups</field>
|
||||
|
||||
@@ -23,6 +23,10 @@
|
||||
<record model="res.groups" id="group_multi_company">
|
||||
<field name="name">Multi Companies</field>
|
||||
</record>
|
||||
|
||||
<record model="res.groups" id="group_multi_currency">
|
||||
<field name="name">Multi Currencies</field>
|
||||
</record>
|
||||
|
||||
<record model="res.groups" id="group_no_one">
|
||||
<field name="name">Technical Features</field>
|
||||
|
||||
@@ -117,7 +117,6 @@
|
||||
"access_res_widget_user","res.widget.user","model_res_widget",,1,0,0,0
|
||||
"access_ir_config_parameter","ir_config_parameter","model_ir_config_parameter",,1,0,0,0
|
||||
"access_ir_mail_server_all","ir_mail_server","model_ir_mail_server",,1,0,0,0
|
||||
"access_ir_actions_todo_category","ir_actions_todo_category","model_ir_actions_todo_category","group_system",1,1,1,1
|
||||
"access_ir_actions_client","ir_actions_client all","model_ir_actions_client",,1,0,0,0
|
||||
"access_ir_needaction_users_rel","ir_needaction_users_rel","model_ir_needaction_users_rel",,1,1,1,1
|
||||
"access_ir_needaction_mixin","ir_needaction_mixin","model_ir_needaction_mixin",,1,1,1,1
|
||||
|
||||
|
@@ -19,10 +19,8 @@
|
||||
<rng:element name="value">
|
||||
<rng:optional><rng:attribute name="model" /></rng:optional>
|
||||
<rng:optional><rng:attribute name="search" /></rng:optional>
|
||||
<rng:optional>
|
||||
<rng:attribute name="eval"/>
|
||||
</rng:optional>
|
||||
<rng:empty />
|
||||
<rng:optional><rng:attribute name="eval" /></rng:optional>
|
||||
<rng:optional><rng:text/></rng:optional>
|
||||
</rng:element>
|
||||
</rng:define>
|
||||
|
||||
|
||||
@@ -122,6 +122,7 @@ start the server specifying the --unaccent flag.
|
||||
"""
|
||||
|
||||
import logging
|
||||
import traceback
|
||||
|
||||
from openerp.tools import flatten, reverse_enumerate
|
||||
import fields
|
||||
@@ -426,6 +427,7 @@ class expression(object):
|
||||
|
||||
# If the field is _inherits'd, search for the working_table,
|
||||
# and extract the field.
|
||||
field = None
|
||||
if field_path[0] in table._inherit_fields:
|
||||
while True:
|
||||
field = working_table._columns.get(field_path[0])
|
||||
@@ -474,6 +476,13 @@ class expression(object):
|
||||
# the function field doesn't provide a search function and doesn't store
|
||||
# values in the database, so we must ignore it : we generate a dummy leaf
|
||||
self.__exp[i] = TRUE_LEAF
|
||||
_logger.error(
|
||||
"The field '%s' (%s) can not be searched: non-stored "
|
||||
"function field without fnct_search",
|
||||
field.string, left)
|
||||
# avoid compiling stack trace if not needed
|
||||
if _logger.isEnabledFor(logging.DEBUG):
|
||||
_logger.debug(''.join(traceback.format_stack()))
|
||||
else:
|
||||
subexp = field.search(cr, uid, table, left, [self.__exp[i]], context=context)
|
||||
if not subexp:
|
||||
|
||||
+47
-11
@@ -127,6 +127,23 @@ class _column(object):
|
||||
res = obj.read(cr, uid, ids, [name], context=context)
|
||||
return [x[name] for x in res]
|
||||
|
||||
def as_display_name(self, cr, uid, obj, value, context=None):
|
||||
"""Converts a field value to a suitable string representation for a record,
|
||||
e.g. when this field is used as ``rec_name``.
|
||||
|
||||
:param obj: the ``BaseModel`` instance this column belongs to
|
||||
:param value: a proper value as returned by :py:meth:`~openerp.orm.osv.BaseModel.read`
|
||||
for this column
|
||||
"""
|
||||
# delegated to class method, so a column type A can delegate
|
||||
# to a column type B.
|
||||
return self._as_display_name(self, cr, uid, obj, value, context=None)
|
||||
|
||||
@classmethod
|
||||
def _as_display_name(cls, field, cr, uid, obj, value, context=None):
|
||||
# This needs to be a class method, in case a column type A as to delegate
|
||||
# to a column type B.
|
||||
return tools.ustr(value)
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Simple fields
|
||||
@@ -154,11 +171,6 @@ class integer(_column):
|
||||
|
||||
def __init__(self, string='unknown', required=False, **args):
|
||||
super(integer, self).__init__(string=string, required=required, **args)
|
||||
if required:
|
||||
_logger.debug(
|
||||
"required=True is deprecated: making an integer field"
|
||||
" `required` has no effect, as NULL values are "
|
||||
"automatically turned into 0.")
|
||||
|
||||
class reference(_column):
|
||||
_type = 'reference'
|
||||
@@ -178,6 +190,17 @@ class reference(_column):
|
||||
result[value['id']] = False
|
||||
return result
|
||||
|
||||
@classmethod
|
||||
def _as_display_name(cls, field, cr, uid, obj, value, context=None):
|
||||
if value:
|
||||
# reference fields have a 'model,id'-like value, that we need to convert
|
||||
# to a real name
|
||||
model_name, res_id = value.split(',')
|
||||
model = obj.pool.get(model_name)
|
||||
if model and res_id:
|
||||
return model.name_get(cr, uid, [int(res_id)], context=context)[0][1]
|
||||
return tools.ustr(value)
|
||||
|
||||
class char(_column):
|
||||
_type = 'char'
|
||||
|
||||
@@ -218,11 +241,6 @@ class float(_column):
|
||||
self.digits = digits
|
||||
# synopsis: digits_compute(cr) -> (precision, scale)
|
||||
self.digits_compute = digits_compute
|
||||
if required:
|
||||
_logger.debug(
|
||||
"required=True is deprecated: making a float field"
|
||||
" `required` has no effect, as NULL values are "
|
||||
"automatically turned into 0.0.")
|
||||
|
||||
def digits_change(self, cr):
|
||||
if self.digits_compute:
|
||||
@@ -453,6 +471,11 @@ class many2one(_column):
|
||||
def search(self, cr, obj, args, name, value, offset=0, limit=None, uid=None, context=None):
|
||||
return obj.pool.get(self._obj).search(cr, uid, args+self._domain+[('name', 'like', value)], offset, limit, context=context)
|
||||
|
||||
|
||||
@classmethod
|
||||
def _as_display_name(cls, field, cr, uid, obj, value, context=None):
|
||||
return value[1] if isinstance(value, tuple) else tools.ustr(value)
|
||||
|
||||
|
||||
class one2many(_column):
|
||||
_classic_read = False
|
||||
@@ -543,6 +566,10 @@ class one2many(_column):
|
||||
def search(self, cr, obj, args, name, value, offset=0, limit=None, uid=None, operator='like', context=None):
|
||||
return obj.pool.get(self._obj).name_search(cr, uid, value, self._domain, operator, context=context,limit=limit)
|
||||
|
||||
|
||||
@classmethod
|
||||
def _as_display_name(cls, field, cr, uid, obj, value, context=None):
|
||||
raise NotImplementedError('One2Many columns should not be used as record name (_rec_name)')
|
||||
|
||||
#
|
||||
# Values: (0, 0, { fields }) create
|
||||
@@ -725,6 +752,10 @@ class many2many(_column):
|
||||
def search(self, cr, obj, args, name, value, offset=0, limit=None, uid=None, operator='like', context=None):
|
||||
return obj.pool.get(self._obj).search(cr, uid, args+self._domain+[('name', operator, value)], offset, limit, context=context)
|
||||
|
||||
@classmethod
|
||||
def _as_display_name(cls, field, cr, uid, obj, value, context=None):
|
||||
raise NotImplementedError('Many2Many columns should not be used as record name (_rec_name)')
|
||||
|
||||
|
||||
def get_nice_size(value):
|
||||
size = 0
|
||||
@@ -1078,6 +1109,12 @@ class function(_column):
|
||||
if self._fnct_inv:
|
||||
self._fnct_inv(obj, cr, user, id, name, value, self._fnct_inv_arg, context)
|
||||
|
||||
@classmethod
|
||||
def _as_display_name(cls, field, cr, uid, obj, value, context=None):
|
||||
# Function fields are supposed to emulate a basic field type,
|
||||
# so they can delegate to the basic type for record name rendering
|
||||
return globals()[field._type]._as_display_name(field, cr, uid, obj, value, context=context)
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Related fields
|
||||
# ---------------------------------------------------------
|
||||
@@ -1211,7 +1248,6 @@ class related(function):
|
||||
result[-1]['relation'] = f['relation']
|
||||
self._relations = result
|
||||
|
||||
|
||||
class sparse(function):
|
||||
|
||||
def convert_value(self, obj, cr, uid, record, value, read_value, context=None):
|
||||
|
||||
+32
-18
@@ -657,7 +657,7 @@ class BaseModel(object):
|
||||
_columns = {}
|
||||
_constraints = []
|
||||
_defaults = {}
|
||||
_rec_name = 'name'
|
||||
_rec_name = None
|
||||
_parent_name = 'parent_id'
|
||||
_parent_store = False
|
||||
_parent_order = False
|
||||
@@ -1054,6 +1054,13 @@ class BaseModel(object):
|
||||
assert self._log_access, "TransientModels must have log_access turned on, "\
|
||||
"in order to implement their access rights policy"
|
||||
|
||||
# Validate rec_name
|
||||
if self._rec_name is not None:
|
||||
assert self._rec_name in self._columns.keys() + ['id'], "Invalid rec_name %s for model %s" % (self._rec_name, self._name)
|
||||
else:
|
||||
self._rec_name = 'name'
|
||||
|
||||
|
||||
def __export_row(self, cr, uid, row, fields, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
@@ -1567,6 +1574,12 @@ class BaseModel(object):
|
||||
res.extend(self.pool.get(parent).fields_get_keys(cr, user, context))
|
||||
return res
|
||||
|
||||
def _rec_name_fallback(self, cr, uid, context=None):
|
||||
rec_name = self._rec_name
|
||||
if rec_name not in self._columns:
|
||||
rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id"
|
||||
return rec_name
|
||||
|
||||
#
|
||||
# Overload this method if you need a window title which depends on the context
|
||||
#
|
||||
@@ -1859,8 +1872,7 @@ class BaseModel(object):
|
||||
return view
|
||||
|
||||
def _get_default_search_view(self, cr, user, context=None):
|
||||
""" Generates a single-field tree view, using _rec_name if
|
||||
it's one of the columns or the first column it finds otherwise
|
||||
""" Generates a single-field search view, based on _rec_name.
|
||||
|
||||
:param cr: database cursor
|
||||
:param int user: user id
|
||||
@@ -1868,17 +1880,12 @@ class BaseModel(object):
|
||||
:returns: a tree view as an lxml document
|
||||
:rtype: etree._Element
|
||||
"""
|
||||
_rec_name = self._rec_name
|
||||
if _rec_name not in self._columns:
|
||||
_rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id"
|
||||
|
||||
view = etree.Element('search', string=self._description)
|
||||
etree.SubElement(view, 'field', name=_rec_name)
|
||||
etree.SubElement(view, 'field', name=self._rec_name_fallback(cr, user, context))
|
||||
return view
|
||||
|
||||
def _get_default_tree_view(self, cr, user, context=None):
|
||||
""" Generates a single-field tree view, using _rec_name if
|
||||
it's one of the columns or the first column it finds otherwise
|
||||
""" Generates a single-field tree view, based on _rec_name.
|
||||
|
||||
:param cr: database cursor
|
||||
:param int user: user id
|
||||
@@ -1886,12 +1893,8 @@ class BaseModel(object):
|
||||
:returns: a tree view as an lxml document
|
||||
:rtype: etree._Element
|
||||
"""
|
||||
_rec_name = self._rec_name
|
||||
if _rec_name not in self._columns:
|
||||
_rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id"
|
||||
|
||||
view = etree.Element('tree', string=self._description)
|
||||
etree.SubElement(view, 'field', name=_rec_name)
|
||||
etree.SubElement(view, 'field', name=self._rec_name_fallback(cr, user, context))
|
||||
return view
|
||||
|
||||
def _get_default_calendar_view(self, cr, user, context=None):
|
||||
@@ -1918,7 +1921,7 @@ class BaseModel(object):
|
||||
return False
|
||||
|
||||
view = etree.Element('calendar', string=self._description)
|
||||
etree.SubElement(view, 'field', name=self._rec_name)
|
||||
etree.SubElement(view, 'field', self._rec_name_fallback(cr, user, context))
|
||||
|
||||
if (self._date_name not in self._columns):
|
||||
date_found = False
|
||||
@@ -2276,8 +2279,13 @@ class BaseModel(object):
|
||||
return []
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
return [(r['id'], tools.ustr(r[self._rec_name])) for r in self.read(cr, user, ids,
|
||||
[self._rec_name], context, load='_classic_write')]
|
||||
|
||||
if self._rec_name in self._all_columns:
|
||||
rec_name_column = self._all_columns[self._rec_name].column
|
||||
return [(r['id'], rec_name_column.as_display_name(cr, user, self, r[self._rec_name], context=context))
|
||||
for r in self.read(cr, user, ids, [self._rec_name],
|
||||
load='_classic_write', context=context)]
|
||||
return [(id, "%s,%s" % (self._name, id)) for id in ids]
|
||||
|
||||
def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100):
|
||||
"""Search for records that have a display name matching the given ``name`` pattern if compared
|
||||
@@ -4152,6 +4160,12 @@ class BaseModel(object):
|
||||
|
||||
self.check_create(cr, user)
|
||||
|
||||
if self._log_access:
|
||||
for f in LOG_ACCESS_COLUMNS:
|
||||
if vals.pop(f, None) is not None:
|
||||
_logger.warning(
|
||||
'Field `%s` is not allowed when creating the model `%s`.',
|
||||
f, self._name)
|
||||
vals = self._add_missing_default_values(cr, user, vals, context)
|
||||
|
||||
tocreate = {}
|
||||
|
||||
@@ -142,18 +142,20 @@ def _eval_xml(self, node, pool, cr, uid, idref, context=None):
|
||||
except Exception:
|
||||
_logger.warning('could not eval(%s) for %s in %s' % (a_eval, node.get('name'), context), exc_info=True)
|
||||
return ""
|
||||
def _process(s, idref):
|
||||
m = re.findall('[^%]%\((.*?)\)[ds]', s)
|
||||
for id in m:
|
||||
if not id in idref:
|
||||
idref[id]=self.id_get(cr, id)
|
||||
return s % idref
|
||||
if t == 'xml':
|
||||
def _process(s, idref):
|
||||
m = re.findall('[^%]%\((.*?)\)[ds]', s)
|
||||
for id in m:
|
||||
if not id in idref:
|
||||
idref[id]=self.id_get(cr, id)
|
||||
return s % idref
|
||||
_fix_multiple_roots(node)
|
||||
return '<?xml version="1.0"?>\n'\
|
||||
+_process("".join([etree.tostring(n, encoding='utf-8')
|
||||
for n in node]),
|
||||
idref)
|
||||
for n in node]), idref)
|
||||
if t == 'html':
|
||||
return _process("".join([etree.tostring(n, encoding='utf-8')
|
||||
for n in node]), idref)
|
||||
if t in ('char', 'int', 'float'):
|
||||
d = node.text
|
||||
if t == 'int':
|
||||
|
||||
Reference in New Issue
Block a user