website_crm_iap_reveal/models/crm_reveal_view.py

59 lines
2.7 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import datetime
from dateutil.relativedelta import relativedelta
from odoo import api, fields, models
DEFAULT_REVEAL_VIEW_WEEKS_VALID = 5
class CRMRevealView(models.Model):
_name = 'crm.reveal.view'
_description = 'CRM Reveal View'
_rec_name = 'reveal_ip'
_order = 'id desc'
reveal_ip = fields.Char(string='IP Address')
reveal_rule_id = fields.Many2one('crm.reveal.rule', string='Lead Generation Rule', index='btree_not_null')
reveal_state = fields.Selection([('to_process', 'To Process'), ('not_found', 'Not Found')], default='to_process', string="State", index=True)
create_date = fields.Datetime(index=True)
def init(self):
self._cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('crm_reveal_view_ip_rule_id',))
if not self._cr.fetchone():
self._cr.execute('CREATE UNIQUE INDEX crm_reveal_view_ip_rule_id ON crm_reveal_view (reveal_rule_id,reveal_ip)')
self._cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('crm_reveal_view_state_create_date',))
if not self._cr.fetchone():
self._cr.execute('CREATE INDEX crm_reveal_view_state_create_date ON crm_reveal_view (reveal_state,create_date)')
@api.model
def _clean_reveal_views(self):
""" Remove old views (> 1 month) """
weeks_valid = self.env['ir.config_parameter'].sudo().get_param('reveal.view_weeks_valid', DEFAULT_REVEAL_VIEW_WEEKS_VALID)
try:
weeks_valid = int(weeks_valid)
except ValueError:
weeks_valid = DEFAULT_REVEAL_VIEW_WEEKS_VALID
domain = []
domain.append(('reveal_state', '=', 'not_found'))
domain.append(('create_date', '<', fields.Datetime.to_string(datetime.date.today() - relativedelta(weeks=weeks_valid))))
self.search(domain).unlink()
def _create_reveal_view(self, website_id, url, ip_address, country_code, state_code, rules_excluded):
# we are avoiding reveal if reveal_view already created for this IP
rules = self.env['crm.reveal.rule']._match_url(website_id, url, country_code, state_code, rules_excluded)
if rules:
query = """
INSERT INTO crm_reveal_view (reveal_ip, reveal_rule_id, reveal_state, create_date)
VALUES (%s, %s, 'to_process', now() at time zone 'UTC')
ON CONFLICT DO NOTHING;
""" * len(rules)
params = []
for rule in rules:
params += [ip_address, rule['id']]
rules_excluded.append(str(rule['id']))
self.env.cr.execute(query, params)
return rules_excluded
return False