diff --git a/addons/event_sale/models/event.py b/addons/event_sale/models/event.py
index 0ab88b3be85..3d3e9095a43 100644
--- a/addons/event_sale/models/event.py
+++ b/addons/event_sale/models/event.py
@@ -190,6 +190,9 @@ class EventRegistration(models.Model):
# TDE FIXME: maybe add an onchange on sale_order_id + origin
sale_order_id = fields.Many2one('sale.order', string='Source Sales Order', ondelete='cascade')
sale_order_line_id = fields.Many2one('sale.order.line', string='Sales Order Line', ondelete='cascade')
+ campaign_id = fields.Many2one('utm.campaign', 'Campaign', related="sale_order_id.campaign_id", store=True)
+ source_id = fields.Many2one('utm.source', 'Source', related="sale_order_id.source_id", store=True)
+ medium_id = fields.Many2one('utm.medium', 'Medium', related="sale_order_id.medium_id", store=True)
@api.onchange('event_id')
def _onchange_event_id(self):
diff --git a/addons/event_sale/views/event_views.xml b/addons/event_sale/views/event_views.xml
index 778bd166cb3..097f4ede3fe 100644
--- a/addons/event_sale/views/event_views.xml
+++ b/addons/event_sale/views/event_views.xml
@@ -45,6 +45,11 @@
+
+
+
+
+
diff --git a/addons/mass_mailing_sale/__manifest__.py b/addons/mass_mailing_sale/__manifest__.py
index e241e12f7b8..74c8e741c63 100644
--- a/addons/mass_mailing_sale/__manifest__.py
+++ b/addons/mass_mailing_sale/__manifest__.py
@@ -7,7 +7,7 @@
'version': '1.0',
'summary': 'Add sale order UTM info on mass mailing',
'description': """UTM and mass mailing on sale orders""",
- 'depends': ['sale', 'mass_mailing', 'website_sale_link_tracker'],
+ 'depends': ['sale', 'mass_mailing'],
'data': [
'views/mass_mailing_views.xml',
],
diff --git a/addons/mass_mailing_sale/data/mass_mailing_demo.xml b/addons/mass_mailing_sale/data/mass_mailing_demo.xml
index 3515f59c97b..9a5524c532f 100644
--- a/addons/mass_mailing_sale/data/mass_mailing_demo.xml
+++ b/addons/mass_mailing_sale/data/mass_mailing_demo.xml
@@ -9,7 +9,7 @@
-
+
[]
diff --git a/addons/pos_sale/report/sale_report.py b/addons/pos_sale/report/sale_report.py
index 735aaf56169..97ccd467f69 100644
--- a/addons/pos_sale/report/sale_report.py
+++ b/addons/pos_sale/report/sale_report.py
@@ -41,6 +41,9 @@ class SaleReport(models.Model):
pos.partner_id AS partner_id,
pos.user_id AS user_id,
pos.company_id AS company_id,
+ NULL AS campaign_id,
+ NULL AS medium_id,
+ NULL AS source_id,
extract(epoch from avg(date_trunc('day',pos.date_order)-date_trunc('day',pos.create_date)))/(24*60*60)::decimal(16,2) AS delay,
t.categ_id AS categ_id,
pos.pricelist_id AS pricelist_id,
diff --git a/addons/sale/__manifest__.py b/addons/sale/__manifest__.py
index c275df0ac9b..d16eb17bf8c 100644
--- a/addons/sale/__manifest__.py
+++ b/addons/sale/__manifest__.py
@@ -9,7 +9,7 @@
'description': """
This module contains all the common features of Sales Management and eCommerce.
""",
- 'depends': ['sales_team', 'payment', 'portal'],
+ 'depends': ['sales_team', 'payment', 'portal', 'utm'],
'data': [
'security/sale_security.xml',
'security/ir.model.access.csv',
diff --git a/addons/sale/models/account_invoice.py b/addons/sale/models/account_invoice.py
index 76c4e541be0..6f9c3d2b567 100644
--- a/addons/sale/models/account_invoice.py
+++ b/addons/sale/models/account_invoice.py
@@ -5,7 +5,8 @@ from odoo import api, fields, models, _
class AccountInvoice(models.Model):
- _inherit = 'account.invoice'
+ _name = 'account.invoice'
+ _inherit = ['account.invoice', 'utm.mixin']
@api.model
def _get_default_team(self):
@@ -45,6 +46,14 @@ class AccountInvoice(models.Model):
company = self.company_id or self.env.user.company_id
self.comment = company.with_context(lang=self.partner_id.lang).invoice_terms
+ @api.multi
+ def _prepare_refund(self, invoice, date_invoice=None, date=None, description=None, journal_id=None):
+ values = super(AccountInvoice, self)._prepare_refund(invoice, date_invoice, date, description, journal_id)
+ values.update({'campaign_id': invoice.campaign_id.id,
+ 'medium_id': invoice.medium_id.id,
+ 'source_id': invoice.source_id.id})
+ return values
+
@api.multi
def action_invoice_open(self):
# OVERRIDE
diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py
index 172479e1485..77bd31385cc 100644
--- a/addons/sale/models/sale.py
+++ b/addons/sale/models/sale.py
@@ -19,7 +19,7 @@ from werkzeug.urls import url_encode
class SaleOrder(models.Model):
_name = "sale.order"
- _inherit = ['portal.mixin', 'mail.thread', 'mail.activity.mixin']
+ _inherit = ['portal.mixin', 'mail.thread', 'mail.activity.mixin', 'utm.mixin']
_description = "Sales Order"
_order = 'date_order desc, id desc'
@@ -458,6 +458,9 @@ class SaleOrder(models.Model):
'payment_term_id': self.payment_term_id.id,
'fiscal_position_id': self.fiscal_position_id.id or self.partner_invoice_id.property_account_position_id.id,
'company_id': self.company_id.id,
+ 'campaign_id': self.campaign_id.id,
+ 'medium_id': self.medium_id.id,
+ 'source_id': self.source_id.id,
'user_id': self.user_id and self.user_id.id,
'team_id': self.team_id.id,
'transaction_ids': [(6, 0, self.transaction_ids.ids)],
diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py
index 79402453440..fab00d06a39 100644
--- a/addons/sale/report/sale_report.py
+++ b/addons/sale/report/sale_report.py
@@ -49,6 +49,9 @@ class SaleReport(models.Model):
discount = fields.Float('Discount %', readonly=True)
discount_amount = fields.Float('Discount Amount', readonly=True)
+ campaign_id = fields.Many2one('utm.campaign', 'Campaign')
+ medium_id = fields.Many2one('utm.medium', 'Medium')
+ source_id = fields.Many2one('utm.source', 'Source')
order_id = fields.Many2one('sale.order', 'Order #', readonly=True)
@@ -75,6 +78,9 @@ class SaleReport(models.Model):
s.partner_id as partner_id,
s.user_id as user_id,
s.company_id as company_id,
+ s.campaign_id as campaign_id,
+ s.medium_id as medium_id,
+ s.source_id as source_id,
extract(epoch from avg(date_trunc('day',s.date_order)-date_trunc('day',s.create_date)))/(24*60*60)::decimal(16,2) as delay,
t.categ_id as categ_id,
s.pricelist_id as pricelist_id,
@@ -118,6 +124,9 @@ class SaleReport(models.Model):
s.user_id,
s.state,
s.company_id,
+ s.campaign_id,
+ s.medium_id,
+ s.source_id,
s.pricelist_id,
s.analytic_account_id,
s.team_id,
diff --git a/addons/sale/views/sale_views.xml b/addons/sale/views/sale_views.xml
index 1a93bb16c04..d2076bd9dfb 100644
--- a/addons/sale/views/sale_views.xml
+++ b/addons/sale/views/sale_views.xml
@@ -570,6 +570,11 @@
+
+
+
+
+
@@ -1049,6 +1054,13 @@
sale.group_discount_per_so_line
+
+
+
+
+
+
+
diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py
index e7a94413116..58e10c2480a 100644
--- a/addons/sale/wizard/sale_make_invoice_advance.py
+++ b/addons/sale/wizard/sale_make_invoice_advance.py
@@ -120,6 +120,9 @@ class SaleAdvancePaymentInv(models.TransientModel):
'payment_term_id': order.payment_term_id.id,
'fiscal_position_id': order.fiscal_position_id.id or order.partner_id.property_account_position_id.id,
'team_id': order.team_id.id,
+ 'campaign_id': order.campaign_id.id,
+ 'medium_id': order.medium_id.id,
+ 'source_id': order.source_id.id,
'user_id': order.user_id.id,
'comment': order.note,
})
diff --git a/addons/sale_crm/models/sale_order.py b/addons/sale_crm/models/sale_order.py
index 51a95f819ff..e635f2fe81b 100644
--- a/addons/sale_crm/models/sale_order.py
+++ b/addons/sale_crm/models/sale_order.py
@@ -5,8 +5,7 @@ from odoo import fields, models
class SaleOrder(models.Model):
- _name = "sale.order"
- _inherit = ['sale.order', 'utm.mixin']
+ _inherit = 'sale.order'
tag_ids = fields.Many2many('crm.lead.tag', 'sale_order_tag_rel', 'order_id', 'tag_id', string='Tags')
opportunity_id = fields.Many2one('crm.lead', string='Opportunity', domain="[('type', '=', 'opportunity')]")