diff --git a/multi_sms_gateway/README.rst b/multi_sms_gateway/README.rst new file mode 100644 index 000000000..7c733cb21 --- /dev/null +++ b/multi_sms_gateway/README.rst @@ -0,0 +1,53 @@ +.. image:: https://img.shields.io/badge/licence-OPL--1-red.svg + :target: https://www.odoo.com/documentation/16.0/legal/licenses.html#odoo-apps + :alt: License: OPL-1 + +Multiple SMS Gateway Integration +================================ +* Module for sending SMS through different SMS gateways. + +Installation +============ +- www.odoo.com/documentation/16.0/setup/install.html +- Install all external dependencies +- Install our custom addon + +Configuration +============= +- Add the users to the new security group 'Multiple SMS Gateway Integration / Manager' to give access to +the new menus of Multiple SMS Gateway Integration module. +- Setup the gateways that you would like to use by adding the required credentials. + +License +------- +Odoo Proprietary License v1.0 (OPL-1) +(https://www.odoo.com/documentation/16.0/legal/licenses.html) + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +* Developer: (V16) Sumith S @cybrosys, Contact: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com + +Further information +=================== +HTML Description: ``__ \ No newline at end of file diff --git a/multi_sms_gateway/__init__.py b/multi_sms_gateway/__init__.py new file mode 100644 index 000000000..8899504ef --- /dev/null +++ b/multi_sms_gateway/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 +# (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import models +from . import wizard diff --git a/multi_sms_gateway/__manifest__.py b/multi_sms_gateway/__manifest__.py new file mode 100644 index 000000000..bb4011728 --- /dev/null +++ b/multi_sms_gateway/__manifest__.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 +# (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +{ + 'name': 'Multiple SMS Gateway Integration', + 'version': '16.0.1.0.0', + 'category': 'Extra Tools', + 'summary': 'Module to send SMS through different SMS gateway', + 'description': """ + This modules helps to send SMS using different SMS gateways including + D7, Twilio, Vonage, TeleSign, MessageBird and Telnyx""", + 'author': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'external_dependencies': { + 'python': ['messagebird', 'telesign', 'telnyx', 'twilio', 'vonage']}, + 'depends': ['base', 'contacts'], + 'images': ['static/description/banner.png'], + 'data': [ + 'security/multi_sms_gateway_groups.xml', + 'security/sms_history_security.xml', + 'security/ir.model.access.csv', + 'data/sms_gateway_data.xml', + 'views/sms_history_views.xml', + 'views/sms_gateway_config_views.xml', + 'views/res_partner_views.xml', + 'wizard/send_sms_views.xml', + 'views/multi_sms_gateway_menus.xml' + ], + 'license': 'OPL-1', + # 'price': 4.99, # ToDo: Please update the price before publish + # 'currency': 'EUR', + 'installable': True, + 'auto_install': False, + 'application': False +} diff --git a/multi_sms_gateway/data/sms_gateway_data.xml b/multi_sms_gateway/data/sms_gateway_data.xml new file mode 100644 index 000000000..871061b97 --- /dev/null +++ b/multi_sms_gateway/data/sms_gateway_data.xml @@ -0,0 +1,22 @@ + + + + + d7 + + + twilio + + + vonage + + + telesign + + + messagebird + + + telnyx + + \ No newline at end of file diff --git a/multi_sms_gateway/doc/RELEASE_NOTES.md b/multi_sms_gateway/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..f1f39a395 --- /dev/null +++ b/multi_sms_gateway/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 30.04.2023 +#### Version 16.0.1.0.0 +#### ADD + +- Initial commit for Multiple SMS Gateway Integration \ No newline at end of file diff --git a/multi_sms_gateway/models/__init__.py b/multi_sms_gateway/models/__init__.py new file mode 100644 index 000000000..db5ff9bc5 --- /dev/null +++ b/multi_sms_gateway/models/__init__.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 +# (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import res_partner +from . import sms_connection_params +from . import sms_gateway +from . import sms_gateway_config +from . import sms_history diff --git a/multi_sms_gateway/models/res_partner.py b/multi_sms_gateway/models/res_partner.py new file mode 100644 index 000000000..1495fad06 --- /dev/null +++ b/multi_sms_gateway/models/res_partner.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 +# (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +""" This module helps to send sms from the form view of partner. """ +from odoo import models, _ + + +class ResPartner(models.Model): + """ + Inheriting model 'res.partner' to add the function to send SMS. + Methods: + send_sms(): + Opens the Send SMS wizard. + """ + _inherit = 'res.partner' + + def send_sms(self): + """ + Function to open Send SMS wizard. + Returns: + dict: the action window of 'send.sms'. + """ + record_ids = self.env.context.get('active_ids') + numbers = self.env['res.partner'].browse(record_ids).mapped('phone') + return { + 'name': _('Send SMS'), + 'type': 'ir.actions.act_window', + 'res_model': 'send.sms', + 'context': { + 'default_sms_to': ','.join([str(numb) for numb in numbers]), + }, + 'view_mode': 'form', + 'target': 'new' + } diff --git a/multi_sms_gateway/models/sms_connection_params.py b/multi_sms_gateway/models/sms_connection_params.py new file mode 100644 index 000000000..3a65f59a8 --- /dev/null +++ b/multi_sms_gateway/models/sms_connection_params.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 +# (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +""" This module helps to Connect SMS gateway. """ +from odoo import fields, models + + +class SmsConnectionParams(models.Model): + """ + Class to add the credentials for establishing the connection with the + gateways. + """ + _name = 'sms.connection.params' + _description = 'SMS Connection' + + name = fields.Char(string='Name', help='Name for the parameter.') + sms_gateway_config_id = fields.Many2one( + 'sms.gateway.config', string='Connection ID', + help='Gateway configuration with credentials.') + connection_api = fields.Char( + string='API Method', help='Enter the API method.') + connection_value = fields.Char( + string='Value', help='Connection value for the gateway.') diff --git a/multi_sms_gateway/models/sms_gateway.py b/multi_sms_gateway/models/sms_gateway.py new file mode 100644 index 000000000..3781a1612 --- /dev/null +++ b/multi_sms_gateway/models/sms_gateway.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 +# (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +""" This module helps to add gateway providers. """ +from odoo import fields, models + + +class SmsGateway(models.Model): + """ + Class to add the gateway providers. + """ + _name = 'sms.gateway' + _description = 'SMS Gateway' + + name = fields.Char(string='Provider Name', + help='Provide the name of the provider.') diff --git a/multi_sms_gateway/models/sms_gateway_config.py b/multi_sms_gateway/models/sms_gateway_config.py new file mode 100644 index 000000000..0cb6e0a48 --- /dev/null +++ b/multi_sms_gateway/models/sms_gateway_config.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 +# (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +""" This module helps to configure different SMS gateway. """ +from odoo import fields, models + + +class SmsGatewayConfig(models.Model): + """ + Class to save the user credential details for the SMS gateways. + """ + _name = 'sms.gateway.config' + _description = 'SMS Gateway Configuration' + _rec_name = 'gateway_name' + + api_method = fields.Char( + string='API Method', help='The API method that has to be used.') + url = fields.Char( + sring='Gateway URL', help='Gateway URL to send the message.') + connection_ids = fields.One2many( + 'sms.connection.params', 'sms_gateway_config_id', string='Parameters', + help='Connection parameters for the SMS gateway.') + sms_gateway_id = fields.Many2one( + 'sms.gateway', string='Gateway', help='The SMS Gateway.') + gateway_name = fields.Char( + related='sms_gateway_id.name', help='Gateway Name') + vonage_key = fields.Char(string='Key', help='The key for Vonage') + vonage_secret = fields.Char(string='Secret', help='The secret for Vonage.') + twilio_account_sid = fields.Char( + string='Account SID', help='Account SID for Twilio.') + twilio_auth_token = fields.Char( + string='Auth Token', help='Auth token for Twilio.') + twilio_phone_number = fields.Char( + string='Twilio Number', help='Twilio phone number.') + d7_username = fields.Char(string='Username', help='D7 username.') + d7_password = fields.Char(string='Password', help=' D7 password.') + d7_from = fields.Char(string='From', help='D7 from phone number.') + telesign_customer = fields.Char( + string='TeleSign Customer ID', help='Customer ID for TeleSign.') + telesign_api_key = fields.Char( + string='TeleSign API Key', help='API key for TeleSign') + telnyx_number = fields.Char(string='Telnyx Number', help='Telnyx number.') + telnyx_api_key = fields.Char( + string='Telnyx API Key', help='API key for Telnyx.') + messagebird_api_key = fields.Char( + string='MessageBird API Key', help='API key for MessageBird.') diff --git a/multi_sms_gateway/models/sms_history.py b/multi_sms_gateway/models/sms_history.py new file mode 100644 index 000000000..0a762f909 --- /dev/null +++ b/multi_sms_gateway/models/sms_history.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 +# (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +""" This module helps to see the history of all SMS send. """ +from odoo import fields, models + + +class SmsHistory(models.Model): + """ + This model stores the details of all the SMS messages that have been + sent, including the gateway name, date of sending, mobile phone number, + and SMS text. + """ + _name = 'sms.history' + _description = 'SMS History' + _rec_name = 'sms_mobile' + + sms_gateway_id = fields.Many2one('sms.gateway', string='Gateway', + help='The SMS Gateway.') + sms_date = fields.Datetime(string='Date', default=fields.Date().today(), + help='Date of sending message(current day).') + sms_mobile = fields.Char( + string='Mobile Number', help='Phone Number to send SMS.') + sms_text = fields.Text(string='SMS Text', help='The message to be sent.') + company_id = fields.Many2one( + 'res.company', string='Company', required=True, + default=lambda self: self.env.company, help='Active company.') diff --git a/multi_sms_gateway/security/ir.model.access.csv b/multi_sms_gateway/security/ir.model.access.csv new file mode 100644 index 000000000..d7b91304c --- /dev/null +++ b/multi_sms_gateway/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_sms_gateway_config_manager,access.sms.gateway.config.manager,model_sms_gateway_config,multi_sms_gateway.multi_sms_gateway_group_manager,1,1,1,1 +access_sms_connection_params_manager,access.sms.connection.params.manager,model_sms_connection_params,multi_sms_gateway.multi_sms_gateway_group_manager,1,1,1,1 +access_send_sms_manager,access.send.sms.manager,model_send_sms,multi_sms_gateway.multi_sms_gateway_group_manager,1,1,1,1 +access_sms_gateway_manager,access.sms.gateway.manager,model_sms_gateway,multi_sms_gateway.multi_sms_gateway_group_manager,1,1,1,1 +access_sms_history_manager,access.sms.history.manager,model_sms_history,multi_sms_gateway.multi_sms_gateway_group_manager,1,1,1,1 \ No newline at end of file diff --git a/multi_sms_gateway/security/multi_sms_gateway_groups.xml b/multi_sms_gateway/security/multi_sms_gateway_groups.xml new file mode 100644 index 000000000..2c7da335e --- /dev/null +++ b/multi_sms_gateway/security/multi_sms_gateway_groups.xml @@ -0,0 +1,16 @@ + + + + + Multiple SMS Gateway Integration + Manage user access for Multiple SMS Gateway Integration module + 20 + + + + Manager + + Access to the new menus and records of Multiple SMS Gateway Integration + + + \ No newline at end of file diff --git a/multi_sms_gateway/security/sms_history_security.xml b/multi_sms_gateway/security/sms_history_security.xml new file mode 100644 index 000000000..07802a039 --- /dev/null +++ b/multi_sms_gateway/security/sms_history_security.xml @@ -0,0 +1,9 @@ + + + + + SMS History: Multi-company + + ['|', ('company_id', '=', False), ('company_id', 'in', company_ids)] + + \ No newline at end of file diff --git a/multi_sms_gateway/static/description/assets/icons/check.png b/multi_sms_gateway/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/check.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/chevron.png b/multi_sms_gateway/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/chevron.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/cogs.png b/multi_sms_gateway/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/cogs.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/consultation.png b/multi_sms_gateway/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/consultation.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/ecom-black.png b/multi_sms_gateway/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/ecom-black.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/education-black.png b/multi_sms_gateway/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/education-black.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/hotel-black.png b/multi_sms_gateway/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/hotel-black.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/license.png b/multi_sms_gateway/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/license.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/lifebuoy.png b/multi_sms_gateway/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/lifebuoy.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/manufacturing-black.png b/multi_sms_gateway/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/manufacturing-black.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/pos-black.png b/multi_sms_gateway/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/pos-black.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/puzzle.png b/multi_sms_gateway/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/puzzle.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/restaurant-black.png b/multi_sms_gateway/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/restaurant-black.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/service-black.png b/multi_sms_gateway/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/service-black.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/trading-black.png b/multi_sms_gateway/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/trading-black.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/training.png b/multi_sms_gateway/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/training.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/update.png b/multi_sms_gateway/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/update.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/user.png b/multi_sms_gateway/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/user.png differ diff --git a/multi_sms_gateway/static/description/assets/icons/wrench.png b/multi_sms_gateway/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/multi_sms_gateway/static/description/assets/icons/wrench.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/categories.png b/multi_sms_gateway/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/categories.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/check-box.png b/multi_sms_gateway/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/check-box.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/compass.png b/multi_sms_gateway/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/compass.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/corporate.png b/multi_sms_gateway/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/corporate.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/customer-support.png b/multi_sms_gateway/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/customer-support.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/cybrosys-logo.png b/multi_sms_gateway/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/cybrosys-logo.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/features.png b/multi_sms_gateway/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/features.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/logo.png b/multi_sms_gateway/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/logo.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/pictures.png b/multi_sms_gateway/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/pictures.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/pie-chart.png b/multi_sms_gateway/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/pie-chart.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/right-arrow.png b/multi_sms_gateway/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/right-arrow.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/star.png b/multi_sms_gateway/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/star.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/support.png b/multi_sms_gateway/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/support.png differ diff --git a/multi_sms_gateway/static/description/assets/misc/whatsapp.png b/multi_sms_gateway/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/misc/whatsapp.png differ diff --git a/multi_sms_gateway/static/description/assets/modules/1.png b/multi_sms_gateway/static/description/assets/modules/1.png new file mode 100644 index 000000000..05f58a9b2 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/modules/1.png differ diff --git a/multi_sms_gateway/static/description/assets/modules/2.png b/multi_sms_gateway/static/description/assets/modules/2.png new file mode 100644 index 000000000..33372bdc1 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/modules/2.png differ diff --git a/multi_sms_gateway/static/description/assets/modules/3.png b/multi_sms_gateway/static/description/assets/modules/3.png new file mode 100644 index 000000000..99298bf4b Binary files /dev/null and b/multi_sms_gateway/static/description/assets/modules/3.png differ diff --git a/multi_sms_gateway/static/description/assets/modules/4.gif b/multi_sms_gateway/static/description/assets/modules/4.gif new file mode 100644 index 000000000..beb106101 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/modules/4.gif differ diff --git a/multi_sms_gateway/static/description/assets/modules/5.png b/multi_sms_gateway/static/description/assets/modules/5.png new file mode 100644 index 000000000..42d7af8e6 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/modules/5.png differ diff --git a/multi_sms_gateway/static/description/assets/modules/6.png b/multi_sms_gateway/static/description/assets/modules/6.png new file mode 100644 index 000000000..f088c60a2 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/modules/6.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/1.png b/multi_sms_gateway/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..8f25f8ad1 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/1.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/2.png b/multi_sms_gateway/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..d88cf26bb Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/2.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/3.png b/multi_sms_gateway/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..22bf1ee27 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/3.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/4.png b/multi_sms_gateway/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..1138db68f Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/4.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/5.png b/multi_sms_gateway/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..833e84006 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/5.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/6.png b/multi_sms_gateway/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..cf81e765f Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/6.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/7.png b/multi_sms_gateway/static/description/assets/screenshots/7.png new file mode 100644 index 000000000..d28e2130a Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/7.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/8.png b/multi_sms_gateway/static/description/assets/screenshots/8.png new file mode 100644 index 000000000..e58ccd09d Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/8.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/hero.gif b/multi_sms_gateway/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..39649e95b Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/hero.gif differ diff --git a/multi_sms_gateway/static/description/banner.png b/multi_sms_gateway/static/description/banner.png new file mode 100644 index 000000000..5738a486e Binary files /dev/null and b/multi_sms_gateway/static/description/banner.png differ diff --git a/multi_sms_gateway/static/description/icon.png b/multi_sms_gateway/static/description/icon.png new file mode 100644 index 000000000..439656594 Binary files /dev/null and b/multi_sms_gateway/static/description/icon.png differ diff --git a/multi_sms_gateway/static/description/index.html b/multi_sms_gateway/static/description/index.html new file mode 100644 index 000000000..4581abce0 --- /dev/null +++ b/multi_sms_gateway/static/description/index.html @@ -0,0 +1,553 @@ +
+ +
+ +
+
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+ +
+
+
+ +

+ Multiple SMS Gateway Integration +

+

+ This Module Helps To Send SMS through different SMS Gateways +

+ + +
+
+
+
+ + +
+
+ +
+

+ Explore This Module +

+
+ + + + +
+
+ +
+

+ Overview +

+
+
+
+ This module helps to sent SMS to the customer with the help of + different SMS Gateways. The module mainly uses the Gateways + D7, Twilio, Vonage, TeleSign, MessageBird and Telnyx. +
+
+ + + +
+
+ +
+

+ Features +

+
+
+
+
+ +
+ + Send SMS through different Gateway. + + +
+
+
+ +
+ + Can see all the SMS history send through the Gateway + + +
+
+
+
+ + + +
+
+ +
+

+ Screenshots +

+
+
+
+
+

+ Select the access right for the Multiple SMS Gateway Integration module as Manager. +

+

+ We can give the access for the module from the field. +

+ +
+ +
+

+ Select the gateway to send the SMS. +

+

+ Select the suitable gateway to send SMS. +

+ +
+ +
+

+ The credential fields will be changed depending on the gateway. +

+

+ +
+
+
+

+ You can select the already created gateways. +

+

+ +
+
+

+ Server action to send the SMS. +

+

+ +
+
+

+ The wizard view helps to select the gateways that you have created. +

+

+ +
+
+

+ Add the number for sending the SMS. +

+

+ +
+
+

+ View the SMS History. +

+

+ +
+
+ + + +
+
+ +
+

+ Related Products +

+
+
+
+ +
+
+ + + + +
+
+ +
+

+ Our Services +

+
+ +
+
+
+
+ +
+
+ Odoo Customization +
+
+ +
+
+ +
+
+ Odoo Implementation +
+
+ +
+
+ +
+
+ Odoo Support +
+
+ +
+
+ +
+
+ Hire Odoo Developer +
+
+ +
+
+ +
+
+ Odoo Integration +
+
+ +
+
+ +
+
+ Odoo Migration +
+
+ +
+
+ +
+
+ Odoo Consultancy +
+
+ +
+
+ +
+
+ Odoo Implementation +
+
+ +
+
+ +
+
+ Odoo Licensing Consultancy +
+
+
+
+ + + + + +
+
+ +
+

+ Our Industries +

+
+ +
+
+
+
+ +
+ Trading +
+

+ Easily procure and sell your products +

+
+
+ +
+
+ +
+ POS +
+

+ Easy configuration and convivial experience +

+
+
+ +
+
+ +
+ Education +
+

+ A platform for educational management +

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and schedule your operations +

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile friendly, awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of services and invoice +

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or restaurant methodically +

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An all-inclusive hotel management application

+
+
+
+
+ + + + +
+
+ +
+

+ Support +

+
+
+
+
+
+
+ +
+
+

Need Help?

+

+ Got questions or need help? Get in touch. +

+ +

+ odoo@cybrosys.com +

+
+
+
+
+
+
+
+ +
+
+

WhatsApp

+

Say hi to us on WhatsApp!

+ +

+ +91 86068 27707 +

+
+
+
+
+
+
+
+ +
+
+
+ \ No newline at end of file diff --git a/multi_sms_gateway/views/multi_sms_gateway_menus.xml b/multi_sms_gateway/views/multi_sms_gateway_menus.xml new file mode 100644 index 000000000..aa3a740b8 --- /dev/null +++ b/multi_sms_gateway/views/multi_sms_gateway_menus.xml @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/multi_sms_gateway/views/res_partner_views.xml b/multi_sms_gateway/views/res_partner_views.xml new file mode 100644 index 000000000..ce92eec15 --- /dev/null +++ b/multi_sms_gateway/views/res_partner_views.xml @@ -0,0 +1,13 @@ + + + + + + Send SMS + + + form,list + code + action = records.send_sms() + + \ No newline at end of file diff --git a/multi_sms_gateway/views/sms_gateway_config_views.xml b/multi_sms_gateway/views/sms_gateway_config_views.xml new file mode 100644 index 000000000..3cb2acb4e --- /dev/null +++ b/multi_sms_gateway/views/sms_gateway_config_views.xml @@ -0,0 +1,114 @@ + + + + + sms.gateway.config.view.form + sms.gateway.config + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + sms.gateway.config.view.tree + sms.gateway.config + + + + + + + + + + + SMS Gateway Configuration + sms.gateway.config + +

+ Gateway List Is Empty +

+

+ Create a New Gateway List +

+
+
+
\ No newline at end of file diff --git a/multi_sms_gateway/views/sms_history_views.xml b/multi_sms_gateway/views/sms_history_views.xml new file mode 100644 index 000000000..c269e8921 --- /dev/null +++ b/multi_sms_gateway/views/sms_history_views.xml @@ -0,0 +1,47 @@ + + + + + sms.history.view.form + sms.history + +
+ + + + + + + + + + + + +
+
+
+ + + sms.history.view.tree + sms.history + + + + + + + + + + + + SMS History + sms.history + +

+ SMS history is not created yet! Please send an SMS to create new history. +

+
+
+
\ No newline at end of file diff --git a/multi_sms_gateway/wizard/__init__.py b/multi_sms_gateway/wizard/__init__.py new file mode 100644 index 000000000..52a7a3a49 --- /dev/null +++ b/multi_sms_gateway/wizard/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 +# (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import send_sms diff --git a/multi_sms_gateway/wizard/send_sms.py b/multi_sms_gateway/wizard/send_sms.py new file mode 100644 index 000000000..ff5314314 --- /dev/null +++ b/multi_sms_gateway/wizard/send_sms.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 +# (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +""" This module helps to add the sms details in the wizard and send SMS. """ +import messagebird +import requests +import telnyx +import vonage +from telesign.messaging import MessagingClient +from twilio.rest import Client + +from odoo import fields, models +from odoo.exceptions import UserError + + +class SendSms(models.TransientModel): + """ + Class for the wizard to send SMS. + Methods: + action_send_sms(): + Button action to send SMS. + """ + _name = 'send.sms' + _description = 'Wizard to send SMS' + + sms_id = fields.Many2one('sms.gateway.config', string='Connection ID', + help='Gateway record with credentials') + sms_to = fields.Char(string='Send To', + help='Enter the number to send the SMS') + text = fields.Text(string='Text', required=True, + help='Enter the text for the SMS') + + def action_send_sms(self): + """ + Function to send SMS using different SMS gateway + """ + if self.sms_id.gateway_name == 'vonage': + client = vonage.Client(key=self.sms_id.vonage_key, + secret=self.sms_id.vonage_secret) + vonage.Sms(client) + for number in self.sms_to.split(','): + if number: + client.sms.send_message( + { + "from": 'Vonage APIs', + "to": number, + "text": self.text + } + ) + elif self.sms_id.gateway_name == 'twilio': + client = Client(self.sms_id.twilio_account_sid, + self.sms_id.twilio_auth_token) + for number in self.sms_to.split(','): + if number: + client.messages.create( + body=self.text, + from_=self.sms_id.twilio_phone_number, + to=number + ) + elif self.sms_id.gateway_name == 'telesign': + for number in self.sms_to.split(','): + if number: + messaging = MessagingClient( + self.sms_id.telesign_customer, + self.sms_id.telesign_api_key) + messaging.message(number, self.text, 'ARN') + elif self.sms_id.gateway_name == 'd7': + for number in self.sms_to.split(','): + if number: + querystring = { + "username": self.sms_id.d7_username, + "password": self.sms_id.d7_password, + "from": self.sms_id.d7_from, + "content": """This%20is%20a%20test%20message%20to%20 + verify%20the%20DLR%20callback""", + "dlr-method": "POST", + "dlr-url": "https://4ba60af1.ngrok.io/receive", + "dlr": "yes", + "dlr-level": "3", + "to": number + } + requests.request( + 'GET', 'https://http-api.d7networks.com/send', + headers={'cache-control': 'no-cache'}, + params=querystring) + elif self.sms_id.gateway_name == 'messagebird': + client = messagebird.Client(self.sms_id.messagebird_api_key) + for number in self.sms_to.split(','): + if number: + try: + client.message_create( + 'MessageBird', number, self.text, + {'reference': 'Foobar'} + ) + except messagebird.client.ErrorException: + raise UserError('Invalid parameter!') + elif self.sms_id.gateway_name == 'telnyx': + telnyx.api_key = self.sms_id.telnyx_api_key + for number in self.sms_to.split(','): + if number: + try: + telnyx.Message.create( + from_=self.sms_id.telnyx_number, + to=number, + text=self.text + ) + except telnyx.error.InvalidRequestError: + raise UserError('Missing required parameter!') + self.env['sms.history'].sudo().create({ + 'sms_gateway_id': self.sms_id.sms_gateway_id.id, + 'sms_mobile': self.sms_to, + 'sms_text': self.text + }) diff --git a/multi_sms_gateway/wizard/send_sms_views.xml b/multi_sms_gateway/wizard/send_sms_views.xml new file mode 100644 index 000000000..ee3751cdb --- /dev/null +++ b/multi_sms_gateway/wizard/send_sms_views.xml @@ -0,0 +1,31 @@ + + + + + + send.sms.view.form + send.sms + + +
+ + + + + + + + + + + + +
+
+
+ +
\ No newline at end of file