add cenhomes addons
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import models
|
||||
@@ -0,0 +1,110 @@
|
||||
import logging
|
||||
|
||||
import requests
|
||||
|
||||
from odoo import models, fields, _
|
||||
from odoo.tools import config
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class CRMLeadCronJob(models.Model):
|
||||
_inherit = "crm.lead"
|
||||
_facebook_base_url = "https://graph.facebook.com"
|
||||
_config: dict = config.misc.get('crm_sync_data')
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# CRON
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
def _auto_get_facebook_lead_entries(self):
|
||||
""" This method is called from a cron job.
|
||||
"""
|
||||
_logger.info("RUNNING get lead entries from facebook")
|
||||
check_valid_token = self._check_expire_facebook_token()
|
||||
if not check_valid_token:
|
||||
_logger.info("Lỗi: Get Facebook lead, token không hợp lệ")
|
||||
return
|
||||
data = self._get_data_facebook_lead()
|
||||
if data is None:
|
||||
return
|
||||
|
||||
print(data)
|
||||
|
||||
# moves = self.search([
|
||||
# ('state', '=', 'draft'),
|
||||
# ('date', '<=', fields.Date.context_today(self)),
|
||||
# ('auto_post', '!=', 'no'),
|
||||
# ('to_check', '=', False),
|
||||
# ], limit=100)
|
||||
#
|
||||
# try: # try posting in batch
|
||||
# with self.env.cr.savepoint():
|
||||
# moves._post()
|
||||
# except UserError: # if at least one move cannot be posted, handle moves one by one
|
||||
# for move in moves:
|
||||
# try:
|
||||
# with self.env.cr.savepoint():
|
||||
# move._post()
|
||||
# except UserError as e:
|
||||
# move.to_check = True
|
||||
# msg = _('The move could not be posted for the following reason: %(error_message)s', error_message=e)
|
||||
# move.message_post(body=msg, message_type='comment')
|
||||
#
|
||||
# if len(moves) == 100: # assumes there are more whenever search hits limit
|
||||
# self.env.ref('account.ir_cron_auto_post_draft_entry')._trigger()
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# HELPER METHODS
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
def _refresh_facebook_token(self):
|
||||
url = f"{self._facebook_base_url}/v14.0/oauth/access_token"
|
||||
|
||||
params = {
|
||||
'grant_type': 'fb_exchange_token',
|
||||
'client_id': self._config.get("facebook_app_id"),
|
||||
'client_secret': self._config.get("facebook_app_secret"),
|
||||
'fb_exchange_token': self._config.get("facebook_access_token"),
|
||||
}
|
||||
|
||||
response = requests.get(url, params=params)
|
||||
|
||||
if response.status_code == 200:
|
||||
config.misc['crm_sync_data']['facebook_access_token'] = response.json().get('access_token')
|
||||
config.save()
|
||||
return True
|
||||
_logger.warning("Gọi API refresh facebook token lỗi")
|
||||
_logger.warning(response.text)
|
||||
return False
|
||||
|
||||
def _check_expire_facebook_token(self):
|
||||
url = f"{self._facebook_base_url}/v14.0/debug_token"
|
||||
params = {
|
||||
'access_token': self._config.get("facebook_access_token"),
|
||||
'input_token': self._config.get("facebook_access_token")
|
||||
}
|
||||
|
||||
response = requests.get(url, params=params)
|
||||
|
||||
if response.status_code == 200:
|
||||
token_expires_at = datetime.fromtimestamp(response.json().get('data').get('expires_at'))
|
||||
print("token_expires_at =", token_expires_at)
|
||||
if token_expires_at - timedelta(days=7) < datetime.now():
|
||||
self._refresh_facebook_token()
|
||||
return True
|
||||
|
||||
_logger.warning("Lỗi: facebook access token đã hết hạn")
|
||||
_logger.warning(response.text)
|
||||
return False
|
||||
|
||||
def _get_data_facebook_lead(self):
|
||||
url = f"{self._facebook_base_url}/v14.0/{self._config.get('facebook_page_id')}/leads"
|
||||
params = {'access_token': self._config.get("facebook_access_token")}
|
||||
response = requests.get(url, params=params)
|
||||
|
||||
if response.status_code == 200:
|
||||
return response.json()
|
||||
_logger.info("Lỗi: Get Facebook lead, không lấy được data lead")
|
||||
return None
|
||||
Reference in New Issue
Block a user