You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.6 KiB

  1. # coding: utf-8
  2. # Copyright (C) 2015 Sébastien BEAU <sebastien.beau@akretion.com>
  3. # Valentin CHEMIERE <valentin.chemiere@akretion.com>
  4. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  5. from odoo import api, models
  6. import requests
  7. import logging
  8. import json
  9. _logger = logging.getLogger(__name__)
  10. class SmsClient(models.Model):
  11. _inherit = "sms.gateway"
  12. @api.model
  13. def get_method(self):
  14. method = super(SmsClient, self).get_method()
  15. method.append(('http_ovh', 'OVH HTTP'), )
  16. return method
  17. @api.multi
  18. def _provider_get_provider_conf(self):
  19. for rec in self:
  20. keychain = rec.env['keychain.account']
  21. if rec._check_permissions:
  22. retrieve = keychain.suspend_security().retrieve
  23. else:
  24. retrieve = keychain.retrieve
  25. accounts = retrieve(
  26. [['namespace', '=', 'ovh_provider']])
  27. return accounts[0]
  28. class SmsSms(models.Model):
  29. _inherit = "sms.sms"
  30. @api.model
  31. def _prepare_http_ovh(self):
  32. keychain_account = self.gateway_id._provider_get_provider_conf()
  33. keychain_json = json.loads(keychain_account['data'])
  34. params = {
  35. 'smsAccount': keychain_json['sms_account'],
  36. 'login': keychain_account['login'],
  37. 'password': keychain_account.get_password(),
  38. 'from': self.gateway_id.from_provider,
  39. 'url': self.gateway_id.url,
  40. 'to': self._convert_to_e164(self.mobile),
  41. 'message': self.message,
  42. }
  43. if self.nostop:
  44. params['noStop'] = 1
  45. if self.deferred:
  46. params['deferred'] = self.deferred
  47. if self.classes:
  48. params['class'] = self.classes
  49. if self.tag:
  50. params['tag'] = self.tag
  51. if self.coding:
  52. params['smsCoding'] = self.coding
  53. return params
  54. @api.model
  55. def _convert_to_e164(self, erp_number):
  56. to_dial_number = erp_number.replace(u'\xa0', u'')
  57. return to_dial_number
  58. @api.multi
  59. def _send_http_ovh(self):
  60. self.ensure_one()
  61. params = self._prepare_http_ovh()
  62. r = requests.get(params['url'], params=params.items())
  63. params.update({
  64. 'password': '*****',
  65. 'to': '*****',
  66. 'smsAccount': '*****',
  67. 'login': '*****',
  68. })
  69. print params
  70. _logger.debug("Call OVH API : %s params %s",
  71. params['url'], params)
  72. response = r.text
  73. if response[0:2] != 'OK':
  74. raise ValueError(response)