mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
209 lines
8.8 KiB
Python
209 lines
8.8 KiB
Python
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
|
|
|
import datetime
|
|
import requests
|
|
|
|
from odoo import api, fields, models, release, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class PublisherWarrantyContract(models.AbstractModel):
|
|
_inherit = 'publisher_warranty.contract'
|
|
|
|
CONFIG_HIBOU_URL = 'https://api.hibou.io/hibouapi/v1/professional'
|
|
CONFIG_HIBOU_MESSAGE_URL = 'https://api.hibou.io/hibouapi/v1/professional/message'
|
|
CONFIG_HIBOU_QUOTE_URL = 'https://api.hibou.io/hibouapi/v1/professional/quote'
|
|
DAYS_ENDING_SOON = 7
|
|
|
|
@api.model
|
|
def hibou_professional_status(self):
|
|
get_param = self.env['ir.config_parameter'].sudo().get_param
|
|
expiration_date = get_param('database.hibou_professional_expiration_date')
|
|
expiration_reason = get_param('database.hibou_professional_expiration_reason')
|
|
dbuuid = get_param('database.uuid')
|
|
expiring = False
|
|
expired = False
|
|
if expiration_date:
|
|
expiration_date_date = fields.Date.from_string(expiration_date)
|
|
today = fields.Date.today()
|
|
if expiration_date_date < today:
|
|
if expiration_reason == 'trial':
|
|
expired = _('Your trial of Hibou Professional has ended.')
|
|
else:
|
|
expired = _('Your Hibou Professional subscription has ended.')
|
|
elif expiration_date_date < (today + datetime.timedelta(days=self.DAYS_ENDING_SOON)):
|
|
if expiration_reason == 'trial':
|
|
expiring = _('Your trial of Hibou Professional is ending soon.')
|
|
else:
|
|
expiring = _('Your Hibou Professional subscription is ending soon.')
|
|
|
|
is_admin = self.env.user.has_group('base.group_erp_manager')
|
|
allow_admin_message = get_param('database.hibou_allow_admin_message')
|
|
allow_message = get_param('database.hibou_allow_message')
|
|
|
|
return {
|
|
'expiration_date': get_param('database.hibou_professional_expiration_date'),
|
|
'expiration_reason': get_param('database.hibou_professional_expiration_reason'),
|
|
'expiring': expiring,
|
|
'expired': expired,
|
|
'professional_code': get_param('database.hibou_professional_code'),
|
|
'dbuuid': dbuuid,
|
|
'is_admin': is_admin,
|
|
'allow_admin_message': allow_admin_message,
|
|
'allow_message': allow_message,
|
|
}
|
|
|
|
@api.model
|
|
def hibou_professional_update_message_preferences(self, allow_admin_message, allow_message):
|
|
if self.env.user.has_group('base.group_erp_manager'):
|
|
set_param = self.env['ir.config_parameter'].sudo().set_param
|
|
set_param('database.hibou_allow_admin_message', allow_admin_message and '1')
|
|
set_param('database.hibou_allow_message', allow_message and '1')
|
|
return self.hibou_professional_status()
|
|
|
|
def _check_message_allow(self):
|
|
get_param = self.env['ir.config_parameter'].sudo().get_param
|
|
allow_message = get_param('database.hibou_allow_message')
|
|
if not allow_message:
|
|
allow_message = get_param('database.hibou_allow_admin_message') and self.env.user.has_group(
|
|
'base.group_erp_manager')
|
|
if not allow_message:
|
|
raise UserError(_('You are not allowed to send messages at this time.'))
|
|
|
|
@api.model
|
|
def hibou_professional_quote(self):
|
|
get_param = self.env['ir.config_parameter'].sudo().get_param
|
|
try:
|
|
self._hibou_install()
|
|
except:
|
|
pass
|
|
dbuuid = get_param('database.uuid')
|
|
dbtoken = get_param('database.hibou_token')
|
|
if dbuuid and dbtoken:
|
|
return {'url': self.CONFIG_HIBOU_QUOTE_URL + '/%s/%s' % (dbuuid, dbtoken)}
|
|
return {}
|
|
|
|
@api.model
|
|
def hibou_professional_send_message(self, type, priority, subject, body, user_url, res_id):
|
|
self._check_message_allow()
|
|
get_param = self.env['ir.config_parameter'].sudo().get_param
|
|
dbuuid = get_param('database.uuid')
|
|
dbtoken = get_param('database.hibou_token')
|
|
user_name = self.env.user.name
|
|
user_email = self.env.user.email or self.env.user.login
|
|
company_name = self.env.user.company_id.name
|
|
data = {
|
|
'jsonrpc': '2.0',
|
|
'method': 'call',
|
|
'params': {
|
|
'dbuuid': dbuuid,
|
|
'user_name': user_name,
|
|
'user_email': user_email,
|
|
'user_url': user_url,
|
|
'company_name': company_name,
|
|
'type': type,
|
|
'priority': priority,
|
|
'subject': subject,
|
|
'body': body,
|
|
'res_id': res_id,
|
|
},
|
|
}
|
|
if dbtoken:
|
|
data['params']['dbtoken'] = dbtoken
|
|
try:
|
|
r = requests.post(self.CONFIG_HIBOU_MESSAGE_URL + '/new', json=data, timeout=30)
|
|
r.raise_for_status()
|
|
wrapper = r.json()
|
|
return wrapper.get('result', {})
|
|
except:
|
|
return {'error': _('Error sending message.')}
|
|
|
|
@api.model
|
|
def hibou_professional_get_messages(self):
|
|
self._check_message_allow()
|
|
get_param = self.env['ir.config_parameter'].sudo().get_param
|
|
dbuuid = get_param('database.uuid')
|
|
dbtoken = get_param('database.hibou_token')
|
|
try:
|
|
r = requests.get(self.CONFIG_HIBOU_MESSAGE_URL + '/get/%s/%s' % (dbuuid, dbtoken), timeout=30)
|
|
r.raise_for_status()
|
|
# not jsonrpc
|
|
return r.json()
|
|
except:
|
|
return {'error': _('Error retrieving messages, maybe the token is wrong.')}
|
|
|
|
@api.model
|
|
def hibou_professional_update(self, professional_code):
|
|
set_param = self.env['ir.config_parameter'].sudo().set_param
|
|
set_param('database.hibou_professional_code', professional_code)
|
|
try:
|
|
self._hibou_install()
|
|
except:
|
|
pass
|
|
return self.hibou_professional_status()
|
|
|
|
def _get_hibou_modules(self):
|
|
domain = [('state', 'in', ['installed', 'to upgrade', 'to remove']), ('author', 'ilike', 'hibou')]
|
|
module_list = self.env['ir.module.module'].sudo().search_read(domain, ['name'])
|
|
return {module['name']: 1 for module in module_list}
|
|
|
|
def _get_hibou_message(self):
|
|
IrParamSudo = self.env['ir.config_parameter'].sudo()
|
|
|
|
dbuuid = IrParamSudo.get_param('database.uuid')
|
|
dbtoken = IrParamSudo.get_param('database.hibou_token')
|
|
db_create_date = IrParamSudo.get_param('database.create_date')
|
|
user = self.env.user.sudo()
|
|
professional_code = IrParamSudo.get_param('database.hibou_professional_code')
|
|
|
|
module_dictionary = self._get_hibou_modules()
|
|
modules = []
|
|
for module, qty in module_dictionary.items():
|
|
modules.append(module if qty == 1 else '%s,%s' % (module, qty))
|
|
|
|
web_base_url = IrParamSudo.get_param('web.base.url')
|
|
msg = {
|
|
"dbuuid": dbuuid,
|
|
"dbname": self._cr.dbname,
|
|
"db_create_date": db_create_date,
|
|
"version": release.version,
|
|
"language": user.lang,
|
|
"web_base_url": web_base_url,
|
|
"modules": '\n'.join(modules),
|
|
"professional_code": professional_code,
|
|
}
|
|
if dbtoken:
|
|
msg['dbtoken'] = dbtoken
|
|
msg.update({'company_' + key: value for key, value in user.company_id.read(["name", "email", "phone"])[0].items() if key != 'id'})
|
|
return msg
|
|
|
|
def _process_hibou_message(self, result):
|
|
if result.get('professional_info'):
|
|
set_param = self.env['ir.config_parameter'].sudo().set_param
|
|
set_param('database.hibou_professional_expiration_date', result['professional_info'].get('expiration_date'))
|
|
set_param('database.hibou_professional_expiration_reason', result['professional_info'].get('expiration_reason', 'trial'))
|
|
if result['professional_info'].get('professional_code'):
|
|
set_param('database.hibou_professional_code', result['professional_info'].get('professional_code'))
|
|
if result['professional_info'].get('dbtoken'):
|
|
set_param('database.hibou_token', result['professional_info'].get('dbtoken'))
|
|
|
|
def _hibou_install(self):
|
|
data = self._get_hibou_message()
|
|
data = {
|
|
'jsonrpc': '2.0',
|
|
'method': 'call',
|
|
'params': data,
|
|
}
|
|
r = requests.post(self.CONFIG_HIBOU_URL, json=data, timeout=30)
|
|
r.raise_for_status()
|
|
wrapper = r.json()
|
|
self._process_hibou_message(wrapper.get('result', {}))
|
|
|
|
@api.model
|
|
def _get_sys_logs(self):
|
|
try:
|
|
self._hibou_install()
|
|
except:
|
|
pass
|
|
return super(PublisherWarrantyContract, self)._get_sys_logs()
|