From f0926186ec70ebf23ca41d772aeddba8d96e9662 Mon Sep 17 00:00:00 2001 From: MonsieurB Date: Tue, 18 Apr 2017 17:48:54 +0200 Subject: [PATCH] rename module & code review --- .../README.rst | 10 +- .../__init__.py | 0 .../__manifest__.py | 20 +- .../data}/sms_gateway_data.xml | 11 +- .../i18n/ar.po | 0 .../i18n/ca.po | 0 .../i18n/de.po | 0 .../i18n/es.po | 0 .../i18n/fr.po | 0 .../i18n/pt_BR.po | 0 .../images/client.jpeg | Bin .../images/gateway.jpeg | Bin .../images/gateway_access.jpeg | Bin .../images/send_sms.jpeg | Bin .../images/sms.jpeg | Bin base_sms_client/models/__init__.py | 9 + .../models/server_action.py | 7 +- base_sms_client/models/sms_gateway.py | 100 ++++++++ base_sms_client/models/sms_sms.py | 129 ++++++++++ .../models/sms_template.py | 2 +- base_sms_client/security/groups.xml | 6 + .../security/ir.model.access.csv | 0 .../security/ir.rule.csv | 2 +- .../static/src/img/icon.png | Bin base_sms_client/views/server_action_view.xml | 19 ++ base_sms_client/views/sms_gateway_view.xml | 140 +++++++++++ base_sms_client/views/smstemplate_view.xml | 17 ++ .../wizard}/__init__.py | 5 +- .../wizard/mass_sms.py | 66 ++--- base_sms_client/wizard/mass_sms_view.xml | 55 +++++ oca_dependencies.txt | 1 + {smsclient_ovh => ovh_sms_client}/README.rst | 4 +- {smsclient_ovh => ovh_sms_client}/__init__.py | 0 .../__manifest__.py | 17 +- .../data/keychain.xml | 2 +- .../models/__init__.py | 0 ovh_sms_client/models/keychain.py | 21 ++ .../models/sms_gateway.py | 19 +- smsclient_core/models/sms_gateway.py | 227 ------------------ smsclient_core/security/groups.xml | 8 - smsclient_core/views/serveraction_view.xml | 20 -- smsclient_core/views/sms_gateway_view.xml | 146 ----------- smsclient_core/views/smstemplate_view.xml | 23 -- smsclient_core/wizard/__init__.py | 22 -- smsclient_core/wizard/mass_sms_view.xml | 55 ----- smsclient_ovh/models/keychain.py | 45 ---- 46 files changed, 569 insertions(+), 639 deletions(-) rename {smsclient_core => base_sms_client}/README.rst (75%) rename {smsclient_core => base_sms_client}/__init__.py (100%) rename {smsclient_core => base_sms_client}/__manifest__.py (66%) rename {smsclient_core/views => base_sms_client/data}/sms_gateway_data.xml (57%) rename {smsclient_core => base_sms_client}/i18n/ar.po (100%) rename {smsclient_core => base_sms_client}/i18n/ca.po (100%) rename {smsclient_core => base_sms_client}/i18n/de.po (100%) rename {smsclient_core => base_sms_client}/i18n/es.po (100%) rename {smsclient_core => base_sms_client}/i18n/fr.po (100%) rename {smsclient_core => base_sms_client}/i18n/pt_BR.po (100%) rename {smsclient_core => base_sms_client}/images/client.jpeg (100%) rename {smsclient_core => base_sms_client}/images/gateway.jpeg (100%) rename {smsclient_core => base_sms_client}/images/gateway_access.jpeg (100%) rename {smsclient_core => base_sms_client}/images/send_sms.jpeg (100%) rename {smsclient_core => base_sms_client}/images/sms.jpeg (100%) create mode 100644 base_sms_client/models/__init__.py rename smsclient_core/models/serveraction.py => base_sms_client/models/server_action.py (92%) create mode 100644 base_sms_client/models/sms_gateway.py create mode 100644 base_sms_client/models/sms_sms.py rename smsclient_core/models/smstemplate.py => base_sms_client/models/sms_template.py (93%) create mode 100644 base_sms_client/security/groups.xml rename {smsclient_core => base_sms_client}/security/ir.model.access.csv (100%) rename {smsclient_core => base_sms_client}/security/ir.rule.csv (100%) rename {smsclient_core => base_sms_client}/static/src/img/icon.png (100%) create mode 100644 base_sms_client/views/server_action_view.xml create mode 100644 base_sms_client/views/sms_gateway_view.xml create mode 100644 base_sms_client/views/smstemplate_view.xml rename {smsclient_core/models => base_sms_client/wizard}/__init__.py (61%) rename {smsclient_core => base_sms_client}/wizard/mass_sms.py (93%) create mode 100644 base_sms_client/wizard/mass_sms_view.xml create mode 100644 oca_dependencies.txt rename {smsclient_ovh => ovh_sms_client}/README.rst (80%) rename {smsclient_ovh => ovh_sms_client}/__init__.py (100%) rename {smsclient_ovh => ovh_sms_client}/__manifest__.py (67%) rename {smsclient_ovh => ovh_sms_client}/data/keychain.xml (97%) rename {smsclient_ovh => ovh_sms_client}/models/__init__.py (100%) create mode 100644 ovh_sms_client/models/keychain.py rename {smsclient_ovh => ovh_sms_client}/models/sms_gateway.py (83%) delete mode 100644 smsclient_core/models/sms_gateway.py delete mode 100644 smsclient_core/security/groups.xml delete mode 100644 smsclient_core/views/serveraction_view.xml delete mode 100644 smsclient_core/views/sms_gateway_view.xml delete mode 100644 smsclient_core/views/smstemplate_view.xml delete mode 100644 smsclient_core/wizard/__init__.py delete mode 100644 smsclient_core/wizard/mass_sms_view.xml delete mode 100644 smsclient_ovh/models/keychain.py diff --git a/smsclient_core/README.rst b/base_sms_client/README.rst similarity index 75% rename from smsclient_core/README.rst rename to base_sms_client/README.rst index 5bc7b0a..e510712 100644 --- a/smsclient_core/README.rst +++ b/base_sms_client/README.rst @@ -26,19 +26,17 @@ Usage To use this module, you need to: -* got to partner menu -* select one or multiple partner -* go to more and will found some wizards to send sms + * go to partner menu + * select one or multiple partner + * go to more and will found some wizards to send sms Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed feedback -`here `_. - Credits ======= diff --git a/smsclient_core/__init__.py b/base_sms_client/__init__.py similarity index 100% rename from smsclient_core/__init__.py rename to base_sms_client/__init__.py diff --git a/smsclient_core/__manifest__.py b/base_sms_client/__manifest__.py similarity index 66% rename from smsclient_core/__manifest__.py rename to base_sms_client/__manifest__.py index 1acc557..8e56727 100644 --- a/smsclient_core/__manifest__.py +++ b/base_sms_client/__manifest__.py @@ -1,18 +1,20 @@ # coding: utf-8 -# © 2004-2009 OpenERP SA () +# Copyright (C) 2015 Sébastien BEAU # © 2011 SYLEAM () # © 2013 Julius Network Solutions SARL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - "name": "SMS Client Core", + "name": "Base Sms Client", "version": "10.0.1.0.0", - "depends": ["base", - "mail", + 'license': 'AGPL-3', + "depends": ['mail', 'base_phone', 'keychain', ], + 'author': 'Julius Network Solutions,SYLEAM,' + 'Odoo Community Association (OCA),Akretion', 'images': [ 'images/sms.jpeg', 'images/gateway.jpeg', @@ -20,20 +22,16 @@ 'images/client.jpeg', 'images/send_sms.jpeg' ], - "summary": """ -Sending SMSs very easily, individually or collectively. - - """, + "summary": "Sending SMSs very easily, individually or collectively.", "website": "http://julius.fr", "category": "Phone", - "demo": [], "data": [ "security/groups.xml", "security/ir.model.access.csv", "security/ir.rule.csv", "views/sms_gateway_view.xml", - "views/serveraction_view.xml", - "views/sms_gateway_data.xml", + "views/server_action_view.xml", + "data/sms_gateway_data.xml", "wizard/mass_sms_view.xml", "views/smstemplate_view.xml" ], diff --git a/smsclient_core/views/sms_gateway_data.xml b/base_sms_client/data/sms_gateway_data.xml similarity index 57% rename from smsclient_core/views/sms_gateway_data.xml rename to base_sms_client/data/sms_gateway_data.xml index 255dccd..4a20fd7 100644 --- a/smsclient_core/views/sms_gateway_data.xml +++ b/base_sms_client/data/sms_gateway_data.xml @@ -5,10 +5,11 @@ 1 minutes -1 - - - - - + False + sms.gateway + _run_send_sms + () + False + diff --git a/smsclient_core/i18n/ar.po b/base_sms_client/i18n/ar.po similarity index 100% rename from smsclient_core/i18n/ar.po rename to base_sms_client/i18n/ar.po diff --git a/smsclient_core/i18n/ca.po b/base_sms_client/i18n/ca.po similarity index 100% rename from smsclient_core/i18n/ca.po rename to base_sms_client/i18n/ca.po diff --git a/smsclient_core/i18n/de.po b/base_sms_client/i18n/de.po similarity index 100% rename from smsclient_core/i18n/de.po rename to base_sms_client/i18n/de.po diff --git a/smsclient_core/i18n/es.po b/base_sms_client/i18n/es.po similarity index 100% rename from smsclient_core/i18n/es.po rename to base_sms_client/i18n/es.po diff --git a/smsclient_core/i18n/fr.po b/base_sms_client/i18n/fr.po similarity index 100% rename from smsclient_core/i18n/fr.po rename to base_sms_client/i18n/fr.po diff --git a/smsclient_core/i18n/pt_BR.po b/base_sms_client/i18n/pt_BR.po similarity index 100% rename from smsclient_core/i18n/pt_BR.po rename to base_sms_client/i18n/pt_BR.po diff --git a/smsclient_core/images/client.jpeg b/base_sms_client/images/client.jpeg similarity index 100% rename from smsclient_core/images/client.jpeg rename to base_sms_client/images/client.jpeg diff --git a/smsclient_core/images/gateway.jpeg b/base_sms_client/images/gateway.jpeg similarity index 100% rename from smsclient_core/images/gateway.jpeg rename to base_sms_client/images/gateway.jpeg diff --git a/smsclient_core/images/gateway_access.jpeg b/base_sms_client/images/gateway_access.jpeg similarity index 100% rename from smsclient_core/images/gateway_access.jpeg rename to base_sms_client/images/gateway_access.jpeg diff --git a/smsclient_core/images/send_sms.jpeg b/base_sms_client/images/send_sms.jpeg similarity index 100% rename from smsclient_core/images/send_sms.jpeg rename to base_sms_client/images/send_sms.jpeg diff --git a/smsclient_core/images/sms.jpeg b/base_sms_client/images/sms.jpeg similarity index 100% rename from smsclient_core/images/sms.jpeg rename to base_sms_client/images/sms.jpeg diff --git a/base_sms_client/models/__init__.py b/base_sms_client/models/__init__.py new file mode 100644 index 0000000..7e613da --- /dev/null +++ b/base_sms_client/models/__init__.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2013 Julius Network Solutions SARL +# Author: Sébastien BEAU +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import sms_gateway +from . import server_action +from . import sms_template +from . import sms_sms diff --git a/smsclient_core/models/serveraction.py b/base_sms_client/models/server_action.py similarity index 92% rename from smsclient_core/models/serveraction.py rename to base_sms_client/models/server_action.py index ce31e16..a8eac37 100644 --- a/smsclient_core/models/serveraction.py +++ b/base_sms_client/models/server_action.py @@ -4,14 +4,9 @@ # Copyright (C) 2015 Valentin Chemiere # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -import logging from odoo import models, fields -_logger = logging.getLogger('gateway') - - class ServerAction(models.Model): """ Possibility to specify the SMS Gateway when configure this server action @@ -24,7 +19,7 @@ class ServerAction(models.Model): " the invoice model and `object.invoice_address_id.mobile` " "will be the field providing the correct mobile number.") sms = fields.Char(string='SMS', size=160, translate=True) - sms_server = fields.Many2one( + sms_server_id = fields.Many2one( comodel_name='sms.gateway', string='SMS Server', help='Select the SMS Gateway configuration to use with this action.') sms_template_id = fields.Many2one( diff --git a/base_sms_client/models/sms_gateway.py b/base_sms_client/models/sms_gateway.py new file mode 100644 index 0000000..00ad761 --- /dev/null +++ b/base_sms_client/models/sms_gateway.py @@ -0,0 +1,100 @@ +# coding: utf-8 +# Copyright (C) 2004-2009 Tiny SPRL (). +# Copyright (C) 2011 SYLEAM () +# Copyright (C) 2013 Julius Network Solutions SARL +# Copyright (C) 2015 Valentin Chemiere +# Copyright (C) 2015 Sébastien BEAU +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models, fields, api + +PRIORITY_LIST = [ + ('0', '0'), + ('1', '1'), + ('2', '2'), + ('3', '3') +] + +CLASSES_LIST = [ + ('0', 'Flash'), + ('1', 'Phone display'), + ('2', 'SIM'), + ('3', 'Toolkit') +] + + +class SmsAbstract(models.AbstractModel): + _name = 'sms.abstract' + _description = 'SMS Abstract Model' + + code = fields.Char('Verification Code') + body = fields.Text( + string='Message', + help="The message text that will be send along with the" + " email which is send through this server.") + classes = fields.Selection( + selection=CLASSES_LIST, string='Class', + default='1', + help='The SMS class') + deferred = fields.Integer( + help='The time -in minute(s)- to wait before sending the message.') + priority = fields.Selection( + selection=PRIORITY_LIST, string='Priority', default='3', + help='The priority of the message') + coding = fields.Selection(selection=[ + ('1', '7 bit'), + ('2', 'Unicode') + ], string='Coding', + help='The SMS coding: 1 for 7 bit (160 chracters max' + 'length) or 2 for unicode (70 characters max' + 'length)', + default='1' + ) + tag = fields.Char('Tag', help='an optional tag') + nostop = fields.Boolean( + default=True, + help='Do not display STOP clause in the message, this requires that ' + 'this is not an advertising message.') + validity = fields.Integer( + default=10, + help="The maximum time - in minute(s) - before the message " + "is dropped.") + + char_limit = fields.Integer(string='Character Limit', default=160) + default_gateway = fields.Boolean() + company_id = fields.Many2one(comodel_name='res.company') + + +class SmsGateway(models.Model): + _name = 'sms.gateway' + _description = 'SMS Client' + _inherit = 'sms.abstract' + + name = fields.Char(string='Gateway Name', required=True) + from_provider = fields.Char(string="From") + method = fields.Selection(string='API Method', selection=[]) + url = fields.Char( + string='Gateway URL', help='Base url for message') + state = fields.Selection(selection=[ + ('new', 'Not Verified'), + ('waiting', 'Waiting for Verification'), + ('confirm', 'Verified'), + ], string='Gateway Status', index=True, readonly=True, default='new') + user_ids = fields.Many2many( + comodel_name='res.users', + string='Users Allowed to use the gateway') + + @api.multi + def _check_permissions(self): + self.ensure_one() + if self.env.uid not in self.sudo().user_ids.ids: + return False + return True + + @api.model + def _run_send_sms(self, domain=None): + if domain is None: + domain = [] + domain.append(('state', '=', 'draft')) + sms = self.env['sms.sms'].search(domain) + return sms.send() diff --git a/base_sms_client/models/sms_sms.py b/base_sms_client/models/sms_sms.py new file mode 100644 index 0000000..c781f2e --- /dev/null +++ b/base_sms_client/models/sms_sms.py @@ -0,0 +1,129 @@ +# coding: utf-8 +# Copyright (C) 2004-2009 Tiny SPRL (). +# Copyright (C) 2011 SYLEAM () +# Copyright (C) 2013 Julius Network Solutions SARL +# Copyright (C) 2015 Valentin Chemiere +# Copyright (C) 2015 Sébastien BEAU +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models, fields, api, _ +import logging +_logger = logging.getLogger(__name__) + + +class SmsSms(models.Model): + _name = 'sms.sms' + _description = 'SMS' + _rec_name = 'mobile' + _inherit = 'sms.abstract' + + message = fields.Text( + size=256, + required=True, + readonly=True, + states={'draft': [('readonly', False)]}) + mobile = fields.Char( + required=True, + readonly=True, + states={'draft': [('readonly', False)]}) + gateway_id = fields.Many2one( + comodel_name='sms.gateway', + string='SMS Gateway', + readonly=True, + states={'draft': [('readonly', False)]}) + partner_id = fields.Many2one( + 'res.partner', + readonly=True, + states={'draft': [('readonly', False)]}, + string='Partner') + state = fields.Selection(selection=[ + ('draft', 'Queued'), + ('sent', 'Sent'), + ('cancel', 'Cancel'), + ('error', 'Error'), + ], string='Message Status', + readonly=True, + default='draft') + error = fields.Text( + string='Last Error', + size=256, + readonly=True, + states={'draft': [('readonly', False)]}) + + @api.onchange('partner_id') + def onchange_partner_id(self): + self.mobile = self.partner_id.mobile + + # commit is use to not loose each sms state with orm rollback + @api.multi + def _check_gateway_method(self): + self.ensure_one() + if self.gateway_id.method: + return True + else: + self.write({ + 'state': 'error', + 'error': _("No method gateway selected ")}) + self._cr.commit() + return False + + @api.multi + def _check_gateway_permission(self): + self.ensure_one() + if self.gateway_id._check_permissions(): + return True + else: + self.write( + {'error': 'no permission on gateway', 'state': 'error'}) + self._cr.commit() + return False + + @api.multi + def _check_sms_length(self): + self.ensure_one() + if len(self.message) <= self.gateway_id.char_limit: + return True + else: + self.write({ + 'state': 'error', + 'error': _("Size of SMS should not be more than %s " + "characters ") % self.sms.gateway_id.char_limit + }) + self._cr.commit() + return False + + @api.multi + def send(self): + allsend_ok = True + for sms in self: + sms_check = True + if not sms._check_gateway_method(): + allsend_ok = False + sms_check = False + continue + if not sms.gateway_id._check_permissions(): + allsend_ok = False + sms_check = False + continue + if not sms._check_sms_length(): + allsend_ok = False + sms_check = False + continue + if sms_check: + try: + with sms._cr.savepoint(): + getattr(sms, "_send_%s" % sms.gateway_id.method)() + sms.write({'state': 'sent', 'error': ''}) + except Exception as e: + _logger.error('Failed to send sms %s', e) + sms.write({'error': e, 'state': 'error'}) + sms._cr.commit() + return allsend_ok + + @api.multi + def cancel(self): + self.write({'state': 'cancel'}) + + @api.multi + def retry(self): + self.write({'state': 'draft'}) diff --git a/smsclient_core/models/smstemplate.py b/base_sms_client/models/sms_template.py similarity index 93% rename from smsclient_core/models/smstemplate.py rename to base_sms_client/models/sms_template.py index 09eecbe..d21b95a 100644 --- a/smsclient_core/models/smstemplate.py +++ b/base_sms_client/models/sms_template.py @@ -8,7 +8,7 @@ from odoo import models, fields -class mail_template(models.Model): +class MailTemplate(models.Model): _inherit = "mail.template" sms_template = fields.Boolean('SMS Template') diff --git a/base_sms_client/security/groups.xml b/base_sms_client/security/groups.xml new file mode 100644 index 0000000..589c7be --- /dev/null +++ b/base_sms_client/security/groups.xml @@ -0,0 +1,6 @@ + + + + SMS / User + + diff --git a/smsclient_core/security/ir.model.access.csv b/base_sms_client/security/ir.model.access.csv similarity index 100% rename from smsclient_core/security/ir.model.access.csv rename to base_sms_client/security/ir.model.access.csv diff --git a/smsclient_core/security/ir.rule.csv b/base_sms_client/security/ir.rule.csv similarity index 100% rename from smsclient_core/security/ir.rule.csv rename to base_sms_client/security/ir.rule.csv index 37fd0f3..5ab4794 100644 --- a/smsclient_core/security/ir.rule.csv +++ b/base_sms_client/security/ir.rule.csv @@ -1,4 +1,4 @@ id,name,model_id:id,groups:id,perm_read,perm_write,perm_create,perm_unlink,domain_force -edit_access_sms,Edit Access Sms,model_sms_sms,,True,True,True,True,"[('company_id','=', user.company_id.id)]" edit_access_sms_gateway,Edit Access Sms Gateway,model_sms_gateway,,False,True,True,True,"[('company_id','=', user.company_id.id)]" read_access_sms_gateway,Read Access Sms Gateway,model_sms_gateway,,True,False,False,False,"['|', '|', ('company_id','=', user.company_id.id),('company_id','child_of',[user.company_id.id]),('company_id','=',user.company_id.parent_id.id)]" +edit_access_sms,Edit Access Sms,model_sms_sms,,True,True,True,True,"[('company_id','=', user.company_id.id)]" diff --git a/smsclient_core/static/src/img/icon.png b/base_sms_client/static/src/img/icon.png similarity index 100% rename from smsclient_core/static/src/img/icon.png rename to base_sms_client/static/src/img/icon.png diff --git a/base_sms_client/views/server_action_view.xml b/base_sms_client/views/server_action_view.xml new file mode 100644 index 0000000..17451d5 --- /dev/null +++ b/base_sms_client/views/server_action_view.xml @@ -0,0 +1,19 @@ + + + + ir.actions.server + + + + + + + + + + + + + + + diff --git a/base_sms_client/views/sms_gateway_view.xml b/base_sms_client/views/sms_gateway_view.xml new file mode 100644 index 0000000..7b33b23 --- /dev/null +++ b/base_sms_client/views/sms_gateway_view.xml @@ -0,0 +1,140 @@ + + + + sms.gateway + + +
+ + +

+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + sms.gateway + + + + + + + + + + + SMS Gateway + sms.gateway + form + form,tree + + + + + + + sms.sms + + + + + + + +