diff --git a/addons/website_sale_slides/__manifest__.py b/addons/website_sale_slides/__manifest__.py index 91fcb574d36f99e039898f07b9015269900ea95e..caafbefba607ccfa12f5a5d95fcf7f803785ff60 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 715f352d147968e2398b429e0ebc1e4d9e33e0f8..a7ae607df420e96fa2e6098fd87fdf2ad2034ad3 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 0000000000000000000000000000000000000000..94fc0c6e82b41bf5bfb83694448f94be3b1cf58e --- /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 4acdb2e1ba63cc3d7de81ec903e108324d03cb91..88920f58e556b26c99116fc7ecf505fb535379ff 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 0000000000000000000000000000000000000000..14d3bebd3c8f49c330a84b64be162ced12f09235 --- /dev/null +++ b/addons/website_sale_slides/report/sale_report_views.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="sale_report_view_graph_slides" model="ir.ui.view"> + <field name="name">sale.report.view.graph.slides</field> + <field name="model">sale.report</field> + <field name="arch" type="xml"> + <graph string="eLearning Sales Analysis" type="line"> + <field name="confirmation_date" type="row" interval="day"/> + <field name="price_subtotal" type="measure"/> + </graph> + </field> + </record> + + <record id="sale_report_action_slides" model="ir.actions.act_window"> + <field name="name">eLearning Revenues</field> + <field name="res_model">sale.report</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">graph,pivot</field> + <field name="domain">[("product_id.channel_ids", "!=", False)]</field> + <field name="context">{'group_by': ['confirmation_date', 'product_id']}</field> + <field name="view_id" ref="sale_report_view_graph_slides"/> + </record> +</odoo> diff --git a/addons/website_sale_slides/views/slide_channel_views.xml b/addons/website_sale_slides/views/slide_channel_views.xml index f620e6e14fd9c30afd00e5e76782a5ff6aa96763..cc6945147b02e2bcf557ccb8f03466c8d96bd714 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 @@ <?xml version="1.0" encoding="utf-8"?> -<odoo> - <data> - <record id="slide_channel_view_form" model="ir.ui.view"> - <field name="name">slide.channel.view.form.inherit.sale</field> - <field name="model">slide.channel</field> - <field name="inherit_id" ref="website_slides.view_slide_channel_form"/> - <field name="arch" type="xml"> - <xpath expr="//field[@name='enroll']" position="after"> - <field name="product_id" - attrs="{'invisible': [('enroll', '!=', 'payment')], 'required': [('enroll', '=', 'payment')]}" /> - </xpath> - </field> - </record> - </data> -</odoo> +<odoo><data> + <record id="slide_channel_view_form" model="ir.ui.view"> + <field name="name">slide.channel.view.form.inherit.sale</field> + <field name="model">slide.channel</field> + <field name="inherit_id" ref="website_slides.view_slide_channel_form"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='enroll']" position="after"> + <field name="product_id" + attrs="{'invisible': [('enroll', '!=', 'payment')], 'required': [('enroll', '=', 'payment')]}" /> + </xpath> + <xpath expr="//button[@name='action_redirect_to_members']" position="after"> + <button name="action_view_sales" + type="object" + icon="fa-signal" + class="oe_stat_button" + groups="sales_team.group_sale_salesman"> + <field name="product_sale_revenues" string="Sales" widget="statinfo"/> + </button> + </xpath> + </field> + </record> + + <record id="slide_channel_view_kanban" model="ir.ui.view"> + <field name="name">slide.channel.view.kanban.inherit.sale</field> + <field name="model">slide.channel</field> + <field name="inherit_id" ref="website_slides.slide_channel_view_kanban"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='website_published']" position="before"> + <field name="enroll"/> + </xpath> + <xpath expr="//div[@name='info_total_time']" position="after"> + <div class="d-flex" attrs="{'invisible': [('enroll', '!=', 'payment')]}"> + <span class="mr-auto"><label for="product_sale_revenues" class="mb0">Sales</label></span> + <field name="product_sale_revenues"/> + </div> + </xpath> + <xpath expr="//a[@name='action_channel_invite']" position="attributes"> + <attribute name="attrs">{'invisible': [('enroll', '=', 'payment')]}</attribute> + </xpath> + </field> + </record> +</data></odoo> 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 0000000000000000000000000000000000000000..cb11ed28fd0b15e347465d2983eaca2ca773bd7e --- /dev/null +++ b/addons/website_sale_slides/views/website_slides_menu_views.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <menuitem name="Revenues" + id="website_slides_menu_report_revenues" + parent="website_slides.website_slides_menu_report" + sequence="3" + action="sale_report_action_slides"/> +</odoo> diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml index 898599ede254dfccec3ac22f893a7287e7e9457d..698dd59f0c2c742f254e01c070ef66b3f2a9c8e2 100644 --- a/addons/website_slides/views/slide_channel_views.xml +++ b/addons/website_slides/views/slide_channel_views.xml @@ -276,7 +276,7 @@ <span class="mr-auto"><label for="total_views" class="mb0">Views</label></span> <field name="total_views"/> </div> - <div class="d-flex"> + <div class="d-flex" name="info_total_time"> <span class="mr-auto"><label for="total_time" class="mb0">Watch Time</label></span> <field name="total_time" widget="float_time"/> </div>