summaryrefslogtreecommitdiff
path: root/addons/website_sale/models/crm_team.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_sale/models/crm_team.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_sale/models/crm_team.py')
-rw-r--r--addons/website_sale/models/crm_team.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/addons/website_sale/models/crm_team.py b/addons/website_sale/models/crm_team.py
new file mode 100644
index 00000000..2d48bd30
--- /dev/null
+++ b/addons/website_sale/models/crm_team.py
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from datetime import datetime
+from dateutil.relativedelta import relativedelta
+
+from odoo import fields,api, models, _
+from odoo.exceptions import UserError, ValidationError
+
+
+class CrmTeam(models.Model):
+ _inherit = "crm.team"
+
+ website_ids = fields.One2many('website', 'salesteam_id', string='Websites', help="Websites using this Sales Team")
+ abandoned_carts_count = fields.Integer(
+ compute='_compute_abandoned_carts',
+ string='Number of Abandoned Carts', readonly=True)
+ abandoned_carts_amount = fields.Integer(
+ compute='_compute_abandoned_carts',
+ string='Amount of Abandoned Carts', readonly=True)
+
+ def _compute_abandoned_carts(self):
+ # abandoned carts to recover are draft sales orders that have no order lines,
+ # a partner other than the public user, and created over an hour ago
+ # and the recovery mail was not yet sent
+ counts = {}
+ amounts = {}
+ website_teams = self.filtered(lambda team: team.website_ids)
+ if website_teams:
+ abandoned_carts_data = self.env['sale.order'].read_group([
+ ('is_abandoned_cart', '=', True),
+ ('cart_recovery_email_sent', '=', False),
+ ('team_id', 'in', website_teams.ids),
+ ], ['amount_total', 'team_id'], ['team_id'])
+ counts = {data['team_id'][0]: data['team_id_count'] for data in abandoned_carts_data}
+ amounts = {data['team_id'][0]: data['amount_total'] for data in abandoned_carts_data}
+ for team in self:
+ team.abandoned_carts_count = counts.get(team.id, 0)
+ team.abandoned_carts_amount = amounts.get(team.id, 0)
+
+ def get_abandoned_carts(self):
+ self.ensure_one()
+ return {
+ 'name': _('Abandoned Carts'),
+ 'type': 'ir.actions.act_window',
+ 'view_mode': 'tree,form',
+ 'domain': [('is_abandoned_cart', '=', True)],
+ 'search_view_id': self.env.ref('sale.sale_order_view_search_inherit_sale').id,
+ 'context': {
+ 'search_default_team_id': self.id,
+ 'default_team_id': self.id,
+ 'search_default_recovery_email': 1,
+ 'create': False
+ },
+ 'res_model': 'sale.order',
+ 'help': _('''<p class="o_view_nocontent_smiling_face">
+ You can find all abandoned carts here, i.e. the carts generated by your website's visitors from over an hour ago that haven't been confirmed yet.</p>
+ <p>You should send an email to the customers to encourage them!</p>
+ '''),
+ }