diff --git a/addons/crm/res_config.py b/addons/crm/res_config.py
index 25f42195e1a..5279718481c 100644
--- a/addons/crm/res_config.py
+++ b/addons/crm/res_config.py
@@ -10,17 +10,16 @@ class crm_configuration(osv.TransientModel):
_inherit = ['sale.config.settings', 'fetchmail.config.settings']
_columns = {
- 'group_fund_raising': fields.boolean("Manage Fund Raising",
- implied_group='crm.group_fund_raising',
- help="""Allows you to trace and manage your activities for fund raising."""),
- 'module_crm_claim': fields.boolean("Manage Customer Claims",
- help='Allows you to track your customers/vendors claims and grievances.\n'
- '-This installs the module crm_claim.'),
'generate_sales_team_alias': fields.boolean(
"Automatically generate an email alias at the sales team creation",
help="Odoo will generate an email alias based on the sales team name"),
'alias_prefix': fields.char('Default Alias Name for Leads'),
- 'alias_domain' : fields.char('Alias Domain')
+ 'alias_domain' : fields.char('Alias Domain'),
+ 'group_multi_salesteams': fields.selection([
+ (0, 'One sales team only'),
+ (1, 'Activate multiple sales teams')
+ ], "Multiple Sales Teams",
+ implied_group='base.group_multi_salesteams'),
}
_defaults = {
diff --git a/addons/crm/res_config_view.xml b/addons/crm/res_config_view.xml
index bf3917709bb..d032c543ace 100644
--- a/addons/crm/res_config_view.xml
+++ b/addons/crm/res_config_view.xml
@@ -7,51 +7,37 @@
-
-
-
-
+
+
+
-
-
-
+
+
+ Each sales team has an email alias that
+ could be setup on the sales team form. You
+ can setup a generic email alias to create
+ incoming leads.
+
+
+ @
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
- Odoo allows to automatically create leads
- from incoming emails.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- @
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/crm/security/crm_security.xml b/addons/crm/security/crm_security.xml
index 901560b1776..ef398b6b35a 100644
--- a/addons/crm/security/crm_security.xml
+++ b/addons/crm/security/crm_security.xml
@@ -24,11 +24,6 @@
-
- Manage Fund Raising
-
-
-
diff --git a/addons/delivery/test/delivery_cost.yml b/addons/delivery/test/delivery_cost.yml
index 50177e59cf7..eb59363abf3 100644
--- a/addons/delivery/test/delivery_cost.yml
+++ b/addons/delivery/test/delivery_cost.yml
@@ -84,7 +84,6 @@
assert len(line_ids), "Delivery cost is not Added"
line_data = self.browse(cr ,uid ,line_ids[0] ,context)
assert float_compare(line_data.price_subtotal, 0, precision_digits=2) == 0, "Delivey cost is not correspond."
-
-
I set default delivery policy.
-
diff --git a/addons/event/res_config.py b/addons/event/res_config.py
index cd3967ac4d9..29ce58a72f5 100644
--- a/addons/event/res_config.py
+++ b/addons/event/res_config.py
@@ -6,19 +6,30 @@ class event_config_settings(osv.TransientModel):
_name='event.config.settings'
_inherit='res.config.settings'
_columns = {
- 'module_event_sale': fields.boolean(
- 'Sell events tickets',
+ 'module_event_sale': fields.selection([
+ (0, "All events are free"),
+ (1, 'Allow selling tickets')
+ ], "Tickets",
help='Install the event_sale module'),
- 'module_website_event_track': fields.boolean(
- 'Organize few days event with track, full agenda, own menu in website',
+ 'module_website_event_track': fields.selection([
+ (0, "No mini website per event"),
+ (1, 'Allow tracks, agenda and dedicated menus/website per event')
+ ], "Tracks and Agenda",
help='Install the module website_event_track'),
- 'module_website_event_questions': fields.boolean(
- 'Ask questions to online subscribers',
+ 'module_website_event_questions': fields.selection([
+ (0, "No extra questions on subscriptions"),
+ (1, 'Allow adding extra questions on subscriptions')
+ ], "Subscription Survey",
help='Install the website_event_questions module'),
- 'auto_confirmation': fields.boolean(
- 'Automate events and subscription confirmation', help='Unselect this option to manually manage draft event and draft subscription'),
- 'group_email_scheduling': fields.boolean(
- 'Schedule emails to attendees and subscribers',
+ 'auto_confirmation': fields.selection([
+ (1, 'No validation step on subscription'),
+ (0, "Manually confirm every subscription")
+ ], "Auto Confirmation",
+ help='Unselect this option to manually manage draft event and draft subscription'),
+ 'group_email_scheduling': fields.selection([
+ (0, "No automated emails"),
+ (1, 'Schedule emails to attendees and subscribers')
+ ], "Email Scheduling",
help='You will be able to configure emails, and to schedule them to be automatically sent to the attendees on subscription and/or attendance',
implied_group='event.group_email_scheduling'),
}
diff --git a/addons/event/res_config_view.xml b/addons/event/res_config_view.xml
index 61a76211e67..d69ee115a49 100644
--- a/addons/event/res_config_view.xml
+++ b/addons/event/res_config_view.xml
@@ -12,30 +12,31 @@
or
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/google_calendar/res_config.py b/addons/google_calendar/res_config.py
index fb34d58cbe9..e890a04bad9 100644
--- a/addons/google_calendar/res_config.py
+++ b/addons/google_calendar/res_config.py
@@ -4,7 +4,7 @@ class calendar_config_settings(osv.TransientModel):
_inherit = 'base.config.settings'
_columns = {
- 'google_cal_sync': fields.boolean("Show tutorial to know how to get my 'Client ID' and my 'Client Secret'"),
+ 'google_cal_sync': fields.boolean("Show Tutorial"),
'cal_client_id': fields.char("Client_id"),
'cal_client_secret': fields.char("Client_key"),
'server_uri': fields.char('URI for tuto')
diff --git a/addons/google_calendar/res_config_view.xml b/addons/google_calendar/res_config_view.xml
index b2734955d12..264c8158660 100644
--- a/addons/google_calendar/res_config_view.xml
+++ b/addons/google_calendar/res_config_view.xml
@@ -11,8 +11,8 @@
-
-
+
+
To setup the signin process with Google, first you have to perform the following steps
diff --git a/addons/hr_recruitment/res_config.py b/addons/hr_recruitment/res_config.py
new file mode 100644
index 00000000000..ddb2ecee27a
--- /dev/null
+++ b/addons/hr_recruitment/res_config.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from openerp import SUPERUSER_ID
+from openerp.osv import fields, osv
+
+
+class hr_applicant_settings(osv.TransientModel):
+ _name = 'hr.recruitment.config.settings'
+ _inherit = ['res.config.settings', 'fetchmail.config.settings']
+
+ _columns = {
+ 'module_document': fields.selection([
+ (0, "Do not manage CVs and motivation letter"),
+ (1, 'Allow the automatic indexation of resumes')
+ ], "Resumes",
+ help='Manage your CV\'s and motivation letter related to all applicants.\n'
+ '-This installs the module document_ftp. This will install the knowledge management module in order to allow you to search using specific keywords through the content of all documents (PDF, .DOCx...)'),
+ 'alias_prefix': fields.char('Default Alias Name for Jobs'),
+ 'alias_domain': fields.char('Alias Domain'),
+ }
+
+ _defaults = {
+ 'alias_domain': lambda self, cr, uid, context: self.pool["ir.config_parameter"].get_param(cr, uid, "mail.catchall.domain", context=context),
+ }
+
+ def _find_default_job_alias_id(self, cr, uid, context=None):
+ alias_id = self.pool['ir.model.data'].xmlid_to_res_id(cr, uid, 'hr_recruitment.mail_alias_jobs')
+ if not alias_id:
+ alias_ids = self.pool['mail.alias'].search(
+ cr, uid, [
+ ('alias_model_id.model', '=', 'hr.applicant'),
+ ('alias_force_thread_id', '=', False),
+ ('alias_parent_model_id.model', '=', 'hr.job'),
+ ('alias_parent_thread_id', '=', False),
+ ('alias_defaults', '=', '{}')
+ ], context=context)
+ alias_id = alias_ids and alias_ids[0] or False
+ return alias_id
+
+ def get_default_alias_prefix(self, cr, uid, ids, context=None):
+ alias_name = False
+ alias_id = self._find_default_job_alias_id(cr, uid, context=context)
+ if alias_id:
+ alias_name = self.pool['mail.alias'].browse(cr, uid, alias_id, context=context).alias_name
+ return {'alias_prefix': alias_name}
+
+ def set_default_alias_prefix(self, cr, uid, ids, context=None):
+ mail_alias = self.pool.get('mail.alias')
+ for record in self.browse(cr, uid, ids, context=context):
+ alias_id = self._find_default_job_alias_id(cr, uid, context=context)
+ if not alias_id:
+ create_ctx = dict(context, alias_model_name='hr.applicant', alias_parent_model_name='hr.job')
+ alias_id = self.pool['mail.alias'].create(cr, uid, {'alias_name': record.alias_prefix}, context=create_ctx)
+ else:
+ mail_alias.write(cr, uid, alias_id, {'alias_name': record.alias_prefix}, context=context)
+ return True
diff --git a/addons/hr_recruitment/views/hr_recruitment_config_settings_views.xml b/addons/hr_recruitment/views/hr_recruitment_config_settings_views.xml
index dbe8c4d9aa2..57ee28c0175 100644
--- a/addons/hr_recruitment/views/hr_recruitment_config_settings_views.xml
+++ b/addons/hr_recruitment/views/hr_recruitment_config_settings_views.xml
@@ -20,18 +20,18 @@
-
+
-
-
+
+
+
@
-
diff --git a/addons/mass_mailing/models/res_config.py b/addons/mass_mailing/models/res_config.py
index 235798e6b27..c422d398a48 100644
--- a/addons/mass_mailing/models/res_config.py
+++ b/addons/mass_mailing/models/res_config.py
@@ -8,8 +8,10 @@ class MassMailingConfiguration(osv.TransientModel):
_inherit = 'res.config.settings'
_columns = {
- 'group_mass_mailing_campaign': fields.boolean(
- 'Manage Mass Mailing using Campaign',
+ 'group_mass_mailing_campaign': fields.selection([
+ (0, "Do not organize and schedule mail campaigns (easy)"),
+ (1, "Allow using marketing campaigns (advanced)")
+ ], "Campaigns",
implied_group='mass_mailing.group_mass_mailing_campaign',
help="""Manage mass mailign using Campaigns"""),
}
diff --git a/addons/mass_mailing/views/res_config.xml b/addons/mass_mailing/views/res_config.xml
index 00b9e6445af..901f692f590 100644
--- a/addons/mass_mailing/views/res_config.xml
+++ b/addons/mass_mailing/views/res_config.xml
@@ -14,10 +14,9 @@
-
+
-
-
+
diff --git a/addons/mrp/res_config.py b/addons/mrp/res_config.py
index b25b931220f..6d10c86ee3f 100644
--- a/addons/mrp/res_config.py
+++ b/addons/mrp/res_config.py
@@ -9,7 +9,16 @@ class mrp_config_settings(osv.osv_memory):
_inherit = 'res.config.settings'
_columns = {
- 'module_mrp_repair': fields.boolean("Manage repairs of products ",
+ 'group_product_variant': fields.selection([
+ (0, "No variants on products"),
+ (1, 'Products can have several attributes, defining variants (Example: size, color,...)')
+ ], "Product Variants",
+ help='Work with product variant allows you to define some variant of the same products, an ease the product management in the ecommerce for example',
+ implied_group='product.group_product_variant'),
+ 'module_mrp_repair': fields.selection([
+ (0, "Do not manage product repairs"),
+ (1, "Manage product repairs")
+ ], "Repairs",
help='Allows to manage all product repairs.\n'
'* Add/remove products in the reparation\n'
'* Impact for stocks\n'
@@ -18,23 +27,32 @@ class mrp_config_settings(osv.osv_memory):
'* Repair quotation report\n'
'* Notes for the technician and for the final customer.\n'
'-This installs the module mrp_repair.'),
- 'module_mrp_operations': fields.boolean("Allow detailed planning of work order",
+ 'module_mrp_operations': fields.selection([
+ (0, "Do not use a planning for the work orders "),
+ (1, "Allow detailed planning of work orders")
+ ], "Work Order Planning",
help='This allows to add state, date_start,date_stop in production order operation lines (in the "Work Centers" tab).\n'
'-This installs the module mrp_operations.'),
- 'module_mrp_byproduct': fields.boolean("Produce several products from one manufacturing order",
+ 'module_mrp_byproduct': fields.selection([
+ (0, "No by-products in bills of materials (A + B --> C)"),
+ (1, "Bills of materials may produce residual products (A + B --> C + D)")
+ ], "By-Products",
help='You can configure by-products in the bill of material.\n'
'Without this module: A + B + C -> D.\n'
'With this module: A + B + C -> D + E.\n'
'-This installs the module mrp_byproduct.'),
- 'group_mrp_routings': fields.boolean("Manage Work Order Operations and work orders ",
+ 'group_mrp_routings': fields.selection([
+ (0, "Manage production by manufacturing orders"),
+ (1, "Manage production by work orders")
+ ], "Routings",
implied_group='mrp.group_mrp_routings',
help='Work Order Operations allow you to create and manage the manufacturing operations that should be followed '
'within your work centers in order to produce a product. They are attached to bills of materials '
'that will define the required raw materials.'),
- 'group_mrp_properties': fields.boolean("Allow several bill of materials per products using properties",
- implied_group='product.group_mrp_properties',
- help="""The selection of the right Bill of Material to use will depend on the properties specified on the sales order and the Bill of Material."""),
- 'group_rounding_efficiency': fields.boolean("Manage rounding and efficiency of BoM components",
+ 'group_rounding_efficiency': fields.selection([
+ (0, "No rounding and efficiency on bills of materials"),
+ (1, "Manage rounding and efficiency of bills of materials components")
+ ], "Rounding efficiency",
implied_group='mrp.group_rounding_efficiency',
help="""Allow to manage product rounding on quantity and product efficiency during production process"""),
}
diff --git a/addons/mrp/res_config_view.xml b/addons/mrp/res_config_view.xml
index 471a46f6883..753b3332f78 100644
--- a/addons/mrp/res_config_view.xml
+++ b/addons/mrp/res_config_view.xml
@@ -25,48 +25,36 @@
-
+
-
-
-
-
-
Notes
diff --git a/addons/note_pad/__openerp__.py b/addons/note_pad/__openerp__.py
index fadb83bd6f5..98478ac6dc3 100644
--- a/addons/note_pad/__openerp__.py
+++ b/addons/note_pad/__openerp__.py
@@ -25,5 +25,5 @@ Use for update your text memo in real time with the following user that you invi
],
'installable': True,
'application': False,
- 'auto_install': False,
+ 'auto_install': True,
}
diff --git a/addons/point_of_sale/res_config.py b/addons/point_of_sale/res_config.py
index 00ce23a7e58..0f337b2a9a6 100644
--- a/addons/point_of_sale/res_config.py
+++ b/addons/point_of_sale/res_config.py
@@ -5,10 +5,19 @@ class pos_configuration(osv.TransientModel):
_name = 'pos.config.settings'
_columns = {
- 'module_pos_restaurant': fields.boolean("Use restaurant extensions",
+ 'module_pos_restaurant': fields.selection([
+ (0, "Point of sale for shops"),
+ (1, "Restaurant: activate table management")
+ ], "Restaurant",
help='This module adds several restaurant features to the Point of Sale: \n\n- Bill Printing: Allows you to print a receipt before the order is paid \n\n- Bill Splitting: Allows you to split an order into different orders \n\n- Kitchen Order Printing: allows you to print orders updates to kitchen or bar printers'),
- 'module_pos_loyalty': fields.boolean("Use loyalty programs",
+ 'module_pos_loyalty': fields.selection([
+ (0, "No loyalty programns"),
+ (1, "Use loyalty programs")
+ ], "Loyalty",
help='Allows you to define a loyalty program in the point of sale, where the customers earn loyalty points and get rewards'),
- 'module_pos_discount': fields.boolean("Allow global discounts on point of sale orders",
+ 'module_pos_discount': fields.selection([
+ (0, "Allow discounts on order lines only"),
+ (1, "Allow global discounts")
+ ], "Discount",
help='Allows the cashier to quickly give a percentage sale discount for all the sales order to a customer'),
}
diff --git a/addons/point_of_sale/res_config_view.xml b/addons/point_of_sale/res_config_view.xml
index 8727953268b..4a7757ec033 100644
--- a/addons/point_of_sale/res_config_view.xml
+++ b/addons/point_of_sale/res_config_view.xml
@@ -13,20 +13,19 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/procurement_jit/__openerp__.py b/addons/procurement_jit/__openerp__.py
index 83ef9fd982f..08da295a41a 100644
--- a/addons/procurement_jit/__openerp__.py
+++ b/addons/procurement_jit/__openerp__.py
@@ -27,5 +27,5 @@ In that case, you can not use priorities any more on the different picking.
'demo': [],
'test': ['test/procurement_jit.yml'],
'installable': True,
- 'auto_install': False,
+ 'auto_install': True,
}
diff --git a/addons/product/res_config_view.xml b/addons/product/res_config_view.xml
index 7dd896d38f3..8492c10ae9f 100644
--- a/addons/product/res_config_view.xml
+++ b/addons/product/res_config_view.xml
@@ -15,15 +15,6 @@
-
-
-
-
-
-
-
-
-
diff --git a/addons/project/res_config.py b/addons/project/res_config.py
index 21c189f1e36..9bf28db4e8b 100644
--- a/addons/project/res_config.py
+++ b/addons/project/res_config.py
@@ -9,52 +9,55 @@ class project_configuration(osv.osv_memory):
_inherit = 'res.config.settings'
_columns = {
- 'module_sale_service': fields.boolean('Generate tasks from sale orders',
+ 'module_sale_service': fields.selection([
+ (0, "No automatic task creation"),
+ (1, 'Generate tasks from sale orders')
+ ], "Sale Service",
help='This feature automatically creates project tasks from service products in sale orders. '
'In order to make it work, the product has to be a service and \'Create Task Automatically\' '
'has to be flagged on the procurement tab in the product form.\n'
'-This installs the module sale_service.'),
- 'module_pad': fields.boolean("Use integrated collaborative note pads on task",
+ 'module_pad': fields.selection([
+ (0, "Task description is a plain text"),
+ (1, "Collaborative rich text on task description")
+ ], "Pads",
help='Lets the company customize which Pad installation should be used to link to new pads '
'(for example: http://ietherpad.com/).\n'
'-This installs the module pad.'),
- 'module_project_timesheet': fields.boolean("Record timesheet lines per tasks",
+ 'module_project_timesheet': fields.selection([
+ (0, "Do not record timesheets on tasks"),
+ (1, "Record timesheet lines per tasks")
+ ], "Timesheets on Project",
help='This allows you to transfer the entries under tasks defined for Project Management to '
'the timesheet line entries for particular date and user, with the effect of creating, '
'editing and deleting either ways.\n'
'-This installs the module project_timesheet.'),
- 'module_project_issue': fields.boolean("Track issues and bugs",
- help='Provides management of issues/bugs in projects.\n'
- '-This installs the module project_issue.'),
- 'module_rating_project': fields.boolean('Allow customers to rate provided services',
+ 'module_rating_project': fields.selection([
+ (0, "No customer rating"),
+ (1, 'Allow activating customer rating on projects, at issue completion')
+ ], "Rating",
help="This allows customers to give rating on provided services"),
- 'time_unit': fields.many2one('product.uom', 'Working time unit', required=True,
- help='This will set the unit of measure used in projects and tasks.\n'
- 'Changing the unit will only impact new entries.'),
- 'module_project_issue_sheet': fields.boolean("Invoice working time on issues",
+ 'module_project_issue_sheet': fields.selection([
+ (0, "Do not track working hours on issues"),
+ (1, "Activate timesheets on issues")
+ ], "Timesheets Invoicing",
help='Provides timesheet support for the issues/bugs management in project.\n'
'-This installs the module project_issue_sheet.'),
- 'group_tasks_work_on_tasks': fields.boolean("Log work activities on tasks",
- implied_group='project.group_tasks_work_on_tasks',
- help="Allows you to compute work on tasks."),
- 'group_time_work_estimation_tasks': fields.boolean("Manage time estimation on tasks",
+ 'group_time_work_estimation_tasks': fields.selection([
+ (0, "Do not estimate working time on tasks"),
+ (1, "Manage time estimation on tasks")
+ ], "Time Work Estimation",
implied_group='project.group_time_work_estimation_tasks',
help="Allows you to compute Time Estimation on tasks."),
- 'generate_project_alias': fields.boolean("Automatically generate an email alias at the project creation",
+ 'generate_project_alias': fields.selection([
+ (0, "Do not create an email alias automatically"),
+ (1, "Automatically generate an email alias at the project creation")
+ ], "Project Alias",
help="Odoo will generate an email alias at the project creation from project name."),
}
- def get_default_time_unit(self, cr, uid, fields, context=None):
- user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- return {'time_unit': user.company_id.project_time_mode_id.id}
-
- def set_time_unit(self, cr, uid, ids, context=None):
- config = self.browse(cr, uid, ids[0], context)
- user = self.pool.get('res.users').browse(cr, uid, uid, context)
- user.company_id.write({'project_time_mode_id': config.time_unit.id})
-
- def onchange_time_estimation_project_timesheet(self, cr, uid, ids, group_time_work_estimation_tasks, module_project_timesheet):
- if group_time_work_estimation_tasks or module_project_timesheet:
+ def onchange_time_estimation_project_timesheet(self, cr, uid, ids, group_time_work_estimation_tasks):
+ if group_time_work_estimation_tasks:
return {'value': {'group_tasks_work_on_tasks': True}}
return {}
diff --git a/addons/project/res_config_view.xml b/addons/project/res_config_view.xml
index 7547bb90161..03d9e4c63f6 100644
--- a/addons/project/res_config_view.xml
+++ b/addons/project/res_config_view.xml
@@ -25,65 +25,32 @@
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
+
+
-
-
-
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/addons/project_timesheet/__init__.py b/addons/project_timesheet/__init__.py
index 3dcd2da8d26..9fddfa9fa98 100644
--- a/addons/project_timesheet/__init__.py
+++ b/addons/project_timesheet/__init__.py
@@ -3,3 +3,4 @@
import project_timesheet
import report
+import res_config
\ No newline at end of file
diff --git a/addons/project_timesheet/__openerp__.py b/addons/project_timesheet/__openerp__.py
index e6b4c6961ec..0706b91db29 100644
--- a/addons/project_timesheet/__openerp__.py
+++ b/addons/project_timesheet/__openerp__.py
@@ -16,13 +16,14 @@ with the effect of creating, editing and deleting either ways.
'author': 'OpenERP SA',
'website': 'https://www.odoo.com/page/project-management',
'images': ['images/invoice_task_work.jpeg', 'images/my_timesheet.jpeg', 'images/working_hour.jpeg'],
- 'depends': ['resource', 'project', 'sale_contract', 'procurement'],
+ 'depends': ['resource', 'project', 'sale_contract'],
'data': [
'security/ir.model.access.csv',
'security/project_timesheet_security.xml',
'report/project_report_view.xml',
'project_timesheet_view.xml',
'project_dashboard.xml',
+ 'res_config_view.xml',
],
'demo': ['project_timesheet_demo.xml'],
'test': [
diff --git a/addons/project_timesheet/res_config.py b/addons/project_timesheet/res_config.py
new file mode 100644
index 00000000000..0feae74ff4e
--- /dev/null
+++ b/addons/project_timesheet/res_config.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from openerp.osv import fields, osv
+from openerp.tools.translate import _
+
+class project_configuration(osv.osv_memory):
+ _name = 'project.config.settings'
+ _inherit = 'project.config.settings'
+
+ _columns = {
+ 'group_tasks_work_on_tasks': fields.selection([
+ (0, "Do not log work activities on task"),
+ (1, "Log work activities on tasks")
+ ], "Activity Log",
+ implied_group='project.group_tasks_work_on_tasks',
+ help="Allows you to compute work on tasks."),
+ }
\ No newline at end of file
diff --git a/addons/project_timesheet/res_config_view.xml b/addons/project_timesheet/res_config_view.xml
new file mode 100644
index 00000000000..55819167846
--- /dev/null
+++ b/addons/project_timesheet/res_config_view.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ project settings
+ project.config.settings
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/purchase/res_config.py b/addons/purchase/res_config.py
index c4d7a44387c..cf45fe70f56 100644
--- a/addons/purchase/res_config.py
+++ b/addons/purchase/res_config.py
@@ -9,40 +9,54 @@ class purchase_config_settings(osv.osv_memory):
_inherit = 'res.config.settings'
_columns = {
+ 'group_product_variant': fields.selection([
+ (0, "No variants on products"),
+ (1, 'Products can have several attributes, defining variants (Example: size, color,...)')
+ ], "Product Variants",
+ help='Work with product variant allows you to define some variant of the same products, an ease the product management in the ecommerce for example',
+ implied_group='product.group_product_variant'),
'default_invoice_method': fields.selection(
[('manual', 'Control vendor bill on purchase order line'),
('picking', 'Control vendor bill on incoming shipments'),
('order', 'Control vendor bill on a pregenerated draft invoice'),
], 'Default invoicing control method', required=True, default_model='purchase.order'),
- 'group_purchase_pricelist':fields.boolean("Manage pricelist per vendor",
+ 'group_purchase_pricelist':fields.selection([
+ (0, 'Set a fixed cost price on each product'),
+ (1, 'Use pricelists to adapt your price per vendors or products')
+ ], "Pricelists",
implied_group='product.group_purchase_pricelist',
help='Allows to manage different prices based on rules per category of vendor.\n'
'Example: 10% for retailers, promotion of 5 EUR on this product, etc.'),
- 'group_uom':fields.boolean("Manage different units of measure for products",
+ 'group_uom':fields.selection([
+ (0, 'Products have only one unit of measure (easier)'),
+ (1, 'Some products may be sold/puchased in different unit of measures (advanced)')
+ ], "Unit of Measures",
implied_group='product.group_uom',
help="""Allows you to select and maintain different units of measure for products."""),
- 'group_costing_method':fields.boolean("Use 'Real Price' and 'Average' costing methods.",
+ 'group_costing_method':fields.selection([
+ (0, 'Set a fixed cost price on each product'),
+ (1, "Use a 'Fixed', 'Real' or 'Average' price costing method")
+ ], "Costing Methods",
implied_group='stock_account.group_inventory_valuation',
help="""Allows you to compute product cost price based on average cost."""),
- 'module_warning': fields.boolean("Alerts by products or vendor",
- help='Allow to configure notification on products and trigger them when a user wants to purchase a given product or a given vendor.\n'
- 'Example: Product: this product is deprecated, do not purchase more than 5.\n'
- 'Vendor: don\'t forget to ask for an express delivery.'),
- 'module_purchase_double_validation': fields.boolean("Force two levels of approvals",
+ 'module_purchase_double_validation': fields.selection([
+ (0, 'Confirm purchase orders in one step'),
+ (1, 'Get 2 levels of approvals to confirm a purchase order')
+ ], "Levels of Approvals",
help='Provide a double validation mechanism for purchases exceeding minimum amount.\n'
'-This installs the module purchase_double_validation.'),
- 'module_purchase_requisition': fields.boolean("Manage calls for tenders",
+ 'module_purchase_requisition': fields.selection([
+ (0, 'Purchase propositions trigger draft purchase orders to a single supplier'),
+ (1, 'Allow using call for tenders to get quotes from multiple suppliers (advanced)')
+ ], "Calls for Tenders",
help="""Calls for tenders are used when you want to generate requests for quotations to several vendors for a given set of products.
- You can configure per product if you directly do a Request for Quotation
- to one vendor or if you want a Call for Tenders to compare offers from several vendors."""),
- 'group_advance_purchase_requisition': fields.boolean("Choose from several bids in a call for tenders",
- implied_group='purchase.group_advance_bidding',
- help="""In the process of a public tendering, you can compare the tender lines and choose for each requested product which quantity you will buy from each bid."""),
- 'group_analytic_account_for_purchases': fields.boolean('Analytic accounting for purchases',
- implied_group='purchase.group_analytic_accounting',
- help="Allows you to specify an analytic account on purchase order lines."),
- 'module_stock_dropshipping': fields.boolean("Manage dropshipping",
- help='\nCreates the dropship route and add more complex tests'
+ You can configure per product if you directly do a Request for Quotation
+ to one vendor or if you want a Call for Tenders to compare offers from several vendors."""),
+ 'module_stock_dropshipping': fields.selection([
+ (0, 'Suppliers always deliver to your warehouse(s)'),
+ (1, "Allow suppliers to deliver directly to your customers")
+ ], "Dropshipping",
+ help='\nCreates the dropship Route and add more complex tests'
'-This installs the module stock_dropshipping.'),
}
diff --git a/addons/purchase/res_config_view.xml b/addons/purchase/res_config_view.xml
index e8cced12c64..1f92efc1178 100644
--- a/addons/purchase/res_config_view.xml
+++ b/addons/purchase/res_config_view.xml
@@ -32,55 +32,41 @@
-
+
diff --git a/addons/sale/res_config.py b/addons/sale/res_config.py
index 20153d61712..abd574d1938 100644
--- a/addons/sale/res_config.py
+++ b/addons/sale/res_config.py
@@ -13,77 +13,67 @@ class sale_configuration(osv.TransientModel):
_inherit = 'sale.config.settings'
_columns = {
- 'timesheet': fields.boolean('Prepare invoices based on timesheets',
- help='For modifying account analytic view to show important data to project manager of services companies.'
- 'You can also view the report of account analytic summary user-wise as well as month wise.\n'
- '-This installs the module sale_contract.'),
- 'module_sale_contract': fields.boolean('Use contracts management',
+ 'group_product_variant': fields.selection([
+ (0, "No variants on products"),
+ (1, 'Products can have several attributes, defining variants (Example: size, color,...)')
+ ], "Product Variants",
+ help='Work with product variant allows you to define some variant of the same products, an ease the product management in the ecommerce for example',
+ implied_group='product.group_product_variant'),
+ 'module_sale_contract': fields.selection([
+ (0, 'Sell based on sales order only'),
+ (1, 'Activate contract management to track costs and revenues')
+ ], "Contracts",
help='Allows to define your customer contracts conditions: invoicing '
'method (fixed price, on timesheet, advance invoice), the exact pricing '
'(650€/day for a developer), the duration (one year support contract).\n'
'You will be able to follow the progress of the contract and invoice automatically.\n'
'-It installs the sale_contract module.'),
- 'group_sale_pricelist':fields.boolean("Use pricelists to adapt your price per customers",
+ 'group_sale_pricelist':fields.selection([
+ (0, 'Set a fixed sale price on each product'),
+ (1, 'Use pricelists to adapt your price per customers or products')
+ ], "Pricelists",
implied_group='product.group_sale_pricelist',
help="""Allows to manage different prices based on rules per category of customers.
-Example: 10% for retailers, promotion of 5 EUR on this product, etc."""),
- 'group_uom':fields.boolean("Allow using different units of measure",
+ Example: 10% for retailers, promotion of 5 EUR on this product, etc."""),
+ 'group_uom':fields.selection([
+ (0, 'Products have only one unit of measure (easier)'),
+ (1, 'Some products may be sold/purchased in different unit of measures (advanced)')
+ ], "Unit of Measures",
implied_group='product.group_uom',
help="""Allows you to select and maintain different units of measure for products."""),
- 'group_discount_per_so_line': fields.boolean("Allow setting a discount on the sales order lines",
- implied_group='sale.group_discount_per_so_line',
- help="Allows you to apply some discount per sales order line."),
- 'group_display_incoterm':fields.boolean("Display incoterms on the printed sale orders and invoices reports",
+ 'group_discount_per_so_line': fields.selection([
+ (0, 'No discount on sales order lines, global discount only'),
+ (1, 'Allow discounts on sales order lines')
+ ], "Discount",
+ implied_group='sale.group_discount_per_so_line'),
+ 'group_display_incoterm':fields.selection([
+ (0, 'No incoterm on reports'),
+ (1, 'Show incoterms on sale orders and invoices')
+ ], "Incoterms",
implied_group='sale.group_display_incoterm',
help="The printed reports will display the incoterms for the sale orders and the related invoices"),
- 'module_warning': fields.boolean("Allow configuring alerts by customer or products",
- help='Allow to configure notification on products and trigger them when a user wants to sell a given product or a given customer.\n'
- 'Example: Product: this product is deprecated, do not purchase more than 5.\n'
- 'Vendor: don\'t forget to ask for an express delivery.'),
- 'module_sale_margin': fields.boolean("Display margins on sales orders",
- help='This adds the \'Margin\' on sales order.\n'
- 'This gives the profitability by calculating the difference between the Unit Price and Cost Price.\n'
- '-This installs the module sale_margin.'),
- 'module_sale_layout': fields.boolean("Allow to categorize sale order lines",
- help='Allows to create categories to structure lines in pdf reports.\n'
- '-This installs the module sale_layout.'),
- 'module_website_quote': fields.boolean("Allow online quotations and templates",
- help='This adds the online quotation'),
- 'module_sale_journal': fields.boolean("Allow batch invoicing of delivery orders through journals",
- help='Allows you to categorize your sales and deliveries (picking lists) between different journals, '
- 'and perform batch operations on journals.\n'
- '-This installs the module sale_journal.'),
- 'module_analytic_user_function': fields.boolean("One employee can have different roles per contract",
- help='Allows you to define what is the default function of a specific user on a given account.\n'
- 'This is mostly used when a user encodes his timesheet. The values are retrieved and the fields are auto-filled. '
- 'But the possibility to change these values is still available.\n'
- '-This installs the module analytic_user_function.'),
- 'module_project': fields.boolean("Project"),
- 'module_sale_stock': fields.boolean("Trigger delivery orders automatically from sales orders",
- help='Allows you to Make Quotation, Sale Order using different Order policy and Manage Related Stock.\n'
- '-This installs the module sale_stock.'),
- 'group_sale_delivery_address': fields.boolean("Allow a different address for delivery and invoicing ",
- implied_group='sale.group_delivery_invoice_address',
- help="Allows you to specify different delivery and invoice addresses on a sales order."),
+ 'module_sale_margin': fields.selection([
+ (0, 'Salespeople do not need to view margins when quoting'),
+ (1, 'Display margins on quotations and sales orders')
+ ], "Margins"),
+ 'module_website_sale_digital': fields.selection([
+ (0, 'No digital products'),
+ (1, 'Allows to sell downloadable content from the portal')
+ ], "Digital Products"),
+ 'module_website_quote': fields.selection([
+ (0, 'Print quotes or send by email'),
+ (1, 'Send online quotations based on templates (advanced)')
+ ], "Online Quotations"),
+ 'group_sale_delivery_address': fields.selection([
+ (0, "Invoicing and shipping addresses are always the same (Example: services companies)"),
+ (1, 'Have 3 fields on sales orders: customer, invoice address, delivery address')
+ ], "Customer Addresses",
+ implied_group='sale.group_delivery_invoice_address'),
}
def set_sale_defaults(self, cr, uid, ids, context=None):
return {}
- def onchange_task_work(self, cr, uid, ids, task_work, context=None):
- if not task_work:
- return {'value': {}}
- return {'value': {
- 'module_project_timesheet': task_work,
- 'module_sale_service': task_work,
- }}
-
- def onchange_timesheet(self, cr, uid, ids, timesheet, context=None):
- return {'value': {
- 'timesheet': timesheet,
- 'module_sale_contract': timesheet,
- }}
-
class account_config_settings(osv.osv_memory):
_inherit = 'account.config.settings'
_columns = {
diff --git a/addons/sale/res_config_view.xml b/addons/sale/res_config_view.xml
index 2cf95f12ec0..8100b43fd0b 100644
--- a/addons/sale/res_config_view.xml
+++ b/addons/sale/res_config_view.xml
@@ -6,102 +6,58 @@
sale.config.settings
-
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
-
-
-
- Purchase and Warehouse Management will be installed
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
- Use contract to be able to manage your services with
- multiple invoicing as part of the same contract with
- your customer.
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/sale_contract/models/res_config.py b/addons/sale_contract/models/res_config.py
index 2de8c3ea7d5..a77882b3fb2 100644
--- a/addons/sale_contract/models/res_config.py
+++ b/addons/sale_contract/models/res_config.py
@@ -9,27 +9,9 @@ class sale_configuration(osv.osv_memory):
_inherit = 'sale.config.settings'
_columns = {
- 'group_template_required': fields.boolean("Mandatory use of templates.",
- implied_group='sale_contract.group_template_required',
- help="Allows you to set the template field as required when creating an analytic account or a contract."),
- 'time_unit': fields.many2one('product.uom', 'The default working time unit.'),
+ 'group_template_required': fields.selection([
+ (0, "Optional contract templates"),
+ (1, "Force setting a contract templates for every contract")
+ ], "Contract Templates",
+ implied_group='sale_contract.group_template_required'),
}
-
- def default_get(self, cr, uid, fields, context=None):
- ir_model_data = self.pool.get('ir.model.data')
- res = super(sale_configuration, self).default_get(cr, uid, fields, context)
- if res.get('module_project'):
- user = self.pool.get('res.users').browse(cr, uid, uid, context)
- res['time_unit'] = user.company_id.project_time_mode_id.id
- res['timesheet'] = res.get('module_sale_contract')
- return res
-
- def set_sale_defaults(self, cr, uid, ids, context=None):
- ir_model_data = self.pool.get('ir.model.data')
- wizard = self.browse(cr, uid, ids)[0]
-
- if wizard.module_project and wizard.time_unit:
- user = self.pool.get('res.users').browse(cr, uid, uid, context)
- user.company_id.write({'project_time_mode_id': wizard.time_unit.id})
- res = super(sale_configuration, self).set_sale_defaults(cr, uid, ids, context)
- return res
diff --git a/addons/sale_contract/views/res_config_view.xml b/addons/sale_contract/views/res_config_view.xml
index e65f22aa4e5..9b8821168d3 100644
--- a/addons/sale_contract/views/res_config_view.xml
+++ b/addons/sale_contract/views/res_config_view.xml
@@ -7,10 +7,10 @@
sale.config.settings
-
+
+
-
-
+
diff --git a/addons/sale_service/__openerp__.py b/addons/sale_service/__openerp__.py
index 0255b150d37..ec893208031 100644
--- a/addons/sale_service/__openerp__.py
+++ b/addons/sale_service/__openerp__.py
@@ -29,10 +29,10 @@ completed.
""",
'author': 'OpenERP SA',
'website': 'https://www.odoo.com/page/crm',
- 'depends': ['project', 'procurement', 'sale', 'procurement_jit'],
+ 'depends': ['project', 'sale'],
'data': ['views/sale_service_view.xml'],
'demo': ['demo/sale_service_demo.xml'],
'test': ['test/project_task_procurement.yml'],
'installable': True,
- 'auto_install': False,
+ 'auto_install': True,
}
diff --git a/addons/sale_stock/res_config.py b/addons/sale_stock/res_config.py
index d4b5038cfe4..a26fb84ba20 100644
--- a/addons/sale_stock/res_config.py
+++ b/addons/sale_stock/res_config.py
@@ -10,49 +10,40 @@ class sale_configuration(osv.osv_memory):
_inherit = 'sale.config.settings'
_columns = {
- 'group_invoice_deli_orders': fields.boolean('Generate invoices after and based on delivery orders',
- implied_group='sale_stock.group_invoice_deli_orders',
- help="To allow your salesman to make invoices for Delivery Orders using the menu 'Deliveries to Invoice'."),
- 'task_work': fields.boolean("Prepare invoices based on task's activities",
- help='Lets you transfer the entries under tasks defined for Project Management to '
- 'the Timesheet line entries for particular date and particular user with the effect of creating, editing and deleting either ways '
- 'and to automatically creates project tasks from procurement lines.\n'
- '-This installs the modules project_timesheet and sale_service.'),
- 'default_order_policy': fields.selection(
- [('manual', 'Create invoice on sales order'), ('picking', 'Create invoice on deliveries')],
- 'The default invoicing method is', default_model='sale.order',
- help="You can generate invoices based on sales orders or based on shippings."),
- 'module_delivery': fields.boolean('Allow adding shipping costs',
- help='Allows you to add delivery methods in sales orders and delivery orders.\n'
- 'You can define your own carrier and delivery grids for prices.\n'
- '-This installs the module delivery.'),
- 'default_picking_policy' : fields.boolean("Deliver all at once when all products are available.",
- help = "Sales order by default will be configured to deliver all products at once instead of delivering each product when it is available. This may have an impact on the shipping price."),
- 'group_mrp_properties': fields.boolean('Product properties on order lines',
+ 'default_order_policy': fields.selection([
+ ('manual', 'Invoice based on sales order'),
+ ('picking', 'Invoice based on delivery orders')],
+ 'Invoicing Method', default_model='sale.order'),
+ 'module_delivery': fields.selection([
+ (0, 'No shipping costs on sales orders'),
+ (1, 'Allow adding shipping costs')
+ ], "Shipping"),
+ 'default_picking_policy' : fields.selection([
+ (0, 'Ship products when some are available, and allow back orders'),
+ (1, 'Ship all products at once, without back orders')
+ ], "Default Shipping Policy"),
+ 'group_mrp_properties': fields.selection([
+ (0, "Don't use manufacturing properties (recommended as its easier)"),
+ (1, 'Allow setting manufacturing order properties per order line (avanced)')
+ ], "Properties on SO Lines",
implied_group='sale.group_mrp_properties',
help="Allows you to tag sales order lines with properties."),
- 'module_project_timesheet': fields.boolean("Project Timesheet"),
- 'module_sale_service': fields.boolean("Sale Service"),
- 'group_route_so_lines': fields.boolean('Choose MTO, drop shipping,... on sales order lines',
- implied_group='sale_stock.group_route_so_lines',
- help="Allows you to choose a delivery route on sales order lines"),
+ 'group_route_so_lines': fields.selection([
+ (0, 'No order specific routes like MTO or drop shipping'),
+ (1, 'Choose specific routes on sales order lines (advanced)')
+ ], "Order Routing",
+ implied_group='sale_stock.group_route_so_lines'),
}
_defaults = {
'default_order_policy': 'manual',
}
- def default_get(self, cr, uid, fields, context=None):
- res = super(sale_configuration, self).default_get(cr, uid, fields, context)
- # task_work, time_unit depend on other fields
- res['task_work'] = res.get('module_sale_service') and res.get('module_project_timesheet')
- return res
-
def get_default_sale_config(self, cr, uid, ids, context=None):
ir_values = self.pool.get('ir.values')
default_picking_policy = ir_values.get_default(cr, uid, 'sale.order', 'picking_policy')
return {
- 'default_picking_policy': default_picking_policy == 'one',
+ 'default_picking_policy': (default_picking_policy == 'one') and 1 or 0,
}
def set_sale_defaults(self, cr, uid, ids, context=None):
@@ -66,7 +57,3 @@ class sale_configuration(osv.osv_memory):
res = super(sale_configuration, self).set_sale_defaults(cr, uid, ids, context)
return res
- def onchange_invoice_methods(self, cr, uid, ids, group_invoice_deli_orders, context=None):
- if not group_invoice_deli_orders:
- return {'value': {'default_order_policy': 'manual'}}
- return {'value': {'default_order_policy': 'picking'}}
diff --git a/addons/sale_stock/res_config_view.xml b/addons/sale_stock/res_config_view.xml
index 1a35dfb61f1..7bdbb35cb3e 100644
--- a/addons/sale_stock/res_config_view.xml
+++ b/addons/sale_stock/res_config_view.xml
@@ -7,48 +7,33 @@
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
+
+
+
+
+
+
+
-
-
+
-
-
+
+
-
-
+
+
+
+
+
+
diff --git a/addons/sale_stock/security/sale_stock_security.xml b/addons/sale_stock/security/sale_stock_security.xml
index 0f70053cd7c..88a07dec22c 100644
--- a/addons/sale_stock/security/sale_stock_security.xml
+++ b/addons/sale_stock/security/sale_stock_security.xml
@@ -1,11 +1,6 @@
-
- Enable Invoicing Delivery orders
-
-
-
Enable Route on Sales Order Line
diff --git a/addons/sale_stock/stock_view.xml b/addons/sale_stock/stock_view.xml
index e24be11a030..24c6d46caab 100644
--- a/addons/sale_stock/stock_view.xml
+++ b/addons/sale_stock/stock_view.xml
@@ -18,7 +18,7 @@
groups="base.group_sale_salesman"
parent="base.menu_base_partner" sequence="5" />
-
+
stock.location.route.form
diff --git a/addons/sales_team/__init__.py b/addons/sales_team/__init__.py
index c52859910fe..f47c3bc7033 100644
--- a/addons/sales_team/__init__.py
+++ b/addons/sales_team/__init__.py
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
import sales_team
diff --git a/addons/stock/res_config.py b/addons/stock/res_config.py
index 1e6f5845c42..faa81d8609c 100644
--- a/addons/stock/res_config.py
+++ b/addons/stock/res_config.py
@@ -71,58 +71,107 @@ class stock_config_settings(osv.osv_memory):
return True
_columns = {
+ 'group_product_variant': fields.selection([
+ (0, "No variants on products"),
+ (1, 'Products can have several attributes, defining variants (Example: size, color,...)')
+ ], "Product Variants",
+ help='Work with product variant allows you to define some variant of the same products, an ease the product management in the ecommerce for example',
+ implied_group='product.group_product_variant'),
'company_id': fields.many2one('res.company', 'Company', required=True),
- 'module_procurement_jit': fields.boolean("Generate procurement in real time",
+ 'module_procurement_jit': fields.selection([
+ (1, 'Schedule orders in real time'),
+ (0, 'Run scheduler once a day')
+ ], "Procurements",
help="""This allows Just In Time computation of procurement orders.
All procurement orders will be processed immediately, which could in some
cases entail a small performance impact.
This installs the module procurement_jit."""),
- 'module_claim_from_delivery': fields.boolean("Allow claim on deliveries",
+ 'module_claim_from_delivery': fields.selection([
+ (0, 'Do not manage claims'),
+ (1, 'Allow claims on deliveries')
+ ], "Claims",
help='Adds a Claim link to the delivery order.\n'
'-This installs the module claim_from_delivery.'),
- 'module_product_expiry': fields.boolean("Expiry date on serial numbers",
+ 'module_product_expiry': fields.selection([
+ (0, 'Do not use expiry date'),
+ (1, 'Define expiry date on serial numbers')
+ ], "Expiry Dates",
help="""Track different dates on products and serial numbers.
-The following dates can be tracked:
- - end of life
- - best before date
- - removal date
- - alert date.
-This installs the module product_expiry."""),
- 'group_uom': fields.boolean("Manage different units of measure for products",
+ The following dates can be tracked:
+ - end of life
+ - best before date
+ - removal date
+ - alert date.
+ This installs the module product_expiry."""),
+ 'group_uom': fields.selection([
+ (0, 'Products have only one unit of measure (easier)'),
+ (1, 'Some products may be sold/purchased in different unit of measures (advanced)')
+ ], "Unit of Measures",
implied_group='product.group_uom',
help="""Allows you to select and maintain different units of measure for products."""),
- 'group_uos': fields.boolean("Store products in a different unit of measure than the sales order",
+ 'group_uos': fields.selection([
+ (0, 'Use the same product unit of measure in the stocks than in the sales order'),
+ (1, 'Store products in a different unit of measure than the sales order')
+ ], "Unit of Sales",
implied_group='product.group_uos',
help='Allows you to store units of a product, but sell and invoice based on a different unit of measure.\n'
'For instance, you can store pieces of meat that you sell and invoice based on their weight.'),
- 'group_stock_packaging': fields.boolean("Allow to define several packaging methods on products",
+ 'group_stock_packaging': fields.selection([
+ (0, 'Do not manage packaging'),
+ (1, 'Manage available packaging options per products')
+ ], "Packaging Methods",
implied_group='product.group_stock_packaging',
help="""Allows you to create and manage your packaging dimensions and types you want to be maintained in your system."""),
- 'group_stock_production_lot': fields.boolean("Track lots or serial numbers",
+ 'group_stock_production_lot': fields.selection([
+ (0, 'Do not track individual product items'),
+ (1, 'Track lots or serial numbers')
+ ], "Lots and Serial Numbers",
implied_group='stock.group_production_lot',
help="""This allows you to assign a lot (or serial number) to the pickings and moves. This can make it possible to know which production lot was sent to a certain client, ..."""),
- 'group_stock_tracking_lot': fields.boolean("Use packages: pallets, boxes, ...",
+ 'group_stock_tracking_lot': fields.selection([
+ (0, 'Do not manage packaging'),
+ (1, 'Record packages used on packing: pallets, boxes, ...)')
+ ], "Packages",
implied_group='stock.group_tracking_lot',
help="""This allows to manipulate packages. You can put something in, take something from a package, but also move entire packages and put them even in another package. """),
- 'group_stock_tracking_owner': fields.boolean("Manage owner on stock",
+ 'group_stock_tracking_owner': fields.selection([
+ (0, 'All products in your warehouse belong to your company'),
+ (1, 'Manage consignee stocks (advanced)')
+ ], "Product Owners",
implied_group='stock.group_tracking_owner',
help="""This way you can receive products attributed to a certain owner. """),
- 'group_stock_multiple_locations': fields.boolean("Manage multiple locations",
+ 'group_stock_multiple_locations': fields.selection([
+ (0, 'Do not record internal moves within a warehouse'),
+ (1, 'Manage several locations per warehouse')
+ ], "Multi Locations",
implied_group='stock.group_locations',
help="""This will show you the locations and allows you to define multiple picking types and warehouses."""),
'group_stock_single_location': fields.boolean("Manage only one location per warehouse",
implied_group='stock.group_single_location',
help="""This implies that you manage one location per warehouse, i.e. no internal transfer is possible."""),
- 'group_stock_adv_location': fields.boolean("Manage routes for your warehouse",
+ 'group_stock_adv_location': fields.selection([
+ (0, 'No automatic routing of products'),
+ (1, 'Advanced routing of products using rules')
+ ], "Routes",
implied_group='stock.group_adv_location',
help="""This option supplements the warehouse application by effectively implementing Push and Pull inventory flows through Routes."""),
'decimal_precision': fields.integer('Decimal precision on weight', help="As an example, a decimal precision of 2 will allow weights like: 9.99 kg, whereas a decimal precision of 4 will allow weights like: 0.0231 kg."),
'propagation_minimum_delta': fields.related('company_id', 'propagation_minimum_delta', type='integer', string="Minimum days to trigger a propagation of date change in pushed/pull flows."),
- 'module_stock_dropshipping': fields.boolean("Manage dropshipping",
+ 'module_stock_dropshipping': fields.selection([
+ (0, 'Suppliers always deliver to your warehouse(s)'),
+ (1, "Allow suppliers to deliver directly to your customers")
+ ], "Dropshipping",
help='\nCreates the dropship route and add more complex tests'
'-This installs the module stock_dropshipping.'),
- 'module_stock_picking_wave': fields.boolean('Manage picking wave', help='Install the picking wave module which will help you grouping your pickings and processing them in batch'),
- 'module_stock_calendar': fields.boolean('Manage minimum stock rules according to the purchase and delivery calendars',
+ 'module_stock_picking_wave': fields.selection([
+ (0, 'Manage pickings one at a time'),
+ (1, 'Manage picking in batch per worker')
+ ], "Picking Waves",
+ help='Install the picking wave module which will help you grouping your pickings and processing them in batch'),
+ 'module_stock_calendar': fields.selection([
+ (0, 'Set lead times in calendar days (easy)'),
+ (1, "Adapt lead times using the suppliers' open days calendars (advanced)")
+ ], "Minimun Stock Rules",
help='This allows you to handle minimum stock rules differently by the possibility to take into account the purchase and delivery calendars \n-This installs the module stock_calendar.'),
}
diff --git a/addons/stock/res_config_view.xml b/addons/stock/res_config_view.xml
index d320379bcc5..7f02b1596bb 100644
--- a/addons/stock/res_config_view.xml
+++ b/addons/stock/res_config_view.xml
@@ -24,89 +24,93 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/stock_account/res_config.py b/addons/stock_account/res_config.py
index 7e41426f102..99e6fb27146 100644
--- a/addons/stock_account/res_config.py
+++ b/addons/stock_account/res_config.py
@@ -9,14 +9,23 @@ class stock_config_settings(osv.osv_memory):
_inherit = 'stock.config.settings'
_columns = {
- 'group_stock_inventory_valuation': fields.boolean("Generate accounting entries per stock movement",
+ 'group_stock_inventory_valuation': fields.selection([
+ (0, "Periodic inventory valuation (recommended)"),
+ (1, 'Perpetual inventory valuation (stock move generates accounting entries)')
+ ], "Inventory Valuation",
implied_group='stock_account.group_inventory_valuation',
help="""Allows to configure inventory valuations on products and product categories."""),
- 'module_stock_invoice_directly': fields.boolean("Create and open the invoice when the user finish a delivery order",
+ 'module_stock_invoice_directly': fields.selection([
+ (0, 'Create invoices in batch'),
+ (1, 'Create and open the invoice when the user finishes a delivery order')
+ ], "Invoicing",
help='This allows to automatically launch the invoicing wizard if the delivery is '
'to be invoiced when you send or deliver goods.\n'
'-This installs the module stock_invoice_directly.'),
- 'module_stock_landed_costs': fields.boolean("Calculate landed costs on products",
+ 'module_stock_landed_costs': fields.selection([
+ (0, 'No landed costs'),
+ (1, 'Include landed costs in product costing computation')
+ ], "Landed Costs",
help="""Install the module that allows to affect landed costs on pickings, and split them onto the different products."""),
}
diff --git a/addons/stock_account/res_config_view.xml b/addons/stock_account/res_config_view.xml
index 7c515c0f2e9..7a1bd7b479c 100644
--- a/addons/stock_account/res_config_view.xml
+++ b/addons/stock_account/res_config_view.xml
@@ -8,21 +8,20 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/website_sale/res_config.py b/addons/website_sale/res_config.py
index 8e868a831c6..a8fb736e443 100644
--- a/addons/website_sale/res_config.py
+++ b/addons/website_sale/res_config.py
@@ -1,13 +1,5 @@
# -*- encoding: utf-8 -*-
from openerp import models, fields
-from openerp.addons.sale.res_config import sale_configuration
-
-class website_sale_configuration(models.TransientModel):
- _inherit = 'sale.config.settings'
-
- module_website_sale_digital = fields.Boolean('Sell digital products',
- help="Allow you to set mark a product as a digital product, allowing customers that have purchased the product to download its attachments. This installs the module website_sale_digital.")
-
class website_config_settings(models.TransientModel):
_inherit = 'website.config.settings'
diff --git a/addons/website_sale/res_config_view.xml b/addons/website_sale/res_config_view.xml
index 3ba069bdc9d..43a3aecae9b 100644
--- a/addons/website_sale/res_config_view.xml
+++ b/addons/website_sale/res_config_view.xml
@@ -1,25 +1,5 @@
-
- website_sale settings
- sale.config.settings
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
website.config.settings.form.inheritwebsite.config.settings
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 8f0e14adbfa..edea9c70f4e 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -402,6 +402,10 @@ class res_config_settings(osv.osv_memory, res_config_module_installation_mixin):
* For a boolean field like 'module_XXX', ``execute`` triggers the immediate
installation of the module named 'XXX' if the field has value ``True``.
+ * For a selection field like 'module_XXX' composed of 2 integers values ('0' and '1'),
+ ``execute`` triggers the immediate installation of the module named 'XXX'
+ if the field has the integer value ``1``.
+
* For the other fields, the method ``execute`` invokes all methods with a name
that starts with 'set_'; such methods can be defined to implement the effect
of those fields.
@@ -493,7 +497,7 @@ class res_config_settings(osv.osv_memory, res_config_module_installation_mixin):
elif name.startswith('group_') and isinstance(field, fields.boolean) and hasattr(field, 'implied_group'):
field_groups = getattr(field, 'group', 'base.group_user').split(',')
groups.append((name, map(ref, field_groups), ref(field.implied_group)))
- elif name.startswith('module_') and isinstance(field, fields.boolean):
+ elif name.startswith('module_') and (isinstance(field, fields.boolean) or isinstance(field, fields.selection)):
mod_ids = ir_module.search(cr, uid, [('name', '=', name[7:])])
record = ir_module.browse(cr, uid, mod_ids[0], context) if mod_ids else None
modules.append((name, record))
@@ -521,6 +525,8 @@ class res_config_settings(osv.osv_memory, res_config_module_installation_mixin):
# modules: which modules are installed/to install
for name, module in classified['module']:
res[name] = module and module.state in ('installed', 'to install', 'to upgrade')
+ if self._fields[name].type == 'selection':
+ res[name] = int(res[name])
# other fields: call all methods that start with 'get_default_'
for method in dir(self):