diff --git a/addons/website_sale_slides/__manifest__.py b/addons/website_sale_slides/__manifest__.py index 91fcb574d36..caafbefba60 100644 --- a/addons/website_sale_slides/__manifest__.py +++ b/addons/website_sale_slides/__manifest__.py @@ -10,7 +10,9 @@ 'depends': ['website_slides', 'website_sale'], 'installable': True, 'data': [ + 'report/sale_report_views.xml', 'views/assets.xml', + 'views/website_slides_menu_views.xml', 'views/slide_channel_views.xml', 'views/website_slides_templates.xml', ], diff --git a/addons/website_sale_slides/models/__init__.py b/addons/website_sale_slides/models/__init__.py index 715f352d147..a7ae607df42 100644 --- a/addons/website_sale_slides/models/__init__.py +++ b/addons/website_sale_slides/models/__init__.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from . import product_product from . import slide_channel from . import sale_order diff --git a/addons/website_sale_slides/models/product_product.py b/addons/website_sale_slides/models/product_product.py new file mode 100644 index 00000000000..94fc0c6e82b --- /dev/null +++ b/addons/website_sale_slides/models/product_product.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class Product(models.Model): + _inherit = "product.product" + + channel_ids = fields.One2many('slide.channel', 'product_id', string='Courses') diff --git a/addons/website_sale_slides/models/slide_channel.py b/addons/website_sale_slides/models/slide_channel.py index 4acdb2e1ba6..88920f58e55 100644 --- a/addons/website_sale_slides/models/slide_channel.py +++ b/addons/website_sale_slides/models/slide_channel.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import models, fields +from odoo import api, fields, models class Channel(models.Model): @@ -9,11 +9,32 @@ class Channel(models.Model): enroll = fields.Selection(selection_add=[('payment', 'On payment')]) product_id = fields.Many2one('product.product', 'Product', index=True) + product_sale_revenues = fields.Float( + string='Total revenues', compute='_compute_product_sale_revenues', + groups="sales_team.group_sale_salesman") _sql_constraints = [ ('product_id_check', "CHECK( enroll!='payment' OR product_id IS NOT NULL )", "Product is required for on payment channels.") ] + @api.depends('product_id') + def _compute_product_sale_revenues(self): + domain = [ + ('state', 'in', self.env['sale.report']._get_done_states()), + ('product_id', 'in', self.product_id.ids), + ] + rg_data = dict( + (item['product_id'][0], item['price_total']) + for item in self.env['sale.report'].read_group(domain, ['product_id', 'price_total'], ['product_id']) + ) + for channel in self: + channel.product_sale_revenues = rg_data.get(channel.product_id.id, 0) + + def action_view_sales(self): + action = self.env.ref('website_sale_slides.sale_report_action_slides').read()[0] + action['domain'] = [('product_id', 'in', self.product_id.ids)] + return action + def _filter_add_members(self, target_partners, **member_values): """ Overridden to add 'payment' channels to the filtered channels. People that can write on payment-based channels can add members. """ diff --git a/addons/website_sale_slides/report/sale_report_views.xml b/addons/website_sale_slides/report/sale_report_views.xml new file mode 100644 index 00000000000..14d3bebd3c8 --- /dev/null +++ b/addons/website_sale_slides/report/sale_report_views.xml @@ -0,0 +1,23 @@ + + + + sale.report.view.graph.slides + sale.report + + + + + + + + + + eLearning Revenues + sale.report + ir.actions.act_window + graph,pivot + [("product_id.channel_ids", "!=", False)] + {'group_by': ['confirmation_date', 'product_id']} + + + diff --git a/addons/website_sale_slides/views/slide_channel_views.xml b/addons/website_sale_slides/views/slide_channel_views.xml index f620e6e14fd..cc6945147b0 100644 --- a/addons/website_sale_slides/views/slide_channel_views.xml +++ b/addons/website_sale_slides/views/slide_channel_views.xml @@ -1,16 +1,43 @@ - - - - slide.channel.view.form.inherit.sale - slide.channel - - - - - - - - - + + + slide.channel.view.form.inherit.sale + slide.channel + + + + + + + + + + + + + slide.channel.view.kanban.inherit.sale + slide.channel + + + + + + +
+ + +
+
+ + {'invisible': [('enroll', '=', 'payment')]} + +
+
+
diff --git a/addons/website_sale_slides/views/website_slides_menu_views.xml b/addons/website_sale_slides/views/website_slides_menu_views.xml new file mode 100644 index 00000000000..cb11ed28fd0 --- /dev/null +++ b/addons/website_sale_slides/views/website_slides_menu_views.xml @@ -0,0 +1,8 @@ + + + + diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml index 898599ede25..698dd59f0c2 100644 --- a/addons/website_slides/views/slide_channel_views.xml +++ b/addons/website_slides/views/slide_channel_views.xml @@ -276,7 +276,7 @@ -
+