From 17c9b7afee219e86e48035044570939a70fb18f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 29 Nov 2017 16:22:08 +0100 Subject: [PATCH] [IMP] sale: improve activity management on sale order model This commit improves sale management through a better integration of activities and addition of automated activities. Several things are done in this commit : * automatic activities generation is added for sale order upselling. They are also automatically removed or updated when the sale order state changes from or to upselling to avoid bloating users with unnecessary activities; * a menu to configure activity types is added. Indeed HR managers should be able to see and configure activity types related to their job; Technically we choose to override _write in order to catch the invoice_status computed field update and try to have a lightweight implementation. Indeed sale.order is a complex model and we tried to have a low-level override that do not mess with business overrides. --- addons/sale/__manifest__.py | 1 + addons/sale/data/mail_data.xml | 7 +++++++ addons/sale/models/sale.py | 25 +++++++++++++++++++++++ addons/sale/security/ir.model.access.csv | 1 + addons/sale/views/mail_activity_views.xml | 16 +++++++++++++++ 5 files changed, 50 insertions(+) create mode 100644 addons/sale/views/mail_activity_views.xml diff --git a/addons/sale/__manifest__.py b/addons/sale/__manifest__.py index ca5786aefe9..9a84cb0564a 100644 --- a/addons/sale/__manifest__.py +++ b/addons/sale/__manifest__.py @@ -26,6 +26,7 @@ This module contains all the common features of Sales Management and eCommerce. 'views/account_invoice_views.xml', 'views/sales_team_views.xml', 'views/res_partner_views.xml', + 'views/mail_activity_views.xml', 'views/assets.xml', 'views/sale_portal_templates.xml', 'views/sale_layout_category_view.xml', diff --git a/addons/sale/data/mail_data.xml b/addons/sale/data/mail_data.xml index 238bb55d2f2..5c9d0b6a2e5 100644 --- a/addons/sale/data/mail_data.xml +++ b/addons/sale/data/mail_data.xml @@ -1,6 +1,13 @@ + + + Order Upsell + fa-line-chart + + + Quotation sent diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index 5758e50f72b..0461dbadfdd 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -289,6 +289,31 @@ class SaleOrder(models.Model): result = super(SaleOrder, self).create(vals) return result + @api.multi + def _write(self, values): + """ Override of private write method in order to generate activities + based in the invoice status. As the invoice status is a computed field + triggered notably when its lines and linked invoice status changes the + flow does not necessarily goes through write if the action was not done + on the SO itself. We hence override the _write to catch the computation + of invoice_status field. """ + if self.env.context.get('mail_activity_automation_skip'): + return super(SaleOrder, self)._write(values) + + res = super(SaleOrder, self)._write(values) + if 'invoice_status' in values: + self.activity_unlink(['sale.mail_act_sale_upsell']) + if values['invoice_status'] == 'upselling': + for order in self: + order.activity_schedule( + 'sale.mail_act_sale_upsell', fields.Date.today(), + user_id=order.user_id.id, + note=_("Upsell %s for customer %s") % ( + order._name, order.id, order.name, + order.partner_id._name, order.partner_id.id, order.partner_id.display_name)) + + return res + @api.multi def copy_data(self, default=None): if default is None: diff --git a/addons/sale/security/ir.model.access.csv b/addons/sale/security/ir.model.access.csv index 1a559ba8f4c..61ff1649721 100644 --- a/addons/sale/security/ir.model.access.csv +++ b/addons/sale/security/ir.model.access.csv @@ -55,3 +55,4 @@ access_account_tax_group_sale_manager,account.tax.group sale manager,account.mod access_account_account_sale_manager,account.account sale manager,account.model_account_account,sales_team.group_sale_manager,1,0,0,0 access_report_all_channels_sales_salesman,report.all.channels.sales,model_report_all_channels_sales,sales_team.group_sale_salesman,1,1,1,0 access_report_all_channels_sales_manager,report.all.channels.sales,model_report_all_channels_sales,sales_team.group_sale_manager,1,1,1,1 +access_mail_activity_type_sale_manager,mail.activity.type.sale.manager,mail.model_mail_activity_type,sales_team.group_sale_manager,1,1,1,1 \ No newline at end of file diff --git a/addons/sale/views/mail_activity_views.xml b/addons/sale/views/mail_activity_views.xml new file mode 100644 index 00000000000..6c0eede2515 --- /dev/null +++ b/addons/sale/views/mail_activity_views.xml @@ -0,0 +1,16 @@ + + + + + Activity Types + mail.activity.type + form + tree,form + ['|', ('res_model_id', '=', False), ('res_model_id.model', '=', 'sale.order')] + {'default_res_model': 'sale.order'} + + + \ No newline at end of file