[Merge]with: lp:~openerp-dev/openobject-addons/trunk-v62_config
bzr revid: dbr@tinyerp.com-20120427065437-l5cbs5k1v3flvg23 bzr revid: dbr@tinyerp.com-20120502062333-thsx5qy31mvi049l
This commit is contained in:
commit
95d13c2088
|
@ -116,7 +116,7 @@
|
|||
</record>
|
||||
|
||||
<menuitem id="menu_account_config" name="Accounting" parent="base.menu_config"
|
||||
sequence="6" action="action_account_config"/>
|
||||
sequence="14" action="action_account_config"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -20,5 +20,6 @@
|
|||
##############################################################################
|
||||
|
||||
import base_setup
|
||||
import res_config
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -36,7 +36,7 @@ Shows you a list of applications features to install from.
|
|||
'website': 'http://www.openerp.com',
|
||||
'depends': ['base'],
|
||||
'init_xml': [],
|
||||
'update_xml': ['security/ir.model.access.csv', 'base_setup_views.xml' ],
|
||||
'update_xml': ['security/ir.model.access.csv', 'base_setup_views.xml', 'res_config_view.xml'],
|
||||
'demo_xml': [],
|
||||
'installable': True,
|
||||
'auto_install': True,
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
import pytz
|
||||
|
||||
import simplejson
|
||||
import cgi
|
||||
|
@ -75,61 +74,6 @@ class product_installer(osv.osv_memory):
|
|||
if val.customers == 'import':
|
||||
return {'type': 'ir.actions.act_window'}
|
||||
|
||||
# Define users preferences for new users (ir.values)
|
||||
|
||||
def _lang_get(self, cr, uid, context=None):
|
||||
obj = self.pool.get('res.lang')
|
||||
ids = obj.search(cr, uid, [('translatable','=',True)])
|
||||
res = obj.read(cr, uid, ids, ['code', 'name'], context=context)
|
||||
res = [(r['code'], r['name']) for r in res]
|
||||
return res
|
||||
|
||||
def _tz_get(self,cr,uid, context=None):
|
||||
return [(x, x) for x in pytz.all_timezones]
|
||||
|
||||
class user_preferences_config(osv.osv_memory):
|
||||
_name = 'user.preferences.config'
|
||||
_inherit = 'res.config'
|
||||
_columns = {
|
||||
'context_tz': fields.selection(_tz_get, 'Timezone', size=64,
|
||||
help="Set default for new user's timezone, used to perform timezone conversions "
|
||||
"between the server and the client."),
|
||||
'context_lang': fields.selection(_lang_get, 'Language', required=True,
|
||||
help="Sets default language for the all user interface, when UI "
|
||||
"translations are available. If you want to Add new Language, you can add it from 'Load an Official Translation' wizard from 'Administration' menu."),
|
||||
'view': fields.selection([('simple','Simplified'),
|
||||
('extended','Extended')],
|
||||
'Interface', required=True, help= "If you use OpenERP for the first time we strongly advise you to select the simplified interface, which has less features but is easier. You can always switch later from the user preferences." ),
|
||||
'menu_tips': fields.boolean('Display Tips', help="Check out this box if you want to always display tips on each menu action"),
|
||||
|
||||
}
|
||||
_defaults={
|
||||
'view' : lambda self,cr,uid,*args: self.pool.get('res.users').browse(cr, uid, uid).view or 'simple',
|
||||
'context_lang' : 'en_US',
|
||||
'menu_tips' : True
|
||||
}
|
||||
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
res = super(user_preferences_config, self).default_get(cr, uid, fields, context=context)
|
||||
res_default = self.pool.get('ir.values').get(cr, uid, 'default', False, ['res.users'])
|
||||
for id, field, value in res_default:
|
||||
res.update({field: value})
|
||||
return res
|
||||
|
||||
def execute(self, cr, uid, ids, context=None):
|
||||
user_obj = self.pool.get('res.users')
|
||||
user_ids = user_obj.search(cr, uid, [], context=context)
|
||||
for o in self.browse(cr, uid, ids, context=context):
|
||||
user_obj.write(cr , uid, user_ids ,{'context_tz' : o.context_tz, 'context_lang' : o.context_lang, 'view' : o.view, 'menu_tips' : o.menu_tips}, context=context)
|
||||
ir_values_obj = self.pool.get('ir.values')
|
||||
ir_values_obj.set(cr, uid, 'default', False, 'context_tz', ['res.users'], o.context_tz)
|
||||
ir_values_obj.set(cr, uid, 'default', False, 'context_lang', ['res.users'], o.context_lang)
|
||||
ir_values_obj.set(cr, uid, 'default', False, 'view', ['res.users'], o.view)
|
||||
ir_values_obj.set(cr, uid, 'default', False, 'menu_tips', ['res.users'], o.menu_tips)
|
||||
return {}
|
||||
|
||||
# Specify Your Terminology
|
||||
|
||||
class specify_partner_terminology(osv.osv_memory):
|
||||
|
|
|
@ -1,69 +1,6 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Define default users preferences-->
|
||||
<record id="view_user_preferences_config_form" model="ir.ui.view">
|
||||
<field name="name">Set default users preferences</field>
|
||||
<field name="model">user.preferences.config</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="base.res_config_view_base"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<form position="attributes">
|
||||
<attribute name="string">Define Users's Preferences</attribute>
|
||||
</form>
|
||||
<xpath expr="//separator[@string="title"]" position="attributes">
|
||||
<attribute name="string">Define Users's Preferences</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//label[@string='description']" position="attributes">
|
||||
<attribute name="string">This will set the default preferences for new users and update all existing ones. Afterwards, users are free to change those values on their own user preference form.</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//separator[@string="vsep"]" position="attributes">
|
||||
<attribute name="string"/>
|
||||
<attribute name="rowspan">12</attribute>
|
||||
</xpath>
|
||||
<group string="res_config_contents" position="replace">
|
||||
<group colspan="4">
|
||||
<field colspan="4" name="view"/>
|
||||
<field colspan="4" name="context_lang"/>
|
||||
<field colspan="4" name="context_tz"/>
|
||||
<field colspan="4" name="menu_tips"/>
|
||||
</group>
|
||||
</group>
|
||||
</data>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_user_preferences_config_form" model="ir.actions.act_window">
|
||||
<field name="name">Define default users preferences</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">user.preferences.config</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="view_user_preferences_config_form"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
<record id="config_action_user_preferences_config_form" model="ir.actions.todo">
|
||||
<field name="action_id" ref="action_user_preferences_config_form"/>
|
||||
<field name="category_id" ref="base.category_administration_config"/>
|
||||
<field name="type">once</field>
|
||||
</record>
|
||||
|
||||
<!-- Create Additional Users -->
|
||||
<record id="action_config_access_other_user" model="ir.actions.act_window">
|
||||
<field name="name">Create Additional Users</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.users</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
</record>
|
||||
<record id="config_wizard_action_config_user_form" model="ir.actions.todo">
|
||||
<field name="action_id" ref="action_config_access_other_user"/>
|
||||
<field name="category_id" ref="base.category_administration_config"/>
|
||||
<field name="sequence">1000</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Specify Your Terminology Config Wiz-->
|
||||
<record id="base_setup_terminology_form" model="ir.ui.view">
|
||||
<field name="name">Specify Your Terminology</field>
|
||||
|
@ -110,23 +47,6 @@
|
|||
</record>
|
||||
-->
|
||||
|
||||
<!-- Company config -->
|
||||
<record id="action_base_setup_company" model="ir.actions.act_window">
|
||||
<field name="name">Set Company Header and Footer</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.company</field>
|
||||
<field name="view_id" ref="base.view_company_form"/>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="context">{'res_id': user.company_id.id}</field>
|
||||
<field name="help">Fill in your company data (address, logo, bank accounts) so that it's printed on your reports. You can click on the button 'Preview Header' in order to check the header/footer of PDF documents.</field>
|
||||
</record>
|
||||
<record id="base_setup_company_todo" model="ir.actions.todo">
|
||||
<field name="action_id" ref="action_base_setup_company"/>
|
||||
<field name="category_id" ref="base.category_administration_config"/>
|
||||
<field name="sequence">1</field>
|
||||
</record>
|
||||
|
||||
<record id="base.view_sale_config_settings" model="ir.ui.view">
|
||||
<field name="name">sale settings</field>
|
||||
<field name="model">sale.config.settings</field>
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Business Applications
|
||||
# Copyright (C) 2004-2012 OpenERP S.A. (<http://openerp.com>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import osv, fields
|
||||
|
||||
class base_config_settings(osv.osv_memory):
|
||||
_name = 'base.config.settings'
|
||||
_inherit = 'res.config.settings'
|
||||
_columns = {
|
||||
'module_multi_company': fields.boolean('Multi Company',
|
||||
help="""Work in multi-company environments, with appropriate security access between companies.
|
||||
This installs the module multi_company."""),
|
||||
'module_portal': fields.boolean('Portal',
|
||||
help="""Define a portal for your customers or suppliers. The portal is a group of
|
||||
external users that has specific access rights and rules.
|
||||
This installs the module portal."""),
|
||||
'module_share': fields.boolean('Share',
|
||||
help="""Share OpenERP documents (records) with external users.
|
||||
This installs the module share."""),
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,41 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_general_configuration" model="ir.ui.view">
|
||||
<field name="name">General Settings</field>
|
||||
<field name="model">base.config.settings</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="General Settings" layout="manual">
|
||||
<div class="oe_form_topbar">
|
||||
<button string="Apply" type="object" name="execute"/>
|
||||
<button string="Cancel" special="cancel"/>
|
||||
</div>
|
||||
<sheet layout="auto">
|
||||
<separator string="Company Settings" colspan="4"/>
|
||||
<field name="module_multi_company"/>
|
||||
|
||||
<separator string="Others" colspan="4"/>
|
||||
<label string="Outgoing Mail Servers"/>
|
||||
<button type="action" name="%(base.action_ir_mail_server_list)d"
|
||||
string="Configure" icon="gtk-execute"/>
|
||||
<newline/>
|
||||
<field name="module_share"/>
|
||||
<newline/>
|
||||
<field name="module_portal"/>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_general_configuration" model="ir.actions.act_window">
|
||||
<field name="name">General Settings</field>
|
||||
<field name="res_model">base.config.settings</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
</record>
|
||||
<menuitem id="menu_general_configuration" name="Settings" parent="base.menu_config"
|
||||
sequence="100" action="action_general_configuration"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<menuitem id="synch_config" name="Synchronization" parent="base.menu_config" sequence="30"/>
|
||||
<menuitem id="synch_config" name="Synchronization" parent="base.menu_config" sequence="60"/>
|
||||
<record id="view_transfer_line_tree" model="ir.ui.view">
|
||||
<field name="name">base.synchro.obj.line.tree</field>
|
||||
<field name="model">base.synchro.obj.line</field>
|
||||
|
|
|
@ -26,12 +26,12 @@ class crm_configuration(osv.osv_memory):
|
|||
_inherit = ['sale.config.settings', 'fetchmail.config.settings']
|
||||
|
||||
_columns = {
|
||||
'module_crm_caldav': fields.boolean("Caldav Synchronization",
|
||||
help="""Use protocol caldav to synchronize meetings with other calendar applications (like Sunbird).
|
||||
This installs the module crm_caldav."""),
|
||||
'fetchmail_lead': fields.boolean("Create Leads from Incoming Mails",
|
||||
fetchmail_model='crm.lead', fetchmail_name='Incoming leads',
|
||||
help="""Allows you to configure your incoming mail server, and create leads from incoming emails."""),
|
||||
'module_crm_caldav': fields.boolean("Caldav Synchronization",
|
||||
help="""Use protocol caldav to synchronize meetings with other calendar applications (like Sunbird).
|
||||
This installs the module crm_caldav."""),
|
||||
'lead_server': fields.char('Server', size=256),
|
||||
'lead_port': fields.integer('Port'),
|
||||
'lead_type': fields.selection([
|
||||
|
@ -57,8 +57,4 @@ class crm_configuration(osv.osv_memory):
|
|||
This installs the module google_map."""),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'lead_type': 'pop',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -10,15 +10,9 @@
|
|||
<field name="arch" type="xml">
|
||||
<group name="config_fetchmail" position="after">
|
||||
<field name="fetchmail_lead"/>
|
||||
<group colspan="2" attrs="{'invisible': [('fetchmail_lead','=',False)]}">
|
||||
<field name="lead_server" attrs="{'required': [('fetchmail_lead','=',True)]}"/>
|
||||
<field name="lead_type" on_change="onchange_fetchmail('lead', lead_type, lead_is_ssl)" attrs="{'required': [('fetchmail_lead','=',True)]}"/>
|
||||
<field name="lead_port" attrs="{'required': [('fetchmail_lead','=',True)]}"/>
|
||||
<field name="lead_is_ssl" on_change="onchange_fetchmail('lead', lead_type, lead_is_ssl)"/>
|
||||
<field name="lead_user" attrs="{'required': [('fetchmail_lead','=',True)]}"/>
|
||||
<field name="lead_password" password="True" attrs="{'required': [('fetchmail_lead','=',True)]}"/>
|
||||
<group colspan="2">
|
||||
<button type="object" name="configure_fetchmail_lead" string="Configure" icon="gtk-execute"/>
|
||||
</group>
|
||||
<newline/>
|
||||
</group>
|
||||
|
||||
<group name="config_crm" position="after">
|
||||
|
@ -36,7 +30,8 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="base.menu_sale_config" name="Sales" parent="base.menu_config" sequence="1" action="base.action_sale_config"/>
|
||||
<menuitem id="base.menu_sale_config" name="Sales" parent="base.menu_config"
|
||||
sequence="1" action="base.action_sale_config"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -26,21 +26,7 @@ class crm_claim_settings(osv.osv_memory):
|
|||
_inherit = ['sale.config.settings', 'fetchmail.config.settings']
|
||||
|
||||
_columns = {
|
||||
'fetchmail_claim': fields.boolean("Create claims from an email account",
|
||||
fetchmail_model='crm.claim', fetchmail_name='Incoming claims',
|
||||
'fetchmail_claim': fields.boolean("Create Claims from Incoming Mails", readonly=True,
|
||||
fetchmail_model='crm.claim', fetchmail_name='Incoming Claims',
|
||||
help="""Allows you to configure your incoming mail server, and create claims from incoming emails."""),
|
||||
'claim_server' : fields.char('Server', size=256),
|
||||
'claim_port' : fields.integer('Port'),
|
||||
'claim_type': fields.selection([
|
||||
('pop', 'POP Server'),
|
||||
('imap', 'IMAP Server'),
|
||||
('local', 'Local Server'),
|
||||
], 'Type'),
|
||||
'claim_is_ssl': fields.boolean('SSL/TLS', help="Connections are encrypted with SSL/TLS through a dedicated port (default: IMAPS=993, POP=995)"),
|
||||
'claim_user' : fields.char('Username', size=256),
|
||||
'claim_password' : fields.char('Password', size=1024),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'claim_type': 'pop',
|
||||
}
|
||||
|
|
|
@ -11,15 +11,9 @@
|
|||
<field name="arch" type="xml">
|
||||
<group name="config_fetchmail" position="after">
|
||||
<field name="fetchmail_claim"/>
|
||||
<group colspan="2" attrs="{'invisible': [('fetchmail_claim','=',False)]}">
|
||||
<field name="claim_server" attrs="{'required': [('fetchmail_claim','=',True)]}"/>
|
||||
<field name="claim_type" on_change="onchange_fetchmail('claim', claim_type, claim_is_ssl)" attrs="{'required': [('fetchmail_claim','=',True)]}"/>
|
||||
<field name="claim_port" attrs="{'required': [('fetchmail_claim','=',True)]}"/>
|
||||
<field name="claim_is_ssl" on_change="onchange_fetchmail('claim', claim_type, claim_is_ssl)"/>
|
||||
<field name="claim_user" attrs="{'required': [('fetchmail_claim','=',True)]}"/>
|
||||
<field name="claim_password" password="True" attrs="{'required': [('fetchmail_claim','=',True)]}"/>
|
||||
<group colspan="2">
|
||||
<button type="object" name="configure_fetchmail_claim" string="Configure" icon="gtk-execute"/>
|
||||
</group>
|
||||
<newline/>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -18,8 +18,10 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import ftpserver
|
||||
import wizard
|
||||
import res_config
|
||||
|
||||
post_load = ftpserver.start_server
|
||||
|
||||
|
|
|
@ -40,7 +40,8 @@ FTP client.
|
|||
'update_xml': [
|
||||
'wizard/ftp_configuration_view.xml',
|
||||
'wizard/ftp_browse_view.xml',
|
||||
'security/ir.model.access.csv'
|
||||
'security/ir.model.access.csv',
|
||||
'res_config_view.xml',
|
||||
],
|
||||
'demo_xml': [],
|
||||
'test': [
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Business Applications
|
||||
# Copyright (C) 2004-2012 OpenERP S.A. (<http://openerp.com>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
from tools import config
|
||||
|
||||
class documnet_ftp_setting(osv.osv_memory):
|
||||
_name = 'knowledge.config.settings'
|
||||
_inherit = 'knowledge.config.settings'
|
||||
_columns = {
|
||||
'document_ftp_url': fields.char('Browse Documents', size=128,
|
||||
help ="""Click the url to browse the documents""", readonly=True),
|
||||
}
|
||||
|
||||
def get_default_ftp_config(self, cr, uid, fields, context=None):
|
||||
action = self.pool.get('ir.model.data').get_object(cr, uid, 'document_ftp', 'action_document_browse')
|
||||
return {'document_ftp_url': action.url}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,15 @@
|
|||
<openerp>
|
||||
<data>
|
||||
<record id="view_document_ftp_configuration" model="ir.ui.view">
|
||||
<field name="name">Knowledge Application</field>
|
||||
<field name="model">knowledge.config.settings</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="base_setup.view_knowledge_configuration"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="module_document_ftp" position="after">
|
||||
<field name="document_ftp_url" widget="url"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
|
@ -25,99 +25,72 @@ class fetchmail_config_settings(osv.osv_memory):
|
|||
""" This wizard can be inherited in conjunction with 'res.config.settings', in order to
|
||||
define fields that configure a fetchmail server.
|
||||
|
||||
It relies on the following convention on a set of fields::
|
||||
It relies on the following convention on the object::
|
||||
|
||||
class my_config_wizard(osv.osv_memory):
|
||||
class my_config_settings(osv.osv_memory):
|
||||
_name = 'my.settings'
|
||||
_inherits = ['res.config.settings', 'fetchmail.config.settings']
|
||||
_inherit = ['res.config.settings', 'fetchmail.config.settings']
|
||||
|
||||
_columns = {
|
||||
'fetchmail_X': fields.boolean(..., fetchmail_model='my.model', fetchmail_name='Blah'),
|
||||
'X_server': fields.char('Server Name', size=256),
|
||||
'X_port': fields.integer('Port'),
|
||||
'X_type': fields.selection(
|
||||
[('pop', 'POP Server'), ('imap', 'IMAP Server'), ('local', 'Local Server')],
|
||||
'Server Type'),
|
||||
'X_is_ssl': fields.boolean('SSL/TLS'),
|
||||
'X_user': fields.char('Username', size=256),
|
||||
'X_password': fields.char('Password', size=1024),
|
||||
'fetchmail_stuff': fields.boolean(..., readonly=True,
|
||||
fetchmail_model='my.stuff', fetchmail_name='Incoming Stuff'),
|
||||
}
|
||||
|
||||
The method ``get_default_fetchmail_servers`` retrieves the current fetchmail configuration
|
||||
for all fields that start with 'fetchmail_'. It looks up configurations that match the
|
||||
given model name (``fetchmail_model``). The method ``set_fetchmail_servers`` updates the
|
||||
fetchmail configurations by following the same conventions. Both methods are called
|
||||
automatically by the methods of the model 'res.config.settings'.
|
||||
def configure_fetchmail_stuff(self, cr, uid, ids, context=None):
|
||||
return self.configure_fetchmail(cr, uid, 'fetchmail_stuff', context)
|
||||
|
||||
The onchange method ``onchange_fetchmail`` can be used to react on changes on the fields
|
||||
'X_type' and 'X_is_ssl'. Its first parameter is the fields' prefix (here 'X').
|
||||
and in the form view::
|
||||
|
||||
<field name="fetchmail_stuff"/>
|
||||
<button type="object" name="configure_fetchmail_stuff"/>
|
||||
|
||||
The method ``get_default_fetchmail`` determines the value of all fields that start
|
||||
with 'fetchmail_'. It looks up fetchmail server configurations that match the given
|
||||
model name (``fetchmail_model``) and are active.
|
||||
|
||||
The button action ``configure_fetchmail_stuff`` is caught by the object, and calls
|
||||
automatically the method ``configure_fetchmail``; it opens the fetchmail server
|
||||
configuration form for the corresponding field.
|
||||
"""
|
||||
_name = 'fetchmail.config.settings'
|
||||
|
||||
def get_default_fetchmail_servers(self, cr, uid, fields, context=None):
|
||||
def get_default_fetchmail(self, cr, uid, fields, context=None):
|
||||
""" determine the value of all fields like 'fetchmail_XXX' """
|
||||
ir_model = self.pool.get('ir.model')
|
||||
fetchmail_server = self.pool.get('fetchmail.server')
|
||||
fetchmail_fields = [f for f in self._columns if f.startswith('fetchmail_')]
|
||||
fetchmail_fields = [f for f in fields if f.startswith('fetchmail_')]
|
||||
res = {}
|
||||
for field in fetchmail_fields:
|
||||
model_name = self._columns[field].fetchmail_model
|
||||
for f in fetchmail_fields:
|
||||
model_name = self._columns[f].fetchmail_model
|
||||
model_id = ir_model.search(cr, uid, [('model', '=', model_name)])[0]
|
||||
server_ids = fetchmail_server.search(cr, uid, [('object_id', '=', model_id), ('state', '=', 'done')])
|
||||
if server_ids:
|
||||
server = fetchmail_server.browse(cr, uid, server_ids[0], context)
|
||||
prefix = field[10:]
|
||||
res.update({
|
||||
field: True,
|
||||
prefix + '_server': server.server,
|
||||
prefix + '_port': server.port,
|
||||
prefix + '_type': server.type,
|
||||
prefix + '_is_ssl': server.is_ssl,
|
||||
prefix + '_user': server.user,
|
||||
prefix + '_password': server.password,
|
||||
})
|
||||
res[f] = bool(server_ids)
|
||||
return res
|
||||
|
||||
def set_fetchmail_servers(self, cr, uid, ids, context):
|
||||
ir_model = self.pool.get('ir.model')
|
||||
fetchmail_server = self.pool.get('fetchmail.server')
|
||||
fetchmail_fields = [f for f in self._columns if f.startswith('fetchmail_')]
|
||||
config = self.browse(cr, uid, ids[0], context)
|
||||
for field in fetchmail_fields:
|
||||
model_name = self._columns[field].fetchmail_model
|
||||
model_id = ir_model.search(cr, uid, [('model', '=', model_name)])[0]
|
||||
server_ids = fetchmail_server.search(cr, uid, [('object_id', '=', model_id), ('state', '=', 'done')])
|
||||
if config[field]:
|
||||
prefix = field[10:]
|
||||
values = {
|
||||
'server': config[prefix + '_server'],
|
||||
'port': config[prefix + '_port'],
|
||||
'type': config[prefix + '_type'],
|
||||
'is_ssl': config[prefix + '_is_ssl'],
|
||||
'user': config[prefix + '_user'],
|
||||
'password': config[prefix + '_password'],
|
||||
}
|
||||
if not server_ids:
|
||||
values.update({
|
||||
'name': getattr(self._columns[field], 'fetchmail_name', model_name),
|
||||
'object_id': model_id,
|
||||
})
|
||||
server_ids = [fetchmail_server.create(cr, uid, values, context=context)]
|
||||
else:
|
||||
server_ids = fetchmail_server.search(cr, uid, [('object_id', '=', model_id)], context=context)
|
||||
fetchmail_server.write(cr, uid, server_ids, values, context=context)
|
||||
fetchmail_server.button_confirm_login(cr, uid, server_ids, context)
|
||||
else:
|
||||
fetchmail_server.set_draft(cr, uid, server_ids, context)
|
||||
|
||||
def onchange_fetchmail(self, cr, uid, ids, prefix, server_type, ssl, context=None):
|
||||
values = {}
|
||||
if server_type == 'pop':
|
||||
values[prefix + '_port'] = ssl and 995 or 110
|
||||
elif server_type == 'imap':
|
||||
values[prefix + '_port'] = ssl and 993 or 143
|
||||
def configure_fetchmail(self, cr, uid, field, context=None):
|
||||
""" open the form view of the fetchmail.server to configure """
|
||||
action = {
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': 'fetchmail.server',
|
||||
'view_mode': 'form',
|
||||
}
|
||||
model_name = self._columns[field].fetchmail_model
|
||||
model_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', model_name)])[0]
|
||||
server_ids = self.pool.get('fetchmail.server').search(cr, uid, [('object_id', '=', model_id)])
|
||||
if server_ids:
|
||||
action['res_id'] = server_ids[0]
|
||||
else:
|
||||
values[prefix + '_server'] = False
|
||||
values[prefix + '_port'] = 0
|
||||
return {'value': values}
|
||||
action['context'] = {
|
||||
'default_name': self._columns[field].fetchmail_name,
|
||||
'default_object_id': model_id,
|
||||
}
|
||||
return action
|
||||
|
||||
def __getattr__(self, name):
|
||||
""" catch calls to 'configure_fetchmail_XXX' """
|
||||
if name.startswith('configure_fetchmail_'):
|
||||
return (lambda cr, uid, ids, context=None:
|
||||
self.configure_fetchmail(cr, uid, name[10:], context))
|
||||
return super(fetchmail_config_settings, self).__getattr__(name)
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -49,7 +49,8 @@
|
|||
<field name="target">inline</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_human_resources_configuration" name="Human Resources" parent="base.menu_config" sequence="8" action="action_human_resources_configuration"/>
|
||||
<menuitem id="menu_human_resources_configuration" name="Human Resources" parent="base.menu_config"
|
||||
sequence="15" action="action_human_resources_configuration"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -29,24 +29,9 @@ class hr_applicant_settings(osv.osv_memory):
|
|||
'module_document_ftp': fields.boolean('Index & Track Documents',
|
||||
help="""Manage your CV's and motivation letter related to all applicants.
|
||||
This installs the module document_ftp."""),
|
||||
'fetchmail_applicants': fields.boolean('Create Applicants from an Email Account',
|
||||
'fetchmail_applicants': fields.boolean('Create Applicants from Incoming Mails', readonly=True,
|
||||
fetchmail_model='hr.applicant', fetchmail_name='Incoming HR Applications',
|
||||
help ="""Allow applicants to send their job application to an email address (jobs@mycompany.com),
|
||||
and create automatically application documents in the system."""),
|
||||
'applicants_server': fields.char('Server', size=256),
|
||||
'applicants_port': fields.integer('Port'),
|
||||
'applicants_type': fields.selection([
|
||||
('pop', 'POP Server'),
|
||||
('imap', 'IMAP Server'),
|
||||
('local', 'Local Server'),
|
||||
], 'Type'),
|
||||
'applicants_is_ssl': fields.boolean('SSL/TLS',
|
||||
help="Connections are encrypted with SSL/TLS through a dedicated port (default: IMAPS=993, POP=995)"),
|
||||
'applicants_user': fields.char('Username', size=256),
|
||||
'applicants_password': fields.char('Password', size=1024),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'applicants_type': 'pop',
|
||||
}
|
||||
|
||||
|
|
|
@ -12,16 +12,9 @@
|
|||
<field name="module_document_ftp"/>
|
||||
<newline/>
|
||||
<field name="fetchmail_applicants"/>
|
||||
<group colspan="2" attrs="{'invisible': [('fetchmail_applicants','=',False)]}">
|
||||
<field name="applicants_server" attrs="{'required': [('fetchmail_applicants','=',True)]}"/>
|
||||
<field name="applicants_type" attrs="{'required': [('fetchmail_applicants','=',True)]}"
|
||||
on_change="onchange_fetchmail('applicants', applicants_type, applicants_is_ssl)"/>
|
||||
<field name="applicants_port" attrs="{'required': [('fetchmail_applicants','=',True)]}"/>
|
||||
<field name="applicants_is_ssl" attrs="{'required': [('fetchmail_applicants','=',True)]}"
|
||||
on_change="onchange_fetchmail('applicants', applicants_type, applicants_is_ssl)"/>
|
||||
<field name="applicants_user" attrs="{'required': [('fetchmail_applicants','=',True)]}"/>
|
||||
<field name="applicants_password" password="True" attrs="{'required': [('fetchmail_applicants','=',True)]}"/>
|
||||
</group>
|
||||
<group colspan="2">
|
||||
<button type="object" name="configure_fetchmail_applicants" string="Configure" icon="gtk-execute"/>
|
||||
</group>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -19,5 +19,6 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
import res_config
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -40,6 +40,7 @@ document and Wiki based Hidden.
|
|||
'security/knowledge_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'knowledge_view.xml',
|
||||
'res_config_view.xml',
|
||||
],
|
||||
'demo_xml': ['knowledge_demo.xml'],
|
||||
'installable': True,
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Business Applications
|
||||
# Copyright (C) 2004-2012 OpenERP S.A. (<http://openerp.com>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import osv, fields
|
||||
|
||||
class knowledge_config_settings(osv.osv_memory):
|
||||
_name = 'knowledge.config.settings'
|
||||
_inherit = 'res.config.settings'
|
||||
_columns = {
|
||||
'module_wiki_faq': fields.boolean('Use a Wiki for Frequently Asked Questions',
|
||||
help="""This installs the module wiki_faq."""),
|
||||
'module_wiki_quality_manual': fields.boolean('Track Quality with a Wiki',
|
||||
help="""This installs the module wiki_quality_manual."""),
|
||||
'module_document': fields.boolean('Document Management',
|
||||
help="""This is a complete document management system, with: user authentication,
|
||||
full document search (but pptx and docx are not supported), and a document dashboard.
|
||||
This installs the module document."""),
|
||||
'module_document_ftp': fields.boolean('Share repositories (FTP)',
|
||||
help="""Access your documents in OpenERP through an FTP interface.
|
||||
This installs the module document_ftp."""),
|
||||
'module_document_webdav': fields.boolean('Share Repositories (WebDAV)',
|
||||
help="""Access your documents in OpenERP through WebDAV.
|
||||
This installs the module document_webdav."""),
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,41 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_knowledge_configuration" model="ir.ui.view">
|
||||
<field name="name">Configure Knowledge</field>
|
||||
<field name="model">knowledge.config.settings</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Configure Knowledge" layout="manual">
|
||||
<div class="oe_form_topbar">
|
||||
<button string="Apply" type="object" name="execute"/>
|
||||
<button string="Cancel" special="cancel"/>
|
||||
</div>
|
||||
<sheet layout="auto">
|
||||
<separator string="Wiki" colspan="4"/>
|
||||
<field name="module_wiki_faq"/>
|
||||
<newline/>
|
||||
<field name="module_wiki_quality_manual"/>
|
||||
|
||||
<separator string="Documents" colspan="4"/>
|
||||
<field name="module_document"/>
|
||||
<newline/>
|
||||
<field name="module_document_ftp"/>
|
||||
<newline/>
|
||||
<field name="module_document_webdav"/>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_knowledge_configuration" model="ir.actions.act_window">
|
||||
<field name="name">Configure Knowledge</field>
|
||||
<field name="res_model">knowledge.config.settings</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
</record>
|
||||
<menuitem id="menu_knowledge_configuration" name="Knowledge" parent="base.menu_config"
|
||||
sequence="19" action="action_knowledge_configuration"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -19,6 +19,6 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
import res_config
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -38,7 +38,8 @@ Contains the installer for marketing-related modules.
|
|||
'update_xml': [
|
||||
'security/marketing_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'marketing_view.xml'
|
||||
'marketing_view.xml',
|
||||
'res_config_view.xml',
|
||||
],
|
||||
'demo_xml': ['marketing_demo.xml'],
|
||||
'installable': True,
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Business Applications
|
||||
# Copyright (C) 2004-2012 OpenERP S.A. (<http://openerp.com>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
|
||||
class marketing_config_settings(osv.osv_memory):
|
||||
_name = 'marketing.config.settings'
|
||||
_inherit = 'res.config.settings'
|
||||
_columns = {
|
||||
'module_marketing_campaign': fields.boolean('Marketing Campaigns',
|
||||
help="""Provides leads automation through marketing campaigns.
|
||||
Campaigns can in fact be defined on any resource, not just CRM leads.
|
||||
This installs the module marketing_campaign."""),
|
||||
'module_marketing_campaign_crm_demo': fields.boolean('Demo Data for Marketing Campaigns',
|
||||
help="""Installs demo data like leads, campaigns and segments for Marketing Campaigns.
|
||||
This installs the module marketing_campaign_crm_demo."""),
|
||||
'module_crm_profiling': fields.boolean('Track Customer Profile to Focus your Campaigns',
|
||||
help="""Allows users to perform segmentation within partners.
|
||||
This installs the module crm_profiling."""),
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,36 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_marketing_configuration" model="ir.ui.view">
|
||||
<field name="name">Configure Marketing</field>
|
||||
<field name="model">marketing.config.settings</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Configure Marketing" layout="manual">
|
||||
<div class="oe_form_topbar">
|
||||
<button string="Apply" type="object" name="execute"/>
|
||||
<button string="Cancel" special="cancel"/>
|
||||
</div>
|
||||
<sheet layout="auto">
|
||||
<separator string="Campaigns" colspan="4"/>
|
||||
<field name="module_marketing_campaign"/>
|
||||
<field name="module_marketing_campaign_crm_demo"/>
|
||||
<newline/>
|
||||
<field name="module_crm_profiling"/>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_marketing_configuration" model="ir.actions.act_window">
|
||||
<field name="name">Configure Marketing</field>
|
||||
<field name="res_model">marketing.config.settings</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_marketing_configuration" name="Marketing" parent="base.menu_config"
|
||||
sequence="17" action="action_marketing_configuration"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -38,7 +38,7 @@
|
|||
</record>
|
||||
|
||||
<menuitem id="base.menu_mrp_config" name="Manufacturing" parent="base.menu_config"
|
||||
sequence="4" action="action_mrp_configuration"/>
|
||||
sequence="8" action="action_mrp_configuration"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
<field name="price_extra" groups="product.group_product_variant"/>
|
||||
</group>
|
||||
|
||||
<group colspan="2" col="2">
|
||||
<group colspan="2" col="2" groups="product.group_stock_packaging">
|
||||
<separator string="Weights" colspan="2"/>
|
||||
<field digits="(14, 3)" name="volume" attrs="{'readonly':[('type','=','service')]}"/>
|
||||
<field name="weight" attrs="{'readonly':[('type','=','service')]}"/>
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
</record>
|
||||
|
||||
<menuitem id="base.menu_project_config" name="Project" parent="base.menu_config"
|
||||
sequence="5" action="action_config_settings"/>
|
||||
sequence="10" action="action_config_settings"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -26,21 +26,7 @@ class project_issue_settings(osv.osv_memory):
|
|||
_inherit = ['project.config.settings', 'fetchmail.config.settings']
|
||||
|
||||
_columns = {
|
||||
'fetchmail_issue': fields.boolean("Create issues from Incoming Mails",
|
||||
fetchmail_model='project.issue', fetchmail_name='Incoming issues',
|
||||
'fetchmail_issue': fields.boolean("Create Issues from Incoming Mails", readonly=True,
|
||||
fetchmail_model='project.issue', fetchmail_name='Incoming Issues',
|
||||
help="""Allows you to configure your incoming mail server, and create issues from incoming emails."""),
|
||||
'issue_server' : fields.char('Server', size=256),
|
||||
'issue_port' : fields.integer('Port'),
|
||||
'issue_type': fields.selection([
|
||||
('pop', 'POP Server'),
|
||||
('imap', 'IMAP Server'),
|
||||
('local', 'Local Server'),
|
||||
], 'Type'),
|
||||
'issue_is_ssl': fields.boolean('SSL/TLS', help="Connections are encrypted with SSL/TLS through a dedicated port (default: IMAPS=993, POP=995)"),
|
||||
'issue_user' : fields.char('Username', size=256),
|
||||
'issue_password' : fields.char('Password', size=1024),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'issue_type': 'pop',
|
||||
}
|
||||
|
|
|
@ -10,13 +10,8 @@
|
|||
<field name="arch" type="xml">
|
||||
<group name="support" position="after">
|
||||
<field name="fetchmail_issue"/>
|
||||
<group colspan="2" attrs="{'invisible': [('fetchmail_issue','=',False)]}">
|
||||
<field name="issue_server" attrs="{'required': [('fetchmail_issue','=',True)]}"/>
|
||||
<field name="issue_type" on_change="onchange_fetchmail('issue', issue_type, issue_is_ssl)" attrs="{'required': [('fetchmail_issue','=',True)]}"/>
|
||||
<field name="issue_port" attrs="{'required': [('fetchmail_issue','=',True)]}"/>
|
||||
<field name="issue_is_ssl" on_change="onchange_fetchmail('issue', issue_type, issue_is_ssl)"/>
|
||||
<field name="issue_user" attrs="{'required': [('fetchmail_issue','=',True)]}"/>
|
||||
<field name="issue_password" password="True" attrs="{'required': [('fetchmail_issue','=',True)]}"/>
|
||||
<group colspan="2">
|
||||
<button type="object" name="configure_fetchmail_issue" string="Configure" icon="gtk-execute"/>
|
||||
</group>
|
||||
</group>
|
||||
</field>
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
</record>
|
||||
|
||||
<menuitem id="menu_purchase_config" name="Purchases" parent="base.menu_config"
|
||||
sequence="2" action="action_purchase_configuration"/>
|
||||
sequence="3" action="action_purchase_configuration"/>
|
||||
|
||||
<record id="view_account_config" model="ir.ui.view">
|
||||
<field name="name">account settings</field>
|
||||
|
|
|
@ -43,7 +43,8 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="base.menu_sale_config" name="Sales" parent="base.menu_config" sequence="1" action="base.action_sale_config"/>
|
||||
<menuitem id="base.menu_sale_config" name="Sales" parent="base.menu_config"
|
||||
sequence="1" action="base.action_sale_config"/>
|
||||
|
||||
<record id="view_account_config" model="ir.ui.view">
|
||||
<field name="name">account settings</field>
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
</record>
|
||||
|
||||
<menuitem id="menu_stock_config_settings" name="Warehouse" parent="base.menu_config"
|
||||
sequence="3" action="action_stock_config_settings"/>
|
||||
sequence="5" action="action_stock_config_settings"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
Loading…
Reference in New Issue