MonsieurB
8 years ago
14 changed files with 224 additions and 291 deletions
-
2smsclient_core/models/serveraction.py
-
84smsclient_core/models/sms_gateway.py
-
2smsclient_core/models/smstemplate.py
-
37smsclient_core/views/sms_gateway_view.xml
-
23smsclient_core/wizard/mass_sms.py
-
13smsclient_ovh/README.rst
-
27smsclient_ovh/__init__.py
-
32smsclient_ovh/__manifest__.py
-
49smsclient_ovh/__openerp__.py
-
9smsclient_ovh/data/keychain.xml
-
7smsclient_ovh/models/__init__.py
-
45smsclient_ovh/models/keychain.py
-
86smsclient_ovh/models/sms_gateway.py
-
97smsclient_ovh/sms_gateway.py
@ -1,23 +1,6 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
############################################################################## |
|
||||
# |
|
||||
# OpenERP, Open Source Management Solution |
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). |
|
||||
# Copyright (C) 2013 Julius Network Solutions SARL <contact@julius.fr> |
|
||||
# |
|
||||
# This program is free software: you can redistribute it and/or modify |
|
||||
# it under the terms of the GNU Affero General Public License as |
|
||||
# published by the Free Software Foundation, either version 3 of the |
|
||||
# License, or (at your option) any later version. |
|
||||
# |
|
||||
# This program is distributed in the hope that it will be useful, |
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
# GNU Affero General Public License for more details. |
|
||||
# |
|
||||
# You should have received a copy of the GNU Affero General Public License |
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
||||
# |
|
||||
############################################################################## |
|
||||
|
# coding: utf-8 |
||||
|
# Copyright (C) 2015 Sébastien BEAU <sebastien.beau@akretion.com> |
||||
|
# Valentin CHEMIERE <valentin.chemiere@akretion.com> |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
from . import sms_gateway |
|
||||
|
from . import models |
@ -0,0 +1,32 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Copyright (C) 2013 Julius Network Solutions SARL <contact@julius.fr> |
||||
|
# Copyright (C) 2015 Sébastien BEAU <sebastien.beau@akretion.com> |
||||
|
|
||||
|
{ |
||||
|
'name': 'SMS Client OVH', |
||||
|
'version': '10.0.1.0.0', |
||||
|
'depends': ['base', |
||||
|
'mail', |
||||
|
'smsclient_core', |
||||
|
'base_suspend_security', |
||||
|
'keychain', |
||||
|
], |
||||
|
'author': 'Julius Network Solutions,SYLEAM,OpenERP SA,' |
||||
|
'Odoo Community Association (OCA),Akretion', |
||||
|
'images': [ |
||||
|
'images/sms.jpeg', |
||||
|
'images/gateway.jpeg', |
||||
|
'images/gateway_access.jpeg', |
||||
|
'images/client.jpeg', |
||||
|
'images/send_sms.jpeg' |
||||
|
], |
||||
|
'website': 'http://julius.fr', |
||||
|
'category': 'Tools', |
||||
|
'demo': [], |
||||
|
'data': [ |
||||
|
], |
||||
|
'active': False, |
||||
|
'installable': True, |
||||
|
} |
||||
|
|
||||
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
@ -1,49 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
############################################################################## |
|
||||
# |
|
||||
# OpenERP, Open Source Management Solution |
|
||||
# Copyright (C) 2004-2009 OpenERP SA (<http://openerp.com>) |
|
||||
# Copyright (C) 2011 SYLEAM (<http://syleam.fr/>) |
|
||||
# Copyright (C) 2013 Julius Network Solutions SARL <contact@julius.fr> |
|
||||
# |
|
||||
# This program is free software: you can redistribute it and/or modify |
|
||||
# it under the terms of the GNU Affero General Public License as |
|
||||
# published by the Free Software Foundation, either version 3 of the |
|
||||
# License, or (at your option) any later version. |
|
||||
# |
|
||||
# This program is distributed in the hope that it will be useful, |
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
# GNU Affero General Public License for more details. |
|
||||
# |
|
||||
# You should have received a copy of the GNU Affero General Public License |
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
||||
# |
|
||||
############################################################################## |
|
||||
|
|
||||
{ |
|
||||
"name": "SMS Client OVH", |
|
||||
"version": "1.0", |
|
||||
"depends": ["base", |
|
||||
"email_template", |
|
||||
"smsclient_core", |
|
||||
], |
|
||||
"author": "Julius Network Solutions,SYLEAM,OpenERP SA," |
|
||||
"Odoo Community Association (OCA),Akretion", |
|
||||
'images': [ |
|
||||
'images/sms.jpeg', |
|
||||
'images/gateway.jpeg', |
|
||||
'images/gateway_access.jpeg', |
|
||||
'images/client.jpeg', |
|
||||
'images/send_sms.jpeg' |
|
||||
], |
|
||||
"website": "http://julius.fr", |
|
||||
"category": "Tools", |
|
||||
"demo": [], |
|
||||
"data": [ |
|
||||
], |
|
||||
"active": False, |
|
||||
"installable": True, |
|
||||
} |
|
||||
|
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
|
@ -0,0 +1,9 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo noupdate="1"> |
||||
|
<record id="keychain_ovh" model="keychain.account"> |
||||
|
<field name="name">Ovh sms default</field> |
||||
|
<field name="namespace">ovh_provider</field> |
||||
|
<field name="technical_name">ovh_default_account</field> |
||||
|
</record> |
||||
|
|
||||
|
</odoo> |
@ -0,0 +1,7 @@ |
|||||
|
# coding: utf-8 |
||||
|
# Copyright (C) 2015 Sébastien BEAU <sebastien.beau@akretion.com> |
||||
|
# Valentin CHEMIERE <valentin.chemiere@akretion.com> |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
|
from . import sms_gateway |
||||
|
from . import keychain |
@ -0,0 +1,45 @@ |
|||||
|
# coding: utf-8 |
||||
|
# Copyright (C) 2015 Sébastien BEAU <sebastien.beau@akretion.com> |
||||
|
# Valentin CHEMIERE <valentin.chemiere@akretion.com> |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
|
from odoo import models, fields |
||||
|
from functools import wraps |
||||
|
|
||||
|
|
||||
|
def implemented_by_provider(func): |
||||
|
"""Decorator: call _provider_prefixed method instead. |
||||
|
Usage: |
||||
|
@implemented_by_provider |
||||
|
def _do_something() |
||||
|
def _laposte_do_something() |
||||
|
def _gls_do_something() |
||||
|
At runtime, sms-client._do_something() will try to call |
||||
|
the provider spectific method or fallback to generic _do_something |
||||
|
""" |
||||
|
@wraps(func) |
||||
|
def wrapper(cls, *args, **kwargs): |
||||
|
fun_name = func.__name__ |
||||
|
fun = '_%s%s' % (cls.provider_type, fun_name) |
||||
|
if not hasattr(cls, fun): |
||||
|
fun = '_provider%s' % (fun_name) |
||||
|
# return func(cls, *args, **kwargs) |
||||
|
return getattr(cls, fun)(*args, **kwargs) |
||||
|
return wrapper |
||||
|
|
||||
|
|
||||
|
OVH_KEYCHAIN_NAMESPACE = 'ovh_provider' |
||||
|
|
||||
|
|
||||
|
class AccountProduct(models.Model): |
||||
|
_inherit = 'keychain.account' |
||||
|
|
||||
|
namespace = fields.Selection( |
||||
|
selection_add=[(OVH_KEYCHAIN_NAMESPACE, 'Ovh_sms')]) |
||||
|
|
||||
|
def _ovh_provider_init_data(self): |
||||
|
return {'sms_account': ""} |
||||
|
|
||||
|
def _ovh_provider_validate_data(self, data): |
||||
|
|
||||
|
return True |
@ -0,0 +1,86 @@ |
|||||
|
# coding: utf-8 |
||||
|
# Copyright (C) 2015 Sébastien BEAU <sebastien.beau@akretion.com> |
||||
|
# Valentin CHEMIERE <valentin.chemiere@akretion.com> |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
|
from odoo import api, models |
||||
|
import requests |
||||
|
import logging |
||||
|
import json |
||||
|
|
||||
|
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
|
||||
|
class SmsClient(models.Model): |
||||
|
_inherit = "sms.gateway" |
||||
|
|
||||
|
@api.model |
||||
|
def get_method(self): |
||||
|
method = super(SmsClient, self).get_method() |
||||
|
method.append(('http_ovh', 'OVH HTTP'), ) |
||||
|
return method |
||||
|
|
||||
|
@api.multi |
||||
|
def _provider_get_provider_conf(self): |
||||
|
for rec in self: |
||||
|
keychain = rec.env['keychain.account'] |
||||
|
if rec._check_permissions: |
||||
|
retrieve = keychain.suspend_security().retrieve |
||||
|
else: |
||||
|
retrieve = keychain.retrieve |
||||
|
accounts = retrieve( |
||||
|
[['namespace', '=', 'ovh_provider']]) |
||||
|
return accounts[0] |
||||
|
|
||||
|
|
||||
|
class SmsSms(models.Model): |
||||
|
_inherit = "sms.sms" |
||||
|
|
||||
|
@api.model |
||||
|
def _prepare_http_ovh(self): |
||||
|
|
||||
|
keychain_account = self.gateway_id._provider_get_provider_conf() |
||||
|
keychain_json = json.loads(keychain_account['data']) |
||||
|
params = { |
||||
|
'smsAccount': keychain_json['sms_account'], |
||||
|
'login': keychain_account['login'], |
||||
|
'password': keychain_account.get_password(), |
||||
|
'from': self.gateway_id.from_provider, |
||||
|
'url': self.gateway_id.url, |
||||
|
'to': self._convert_to_e164(self.mobile), |
||||
|
'message': self.message, |
||||
|
} |
||||
|
if self.nostop: |
||||
|
params['noStop'] = 1 |
||||
|
if self.deferred: |
||||
|
params['deferred'] = self.deferred |
||||
|
if self.classes: |
||||
|
params['class'] = self.classes |
||||
|
if self.tag: |
||||
|
params['tag'] = self.tag |
||||
|
if self.coding: |
||||
|
params['smsCoding'] = self.coding |
||||
|
return params |
||||
|
|
||||
|
@api.model |
||||
|
def _convert_to_e164(self, erp_number): |
||||
|
to_dial_number = erp_number.replace(u'\xa0', u'') |
||||
|
return to_dial_number |
||||
|
|
||||
|
@api.multi |
||||
|
def _send_http_ovh(self): |
||||
|
self.ensure_one() |
||||
|
params = self._prepare_http_ovh() |
||||
|
r = requests.get(params['url'], params=params.items()) |
||||
|
params.update({ |
||||
|
'password': '*****', |
||||
|
'to': '*****', |
||||
|
'smsAccount': '*****', |
||||
|
'login': '*****', |
||||
|
}) |
||||
|
print params |
||||
|
_logger.debug("Call OVH API : %s params %s", |
||||
|
params['url'], params) |
||||
|
response = r.text |
||||
|
if response[0:2] != 'OK': |
||||
|
raise ValueError(response) |
@ -1,97 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
############################################################################### |
|
||||
# |
|
||||
# Module for OpenERP |
|
||||
# Copyright (C) 2015 Akretion (http://www.akretion.com). |
|
||||
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com> |
|
||||
# |
|
||||
# This program is free software: you can redistribute it and/or modify |
|
||||
# it under the terms of the GNU Affero General Public License as |
|
||||
# published by the Free Software Foundation, either version 3 of the |
|
||||
# License, or (at your option) any later version. |
|
||||
# |
|
||||
# This program is distributed in the hope that it will be useful, |
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
# GNU Affero General Public License for more details. |
|
||||
# |
|
||||
# You should have received a copy of the GNU Affero General Public License |
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
||||
# |
|
||||
############################################################################### |
|
||||
|
|
||||
from openerp import api, models, _ |
|
||||
import requests |
|
||||
import logging |
|
||||
_logger = logging.getLogger(__name__) |
|
||||
|
|
||||
|
|
||||
class SmsClient(models.Model): |
|
||||
_inherit = "sms.gateway" |
|
||||
|
|
||||
@api.model |
|
||||
def get_method(self): |
|
||||
method = super(SmsClient, self).get_method() |
|
||||
method.append(('http_ovh', 'OVH HTTP'), ) |
|
||||
return method |
|
||||
|
|
||||
@api.onchange('method') |
|
||||
def onchange_method(self): |
|
||||
super(SmsClient, self).onchange_method() |
|
||||
if self.method == 'http_ovh': |
|
||||
self.url_visible = True |
|
||||
self.sms_account_visible = True |
|
||||
self.login_provider_visible = True |
|
||||
self.password_provider_visible = True |
|
||||
self.from_provider_visible = True |
|
||||
self.validity_visible = True |
|
||||
self.classes_visible = True |
|
||||
self.deferred_visible = True |
|
||||
self.nostop_visible = True |
|
||||
self.priority_visible = True |
|
||||
self.coding_visible = True |
|
||||
self.tag_visible = True |
|
||||
self.char_limit_visible = True |
|
||||
|
|
||||
|
|
||||
class SmsSms(models.Model): |
|
||||
_inherit = "sms.sms" |
|
||||
|
|
||||
@api.model |
|
||||
def _prepare_http_ovh(self): |
|
||||
params = { |
|
||||
'smsAccount': self.gateway_id.sms_account, |
|
||||
'login': self.gateway_id.login_provider, |
|
||||
'password': self.gateway_id.password_provider, |
|
||||
'from': self.gateway_id.from_provider, |
|
||||
'to': self.mobile, |
|
||||
'message': self.message, |
|
||||
} |
|
||||
if self.nostop: |
|
||||
params['noStop'] = 1 |
|
||||
if self.deferred: |
|
||||
params['deferred'] = self.deferred |
|
||||
if self.classes: |
|
||||
params['class'] = self.classes |
|
||||
if self.tag: |
|
||||
params['tag'] = self.tag |
|
||||
if self.coding: |
|
||||
params['smsCoding'] = self.coding |
|
||||
return params |
|
||||
|
|
||||
@api.multi |
|
||||
def _send_http_ovh(self): |
|
||||
self.ensure_one() |
|
||||
params = self._prepare_http_ovh() |
|
||||
r = requests.get(self.gateway_id.url, params=params.items()) |
|
||||
params.update({ |
|
||||
'password': '*****', |
|
||||
'to': '*****', |
|
||||
'smsAccount': '*****', |
|
||||
'login': '*****', |
|
||||
}) |
|
||||
_logger.debug("Call OVH API : %s params %s", |
|
||||
self.gateway_id.url, params) |
|
||||
response = r.text |
|
||||
if response[0:2] != 'OK': |
|
||||
raise ValueError(response) |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue