diff options
| author | Haresh Shyara <hsh@odoo.com> | 2017-08-08 10:49:03 +0200 |
|---|---|---|
| committer | Yannick Tivisse <yti@odoo.com> | 2017-08-09 10:03:08 +0200 |
| commit | ea66192276921be1bafe73255fa77c55f3e10ac7 (patch) | |
| tree | 7ad34dbe9df9e279b3b6d20a2bf9f90a35fbb54c | |
| parent | a2ca8b98d8abda4a28aa34d2436888903f97ad1a (diff) | |
[REF] crm,sale: Split the applications into 2 separate apps
Purpose
=======
You install CRM but you don't see CRM icon (except in English, as long as sales is not installed) -> confusing
The dashboard with salesteam is not obvious & not useful for simple users: what are those channel boxes about? why don't I see all my activities?, etc.
Specifications
==============
Split CRM & Sales + land in business views straight away
Default Entry Views
~~~~~~~~~~~~~~~~~~~
- New default view for CRM: Pipeline kanban
- New default view for Sales: Quotation list
Dashboards
~~~~~~~~~~
- Move sales teams dashboard to Reporting: Sales Channels.
- Remove the upper part of the sales team dashboard
Menuitems Structure
~~~~~~~~~~~~~~~~~~~
- CRM menu
Pipeline:
- Leads (optional)
- Pipeline (default menu, default filter "My Pipeline")
- Next Activities -> to remove (now there is an icon in top bar for next activities)
- Quotations (If sale_management installed)
Customers
Phone Calls (if voip, if not yet removed because there is a BE task to use next activities instead)
Leads Management:
- Scoring Rules
- Leads Assignation
- Team Assignation
Reporting:
- Leads
- Scoring page views
- Opp. Assignement
- Patnerships
- Pipeline
- Activities
- Phonecalls
- Sales Channels
Configuration:
- Settings
- Sales Channels
- Activity Types
- Leads & Opportunities:
- Lead Tags
- Lost Reasons
- Resellers
- Partner Level
- Partner Activations
- Sales menu:
Orders:
- Quotations
- Orders
- Customers
Invoicing:
- Orders to Invoice
- Orders to Upsell
Catalog:
- Products
- Promotion Programs
- Coupon Programs
Reporting:
- Sales
- Sales Channels
- All channels sales orders
Configuration:
- Settings
- Sales Channels
- Sales Orders:
- Quotation templates
- Payment acquirers
- Delivery Methods
Settings
~~~~~~~~
- Split settings form
- Remove recommended apps section
- Remove Timesheets section
- Remove Inventory Management and move shipping connectors to Shipping section
- Remove Integrations section
- Move Docsaway option to "Quotations & Orders", right after proforma
- Autocomplete and asterix: move to CRM section
- Restructure and rename sections this way:
- Product Catalog
- Pricing
- Quotations & Orders
- Shipping
- Invoicing
- eBay (if installed)
- Remove all the "Save this page and come back here" when checking a box that installs a new module
- restructure a bit the CRM settings, with 3 sections:
Pipeline
- Leads
Contacts
- Phone Validation
- Customer Autocomplete
Integrations
- Google Calendar / Synchronize your calendar with Google Calendar (copy from general settings but don't show message "Save this page and come back here...".
- Asterisk (VOIP)
56 files changed, 638 insertions, 1510 deletions
diff --git a/addons/crm/__manifest__.py b/addons/crm/__manifest__.py index 848c1f3979c..f220b47217f 100644 --- a/addons/crm/__manifest__.py +++ b/addons/crm/__manifest__.py @@ -28,7 +28,6 @@ 'data/crm_data.xml', 'data/crm_stage_data.xml', 'data/crm_lead_data.xml', - 'data/web_planner_data.xml', 'data/mail_template_data.xml', 'wizard/base_partner_merge_views.xml', @@ -37,16 +36,16 @@ 'wizard/crm_merge_opportunities_views.xml', 'wizard/base_partner_merge_views.xml', - 'report/crm_activity_report_views.xml', - 'report/crm_opportunity_report_views.xml', - 'views/crm_templates.xml', + 'views/crm_config_settings_views.xml', 'views/crm_views.xml', 'views/crm_stage_views.xml', 'views/crm_lead_views.xml', 'views/calendar_views.xml', 'views/res_partner_views.xml', - 'views/sale_config_settings_views.xml', + 'data/web_planner_data.xml', + 'report/crm_activity_report_views.xml', + 'report/crm_opportunity_report_views.xml', 'views/crm_team_views.xml', ], 'demo': [ diff --git a/addons/crm/data/web_planner_data.xml b/addons/crm/data/web_planner_data.xml index 9fffb45f445..9903260f1d6 100644 --- a/addons/crm/data/web_planner_data.xml +++ b/addons/crm/data/web_planner_data.xml @@ -935,7 +935,7 @@ <record id="planner_crm" model="web.planner"> <field name="name">Sales strategy planner</field> <field name="view_id" ref="crm_planner"/> - <field name="menu_id" ref="sales_team.menu_base_partner"/> + <field name="menu_id" ref="crm_menu_root"/> <field name="planner_application">planner_crm</field> <field name="tooltip_planner"><![CDATA[ Plan your sales strategy: objectives, leads, KPIs, and much more! diff --git a/addons/crm/models/__init__.py b/addons/crm/models/__init__.py index 8059e38d8b8..2bb745b5bee 100644 --- a/addons/crm/models/__init__.py +++ b/addons/crm/models/__init__.py @@ -6,6 +6,6 @@ from . import calendar from . import crm_lead from . import crm_stage from . import crm_team -from . import sale_config_settings +from . import crm_config_settings from . import res_partner from . import web_planner diff --git a/addons/crm/models/sale_config_settings.py b/addons/crm/models/crm_config_settings.py index 729d3c16817..94e05856a1e 100644 --- a/addons/crm/models/sale_config_settings.py +++ b/addons/crm/models/crm_config_settings.py @@ -4,15 +4,19 @@ from odoo import api, fields, models -class SaleConfigSettings(models.TransientModel): - _inherit = 'sale.config.settings' +class CrmConfigSettings(models.TransientModel): + _name = 'crm.config.settings' + _inherit = 'res.config.settings' + company_id = fields.Many2one('res.company', string='Company', required=True, + default=lambda self: self.env.user.company_id) alias_prefix = fields.Char('Default Alias Name for Leads') alias_domain = fields.Char('Alias Domain', default=lambda self: self.env["ir.config_parameter"].sudo().get_param("mail.catchall.domain")) generate_lead_from_alias = fields.Boolean('Manual Assignation of Emails') group_use_lead = fields.Boolean(string="Leads", implied_group='crm.group_use_lead') module_crm_phone_validation = fields.Boolean("Phone Validation") module_crm_voip = fields.Boolean("Asterisk (VoIP)") + module_web_clearbit = fields.Boolean("Customer Autocomplete") def _find_default_lead_alias_id(self): alias = self.env.ref('crm.mail_alias_lead_info', False) @@ -38,7 +42,7 @@ class SaleConfigSettings(models.TransientModel): @api.model def get_values(self): - res = super(SaleConfigSettings, self).get_values() + res = super(CrmConfigSettings, self).get_values() alias = self._find_default_lead_alias_id() res.update( alias_prefix=alias.alias_name if alias else False, @@ -48,7 +52,7 @@ class SaleConfigSettings(models.TransientModel): @api.multi def set_values(self): - super(SaleConfigSettings, self).set_values() + super(CrmConfigSettings, self).set_values() self.env['ir.config_parameter'].sudo().set_param('crm.generate_lead_from_alias', self.generate_lead_from_alias) alias = self._find_default_lead_alias_id() if alias: diff --git a/addons/crm/report/crm_activity_report_views.xml b/addons/crm/report/crm_activity_report_views.xml index 80cd852f867..e971e0674d6 100644 --- a/addons/crm/report/crm_activity_report_views.xml +++ b/addons/crm/report/crm_activity_report_views.xml @@ -66,7 +66,7 @@ id="crm_activity_report_menu" name="Activities" groups="sales_team.group_sale_manager" - parent="sales_team.menu_sale_report" + parent="crm_menu_report" action="crm_activity_report_action" sequence="6"/> diff --git a/addons/crm/report/crm_opportunity_report_views.xml b/addons/crm/report/crm_opportunity_report_views.xml index 7fe9c41ae0a..606e2251212 100644 --- a/addons/crm/report/crm_opportunity_report_views.xml +++ b/addons/crm/report/crm_opportunity_report_views.xml @@ -167,7 +167,7 @@ mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline.</field> </record> <menuitem id="crm_opportunity_report_menu" name="Pipeline" - parent="sales_team.menu_sale_report" action="crm_opportunity_report_action" sequence="5"/> + parent="crm_menu_report" action="crm_opportunity_report_action" sequence="5"/> <record id="crm_opportunity_report_action_graph" model="ir.actions.act_window"> <field name="name">Pipeline Analysis</field> @@ -202,7 +202,7 @@ with the the sales channel.</field> <menuitem id="crm_opportunity_report_menu_lead" name="Leads" - parent="sales_team.menu_sale_report" + parent="crm_menu_report" action="crm_opportunity_report_action_lead" groups="crm.group_use_lead" sequence="1"/> diff --git a/addons/crm/security/crm_security.xml b/addons/crm/security/crm_security.xml index 28599ff6ec7..e3f76bed2f0 100644 --- a/addons/crm/security/crm_security.xml +++ b/addons/crm/security/crm_security.xml @@ -12,12 +12,9 @@ <field eval="[(4,ref('base.group_partner_manager'))]" name="groups_id"/> </record> - <record model='ir.ui.menu' id='sales_team.menu_base_partner'> - <field name="groups_id" eval="[(4,ref('sales_team.group_sale_manager')),(4,ref('sales_team.group_sale_salesman'))]"/> - </record> - - <record model="ir.ui.menu" id="sales_team.menu_sale_config"> - <field eval="[(4, ref('sales_team.group_sale_manager'))]" name="groups_id"/> + <record id="contacts.res_partner_menu_config" model="ir.ui.menu"> + <field name="name">Configuration</field> + <field name="groups_id" eval="[(4, ref('sales_team.group_sale_manager'))]"/> </record> </data> diff --git a/addons/crm/static/description/icon.png b/addons/crm/static/description/icon.png Binary files differindex bd83ea1cb94..8eb7f8b4423 100644 --- a/addons/crm/static/description/icon.png +++ b/addons/crm/static/description/icon.png diff --git a/addons/crm/static/src/js/sales_team_dashboard.js b/addons/crm/static/src/js/sales_team_dashboard.js deleted file mode 100644 index e994f3b0b8a..00000000000 --- a/addons/crm/static/src/js/sales_team_dashboard.js +++ /dev/null @@ -1,12 +0,0 @@ -odoo.define('crm.sales_team_dashboard', function (require) { -"use strict"; - -var SalesTeamDashboard = require('sales_team.dashboard'); - -SalesTeamDashboard.Model.include({ - _fetchDashboardData: function() { - return this._rpc({model: 'crm.lead', method: 'retrieve_sales_dashboard'}); - }, -}); - -}); diff --git a/addons/crm/static/src/js/tour.js b/addons/crm/static/src/js/tour.js index 271275cc83b..7f3bcca5010 100644 --- a/addons/crm/static/src/js/tour.js +++ b/addons/crm/static/src/js/tour.js @@ -9,15 +9,10 @@ var _t = core._t; tour.register('crm_tour', { url: "/web", }, [tour.STEPS.MENU_MORE, { - trigger: '.o_app[data-menu-xmlid="sales_team.menu_base_partner"], .oe_menu_toggler[data-menu-xmlid="sales_team.menu_base_partner"]', - content: _t("Ready to boost your sales? Your <b>sales pipeline</b> can be found here, under this app."), + trigger: '.o_app[data-menu-xmlid="crm.crm_menu_root"], .oe_menu_toggler[data-menu-xmlid="crm.crm_menu_root"]', + content: _t("Ready to boost your sales? Your <b>Pipeline</b> can be found here, under <b>CRM</b> app."), position: 'bottom', }, { - trigger: ".o_sales_dashboard .o_dashboard_action[name=\"crm.action_your_pipeline\"]:last", - extra_trigger: '.o_sales_dashboard', - content: _t("Let\'s have a look at your opportunities pipeline."), - position: "bottom" -}, { trigger: ".o-kanban-button-new", extra_trigger: '.o_opportunity_kanban', content: _t("Click here to <b>create your first opportunity</b> and add it to your pipeline."), @@ -80,7 +75,7 @@ tour.STEPS.MENU_MORE, { position: "right" }, tour.STEPS.TOGGLE_APPSWITCHER, tour.STEPS.MENU_MORE, { - trigger: '.o_app[data-menu-xmlid="sales_team.menu_base_partner"], .oe_menu_toggler[data-menu-xmlid="sales_team.menu_base_partner"]', + trigger: '.o_app[data-menu-xmlid="crm.crm_menu_root"], .oe_menu_toggler[data-menu-xmlid="crm.crm_menu_root"]', content: _t("Good job! Your completed the tour of the CRM. You can continue with the <b>implementation guide</b> to help you setup the CRM in your company."), position: 'bottom', }, { diff --git a/addons/crm/views/calendar_views.xml b/addons/crm/views/calendar_views.xml index 925f0e198ca..b82569b1845 100644 --- a/addons/crm/views/calendar_views.xml +++ b/addons/crm/views/calendar_views.xml @@ -4,7 +4,7 @@ <menuitem id="menu_import_crm" name="Import & Synchronize" - parent="sales_team.menu_base_partner"/> + parent="crm_menu_root"/> <record id="view_crm_meeting_search" model="ir.ui.view"> <field name="name">calendar.event.form.inherit</field> diff --git a/addons/crm/views/crm_config_settings_views.xml b/addons/crm/views/crm_config_settings_views.xml new file mode 100644 index 00000000000..4cbd3ad3352 --- /dev/null +++ b/addons/crm/views/crm_config_settings_views.xml @@ -0,0 +1,104 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + + <record id="crm_config_settings_view_form" model="ir.ui.view"> + <field name="name">crm.config.settings.view.form</field> + <field name="model">crm.config.settings</field> + <field name="arch" type="xml"> + <form string="Configure CRM" class="oe_form_configuration" name="crm_config_form"> + <header> + <button string="Save" type="object" name="execute" class="oe_highlight"/> + <button string="Cancel" type="object" name="cancel" class="oe_link"/> + </header> + <sheet> + <h2>CRM</h2> + <field name="company_id" invisible="1"/> + <div class="row mt16 o_settings_container"> + <div class="col-xs-12 col-md-6 o_setting_box" id="crm_lead"> + <div class="o_setting_left_pane"> + <field name="group_use_lead"/> + </div> + <div class="o_setting_right_pane"> + <label for="group_use_lead"/> + <div class="text-muted"> + Add a qualification step before creating an opportunity + </div> + </div> + </div> + <div class="col-xs-12 col-md-6 o_setting_box" id="crm_lead" + attrs="{'invisible': [('group_use_lead','=',False)]}" + title="Emails received to that address generate new leads not assigned to any sales channel yet. This can be made when converting them into opportunities. Incoming emails can be automatically assigned to specific sales channels. To do so, set an email alias on the sales channel." + groups="base.group_no_one"> + <div class="o_setting_left_pane"> + <field name="generate_lead_from_alias"/> + </div> + <div class="o_setting_right_pane"> + <label string="Manually Assignation of Incoming Emails"/> + <div class="text-muted"> + Generate unassigned leads from incoming emails. Leads coming from + that email will be assigned manually. + </div> + <div class="content-group" attrs="{'invisible': [('generate_lead_from_alias','=',False)]}"> + <div class="mt16"> + <label string="Alias" class="o_light_label"/> + <field name="alias_prefix" class="oe_inline" + attrs="{'required': [('generate_lead_from_alias', '=', True)]}"/> + <span>@</span> + <field name="alias_domain" readonly="1" class="oe_inline"/> + </div> + <div attrs="{'invisible': [('alias_domain', 'not in', ['localhost', '', False])]}"> + <button type="action" + name="base_setup.action_general_configuration" + string="Use an External Email Server" icon="fa-arrow-right" class="oe_link"/> + </div> + </div> + </div> + </div> + <div class="col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_crm_phone_validation"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_crm_phone_validation"/> + <div class="text-muted" id="module_crm_phone_validation"> + Validate and normalize phone numbers. + </div> + </div> + </div> + <div class="col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_crm_voip" widget="upgrade_boolean"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_crm_voip"/> + <div class="text-muted" id="crm_voip"> + Schedule & make calls from CRM app + </div> + </div> + </div> + <div class="col-xs-12 col-md-6 o_setting_box" title="When populating your address book, Odoo relies on Clearbit’s API to provide you with a list of matching contacts or companies.When selecting one item, the partner name, logo and website get automatically set."> + <div class="o_setting_left_pane"> + <field name="module_web_clearbit" widget="upgrade_boolean"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_web_clearbit"/> + <div class="text-muted"> + Look up company information (name, logo, etc.) + </div> + </div> + </div> + </div> + </sheet> + </form> + </field> + </record> + + <record id="crm_config_settings_action" model="ir.actions.act_window"> + <field name="name">Configure CRM</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">crm.config.settings</field> + <field name="view_id" ref="crm_config_settings_view_form"/> + <field name="view_mode">form</field> + <field name="target">inline</field> + </record> +</odoo> diff --git a/addons/crm/views/crm_lead_views.xml b/addons/crm/views/crm_lead_views.xml index 16ff08592d0..7d6050b50c7 100644 --- a/addons/crm/views/crm_lead_views.xml +++ b/addons/crm/views/crm_lead_views.xml @@ -613,7 +613,7 @@ <separator/> <filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/> <separator/> - <filter string="My Opportunities" name="assigned_to_me" + <filter string="My Pipeline" name="assigned_to_me" domain="[('user_id', '=', uid)]" help="Opportunities that are assigned to me"/> <filter string="Unassigned" name="unassigned" @@ -736,10 +736,15 @@ if record: Menu Actions --> <menuitem - id="sales_team.menu_sales" - name="Sales" - parent="sales_team.menu_base_partner" - sequence="5"/> + id="crm_menu_pipeline" + name="Pipeline" + parent="crm_menu_root" + sequence="1"/> + + <menuitem id="res_partner_menu_crm" + parent="crm_menu_root" + action="base.action_partner_form" + sequence="2"/> <!-- Lead Menu --> <record model="ir.actions.act_window" id="crm_lead_all_leads"> @@ -772,7 +777,7 @@ if record: <menuitem id="menu_crm_leads" name="Leads" - parent="sales_team.menu_sales" + parent="crm_menu_pipeline" sequence="1" action="crm_lead_all_leads" groups="crm.group_use_lead"/> @@ -830,7 +835,7 @@ if record: </record> <record model="ir.actions.act_window" id="crm_lead_opportunities_tree_view"> - <field name="name">Your Pipeline</field> + <field name="name">Pipeline</field> <field name="res_model">crm.lead</field> <field name="view_mode">kanban,tree,graph,pivot,form,calendar</field> <field name="domain">[('type','=','opportunity')]</field> @@ -863,9 +868,14 @@ if record: <menuitem id="menu_crm_opportunities" action="action_your_pipeline" - name="My Pipeline" - parent="sales_team.menu_sales" - sequence="4"/> + name="Pipeline" + parent="crm_menu_pipeline" + sequence="5"/> + + <menuitem + id="crm.crm_menu_root" + name="CRM" + action="action_your_pipeline"/> <!-- Next Activities Menu --> <record id="crm_lead_action_activities" model="ir.actions.act_window"> @@ -893,13 +903,6 @@ if record: </field> </record> - <menuitem - id="crm_lead_menu_activities" - name="Next Activities" - parent="sales_team.menu_sales" - sequence="5" - action="crm_lead_action_activities" /> - <!-- Configuration/Lead & Opporotunities/Lead Tags Menu --> <record id="crm_lead_tag_action" model="ir.actions.act_window"> <field name="name">Lead Tags</field> diff --git a/addons/crm/views/crm_templates.xml b/addons/crm/views/crm_templates.xml index 04609c193f5..cf0c7bd8667 100644 --- a/addons/crm/views/crm_templates.xml +++ b/addons/crm/views/crm_templates.xml @@ -5,15 +5,7 @@ <link rel="stylesheet" href="/crm/static/src/css/crm.css"/> <!-- Planner assets --> <script type="text/javascript" src="/crm/static/src/js/web_planner_crm.js"></script> - <!-- Salesteam dashboard asset --> - <script type="text/javascript" src="/crm/static/src/js/sales_team_dashboard.js"></script> <script type="text/javascript" src="/crm/static/src/js/tour.js"></script> </xpath> </template> - - <template id="qunit_suite" name="crm_tests" inherit_id="web.qunit_suite"> - <xpath expr="//t[@t-set='head']" position="inside"> - <script type="text/javascript" src="/crm/static/tests/sales_team_dashboard_tests.js"></script> - </xpath> - </template> </odoo> diff --git a/addons/crm/views/crm_views.xml b/addons/crm/views/crm_views.xml index 1e4c12953c3..e085a6bed3f 100644 --- a/addons/crm/views/crm_views.xml +++ b/addons/crm/views/crm_views.xml @@ -7,24 +7,62 @@ the base module in order to set new groups. --> <menuitem - id="sales_team.menu_base_partner" + id="crm_menu_root" name="CRM" - groups="sales_team.group_sale_manager,sales_team.group_sale_salesman" web_icon="crm,static/description/icon.png" + groups="sales_team.group_sale_salesman,sales_team.group_sale_manager" sequence="6"/> <menuitem + id="crm_menu_config" + name="Configuration" + parent="crm_menu_root" + sequence="25" groups="sales_team.group_sale_manager"/> + + <menuitem id="menu_crm_config_lead" name="Leads & Opportunities" - parent="sales_team.menu_sale_config" - sequence="2" + parent="crm_menu_config" + sequence="15" groups="sales_team.group_sale_manager"/> <menuitem id="menu_crm_config_opportunity" name="Opportunities" - parent="sales_team.menu_sale_config" + parent="crm_menu_config" sequence="1" groups="sales_team.group_sale_manager"/> + <menuitem id="crm_config_settings_menu" + name="Settings" + parent="crm_menu_config" + action="crm_config_settings_action" + groups="base.group_system" + sequence="0"/> + + <menuitem id="crm_menu_report" + name="Reporting" + parent="crm_menu_root" + sequence="20" + groups="sales_team.group_sale_manager"/> + + <menuitem id="crm_team_config" + name="Sales Channels" + parent="crm_menu_config" + action="sales_team.sales_team_config_action" + sequence="5"/> + + <menuitem id="crm_team_menu_config_activity_types" + name="Activity Types" + parent="crm_menu_config" + action="sales_team.mail_activity_type_action_config_sales" + sequence="10"/> + + + <menuitem id="sales_team_menu_report_crm" + name="Sales Channels" + parent="crm_menu_report" + action="sales_team.crm_team_salesteams_act" + sequence="10"/> + </odoo> diff --git a/addons/crm/views/sale_config_settings_views.xml b/addons/crm/views/sale_config_settings_views.xml deleted file mode 100644 index d6ed8df62df..00000000000 --- a/addons/crm/views/sale_config_settings_views.xml +++ /dev/null @@ -1,97 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<odoo> - - <record id="sale_config_settings_view_form_inherit_crm" model="ir.ui.view"> - <field name="name">sale.config.settings.inherit.crm</field> - <field name="model">sale.config.settings</field> - <field name="inherit_id" ref="sales_team.sale_config_settings_view_form"/> - <field name="arch" type="xml"> - <xpath expr="//h2[@id='integration_h2']" position="before"> - <h2>CRM</h2> - <div class="row mt16 o_settings_container"> - <div class="col-xs-12 col-md-6 o_setting_box" id="crm_lead"> - <div class="o_setting_left_pane"> - <field name="group_use_lead"/> - </div> - <div class="o_setting_right_pane"> - <label for="group_use_lead"/> - <div class="text-muted"> - Add a qualification step before creating an opportunity - </div> - </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box" id="crm_lead" - attrs="{'invisible': [('group_use_lead','=',False)]}" - title="Emails received to that address generate new leads not assigned to any sales channel yet. This can be made when converting them into opportunities. Incoming emails can be automatically assigned to specific sales channels. To do so, set an email alias on the sales channel." - groups="base.group_no_one"> - <div class="o_setting_left_pane"> - <field name="generate_lead_from_alias"/> - </div> - <div class="o_setting_right_pane"> - <label string="Manually Assignation of Incoming Emails"/> - <div class="text-muted"> - Generate unassigned leads from incoming emails. Leads coming from - that email will be assigned manually. - </div> - <div class="content-group" attrs="{'invisible': [('generate_lead_from_alias','=',False)]}"> - <div class="mt16"> - <label string="Alias" class="o_light_label"/> - <field name="alias_prefix" class="oe_inline" - attrs="{'required': [('generate_lead_from_alias', '=', True)]}"/> - <span>@</span> - <field name="alias_domain" readonly="1" class="oe_inline"/> - </div> - <div attrs="{'invisible': [('alias_domain', 'not in', ['localhost', '', False])]}"> - <button type="action" - name="base_setup.action_general_configuration" - string="Use an External Email Server" icon="fa-arrow-right" class="oe_link"/> - </div> - </div> - </div> - </div> - <div class="col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_crm_phone_validation"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_crm_phone_validation"/> - <div class="text-muted"> - Validate and normalize phone numbers. - </div> - <div class="content-group"> - <div class="text-warning mt16" id="module_crm_phone_validation" attrs="{'invisible': [('module_crm_phone_validation','=',False)]}"> - <p> - Save this page and come back here to set up the feature. - </p> - </div> - </div> - </div> - </div> - </div> - </xpath> - <xpath expr="//h2[@id='integration_h2']" position="attributes"> - <attribute name="invisible">0</attribute> - </xpath> - <xpath expr="//div[@id='integration']" position="inside"> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_crm_voip" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_crm_voip"/> - <div class="text-muted"> - Schedule & make calls from CRM app - </div> - <div class="content-group"> - <div class="text-warning mt16" id="crm_voip" attrs="{'invisible': [('module_crm_voip','=',False)]}"> - Save this page and come back here to set up the feature. - </div> - </div> - </div> - </div> - </xpath> - <xpath expr="//div[@id='module_crm']" position="replace"/> - </field> - </record> - -</odoo> diff --git a/addons/crm_phone_validation/__manifest__.py b/addons/crm_phone_validation/__manifest__.py index af92b69ce4b..1498d1d2f05 100644 --- a/addons/crm_phone_validation/__manifest__.py +++ b/addons/crm_phone_validation/__manifest__.py @@ -12,7 +12,7 @@ CRM Phone Numbers Validation This module allows for validate and format phone numbers for leads and contacts.""", 'data': [ - 'views/sale_config_settings_views.xml', + 'views/crm_config_settings_views.xml', ], 'depends': [ 'phone_validation', diff --git a/addons/crm_phone_validation/models/__init__.py b/addons/crm_phone_validation/models/__init__.py index a9734a49aa3..07108e91a8c 100644 --- a/addons/crm_phone_validation/models/__init__.py +++ b/addons/crm_phone_validation/models/__init__.py @@ -3,4 +3,4 @@ from . import res_partner from . import crm_lead -from . import sale_config_settings +from . import crm_config_settings diff --git a/addons/crm_phone_validation/models/sale_config_settings.py b/addons/crm_phone_validation/models/crm_config_settings.py index 5407c9d0e63..7382c965cdf 100644 --- a/addons/crm_phone_validation/models/sale_config_settings.py +++ b/addons/crm_phone_validation/models/crm_config_settings.py @@ -4,7 +4,7 @@ from odoo import fields, models -class SaleConfigSettings(models.TransientModel): - _inherit = 'sale.config.settings' +class CrmConfigSettings(models.TransientModel): + _inherit = 'crm.config.settings' crm_phone_valid_method = fields.Boolean(related="company_id.phone_international_format", required=True) diff --git a/addons/crm_phone_validation/views/crm_config_settings_views.xml b/addons/crm_phone_validation/views/crm_config_settings_views.xml new file mode 100644 index 00000000000..1d6ca1ce6bc --- /dev/null +++ b/addons/crm_phone_validation/views/crm_config_settings_views.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<odoo> + <record id="crm_config_settings_view_form_inherit_phone_validatation" model="ir.ui.view"> + <field name="name">crm.config.settings.view.form.inherit.phone.validatation</field> + <field name="model">crm.config.settings</field> + <field name="inherit_id" ref="crm.crm_config_settings_view_form" /> + <field name="arch" type="xml"> + <xpath expr="//div[@id='module_crm_phone_validation']" position="after"> + <div class="content-group"> + <div class="text-warning mt16" attrs="{'invisible': [('module_crm_phone_validation','=',False)]}"> + <label for="crm_phone_valid_method"/> + <field name="crm_phone_valid_method"/> + </div> + </div> + </xpath> + </field> + </record> +</odoo> diff --git a/addons/crm_phone_validation/views/sale_config_settings_views.xml b/addons/crm_phone_validation/views/sale_config_settings_views.xml deleted file mode 100644 index 9e3a0b93975..00000000000 --- a/addons/crm_phone_validation/views/sale_config_settings_views.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<odoo> - <record id="sale_config_settings_view_form_inherit_phone_validatation" model="ir.ui.view"> - <field name="name">sale.config.settings.view.form.inherit.phone.validatation</field> - <field name="model">sale.config.settings</field> - <field name="inherit_id" ref="crm.sale_config_settings_view_form_inherit_crm" /> - <field name="arch" type="xml"> - <xpath expr="//div[@id='module_crm_phone_validation']/p" position="replace"> - <label for="crm_phone_valid_method"/> - <field name="crm_phone_valid_method"/> - </xpath> - </field> - </record> -</odoo>
\ No newline at end of file diff --git a/addons/delivery/views/sale_config_settings_views.xml b/addons/delivery/views/sale_config_settings_views.xml index 7f6d13635ef..d8b938f346c 100644 --- a/addons/delivery/views/sale_config_settings_views.xml +++ b/addons/delivery/views/sale_config_settings_views.xml @@ -4,13 +4,15 @@ <record id="sale_config_settings_view_form_inherit_delivery" model="ir.ui.view"> <field name="name">sale.config.settings.inherit.delivery</field> <field name="model">sale.config.settings</field> - <field name="inherit_id" ref="sale.sale_config_settings_view_form_inherit_sale"/> + <field name="inherit_id" ref="sale.sale_config_settings_view_form"/> <field name="arch" type="xml"> - <xpath expr="//div[@id='delivery_carrier']" position="replace"> - <div class="mt16" attrs="{'invisible': [('module_delivery','=',False)]}"> - <button name="%(delivery.action_delivery_carrier_form)d" icon="fa-arrow-right" type="action" string="Delivery Methods" class="btn-link"/> - </div> - </xpath> + <xpath expr="//div[@id='delivery_carrier']" position="after"> + <div class="content-group"> + <div class="mt16" attrs="{'invisible': [('module_delivery','=',False)]}"> + <button name="%(delivery.action_delivery_carrier_form)d" icon="fa-arrow-right" type="action" string="Delivery Methods" class="btn-link"/> + </div> + </div> + </xpath> </field> </record> diff --git a/addons/report_intrastat/views/report_intrastat_views.xml b/addons/report_intrastat/views/report_intrastat_views.xml index 9e26a24844a..69c8e186a06 100644 --- a/addons/report_intrastat/views/report_intrastat_views.xml +++ b/addons/report_intrastat/views/report_intrastat_views.xml @@ -67,7 +67,7 @@ </record> <menuitem action="action_report_intrastat_code_tree" id="menu_report_intrastat_code" - parent="sales_team.menu_config_address_book" sequence="2" groups="base.group_no_one"/> + parent="account.product_configuration_menu" sequence="10" groups="account.group_account_manager"/> <record id="view_report_intrastat_tree" model="ir.ui.view"> diff --git a/addons/sale/models/sale_config_settings.py b/addons/sale/models/sale_config_settings.py index bcee72dffc7..2e0fa8aeb03 100644 --- a/addons/sale/models/sale_config_settings.py +++ b/addons/sale/models/sale_config_settings.py @@ -5,8 +5,11 @@ from odoo import api, fields, models class SaleConfigSettings(models.TransientModel): - _inherit = 'sale.config.settings' + _name = 'sale.config.settings' + _inherit = 'res.config.settings' + company_id = fields.Many2one('res.company', string='Company', required=True, + default=lambda self: self.env.user.company_id) sale_note = fields.Text(related='company_id.sale_note', string="Terms & Conditions") use_sale_note = fields.Boolean( string='Default Terms & Conditions', @@ -69,7 +72,6 @@ class SaleConfigSettings(models.TransientModel): oldname='deposit_product_id_setting', help='Default product used for payment advances') auto_done_setting = fields.Boolean("Lock Confirmed Orders") - module_sale_subscription = fields.Boolean("Subscriptions") module_website_sale_digital = fields.Boolean("Sell digital products - provide downloadable content on your customer portal") auth_signup_uninvited = fields.Selection([ @@ -78,7 +80,6 @@ class SaleConfigSettings(models.TransientModel): ], string='Customer Account') group_multi_currency = fields.Boolean("Multi-Currencies", implied_group='base.group_multi_currency') - module_sale_stock = fields.Boolean("Inventory Management") module_delivery = fields.Boolean("Shipping Costs") module_delivery_dhl = fields.Boolean("DHL") module_delivery_fedex = fields.Boolean("FedEx") @@ -86,10 +87,7 @@ class SaleConfigSettings(models.TransientModel): module_delivery_usps = fields.Boolean("USPS") module_delivery_bpost = fields.Boolean("bpost") - module_sale_timesheet = fields.Boolean("Timesheets") - module_sale_ebay = fields.Boolean("eBay") module_print_docsaway = fields.Boolean("Docsaway") - module_web_clearbit = fields.Boolean("Customer Autocomplete") module_product_email_template = fields.Boolean("Specific Email") module_sale_coupon = fields.Boolean("Coupons & Promotions") @@ -144,7 +142,7 @@ class SaleConfigSettings(models.TransientModel): auth_signup_uninvited='b2c' if ICPSudo.get_param('auth_signup.allow_uninvited', 'False').lower() == 'true' else 'b2b', use_sale_note=ICPSudo.get_param('sale.use_sale_note', default=False), auto_done_setting=ICPSudo.get_param('sale.auto_done_setting'), - default_deposit_product_id=ICPSudo.get_param('sale.default_deposit_product_id'), + default_deposit_product_id=int(ICPSudo.get_param('sale.default_deposit_product_id')), sale_show_tax=ICPSudo.get_param('sale.sale_show_tax', default='subtotal'), multi_sales_price=sale_pricelist_setting in ['percentage', 'formula'], multi_sales_price_method=sale_pricelist_setting in ['percentage', 'formula'] and sale_pricelist_setting or False, diff --git a/addons/sale/report/report_all_channels_sales_views.xml b/addons/sale/report/report_all_channels_sales_views.xml index 0a00b45a14e..d2ec23db180 100644 --- a/addons/sale/report/report_all_channels_sales_views.xml +++ b/addons/sale/report/report_all_channels_sales_views.xml @@ -33,6 +33,4 @@ <field name="search_view_id" ref="report_all_channels_sales_view_search"/> <field name="context">{'search_default_team_id': 1, 'search_default_current_year': 1}</field> </record> - - <menuitem action="report_all_channels_sales_action" id="report_all_channels_sales" name="All Channels Sales Orders" parent="sales_team.menu_sale_report"/> </odoo> diff --git a/addons/sale/report/sale_report_views.xml b/addons/sale/report/sale_report_views.xml index 97d41d68a4f..317e0e83355 100644 --- a/addons/sale/report/sale_report_views.xml +++ b/addons/sale/report/sale_report_views.xml @@ -93,7 +93,4 @@ <field name="context">{'search_default_Sales':1, 'group_by_no_leaf':1,'group_by':[]}</field> <field name="help">This report performs analysis on your quotations and sales orders. Analysis check your sales revenues and sort it by different group criteria (salesman, partner, product, etc.) Use this report to perform analysis on sales not having invoiced yet. If you want to analyse your turnover, you should use the Invoice Analysis report in the Accounting application.</field> </record> - - <menuitem name="Sales" action="action_order_report_all" id="menu_report_product_all" parent="sales_team.menu_sale_report" sequence="8" active="False"/> - </odoo> diff --git a/addons/sale/security/sale_security.xml b/addons/sale/security/sale_security.xml index 0e62a89152d..f753c3bed13 100644 --- a/addons/sale/security/sale_security.xml +++ b/addons/sale/security/sale_security.xml @@ -59,12 +59,6 @@ <record model="res.users" id="base.user_root"> <field eval="[(4,ref('base.group_partner_manager'))]" name="groups_id"/> </record> - <record model="ir.ui.menu" id="sales_team.menu_base_partner"> - <field eval="[(4, ref('sales_team.group_sale_salesman'))]" name="groups_id"/> - </record> - <record model="ir.ui.menu" id="sales_team.menu_sale_config"> - <field eval="[(4, ref('sales_team.group_sale_manager'))]" name="groups_id"/> - </record> <data noupdate="1"> <!-- Multi - Company Rules --> diff --git a/addons/sale/views/sale_config_settings_views.xml b/addons/sale/views/sale_config_settings_views.xml index 82b8487a0fd..38a73fddc5a 100644 --- a/addons/sale/views/sale_config_settings_views.xml +++ b/addons/sale/views/sale_config_settings_views.xml @@ -1,501 +1,395 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> - <record id="sale_config_settings_view_form_inherit_sale" model="ir.ui.view"> - <field name="name">sale.config.settings.inherit.sale</field> + <record id="sale_config_settings_view_form" model="ir.ui.view"> + <field name="name">sale.config.settings.view.form</field> <field name="model">sale.config.settings</field> - <field name="inherit_id" ref="sales_team.sale_config_settings_view_form"/> <field name="arch" type="xml"> - <xpath expr="//h2[@id='integration_h2']" position="before"> - <field name="company_id" invisible="1"/> - <h2>Pricing</h2> - <div class="row mt16 o_settings_container"> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="group_discount_per_so_line"/> - </div> - <div class="o_setting_right_pane"> - <label for="group_discount_per_so_line"/> - <div class="text-muted"> - Allow manual discounts on order lines + <form string="Configure Sales" class="oe_form_configuration" name="sale_config_form"> + <header> + <button string="Save" type="object" name="execute" class="oe_highlight"/> + <button string="Cancel" type="object" name="cancel" class="oe_link"/> + </header> + <sheet> + <field name="company_id" invisible="1"/> + <h2>Product Catalog</h2> + <div class="row mt16 o_settings_container"> + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="group_product_variant"/> + </div> + <div class="o_setting_right_pane"> + <label for="group_product_variant"/> + <div class="text-muted"> + Set product attributes (e.g. color, size) to sell variants + </div> + <div class="content-group" attrs="{'invisible': [('group_product_variant','=',False)]}"> + <div class="mt16"> + <button name="%(product.attribute_action)d" icon="fa-arrow-right" type="action" string="Attributes" class="btn-link"/> + </div> + </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box" title="Boost your sales with two kinds of discount programs: promotions and coupon codes. Specific conditions can be set (products, customers, minimum purchase amount, period). Rewards can be discounts (% or amount) or free products."> - <div class="o_setting_left_pane"> - <field name="module_sale_coupon" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_sale_coupon"/> - <div class="text-muted"> - Manage promotion & coupon programs + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="group_uom"/> </div> - <div class="content-group"> - <div class="text-warning mt16" id="sale_coupon" attrs="{'invisible': [('module_sale_coupon','=',False)]}"> - Save this page and come back here to set up the feature. + <div class="o_setting_right_pane"> + <label for="group_uom"/> + <div class="text-muted"> + Sell and purchase products in different units of measure + </div> + <div class="content-group" attrs="{'invisible': [('group_uom','=',False)]}"> + <div class="mt16"> + <button name="%(product.product_uom_form_action)d" icon="fa-arrow-right" type="action" string="Units of Measure" class="btn-link"/> + </div> </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box" title="There are two ways to manage pricelists: 1) Multiple prices per product: must be set in the Sales tab of the product detail form. 2) Price computed from formulas: must be set in the pricelist form."> - <div class="o_setting_left_pane"> - <field name="multi_sales_price"/> - </div> - <div class="o_setting_right_pane"> - <label for="multi_sales_price" string="Multiple Prices per Product"/> - <div class="text-muted"> - Set multiple prices per product, automated discounts, etc. + <div class="col-xs-12 col-md-6 o_setting_box" title="Sending an email is useful if you need to share specific information or content about a product (instructions, rules, links, media, etc.). Create and set the email template from the product detail form (in Sales tab)."> + <div class="o_setting_left_pane"> + <field name="module_product_email_template"/> </div> - <div class="content-group" attrs="{'invisible': [('multi_sales_price' ,'=', False)]}"> - <div class="mt16"> - <field name="group_product_pricelist" invisible="1"/> - <field name="group_sale_pricelist" invisible="1"/> - <field name="group_pricelist_item" invisible="1"/> - <field name="multi_sales_price_method" widget="radio" class="o_light_label"/> - <field name="sale_pricelist_setting" invisible="1" widget="radio"/> + <div class="o_setting_right_pane"> + <label for="module_product_email_template"/> + <div class="text-muted"> + Send a product-specific email once the invoice is paid </div> - <button name="%(product.product_pricelist_action2)d" icon="fa-arrow-right" type="action" string="Pricelists" - attrs="{'invisible': [('sale_pricelist_setting', '=', False)]}" class="btn-link"/> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box" title="This adds the choice of a currency on pricelists."> - <div class="o_setting_left_pane"> - <field name="group_multi_currency"/> - </div> - <div class="o_setting_right_pane"> - <label for="group_multi_currency"/> - <div class="text-muted"> - Sell in foreign currencies + <div class="col-xs-12 col-md-6 o_setting_box" title="Ability to select a package type in sales orders and to force a quantity that is a multiple of the number of units per package."> + <div class="o_setting_left_pane"> + <field name="group_stock_packaging"/> </div> - <div class="content-group" attrs="{'invisible': [('group_multi_currency','=',False)]}"> - <div class="mt16"> - <button name="%(base.action_currency_all_form)d" icon="fa-arrow-right" type="action" string="Activate Other Currencies" class="btn-link"/> + <div class="o_setting_right_pane"> + <label for="group_stock_packaging"/> + <div class="text-muted"> + Sell products by multiple of unit # per package </div> </div> </div> </div> - <div class="col-xs-12 col-md-6 o_setting_box" title="The margin is computed as the sum of product sales prices minus the cost set in their detail form."> - <div class="o_setting_left_pane"> - <field name="module_sale_margin"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_sale_margin"/> - <div class="text-muted"> - Show margins on orders + <h2>Pricing</h2> + <div class="row mt16 o_settings_container"> + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="group_discount_per_so_line"/> </div> - </div> - </div> - </div> - <h2>Product Catalog</h2> - <div class="row mt16 o_settings_container"> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="group_product_variant"/> - </div> - <div class="o_setting_right_pane"> - <label for="group_product_variant"/> - <div class="text-muted"> - Set product attributes (e.g. color, size) to sell variants - </div> - <div class="content-group" attrs="{'invisible': [('group_product_variant','=',False)]}"> - <div class="mt16"> - <button name="%(product.attribute_action)d" icon="fa-arrow-right" type="action" string="Attributes" class="btn-link"/> + <div class="o_setting_right_pane"> + <label for="group_discount_per_so_line"/> + <div class="text-muted"> + Allow manual discounts on order lines </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="group_uom"/> - </div> - <div class="o_setting_right_pane"> - <label for="group_uom"/> - <div class="text-muted"> - Sell and purchase products in different units of measure + <div class="col-xs-12 col-md-6 o_setting_box" title="Boost your sales with two kinds of discount programs: promotions and coupon codes. Specific conditions can be set (products, customers, minimum purchase amount, period). Rewards can be discounts (% or amount) or free products."> + <div class="o_setting_left_pane"> + <field name="module_sale_coupon" widget="upgrade_boolean"/> </div> - <div class="content-group" attrs="{'invisible': [('group_uom','=',False)]}"> - <div class="mt16"> - <button name="%(product.product_uom_form_action)d" icon="fa-arrow-right" type="action" string="Units of Measure" class="btn-link"/> + <div class="o_setting_right_pane"> + <label for="module_sale_coupon"/> + <div class="text-muted" id="sale_coupon"> + Manage promotion & coupon programs </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box" title="Sending an email is useful if you need to share specific information or content about a product (instructions, rules, links, media, etc.). Create and set the email template from the product detail form (in Sales tab)."> - <div class="o_setting_left_pane"> - <field name="module_product_email_template"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_product_email_template"/> - <div class="text-muted"> - Send a product-specific email once the invoice is paid + <div class="col-xs-12 col-md-6 o_setting_box" title="There are two ways to manage pricelists: 1) Multiple prices per product: must be set in the Sales tab of the product detail form. 2) Price computed from formulas: must be set in the pricelist form."> + <div class="o_setting_left_pane"> + <field name="multi_sales_price"/> </div> - </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box" title="Ability to select a package type in sales orders and to force a quantity that is a multiple of the number of units per package."> - <div class="o_setting_left_pane"> - <field name="group_stock_packaging"/> - </div> - <div class="o_setting_right_pane"> - <label for="group_stock_packaging"/> - <div class="text-muted"> - Sell products by multiple of unit # per package + <div class="o_setting_right_pane"> + <label for="multi_sales_price" string="Multiple Prices per Product"/> + <div class="text-muted"> + Set multiple prices per product, automated discounts, etc. + </div> + <div class="content-group" attrs="{'invisible': [('multi_sales_price' ,'=', False)]}"> + <div class="mt16"> + <field name="group_product_pricelist" invisible="1"/> + <field name="group_sale_pricelist" invisible="1"/> + <field name="group_pricelist_item" invisible="1"/> + <field name="multi_sales_price_method" widget="radio" class="o_light_label"/> + <field name="sale_pricelist_setting" invisible="1" widget="radio"/> + </div> + <button name="%(product.product_pricelist_action2)d" icon="fa-arrow-right" type="action" string="Pricelists" + attrs="{'invisible': [('sale_pricelist_setting', '=', False)]}" class="btn-link"/> + </div> </div> </div> - </div> - </div> - <h2>Quotations & Orders</h2> - <div class="row mt16 o_settings_container"> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_website_quote"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_website_quote"/> - <div class="text-muted"> - Let your customers sign & pay online + <div class="col-xs-12 col-md-6 o_setting_box" title="This adds the choice of a currency on pricelists."> + <div class="o_setting_left_pane"> + <field name="group_multi_currency"/> </div> - <div class="content-group"> - <div class="text-warning mt16" id="website_quote" attrs="{'invisible': [('module_website_quote','=',False)]}"> - Save this page and come back here to set up the feature. + <div class="o_setting_right_pane"> + <label for="group_multi_currency"/> + <div class="text-muted"> + Sell in foreign currencies + </div> + <div class="content-group" attrs="{'invisible': [('group_multi_currency','=',False)]}"> + <div class="mt16"> + <button name="%(base.action_currency_all_form)d" icon="fa-arrow-right" type="action" string="Activate Other Currencies" class="btn-link"/> + </div> </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - </div> - <div class="o_setting_right_pane"> - <label for="auth_signup_uninvited"/> - <div class="text-muted"> - Let your customers log in to see their documents + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> </div> - <div class="mt8"> - <field name="auth_signup_uninvited" widget="radio" required="True"/> + <div class="o_setting_right_pane"> + <label for="auth_signup_uninvited"/> + <div class="text-muted"> + Let your customers log in to see their documents + </div> + <div class="mt8"> + <field name="auth_signup_uninvited" widget="radio" required="True"/> + </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="group_sale_delivery_address"/> - </div> - <div class="o_setting_right_pane"> - <label for="group_sale_delivery_address"/> - <div class="text-muted"> - Set specific billing and shipping addresses + <div class="col-xs-12 col-md-6 o_setting_box" title="The margin is computed as the sum of product sales prices minus the cost set in their detail form."> + <div class="o_setting_left_pane"> + <field name="module_sale_margin"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_sale_margin"/> + <div class="text-muted"> + Show margins on orders + </div> </div> </div> </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="use_sale_note"/> - </div> - <div class="o_setting_right_pane"> - <label for="use_sale_note"/> - <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/> - <div class="text-muted"> - Show standard terms & conditions on orders + <h2>Quotations & Orders</h2> + <div class="row mt16 o_settings_container"> + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> </div> - <div class="content-group" attrs="{'invisible': [('use_sale_note','=',False)]}"> + <div class="o_setting_right_pane"> + <label for="sale_show_tax"/> + <div class="text-muted"> + Line subtotals in sales orders + </div> <div class="mt16"> - <field name="sale_note" placeholder="Insert your terms & conditions here..."/> + <field name="sale_show_tax" class="o_light_label" widget="radio"/> + <field name="group_show_price_subtotal" invisible="1"/> + <field name="group_show_price_total" invisible="1"/> </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="group_warning_sale"/> - </div> - <div class="o_setting_right_pane"> - <label for="group_warning_sale"/> - <div class="text-muted"> - Get warnings in orders for products or customers + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_website_quote"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_website_quote"/> + <div class="text-muted" id="website_quote"> + Let your customers sign & pay online + </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="group_sale_layout"/> - </div> - <div class="o_setting_right_pane"> - <label for="group_sale_layout"/> - <div class="text-muted"> - Sort products in sections with subtotals and page-breaks + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="group_sale_delivery_address"/> </div> - <div class="content-group" attrs="{'invisible': [('group_sale_layout','=',False)]}"> - <div class="mt16"> - <button name="%(sale.report_configuration_action)d" icon="fa-arrow-right" type="action" string="Order Line Sections" class="btn-link"/> + <div class="o_setting_right_pane"> + <label for="group_sale_delivery_address"/> + <div class="text-muted"> + Set specific billing and shipping addresses </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="auto_done_setting"/> - </div> - <div class="o_setting_right_pane"> - <label for="auto_done_setting"/> - <div class="text-muted"> - No longer edit orders once confirmed + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="use_sale_note"/> + </div> + <div class="o_setting_right_pane"> + <label for="use_sale_note"/> + <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/> + <div class="text-muted"> + Show standard terms & conditions on orders + </div> + <div class="content-group" attrs="{'invisible': [('use_sale_note','=',False)]}"> + <div class="mt16"> + <field name="sale_note" placeholder="Insert your terms & conditions here..."/> + </div> + </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - </div> - <div class="o_setting_right_pane"> - <label for="sale_show_tax"/> - <div class="text-muted"> - Line subtotals in sales orders + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="group_warning_sale"/> </div> - <div class="mt16"> - <field name="sale_show_tax" class="o_light_label" widget="radio"/> - <field name="group_show_price_subtotal" invisible="1"/> - <field name="group_show_price_total" invisible="1"/> + <div class="o_setting_right_pane"> + <label for="group_warning_sale"/> + <div class="text-muted"> + Get warnings in orders for products or customers + </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="group_proforma_sales"/> - </div> - <div class="o_setting_right_pane"> - <label for="group_proforma_sales"/> - <div class="text-muted"> - Allows you to send Pro-Forma Invoice to your customers + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="group_sale_layout"/> </div> - </div> - </div> - </div> - <h2>Invoicing</h2> - <div class="row mt16 o_settings_container"> - <div class="col-xs-12 col-md-6 o_setting_box" title="This default value is applied to any new product created. This can be changed in the product detail form."> - <div class="o_setting_right_pane"> - <label for="default_invoice_policy"/> - <div class="text-muted"> - Quantities to invoice from sales orders - </div> - <div class="content-group"> - <div class="mt16"> - <field name="default_invoice_policy" class="o_light_label" widget="radio"/> + <div class="o_setting_right_pane"> + <label for="group_sale_layout"/> + <div class="text-muted"> + Sort products in sections with subtotals and page-breaks + </div> + <div class="content-group" attrs="{'invisible': [('group_sale_layout','=',False)]}"> + <div class="mt16"> + <button name="%(sale.report_configuration_action)d" icon="fa-arrow-right" type="action" string="Order Line Sections" class="btn-link"/> + </div> </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box" groups="base.group_no_one"> - <div class="o_setting_left_pane"/> - <div class="o_setting_right_pane"> - <label string="Down Payments"/> - <div class="text-muted"> - Product used for down payments + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="auto_done_setting"/> </div> - <div class="text-muted"> - <field name="default_deposit_product_id"/> + <div class="o_setting_right_pane"> + <label for="auto_done_setting"/> + <div class="text-muted"> + No longer edit orders once confirmed + </div> </div> </div> - </div> - </div> - <h2>Timesheets</h2> - <div class="row mt16 o_settings_container"> - <div class="col-xs-12 col-md-6 o_setting_box" title="Sell services (e.g. project, maintenance), record time spent using Timesheets app and invoice them based on a fixed price (ordered quantity) or on the time spent (delivered quantity)" name="sale_timesheet_box"> - <div class="o_setting_left_pane"> - <field name="module_sale_timesheet" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_sale_timesheet"/> - <div class="text-muted"> - Record time spent on services and invoice it + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_print_docsaway" widget="upgrade_boolean"/> </div> - <div class="content-group" name="msg_module_sale_timesheet"> - <div class="text-warning mt16" attrs="{'invisible': [('module_sale_timesheet','=',False)]}"> - Save this page and come back here to set up the feature. + <div class="o_setting_right_pane"> + <label for="module_print_docsaway"/> + <div class="text-muted" id="print_docsaway"> + Mail your quotations & invoices in one-click using <a href="https://www.docsaway.com/" target="_blank">Docsaway</a> </div> </div> </div> - </div> - </div> - <h2 class="mt32">Shipping</h2> - <div class="row mt16 o_settings_container"> - <div class="col-xs-12 col-md-6 o_setting_box" id="shipping" title="Send delivery orders to your warehouse and get delivered quantities updated in sales orders accordingly."> - <div class="o_setting_left_pane"> - <field name="module_sale_stock"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_sale_stock"/> - <div class="text-muted"> - Manage picking and deliveries + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="group_proforma_sales"/> + </div> + <div class="o_setting_right_pane"> + <label for="group_proforma_sales"/> + <div class="text-muted"> + Allows you to send Pro-Forma Invoice to your customers + </div> </div> </div> </div> - <div class="col-xs-12 col-md-6 o_setting_box" id="delivery"> - <div class="o_setting_left_pane"> - <field name="module_delivery"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_delivery"/> - <div class="text-muted"> - Compute shipping costs + <h2 class="mt32">Shipping</h2> + <div class="row mt16 o_settings_container"> + <div class="col-xs-12 col-md-6 o_setting_box" id="delivery"> + <div class="o_setting_left_pane"> + <field name="module_delivery"/> </div> - <div class="content-group"> - <div class="text-warning mt16" id="delivery_carrier" attrs="{'invisible': [('module_delivery','=',False)]}"> - Save this page and come back here to set up the feature. + <div class="o_setting_right_pane"> + <label for="module_delivery"/> + <div class="text-muted" id="delivery_carrier"> + Compute shipping costs </div> </div> </div> - </div> - </div> - <h2>Shipping Connectors</h2> - <div class="row mt16 o_settings_container" title="Shipping connectors allow to compute accurate shipping costs, print shipping labels and request carrier picking at your warehouse to ship to the customer. Apply shipping connector from delivery methods."> - <div class="col-xs-12 col-md-6 o_setting_box" id="ups"> - <div class="o_setting_left_pane"> - <field name="module_delivery_ups" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_delivery_ups"/> - <div class="text-muted"> - Ship with UPS + <div class="col-xs-12 col-md-6 o_setting_box" id="ups"> + <div class="o_setting_left_pane"> + <field name="module_delivery_ups" widget="upgrade_boolean"/> </div> - <div class="content-group"> - <div class="text-warning mt16" id="delivery_ups" attrs="{'invisible': [('module_delivery_ups','=',False)]}"> - Save this page and come back here to set up the feature. + <div class="o_setting_right_pane"> + <label for="module_delivery_ups"/> + <div class="text-muted" id="delivery_ups"> + Ship with UPS </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_delivery_dhl" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_delivery_dhl"/> - <div class="text-muted"> - Ship with DHL + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_delivery_dhl" widget="upgrade_boolean"/> </div> - <div class="content-group"> - <div class="text-warning mt16" id="delivery_dhl" attrs="{'invisible': [('module_delivery_dhl','=',False)]}"> - Save this page and come back here to set up the feature. + <div class="o_setting_right_pane"> + <label for="module_delivery_dhl"/> + <div class="text-muted" id="delivery_dhl"> + Ship with DHL </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_delivery_fedex" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_delivery_fedex"/> - <div class="text-muted"> - Ship with FedEx + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_delivery_fedex" widget="upgrade_boolean"/> </div> - <div class="content-group"> - <div class="text-warning mt16" id="delivery_fedex" attrs="{'invisible': [('module_delivery_fedex','=',False)]}"> - Save this page and come back here to set up the feature. + <div class="o_setting_right_pane"> + <label for="module_delivery_fedex"/> + <div class="text-muted" id="delivery_fedex"> + Ship with FedEx </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_delivery_usps" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_delivery_usps"/> - <div class="text-muted"> - Ship with USPS + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_delivery_usps" widget="upgrade_boolean"/> </div> - <div class="content-group"> - <div class="text-warning mt16" id="delivery_usps" attrs="{'invisible': [('module_delivery_usps','=',False)]}"> - Save this page and come back here to set up the feature. + <div class="o_setting_right_pane"> + <label for="module_delivery_usps"/> + <div class="text-muted" id="delivery_usps"> + Ship with USPS </div> </div> </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_delivery_bpost" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_delivery_bpost"/> - <div class="text-muted"> - Ship with bpost + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_delivery_bpost" widget="upgrade_boolean"/> </div> - <div class="content-group"> - <div class="text-warning mt16" id="delivery_bpost" attrs="{'invisible': [('module_delivery_bpost','=',False)]}"> - Save this page and come back here to set up the feature. + <div class="o_setting_right_pane"> + <label for="module_delivery_bpost"/> + <div class="text-muted" id="delivery_bpost"> + Ship with bpost </div> </div> </div> </div> - </div> - </xpath> - <xpath expr="//h2[@id='integration_h2']" position="attributes"> - <attribute name="invisible">0</attribute> - </xpath> - <xpath expr="//div[@id='integration']" position="inside"> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_sale_ebay" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_sale_ebay"/> - <div class="text-muted"> - Sell your products on eBay - </div> - <div class="content-group" id="sale_ebay"> - <div class="text-warning mt16" attrs="{'invisible': [('module_sale_ebay','=',False)]}"> - Save this page and come back here to set up the feature. + <h2>Invoicing</h2> + <div class="row mt16 o_settings_container"> + <div class="col-xs-12 col-md-6 o_setting_box" title="This default value is applied to any new product created. This can be changed in the product detail form."> + <div class="o_setting_right_pane"> + <label for="default_invoice_policy"/> + <div class="text-muted"> + Quantities to invoice from sales orders + </div> + <div class="content-group"> + <div class="mt16"> + <field name="default_invoice_policy" class="o_light_label" widget="radio"/> + </div> + </div> </div> </div> - </div> - </div> - </xpath> - <xpath expr="//div[@id='integration']" position="inside"> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_print_docsaway" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_print_docsaway"/> - <div class="text-muted"> - Mail your quotations & invoices in one-click using <a href="https://www.docsaway.com/" target="_blank">Docsaway</a> - </div> - <div class="content-group"> - <div class="text-warning mt16" id="print_docsaway" attrs="{'invisible': [('module_print_docsaway','=',False)]}"> - Save this page and come back here to set up the feature. + <div class="col-xs-12 col-md-6 o_setting_box" groups="base.group_no_one"> + <div class="o_setting_left_pane"/> + <div class="o_setting_right_pane"> + <label string="Down Payments"/> + <div class="text-muted"> + Product used for down payments + </div> + <div class="text-muted"> + <field name="default_deposit_product_id"/> + </div> </div> </div> </div> - </div> - </xpath> - <xpath expr="//div[@id='integration']" position="inside"> - <div class="col-xs-12 col-md-6 o_setting_box" title="When populating your address book, Odoo relies on Clearbit’s API to provide you with a list of matching contacts or companies.When selecting one item, the partner name, logo and website get automatically set."> - <div class="o_setting_left_pane"> - <field name="module_web_clearbit" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_web_clearbit"/> - <div class="text-muted"> - Look up company information (name, logo, etc.) - </div> - </div> - </div> - </xpath> - <xpath expr="//div[@id='sale_subscription']" position="after"> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_account_accountant"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_account_accountant"/> - <div class="text-muted"> - Add all accounting features: journal entries, legal statements, etc. - </div> - </div> - </div> - </xpath> - <xpath expr="//div[@id='module_sale']" position="replace"/> + <div id="sale_ebay"/> + </sheet> + </form> </field> </record> + <record id="action_sale_config_settings" model="ir.actions.act_window"> + <field name="name">Configure Sales</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">sale.config.settings</field> + <field name="view_id" ref="sale_config_settings_view_form"/> + <field name="view_mode">form</field> + <field name="target">inline</field> + </record> + + <menuitem id="menu_sale_general_settings" + name="Settings" + parent="menu_sale_config" + sequence="0" + action="action_sale_config_settings" + groups="base.group_system"/> + </odoo> diff --git a/addons/sale/views/sale_views.xml b/addons/sale/views/sale_views.xml index 9e87f61bfb8..7cdcfbdb229 100644 --- a/addons/sale/views/sale_views.xml +++ b/addons/sale/views/sale_views.xml @@ -2,29 +2,70 @@ <odoo> <!-- Top menu item --> - <!-- - This menu item's purpose is to overwrite another one defined in - the base module in order to set new groups. - --> - <menuitem name="Sales" - id="sales_team.menu_base_partner" - web_icon="sale,static/description/icon.png" - active="False"/> - <menuitem - id= "menu_sales_config" - parent= "sales_team.menu_sale_config" + <menuitem id="sale_menu_root" + name="Sales" + web_icon="sale,static/description/icon.png" + active="False" + sequence="7"/> + + <menuitem id="sale_order_menu" + name="Orders" + parent="sale_menu_root" + sequence="2"/> + + <menuitem id="res_partner_menu" + parent="sale_order_menu" + action="base.action_partner_form" + sequence="3"/> + + <menuitem id="menu_sale_config" + name="Configuration" + parent="sale_menu_root" + sequence="6" + groups="sales_team.group_sale_manager"/> + + <menuitem id= "menu_sales_config" + parent= "menu_sale_config" sequence= "3" - name= "Sales" - groups= "sales_team.group_sale_manager,sales_team.group_sale_salesman,account.group_account_manager,account.group_account_user" - active="False"/> - - <menuitem id="product_menu_catalog" name="Catalog" action="product.product_template_action" parent="sales_team.menu_base_partner" sequence="7" active="False"/> + name= "Sales Orders" + groups= "sales_team.group_sale_manager,sales_team.group_sale_salesman,account.group_account_manager,account.group_account_user"/> + + <menuitem id="sales_team_config" + name="Sales Channels" + parent="sale.menu_sale_config" + action="sales_team.sales_team_config_action" + sequence="2"/> + + <menuitem id="menu_sale_report" + name="Reporting" + parent="sale_menu_root" + sequence="5" + groups="sales_team.group_sale_manager"/> + + <menuitem id="menu_report_product_all" + name="Sales" + action="action_order_report_all" + parent="menu_sale_report" + sequence="1"/> + + <menuitem id="report_sales_team" + name="Sales Channels" + parent="menu_sale_report" + action="sales_team.crm_team_salesteams_act" + sequence="2"/> + + <menuitem id="report_all_channels_sales" + action="report_all_channels_sales_action" + name="All Channels Sales Orders" + parent="menu_sale_report" + sequence="3"/> + + <menuitem id="product_menu_catalog" name="Catalog" action="product.product_template_action" parent="sale_menu_root" sequence="4"/> <menuitem id="menu_product" name="Product Variants" parent="product_menu_catalog" sequence="2" groups="product.group_product_variant" active="False"/> - <menuitem id="sales_team.menu_sales" name="Sales" parent="sales_team.menu_base_partner" sequence="4"/> <menuitem action="product.product_template_action" id="menu_product_template_action" parent="product_menu_catalog" sequence="1" active="False"/> - <menuitem id="sale.prod_config_main" name="Products" parent="sales_team.menu_sale_config" sequence="5" active="False"/> - <menuitem action="product.attribute_action" id="menu_attribute_action" parent="sale.prod_config_main" sequence="1" groups="product.group_product_variant" active="False"/> + <menuitem id="prod_config_main" name="Products" parent="menu_sale_config" sequence="5"/> + <menuitem id="menu_attribute_action" action="product.attribute_action" parent="prod_config_main" sequence="1" groups="product.group_product_variant" active="False"/> <menuitem action="product.variants_action" id="menu_variants_action" parent="sale.prod_config_main" sequence="2" groups="product.group_product_variant" active="False"/> <menuitem id="menu_products" action="product.product_normal_action_sell" parent="product_menu_catalog" groups="product.group_product_variant" sequence="2" active="False"/> <menuitem id="next_id_16" name="Units of Measure" parent="sale.prod_config_main" sequence="6" groups="product.group_uom" active="False"/> @@ -472,9 +513,11 @@ </field> </record> - <menuitem action="action_orders" - id="menu_sale_order" parent="sales_team.menu_sales" - sequence="12" groups="sales_team.group_sale_salesman,sales_team.group_sale_manager" active="False"/> + <menuitem id="menu_sale_order" + name="Orders" + action="action_orders" + parent="sale_order_menu" + sequence="2" groups="sales_team.group_sale_salesman,sales_team.group_sale_manager"/> <record id="action_orders_to_invoice" model="ir.actions.act_window"> <field name="name">Orders to Invoice</field> @@ -494,11 +537,15 @@ </p> </field> </record> - <menuitem name="Invoicing" - id="menu_sale_invoicing" parent="sales_team.menu_base_partner" - sequence="5" active="False"/> - <menuitem action="action_orders_to_invoice" - id="menu_sale_order_invoice" parent="sale.menu_sale_invoicing" + + <menuitem id="menu_sale_invoicing" + name="Invoicing" + parent="sale_menu_root" + sequence="3"/> + + <menuitem id="menu_sale_order_invoice" + action="action_orders_to_invoice" + parent="sale.menu_sale_invoicing" sequence="2" active="False"/> <record id="action_orders_upselling" model="ir.actions.act_window"> @@ -550,8 +597,9 @@ </record> <menuitem id="menu_sale_quotations" - action="action_quotations" parent="sales_team.menu_sales" - sequence="11" active="False"/> + action="action_quotations" + parent="sale_order_menu" + sequence="1"/> <record id="view_order_line_tree" model="ir.ui.view"> <field name="name">sale.order.line.tree</field> diff --git a/addons/sale_crm/__manifest__.py b/addons/sale_crm/__manifest__.py index 6c06ceaface..07c6aad2012 100644 --- a/addons/sale_crm/__manifest__.py +++ b/addons/sale_crm/__manifest__.py @@ -17,13 +17,12 @@ We suggest you to install this module, if you installed both the sale and the cr modules. """, 'website': 'https://www.odoo.com/page/crm', - 'depends': ['sale', 'crm'], + 'depends': ['sale_management', 'crm'], 'data': [ 'security/ir.model.access.csv', 'views/partner_views.xml', 'views/sale_order_views.xml', 'views/crm_lead_views.xml', - 'views/sale_crm_template.xml', ], 'auto_install': True, } diff --git a/addons/sale_crm/static/src/js/tour.js b/addons/sale_crm/static/src/js/tour.js deleted file mode 100644 index bd89ee0d54f..00000000000 --- a/addons/sale_crm/static/src/js/tour.js +++ /dev/null @@ -1,23 +0,0 @@ -odoo.define('sale_crm.tour', function(require) { -"use strict"; - -var core = require('web.core'); -var tour = require('web_tour.tour'); -require('sale.tour'); - -var _t = core._t; - -var quotation_button_step_index = _.findIndex(tour.tours.sale_tour.steps, function (step) { - return (step.id === "quotation_button_on_dashboard"); -}); - -tour.tours.sale_tour.steps.splice(quotation_button_step_index, 1, { - trigger: ".o_kanban_manage_button_section > a", - content: _t("Click here to see more options."), - position: "right" -}, { - trigger: ".o_quotation_view_button", - content: _t("Let's have a look at the quotations of this sales channel."), - position: "right" -}); -}); diff --git a/addons/sale_crm/views/crm_lead_views.xml b/addons/sale_crm/views/crm_lead_views.xml index 26916ce0c2d..119d702f94c 100644 --- a/addons/sale_crm/views/crm_lead_views.xml +++ b/addons/sale_crm/views/crm_lead_views.xml @@ -1,17 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> - <!-- Top menu item --> - <!-- - This menu item's purpose is to rename it into 'Sales' in the - case that CRM was installed after Sales - --> - <record id="sales_team.menu_base_partner" model="ir.ui.menu"> - <field name="name">Sales</field> - <field name="active" eval="True"/> - </record> - - <record id="crm_case_form_view_oppor" model="ir.ui.view"> <field name="name">crm.lead.oppor.inherited.crm</field> <field name="model">crm.lead</field> diff --git a/addons/sale_crm/views/sale_crm_template.xml b/addons/sale_crm/views/sale_crm_template.xml deleted file mode 100644 index 160a0d7603f..00000000000 --- a/addons/sale_crm/views/sale_crm_template.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<odoo> - <data> - <template id="assets_backend" name="project assets" inherit_id="web.assets_backend"> - <xpath expr="." position="inside"> - <script type="text/javascript" src="/sale_crm/static/src/js/tour.js"></script> - </xpath> - </template> - </data> -</odoo> diff --git a/addons/sale_crm/views/sale_order_views.xml b/addons/sale_crm/views/sale_order_views.xml index a4b35d09260..96e462de805 100644 --- a/addons/sale_crm/views/sale_order_views.xml +++ b/addons/sale_crm/views/sale_order_views.xml @@ -40,4 +40,11 @@ </field> </record> + <!-- This menu is display in CRM app when sale is installed--> + <menuitem + id="sale_order_menu_quotations_crm" + action="sale.action_quotations" + parent="crm.crm_menu_pipeline" + sequence="10"/> + </odoo> diff --git a/addons/sale_management/static/src/js/tour.js b/addons/sale_management/static/src/js/tour.js index 29b7e328e57..92bdd5299b8 100644 --- a/addons/sale_management/static/src/js/tour.js +++ b/addons/sale_management/static/src/js/tour.js @@ -9,16 +9,10 @@ var _t = core._t; tour.register('sale_tour', { url: "/web", }, [tour.STEPS.MENU_MORE, { - trigger: '.o_app[data-menu-xmlid="sales_team.menu_base_partner"], .oe_menu_toggler[data-menu-xmlid="sales_team.menu_base_partner"]', + trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"], .oe_menu_toggler[data-menu-xmlid="sale.sale_menu_root"]', content: _t('Organize your sales activities with the <b>Sales Management app</b>.'), position: 'bottom', -}, { - trigger: ".oe_kanban_action_button", - extra_trigger: '.o_salesteam_kanban', - content: _t("Let\'s have a look at the quotations of this sales channel."), - position: "bottom", - id: "quotation_button_on_dashboard", -}, { +}, { trigger: ".o_list_button_add", extra_trigger: ".o_sale_order", content: _t("Let's create a new quotation.<br/><i>Note that colored buttons usually point to the next logical actions.</i>"), @@ -71,7 +65,7 @@ tour.register('sale_tour', { content: _t("Use the breadcrumbs to <b>go back to preceeding screens</b>."), position: "bottom" }, { - trigger: 'li a[data-menu-xmlid="sales_team.menu_sales"], .oe_secondary_menu_section[data-menu-xmlid="sales_team.menu_sales"]', + trigger: 'li a[data-menu-xmlid="sale.sale_order_menu"], .oe_secondary_menu_section[data-menu-xmlid="sale.sale_order_menu"]', content: _t("Use this menu to access quotations, sales orders and customers."), edition: "enterprise", position: "bottom" diff --git a/addons/sale_management/views/sale_management_views.xml b/addons/sale_management/views/sale_management_views.xml index d41c8523712..5537f023cb7 100644 --- a/addons/sale_management/views/sale_management_views.xml +++ b/addons/sale_management/views/sale_management_views.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> - <record id="sales_team.menu_base_partner" model="ir.ui.menu"> + <record id="sale.sale_menu_root" model="ir.ui.menu"> <field name="active" eval="True"/> </record> - <record id="sale.menu_report_product_all" model="ir.ui.menu"> <field name="active" eval="True"/> </record> diff --git a/addons/sale_stock/views/sale_config_settings_views.xml b/addons/sale_stock/views/sale_config_settings_views.xml index ae8115f9ac6..e5b0bb88980 100644 --- a/addons/sale_stock/views/sale_config_settings_views.xml +++ b/addons/sale_stock/views/sale_config_settings_views.xml @@ -4,7 +4,7 @@ <record id="sale_config_settings_view_form_inherit_sale_stock" model="ir.ui.view"> <field name="name">sale.config.settings.inherit.sale_stock</field> <field name="model">sale.config.settings</field> - <field name="inherit_id" ref="sale.sale_config_settings_view_form_inherit_sale"/> + <field name="inherit_id" ref="sale.sale_config_settings_view_form"/> <field name="arch" type="xml"> <xpath expr="//div[@id='delivery']" position="after"> <div class="col-xs-12 col-md-6 o_setting_box" title="By default Odoo computes the expected delivery date this way: order date + highest customer lead time of products. With this option, you can set a specific delivery date on orders rather than setting lead times on products."> diff --git a/addons/sale_stock/views/stock_views.xml b/addons/sale_stock/views/stock_views.xml index edd98a6da33..b70e3ac86cf 100644 --- a/addons/sale_stock/views/stock_views.xml +++ b/addons/sale_stock/views/stock_views.xml @@ -9,7 +9,7 @@ <menuitem id="menu_aftersale" name="After-Sale" groups="sales_team.group_sale_salesman" - parent="sales_team.menu_base_partner" sequence="5" /> + parent="sale.sale_menu_root" sequence="5" /> <menuitem id="menu_invoiced" name="Invoicing" parent="menu_aftersale" sequence="1"/> <record id="stock_location_route_view_form_inherit_sale_stock" model="ir.ui.view"> diff --git a/addons/sale_timesheet/views/res_config_views.xml b/addons/sale_timesheet/views/res_config_views.xml index c5b5ad1ae83..aa79a9ec6d6 100644 --- a/addons/sale_timesheet/views/res_config_views.xml +++ b/addons/sale_timesheet/views/res_config_views.xml @@ -21,26 +21,6 @@ </field> </record> - <record id="sale_config_settings_view_form_inherit_sale_timesheet" model="ir.ui.view"> - <field name="name">sale.config.settings.view.form</field> - <field name="model">sale.config.settings</field> - <field name="inherit_id" ref="sale.sale_config_settings_view_form_inherit_sale"/> - <field name="arch" type="xml"> - <xpath expr="//div[@name='msg_module_sale_timesheet']" position="replace"> - <div class="content-group" name="msg_module_sale_timesheet" attrs="{'invisible': [('module_sale_timesheet', '=', False)]}"> - <div class="mt16"> - <div> - <button name="%(sale_timesheet.product_template_action_time_based)d" string="Setup your time-based services" type="action" class="btn-link" icon="fa-arrow-right"/> - </div> - <div> - <button name="%(sale_timesheet.product_template_action_fixed)d" string="Setup your fixed price services" type="action" class="btn-link" icon="fa-arrow-right"/> - </div> - </div> - </div> - </xpath> - </field> - </record> - <record id="project_config_settings_view_form" model="ir.ui.view"> <field name="name">project.config.settings.view.form</field> <field name="model">project.config.settings</field> diff --git a/addons/sales_team/__manifest__.py b/addons/sales_team/__manifest__.py index c936e067680..199b34db0e8 100644 --- a/addons/sales_team/__manifest__.py +++ b/addons/sales_team/__manifest__.py @@ -14,15 +14,10 @@ Using this application you can manage Sales Channels with CRM and/or Sales 'data': ['security/sales_team_security.xml', 'security/ir.model.access.csv', 'data/sales_team_data.xml', - 'views/sale_config_settings_views.xml', 'views/crm_team_views.xml', 'views/sales_team_dashboard.xml', ], - 'qweb': [ - "static/src/xml/sales_team_dashboard.xml", - ], 'demo': ['data/sales_team_demo.xml'], - 'css': ['static/src/css/sales_team.css'], 'installable': True, 'auto_install': False, } diff --git a/addons/sales_team/models/__init__.py b/addons/sales_team/models/__init__.py index 858af63daf3..96b35e08a86 100644 --- a/addons/sales_team/models/__init__.py +++ b/addons/sales_team/models/__init__.py @@ -4,4 +4,3 @@ from . import crm_team from . import res_partner from . import res_users -from . import sale_config_settings diff --git a/addons/sales_team/models/sale_config_settings.py b/addons/sales_team/models/sale_config_settings.py deleted file mode 100644 index ab6a74a1076..00000000000 --- a/addons/sales_team/models/sale_config_settings.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo import fields, models - - -class SaleConfigSettings(models.TransientModel): - _name = 'sale.config.settings' - _inherit = 'res.config.settings' - - company_id = fields.Many2one('res.company', string='Company', required=True, - default=lambda self: self.env.user.company_id) - module_crm = fields.Boolean("CRM") - module_sale = fields.Boolean("Sales") - module_website_sign = fields.Boolean("eSign") - module_helpdesk = fields.Boolean("Helpdesk") - module_sale_subscription = fields.Boolean("Subscriptions") - module_account_accountant = fields.Boolean("Accounting") diff --git a/addons/sales_team/security/sales_team_security.xml b/addons/sales_team/security/sales_team_security.xml index 9e2e3f9939a..cf23763913c 100644 --- a/addons/sales_team/security/sales_team_security.xml +++ b/addons/sales_team/security/sales_team_security.xml @@ -40,11 +40,6 @@ <field eval="[(6,0,[ref('base.group_system')])]" name="groups_id"/> </record> - <record model="ir.ui.menu" id="menu_config_address_book"> - <field name="name">Contacts</field> - <field eval="[(6,0,[ref('base.group_system'), ref('base.group_partner_manager')])]" name="groups_id"/> - </record> - <data noupdate="1"> <record id="base.default_user" model="res.users"> <field name="groups_id" eval="[(4,ref('sales_team.group_sale_manager'))]"/> diff --git a/addons/sales_team/static/src/css/sales_team.css b/addons/sales_team/static/src/css/sales_team.css deleted file mode 100644 index 7d4a7c767d8..00000000000 --- a/addons/sales_team/static/src/css/sales_team.css +++ /dev/null @@ -1,19 +0,0 @@ -@charset "utf-8"; -.openerp .oe_kanban_view .oe_kanban_crm_salesteams { - /* Customize width and height of kanban according bootstrap3 */ - width: 357px; - min-height: 80px !important; -} -.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_kanban_content div:first-child { - margin-right: 0px; -} -.openerp .oe_kanban_view .oe_deadline { - padding-left: 0.5em; -} -.openerp .oe_salesteam_kanban_view { - margin-left: 0px; - margin-right: -2px; -} -.openerp .oe_margin_top_16 { - margin-top: 16px; -} diff --git a/addons/sales_team/static/src/js/sales_team_dashboard.js b/addons/sales_team/static/src/js/sales_team_dashboard.js deleted file mode 100644 index bd7f708cf37..00000000000 --- a/addons/sales_team/static/src/js/sales_team_dashboard.js +++ /dev/null @@ -1,259 +0,0 @@ -odoo.define('sales_team.dashboard', function (require) { -"use strict"; - -/** - * This file defines the Sales Team Dashboard view (alongside its renderer, - * model and controller), extending the Kanban view. - * The Sales Team Dashboard view is registered to the view registry. - * A large part of this code should be extracted in an AbstractDashboard - * widget in web, to avoid code duplication (see HelpdeskDashboard). - */ - -var core = require('web.core'); -var field_utils = require('web.field_utils'); -var KanbanView = require('web.KanbanView'); -var KanbanModel = require('web.KanbanModel'); -var KanbanRenderer = require('web.KanbanRenderer'); -var KanbanController = require('web.KanbanController'); -var session = require('web.session'); -var view_registry = require('web.view_registry'); - -var QWeb = core.qweb; -var _t = core._t; -var _lt = core._lt; - -var SalesTeamDashboardRenderer = KanbanRenderer.extend({ - events: _.extend({}, KanbanRenderer.prototype.events, { - 'click .o_dashboard_action': '_onDashboardActionClicked', - 'click .o_target_to_set': '_onDashboardTargetClicked', - }), - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * Notifies the controller that the target has changed. - * - * @private - * @param {string} target_name the name of the changed target - * @param {string} value the new value - */ - _notifyTargetChange: function (target_name, value) { - this.trigger_up('dashboard_edit_target', { - target_name: target_name, - target_value: value, - }); - }, - /** - * @override - * @private - * @returns {Deferred} - */ - _render: function () { - var self = this; - return this._super.apply(this, arguments).then(function () { - var values = self.state.dashboardValues; - var sales_team_dashboard = QWeb.render('sales_team.SalesDashboard', { - widget: self, - show_demo: values && values.nb_opportunities === 0, - values: values, - }); - self.$el.prepend(sales_team_dashboard); - }); - }, - /** - * Called from the template to format the monetary value. - * - * @todo: use field_utils.format.monetary - * @private - * @returns {string} formatted value - */ - _renderMonetaryField: function (value, currency_id) { - var currency = session.get_currency(currency_id); - var digits_precision = currency && currency.digits; - value = field_utils.format.float(value || 0, {digits: digits_precision}); - if (currency) { - if (currency.position === "after") { - value += currency.symbol; - } else { - value = currency.symbol + value; - } - } - return value; - }, - - //-------------------------------------------------------------------------- - // Handlers - //-------------------------------------------------------------------------- - - /** - * @private - * @param {MouseEvent} - */ - _onDashboardActionClicked: function (e) { - e.preventDefault(); - var $action = $(e.currentTarget); - this.trigger_up('dashboard_open_action', { - action_name: $action.attr('name'), - action_context: $action.data('context'), - }); - }, - /** - * @private - * @param {MouseEvent} - */ - _onDashboardTargetClicked: function (e) { - if (!this.show_demo) { - // The user is not allowed to modify the targets in demo mode - var self = this; - var $target = $(e.currentTarget); - var target_name = $target.attr('name'); - var target_value = $target.attr('value'); - - var $input = $('<input/>', {type: "text", name: target_name}); - if (target_value) { - $input.attr('value', target_value); - } - $input.on('keyup input', function (e) { - if(e.which === $.ui.keyCode.ENTER) { - self._notifyTargetChange(target_name, $input.val()); - } - }); - $input.on('blur', function () { - self._notifyTargetChange(target_name, $input.val()); - }); - - $input.replaceAll($target) - .focus() - .select(); - } - }, -}); - -var SalesTeamDashboardModel = KanbanModel.extend({ - /** - * @override - */ - init: function () { - this.dashboardValues = {}; - this._super.apply(this, arguments); - }, - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - /** - * @override - */ - get: function (localID) { - var result = this._super.apply(this, arguments); - if (this.dashboardValues[localID]) { - result.dashboardValues = this.dashboardValues[localID]; - } - return result; - }, - /** - * @override - * @returns {Deferred} - */ - load: function () { - return this._loadDashboard(this._super.apply(this, arguments)); - }, - /** - * @override - * @returns {Deferred} - */ - reload: function () { - return this._loadDashboard(this._super.apply(this, arguments)); - }, - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * @abstract - * @private - * @returns {Deferred -> Object} resolves to the required dashboard data - */ - _fetchDashboardData: function () { - return $.when(); - }, - /** - * @private - * @param {Deferred} super_def a deferred that resolves with a dataPoint id - * @returns {Deferred -> string} resolves to the dataPoint id - */ - _loadDashboard: function (super_def) { - var self = this; - var dashboard_def = this._fetchDashboardData(); - return $.when(super_def, dashboard_def).then(function (id, dashboardValues) { - self.dashboardValues[id] = dashboardValues; - return id; - }); - }, -}); - -var SalesTeamDashboardController = KanbanController.extend({ - custom_events: _.extend({}, KanbanController.prototype.custom_events, { - dashboard_open_action: '_onDashboardOpenAction', - dashboard_edit_target: '_onDashboardEditTarget', - }), - - //-------------------------------------------------------------------------- - // Handlers - //-------------------------------------------------------------------------- - - /** - * @private - * @param {OdooEvent} e - */ - _onDashboardEditTarget: function (e) { - var targetName = e.data.target_name; - var targetValue = e.data.target_value; - if(isNaN(targetValue)) { - this.do_warn(_t("Wrong value entered!"), _t("Only Integer Value should be valid.")); - } else { - this._rpc({ - model: 'crm.lead', - method: 'modify_target_sales_dashboard', - args: [targetName, parseInt(targetValue)], - }) - .then(this.reload.bind(this)); - } - }, - /** - * @private - * @param {OdooEvent} e - */ - _onDashboardOpenAction: function (e) { - var action_name = e.data.action_name; - var action_context = e.data.action_context; - this.do_action(action_name, { - additional_context: action_context, - }); - }, -}); - -var SalesTeamDashboardView = KanbanView.extend({ - config: _.extend({}, KanbanView.prototype.config, { - Model: SalesTeamDashboardModel, - Renderer: SalesTeamDashboardRenderer, - Controller: SalesTeamDashboardController, - }), - display_name: _lt('Dashboard'), - icon: 'fa-dashboard', - searchview_hidden: false, -}); - -view_registry.add('sales_team_dashboard', SalesTeamDashboardView); - -return { - Model: SalesTeamDashboardModel, - Renderer: SalesTeamDashboardRenderer, - Controller: SalesTeamDashboardController, -}; - -}); diff --git a/addons/sales_team/static/src/less/sales_team_dashboard.less b/addons/sales_team/static/src/less/sales_team_dashboard.less index db7ced8e487..5c3632b6cea 100644 --- a/addons/sales_team/static/src/less/sales_team_dashboard.less +++ b/addons/sales_team/static/src/less/sales_team_dashboard.less @@ -109,105 +109,6 @@ } } - .o_sales_dashboard { - margin: (0 - @o-kanban-record-margin) (@o-kanban-record-margin - @odoo-horizontal-padding) @o-kanban-record-margin; - .o-flex(1, 0, 100%); - padding: 10px (@odoo-horizontal-padding - @sale-table-spacing); - - background-color: @dashboard-bg-color; - position: relative; - - .o_welcome_message { - width: 100%; - .o-position-absolute(@left: 0, @top: 0); - .o-flex-display(); - .o-justify-content(center); - - .o_welcome_image { - padding: 20px; - } - .o_welcome_content > a { - color: white; - display: inline-block; - } - } - - > .o_demo { - opacity: 0.07; - } - - > div { - display: inline-block; - vertical-align: top; - @media (min-width: @screen-sm-min) { - width: 50%; - } - - > table { - margin-bottom: 0; - table-layout: fixed; - border-spacing: @sale-table-spacing 0px; - border-collapse: separate; - - > tbody > tr > td { - vertical-align: middle; - text-align: center; - border-top: 1px solid @dashboard-bg-color; - width: 25%; - - height: 33px; - - span { - display: inline; - } - - a:hover { - text-decoration: none; - } - - &.o_main { - background-color: @odoo-brand-optional; - &:hover { - background-color: darken(@odoo-brand-optional, 10%); - } - a { - color: white; - } - } - &.o_warning { - background-color: orange; - &:hover { - background-color: darken(orange, 10%); - } - a { - color: white; - } - } - &.o_secondary { - background-color: @odoo-brand-lightsecondary; - &:hover { - background-color: darken(@odoo-brand-lightsecondary, 10%); - } - a { - color: black; - } - } - &.o_highlight, .o_highlight { - font-size: 20px; - } - &.o_text { - text-align: left; - } - } - - } - } - } - - &.o_kanban_nocontent .o_sales_dashboard { - margin: 0; - } - &.o_kanban_grouped { .o-flex-flow(row, wrap); .o_kanban_record { diff --git a/addons/sales_team/static/src/xml/sales_team_dashboard.xml b/addons/sales_team/static/src/xml/sales_team_dashboard.xml deleted file mode 100644 index 3f00b3ae4ae..00000000000 --- a/addons/sales_team/static/src/xml/sales_team_dashboard.xml +++ /dev/null @@ -1,225 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<templates> - <!-- - This template is the ribbon at the top of the salesteam dashboard that adds - some figures to it. We call this rubbon the "SalesDashboard". - --> - <t t-name="sales_team.SalesDashboard"> - <div t-if="show_demo or values" class="o_sales_dashboard"> - <div t-attf-class="#{show_demo ? 'o_demo' : ''}"> - <table class="table table-condensed"> - <tr> - <td class="o_text"> - <div class="o_highlight">To do</div> - Today - </td> - <td class="o_main" title="To Calendar"> - <a href="#" class="o_dashboard_action" name="calendar.action_calendar_event" data-context="{'search_default_mymeetings':'1'}"> - <span class="o_highlight"> - <t t-if="!show_demo"> - <t t-esc="values['meeting']['today']"/> - </t> - <t t-if="show_demo"> - 0 - </t> - </span><br/> - Meetings - </a> - </td> - <td class="o_main" title="To Activities"> - <a href="#" class="o_dashboard_action" name="crm.crm_lead_action_activities" data-context="{'search_default_activities_today':'1'}"> - <span class="o_highlight"> - <t t-if="!show_demo"> - <t t-esc="values['activity']['today']"/> - </t> - <t t-if="show_demo"> - 7 - </t> - </span> <br/> - Next Activities - </a> - </td> - <td class="o_main" title="My Pipeline" rowspan="2"> - <a href="#" class="o_dashboard_action" name="crm.action_your_pipeline"> - <span class="fa fa-th-large fa-3x"/><br/> - My Pipeline - </a> - </td> - </tr> - <tr> - <td class="o_text">Next 7 days</td> - <td class="o_main" title="To Calendar"> - <a href="#" class="o_dashboard_action" name="calendar.action_calendar_event" data-context="{'search_default_mymeetings':'1'}"> - <t t-if="!show_demo"> - <t t-esc="values['meeting']['next_7_days']"/> - </t> - <t t-if="show_demo"> - 9 - </t> - </a> - </td> - <td class="o_main" title="To Activities"> - <a href="#" class="o_dashboard_action" name="crm.crm_lead_action_activities" data-context="{'search_default_activities_week':'1'}"> - <t t-if="!show_demo"> - <t t-esc="values['activity']['next_7_days']"/> - </t> - <t t-if="show_demo"> - 28 - </t> - </a> - </td> - </tr> - <tr> - <td></td> - <td></td> - <!-- Hide overdue when there is none --> - <td t-if="show_demo or (values and values['activity']['overdue'] != 0)" class="o_warning" title="To Activities"> - <a href="#" class="o_dashboard_action" name="crm.crm_lead_action_activities" data-context="{'search_default_activities_overdue':'1'}"> - <t t-if="!show_demo"> - <t t-esc="values['activity']['overdue']"/> overdue - </t> - <t t-if="show_demo"> - 2 - </t> - </a> - </td> - <td t-if="show_demo or (values and values['closing']['overdue'] != 0)" class="o_warning" title="To Opportunities"> - <a href="#" class="o_dashboard_action" name="crm.crm_lead_action_activities" data-context="{'search_default_overdue_opp':'1'}"> - <t t-if="!show_demo"> - <t t-esc="values['closing']['overdue']"/> exp. closing - </t> - <t t-if="show_demo"> - 3 exp. closing - </t> - </a> - </td> - </tr> - </table> - </div><div t-attf-class="#{show_demo ? 'o_demo' : ''}"> - <table class="hidden-xs table table-condensed"> - <tr> - <td class="o_text"> - <div class="o_highlight">Performance</div> - This Month - </td> - <td t-attf-class="#{values and values['done']['target'] and values['done']['this_month'] >= values['done']['target'] ? 'o_main' : 'o_secondary'}" title="To Activity Report"> - <a href="#" class="o_dashboard_action" name="crm.crm_activity_report_action" data-context="{'search_default_this_month':'1'}"> - <span class="o_highlight"> - <t t-if="!show_demo"> - <t t-esc="values['done']['this_month']"/> - </t> - <t t-if="show_demo"> - 94 - </t> - </span> <br/> - Activities Done - </a> - </td> - <td t-attf-class="#{values and values['won']['target'] and values['won']['this_month'] >= values['won']['target'] ? 'o_main' : 'o_secondary'}" title="To Opportunity Report"> - <a href="#" class="o_dashboard_action" name="crm.crm_opportunity_report_action_graph" - data-context="{'search_default_won':'1', 'search_default_this_month': '1'}"> - <span class="o_highlight"> - <t t-if="!show_demo"> - <t t-esc="widget._renderMonetaryField(values['won']['this_month'], values)"/> - </t> - <t t-if="show_demo"> - 78,140.03€ - </t> - </span> <br/> - Won in Opportunities - </a> - </td> - <td t-if="values['invoiced']" t-attf-class="#{values and values['invoiced']['target'] and values['invoiced']['this_month'] >= values['invoiced']['target'] ? 'o_main' : 'o_secondary'}" title="To Invoice Report"> - <a href="#" class="o_dashboard_action" name="account.action_account_invoice_report_all" - data-context="{'search_default_my_invoice':'1', 'search_default_this_month': '1'}"> - <span class="o_highlight"> - <t t-if="!show_demo"> - <t t-esc="widget._renderMonetaryField(values['invoiced']['this_month'], values)"/> - </t> - <t t-if="show_demo"> - 35,029.39€ - </t> - </span> <br/> - Invoiced - </a> - </td> - </tr> - <tr> - <td class="o_text">Target</td> - <td class="o_secondary"> - <span t-if="!show_demo" class="o_target_to_set" name='done' t-att-value="values['done']['target'] ? values['done']['target'] : undefined" title="Click to set"> - <t t-if="values['done']['target']"> - <t t-esc="values['done']['target']"/> - </t> - <t t-if="!values['done']['target']"> - Click to set - </t> - </span> - <span t-if="show_demo"> - 100 - </span> - </td> - <td class="o_secondary"> - <span t-if="!show_demo" class="o_target_to_set" name='won' t-att-value="values['won']['target'] ? values['won']['target'] : undefined" title="Click to set"> - <t t-if="values['won']['target']"> - <t t-esc="values['won']['target']"/> - </t> - <t t-if="!values['won']['target']"> - Click to set - </t> - </span> - <span t-if="show_demo"> - 80.000€ - </span> - </td> - <td t-if="show_demo or values['invoiced']" class="o_secondary"> - <span t-if="!show_demo" class="o_target_to_set" name='invoiced' t-att-value="values['invoiced']['target'] ? values['invoiced']['target'] : undefined" title="Click to set"> - <t t-if="values['invoiced']['target']"> - <t t-esc="values['invoiced']['target']"/> - </t> - <t t-if="!values['invoiced']['target']"> - Click to set - </t> - </span> - <span t-if="show_demo"> - Click to set - </span> - </td> - </tr> - <tr> - <td class="o_text">Last Month</td> - <td class="o_secondary" title="To Activity Report"> - <a href="#" class="o_dashboard_action" name="crm.crm_activity_report_action" data-context="{'search_default_last_month':'1'}"> - <t t-esc="values['done']['last_month']"/> - </a> - </td> - <td class="o_secondary" title="To Opportunity Report"> - <a href="#" class="o_dashboard_action" name="crm.crm_opportunity_report_action_graph" - data-context="{'search_default_won':'1', 'search_default_last_month':'1'}"> - <t t-esc="widget._renderMonetaryField(values['won']['last_month'], values)"/> - </a> - </td> - <td t-if="values['invoiced']" class="o_secondary" title="To Invoice Report"> - <a href="#" class="o_dashboard_action" name="account.action_account_invoice_report_all" - data-context="{'search_default_my_invoice':'1', 'search_default_last_month': '1'}"> - <t t-esc="widget._renderMonetaryField(values['invoiced']['last_month'], values)"/> - </a> - </td> - </tr> - </table> - </div> - - <div t-if="show_demo" class="o_welcome_message"> - <div class="o_welcome_image"> - <i class="fa fa-smile-o fa-5x"></i> - </div> - <div class="o_welcome_content"> - <h2>Hi there!</h2> - <h4>Great sales journeys start with a clean pipeline.</h4> - <h4>Create a few opportunities in it.</h4> - <a class="btn btn-primary o_dashboard_action" name="crm.action_your_pipeline">My Pipeline</a> - </div> - </div> - </div> - </t> -</templates> diff --git a/addons/sales_team/views/crm_team_views.xml b/addons/sales_team/views/crm_team_views.xml index 30bed47bd91..2a854dace0d 100644 --- a/addons/sales_team/views/crm_team_views.xml +++ b/addons/sales_team/views/crm_team_views.xml @@ -2,33 +2,6 @@ <odoo> <data> -<menuitem name="Sales" - id="menu_base_partner" - groups="group_sale_salesman,group_sale_manager" sequence="6"/> - - <menuitem id="menu_sales" name="Sales" parent="menu_base_partner" sequence="5"/> - <menuitem id="menu_partner_form" parent="menu_sales" action="base.action_partner_form" sequence="3"/> - - <menuitem id="menu_sale_config" name="Configuration" parent="menu_base_partner" - sequence="100" groups="group_sale_manager"/> - <menuitem id="menu_sale_general_settings" name="Settings" parent="menu_sale_config" - sequence="0" action="action_sale_config" groups="base.group_system"/> - - <menuitem id="menu_config_address_book" parent="menu_sale_config" name="Contacts" sequence="4" groups="base.group_system"/> - <menuitem action="base.action_partner_category_form" id="menu_partner_category_form" name="Contact Tags" sequence="1" parent="menu_config_address_book" groups="base.group_no_one"/> - <menuitem action="base.action_partner_title_contact" id="menu_partner_title_contact" name="Contact Titles" parent="menu_config_address_book" sequence="3" groups="base.group_no_one"/> - <menuitem id="res_partner_industry_menu" name="Sectors of Activity" action="base.res_partner_industry_action" parent="sales_team.menu_config_address_book" sequence="4" groups="base.group_no_one"/> - <menuitem id="menu_localisation" name="Localization" parent="menu_config_address_book" sequence="5" groups="base.group_no_one"/> - - <menuitem action="base.action_country" id="menu_country_partner" parent="menu_localisation" sequence="1" groups="base.group_no_one"/> - <menuitem action="base.action_country_group" id="menu_country_group" name="Country Group" parent="menu_localisation" sequence="3" groups="base.group_no_one"/> - <menuitem action="base.action_country_state" id="menu_country_state_partner" parent="menu_localisation" sequence="2" groups="base.group_no_one"/> - <menuitem action="base.action_currency_form" id="menu_action_currency_form" parent="menu_localisation" sequence="3" groups="base.group_multi_currency"/> - <menuitem id="menu_config_bank_accounts" name="Bank Accounts" parent="menu_config_address_book" sequence="6" groups="base.group_no_one"/> - <menuitem action="base.action_res_bank_form" id="menu_action_res_bank_form" parent="menu_config_bank_accounts" sequence="1" groups="base.group_no_one"/> - <menuitem action="base.action_res_partner_bank_account_form" id="menu_action_res_partner_bank_form" parent="menu_config_bank_accounts" groups="base.group_no_one" sequence="2"/> - - <!-- Cateamions Search view --> <record id="crm_team_salesteams_search" model="ir.ui.view"> <field name="name">Case Teams - Search</field> @@ -49,7 +22,7 @@ <!-- Case Teams Action --> <record id="crm_team_salesteams_act" model="ir.actions.act_window"> - <field name="name">Dashboard</field> + <field name="name">Sales Channels</field> <field name="res_model">crm.team</field> <field name="view_type">form</field> <field name="view_mode">kanban,form</field> @@ -162,20 +135,14 @@ </field> </record> - <menuitem id="sales_team.menu_sales_team_act" action="crm_team_salesteams_act" sequence="1" parent="sales_team.menu_base_partner" name="Dashboard"/> - <!-- add css / js --> <template id="assets_backend" name="sales_team assets" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> - <link rel="stylesheet" href="/sales_team/static/src/css/sales_team.css"/> <link rel="stylesheet" href="/sales_team/static/src/less/sales_team_dashboard.less"/> <script type="text/javascript" src="/sales_team/static/src/js/sales_team.js"></script> - <script type="text/javascript" src="/sales_team/static/src/js/sales_team_dashboard.js"></script> </xpath> </template> - <menuitem id="menu_sale_report" name="Reporting" parent="sales_team.menu_base_partner" sequence="99" groups="sales_team.group_sale_manager"/> - <record id="sales_team_config_action" model="ir.actions.act_window"> <field name="name">Sales Channels</field> <field name="res_model">crm.team</field> @@ -193,12 +160,6 @@ </field> </record> - <menuitem name="Sales Channels" - id="sales_team_config" - parent="sales_team.menu_sale_config" - action="sales_team_config_action" - sequence="2"/> - <record id="mail_activity_type_action_config_sales" model="ir.actions.act_window"> <field name="name">Activity Types</field> <field name="res_model">mail.activity.type</field> @@ -206,11 +167,5 @@ <field name="view_mode">tree,form</field> <field name="domain">['|', ('res_model_id', '=', False), ('res_model_id.model', '=', 'res.partner')]</field> </record> - <menuitem name="Activity Types" - id="sales_team_menu_config_activity_types" - sequence="2" - action="mail_activity_type_action_config_sales" - parent="sales_team.menu_sale_config"/> - </data> </odoo> diff --git a/addons/sales_team/views/sale_config_settings_views.xml b/addons/sales_team/views/sale_config_settings_views.xml deleted file mode 100644 index 4e2c4625ef0..00000000000 --- a/addons/sales_team/views/sale_config_settings_views.xml +++ /dev/null @@ -1,87 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<odoo> - <!-- Sale config wizard --> - <record id="sale_config_settings_view_form" model="ir.ui.view"> - <field name="name">sale.config.settings.form</field> - <field name="model">sale.config.settings</field> - <field name="arch" type="xml"> - <form string="Configure Sales" class="oe_form_configuration" name="sale_config_form"> - <header> - <button string="Save" type="object" name="execute" class="oe_highlight"/> - <button string="Cancel" type="object" name="cancel" class="oe_link"/> - </header> - <sheet> - <h2 id="integration_h2" invisible="1">Integrations</h2> - <div class="row mt16 o_settings_container" id="integration"/> - <h2 id="recommended_apps">Recommended Apps</h2> - <div class="row mt16 o_settings_container"> - <div class="col-xs-12 col-md-6 o_setting_box" id="module_crm"> - <div class="o_setting_left_pane"> - <field name="module_crm"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_crm"/> - <div class="text-muted"> - Manage leads, opportunities, meetings and activities - </div> - </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box" id="module_sale"> - <div class="o_setting_left_pane"> - <field name="module_sale"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_sale"/> - <div class="text-muted"> - Send quotations and manage invoicing - </div> - </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_helpdesk" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_helpdesk"/> - <div class="text-muted"> - Track after-sales tickets - </div> - </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box"> - <div class="o_setting_left_pane"> - <field name="module_website_sign" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_website_sign"/> - <div class="text-muted"> - Send, sign and approve documents online - </div> - </div> - </div> - <div class="col-xs-12 col-md-6 o_setting_box" id="sale_subscription"> - <div class="o_setting_left_pane"> - <field name="module_sale_subscription" widget="upgrade_boolean"/> - </div> - <div class="o_setting_right_pane"> - <label for="module_sale_subscription"/> - <div class="text-muted"> - Sell recurring services with automated billing - </div> - </div> - </div> - </div> - </sheet> - </form> - </field> - </record> - - <record id="action_sale_config" model="ir.actions.act_window"> - <field name="name">Configure Sales</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">sale.config.settings</field> - <field name="view_id" ref="sale_config_settings_view_form"/> - <field name="view_mode">form</field> - <field name="target">inline</field> - </record> -</odoo>
\ No newline at end of file diff --git a/addons/sales_team/views/sales_team_dashboard.xml b/addons/sales_team/views/sales_team_dashboard.xml index 7471a967ec8..246029b70a1 100644 --- a/addons/sales_team/views/sales_team_dashboard.xml +++ b/addons/sales_team/views/sales_team_dashboard.xml @@ -4,7 +4,7 @@ <field name="name">crm.team.dashboard</field> <field name="model">crm.team</field> <field name="arch" type="xml"> - <kanban class="oe_background_grey o_kanban_dashboard o_salesteam_kanban" create="0" js_class="sales_team_dashboard"> + <kanban class="oe_background_grey o_kanban_dashboard o_salesteam_kanban" create="0"> <field name="name"/> <field name="user_id"/> <field name="member_ids"/> diff --git a/addons/website_crm_partner_assign/report/crm_lead_report_view.xml b/addons/website_crm_partner_assign/report/crm_lead_report_view.xml index 147d6c7541b..2cd3380ae8a 100644 --- a/addons/website_crm_partner_assign/report/crm_lead_report_view.xml +++ b/addons/website_crm_partner_assign/report/crm_lead_report_view.xml @@ -70,6 +70,6 @@ </record> <menuitem id="menu_report_crm_opportunities_assign_tree" - parent="sales_team.menu_sale_report" name="Opp. Assignment" action="action_report_crm_opportunity_assign" sequence="3"/> + parent="crm.crm_menu_report" name="Opp. Assignment" action="action_report_crm_opportunity_assign" sequence="3"/> </odoo> diff --git a/addons/website_crm_partner_assign/report/crm_partner_report_view.xml b/addons/website_crm_partner_assign/report/crm_partner_report_view.xml index 83e392eda51..9d4ad165056 100644 --- a/addons/website_crm_partner_assign/report/crm_partner_report_view.xml +++ b/addons/website_crm_partner_assign/report/crm_partner_report_view.xml @@ -51,6 +51,6 @@ </record> <menuitem name="Partnerships" id="menu_report_crm_partner_assign_tree" - parent="sales_team.menu_sale_report" action="action_report_crm_partner_assign" sequence="4"/> + parent="crm.crm_menu_report" action="action_report_crm_partner_assign" sequence="4"/> </odoo> diff --git a/addons/website_crm_partner_assign/views/res_partner_views.xml b/addons/website_crm_partner_assign/views/res_partner_views.xml index b719c7c297e..3fa903fa38e 100644 --- a/addons/website_crm_partner_assign/views/res_partner_views.xml +++ b/addons/website_crm_partner_assign/views/res_partner_views.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> + <menuitem id="crm_menu_resellers" name="Resellers" parent="crm.crm_menu_config" sequence="16"/> + <!--Partner Activation --> <record model="ir.ui.view" id="res_partner_activation_form"> @@ -32,7 +34,7 @@ <field name="view_mode">tree,form</field> </record> - <menuitem id="res_partner_activation_config_mi" parent="sales_team.menu_localisation" action="res_partner_activation_act" groups="base.group_no_one" + <menuitem id="res_partner_activation_config_mi" parent="crm_menu_resellers" action="res_partner_activation_act" sequence="6"/> <!--Partner Level --> @@ -80,8 +82,7 @@ <field name="view_type">form</field> </record> <menuitem action="res_partner_grade_action" id="menu_res_partner_grade_action" - groups="base.group_no_one" - parent="sales_team.menu_localisation" + parent="crm_menu_resellers" sequence="5" /> <!-- Partner form --> diff --git a/addons/website_customer/views/res_partner_views.xml b/addons/website_customer/views/res_partner_views.xml index 69c59989879..58d948ca26a 100644 --- a/addons/website_customer/views/res_partner_views.xml +++ b/addons/website_customer/views/res_partner_views.xml @@ -62,8 +62,7 @@ id="menu_partner_tag_form" name="Website Tags" sequence="2" - parent="sales_team.menu_config_address_book" - groups="base.group_no_one" + parent="contacts.res_partner_menu_config" /> </odoo> diff --git a/addons/website_quote/views/sale_config_settings_views.xml b/addons/website_quote/views/sale_config_settings_views.xml index 67192198e75..acce85087c4 100644 --- a/addons/website_quote/views/sale_config_settings_views.xml +++ b/addons/website_quote/views/sale_config_settings_views.xml @@ -4,20 +4,22 @@ <record id="sale_config_settings_view_form_inherit_website_quote" model="ir.ui.view"> <field name="name">sale.config.settings.view.form.inherit.website.quote</field> <field name="model">sale.config.settings</field> - <field name="inherit_id" ref="sale.sale_config_settings_view_form_inherit_sale"/> + <field name="inherit_id" ref="sale.sale_config_settings_view_form"/> <field name="arch" type="xml"> - <xpath expr="//div[@id='website_quote']" position="replace"> - <div class="mt16" attrs="{'invisible': [('module_website_quote','=',False)]}"> - <label for="default_template_id" class="o_light_label"/> - <field name="default_template_id" class="oe_inline"/> - </div> - <div attrs="{'invisible': [('module_website_quote','=',False)]}"> - <button name="%(website_quote.action_sale_quotation_template)d" icon="fa-arrow-right" type="action" string="Quotation Templates" class="btn-link"/> - </div> - <div attrs="{'invisible': [('module_website_quote','=',False)]}"> - <button name='%(payment.action_payment_acquirer)d' icon="fa-arrow-right" type="action" string="Payment Acquirers" class="btn-link"/> - </div> - </xpath> + <xpath expr="//div[@id='website_quote']" position="after"> + <div class="content-group"> + <div class="mt16" attrs="{'invisible': [('module_website_quote','=',False)]}"> + <label for="default_template_id" class="o_light_label"/> + <field name="default_template_id" class="oe_inline"/> + </div> + <div attrs="{'invisible': [('module_website_quote','=',False)]}"> + <button name="%(website_quote.action_sale_quotation_template)d" icon="fa-arrow-right" type="action" string="Quotation Templates" class="btn-link"/> + </div> + <div attrs="{'invisible': [('module_website_quote','=',False)]}"> + <button name='%(payment.action_payment_acquirer)d' icon="fa-arrow-right" type="action" string="Payment Acquirers" class="btn-link"/> + </div> + </div> + </xpath> </field> </record> diff --git a/odoo/addons/test_main_flows/static/src/js/tour.js b/odoo/addons/test_main_flows/static/src/js/tour.js index 96ae44af4b5..cb8b15ba403 100644 --- a/odoo/addons/test_main_flows/static/src/js/tour.js +++ b/odoo/addons/test_main_flows/static/src/js/tour.js @@ -10,7 +10,7 @@ tour.register('main_flow_tour', { test: true, url: "/web", }, [tour.STEPS.MENU_MORE, { - trigger: '.o_app[data-menu-xmlid="sales_team.menu_base_partner"], .oe_menu_toggler[data-menu-xmlid="sales_team.menu_base_partner"]', + trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"], .oe_menu_toggler[data-menu-xmlid="sale.sale_menu_root"]', content: _t('Organize your sales activities with the <b>Sales app</b>.'), position: 'bottom', }, { @@ -239,14 +239,10 @@ tour.register('main_flow_tour', { content: _t('Go back to the app switcher'), position: 'bottom', }, { - trigger: '.o_app[data-menu-xmlid="sales_team.menu_base_partner"], .oe_menu_toggler[data-menu-xmlid="sales_team.menu_base_partner"]', - content: _t('Organize your sales activities with the <b>Sales app</b>.'), + trigger: '.o_app[data-menu-xmlid="crm.crm_menu_root"], .oe_menu_toggler[data-menu-xmlid="crm.crm_menu_root"]', + content: _t('Organize your sales activities with the <b>CRM app</b>.'), position: 'bottom', }, { - trigger: ".o_sales_dashboard .o_dashboard_action[name='crm.action_your_pipeline']:last, .oe_secondary_submenu .oe_menu_text:contains('My Pipeline'):first", - content: _t("Let\'s have a look at your opportunities pipeline."), - position: "bottom" -}, { trigger: ".o-kanban-button-new", extra_trigger: '.o_opportunity_kanban', content: _t("Click here to <b>create your first opportunity</b> and add it to your pipeline."), @@ -516,16 +512,16 @@ tour.register('main_flow_tour', { content: _t('Go back to the app switcher'), position: 'bottom', }, { - trigger: '.o_app[data-menu-xmlid="sales_team.menu_base_partner"], .oe_menu_toggler[data-menu-xmlid="sales_team.menu_base_partner"]', + trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"], .oe_menu_toggler[data-menu-xmlid="sale.sale_menu_root"]', content: _t('Organize your sales activities with the <b>Sales app</b>.'), position: 'bottom', }, { edition: "enterprise", - trigger: ".o_menu_sections a[data-menu-xmlid='sales_team.menu_sales']", + trigger: ".o_menu_sections a[data-menu-xmlid='sale.sale_order_menu']", content: _t("Go to Sales menu"), position: "bottom" }, { - trigger: ".o_menu_sections a:has(span:contains('Sales Orders')), .oe_secondary_submenu .oe_menu_text:contains('Sales Orders'):first", + trigger: ".o_menu_sections a[data-menu-xmlid='sale.menu_sale_order'], .oe_secondary_submenu a[data-menu-xmlid='sale.menu_sale_order']", content: _t("Go to the sales orders"), position: "bottom" }, { |
