diff options
| author | Divyesh Makwana (Open ERP) <mdi@tinyerp.com> | 2012-10-15 11:06:17 +0530 |
|---|---|---|
| committer | Divyesh Makwana (Open ERP) <mdi@tinyerp.com> | 2012-10-15 11:06:17 +0530 |
| commit | d0d85fec3e50a70e0a14b60d38d249d01fe327ce (patch) | |
| tree | 626b2537ba0770b7e80fd68653863ff8aced72e5 | |
| parent | e2bc9fe1372d5668e914c3b62e4c0f5819523876 (diff) | |
| parent | 99c4f31111ee47b6ec8a844760790a8f21adb79a (diff) | |
[Merge] Merge with main server.
bzr revid: mdi@tinyerp.com-20121015053617-z71o2h2ojb75x6tc
25 files changed, 1976 insertions, 1974 deletions
diff --git a/doc/index.rst.inc b/doc/index.rst.inc index 842888aecb2..31ac2494a48 100644 --- a/doc/index.rst.inc +++ b/doc/index.rst.inc @@ -6,6 +6,7 @@ OpenERP Server :maxdepth: 1 import + module-versioning test-framework Changed in 7.0 @@ -17,4 +18,4 @@ Changed in 7.0 api/user_img_specs api/need_action_specs api/font_style - api/field_level_acl
\ No newline at end of file + api/field_level_acl diff --git a/doc/module-versioning.rst b/doc/module-versioning.rst new file mode 100644 index 00000000000..7a4c127d6d8 --- /dev/null +++ b/doc/module-versioning.rst @@ -0,0 +1,69 @@ +.. _module_versioning: + +Module versioning +================= + +OpenERP has been developed with modularity in mind: OpenERP should be flexible +enough so it can be adopted by any enterprise, of any size and in any market. +By using modules one can adapt OpenERP in many different ways: from completely +different business to smaller, company-specific changes. + +As modules (and the core framework itself) evolve, it is necessary to identify +modules by their version so a sensible set of modules can be chosen for a +particular deployment. + +There are two trends re-inforcing each others. Firstly OpenERP s.a. will work +on a smaller number of official modules and let the community handles more and +more development. Secondly all those modules will receive greater exposure on +`OpenERP Apps`_ where each module will be owned by a single author. + +The solution advocated by OpenERP is straightforward and aims to avoid the +`dependency hell`_. In particular we don't want to deal with versioned +dependencies (i.e. a module depends on a specific version of another module). + +For each stable release (e.g. OpenERP 6.1, or OpenERP 7.0) or, said in other +words, for each major version, there is only one (major) version of each +module. The minor version is bumped for bug fixes but is otherwise not +important here. + +Making variations on some business needs must be done by creating new modules, +possibly depending on previously written modules. If depending on a module +proves too difficult, you can write a new module (not a new _version_). But +generally Python is flexible enough that depending on the existing module +should work. + +For the next major version, refactoring modules can be done and similar +functionalities can be brought together in a better module. + +.. _`OpenERP Apps`: http://apps.openerp.com/ + +.. _`dependency hell`: http://en.wikipedia.org/wiki/Dependency_hell + +Example +------- + +Whenever a new module is developed or must evolve, the above versioning policy +should be respected. + +A particular concern one can face when deploying OpenERP to multiple customers +is now detailed as an example to provide a few guidelines. The hypotethical +situation is as follow. A partner needs to create a new module, called ``M``, for a +customer. Shortly after (but still within a typical OpenERP release cycle, so +there is no chance to bump the version number except for bug fixes), ``M`` must be +adapted for another customer. + +The correct way to handle it is to leave ``M`` as it is and create a new module, +say called ``X``, that depends on ``M`` for the second customer. Both modules have the +same version (i.e. 6.1 or 7.0, targeting the corresponding OpenERP version). + +If leaving ``M`` as it is is not possible (which should be very rare as Python +is incredibly flexible), the ``X`` module for the new customer can depend on a +new module ``N``, derived from ``M``. At this point, ``N`` is a new, +differently named module. It is not a ``M`` module with a increased version +number. Your goal should be to make ``N`` as close as possible to ``M``, so +that at the next version of OpenERP, the first customer can switch to ``N`` +instead of ``M`` (or include the changes in a new version of ``M``). At that +point you are in the ideal situation: you have a module ``N`` for one customer, +and a module ``X`` depending on N to account for the differences between those +two customers. + diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index d390d235f92..d4e7098c282 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -43,12 +43,22 @@ The kernel of OpenERP, needed for all installation. 'res/res_config.xml', 'data/res.country.state.csv', 'ir/wizard/wizard_menu_view.xml', - 'ir/ir.xml', - 'ir/ir_translation_view.xml', - 'ir/ir_filters.xml', + 'ir/ir_actions.xml', + 'ir/ir_attachment_view.xml', 'ir/ir_config_parameter_view.xml', - 'ir/workflow/workflow_view.xml', + 'ir/ir_cron_view.xml', + 'ir/ir_filters.xml', + 'ir/ir_mail_server_view.xml', + 'ir/ir_model_view.xml', + 'ir/ir_rule_view.xml', + 'ir/ir_sequence_view.xml', + 'ir/ir_translation_view.xml', + 'ir/ir_ui_menu_view.xml', + 'ir/ir_ui_view_view.xml', + 'ir/ir_values_view.xml', + 'ir/osv_memory_autovacuum.xml', 'ir/report/ir_report.xml', + 'ir/workflow/workflow_view.xml', 'module/module_view.xml', 'module/module_data.xml', 'module/module_report.xml', diff --git a/openerp/addons/base/ir/__init__.py b/openerp/addons/base/ir/__init__.py index ba8b785f39d..c6034e0f7ee 100644 --- a/openerp/addons/base/ir/__init__.py +++ b/openerp/addons/base/ir/__init__.py @@ -20,8 +20,6 @@ ############################################################################## import ir_model -import ir_model_constraint -import ir_model_relation import ir_sequence import ir_needaction import ir_ui_menu diff --git a/openerp/addons/base/ir/ir.xml b/openerp/addons/base/ir/ir.xml deleted file mode 100644 index 491bc9c8131..00000000000 --- a/openerp/addons/base/ir/ir.xml +++ /dev/null @@ -1,1791 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - <!-- Values --> - - <record id="values_view_form_action" model="ir.ui.view"> - <field name="name">ir.values.form.action</field> - <field name="model">ir.values</field> - <field name="arch" type="xml"> - <form string="Action Bindings" version="7.0"> - <group> - <group> - <field name="name"/> - <field name="model_id" on_change="onchange_object_id(model_id)"/> - <field name="model"/> - <field name="res_id"/> - <field name="key2"/> - </group> - <group> - <field name="action_id" on_change="onchange_action_id(action_id)"/> - <field name="value_unpickle" colspan="4" string="Action Reference"/> - </group> - </group> - </form> - </field> - </record> - - <record id="values_view_form_defaults" model="ir.ui.view"> - <field name="name">ir.values.form.defaults</field> - <field name="model">ir.values</field> - <field name="arch" type="xml"> - <form string="User-defined Defaults" version="7.0"> - <group> - <group> - <field name="name"/> - <field name="model"/> - <field name="model_id" on_change="onchange_object_id(model_id)"/> - <field name="value_unpickle" nolabel="1"/> - </group> - <group> - <field name="key2" string="Condition"/> - <field name="user_id"/> - <field name="company_id" groups="base.group_multi_company"/> - </group> - </group> - </form> - </field> - </record> - - <record id="values_view_tree_action" model="ir.ui.view"> - <field name="name">ir.values.tree.action</field> - <field name="model">ir.values</field> - <field name="arch" type="xml"> - <tree string="Action Bindings/Defaults"> - <field name="name"/> - <field name="model"/> - <field name="key2"/> - </tree> - </field> - </record> - - <record id="values_view_search_action" model="ir.ui.view"> - <field name="name">ir.values.search.action</field> - <field name="model">ir.values</field> - <field name="arch" type="xml"> - <search string="Client Actions"> - <field name="name" - filter_domain="['|', '|', ('name','ilike',self), ('model','ilike',self), ('key2','ilike',self)]" - string="Client Action"/> - <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'}"/> - </group> - </search> - </field> - </record> - - <record id="act_values_form_action" model="ir.actions.act_window"> - <field name="name">Action Bindings</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.values</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="search_view_id" ref="values_view_search_action"/> - <field name="domain">[('key','=','action')]</field> - <field name="context">{'default_key':'action'}</field> - </record> - <record model="ir.actions.act_window.view" id="action_values_tree_view"> - <field name="sequence" eval="1"/> - <field name="view_mode">tree</field> - <field name="view_id" ref="values_view_tree_action"/> - <field name="act_window_id" ref="act_values_form_action"/> - </record> - <record model="ir.actions.act_window.view" id="action_values_form_view"> - <field name="sequence" eval="2"/> - <field name="view_mode">form</field> - <field name="view_id" ref="values_view_form_action"/> - <field name="act_window_id" ref="act_values_form_action"/> - </record> - - <record id="act_values_form_defaults" model="ir.actions.act_window"> - <field name="name">User-defined Defaults</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.values</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="search_view_id" ref="values_view_search_action"/> - <field name="domain">[('key','=','default')]</field> - <field name="context">{'default_key':'default','default_key2':''}</field> - </record> - <record model="ir.actions.act_window.view" id="action_values_defaults_tree_view"> - <field name="sequence" eval="1"/> - <field name="view_mode">tree</field> - <field name="view_id" ref="values_view_tree_action"/> - <field name="act_window_id" ref="act_values_form_defaults"/> - </record> - <record model="ir.actions.act_window.view" id="action_values_defaults_form_view"> - <field name="sequence" eval="2"/> - <field name="view_mode">form</field> - <field name="view_id" ref="values_view_form_defaults"/> - <field name="act_window_id" ref="act_values_form_defaults"/> - </record> - - <!-- Sequences --> - - <record id="sequence_view" model="ir.ui.view"> - <field name="name">ir.sequence.form</field> - <field name="model">ir.sequence</field> - <field name="arch" type="xml"> - <form string="Sequences" version="7.0"> - <sheet> - <group col="4"> - <field name="name"/> - <field name="code"/> - <field name="company_id" groups="base.group_multi_company"/> - <field name="active" groups="base.group_no_one"/> - </group> - <notebook> - <page string="Sequence"> - <group col="4"> - <field name="prefix"/> - <field name="suffix"/> - <field name="padding"/> - <field name="number_increment"/> - <field name="number_next"/> - <field name="implementation"/> - </group> - <group col="3" string="Legend (for prefix, suffix)"> - <group> - <label colspan="2" string="Current Year with Century: %%(year)s"/> - <label colspan="2" string="Current Year without Century: %%(y)s"/> - <label colspan="2" string="Month: %%(month)s"/> - <label colspan="2" string="Day: %%(day)s"/> - </group> - <group> - <label colspan="2" string="Day of the Year: %%(doy)s"/> - <label colspan="2" string="Week of the Year: %%(woy)s"/> - <label colspan="2" string="Day of the Week (0:Monday): %%(weekday)s"/> - </group> - <group> - <label colspan="2" string="Hour 00->24: %%(h24)s"/> - <label colspan="2" string="Hour 00->12: %%(h12)s"/> - <label colspan="2" string="Minute: %%(min)s"/> - <label colspan="2" string="Second: %%(sec)s"/> - </group> - </group> - </page> - </notebook> - </sheet> - </form> - </field> - </record> - - <record id="sequence_view_tree" model="ir.ui.view"> - <field name="name">ir.sequence.tree</field> - <field name="model">ir.sequence</field> - <field name="arch" type="xml"> - <tree string="Sequences"> - <field name="code"/> - <field name="name"/> - <field name="prefix"/> - <field name="padding"/> - <field name="company_id" groups="base.group_multi_company"/> - <field name="number_next"/> - <field name="number_increment"/> - <field name="implementation"/> - </tree> - </field> - </record> - - <record id="view_sequence_search" model="ir.ui.view"> - <field name="name">ir.sequence.search</field> - <field name="model">ir.sequence</field> - <field name="arch" type="xml"> - <search string="Sequences"> - <field name="name" string="Sequence"/> - <field name="code"/> - <field name="company_id" groups="base.group_multi_company"/> - </search> - </field> - </record> - - <record id="ir_sequence_form" model="ir.actions.act_window"> - <field name="name">Sequences</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.sequence</field> - <field name="view_type">form</field> - <field name="view_id" ref="sequence_view_tree"/> - <field name="context">{'active_test': False}</field> - </record> - <menuitem id="next_id_5" name="Sequences & Identifiers" parent="base.menu_custom" sequence="21" groups="base.group_no_one"/> - <menuitem action="ir_sequence_form" id="menu_ir_sequence_form" parent="next_id_5"/> - - <!-- Sequences Types --> - - <record id="sequence_type_form_view" model="ir.ui.view"> - <field name="name">ir.sequence.type.form</field> - <field name="model">ir.sequence.type</field> - <field name="arch" type="xml"> - <form string="Sequence Type" version="7.0"> - <sheet> - <group col="4"> - <field name="name"/> - <field name="code"/> - </group> - </sheet> - </form> - </field> - </record> - - <record id="sequence_type_tree_view" model="ir.ui.view"> - <field name="name">ir.sequence.type.tree</field> - <field name="model">ir.sequence.type</field> - <field name="arch" type="xml"> - <tree string="Sequence Type"> - <field name="name"/> - <field name="code"/> - </tree> - </field> - </record> - - <record id="view_sequence_type_search" model="ir.ui.view"> - <field name="name">ir.sequence.type.search</field> - <field name="model">ir.sequence.type</field> - <field name="arch" type="xml"> - <search string="Sequences Type"> - <field name="name" filter_domain="['|', ('name','ilike',self), ('code','ilike',self)]" string="Sequence Type"/> - </search> - </field> - </record> - - <record id="ir_sequence_type" model="ir.actions.act_window"> - <field name="name">Sequence Codes</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.sequence.type</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field eval="False" name="view_id"/> - </record> - <menuitem action="ir_sequence_type" id="menu_ir_sequence_type" - groups="base.group_no_one" - parent="base.next_id_5"/> - - <!-- Actions --> - - <record id="action_view" model="ir.ui.view"> - <field name="name">ir.actions.actions</field> - <field name="model">ir.actions.actions</field> - <field name="arch" type="xml"> - <form string="Action" version="7.0"> - <group> - <field name="name"/> - <field name="type"/> - <field name="usage"/> - </group> - </form> - </field> - </record> - <record id="action_view_tree" model="ir.ui.view"> - <field name="name">ir.actions.actions.tree</field> - <field name="model">ir.actions.actions</field> - <field name="arch" type="xml"> - <tree string="Action"> - <field name="name"/> - <field name="type"/> - </tree> - </field> - </record> - <record id="action_view_search" model="ir.ui.view"> - <field name="name">ir.actions.actions.search</field> - <field name="model">ir.actions.actions</field> - <field name="arch" type="xml"> - <search string="Action"> - <field name="name" filter_domain="['|', ('name','ilike',self), ('type','ilike',self)]" string="Action"/> - </search> - </field> - </record> - - <record id="ir_sequence_actions" model="ir.actions.act_window"> - <field name="name">Actions</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.actions.actions</field> - <field name="view_type">form</field> - <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.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"/> - - - - <record id="act_report_xml_view" model="ir.ui.view"> - <field name="name">ir.actions.report.xml</field> - <field name="model">ir.actions.report.xml</field> - <field name="arch" type="xml"> - <form string="Report" version="7.0"> - <group> - <group> - <field name="name"/> - <field name="report_name"/> - <field name="model"/> - </group> - <group> - <field name="usage"/> - <field name="report_type"/> - <field name="report_file"/> - </group> - </group> - <notebook> - <page string="Other Configuration"> - <group> - <group string="RML Report"> - <field name="header"/> - </group> - <group string="XML Report"> - <field name="report_xsl"/> - <field name="report_xml"/> - </group> - <group string="Attachments"> - <field name="attachment"/> - <field name="attachment_use"/> - </group> - <group string="Miscellaneous"> - <field name="multi"/> - <field name="auto"/> - </group> - </group> - </page> - <page string="Security"> - <field name="groups_id"/> - </page> - </notebook> - </form> - </field> - </record> - <record id="act_report_xml_view_tree" model="ir.ui.view"> - <field name="name">ir.actions.report.xml.tree</field> - <field name="model">ir.actions.report.xml</field> - <field name="arch" type="xml"> - <tree string="Report xml"> - <field name="name"/> - <field name="model"/> - <field name="type"/> - <field name="report_name"/> - <field name="report_type"/> - <field name="attachment"/> - </tree> - </field> - </record> - <record id="act_report_xml_search_view" model="ir.ui.view"> - <field name="name">ir.actions.report.xml.search</field> - <field name="model">ir.actions.report.xml</field> - <field name="arch" type="xml"> - <search string="Report Xml"> - <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> - </search> - </field> - </record> - - <record id="ir_action_report_xml" model="ir.actions.act_window"> - <field name="name">Reports</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.actions.report.xml</field> - <field name="view_type">form</field> - <field name="view_id" ref="act_report_xml_view_tree"/> - <field name="search_view_id" ref="act_report_xml_search_view"/> - </record> - <menuitem action="ir_action_report_xml" id="menu_ir_action_report_xml" parent="base.next_id_6"/> - - <record id="view_window_action_tree" model="ir.ui.view"> - <field name="name">ir.actions.windows.tree</field> - <field name="model">ir.actions.act_window</field> - <field name="arch" type="xml"> - <tree string="Open Window"> - <field name="name"/> - <field name="res_model"/> - <field name="view_type"/> - <field name="view_id"/> - <field name="domain"/> - </tree> - </field> - </record> - - <record id="view_window_action_form" model="ir.ui.view"> - <field name="name">ir.actions.windows.form</field> - <field name="model">ir.actions.act_window</field> - <field name="arch" type="xml"> - <form string="Open a Window" version="7.0"> - <group> - <group> - <field name="name"/> - <field name="res_model" string="Object"/> - <field name="src_model" string="Source Object"/> - </group> - <group> - <field name="usage"/> - <field name="type" readonly="1"/> - <field name="target"/> - </group> - </group> - <notebook> - <page string="General Settings"> - <group> - <group string="Views"> - <field name="view_type"/> - <field name="view_mode"/> - <field name="view_id"/> - <field name="search_view_id"/> - </group> - <group string="Filters"> - <field name="domain"/> - <field name="context"/> - <field name="limit"/> - <field name="auto_refresh"/> - <field name="auto_search"/> - <field name="filter"/> - </group> - </group> - <group string="Help"> - <field colspan="2" name="help" nolabel="1"/> - </group> - <group string="Views"> - <field colspan="2" name="view_ids" nolabel="1"> - <form string="Views" version="7.0"> - <group> - <field colspan="4" name="sequence"/> - <field name="view_mode"/> - <field domain="[('type', '=', view_mode)]" name="view_id"/> - </group> - </form> - <tree string="Views"> - <field name="sequence"/> - <field name="view_mode"/> - <field name="view_id"/> - </tree> - </field> - </group> - </page> - <page string="Security"> - <field name="groups_id"/> - </page> - </notebook> - </form> - </field> - </record> - <record id="view_window_action_search" model="ir.ui.view"> - <field name="name">ir.actions.windows.search</field> - <field name="model">ir.actions.act_window</field> - <field name="arch" type="xml"> - <search string="Open a Window"> - <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> - </search> - </field> - </record> - - <record id="ir_action_window" model="ir.actions.act_window"> - <field name="name">Window Actions</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.actions.act_window</field> - <field name="view_type">form</field> - <field name="search_view_id" ref="view_window_action_search"/> - </record> - <record id="ir_action_window_view1" model="ir.actions.act_window.view"> - <field eval="1" name="sequence"/> - <field name="view_mode">tree</field> - <field name="view_id" ref="view_window_action_tree"/> - <field name="act_window_id" ref="ir_action_window"/> - </record> - <record id="ir_action_window_view2" model="ir.actions.act_window.view"> - <field eval="2" name="sequence"/> - <field name="view_mode">form</field> - <field name="view_id" ref="view_window_action_form"/> - <field name="act_window_id" ref="ir_action_window"/> - </record> - <menuitem action="ir_action_window" id="menu_ir_action_window" parent="base.next_id_6"/> - - <record id="act_wizard_view_tree" model="ir.ui.view"> - <field name="name">ir.actions.wizard.tree</field> - <field name="model">ir.actions.wizard</field> - <field name="arch" type="xml"> - <tree string="Wizard"> - <field name="name"/> - <field name="wiz_name"/> - <field name="multi"/> - </tree> - </field> - </record> - - <record id="act_wizard_view" model="ir.ui.view"> - <field name="name">ir.actions.wizard</field> - <field name="model">ir.actions.wizard</field> - <field name="arch" type="xml"> - <form string="Wizards" version="7.0"> - <group col="4"> - <field name="name"/> - <field name="type"/> - <field name="wiz_name"/> - <field name="multi"/> - </group> - <label for="groups_id"/> - <field name="groups_id"/> - </form> - </field> - </record> - - <record id="act_wizard_search_view" model="ir.ui.view"> - <field name="name">ir.actions.wizard.search</field> - <field name="model">ir.actions.wizard</field> - <field name="arch" type="xml"> - <search string="Wizards"> - <field name="name" - filter_domain="['|', '|', ('name','ilike',self), ('type','ilike',self), ('wiz_name','ilike',self)]" - string="Wizard"/> - </search> - </field> - </record> - - <record id="ir_action_wizard" model="ir.actions.act_window"> - <field name="name">Wizards</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.actions.wizard</field> - <field name="view_type">form</field> - <field name="search_view_id" ref="act_wizard_search_view"/> - </record> - - <menuitem action="ir_action_wizard" id="menu_ir_action_wizard" parent="base.next_id_6"/> - - <!-- View --> - <record id="view_view_form" model="ir.ui.view"> - <field name="name">ir.ui.view</field> - <field name="model">ir.ui.view</field> - <field name="arch" type="xml"> - <form string="Views" version="7.0"> - <sheet> - <group> - <group> - <field name="name"/> - <field name="type"/> - <field name="model"/> - <field name="priority"/> - </group> - <group> - <field name="field_parent"/> - <field name="inherit_id"/> - <field name="xml_id"/> - </group> - </group> - <notebook> - <page string="Architecture"> - <field name="arch"/> - </page> - <page string="Groups"> - <field name="groups_id"/> - </page> - </notebook> - </sheet> - </form> - </field> - </record> - - <record id="view_view_tree" model="ir.ui.view"> - <field name="name">ir.ui.view.tree</field> - <field name="model">ir.ui.view</field> - <field name="arch" type="xml"> - <tree string="Views"> - <field name="priority" string="Sequence"/> - <field name="name"/> - <field name="type"/> - <field name="model"/> - <field name="xml_id"/> - <field name="inherit_id"/> - </tree> - </field> - </record> - - <record id="view_view_search" model="ir.ui.view"> - <field name="name">ir.ui.view.search</field> - <field name="model">ir.ui.view</field> - <field name="arch" type="xml"> - <search string="Views"> - <field name="name" filter_domain="['|', ('name','ilike',self), ('model','ilike',self)]" string="View"/> - <filter icon="terp-stock_zoom" - string="Search" - domain="[('type', '=', 'search')]"/> - <filter icon="gtk-indent" - string="Tree" - domain="[('type', '=', 'tree')]"/> - <filter icon="gtk-new" - string="Form" - domain="[('type', '=','form')]"/> - <field name="inherit_id"/> - <field name="type"/> - <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'}"/> - </group> - </search> - </field> - </record> - - <record id="action_ui_view" model="ir.actions.act_window"> - <field name="name">Views</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.ui.view</field> - <field name="view_id" ref="view_view_tree"/> - <field name="help">Views allows you to personalize each view of OpenERP. You can add new fields, move fields, rename them or delete the ones that you do not need.</field> - </record> - <menuitem action="action_ui_view" id="menu_action_ui_view" parent="base.next_id_2" sequence="2"/> - - - <!-- View customizations --> - <record id="view_view_custom_search" model="ir.ui.view"> - <field name="name">ir.ui.view.custom.search</field> - <field name="model">ir.ui.view.custom</field> - <field name="arch" type="xml"> - <search string="Customized Views"> - <field name="user_id"/> - <field name="ref_id"/> - </search> - </field> - </record> - <record id="view_view_custom_form" model="ir.ui.view"> - <field name="name">ir.ui.view.custom.form</field> - <field name="model">ir.ui.view.custom</field> - <field name="arch" type="xml"> - <form string="Customized Views" version="7.0"> - <sheet> - <group col="4"> - <field name="user_id"/> - <field name="ref_id"/> - <field name="arch" colspan="4" nolabel="1"/> - </group> - </sheet> - </form> - </field> - </record> - <record id="view_view_custom_tree" model="ir.ui.view"> - <field name="name">ir.ui.view.custom.tree</field> - <field name="model">ir.ui.view.custom</field> - <field name="arch" type="xml"> - <tree string="Customized Views"> - <field name="user_id"/> - <field name="ref_id"/> - </tree> - </field> - </record> - <record id="action_ui_view_custom" model="ir.actions.act_window"> - <field name="name">Customized Views</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.ui.view.custom</field> - <field name="help">Customized views are used when users reorganize the content of their dashboard views (via web client)</field> - </record> - <menuitem id="menu_action_ui_view_custom" action="action_ui_view_custom" parent="base.next_id_2" sequence="3"/> - - - <!-- Attachment --> - <record id="view_attachment_form" model="ir.ui.view"> - <field name="name">ir.attachment.view</field> - <field name="model">ir.attachment</field> - <field name="arch" type="xml"> - <form string="Attachments" version="7.0"> - <sheet> - <label for="name" class="oe_edit_only"/> - <h1> - <field name="name"/> - </h1> - <group> - <group string="Data"> - <field name="type"/> - <field name="datas" filename="datas_fname" attrs="{'invisible':[('type','=','url')]}"/> - <field name="datas_fname" invisible="1" attrs="{'invisible':[('type','=','url')]}" class="oe_inline oe_right"/> - <field name="url" widget="url" attrs="{'invisible':[('type','=','binary')]}"/> - </group> - <group string="Attached To"> - <field name="res_model"/> - <field name="res_id"/> - <field name="res_name"/> - <field name="company_id" groups="base.group_multi_company" widget="selection"/> - </group> - <group groups="base.group_no_one" string="History"> - <label for="create_uid" string="Creation"/> - <div name="creation_div"> - <field name="create_uid" readonly="1" class="oe_inline"/> on - <field name="create_date" readonly="1" class="oe_inline"/> - </div> - </group> - <group name="description_group" string="Description" colspan="4"> - <field name="description" nolabel="1"/> - </group> - </group> - </sheet> - </form> - </field> - </record> - <record id="view_attachment_tree" model="ir.ui.view"> - <field name="name">ir.attachment.view.tree</field> - <field name="model">ir.attachment</field> - <field name="arch" type="xml"> - <tree string="Attachments"> - <field name="name"/> - <field name="datas_fname"/> - <field name="type" invisible="1"/> - <field name="company_id" groups="base.group_multi_company"/> - <field name="create_uid"/> - <field name="create_date"/> - </tree> - </field> - </record> - <record id="view_attachment_search" model="ir.ui.view"> - <field name="name">ir.attachment.search</field> - <field name="model">ir.attachment</field> - <field name="arch" type="xml"> - <search string="Attachments"> - <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"/> - <filter string="Month" help="Creation Month" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}"/> - </group> - </search> - </field> - </record> - - <record id="action_attachment" model="ir.actions.act_window"> - <field name="name">Attachments</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.attachment</field> - <field name="view_type">form</field> - <field name="view_id" eval="False"/> - <field name="search_view_id" ref="view_attachment_search"/> - </record> - <menuitem action="action_attachment" id="menu_action_attachment" parent="base.next_id_4"/> - - <!-- model --> - <record id="view_model_form" model="ir.ui.view"> - <field name="name">ir.model.form</field> - <field name="model">ir.model</field> - <field name="arch" type="xml"> - <form string="Model Description" version="7.0"> - <sheet> - <group> - <group> - <field name="name"/> - <field name="model"/> - <field name="osv_memory"/> - </group> - <group> - <field name="state"/> - <field name="modules"/> - </group> - </group> - <notebook> - <page string="Fields"> - <field context="{'manual':True}" name="field_id"> - <tree string="Fields Description"> - <field name="name"/> - <field name="field_description"/> - <field name="ttype"/> - <field name="required"/> - <field name="readonly"/> - <field name="select_level"/> - <field name="state"/> - </tree> - <form string="Fields Description" version="7.0"> - <group col="4"> - <field name="name"/> - <field name="state"/> - <field name="field_description"/> - </group> - <group string="Properties"> - <group> - <field name="ttype"/> - <field name="relation" attrs="{'required': [('ttype','in',['many2one','one2many','many2many'])],'readonly': [('ttype','!=','one2many'), ('ttype','!=','many2one'), ('ttype','!=','many2many')]}"/> - <field name="relation_field" attrs="{'required': [('ttype','=','one2many')], 'readonly': [('ttype','!=','one2many')]}"/> - <field name="selection" attrs="{'required': [('ttype','in',['selection','reference'])], 'readonly': [('ttype','not in',['selection','reference'])]}"/> - <field name="size" attrs="{'required': [('ttype','in',['char','reference'])], 'readonly': [('ttype','not in',['char','reference'])]}"/> - <field name="domain" attrs="{'readonly': [('relation','=','')]}"/> - <field name="serialization_field_id" attrs="{'readonly': [('state','=','base')]}" domain="[('ttype','=','serialized'), ('model_id', '=', model_id)]"/> - </group> - <group> - <field name="required"/> - <field name="readonly"/> - <field name="select_level"/> - <field name="translate"/> - <field name="on_delete" attrs="{'readonly': [('ttype','!=','many2one')]}"/> - <field name="modules"/> - </group> - </group> - <separator string="Groups"/> - <field name="groups"/> - </form> - </field> - <button - icon="gtk-justify-fill" - name="%(act_menu_create)d" - string="Create a Menu" type="action" - target="new" /> - </page> - <page string="Access Rights"> - <field name="access_ids"> - <tree string="Access Rules" editable="bottom"> - <field name="group_id"/> - <field name="perm_read"/> - <field name="perm_write"/> - <field name="perm_create"/> - <field name="perm_unlink"/> - <field name="name"/> - </tree> - </field> - </page> - <page string="Notes"> - <field name="info"/> - </page> - <page string="Views"> - <field name="view_ids"/> - </page> - </notebook> - </sheet> - </form> - </field> - </record> - - - <record id="view_model_tree" model="ir.ui.view"> - <field name="name">ir.model.tree</field> - <field name="model">ir.model</field> - <field name="arch" type="xml"> - <tree string="Model Description"> - <field name="model"/> - <field name="name"/> - <field name="state"/> - <field name="osv_memory"/> - </tree> - </field> - </record> - - <record id="view_model_search" model="ir.ui.view"> - <field name="name">ir.model.search</field> - <field name="model">ir.model</field> - <field name="arch" type="xml"> - <search string="Model Description"> - <field name="name" filter_domain="['|', ('name','ilike',self), ('model','ilike',self)]" string="Model"/> - <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')]"/> - <filter icon="terp-translate" - string="Base" - domain="[('state', '=', 'base')]"/> - </search> - </field> - </record> - - <!-- fields_description --> - <record id="view_model_fields_form" model="ir.ui.view"> - <field name="name">ir.model.fields.form</field> - <field name="model">ir.model.fields</field> - <field name="arch" type="xml"> - <form string="Fields" version="7.0"> - <sheet> - <group> - <group> - <field name="name" string="Field Name"/> - <field name="field_description"/> - </group> - <group> - <field name="state"/> - <field name="model_id" attrs="{'readonly': [('state','!=', 'manual')]}"/> - <field name="modules"/> - </group> - </group> - <group> - <group> - <field name="ttype"/> - <field name="relation" attrs="{'required': [('ttype','in', ['many2one','one2many','many2many'])], - 'readonly': [('ttype','not in', ['many2one','one2many','many2many'])]}"/> - <field name="relation_field" attrs="{'required': [('ttype','=','one2many')], 'readonly': [('ttype','!=','one2many')]}"/> - <field name="selection" attrs="{'required': [('ttype','in',['selection','reference'])], 'readonly': [('ttype','not in',['selection','reference'])]}"/> - <field name="size" attrs="{'required': [('ttype','in',['char','reference'])], 'readonly': [('ttype','not in',['char','reference'])]}"/> - <field name="domain" attrs="{'readonly': [('relation','=','')]}"/> - <field name="serialization_field_id" attrs="{'readonly': [('state','=','base')]}" domain="[('ttype','=','serialized'), ('model_id', '=', model_id)]"/> - <field name="on_delete" attrs="{'readonly': [('ttype','!=','many2one')]}"/> - </group> - <group> - <field name="required"/> - <field name="readonly"/> - <field name="select_level"/> - <field name="translate"/> - </group> - </group> - <field name="groups" invisible="1"/> - </sheet> - </form> - </field> - </record> - - <record id="view_model_fields_tree" model="ir.ui.view"> - <field name="name">ir.model.fields.tree</field> - <field name="model">ir.model.fields</field> - <field name="arch" type="xml"> - <tree string="Fields"> - <field name="name"/> - <field name="field_description"/> - <field name="model_id"/> - <field name="ttype"/> - <field name="state"/> - </tree> - </field> - </record> - - <record id="view_model_fields_search" model="ir.ui.view"> - <field name="name">ir.model.fields.search</field> - <field name="model">ir.model.fields</field> - <field name="arch" type="xml"> - <search string="Fields"> - <field name="name" filter_domain="['|', ('name','ilike',self), ('field_description','ilike',self)]" string="Field"/> - <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)]"/> - <field name="model_id"/> - <field name="ttype"/> - <field name="required"/> - <field name="readonly"/> - <group expand="0" string="Group By..."> - <filter string="Object" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'model_id'}"/> - </group> - </search> - </field> - </record> - - <record model="ir.ui.view" id="view_model_data_form"> - <field name="name">ir.model.data.form</field> - <field name="model">ir.model.data</field> - <field name="arch" type="xml"> - <form string="External Identifiers" version="7.0"> - <group> - <group> - <field name="complete_name"/> - <field name="module"/> - <field name="name"/> - </group> - <group> - <field name="display_name"/> - <field name="model"/> - <field name="res_id"/> - </group> - <group> - <field name="noupdate"/> - <field name="date_update" /> - <field name="date_init" /> - </group> - </group> - </form> - </field> - </record> - - <record id="view_model_data_list" model="ir.ui.view"> - <field name="name">ir.model.data.list</field> - <field name="model">ir.model.data</field> - <field name="arch" type="xml"> - <tree string="External Identifiers"> - <field name="complete_name"/> - <field name="display_name"/> - <field name="res_id"/> - <field name="model" groups="base.group_no_one"/> - </tree> - </field> - </record> - - <record id="view_model_data_search" model="ir.ui.view"> - <field name="name">ir.model.data.search</field> - <field name="model">ir.model.data</field> - <field name="arch" type="xml"> - <search string="External Identifiers"> - <field name="name" - filter_domain="['|', '|', ('name','ilike',self), ('model','ilike',self), ('module','ilike',self)]" - string="External Identifier"/> - <filter icon="terp-camera_test" - string="Updatable" - domain="[('noupdate', '=', False)]"/> - <field name="res_id"/> - <field name="noupdate"/> - <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'}"/> - </group> - </search> - </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="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="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="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="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> - <field name="res_model">ir.model</field> - <field name="view_type">form</field> - <field name="context">{'manual':True}</field> - <field name="view_id" ref="view_model_tree"/> - </record> - <menuitem id="next_id_9" name="Database Structure" parent="base.menu_custom" groups="base.group_no_one"/> - <menuitem action="action_model_model" id="ir_model_model_menu" parent="next_id_9"/> - - <record id="action_model_fields" model="ir.actions.act_window"> - <field name="name">Fields</field> - <field name="res_model">ir.model.fields</field> - <field name="view_type">form</field> - <field name="context">{'manual':True}</field> - <field name="view_id" ref="view_model_fields_tree"/> - </record> - <menuitem action="action_model_fields" id="ir_model_model_fields" parent="base.next_id_9"/> - - <record id="action_model_data" model="ir.actions.act_window"> - <field name="name">External Identifiers</field> - <field name="res_model">ir.model.data</field> - <field name="view_type">form</field> - <field name="view_id" ref="view_model_data_list"/> - </record> - <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"/> - - <!-- - ============================================================= - Menu Edition - ============================================================= - --> - - <record id="shortcut_form" model="ir.ui.view"> - <field name="name">ir.ui.view_sc</field> - <field name="model">ir.ui.view_sc</field> - <field name="arch" type="xml"> - <form string="Shortcut" version="7.0"> - <group col="4"> - <field name="name"/> - <field name="sequence"/> - </group> - </form> - </field> - </record> - <record id="shortcut_tree" model="ir.ui.view"> - <field name="name">ir.ui.view_sc</field> - <field name="model">ir.ui.view_sc</field> - <field name="arch" type="xml"> - <tree string="Shortcut"> - <field name="name"/> - <field name="sequence"/> - </tree> - </field> - </record> - - <record id="edit_menu" model="ir.ui.view"> - <field name="name">ir.ui.menu.tree</field> - <field name="model">ir.ui.menu</field> - <field eval="8" name="priority"/> - <field name="arch" type="xml"> - <tree string="Menu"> - <field name="sequence"/> - <field icon="icon" name="complete_name" string="Menu"/> - </tree> - </field> - </record> - - <record id="edit_menu_access" model="ir.ui.view"> - <field name="name">ir.ui.menu.form2</field> - <field name="model">ir.ui.menu</field> - <field name="arch" type="xml"> - <form string="Menu" version="7.0"> - <sheet> - <group> - <group> - <field name="name"/> - <field name="parent_id"/> - <field name="sequence"/> - </group> - <group> - <field name="complete_name"/> - <field name="action"/> - <field name="icon"/> - </group> - </group> - <notebook> - <page string="Groups"> - <field name="groups_id"/> - </page> - <page string="Submenus"> - <!-- Note: make sure you have 'ir.ui.menu.full_list' - in the context to see all submenus! --> - <field name="child_id" - context="{'default_parent_id': active_id}"> - <tree string="Menu"> - <field name="sequence"/> - <field icon="icon" name="name" string="Menu"/> - </tree> - </field> - </page> - </notebook> - </sheet> - </form> - </field> - </record> - - <record id="edit_menu_access_search" model="ir.ui.view"> - <field name="name">ir.ui.menu.search</field> - <field name="model">ir.ui.menu</field> - <field name="arch" type="xml"> - <search string="Menu"> - <field name="name" string="Menu"/> - <field name="parent_id"/> - </search> - </field> - </record> - - <record id="grant_menu_access" model="ir.actions.act_window"> - <field name="name">Menu Items</field> - <field name="res_model">ir.ui.menu</field> - <field name="view_type">form</field> - <field name="view_id" ref="edit_menu"/> - <field name="context">{'ir.ui.menu.full_list':True}</field> - <field name="search_view_id" ref="edit_menu_access_search"/> - <field name="help">Manage and customize the items available and displayed in your OpenERP system menu. You can delete an item by clicking on the box at the beginning of each line and then delete it through the button that appeared. Items can be assigned to specific groups in order to make them accessible to some users within the system.</field> - </record> - <menuitem action="grant_menu_access" id="menu_grant_menu_access" parent="base.next_id_2" sequence="1"/> - - <!-- ir.cron --> - - <record id="ir_cron_view_tree" model="ir.ui.view"> - <field name="name">ir.cron.tree</field> - <field name="model">ir.cron</field> - <field name="arch" type="xml"> - <tree string="Scheduled Actions"> - <field name="priority" string="Sequence"/> - <field name="name"/> - <field name="nextcall"/> - <field name="interval_number"/> - <field name="interval_type"/> - <field name="numbercall"/> - <field name="user_id" invisible="1"/> - </tree> - </field> - </record> - - <record id="ir_cron_view" model="ir.ui.view"> - <field name="name">ir.cron.form</field> - <field name="model">ir.cron</field> - <field name="arch" type="xml"> - <form string="Scheduled Actions" version="7.0"> - <sheet> - <group col="4"> - <field name="name"/> - <field name="active"/> - <field name="user_id" /> - <field name="priority" /> - </group> - <notebook> - <page string="Information"> - <group col="4"> - <field name="interval_number"/> - <field name="interval_type"/> - <newline/> - <field name="nextcall"/> - <field name="numbercall"/> - <field name="doall"/> - </group> - </page> - <page string="Technical Data" groups="base.group_no_one"> - <group string="Action to Trigger"> - <field name="model"/> - <field name="function"/> - </group> - <label for="args"/> - <field name="args"/> - </page> - </notebook> - </sheet> - </form> - </field> - </record> - - <record id="ir_cron_view_search" model="ir.ui.view"> - <field name="name">ir.cron.search</field> - <field name="model">ir.cron</field> - <field name="arch" type="xml"> - <search string="Scheduled Actions"> - <field name="name" string="Scheduled Action"/> - <field name="user_id"/> - <field name="nextcall"/> - <field name="active"/> - <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" - domain="[]" context="{'group_by':'nextcall'}" /> - </group> - </search> - </field> - </record> - - <record model="ir.ui.view" id="ir_cron_view_calendar"> - <field name="name">ir.cron.calendar</field> - <field name="model">ir.cron</field> - <field name="priority" eval="2"/> - <field name="arch" type="xml"> - <calendar string="Scheduled Actions" date_start="nextcall" color="user_id"> - <field name="name"/> - <field name="user_id"/> - </calendar> - </field> - </record> - - <record id="ir_cron_act" model="ir.actions.act_window"> - <field name="name">Scheduled Actions</field> - <field name="res_model">ir.cron</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form,calendar</field> - <field name="context">{'active_test': False}</field> - <field name="view_id" ref="ir_cron_view_tree"/> - </record> - - <menuitem id="menu_ir_cron" name="Scheduler" parent="menu_custom" groups="base.group_no_one" sequence="23"/> - <menuitem id="menu_ir_cron_act" action="ir_cron_act" parent="menu_ir_cron"/> - - <!-- ir.model.access --> - - <record id="ir_access_view_tree" model="ir.ui.view"> - <field name="name">ir.model.access.tree</field> - <field name="model">ir.model.access</field> - <field name="arch" type="xml"> - <tree string="Access Controls" editable="bottom"> - <field name="name"/> - <field name="model_id"/> - <field name="group_id"/> - <field name="perm_read"/> - <field name="perm_write"/> - <field name="perm_create"/> - <field name="perm_unlink"/> - </tree> - </field> - </record> - <record id="ir_access_view_form" model="ir.ui.view"> - <field name="name">ir.model.access.form</field> - <field name="model">ir.model.access</field> - <field name="arch" type="xml"> - <form string="Access Controls" version="7.0"> - <sheet> - <group col="4"> - <field name="name"/> - <field name="model_id"/> - <field name="group_id"/> - <field name="active"/> - </group> - <group string="Access" col="4"> - <field name="perm_read"/> - <field name="perm_write"/> - <field name="perm_create"/> - <field name="perm_unlink"/> - </group> - </sheet> - </form> - </field> - </record> - <record id="ir_access_view_search" model="ir.ui.view"> - <field name="name">ir.model.access.search</field> - <field name="model">ir.model.access</field> - <field name="arch" type="xml"> - <search string="Access Controls"> - <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'}"/> - </group> - </search> - </field> - </record> - - <record id="ir_access_act" model="ir.actions.act_window"> - <field name="name">Access Controls List</field> - <field name="res_model">ir.model.access</field> - <field name="view_type">form</field> - <field name="view_id" ref="ir_access_view_tree"/> - <field name="search_view_id" ref="ir_access_view_search"/> - </record> - <menuitem action="ir_access_act" id="menu_ir_access_act" parent="base.menu_security"/> - - <!-- Rules --> - - <record id="view_rule_form" model="ir.ui.view"> - <field name="name">Record rules</field> - <field name="model">ir.rule</field> - <field name="arch" type="xml"> - <form string="Record rules" version="7.0"> - <sheet> - <group> - <group string="General"> - <field name="name"/> - <field name="model_id"/> - <field name="active"/> - </group> - <group col="4" string="Access Rights"> - <field name="perm_read"/> - <field name="perm_write"/> - <field name="perm_create"/> - <field name="perm_unlink"/> - </group> - </group> - <separator string="Rule Definition (Domain Filter)"/> - <field name="domain_force" colspan="2" nolabel="1"/> - <group string="Groups (no group = global)"> - <field name="global"/> - <field name="groups" nolabel="1" colspan="4"/> - </group> - <group string="Interaction between rules"> - <label colspan="2" - string="Global rules (non group-specific) are restrictions, and cannot be bypassed. Group-local rules grant additional permissions, but are constrained within the bounds of global ones. The first group rules restrict further than global rules, but any additional group rule will add more permissions"/> - <label colspan="2" - string="Detailed algorithm:"/> - <label colspan="2" - string="1. Global rules are combined together with a logical AND operator, and with the result of the following steps"/> - <label colspan="2" - string="2. Group-specific rules are combined together with a logical OR operator"/> - <label colspan="2" - string="3. If user belongs to several groups, the results from step 2 are combined with logical OR operator"/> - <label colspan="2" - string="Example: GLOBAL_RULE_1 AND GLOBAL_RULE_2 AND ( (GROUP_A_RULE_1 OR GROUP_A_RULE_2) OR (GROUP_B_RULE_1 OR GROUP_B_RULE_2) )"/> - </group> - </sheet> - </form> - </field> - </record> - <record id="view_rule_tree" model="ir.ui.view"> - <field name="name">Record rules</field> - <field name="model">ir.rule</field> - <field name="arch" type="xml"> - <tree string="Record rules"> - <field name="model_id"/> - <field name="name"/> - <field name="global"/> - <field name="domain_force"/> - <field name="perm_read"/> - <field name="perm_write"/> - <field name="perm_create"/> - <field name="perm_unlink"/> - </tree> - </field> - </record> - <record id="view_rule_search" model="ir.ui.view"> - <field name="name">Record rules</field> - <field name="model">ir.rule</field> - <field name="arch" type="xml"> - <search string="Record Rules"> - <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> - - <record id="action_rule" model="ir.actions.act_window"> - <field name="name">Record Rules</field> - <field name="res_model">ir.rule</field> - <field name="view_type">form</field> - <field name="view_id" ref="view_rule_tree"/> - <field name="search_view_id" ref="view_rule_search"/> - </record> - <menuitem action="action_rule" id="menu_action_rule" parent="base.menu_security" sequence="3"/> - - <record id="property_rule" model="ir.rule"> - <field name="name">Property multi-company</field> - <field model="ir.model" name="model_id" ref="model_ir_property"/> - <field eval="True" name="global"/> - <field name="domain_force">['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field> - </record> - - <!--server action view--> - - <record id="view_server_action_form" model="ir.ui.view"> - <field name="name">Server Action</field> - <field name="model">ir.actions.server</field> - <field name="arch" type="xml"> - <form string="Server Action" version="7.0"> - <group> - <group> - <field name="name"/> - <field name="model_id"/> - <field name="state"/> - </group> - <group> - <field name="condition"/> - <field name="sequence"/> - </group> - </group> - <notebook colspan="4"> - <page string="Python Code" attrs="{'invisible':[('state','!=','code')]}"> - <field name="code"/> - </page> - <page string="Trigger" attrs="{'invisible':[('state','!=','trigger')]}"> - <group string="Trigger Configuration" col="4"> - <field name="wkf_model_id" attrs="{'required':[('state','=','trigger')]}"/> - <field name="trigger_obj_id" context="{'key':''}" - domain="[('model_id','=',model_id),('ttype','in',['many2one','int'])]" - attrs="{'required':[('state','=','trigger')]}"/> - <field name="trigger_name" attrs="{'required':[('state','=','trigger')]}"/> - </group> - </page> - <page string="Action to Launch" attrs="{'invisible':[('state','!=','client_action')]}"> - <group> - <field name="action_id" attrs="{'required':[('state','=','client_action')]}"/> - </group> - </page> - <page string="Email Configuration" attrs="{'invisible':[('state','!=','email')]}"> - <group> - <field name="email" domain="[('model_id','=',model_id)]" attrs="{'required':[('state','=','email')]}"/> - <field name="subject" attrs="{'required':[('state','=','email')]}"/> - <field name="message" attrs="{'required':[('state','=','email')]}"/> - <newline/> - <label colspan="2" string="Access all the fields related to the current object using expressions, i.e. object.partner_id.name " align="0.0"/> - </group> - </page> - <page string="SMS Configuration" attrs="{'invisible':[('state','!=','sms')]}"> - <group> - <field name="mobile" domain="[('model_id','=',model_id)]" attrs="{'required':[('state','=','sms')]}"/> - <field name="sms" attrs="{'required':[('state','=','sms')]}"/> - </group> - <label string="Access all the fields related to the current object using expressions, i.e. object.partner_id.name " align="0.0"/> - </page> - <page string="Create / Write / Copy" attrs="{'invisible':[('state','!=','object_create'), ('state','!=','object_write'), ('state','!=','object_copy')]}"> - <group col="4" string="Fields Mapping"> - <field name="srcmodel_id" attrs="{'required':[('state','!=','dummy'), ('state','!=','sms'), ('state','!=','code'), ('state','!=','loop'), ('state','!=','trigger'), ('state','!=','object_copy'), ('state','!=','client_action'), ('state','!=','email'), ('state','!=','sms'), ('state','!=','other')]}"/> - <field name="copy_object" on_change="change_object(copy_object, state)" attrs="{'required':[('state','!=','dummy'), ('state','!=','sms'), ('state','!=','code'), ('state','!=','loop'), ('state','!=','trigger'), ('state','!=','object_write'), ('state','!=','object_create'), ('state','!=','client_action'), ('state','!=','email'), ('state','!=','sms'), ('state','!=','other')]}"/> - <field name="fields_lines" nolabel="1" colspan="2"> - <tree string="Field Mappings" editable="top"> - <field name="col1" domain="[('model_id','=',parent.srcmodel_id or parent.model_id)]"/> - <field name="type"/> - <field name="value" colspan="4"/> - </tree> - <form string="Field Mapping" version="7.0"> - <group col="4"> - <field name="col1" domain="[('model_id','=',parent.srcmodel_id or parent.model_id)]"/> - <field name="type"/> - <field name="value" colspan="4"/> - </group> - </form> - </field> - <field name="record_id" attrs="{'readonly':[('state','!=','object_create')]}" domain="[('model_id','in',[model_id])]"/> - <field name="write_id" attrs="{'readonly':[('state','!=','object_write')]}"/> - </group> - <label string="If you use a formula type, use a python expression using the variable 'object'." align="0.0"/> - </page> - <page string="Iteration Actions" attrs="{'invisible':[('state','!=','loop')]}"> - <group col="4"> - <field name="expression" attrs="{'required':[('state','=','loop')]}"/> - <field name="loop_action" domain="[('state','!=','loop')]" attrs="{'required':[('state','=','loop')]}"/> - </group> - </page> - <page string="Multi Actions" attrs="{'invisible':[('state','!=','other')]}"> - <field name="child_ids"/> - <label string="Only one client action will be executed, last client action will be considered in case of multiple client actions." align="0.0"/> - </page> - </notebook> - <field name="type" readonly="1"/> - </form> - </field> - </record> - - <record id="view_server_action_tree" model="ir.ui.view"> - <field name="name">Server Actions</field> - <field name="model">ir.actions.server</field> - <field name="arch" type="xml"> - <tree string="Server Actions"> - <field name="name"/> - <field name="state"/> - <field name="model_id"/> - <field name="sequence"/> - </tree> - </field> - </record> - - <record id="view_server_action_search" model="ir.ui.view"> - <field name="name">ir.actions.server.search</field> - <field name="model">ir.actions.server</field> - <field name="arch" type="xml"> - <search string="Server Actions"> - <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> - </search> - </field> - </record> - - <record id="action_server_action" model="ir.actions.act_window"> - <field name="name">Server Actions</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">ir.actions.server</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="view_id" ref="view_server_action_tree"/> - <field name="search_view_id" ref="view_server_action_search"/> - <field name="context">{'key':'server_action'}</field> - </record> - <menuitem action="action_server_action" id="menu_server_action" parent="base.next_id_6"/> - - <!-- ir.actions.todo --> - - <record id="ir_actions_todo_tree" model="ir.ui.view"> - <field name="model">ir.actions.todo</field> - <field name="name">Config Wizard Steps</field> - <field name="arch" type="xml"> - <tree string="Config Wizard Steps"> - <field name="sequence"/> - <field name="action_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"/> - <button name="action_open" states="done" - string="Todo" type="object" help="Set as Todo" - icon="gtk-convert"/> - </tree> - </field> - </record> - - <record id="config_wizard_step_view_form" model="ir.ui.view"> - <field name="model">ir.actions.todo</field> - <field name="name">Config Wizard Steps</field> - <field name="arch" type="xml"> - <form string="Config Wizard Steps" version="7.0"> - <header> - <button name="action_launch" - states="open" string="Launch" - type="object" icon="gtk-execute" class="oe_highlight" - help="Launch Configuration Wizard"/> - <button name="action_open" states="done" - string="Set as Todo" type="object" - icon="gtk-convert" class="oe_highlight"/> - <field name="state" widget="statusbar" statusbar_visible="open,done" nolabel="1" readonly="1" statusbar_colors='{"open":"red","done":"blue"}'/> - </header> - <sheet> - <group col="4"> - <field name="action_id"/> - <field name="type"/> - <field name="sequence"/> - </group> - <group string="Groups"> - <field name="groups_id" nolabel="1" colspan="4"/> - </group> - </sheet> - </form> - </field> - </record> - - <record id="config_wizard_step_view_search" model="ir.ui.view"> - <field name="model">ir.actions.todo</field> - <field name="name">ir.actions.todo.select</field> - <field name="arch" type="xml"> - <search string="Search Actions"> - <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> - - <record id="act_ir_actions_todo_form" model="ir.actions.act_window"> - <field name="name">Configuration Wizards</field> - <field name="res_model">ir.actions.todo</field> - <field name="view_id" ref="ir_actions_todo_tree"/> - <field name="view_type">form</field> - <field name="help">The configuration wizards are used to help you configure a new instance of OpenERP. They are launched during the installation of new modules, but you can choose to restart some wizards manually from this menu.</field> - </record> - <menuitem id="menu_ir_actions_todo" name="Configuration Wizards" parent="menu_custom" sequence="20" groups="base.group_no_one"/> - <menuitem id="menu_ir_actions_todo_form" action="act_ir_actions_todo_form" parent="menu_ir_actions_todo"/> - - <record model="ir.cron" id="cronjob_osv_memory_autovacuum"> - <field name='name'>AutoVacuum osv_memory objects</field> - <field name='interval_number'>30</field> - <field name='interval_type'>minutes</field> - <field name="numbercall">-1</field> - <field name="active">True</field> - <field name="doall" eval="False" /> - <field name="model">osv_memory.autovacuum</field> - <field name="function">power_on</field> - <field name="args">()</field> - </record> - - <!-- ir.mail.server --> - <record model="ir.ui.view" id="ir_mail_server_form"> - <field name="name">ir.mail.server.form</field> - <field name="model">ir.mail_server</field> - <field name="arch" type="xml"> - <form string="Outgoing Mail Servers" version="7.0"> - <sheet> - <group col="4"> - <field name="name"/> - <field name="sequence"/> - </group> - <group col="4" string="Connection Information"> - <field name="smtp_host"/> - <field name="smtp_port"/> - <field name="smtp_debug" groups="base.group_no_one"/> - </group> - <group string="Security and Authentication" colspan="4"> - <field name="smtp_encryption" on_change="on_change_encryption(smtp_encryption)"/> - <field name="smtp_user"/> - <field name="smtp_pass" password="True"/> - <button name="test_smtp_connection" type="object" string="Test Connection" icon="gtk-network"/> - </group> - </sheet> - </form> - </field> - </record> - - <record model="ir.ui.view" id="ir_mail_server_list"> - <field name="name">ir.mail.server.list</field> - <field name="model">ir.mail_server</field> - <field name="arch" type="xml"> - <tree string="Outgoing Mail Servers"> - <field name="sequence"/> - <field name="name"/> - <field name="smtp_host"/> - <field name="smtp_user"/> - <field name="smtp_encryption"/> - </tree> - </field> - </record> - - <record id="view_ir_mail_server_search" model="ir.ui.view"> - <field name="name">ir.mail.server.search</field> - <field name="model">ir.mail_server</field> - <field name="arch" type="xml"> - <search string="Outgoing Mail Servers"> - <field name="name" - filter_domain="['|', '|', ('name','ilike',self), ('smtp_host','ilike',self), ('smtp_user','ilike',self)]" - string="Outgoing Mail Server"/> - <field name="smtp_encryption"/> - </search> - </field> - </record> - - <record model="ir.actions.act_window" id="action_ir_mail_server_list"> - <field name="name">Outgoing Mail Servers</field> - <field name="res_model">ir.mail_server</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="view_id" ref="ir_mail_server_list" /> - <field name="search_view_id" ref="view_ir_mail_server_search"/> - </record> - <menuitem id="menu_mail_servers" parent="menu_email" action="action_ir_mail_server_list" sequence="15" groups="base.group_no_one"/> - - </data> -</openerp> diff --git a/openerp/addons/base/ir/ir_actions.xml b/openerp/addons/base/ir/ir_actions.xml new file mode 100644 index 00000000000..2736f3ea252 --- /dev/null +++ b/openerp/addons/base/ir/ir_actions.xml @@ -0,0 +1,507 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- Actions --> + <record id="action_view" model="ir.ui.view"> + <field name="name">ir.actions.actions</field> + <field name="model">ir.actions.actions</field> + <field name="arch" type="xml"> + <form string="Action" version="7.0"> + <group> + <field name="name"/> + <field name="type"/> + <field name="usage"/> + </group> + </form> + </field> + </record> + <record id="action_view_tree" model="ir.ui.view"> + <field name="name">ir.actions.actions.tree</field> + <field name="model">ir.actions.actions</field> + <field name="arch" type="xml"> + <tree string="Action"> + <field name="name"/> + <field name="type"/> + </tree> + </field> + </record> + <record id="action_view_search" model="ir.ui.view"> + <field name="name">ir.actions.actions.search</field> + <field name="model">ir.actions.actions</field> + <field name="arch" type="xml"> + <search string="Action"> + <field name="name" filter_domain="['|', ('name','ilike',self), ('type','ilike',self)]" string="Action"/> + </search> + </field> + </record> + + <record id="ir_sequence_actions" model="ir.actions.act_window"> + <field name="name">Actions</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.actions.actions</field> + <field name="view_type">form</field> + <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.menu_custom" sequence="2"/> + <menuitem action="ir_sequence_actions" id="menu_ir_sequence_actions" parent="next_id_6"/> + + + + <record id="act_report_xml_view" model="ir.ui.view"> + <field name="name">ir.actions.report.xml</field> + <field name="model">ir.actions.report.xml</field> + <field name="arch" type="xml"> + <form string="Report" version="7.0"> + <group> + <group> + <field name="name"/> + <field name="report_name"/> + <field name="model"/> + </group> + <group> + <field name="usage"/> + <field name="report_type"/> + <field name="report_file"/> + </group> + </group> + <notebook> + <page string="Other Configuration"> + <group> + <group string="RML Report"> + <field name="header"/> + </group> + <group string="XML Report"> + <field name="report_xsl"/> + <field name="report_xml"/> + </group> + <group string="Attachments"> + <field name="attachment"/> + <field name="attachment_use"/> + </group> + <group string="Miscellaneous"> + <field name="multi"/> + <field name="auto"/> + </group> + </group> + </page> + <page string="Security"> + <field name="groups_id"/> + </page> + </notebook> + </form> + </field> + </record> + <record id="act_report_xml_view_tree" model="ir.ui.view"> + <field name="name">ir.actions.report.xml.tree</field> + <field name="model">ir.actions.report.xml</field> + <field name="arch" type="xml"> + <tree string="Report xml"> + <field name="name"/> + <field name="model"/> + <field name="type"/> + <field name="report_name"/> + <field name="report_type"/> + <field name="attachment"/> + </tree> + </field> + </record> + <record id="act_report_xml_search_view" model="ir.ui.view"> + <field name="name">ir.actions.report.xml.search</field> + <field name="model">ir.actions.report.xml</field> + <field name="arch" type="xml"> + <search string="Report Xml"> + <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> + </search> + </field> + </record> + + <record id="ir_action_report_xml" model="ir.actions.act_window"> + <field name="name">Reports</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.actions.report.xml</field> + <field name="view_type">form</field> + <field name="view_id" ref="act_report_xml_view_tree"/> + <field name="search_view_id" ref="act_report_xml_search_view"/> + </record> + <menuitem action="ir_action_report_xml" id="menu_ir_action_report_xml" parent="base.next_id_6"/> + + <record id="view_window_action_tree" model="ir.ui.view"> + <field name="name">ir.actions.windows.tree</field> + <field name="model">ir.actions.act_window</field> + <field name="arch" type="xml"> + <tree string="Open Window"> + <field name="name"/> + <field name="res_model"/> + <field name="view_type"/> + <field name="view_id"/> + <field name="domain"/> + </tree> + </field> + </record> + + <record id="view_window_action_form" model="ir.ui.view"> + <field name="name">ir.actions.windows.form</field> + <field name="model">ir.actions.act_window</field> + <field name="arch" type="xml"> + <form string="Open a Window" version="7.0"> + <group> + <group> + <field name="name"/> + <field name="res_model" string="Object"/> + <field name="src_model" string="Source Object"/> + </group> + <group> + <field name="usage"/> + <field name="type" readonly="1"/> + <field name="target"/> + </group> + </group> + <notebook> + <page string="General Settings"> + <group> + <group string="Views"> + <field name="view_type"/> + <field name="view_mode"/> + <field name="view_id"/> + <field name="search_view_id"/> + </group> + <group string="Filters"> + <field name="domain"/> + <field name="context"/> + <field name="limit"/> + <field name="auto_refresh"/> + <field name="auto_search"/> + <field name="filter"/> + </group> + </group> + <group string="Help"> + <field colspan="2" name="help" nolabel="1"/> + </group> + <group string="Views"> + <field colspan="2" name="view_ids" nolabel="1"> + <form string="Views" version="7.0"> + <group> + <field colspan="4" name="sequence"/> + <field name="view_mode"/> + <field domain="[('type', '=', view_mode)]" name="view_id"/> + </group> + </form> + <tree string="Views"> + <field name="sequence"/> + <field name="view_mode"/> + <field name="view_id"/> + </tree> + </field> + </group> + </page> + <page string="Security"> + <field name="groups_id"/> + </page> + </notebook> + </form> + </field> + </record> + <record id="view_window_action_search" model="ir.ui.view"> + <field name="name">ir.actions.windows.search</field> + <field name="model">ir.actions.act_window</field> + <field name="arch" type="xml"> + <search string="Open a Window"> + <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> + </search> + </field> + </record> + + <record id="ir_action_window" model="ir.actions.act_window"> + <field name="name">Window Actions</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.actions.act_window</field> + <field name="view_type">form</field> + <field name="search_view_id" ref="view_window_action_search"/> + </record> + <record id="ir_action_window_view1" model="ir.actions.act_window.view"> + <field eval="1" name="sequence"/> + <field name="view_mode">tree</field> + <field name="view_id" ref="view_window_action_tree"/> + <field name="act_window_id" ref="ir_action_window"/> + </record> + <record id="ir_action_window_view2" model="ir.actions.act_window.view"> + <field eval="2" name="sequence"/> + <field name="view_mode">form</field> + <field name="view_id" ref="view_window_action_form"/> + <field name="act_window_id" ref="ir_action_window"/> + </record> + <menuitem action="ir_action_window" id="menu_ir_action_window" parent="base.next_id_6"/> + + <record id="act_wizard_view_tree" model="ir.ui.view"> + <field name="name">ir.actions.wizard.tree</field> + <field name="model">ir.actions.wizard</field> + <field name="arch" type="xml"> + <tree string="Wizard"> + <field name="name"/> + <field name="wiz_name"/> + <field name="multi"/> + </tree> + </field> + </record> + + <record id="act_wizard_view" model="ir.ui.view"> + <field name="name">ir.actions.wizard</field> + <field name="model">ir.actions.wizard</field> + <field name="arch" type="xml"> + <form string="Wizards" version="7.0"> + <group col="4"> + <field name="name"/> + <field name="type"/> + <field name="wiz_name"/> + <field name="multi"/> + </group> + <label for="groups_id"/> + <field name="groups_id"/> + </form> + </field> + </record> + + <record id="act_wizard_search_view" model="ir.ui.view"> + <field name="name">ir.actions.wizard.search</field> + <field name="model">ir.actions.wizard</field> + <field name="arch" type="xml"> + <search string="Wizards"> + <field name="name" + filter_domain="['|', '|', ('name','ilike',self), ('type','ilike',self), ('wiz_name','ilike',self)]" + string="Wizard"/> + </search> + </field> + </record> + + <record id="ir_action_wizard" model="ir.actions.act_window"> + <field name="name">Wizards</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.actions.wizard</field> + <field name="view_type">form</field> + <field name="search_view_id" ref="act_wizard_search_view"/> + </record> + + <menuitem action="ir_action_wizard" id="menu_ir_action_wizard" parent="base.next_id_6"/> + + + <record id="property_rule" model="ir.rule"> + <field name="name">Property multi-company</field> + <field model="ir.model" name="model_id" ref="model_ir_property"/> + <field eval="True" name="global"/> + <field name="domain_force">['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field> + </record> + + <!--server action view--> + + <record id="view_server_action_form" model="ir.ui.view"> + <field name="name">Server Action</field> + <field name="model">ir.actions.server</field> + <field name="arch" type="xml"> + <form string="Server Action" version="7.0"> + <group> + <group> + <field name="name"/> + <field name="model_id"/> + <field name="state"/> + </group> + <group> + <field name="condition"/> + <field name="sequence"/> + </group> + </group> + <notebook colspan="4"> + <page string="Python Code" attrs="{'invisible':[('state','!=','code')]}"> + <field name="code"/> + </page> + <page string="Trigger" attrs="{'invisible':[('state','!=','trigger')]}"> + <group string="Trigger Configuration" col="4"> + <field name="wkf_model_id" attrs="{'required':[('state','=','trigger')]}"/> + <field name="trigger_obj_id" context="{'key':''}" + domain="[('model_id','=',model_id),('ttype','in',['many2one','int'])]" + attrs="{'required':[('state','=','trigger')]}"/> + <field name="trigger_name" attrs="{'required':[('state','=','trigger')]}"/> + </group> + </page> + <page string="Action to Launch" attrs="{'invisible':[('state','!=','client_action')]}"> + <group> + <field name="action_id" attrs="{'required':[('state','=','client_action')]}"/> + </group> + </page> + <page string="Email Configuration" attrs="{'invisible':[('state','!=','email')]}"> + <group> + <field name="email" domain="[('model_id','=',model_id)]" attrs="{'required':[('state','=','email')]}"/> + <field name="subject" attrs="{'required':[('state','=','email')]}"/> + <field name="message" attrs="{'required':[('state','=','email')]}"/> + <newline/> + <label colspan="2" string="Access all the fields related to the current object using expressions, i.e. object.partner_id.name " align="0.0"/> + </group> + </page> + <page string="SMS Configuration" attrs="{'invisible':[('state','!=','sms')]}"> + <group> + <field name="mobile" domain="[('model_id','=',model_id)]" attrs="{'required':[('state','=','sms')]}"/> + <field name="sms" attrs="{'required':[('state','=','sms')]}"/> + </group> + <label string="Access all the fields related to the current object using expressions, i.e. object.partner_id.name " align="0.0"/> + </page> + <page string="Create / Write / Copy" attrs="{'invisible':[('state','!=','object_create'), ('state','!=','object_write'), ('state','!=','object_copy')]}"> + <group col="4" string="Fields Mapping"> + <field name="srcmodel_id" attrs="{'required':[('state','!=','dummy'), ('state','!=','sms'), ('state','!=','code'), ('state','!=','loop'), ('state','!=','trigger'), ('state','!=','object_copy'), ('state','!=','client_action'), ('state','!=','email'), ('state','!=','sms'), ('state','!=','other')]}"/> + <field name="copy_object" on_change="change_object(copy_object, state)" attrs="{'required':[('state','!=','dummy'), ('state','!=','sms'), ('state','!=','code'), ('state','!=','loop'), ('state','!=','trigger'), ('state','!=','object_write'), ('state','!=','object_create'), ('state','!=','client_action'), ('state','!=','email'), ('state','!=','sms'), ('state','!=','other')]}"/> + <field name="fields_lines" nolabel="1" colspan="2"> + <tree string="Field Mappings" editable="top"> + <field name="col1" domain="[('model_id','=',parent.srcmodel_id or parent.model_id)]"/> + <field name="type"/> + <field name="value" colspan="4"/> + </tree> + <form string="Field Mapping" version="7.0"> + <group col="4"> + <field name="col1" domain="[('model_id','=',parent.srcmodel_id or parent.model_id)]"/> + <field name="type"/> + <field name="value" colspan="4"/> + </group> + </form> + </field> + <field name="record_id" attrs="{'readonly':[('state','!=','object_create')]}" domain="[('model_id','in',[model_id])]"/> + <field name="write_id" attrs="{'readonly':[('state','!=','object_write')]}"/> + </group> + <label string="If you use a formula type, use a python expression using the variable 'object'." align="0.0"/> + </page> + <page string="Iteration Actions" attrs="{'invisible':[('state','!=','loop')]}"> + <group col="4"> + <field name="expression" attrs="{'required':[('state','=','loop')]}"/> + <field name="loop_action" domain="[('state','!=','loop')]" attrs="{'required':[('state','=','loop')]}"/> + </group> + </page> + <page string="Multi Actions" attrs="{'invisible':[('state','!=','other')]}"> + <field name="child_ids"/> + <label string="Only one client action will be executed, last client action will be considered in case of multiple client actions." align="0.0"/> + </page> + </notebook> + <field name="type" readonly="1"/> + </form> + </field> + </record> + + <record id="view_server_action_tree" model="ir.ui.view"> + <field name="name">Server Actions</field> + <field name="model">ir.actions.server</field> + <field name="arch" type="xml"> + <tree string="Server Actions"> + <field name="name"/> + <field name="state"/> + <field name="model_id"/> + <field name="sequence"/> + </tree> + </field> + </record> + + <record id="view_server_action_search" model="ir.ui.view"> + <field name="name">ir.actions.server.search</field> + <field name="model">ir.actions.server</field> + <field name="arch" type="xml"> + <search string="Server Actions"> + <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> + </search> + </field> + </record> + + <record id="action_server_action" model="ir.actions.act_window"> + <field name="name">Server Actions</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.actions.server</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="view_id" ref="view_server_action_tree"/> + <field name="search_view_id" ref="view_server_action_search"/> + <field name="context">{'key':'server_action'}</field> + </record> + <menuitem action="action_server_action" id="menu_server_action" parent="base.next_id_6"/> + + <!-- ir.actions.todo --> + + <record id="ir_actions_todo_tree" model="ir.ui.view"> + <field name="model">ir.actions.todo</field> + <field name="name">Config Wizard Steps</field> + <field name="arch" type="xml"> + <tree string="Config Wizard Steps"> + <field name="sequence"/> + <field name="action_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"/> + <button name="action_open" states="done" + string="Todo" type="object" help="Set as Todo" + icon="gtk-convert"/> + </tree> + </field> + </record> + + <record id="config_wizard_step_view_form" model="ir.ui.view"> + <field name="model">ir.actions.todo</field> + <field name="name">Config Wizard Steps</field> + <field name="arch" type="xml"> + <form string="Config Wizard Steps" version="7.0"> + <header> + <button name="action_launch" + states="open" string="Launch" + type="object" icon="gtk-execute" class="oe_highlight" + help="Launch Configuration Wizard"/> + <button name="action_open" states="done" + string="Set as Todo" type="object" + icon="gtk-convert" class="oe_highlight"/> + <field name="state" widget="statusbar" statusbar_visible="open,done" nolabel="1" readonly="1" statusbar_colors='{"open":"red","done":"blue"}'/> + </header> + <sheet> + <group col="4"> + <field name="action_id"/> + <field name="type"/> + <field name="sequence"/> + </group> + <group string="Groups"> + <field name="groups_id" nolabel="1" colspan="4"/> + </group> + </sheet> + </form> + </field> + </record> + + <record id="config_wizard_step_view_search" model="ir.ui.view"> + <field name="model">ir.actions.todo</field> + <field name="name">ir.actions.todo.select</field> + <field name="arch" type="xml"> + <search string="Search Actions"> + <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> + + <record id="act_ir_actions_todo_form" model="ir.actions.act_window"> + <field name="name">Configuration Wizards</field> + <field name="res_model">ir.actions.todo</field> + <field name="view_id" ref="ir_actions_todo_tree"/> + <field name="view_type">form</field> + <field name="help">The configuration wizards are used to help you configure a new instance of OpenERP. They are launched during the installation of new modules, but you can choose to restart some wizards manually from this menu.</field> + </record> + <menuitem id="menu_ir_actions_todo" name="Configuration Wizards" parent="menu_custom" sequence="20" groups="base.group_no_one"/> + <menuitem id="menu_ir_actions_todo_form" action="act_ir_actions_todo_form" parent="menu_ir_actions_todo"/> + + + </data> +</openerp> diff --git a/openerp/addons/base/ir/ir_attachment_view.xml b/openerp/addons/base/ir/ir_attachment_view.xml new file mode 100644 index 00000000000..4a65dd0ad0a --- /dev/null +++ b/openerp/addons/base/ir/ir_attachment_view.xml @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- Attachment --> + <record id="view_attachment_form" model="ir.ui.view"> + <field name="model">ir.attachment</field> + <field name="arch" type="xml"> + <form string="Attachments" version="7.0"> + <sheet> + <label for="name" class="oe_edit_only"/> + <h1> + <field name="name"/> + </h1> + <group> + <group string="Data"> + <field name="type"/> + <field name="datas" filename="datas_fname" attrs="{'invisible':[('type','=','url')]}"/> + <field name="datas_fname" invisible="1" attrs="{'invisible':[('type','=','url')]}" class="oe_inline oe_right"/> + <field name="url" widget="url" attrs="{'invisible':[('type','=','binary')]}"/> + </group> + <group string="Attached To"> + <field name="res_model"/> + <field name="res_id"/> + <field name="res_name"/> + <field name="company_id" groups="base.group_multi_company" widget="selection"/> + </group> + <group groups="base.group_no_one" string="History"> + <label for="create_uid" string="Creation"/> + <div name="creation_div"> + <field name="create_uid" readonly="1" class="oe_inline"/> on + <field name="create_date" readonly="1" class="oe_inline"/> + </div> + </group> + <group name="description_group" string="Description" colspan="4"> + <field name="description" nolabel="1"/> + </group> + </group> + </sheet> + </form> + </field> + </record> + <record id="view_attachment_tree" model="ir.ui.view"> + <field name="model">ir.attachment</field> + <field name="arch" type="xml"> + <tree string="Attachments"> + <field name="name"/> + <field name="datas_fname"/> + <field name="type" invisible="1"/> + <field name="company_id" groups="base.group_multi_company"/> + <field name="create_uid"/> + <field name="create_date"/> + </tree> + </field> + </record> + <record id="view_attachment_search" model="ir.ui.view"> + <field name="model">ir.attachment</field> + <field name="arch" type="xml"> + <search string="Attachments"> + <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"/> + <filter string="Month" help="Creation Month" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}"/> + </group> + </search> + </field> + </record> + <record id="action_attachment" model="ir.actions.act_window"> + <field name="name">Attachments</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.attachment</field> + <field name="view_type">form</field> + <field name="view_id" eval="False"/> + <field name="search_view_id" ref="view_attachment_search"/> + </record> + <menuitem action="action_attachment" id="menu_action_attachment" parent="base.next_id_4"/> + + </data> +</openerp> diff --git a/openerp/addons/base/ir/ir_config_parameter_view.xml b/openerp/addons/base/ir/ir_config_parameter_view.xml index e4af6c66bab..72ad43da710 100644 --- a/openerp/addons/base/ir/ir_config_parameter_view.xml +++ b/openerp/addons/base/ir/ir_config_parameter_view.xml @@ -1,9 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> - <record model="ir.ui.view" id="view_ir_config_search"> - <field name="name">ir.config_parameter.search</field> <field name="model">ir.config_parameter</field> <field name="arch" type="xml"> <search string="System Properties"> @@ -13,7 +11,6 @@ </field> </record> <record model="ir.ui.view" id="view_ir_config_list"> - <field name="name">ir.config_parameter.list</field> <field name="model">ir.config_parameter</field> <field name="arch" type="xml"> <tree string="System Parameters"> @@ -23,7 +20,6 @@ </field> </record> <record model="ir.ui.view" id="view_ir_config_form"> - <field name="name">ir.config_parameter.form</field> <field name="model">ir.config_parameter</field> <field name="arch" type="xml"> <form string="System Parameters" version="7.0"> @@ -36,7 +32,6 @@ </form> </field> </record> - <act_window name="System Parameters" res_model="ir.config_parameter" id="ir_config_list_action"/> <menuitem id="ir_config_menu" name="System Parameters" parent="menu_ir_property" action="ir_config_list_action"/> </data> diff --git a/openerp/addons/base/ir/ir_cron_view.xml b/openerp/addons/base/ir/ir_cron_view.xml new file mode 100644 index 00000000000..6a7cef3f1a8 --- /dev/null +++ b/openerp/addons/base/ir/ir_cron_view.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- ir.cron --> + <record id="ir_cron_view" model="ir.ui.view"> + <field name="model">ir.cron</field> + <field name="arch" type="xml"> + <form string="Scheduled Actions" version="7.0"> + <sheet> + <group col="4"> + <field name="name"/> + <field name="active"/> + <field name="user_id" /> + <field name="priority" /> + </group> + <notebook> + <page string="Information"> + <group col="4"> + <field name="interval_number"/> + <field name="interval_type"/> + <newline/> + <field name="nextcall"/> + <field name="numbercall"/> + <field name="doall"/> + </group> + </page> + <page string="Technical Data" groups="base.group_no_one"> + <group string="Action to Trigger"> + <field name="model"/> + <field name="function"/> + </group> + <label for="args"/> + <field name="args"/> + </page> + </notebook> + </sheet> + </form> + </field> + </record> + <record id="ir_cron_view_tree" model="ir.ui.view"> + <field name="model">ir.cron</field> + <field name="arch" type="xml"> + <tree string="Scheduled Actions"> + <field name="priority" string="Sequence"/> + <field name="name"/> + <field name="nextcall"/> + <field name="interval_number"/> + <field name="interval_type"/> + <field name="numbercall"/> + <field name="user_id" invisible="1"/> + </tree> + </field> + </record> + <record model="ir.ui.view" id="ir_cron_view_calendar"> + <field name="model">ir.cron</field> + <field name="priority" eval="2"/> + <field name="arch" type="xml"> + <calendar string="Scheduled Actions" date_start="nextcall" color="user_id"> + <field name="name"/> + <field name="user_id"/> + </calendar> + </field> + </record> + <record id="ir_cron_view_search" model="ir.ui.view"> + <field name="model">ir.cron</field> + <field name="arch" type="xml"> + <search string="Scheduled Actions"> + <field name="name" string="Scheduled Action"/> + <field name="user_id"/> + <field name="nextcall"/> + <field name="active"/> + <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" + domain="[]" context="{'group_by':'nextcall'}" /> + </group> + </search> + </field> + </record> + <record id="ir_cron_act" model="ir.actions.act_window"> + <field name="name">Scheduled Actions</field> + <field name="res_model">ir.cron</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form,calendar</field> + <field name="context">{'active_test': False}</field> + <field name="view_id" ref="ir_cron_view_tree"/> + </record> + <menuitem id="menu_ir_cron" name="Scheduler" parent="menu_custom" groups="base.group_no_one" sequence="23"/> + <menuitem id="menu_ir_cron_act" action="ir_cron_act" parent="menu_ir_cron"/> + + </data> +</openerp> diff --git a/openerp/addons/base/ir/ir_filters.xml b/openerp/addons/base/ir/ir_filters.xml index e4b10d41a03..51215132079 100644 --- a/openerp/addons/base/ir/ir_filters.xml +++ b/openerp/addons/base/ir/ir_filters.xml @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> - <data noupdate="1"> <!-- Restrict modifications on ir.filters to owner only --> <record id="ir_filters_rule" model="ir.rule"> @@ -12,7 +11,6 @@ <data> <record id="ir_filters_view_form" model="ir.ui.view"> - <field name="name">ir.filters.form</field> <field name="model">ir.filters</field> <field name="arch" type="xml"> <form string="Filters" version="7.0"> @@ -30,9 +28,7 @@ </form> </field> </record> - <record id="ir_filters_view_tree" model="ir.ui.view"> - <field name="name">ir.filters.tree</field> <field name="model">ir.filters</field> <field name="arch" type="xml"> <tree string="Filters"> @@ -44,9 +40,7 @@ </tree> </field> </record> - <record id="ir_filters_view_search" model="ir.ui.view"> - <field name="name">ir.filters.search</field> <field name="model">ir.filters</field> <field name="arch" type="xml"> <search string="Filters"> @@ -62,13 +56,11 @@ </search> </field> </record> - <record id="actions_ir_filters_view" model="ir.actions.act_window"> <field name="name">Filters</field> <field name="type">ir.actions.act_window</field> <field name="res_model">ir.filters</field> </record> - <menuitem parent="base.next_id_2" name="User-defined Filters" id="menu_ir_filters" action="actions_ir_filters_view" sequence="5"/> </data> diff --git a/openerp/addons/base/ir/ir_mail_server_view.xml b/openerp/addons/base/ir/ir_mail_server_view.xml new file mode 100644 index 00000000000..ff7b61eaee3 --- /dev/null +++ b/openerp/addons/base/ir/ir_mail_server_view.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- ir.mail.server --> + <record model="ir.ui.view" id="ir_mail_server_form"> + <field name="model">ir.mail_server</field> + <field name="arch" type="xml"> + <form string="Outgoing Mail Servers" version="7.0"> + <sheet> + <group col="4"> + <field name="name"/> + <field name="sequence"/> + </group> + <group col="4" string="Connection Information"> + <field name="smtp_host"/> + <field name="smtp_port"/> + <field name="smtp_debug" groups="base.group_no_one"/> + </group> + <group string="Security and Authentication" colspan="4"> + <field name="smtp_encryption" on_change="on_change_encryption(smtp_encryption)"/> + <field name="smtp_user"/> + <field name="smtp_pass" password="True"/> + <button name="test_smtp_connection" type="object" string="Test Connection" icon="gtk-network"/> + </group> + </sheet> + </form> + </field> + </record> + <record model="ir.ui.view" id="ir_mail_server_list"> + <field name="model">ir.mail_server</field> + <field name="arch" type="xml"> + <tree string="Outgoing Mail Servers"> + <field name="sequence"/> + <field name="name"/> + <field name="smtp_host"/> + <field name="smtp_user"/> + <field name="smtp_encryption"/> + </tree> + </field> + </record> + <record id="view_ir_mail_server_search" model="ir.ui.view"> + <field name="model">ir.mail_server</field> + <field name="arch" type="xml"> + <search string="Outgoing Mail Servers"> + <field name="name" + filter_domain="['|', '|', ('name','ilike',self), ('smtp_host','ilike',self), ('smtp_user','ilike',self)]" + string="Outgoing Mail Server"/> + <field name="smtp_encryption"/> + </search> + </field> + </record> + <record model="ir.actions.act_window" id="action_ir_mail_server_list"> + <field name="name">Outgoing Mail Servers</field> + <field name="res_model">ir.mail_server</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="view_id" ref="ir_mail_server_list" /> + <field name="search_view_id" ref="view_ir_mail_server_search"/> + </record> + <menuitem id="menu_mail_servers" parent="menu_email" action="action_ir_mail_server_list" sequence="15" groups="base.group_no_one"/> + </data> +</openerp> diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index 633db6de6a3..e477f2f09a5 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -24,8 +24,11 @@ import re import time import types -from openerp.osv import fields,osv +import openerp +from openerp import SUPERUSER_ID from openerp import netsvc, pooler, tools +from openerp.osv import fields,osv +from openerp.osv.orm import Model from openerp.tools.safe_eval import safe_eval as eval from openerp.tools import config from openerp.tools.translate import _ @@ -58,7 +61,6 @@ def _in_modules(self, cr, uid, ids, field_name, arg, context=None): result[k] = ', '.join(sorted(installed_modules & set(xml_id.split('.')[0] for xml_id in v))) return result - class ir_model(osv.osv): _name = 'ir.model' _description = "Models" @@ -204,7 +206,6 @@ class ir_model(osv.osv): else: x_name = a._columns.keys()[0] x_custom_model._rec_name = x_name -ir_model() class ir_model_fields(osv.osv): _name = 'ir.model.fields' @@ -462,7 +463,128 @@ class ir_model_fields(osv.osv): obj._auto_init(cr, ctx) return res -ir_model_fields() +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() + 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) + + self.unlink(cr, uid, ids, context) + +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() + 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) + + self.unlink(cr, uid, ids, 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() class ir_model_access(osv.osv): _name = 'ir.model.access' @@ -643,8 +765,6 @@ class ir_model_access(osv.osv): res = super(ir_model_access, self).unlink(cr, uid, *args, **argv) return res -ir_model_access() - class ir_model_data(osv.osv): """Holds external identifier keys for records in the database. This has two main uses: @@ -978,5 +1098,4 @@ class ir_model_data(osv.osv): _logger.info('Deleting %s@%s', res_id, model) self.pool.get(model).unlink(cr, uid, [res_id]) - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/ir/ir_model_constraint.py b/openerp/addons/base/ir/ir_model_constraint.py deleted file mode 100644 index a3099339131..00000000000 --- a/openerp/addons/base/ir/ir_model_constraint.py +++ /dev/null @@ -1,77 +0,0 @@ -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() - 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) - - self.unlink(cr, uid, ids, context) diff --git a/openerp/addons/base/ir/ir_model_relation.py b/openerp/addons/base/ir/ir_model_relation.py deleted file mode 100644 index fc6dae2ca52..00000000000 --- a/openerp/addons/base/ir/ir_model_relation.py +++ /dev/null @@ -1,62 +0,0 @@ -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() - 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) - - self.unlink(cr, uid, ids, 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() diff --git a/openerp/addons/base/ir/ir_model_view.xml b/openerp/addons/base/ir/ir_model_view.xml new file mode 100644 index 00000000000..01ff918662f --- /dev/null +++ b/openerp/addons/base/ir/ir_model_view.xml @@ -0,0 +1,416 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- model --> + <record id="view_model_form" model="ir.ui.view"> + <field name="model">ir.model</field> + <field name="arch" type="xml"> + <form string="Model Description" version="7.0"> + <sheet> + <group> + <group> + <field name="name"/> + <field name="model"/> + <field name="osv_memory"/> + </group> + <group> + <field name="state"/> + <field name="modules"/> + </group> + </group> + <notebook> + <page string="Fields"> + <field context="{'manual':True}" name="field_id"> + <tree string="Fields Description"> + <field name="name"/> + <field name="field_description"/> + <field name="ttype"/> + <field name="required"/> + <field name="readonly"/> + <field name="select_level"/> + <field name="state"/> + </tree> + <form string="Fields Description" version="7.0"> + <group col="4"> + <field name="name"/> + <field name="state"/> + <field name="field_description"/> + </group> + <group string="Properties"> + <group> + <field name="ttype"/> + <field name="relation" attrs="{'required': [('ttype','in',['many2one','one2many','many2many'])],'readonly': [('ttype','!=','one2many'), ('ttype','!=','many2one'), ('ttype','!=','many2many')]}"/> + <field name="relation_field" attrs="{'required': [('ttype','=','one2many')], 'readonly': [('ttype','!=','one2many')]}"/> + <field name="selection" attrs="{'required': [('ttype','in',['selection','reference'])], 'readonly': [('ttype','not in',['selection','reference'])]}"/> + <field name="size" attrs="{'required': [('ttype','in',['char','reference'])], 'readonly': [('ttype','not in',['char','reference'])]}"/> + <field name="domain" attrs="{'readonly': [('relation','=','')]}"/> + <field name="serialization_field_id" attrs="{'readonly': [('state','=','base')]}" domain="[('ttype','=','serialized'), ('model_id', '=', model_id)]"/> + </group> + <group> + <field name="required"/> + <field name="readonly"/> + <field name="select_level"/> + <field name="translate"/> + <field name="on_delete" attrs="{'readonly': [('ttype','!=','many2one')]}"/> + <field name="modules"/> + </group> + </group> + <separator string="Groups"/> + <field name="groups"/> + </form> + </field> + <button + icon="gtk-justify-fill" + name="%(act_menu_create)d" + string="Create a Menu" type="action" + target="new" /> + </page> + <page string="Access Rights"> + <field name="access_ids"> + <tree string="Access Rules" editable="bottom"> + <field name="group_id"/> + <field name="perm_read"/> + <field name="perm_write"/> + <field name="perm_create"/> + <field name="perm_unlink"/> + <field name="name"/> + </tree> + </field> + </page> + <page string="Notes"> + <field name="info"/> + </page> + <page string="Views"> + <field name="view_ids"/> + </page> + </notebook> + </sheet> + </form> + </field> + </record> + <record id="view_model_tree" model="ir.ui.view"> + <field name="model">ir.model</field> + <field name="arch" type="xml"> + <tree string="Model Description"> + <field name="model"/> + <field name="name"/> + <field name="state"/> + <field name="osv_memory"/> + </tree> + </field> + </record> + <record id="view_model_search" model="ir.ui.view"> + <field name="model">ir.model</field> + <field name="arch" type="xml"> + <search string="Model Description"> + <field name="name" filter_domain="['|', ('name','ilike',self), ('model','ilike',self)]" string="Model"/> + <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')]"/> + <filter icon="terp-translate" + string="Base" + domain="[('state', '=', 'base')]"/> + </search> + </field> + </record> + <record id="action_model_model" model="ir.actions.act_window"> + <field name="name">Models</field> + <field name="res_model">ir.model</field> + <field name="view_type">form</field> + <field name="context">{'manual':True}</field> + <field name="view_id" ref="view_model_tree"/> + </record> + <menuitem id="next_id_9" name="Database Structure" parent="base.menu_custom" groups="base.group_no_one"/> + <menuitem action="action_model_model" id="ir_model_model_menu" parent="next_id_9"/> + + <!-- ir model fields --> + <record id="view_model_fields_form" model="ir.ui.view"> + <field name="model">ir.model.fields</field> + <field name="arch" type="xml"> + <form string="Fields" version="7.0"> + <sheet> + <group> + <group> + <field name="name" string="Field Name"/> + <field name="field_description"/> + </group> + <group> + <field name="state"/> + <field name="model_id" attrs="{'readonly': [('state','!=', 'manual')]}"/> + <field name="modules"/> + </group> + </group> + <group> + <group> + <field name="ttype"/> + <field name="relation" attrs="{'required': [('ttype','in', ['many2one','one2many','many2many'])], + 'readonly': [('ttype','not in', ['many2one','one2many','many2many'])]}"/> + <field name="relation_field" attrs="{'required': [('ttype','=','one2many')], 'readonly': [('ttype','!=','one2many')]}"/> + <field name="selection" attrs="{'required': [('ttype','in',['selection','reference'])], 'readonly': [('ttype','not in',['selection','reference'])]}"/> + <field name="size" attrs="{'required': [('ttype','in',['char','reference'])], 'readonly': [('ttype','not in',['char','reference'])]}"/> + <field name="domain" attrs="{'readonly': [('relation','=','')]}"/> + <field name="serialization_field_id" attrs="{'readonly': [('state','=','base')]}" domain="[('ttype','=','serialized'), ('model_id', '=', model_id)]"/> + <field name="on_delete" attrs="{'readonly': [('ttype','!=','many2one')]}"/> + </group> + <group> + <field name="required"/> + <field name="readonly"/> + <field name="select_level"/> + <field name="translate"/> + </group> + </group> + <field name="groups" invisible="1"/> + </sheet> + </form> + </field> + </record> + <record id="view_model_fields_tree" model="ir.ui.view"> + <field name="model">ir.model.fields</field> + <field name="arch" type="xml"> + <tree string="Fields"> + <field name="name"/> + <field name="field_description"/> + <field name="model_id"/> + <field name="ttype"/> + <field name="state"/> + </tree> + </field> + </record> + <record id="view_model_fields_search" model="ir.ui.view"> + <field name="model">ir.model.fields</field> + <field name="arch" type="xml"> + <search string="Fields"> + <field name="name" filter_domain="['|', ('name','ilike',self), ('field_description','ilike',self)]" string="Field"/> + <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)]"/> + <field name="model_id"/> + <field name="ttype"/> + <field name="required"/> + <field name="readonly"/> + <group expand="0" string="Group By..."> + <filter string="Object" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'model_id'}"/> + </group> + </search> + </field> + </record> + <record id="action_model_fields" model="ir.actions.act_window"> + <field name="name">Fields</field> + <field name="res_model">ir.model.fields</field> + <field name="view_type">form</field> + <field name="context">{'manual':True}</field> + <field name="view_id" ref="view_model_fields_tree"/> + </record> + <menuitem action="action_model_fields" id="ir_model_model_fields" parent="base.next_id_9"/> + + <!-- ir model data --> + <record model="ir.ui.view" id="view_model_data_form"> + <field name="model">ir.model.data</field> + <field name="arch" type="xml"> + <form string="External Identifiers" version="7.0"> + <group> + <group> + <field name="complete_name"/> + <field name="module"/> + <field name="name"/> + </group> + <group> + <field name="display_name"/> + <field name="model"/> + <field name="res_id"/> + </group> + <group> + <field name="noupdate"/> + <field name="date_update" /> + <field name="date_init" /> + </group> + </group> + </form> + </field> + </record> + <record id="view_model_data_list" model="ir.ui.view"> + <field name="model">ir.model.data</field> + <field name="arch" type="xml"> + <tree string="External Identifiers"> + <field name="complete_name"/> + <field name="display_name"/> + <field name="res_id"/> + <field name="model" groups="base.group_no_one"/> + </tree> + </field> + </record> + <record id="view_model_data_search" model="ir.ui.view"> + <field name="model">ir.model.data</field> + <field name="arch" type="xml"> + <search string="External Identifiers"> + <field name="name" + filter_domain="['|', '|', ('name','ilike',self), ('model','ilike',self), ('module','ilike',self)]" + string="External Identifier"/> + <filter icon="terp-camera_test" + string="Updatable" + domain="[('noupdate', '=', False)]"/> + <field name="res_id"/> + <field name="noupdate"/> + <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'}"/> + </group> + </search> + </field> + </record> + <record id="action_model_data" model="ir.actions.act_window"> + <field name="name">External Identifiers</field> + <field name="res_model">ir.model.data</field> + <field name="view_type">form</field> + <field name="view_id" ref="view_model_data_list"/> + </record> + <menuitem id="next_id_5" name="Sequences & Identifiers" parent="base.menu_custom" sequence="21" groups="base.group_no_one"/> + <menuitem action="action_model_data" id="ir_model_data_menu" parent="base.next_id_5" + groups="base.group_no_one"/> + + <!-- ir model contraints --> + <record model="ir.ui.view" id="view_model_constraint_form"> + <field name="model">ir.model.constraint</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="model">ir.model.constraint</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 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"/> + + <!-- ir model relations --> + <record model="ir.ui.view" id="view_model_relation_form"> + <field name="model">ir.model.relation</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="model">ir.model.relation</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_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"/> + + <!-- ir.model.access --> + <record id="ir_access_view_tree" model="ir.ui.view"> + <field name="model">ir.model.access</field> + <field name="arch" type="xml"> + <tree string="Access Controls" editable="bottom"> + <field name="name"/> + <field name="model_id"/> + <field name="group_id"/> + <field name="perm_read"/> + <field name="perm_write"/> + <field name="perm_create"/> + <field name="perm_unlink"/> + </tree> + </field> + </record> + <record id="ir_access_view_form" model="ir.ui.view"> + <field name="model">ir.model.access</field> + <field name="arch" type="xml"> + <form string="Access Controls" version="7.0"> + <sheet> + <group col="4"> + <field name="name"/> + <field name="model_id"/> + <field name="group_id"/> + <field name="active"/> + </group> + <group string="Access" col="4"> + <field name="perm_read"/> + <field name="perm_write"/> + <field name="perm_create"/> + <field name="perm_unlink"/> + </group> + </sheet> + </form> + </field> + </record> + <record id="ir_access_view_search" model="ir.ui.view"> + <field name="model">ir.model.access</field> + <field name="arch" type="xml"> + <search string="Access Controls"> + <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'}"/> + </group> + </search> + </field> + </record> + <record id="ir_access_act" model="ir.actions.act_window"> + <field name="name">Access Controls List</field> + <field name="res_model">ir.model.access</field> + <field name="view_type">form</field> + <field name="view_id" ref="ir_access_view_tree"/> + <field name="search_view_id" ref="ir_access_view_search"/> + </record> + <menuitem action="ir_access_act" id="menu_ir_access_act" parent="base.menu_security"/> + + </data> +</openerp> diff --git a/openerp/addons/base/ir/ir_rule_view.xml b/openerp/addons/base/ir/ir_rule_view.xml new file mode 100644 index 00000000000..f67df822876 --- /dev/null +++ b/openerp/addons/base/ir/ir_rule_view.xml @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- Rules --> + <record id="view_rule_form" model="ir.ui.view"> + <field name="model">ir.rule</field> + <field name="arch" type="xml"> + <form string="Record rules" version="7.0"> + <sheet> + <group> + <group string="General"> + <field name="name"/> + <field name="model_id"/> + <field name="active"/> + </group> + <group col="4" string="Access Rights"> + <field name="perm_read"/> + <field name="perm_write"/> + <field name="perm_create"/> + <field name="perm_unlink"/> + </group> + </group> + <separator string="Rule Definition (Domain Filter)"/> + <field name="domain_force" colspan="2" nolabel="1"/> + <group string="Groups (no group = global)"> + <field name="global"/> + <field name="groups" nolabel="1" colspan="4"/> + </group> + <group string="Interaction between rules"> + <label colspan="2" + string="Global rules (non group-specific) are restrictions, and cannot be bypassed. Group-local rules grant additional permissions, but are constrained within the bounds of global ones. The first group rules restrict further than global rules, but any additional group rule will add more permissions"/> + <label colspan="2" + string="Detailed algorithm:"/> + <label colspan="2" + string="1. Global rules are combined together with a logical AND operator, and with the result of the following steps"/> + <label colspan="2" + string="2. Group-specific rules are combined together with a logical OR operator"/> + <label colspan="2" + string="3. If user belongs to several groups, the results from step 2 are combined with logical OR operator"/> + <label colspan="2" + string="Example: GLOBAL_RULE_1 AND GLOBAL_RULE_2 AND ( (GROUP_A_RULE_1 OR GROUP_A_RULE_2) OR (GROUP_B_RULE_1 OR GROUP_B_RULE_2) )"/> + </group> + </sheet> + </form> + </field> + </record> + <record id="view_rule_tree" model="ir.ui.view"> + <field name="model">ir.rule</field> + <field name="arch" type="xml"> + <tree string="Record rules"> + <field name="model_id"/> + <field name="name"/> + <field name="global"/> + <field name="domain_force"/> + <field name="perm_read"/> + <field name="perm_write"/> + <field name="perm_create"/> + <field name="perm_unlink"/> + </tree> + </field> + </record> + <record id="view_rule_search" model="ir.ui.view"> + <field name="model">ir.rule</field> + <field name="arch" type="xml"> + <search string="Record Rules"> + <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> + + <record id="action_rule" model="ir.actions.act_window"> + <field name="name">Record Rules</field> + <field name="res_model">ir.rule</field> + <field name="view_type">form</field> + <field name="view_id" ref="view_rule_tree"/> + <field name="search_view_id" ref="view_rule_search"/> + </record> + <menuitem action="action_rule" id="menu_action_rule" parent="base.menu_security" sequence="3"/> + </data> +</openerp> diff --git a/openerp/addons/base/ir/ir_sequence_view.xml b/openerp/addons/base/ir/ir_sequence_view.xml new file mode 100644 index 00000000000..0fa46d61957 --- /dev/null +++ b/openerp/addons/base/ir/ir_sequence_view.xml @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- Sequences --> + <record id="sequence_view" model="ir.ui.view"> + <field name="model">ir.sequence</field> + <field name="arch" type="xml"> + <form string="Sequences" version="7.0"> + <sheet> + <group col="4"> + <field name="name"/> + <field name="code"/> + <field name="company_id" groups="base.group_multi_company"/> + <field name="active" groups="base.group_no_one"/> + </group> + <notebook> + <page string="Sequence"> + <group col="4"> + <field name="prefix"/> + <field name="suffix"/> + <field name="padding"/> + <field name="number_increment"/> + <field name="number_next"/> + <field name="implementation"/> + </group> + <group col="3" string="Legend (for prefix, suffix)"> + <group> + <label colspan="2" string="Current Year with Century: %%(year)s"/> + <label colspan="2" string="Current Year without Century: %%(y)s"/> + <label colspan="2" string="Month: %%(month)s"/> + <label colspan="2" string="Day: %%(day)s"/> + </group> + <group> + <label colspan="2" string="Day of the Year: %%(doy)s"/> + <label colspan="2" string="Week of the Year: %%(woy)s"/> + <label colspan="2" string="Day of the Week (0:Monday): %%(weekday)s"/> + </group> + <group> + <label colspan="2" string="Hour 00->24: %%(h24)s"/> + <label colspan="2" string="Hour 00->12: %%(h12)s"/> + <label colspan="2" string="Minute: %%(min)s"/> + <label colspan="2" string="Second: %%(sec)s"/> + </group> + </group> + </page> + </notebook> + </sheet> + </form> + </field> + </record> + <record id="sequence_view_tree" model="ir.ui.view"> + <field name="model">ir.sequence</field> + <field name="arch" type="xml"> + <tree string="Sequences"> + <field name="code"/> + <field name="name"/> + <field name="prefix"/> + <field name="padding"/> + <field name="company_id" groups="base.group_multi_company"/> + <field name="number_next"/> + <field name="number_increment"/> + <field name="implementation"/> + </tree> + </field> + </record> + <record id="view_sequence_search" model="ir.ui.view"> + <field name="model">ir.sequence</field> + <field name="arch" type="xml"> + <search string="Sequences"> + <field name="name" string="Sequence"/> + <field name="code"/> + <field name="company_id" groups="base.group_multi_company"/> + </search> + </field> + </record> + <record id="ir_sequence_form" model="ir.actions.act_window"> + <field name="name">Sequences</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.sequence</field> + <field name="view_type">form</field> + <field name="view_id" ref="sequence_view_tree"/> + <field name="context">{'active_test': False}</field> + </record> + <menuitem action="ir_sequence_form" id="menu_ir_sequence_form" parent="next_id_5"/> + + <!-- Sequences Types --> + <record id="sequence_type_form_view" model="ir.ui.view"> + <field name="model">ir.sequence.type</field> + <field name="arch" type="xml"> + <form string="Sequence Type" version="7.0"> + <sheet> + <group col="4"> + <field name="name"/> + <field name="code"/> + </group> + </sheet> + </form> + </field> + </record> + <record id="sequence_type_tree_view" model="ir.ui.view"> + <field name="model">ir.sequence.type</field> + <field name="arch" type="xml"> + <tree string="Sequence Type"> + <field name="name"/> + <field name="code"/> + </tree> + </field> + </record> + <record id="view_sequence_type_search" model="ir.ui.view"> + <field name="model">ir.sequence.type</field> + <field name="arch" type="xml"> + <search string="Sequences Type"> + <field name="name" filter_domain="['|', ('name','ilike',self), ('code','ilike',self)]" string="Sequence Type"/> + </search> + </field> + </record> + <record id="ir_sequence_type" model="ir.actions.act_window"> + <field name="name">Sequence Codes</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.sequence.type</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field eval="False" name="view_id"/> + </record> + <menuitem action="ir_sequence_type" id="menu_ir_sequence_type" + groups="base.group_no_one" + parent="base.next_id_5"/> + + </data> +</openerp> diff --git a/openerp/addons/base/ir/ir_translation_view.xml b/openerp/addons/base/ir/ir_translation_view.xml index 70ccb902cc9..5555b371c58 100644 --- a/openerp/addons/base/ir/ir_translation_view.xml +++ b/openerp/addons/base/ir/ir_translation_view.xml @@ -1,8 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> <openerp> <data> <!-- Translations --> <record id="view_translation_search" model="ir.ui.view"> - <field name="name">Translations</field> <field name="model">ir.translation</field> <field name="arch" type="xml"> <search string="Translations"> @@ -21,7 +21,6 @@ </record> <record id="view_translation_form" model="ir.ui.view"> - <field name="name">Translations</field> <field name="model">ir.translation</field> <field name="arch" type="xml"> <form string="Translations" version="7.0"> @@ -53,7 +52,6 @@ </field> </record> <record id="view_translation_tree" model="ir.ui.view"> - <field name="name">Translations</field> <field name="model">ir.translation</field> <field name="arch" type="xml"> <tree string="Translations" editable="bottom"> @@ -76,4 +74,4 @@ <menuitem action="action_translation" id="menu_action_translation" parent="base.menu_translation_app" /> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/openerp/addons/base/ir/ir_ui_menu.py b/openerp/addons/base/ir/ir_ui_menu.py index 213cff18cc6..5ab546cb554 100644 --- a/openerp/addons/base/ir/ir_ui_menu.py +++ b/openerp/addons/base/ir/ir_ui_menu.py @@ -316,9 +316,5 @@ class ir_ui_menu(osv.osv): 'sequence' : 10, } _order = "sequence,id" -ir_ui_menu() - - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/openerp/addons/base/ir/ir_ui_menu_view.xml b/openerp/addons/base/ir/ir_ui_menu_view.xml new file mode 100644 index 00000000000..406f75b3d22 --- /dev/null +++ b/openerp/addons/base/ir/ir_ui_menu_view.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <record id="edit_menu_access" model="ir.ui.view"> + <field name="model">ir.ui.menu</field> + <field name="arch" type="xml"> + <form string="Menu" version="7.0"> + <sheet> + <group> + <group> + <field name="name"/> + <field name="parent_id"/> + <field name="sequence"/> + </group> + <group> + <field name="complete_name"/> + <field name="action"/> + <field name="icon"/> + </group> + </group> + <notebook> + <page string="Groups"> + <field name="groups_id"/> + </page> + <page string="Submenus"> + <!-- Note: make sure you have 'ir.ui.menu.full_list' + in the context to see all submenus! --> + <field name="child_id" + context="{'default_parent_id': active_id}"> + <tree string="Menu"> + <field name="sequence"/> + <field icon="icon" name="name" string="Menu"/> + </tree> + </field> + </page> + </notebook> + </sheet> + </form> + </field> + </record> + <record id="edit_menu" model="ir.ui.view"> + <field name="model">ir.ui.menu</field> + <field eval="8" name="priority"/> + <field name="arch" type="xml"> + <tree string="Menu"> + <field name="sequence"/> + <field icon="icon" name="complete_name" string="Menu"/> + </tree> + </field> + </record> + <record id="edit_menu_access_search" model="ir.ui.view"> + <field name="name">ir.ui.menu.search</field> + <field name="model">ir.ui.menu</field> + <field name="arch" type="xml"> + <search string="Menu"> + <field name="name" string="Menu"/> + <field name="parent_id"/> + </search> + </field> + </record> + <record id="grant_menu_access" model="ir.actions.act_window"> + <field name="name">Menu Items</field> + <field name="res_model">ir.ui.menu</field> + <field name="view_type">form</field> + <field name="view_id" ref="edit_menu"/> + <field name="context">{'ir.ui.menu.full_list':True}</field> + <field name="search_view_id" ref="edit_menu_access_search"/> + <field name="help">Manage and customize the items available and displayed in your OpenERP system menu. You can delete an item by clicking on the box at the beginning of each line and then delete it through the button that appeared. Items can be assigned to specific groups in order to make them accessible to some users within the system.</field> + </record> + <menuitem action="grant_menu_access" id="menu_grant_menu_access" parent="base.next_id_2" sequence="1"/> + + </data> +</openerp> diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index 9208297cf84..868f634783c 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -44,7 +44,6 @@ class view_custom(osv.osv): cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_ui_view_custom_user_id_ref_id\'') if not cr.fetchone(): cr.execute('CREATE INDEX ir_ui_view_custom_user_id_ref_id ON ir_ui_view_custom (user_id, ref_id)') -view_custom() class view(osv.osv): _name = 'ir.ui.view' @@ -60,7 +59,7 @@ class view(osv.osv): return result _columns = { - 'name': fields.char('View Name',size=64, required=True), + 'name': fields.char('View Name', required=True), 'model': fields.char('Object', size=64, required=True, select=True), 'priority': fields.integer('Sequence', required=True), 'type': fields.function(_type_field, type='selection', selection=[ @@ -88,11 +87,17 @@ class view(osv.osv): _order = "priority,name" # Holds the RNG schema - _relaxng_validator = None + _relaxng_validator = None def create(self, cr, uid, values, context=None): if 'type' in values: _logger.warning("Setting the `type` field is deprecated in the `ir.ui.view` model.") + if not values.get('name'): + if values.get('inherit_id'): + inferred_type = self.browse(cr, uid, values['inherit_id'], context).type + else: + inferred_type = etree.fromstring(values['arch'].encode('utf8')).tag + values['name'] = "%s %s" % (values['model'], inferred_type) return super(osv.osv, self).create(cr, uid, values, context) def _relaxng(self): @@ -106,8 +111,7 @@ class view(osv.osv): finally: frng.close() return self._relaxng_validator - - + def _check_render_view(self, cr, uid, view, context=None): """Verify that the given view's hierarchy is valid for rendering, along with all the changes applied by its inherited views, by rendering it using ``fields_view_get()``. @@ -267,7 +271,6 @@ class view(osv.osv): 'label' : labels, 'blank_nodes': blank_nodes, 'node_parent_field': _Model_Field,} -view() class view_sc(osv.osv): _name = 'ir.ui.view_sc' @@ -304,7 +307,5 @@ class view_sc(osv.osv): ('shortcut_unique', 'unique(res_id, resource, user_id)', 'Shortcut for this menu already exists!'), ] -view_sc() - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/ir/ir_ui_view_view.xml b/openerp/addons/base/ir/ir_ui_view_view.xml new file mode 100644 index 00000000000..59dfdd72b3f --- /dev/null +++ b/openerp/addons/base/ir/ir_ui_view_view.xml @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- View --> + <record id="view_view_form" model="ir.ui.view"> + <field name="model">ir.ui.view</field> + <field name="arch" type="xml"> + <form string="Views" version="7.0"> + <sheet> + <group> + <group> + <field name="name"/> + <field name="type"/> + <field name="model"/> + <field name="priority"/> + </group> + <group> + <field name="field_parent"/> + <field name="inherit_id"/> + <field name="xml_id"/> + </group> + </group> + <notebook> + <page string="Architecture"> + <field name="arch"/> + </page> + <page string="Groups"> + <field name="groups_id"/> + </page> + </notebook> + </sheet> + </form> + </field> + </record> + <record id="view_view_tree" model="ir.ui.view"> + <field name="model">ir.ui.view</field> + <field name="arch" type="xml"> + <tree string="Views"> + <field name="priority" string="Sequence"/> + <field name="name"/> + <field name="type"/> + <field name="model"/> + <field name="xml_id"/> + <field name="inherit_id"/> + </tree> + </field> + </record> + <record id="view_view_search" model="ir.ui.view"> + <field name="model">ir.ui.view</field> + <field name="arch" type="xml"> + <search string="Views"> + <field name="name" filter_domain="['|', ('name','ilike',self), ('model','ilike',self)]" string="View"/> + <filter icon="terp-stock_zoom" + string="Search" + domain="[('type', '=', 'search')]"/> + <filter icon="gtk-indent" + string="Tree" + domain="[('type', '=', 'tree')]"/> + <filter icon="gtk-new" + string="Form" + domain="[('type', '=','form')]"/> + <field name="inherit_id"/> + <field name="type"/> + <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'}"/> + </group> + </search> + </field> + </record> + <record id="action_ui_view" model="ir.actions.act_window"> + <field name="name">Views</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.ui.view</field> + <field name="view_id" ref="view_view_tree"/> + <field name="help">Views allows you to personalize each view of OpenERP. You can add new fields, move fields, rename them or delete the ones that you do not need.</field> + </record> + <menuitem action="action_ui_view" id="menu_action_ui_view" parent="base.next_id_2" sequence="2"/> + + <!-- View customizations --> + <record id="view_view_custom_form" model="ir.ui.view"> + <field name="model">ir.ui.view.custom</field> + <field name="arch" type="xml"> + <form string="Customized Views" version="7.0"> + <sheet> + <group col="4"> + <field name="user_id"/> + <field name="ref_id"/> + <field name="arch" colspan="4" nolabel="1"/> + </group> + </sheet> + </form> + </field> + </record> + <record id="view_view_custom_tree" model="ir.ui.view"> + <field name="model">ir.ui.view.custom</field> + <field name="arch" type="xml"> + <tree string="Customized Views"> + <field name="user_id"/> + <field name="ref_id"/> + </tree> + </field> + </record> + <record id="view_view_custom_search" model="ir.ui.view"> + <field name="model">ir.ui.view.custom</field> + <field name="arch" type="xml"> + <search string="Customized Views"> + <field name="user_id"/> + <field name="ref_id"/> + </search> + </field> + </record> + <record id="action_ui_view_custom" model="ir.actions.act_window"> + <field name="name">Customized Views</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.ui.view.custom</field> + <field name="help">Customized views are used when users reorganize the content of their dashboard views (via web client)</field> + </record> + <menuitem id="menu_action_ui_view_custom" action="action_ui_view_custom" parent="base.next_id_2" sequence="3"/> + + <!-- Shortcuts --> + <record id="shortcut_form" model="ir.ui.view"> + <field name="model">ir.ui.view_sc</field> + <field name="arch" type="xml"> + <form string="Shortcut" version="7.0"> + <group col="4"> + <field name="name"/> + <field name="sequence"/> + </group> + </form> + </field> + </record> + <record id="shortcut_tree" model="ir.ui.view"> + <field name="model">ir.ui.view_sc</field> + <field name="arch" type="xml"> + <tree string="Shortcut"> + <field name="name"/> + <field name="sequence"/> + </tree> + </field> + </record> + + </data> +</openerp> diff --git a/openerp/addons/base/ir/ir_values_view.xml b/openerp/addons/base/ir/ir_values_view.xml new file mode 100644 index 00000000000..57457e4e9a3 --- /dev/null +++ b/openerp/addons/base/ir/ir_values_view.xml @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- Values --> + <record id="values_view_form_action" model="ir.ui.view"> + <field name="name">ir.values.form.action</field> + <field name="model">ir.values</field> + <field name="arch" type="xml"> + <form string="Action Bindings" version="7.0"> + <group> + <group> + <field name="name"/> + <field name="model_id" on_change="onchange_object_id(model_id)"/> + <field name="model"/> + <field name="res_id"/> + <field name="key2"/> + </group> + <group> + <field name="action_id" on_change="onchange_action_id(action_id)"/> + <field name="value_unpickle" colspan="4" string="Action Reference"/> + </group> + </group> + </form> + </field> + </record> + + <record id="values_view_form_defaults" model="ir.ui.view"> + <field name="name">ir.values.form.defaults</field> + <field name="model">ir.values</field> + <field name="arch" type="xml"> + <form string="User-defined Defaults" version="7.0"> + <group> + <group> + <field name="name"/> + <field name="model"/> + <field name="model_id" on_change="onchange_object_id(model_id)"/> + <field name="value_unpickle" nolabel="1"/> + </group> + <group> + <field name="key2" string="Condition"/> + <field name="user_id"/> + <field name="company_id" groups="base.group_multi_company"/> + </group> + </group> + </form> + </field> + </record> + + <record id="values_view_tree_action" model="ir.ui.view"> + <field name="name">ir.values.tree.action</field> + <field name="model">ir.values</field> + <field name="arch" type="xml"> + <tree string="Action Bindings/Defaults"> + <field name="name"/> + <field name="model"/> + <field name="key2"/> + </tree> + </field> + </record> + + <record id="values_view_search_action" model="ir.ui.view"> + <field name="name">ir.values.search.action</field> + <field name="model">ir.values</field> + <field name="arch" type="xml"> + <search string="Client Actions"> + <field name="name" + filter_domain="['|', '|', ('name','ilike',self), ('model','ilike',self), ('key2','ilike',self)]" + string="Client Action"/> + <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'}"/> + </group> + </search> + </field> + </record> + + <record id="act_values_form_action" model="ir.actions.act_window"> + <field name="name">Action Bindings</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.values</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="search_view_id" ref="values_view_search_action"/> + <field name="domain">[('key','=','action')]</field> + <field name="context">{'default_key':'action'}</field> + </record> + <record model="ir.actions.act_window.view" id="action_values_tree_view"> + <field name="sequence" eval="1"/> + <field name="view_mode">tree</field> + <field name="view_id" ref="values_view_tree_action"/> + <field name="act_window_id" ref="act_values_form_action"/> + </record> + <record model="ir.actions.act_window.view" id="action_values_form_view"> + <field name="sequence" eval="2"/> + <field name="view_mode">form</field> + <field name="view_id" ref="values_view_form_action"/> + <field name="act_window_id" ref="act_values_form_action"/> + </record> + <menuitem action="act_values_form_action" id="menu_values_form_action" parent="next_id_6"/> + + <record id="act_values_form_defaults" model="ir.actions.act_window"> + <field name="name">User-defined Defaults</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">ir.values</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="search_view_id" ref="values_view_search_action"/> + <field name="domain">[('key','=','default')]</field> + <field name="context">{'default_key':'default','default_key2':''}</field> + </record> + <record model="ir.actions.act_window.view" id="action_values_defaults_tree_view"> + <field name="sequence" eval="1"/> + <field name="view_mode">tree</field> + <field name="view_id" ref="values_view_tree_action"/> + <field name="act_window_id" ref="act_values_form_defaults"/> + </record> + <record model="ir.actions.act_window.view" id="action_values_defaults_form_view"> + <field name="sequence" eval="2"/> + <field name="view_mode">form</field> + <field name="view_id" ref="values_view_form_defaults"/> + <field name="act_window_id" ref="act_values_form_defaults"/> + </record> + <menuitem action="act_values_form_defaults" id="menu_values_form_defaults" parent="next_id_6"/> + + </data> +</openerp> diff --git a/openerp/addons/base/ir/osv_memory_autovacuum.xml b/openerp/addons/base/ir/osv_memory_autovacuum.xml new file mode 100644 index 00000000000..079a33c3e5c --- /dev/null +++ b/openerp/addons/base/ir/osv_memory_autovacuum.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <record model="ir.cron" id="cronjob_osv_memory_autovacuum"> + <field name='name'>AutoVacuum osv_memory objects</field> + <field name='interval_number'>30</field> + <field name='interval_type'>minutes</field> + <field name="numbercall">-1</field> + <field name="active">True</field> + <field name="doall" eval="False" /> + <field name="model">osv_memory.autovacuum</field> + <field name="function">power_on</field> + <field name="args">()</field> + </record> + + </data> +</openerp> diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index cf9dc024dcb..62d12ef20ee 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -41,6 +41,7 @@ """ +import babel.dates import calendar import collections import copy @@ -2701,7 +2702,9 @@ class BaseModel(object): dt = datetime.datetime.strptime(alldata[d['id']][groupby][:7], '%Y-%m') days = calendar.monthrange(dt.year, dt.month)[1] - d[groupby] = datetime.datetime.strptime(d[groupby][:10], '%Y-%m-%d').strftime('%B %Y') + date_value = datetime.datetime.strptime(d[groupby][:10], '%Y-%m-%d') + d[groupby] = babel.dates.format_date( + date_value, format='MMMM yyyy', locale=context.get('lang', 'en_US')) d['__domain'] = [(groupby, '>=', alldata[d['id']][groupby] and datetime.datetime.strptime(alldata[d['id']][groupby][:7] + '-01', '%Y-%m-%d').strftime('%Y-%m-%d') or False),\ (groupby, '<=', alldata[d['id']][groupby] and datetime.datetime.strptime(alldata[d['id']][groupby][:7] + '-' + str(days), '%Y-%m-%d').strftime('%Y-%m-%d') or False)] + domain del alldata[d['id']][groupby] |
