diff --git a/addons/account/report/account_invoice_report.py b/addons/account/report/account_invoice_report.py index b56e6170fdd..7572abf7352 100644 --- a/addons/account/report/account_invoice_report.py +++ b/addons/account/report/account_invoice_report.py @@ -27,8 +27,8 @@ class AccountInvoiceReport(models.Model): record.user_currency_price_average = base_currency_id._convert(record.price_average, user_currency_id, company, date) record.user_currency_residual = base_currency_id._convert(record.residual, user_currency_id, company, date) - number = fields.Char('Invoice Number', readonly=True) - date = fields.Date(readonly=True) + number = fields.Char('Invoice #', readonly=True) + date = fields.Date(readonly=True, string="Invoice Date") product_id = fields.Many2one('product.product', string='Product', readonly=True) product_qty = fields.Float(string='Product Quantity', readonly=True) uom_name = fields.Char(string='Reference Unit of Measure', readonly=True) @@ -41,7 +41,7 @@ class AccountInvoiceReport(models.Model): commercial_partner_id = fields.Many2one('res.partner', string='Partner Company', help="Commercial Entity") company_id = fields.Many2one('res.company', string='Company', readonly=True) user_id = fields.Many2one('res.users', string='Salesperson', readonly=True) - price_total = fields.Float(string='Total Without Tax', readonly=True) + price_total = fields.Float(string='Untaxed Total', readonly=True) user_currency_price_total = fields.Float(string="Total Without Tax in Currency", compute='_compute_amounts_in_user_currency', digits=0) price_average = fields.Float(string='Average Price', readonly=True, group_operator="avg") user_currency_price_average = fields.Float(string="Average Price in Currency", compute='_compute_amounts_in_user_currency', digits=0) @@ -61,13 +61,14 @@ class AccountInvoiceReport(models.Model): ('cancel', 'Cancelled') ], string='Invoice Status', readonly=True) date_due = fields.Date(string='Due Date', readonly=True) - account_id = fields.Many2one('account.account', string='Account', readonly=True, domain=[('deprecated', '=', False)]) - account_line_id = fields.Many2one('account.account', string='Account Line', readonly=True, domain=[('deprecated', '=', False)]) + account_id = fields.Many2one('account.account', string='Receivable/Payable Account', readonly=True, domain=[('deprecated', '=', False)]) + account_line_id = fields.Many2one('account.account', string='Revenue/Expense Account', readonly=True, domain=[('deprecated', '=', False)]) partner_bank_id = fields.Many2one('res.partner.bank', string='Bank Account', readonly=True) residual = fields.Float(string='Due Amount', readonly=True) user_currency_residual = fields.Float(string="Total Residual", compute='_compute_amounts_in_user_currency', digits=0) - country_id = fields.Many2one('res.country', string='Country of the Partner Company') + country_id = fields.Many2one('res.country', string="Partner Company's Country") account_analytic_id = fields.Many2one('account.analytic.account', string='Analytic Account', groups="analytic.group_analytic_accounting") + amount_total = fields.Float(string='Total', readonly=True) _order = 'date desc' @@ -95,7 +96,7 @@ class AccountInvoiceReport(models.Model): sub.payment_term_id, sub.uom_name, sub.currency_id, sub.journal_id, sub.fiscal_position_id, sub.user_id, sub.company_id, sub.nbr, sub.invoice_id, sub.type, sub.state, sub.categ_id, sub.date_due, sub.account_id, sub.account_line_id, sub.partner_bank_id, - sub.product_qty, sub.price_total as price_total, sub.price_average as price_average, + sub.product_qty, sub.price_total as price_total, sub.price_average as price_average, sub.amount_total as amount_total, COALESCE(cr.rate, 1) as currency_rate, sub.residual as residual, sub.commercial_partner_id as commercial_partner_id """ return select_str @@ -113,6 +114,7 @@ class AccountInvoiceReport(models.Model): ai.partner_bank_id, SUM ((invoice_type.sign_qty * ail.quantity) / u.factor * u2.factor) AS product_qty, SUM(ail.price_subtotal_signed * invoice_type.sign) AS price_total, + SUM(ai.amount_total * invoice_type.sign) AS amount_total, SUM(ABS(ail.price_subtotal_signed)) / CASE WHEN SUM(ail.quantity / u.factor * u2.factor) <> 0::numeric THEN SUM(ail.quantity / u.factor * u2.factor) diff --git a/addons/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml index 5c539b396fc..fceb9ed526e 100644 --- a/addons/account/report/account_invoice_report_view.xml +++ b/addons/account/report/account_invoice_report_view.xml @@ -69,31 +69,29 @@ - - - - + + - - + + + - - + + - @@ -118,7 +116,7 @@ From this report, you can have an overview of the amount invoiced to your customers. The search tool can also be used to personalise your Invoices reports and so, match this analysis to your needs. - + diff --git a/addons/account/views/account_invoice_view.xml b/addons/account/views/account_invoice_view.xml index 1775ec45dbc..d85ce5d7e62 100644 --- a/addons/account/views/account_invoice_view.xml +++ b/addons/account/views/account_invoice_view.xml @@ -632,7 +632,8 @@ - + + @@ -643,8 +644,6 @@ - - diff --git a/addons/calendar/views/calendar_views.xml b/addons/calendar/views/calendar_views.xml index d7c2406f630..f8b5487c1e9 100644 --- a/addons/calendar/views/calendar_views.xml +++ b/addons/calendar/views/calendar_views.xml @@ -291,9 +291,7 @@ - - diff --git a/addons/crm/report/crm_activity_report_views.xml b/addons/crm/report/crm_activity_report_views.xml index 05bc8bc8587..073f4962e3a 100644 --- a/addons/crm/report/crm_activity_report_views.xml +++ b/addons/crm/report/crm_activity_report_views.xml @@ -67,7 +67,7 @@ groups="sales_team.group_sale_manager" parent="crm_menu_report" action="crm_activity_report_action" - sequence="6"/> + sequence="3"/> Activities Analysis diff --git a/addons/crm/report/crm_opportunity_report_views.xml b/addons/crm/report/crm_opportunity_report_views.xml index 3169cf64bf4..07329f850bb 100644 --- a/addons/crm/report/crm_opportunity_report_views.xml +++ b/addons/crm/report/crm_opportunity_report_views.xml @@ -126,7 +126,7 @@ mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline. + parent="crm_menu_report" action="crm_opportunity_report_action" sequence="2"/> Pipeline Analysis diff --git a/addons/crm/views/crm_lead_views.xml b/addons/crm/views/crm_lead_views.xml index 2a84417765a..5813b5a7378 100644 --- a/addons/crm/views/crm_lead_views.xml +++ b/addons/crm/views/crm_lead_views.xml @@ -830,21 +830,28 @@ for rec in records: Menu Actions --> - - - + sequence="4"/> + + + + @@ -899,7 +906,7 @@ for rec in records: @@ -1025,9 +1032,9 @@ for rec in records: + name="My Pipeline" + parent="crm_menu_sales" + sequence="1"/> res.partner - + diff --git a/addons/mrp/views/mrp_production_views.xml b/addons/mrp/views/mrp_production_views.xml index a8d8fe51ff4..da95748d529 100644 --- a/addons/mrp/views/mrp_production_views.xml +++ b/addons/mrp/views/mrp_production_views.xml @@ -255,11 +255,11 @@ help="Manufacturing Orders which are in confirmed state."/> + - @@ -268,7 +268,6 @@ - @@ -285,7 +284,7 @@ - + diff --git a/addons/mrp/views/mrp_workcenter_views.xml b/addons/mrp/views/mrp_workcenter_views.xml index c9a89ef6e74..78c0f756678 100644 --- a/addons/mrp/views/mrp_workcenter_views.xml +++ b/addons/mrp/views/mrp_workcenter_views.xml @@ -537,8 +537,6 @@ - - diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py index d25b6ed9e12..ea3612c6bbf 100644 --- a/addons/point_of_sale/models/pos_order.py +++ b/addons/point_of_sale/models/pos_order.py @@ -483,7 +483,7 @@ class PosOrder(models.Model): company_id = fields.Many2one('res.company', string='Company', required=True, readonly=True, default=lambda self: self.env.user.company_id) date_order = fields.Datetime(string='Order Date', readonly=True, index=True, default=fields.Datetime.now) user_id = fields.Many2one( - comodel_name='res.users', string='Salesman', + comodel_name='res.users', string='Salesperson', help="Person who uses the cash register. It can be a reliever, a student or an interim employee.", default=lambda self: self.env.uid, states={'done': [('readonly', True)], 'invoiced': [('readonly', True)]}, diff --git a/addons/point_of_sale/report/pos_order_report.py b/addons/point_of_sale/report/pos_order_report.py index e14c9352393..f0635c90a8b 100644 --- a/addons/point_of_sale/report/pos_order_report.py +++ b/addons/point_of_sale/report/pos_order_report.py @@ -10,7 +10,7 @@ class PosOrderReport(models.Model): _auto = False _order = 'date desc' - date = fields.Datetime(string='Date Order', readonly=True) + date = fields.Datetime(string='Order Date', readonly=True) order_id = fields.Many2one('pos.order', string='Order', readonly=True) partner_id = fields.Many2one('res.partner', string='Customer', readonly=True) product_id = fields.Many2one('product.product', string='Product', readonly=True) diff --git a/addons/point_of_sale/views/account_journal_view.xml b/addons/point_of_sale/views/account_journal_view.xml index 5d79164a30b..94c80cbacef 100644 --- a/addons/point_of_sale/views/account_journal_view.xml +++ b/addons/point_of_sale/views/account_journal_view.xml @@ -29,9 +29,9 @@ account.journal - + - + diff --git a/addons/point_of_sale/views/pos_order_report_view.xml b/addons/point_of_sale/views/pos_order_report_view.xml index a6dcede51cf..73c388bbe09 100644 --- a/addons/point_of_sale/views/pos_order_report_view.xml +++ b/addons/point_of_sale/views/pos_order_report_view.xml @@ -30,12 +30,10 @@ + + - - - - @@ -43,8 +41,9 @@ - + + diff --git a/addons/point_of_sale/views/pos_order_view.xml b/addons/point_of_sale/views/pos_order_view.xml index d5c61ec4049..95d046dfed4 100644 --- a/addons/point_of_sale/views/pos_order_view.xml +++ b/addons/point_of_sale/views/pos_order_view.xml @@ -303,9 +303,10 @@ + - + diff --git a/addons/purchase/models/res_config_settings.py b/addons/purchase/models/res_config_settings.py index d8678698ed2..47b183d144f 100644 --- a/addons/purchase/models/res_config_settings.py +++ b/addons/purchase/models/res_config_settings.py @@ -9,7 +9,7 @@ class ResConfigSettings(models.TransientModel): lock_confirmed_po = fields.Boolean("Lock Confirmed Orders", default=lambda self: self.env.user.company_id.po_lock == 'lock') po_lock = fields.Selection(related='company_id.po_lock', string="Purchase Order Modification *") - po_order_approval = fields.Boolean("Order Approval", default=lambda self: self.env.user.company_id.po_double_validation == 'two_step') + po_order_approval = fields.Boolean("Purchase Order Approval", default=lambda self: self.env.user.company_id.po_double_validation == 'two_step') po_double_validation = fields.Selection(related='company_id.po_double_validation', string="Levels of Approvals *") po_double_validation_amount = fields.Monetary(related='company_id.po_double_validation_amount', string="Minimum Amount", currency_field='company_currency_id') company_currency_id = fields.Many2one('res.currency', related='company_id.currency_id', string="Company Currency", readonly=True, diff --git a/addons/purchase/report/purchase_report_views.xml b/addons/purchase/report/purchase_report_views.xml index ec9b5005212..0e2b26029f3 100644 --- a/addons/purchase/report/purchase_report_views.xml +++ b/addons/purchase/report/purchase_report_views.xml @@ -69,14 +69,14 @@ - + - + - + diff --git a/addons/purchase/views/purchase_views.xml b/addons/purchase/views/purchase_views.xml index 5a55d19a3d4..aa4cf40bb15 100644 --- a/addons/purchase/views/purchase_views.xml +++ b/addons/purchase/views/purchase_views.xml @@ -283,14 +283,14 @@ + + - - diff --git a/addons/sale/report/sale_report_views.xml b/addons/sale/report/sale_report_views.xml index 9c0ef09c370..ef419e6eb0a 100644 --- a/addons/sale/report/sale_report_views.xml +++ b/addons/sale/report/sale_report_views.xml @@ -32,7 +32,6 @@ - diff --git a/addons/sale/views/sale_views.xml b/addons/sale/views/sale_views.xml index 85b9ef14b72..41259952307 100644 --- a/addons/sale/views/sale_views.xml +++ b/addons/sale/views/sale_views.xml @@ -603,8 +603,6 @@ - - @@ -631,14 +629,14 @@ primary - + - - - + - - + + + + @@ -650,12 +648,11 @@ - - - - - + + + + @@ -790,6 +787,7 @@ tree,kanban,form,calendar,pivot,graph + {'search_default_my_quotation': 1}

Create a new quotation, the first step of a new sale! @@ -804,6 +802,7 @@ ir.actions.act_window sale.order + {'search_default_my_quotation': 1}

Create a new quotation, the first step of a new sale! diff --git a/addons/sale/views/sales_team_views.xml b/addons/sale/views/sales_team_views.xml index 2855cfda8ba..14324d170a2 100644 --- a/addons/sale/views/sales_team_views.xml +++ b/addons/sale/views/sales_team_views.xml @@ -29,6 +29,9 @@ + + + diff --git a/addons/sale_crm/views/sale_order_views.xml b/addons/sale_crm/views/sale_order_views.xml index 571614e1cae..f971913417e 100644 --- a/addons/sale_crm/views/sale_order_views.xml +++ b/addons/sale_crm/views/sale_order_views.xml @@ -47,8 +47,9 @@ + parent="crm.crm_menu_sales" + sequence="2"/> diff --git a/addons/sales_team/views/crm_team_views.xml b/addons/sales_team/views/crm_team_views.xml index c273d88fdad..fda24026c40 100644 --- a/addons/sales_team/views/crm_team_views.xml +++ b/addons/sales_team/views/crm_team_views.xml @@ -22,11 +22,12 @@ - Sales Dashboard + Team Pipelines crm.team form kanban,form {'search_default_my_favorites': 1} + [('use_opportunities', '=', True)]

diff --git a/addons/website_crm_partner_assign/__manifest__.py b/addons/website_crm_partner_assign/__manifest__.py index 6e04f7cc535..eb615286506 100644 --- a/addons/website_crm_partner_assign/__manifest__.py +++ b/addons/website_crm_partner_assign/__manifest__.py @@ -31,7 +31,6 @@ The automatic assignation is figured from the weight of partner levels and the g 'views/res_partner_views.xml', 'views/crm_lead_views.xml', 'views/website_crm_partner_assign_templates.xml', - 'report/crm_lead_report_view.xml', 'report/crm_partner_report_view.xml', ], 'demo': [ diff --git a/addons/website_crm_partner_assign/report/__init__.py b/addons/website_crm_partner_assign/report/__init__.py index f511955e14f..98897a641f1 100644 --- a/addons/website_crm_partner_assign/report/__init__.py +++ b/addons/website_crm_partner_assign/report/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from . import crm_lead_report from . import crm_partner_report diff --git a/addons/website_crm_partner_assign/report/crm_lead_report.py b/addons/website_crm_partner_assign/report/crm_lead_report.py deleted file mode 100644 index 4ab819746f7..00000000000 --- a/addons/website_crm_partner_assign/report/crm_lead_report.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo import api, fields, models -from odoo import tools -from odoo.addons.crm.models import crm_stage - - -class CrmLeadReportAssign(models.Model): - """ CRM Lead Report """ - _name = "crm.lead.report.assign" - _auto = False - _description = "CRM Lead Report" - - partner_assigned_id = fields.Many2one('res.partner', 'Partner', readonly=True) - grade_id = fields.Many2one('res.partner.grade', 'Grade', readonly=True) - user_id = fields.Many2one('res.users', 'User', readonly=True) - country_id = fields.Many2one('res.country', 'Country', readonly=True) - team_id = fields.Many2one('crm.team', 'Sales Team', oldname='section_id', readonly=True) - company_id = fields.Many2one('res.company', 'Company', readonly=True) - date_assign = fields.Date('Assign Date', readonly=True) - delay_open = fields.Float('Delay to Assign', digits=(16, 2), readonly=True, group_operator="avg", help="Number of Days to open the case") - delay_close = fields.Float('Delay to Close', digits=(16, 2), readonly=True, group_operator="avg", help="Number of Days to close the case") - delay_expected = fields.Float('Overpassed Deadline', digits=(16, 2), readonly=True, group_operator="avg") - probability = fields.Float('Avg Probability', digits=(16, 2), readonly=True, group_operator="avg") - probability_max = fields.Float('Max Probability', digits=(16, 2), readonly=True, group_operator="max") - planned_revenue = fields.Float('Planned Revenue', digits=(16, 2), readonly=True) - probable_revenue = fields.Float('Probable Revenue', digits=(16, 2), readonly=True) - tag_ids = fields.Many2many('crm.lead.tag', 'crm_lead_tag_rel', 'lead_id', 'tag_id', 'Tags') - partner_id = fields.Many2one('res.partner', 'Customer', readonly=True) - opening_date = fields.Datetime('Opening Date', readonly=True) - date_closed = fields.Datetime('Close Date', readonly=True) - nbr_cases = fields.Integer('# of Cases', readonly=True, oldname='nbr') - priority = fields.Selection(crm_stage.AVAILABLE_PRIORITIES, 'Priority') - type = fields.Selection([ - ('lead', 'Lead'), - ('opportunity', 'Opportunity') - ], 'Type', help="Type is used to separate Leads and Opportunities") - - @api.model_cr - def init(self): - """ - CRM Lead Report - @param cr: the current row, from the database cursor - """ - tools.drop_view_if_exists(self._cr, 'crm_lead_report_assign') - self._cr.execute(""" - CREATE OR REPLACE VIEW crm_lead_report_assign AS ( - SELECT - c.id, - c.date_open as opening_date, - c.date_closed as date_closed, - c.date_assign, - c.user_id, - c.probability, - c.probability as probability_max, - c.type, - c.company_id, - c.priority, - c.team_id, - c.partner_id, - c.country_id, - c.planned_revenue, - c.partner_assigned_id, - p.grade_id, - p.date as partner_date, - c.planned_revenue*(c.probability/100) as probable_revenue, - 1 as nbr_cases, - c.create_date as create_date, - extract('epoch' from (c.write_date-c.create_date))/(3600*24) as delay_close, - extract('epoch' from (c.date_deadline - c.date_closed))/(3600*24) as delay_expected, - extract('epoch' from (c.date_open-c.create_date))/(3600*24) as delay_open - FROM - crm_lead c - left join res_partner p on (c.partner_assigned_id=p.id) - )""") 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 deleted file mode 100644 index 116bda5d38b..00000000000 --- a/addons/website_crm_partner_assign/report/crm_lead_report_view.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - crm.lead.report.assign.select - crm.lead.report.assign - - - - - - - - - - - - - - - - - - - - - - - - - - - - - crm.lead.assign.pivot - crm.lead.report.assign - - - - - - - - - - - - - crm.lead.assign.graph - crm.lead.report.assign - - - - - - - - - - - - Opp. Assignment Analysis - crm.lead.report.assign - form - {'default_type': 'opportunity', 'group_by_no_leaf':1,'group_by':[]} - graph,pivot - [('type', '=', 'opportunity')] - - - - - 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 eb5a8c47297..c77f80e798c 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 @@ + parent="crm.crm_menu_report" action="action_report_crm_partner_assign" sequence="5"/> diff --git a/addons/website_crm_partner_assign/security/ir.model.access.csv b/addons/website_crm_partner_assign/security/ir.model.access.csv index 8f0f0c40dba..fa992b1efba 100644 --- a/addons/website_crm_partner_assign/security/ir.model.access.csv +++ b/addons/website_crm_partner_assign/security/ir.model.access.csv @@ -1,6 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_crm_lead_report_assign,crm.lead.report.assign,model_crm_lead_report_assign,sales_team.group_sale_salesman,1,1,1,0 -access_crm_lead_report_assign_all,crm.lead.report.assign.all,model_crm_lead_report_assign,base.group_user,1,0,0,0 access_crm_partner_report,crm.partner.report.assign.all,model_crm_partner_report_assign,sales_team.group_sale_salesman,1,0,0,0 access_res_partner_grade,res.partner.grade,model_res_partner_grade,sales_team.group_sale_salesman,1,1,1,0 access_res_partner_grade_employee,res.partner.grade,model_res_partner_grade,base.group_user,1,0,0,0 diff --git a/addons/website_sale/views/res_config_settings_views.xml b/addons/website_sale/views/res_config_settings_views.xml index 8e84c41228c..f0dda9eef90 100644 --- a/addons/website_sale/views/res_config_settings_views.xml +++ b/addons/website_sale/views/res_config_settings_views.xml @@ -308,7 +308,7 @@ -

+
Abandoned Carts diff --git a/addons/website_sale/views/sale_order_views.xml b/addons/website_sale/views/sale_order_views.xml index 748d53e671f..0f77a6e4de8 100644 --- a/addons/website_sale/views/sale_order_views.xml +++ b/addons/website_sale/views/sale_order_views.xml @@ -4,14 +4,30 @@ sale.order.ecommerce.search.view sale.order + primary - + + + + + - - + + + + + + sale.order.ecommerce.search.unpaid.view + sale.order + + primary + + + 1 + @@ -67,6 +83,17 @@ + + sale.order.ecommerce.abondand.view + sale.order + + + + + + + + Abandoned Carts sale.order @@ -78,8 +105,8 @@

No abandoned carts found

- You'll find here all the carts abandoned by your visitors, if they completed their address. - You should send them a recovery email! + You'll find here all the carts abandoned by your visitors. + If they completed their address, you should send them a recovery email!

The time to mark a cart as abandoned can be changed in the settings.

@@ -121,6 +148,7 @@ [('state', '=', 'sent'), ('team_id.team_type', '=', 'website')] +

There is no unpaid order from the website yet @@ -138,12 +166,13 @@ [('state', '=', 'draft'), ('order_line', '!=', False), ('partner_id', '!=', context.get('public_partner_id')), ('team_id.team_type', '=', 'website'), ('date_order', '<=', (datetime.datetime.utcnow() - datetime.timedelta(hours=1)).strftime('%Y-%m-%d %H:%M:%S'))] +

No abandoned carts found

- You'll find here all the carts abandoned by your visitors, if they completed their address. - You should send them a recovery email! + You'll find here all the carts abandoned by your visitors. + If they completed their address, you should send them a recovery email!

The time to mark a cart as abandoned can be changed in the settings.

diff --git a/odoo/addons/base/views/res_partner_views.xml b/odoo/addons/base/views/res_partner_views.xml index 70e7e91c73f..4f9905858b3 100644 --- a/odoo/addons/base/views/res_partner_views.xml +++ b/odoo/addons/base/views/res_partner_views.xml @@ -444,6 +444,7 @@ + @@ -456,7 +457,7 @@ - +