diff --git a/field_timepicker/static/wickedpicker/dist/wickedpicker.min.css b/field_timepicker/static/wickedpicker/dist/wickedpicker.min.css new file mode 100644 index 000000000..6048cb76a --- /dev/null +++ b/field_timepicker/static/wickedpicker/dist/wickedpicker.min.css @@ -0,0 +1 @@ +.wickedpicker{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-shadow:0 0 0 1px rgba(14,41,57,.12),0 2px 5px rgba(14,41,57,.44),inset 0 -1px 2px rgba(14,41,57,.15);background:#fefefe;margin:0 auto;border-radius:.1px;width:270px;height:130px;font-size:14px;display:none}.wickedpicker__title{background-image:-webkit-linear-gradient(top,#fff 0,#f2f2f2 100%);position:relative;background:#f2f2f2;margin:0 auto;border-bottom:1px solid #e5e5e5;padding:12px 11px 10px 15px;color:#4C4C4C;font-size:inherit}.wickedpicker__close{-webkit-transform:translateY(-25%);-moz-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);position:absolute;top:25%;right:10px;color:#34495e;cursor:pointer}.wickedpicker__close:before{content:'\00d7'}.wickedpicker__controls{padding:10px 0;line-height:normal;margin:0}.wickedpicker__controls__control,.wickedpicker__controls__control--separator{vertical-align:middle;display:inline-block;font-size:inherit;margin:0 auto;width:35px;letter-spacing:1.3px}.wickedpicker__controls__control-down,.wickedpicker__controls__control-up{color:#34495e;position:relative;display:block;margin:3px auto;font-size:18px;cursor:pointer}.wickedpicker__controls__control-up:before{content:'\e800'}.wickedpicker__controls__control-down:after{content:'\e801'}.wickedpicker__controls__control--separator{width:5px}.text-center,.wickedpicker__controls,.wickedpicker__controls__control,.wickedpicker__controls__control--separator,.wickedpicker__controls__control-down,.wickedpicker__controls__control-up,.wickedpicker__title{text-align:center}.hover-state{color:#3498db}@font-face{font-family:fontello;src:url(../fonts/fontello.eot?52602240);src:url(../fonts/fontello.eot?52602240#iefix) format("embedded-opentype"),url(../fonts/fontello.woff?52602240) format("woff"),url(../fonts/fontello.ttf?52602240) format("truetype"),url(../fonts/fontello.svg?52602240#fontello) format("svg");font-weight:400;font-style:normal}.fontello-after:after,.fontello:before,.wickedpicker__controls__control-down:after,.wickedpicker__controls__control-up:before{font-family:fontello;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} \ No newline at end of file diff --git a/field_timepicker/static/wickedpicker/dist/wickedpicker.min.js b/field_timepicker/static/wickedpicker/dist/wickedpicker.min.js new file mode 100644 index 000000000..394c14cb0 --- /dev/null +++ b/field_timepicker/static/wickedpicker/dist/wickedpicker.min.js @@ -0,0 +1,315 @@ +! function($, window, document) { + "use strict"; + + function Wickedpicker(e, t) { + this.element = $(e), this.options = $.extend({}, defaults, t), this.element.addClass("hasWickedpicker"), this.element.attr("onkeypress", "return false;"), this.element.attr("aria-showingpicker", "false"), this.createPicker(), this.timepicker = $(".wickedpicker"), this.up = $("." + this.options.upArrow.split(/\s+/) + .join(".")), this.down = $("." + this.options.downArrow.split(/\s+/) + .join(".")), this.separator = $(".wickedpicker__controls__control--separator"), this.hoursElem = $(".wickedpicker__controls__control--hours"), this.minutesElem = $(".wickedpicker__controls__control--minutes"), this.secondsElem = $(".wickedpicker__controls__control--seconds"), this.meridiemElem = $(".wickedpicker__controls__control--meridiem"), this.close = $("." + this.options.close.split(/\s+/) + .join(".")); + var i = this.timeArrayFromString(this.options.now); + this.options.now = new Date(today.getFullYear(), today.getMonth(), today.getDate(), i[0], i[1], i[2]), this.selectedHour = this.parseHours(this.options.now.getHours()), this.selectedMin = this.parseSecMin(this.options.now.getMinutes()), this.selectedSec = this.parseSecMin(this.options.now.getSeconds()), this.selectedMeridiem = this.parseMeridiem(this.options.now.getHours()), this.setHoverState(), this.attach(e), this.setText(e) + } + "function" != typeof String.prototype.endsWith && (String.prototype.endsWith = function(e) { + return e.length > 0 && this.substring(this.length - e.length, this.length) === e + }); + var isMobile = function() { + return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) + }, + today = new Date, + pluginName = "wickedpicker", + defaults = { + now: today.getHours() + ":" + today.getMinutes(), + twentyFour: !1, + upArrow: "wickedpicker__controls__control-up", + downArrow: "wickedpicker__controls__control-down", + close: "wickedpicker__close", + hoverState: "hover-state", + title: "Timepicker", + showSeconds: !1, + timeSeparator: " : ", + secondsInterval: 1, + minutesInterval: 1, + beforeShow: null, + afterShow: null, + show: null, + clearable: !1, + closeOnClickOutside: !0, + onClickOutside: function() {} + }; + $.extend(Wickedpicker.prototype, { + showPicker: function(e) { + "function" == typeof this.options.beforeShow && this.options.beforeShow(e, this.timepicker); + var t = $(e) + .offset(); + if($(e) + .attr({ + "aria-showingpicker": "true", + tabindex: -1 + }), this.setText(e), this.showHideMeridiemControl(), this.getText(e) !== this.getTime()) { + var i = this.getText(e), + s = /\s[ap]m$/i, + o = s.test(i) ? i.substr(-2, 2) : null, + n = i.replace(s, "") + .split(this.options.timeSeparator), + r = {}; + r.hours = n[0], r.minutes = n[1], r.meridiem = o, this.options.showSeconds && (r.seconds = n[2]), this.setTime(r) + } + this.timepicker.css({ + "z-index": this.element.css("z-index") + 1, + position: "absolute", + left: t.left, + top: t.top + $(e)[0].offsetHeight + }) + .show(), "function" == typeof this.options.show && this.options.show(e, this.timepicker), this.handleTimeAdjustments(e) + }, + hideTimepicker: function(e) { + this.timepicker.hide(), "function" == typeof this.options.afterShow && this.options.afterShow(e, this.timepicker), { + start: function() { + var e = $.Deferred(); + return $('[aria-showingpicker="true"]') + .attr("aria-showingpicker", "false"), e.promise() + } + }.start() + .then(function(e) { + setTimeout(function() { + $('[aria-showingpicker="false"]') + .attr("tabindex", e) + }, 400) + }(0)) + }, + createPicker: function() { + if(0 === $(".wickedpicker") + .length) { + var e = '

' + this.options.title + '

', $("body") + .append(e), this.attachKeyboardEvents() + } + }, + showHideMeridiemControl: function() { + !1 === this.options.twentyFour ? $(this.meridiemElem) + .parent() + .show() : $(this.meridiemElem) + .parent() + .hide() + }, + showHideSecondsControl: function() { + this.options.showSeconds ? $(this.secondsElem) + .parent() + .show() : $(this.secondsElem) + .parent() + .hide() + }, + attach: function(e) { + var t = this; + this.options.clearable && t.makePickerInputClearable(e), $(e) + .attr("tabindex", 0), $(e) + .on("click focus", function(e) { + $(t.timepicker) + .is(":hidden") && (t.showPicker($(this)), window.lastTimePickerControl = $(this), $(t.hoursElem) + .focus()) + }); + var i = function(e) { + if($(t.timepicker) + .is(":visible")) { + if($(e.target) + .is(t.close)) t.hideTimepicker(window.lastTimePickerControl); + else if($(e.target) + .closest(t.timepicker) + .length || $(e.target) + .closest($(".hasWickedpicker")) + .length) e.stopPropagation(); + else { + if("function" == typeof t.options.onClickOutside ? t.options.onClickOutside() : console.warn("Type of onClickOutside must be a function"), !t.options.closeOnClickOutside) return; + t.hideTimepicker(window.lastTimePickerControl) + } + window.lastTimePickerControl = null + } + }; + $(document) + .off("click", i) + .on("click", i) + }, + attachKeyboardEvents: function() { + $(document) + .on("keydown", $.proxy(function(e) { + switch(e.keyCode) { + case 9: + "hasWickedpicker" !== e.target.className && $(this.close) + .trigger("click"); + break; + case 27: + $(this.close) + .trigger("click"); + break; + case 37: + e.target.className !== this.hoursElem[0].className ? $(e.target) + .parent() + .prevAll("li") + .not(this.separator.selector) + .first() + .children()[1].focus() : $(e.target) + .parent() + .siblings(":last") + .children()[1].focus(); + break; + case 39: + e.target.className !== this.meridiemElem[0].className ? $(e.target) + .parent() + .nextAll("li") + .not(this.separator.selector) + .first() + .children()[1].focus() : $(e.target) + .parent() + .siblings(":first") + .children()[1].focus(); + break; + case 38: + $(":focus") + .prev() + .trigger("click"); + break; + case 40: + $(":focus") + .next() + .trigger("click") + } + }, this)) + }, + setTime: function(e) { + this.setHours(e.hours), this.setMinutes(e.minutes), this.setMeridiem(e.meridiem), this.options.showSeconds && this.setSeconds(e.seconds) + }, + getTime: function() { + return [this.formatTime(this.getHours(), this.getMinutes(), this.getMeridiem(), this.getSeconds())] + }, + setHours: function(e) { + var t = new Date; + t.setHours(e); + var i = this.parseHours(t.getHours()); + this.hoursElem.text(i), this.selectedHour = i + }, + getHours: function() { + var e = new Date; + return e.setHours(this.hoursElem.text()), e.getHours() + }, + parseHours: function(e) { + return !1 === this.options.twentyFour ? (e + 11) % 12 + 1 : e < 10 ? "0" + e : e + }, + setMinutes: function(e) { + var t = new Date; + t.setMinutes(e); + var i = t.getMinutes(), + s = this.parseSecMin(i); + this.minutesElem.text(s), this.selectedMin = s + }, + getMinutes: function() { + var e = new Date; + return e.setMinutes(this.minutesElem.text()), e.getMinutes() + }, + parseSecMin: function(e) { + return (e < 10 ? "0" : "") + e + }, + setMeridiem: function(e) { + var t = ""; + t = void 0 === e ? "PM" === this.getMeridiem() ? "AM" : "PM" : e, this.meridiemElem.text(t), this.selectedMeridiem = t + }, + getMeridiem: function() { + return this.meridiemElem.text() + }, + setSeconds: function(e) { + var t = new Date; + t.setSeconds(e); + var i = t.getSeconds(), + s = this.parseSecMin(i); + this.secondsElem.text(s), this.selectedSec = s + }, + getSeconds: function() { + var e = new Date; + return e.setSeconds(this.secondsElem.text()), e.getSeconds() + }, + parseMeridiem: function(e) { + return e > 11 ? "PM" : "AM" + }, + handleTimeAdjustments: function(e) { + var t = 0; + $(this.up) + .add(this.down) + .off("mousedown click touchstart") + .on("mousedown click", { + Wickedpicker: this, + input: e + }, function(e) { + if(1 != e.which) return !1; + var i = this.className.indexOf("up") > -1 ? "+" : "-", + s = e.data; + "mousedown" == e.type ? t = setInterval($.proxy(function(e) { + e.Wickedpicker.changeValue(i, e.input, this) + }, this, { + Wickedpicker: s.Wickedpicker, + input: s.input + }), 200) : s.Wickedpicker.changeValue(i, s.input, this) + }) + .bind("mouseup touchend", function() { + clearInterval(t) + }) + }, + changeValue: function(operator, input, clicked) { + var target = "+" === operator ? clicked.nextSibling : clicked.previousSibling, + targetClass = $(target) + .attr("class"); + targetClass.endsWith("hours") ? this.setHours(eval(this.getHours() + operator + 1)) : targetClass.endsWith("minutes") ? this.setMinutes(eval(this.getMinutes() + operator + this.options.minutesInterval)) : targetClass.endsWith("seconds") ? this.setSeconds(eval(this.getSeconds() + operator + this.options.secondsInterval)) : this.setMeridiem(), this.setText(input) + }, + setText: function(e) { + $(e) + .val(this.formatTime(this.selectedHour, this.selectedMin, this.selectedMeridiem, this.selectedSec)) + .change() + }, + getText: function(e) { + return $(e) + .val() + }, + formatTime: function(e, t, i, s) { + var o = e + this.options.timeSeparator + t; + return this.options.showSeconds && (o += this.options.timeSeparator + s), !1 === this.options.twentyFour && (o += " " + i), o + }, + setHoverState: function() { + var e = this; + isMobile() || $(this.up) + .add(this.down) + .add(this.close) + .hover(function() { + $(this) + .toggleClass(e.options.hoverState) + }) + }, + makePickerInputClearable: function(e) { + $(e) + .wrap('
') + .after("×"), $("[data-clear-picker]") + .on("click", function(e) { + $(this) + .siblings(".hasWickedpicker") + .val("") + }) + }, + timeArrayFromString: function(e) { + if(e.length) { + var t = e.split(":"); + return t[2] = t.length < 3 ? "00" : t[2], t + } + return !1 + }, + _time: function() { + var e = $(this.element) + .val(); + return "" === e ? this.formatTime(this.selectedHour, this.selectedMin, this.selectedMeridiem, this.selectedSec) : e + }, + _hide: function() { + this.hideTimepicker(this.element) + } + }), $.fn[pluginName] = function(e, t) { + return $.isFunction(Wickedpicker.prototype["_" + e]) ? $(this) + .hasClass("hasWickedpicker") ? void 0 !== t ? $.data($(this)[t], "plugin_" + pluginName)["_" + e]() : $.data($(this)[0], "plugin_" + pluginName)["_" + e]() : void 0 : this.each(function() { + $.data(this, "plugin_" + pluginName) || $.data(this, "plugin_" + pluginName, new Wickedpicker(this, e)) + }) + } +}(jQuery, window, document); \ No newline at end of file diff --git a/multi_sms_gateway/README.rst b/multi_sms_gateway/README.rst new file mode 100644 index 000000000..8fb2353c8 --- /dev/null +++ b/multi_sms_gateway/README.rst @@ -0,0 +1,53 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Multiple SMS Gateway Integration +================================ +* Module for sending SMS through different SMS gateways. + +Installation +============ +- www.odoo.com/documentation/15.0/setup/install.html +- Install all external dependencies like 'telesign', 'twilio', 'vonage'. +- 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 +------- +General Public License, Version 3 (AGPL v3). +(https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +* Developer: (V15) Subina P, 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: ``__ diff --git a/multi_sms_gateway/__init__.py b/multi_sms_gateway/__init__.py new file mode 100644 index 000000000..1a05587c9 --- /dev/null +++ b/multi_sms_gateway/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Subina P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +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..1a27d8eba --- /dev/null +++ b/multi_sms_gateway/__manifest__.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Subina P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + 'name': 'Multiple SMS Gateway Integration', + 'version': '15.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 + Twilio, Vonage, TeleSign""", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'depends': ['base', 'contacts'], + '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' + ], + 'external_dependencies': { + 'python': ['telesign', 'twilio', 'vonage']}, + 'images': ['static/description/banner.jpg'], + 'license': 'AGPL-3', + '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..2a3c4377f --- /dev/null +++ b/multi_sms_gateway/data/sms_gateway_data.xml @@ -0,0 +1,13 @@ + + + + + twilio + + + vonage + + + telesign + + diff --git a/multi_sms_gateway/doc/RELEASE_NOTES.md b/multi_sms_gateway/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..a0f3b5e4e --- /dev/null +++ b/multi_sms_gateway/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 31.01.2024 +#### Version 15.0.1.0.0 +#### ADD + +- Initial commit for Multiple SMS Gateway Integration diff --git a/multi_sms_gateway/models/__init__.py b/multi_sms_gateway/models/__init__.py new file mode 100644 index 000000000..14d6b6f69 --- /dev/null +++ b/multi_sms_gateway/models/__init__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Subina P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +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..4b0e46eac --- /dev/null +++ b/multi_sms_gateway/models/res_partner.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Subina P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +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..5908e1161 --- /dev/null +++ b/multi_sms_gateway/models/sms_connection_params.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Subina P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +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..72bb3adbe --- /dev/null +++ b/multi_sms_gateway/models/sms_gateway.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Subina P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +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..d785938cd --- /dev/null +++ b/multi_sms_gateway/models/sms_gateway_config.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Subina P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +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.') + 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') diff --git a/multi_sms_gateway/models/sms_history.py b/multi_sms_gateway/models/sms_history.py new file mode 100644 index 000000000..82d137c2c --- /dev/null +++ b/multi_sms_gateway/models/sms_history.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Subina P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +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..804b88bee --- /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 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..53f32f63e --- /dev/null +++ b/multi_sms_gateway/security/multi_sms_gateway_groups.xml @@ -0,0 +1,15 @@ + + + + + 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 + + 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..127ccf286 --- /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)] + + 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..f0c977511 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..9eea75430 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..4fbe85ac1 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.png b/multi_sms_gateway/static/description/assets/modules/4.png new file mode 100644 index 000000000..f9e4f9035 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/modules/4.png 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..3664700f5 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..cf52775ae 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..e775ed36f 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..d119a5065 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..fc526230c 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..0a62cce7a 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..44c6c7993 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..e4c3c527b 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..565ab58db 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..82952d223 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..a923b4e0d Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/hero.gif differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/message bird.png b/multi_sms_gateway/static/description/assets/screenshots/message bird.png new file mode 100644 index 000000000..261ff079b Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/message bird.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/tel.png b/multi_sms_gateway/static/description/assets/screenshots/tel.png new file mode 100644 index 000000000..d09929329 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/tel.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/telesign1.png b/multi_sms_gateway/static/description/assets/screenshots/telesign1.png new file mode 100644 index 000000000..3ff06ce6f Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/telesign1.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/telesign2.png b/multi_sms_gateway/static/description/assets/screenshots/telesign2.png new file mode 100644 index 000000000..0825be2af Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/telesign2.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/telesign3.png b/multi_sms_gateway/static/description/assets/screenshots/telesign3.png new file mode 100644 index 000000000..0afd667bf Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/telesign3.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/telesign4.png b/multi_sms_gateway/static/description/assets/screenshots/telesign4.png new file mode 100644 index 000000000..86a50f96d Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/telesign4.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/telesign5.png b/multi_sms_gateway/static/description/assets/screenshots/telesign5.png new file mode 100644 index 000000000..cd9007ef0 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/telesign5.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/twilio1.png b/multi_sms_gateway/static/description/assets/screenshots/twilio1.png new file mode 100644 index 000000000..c3ff2b570 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/twilio1.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/twilio2.png b/multi_sms_gateway/static/description/assets/screenshots/twilio2.png new file mode 100644 index 000000000..2ff7b0314 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/twilio2.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/twilio3.png b/multi_sms_gateway/static/description/assets/screenshots/twilio3.png new file mode 100644 index 000000000..2523b1fb7 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/twilio3.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/twilio4.png b/multi_sms_gateway/static/description/assets/screenshots/twilio4.png new file mode 100644 index 000000000..3e761e475 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/twilio4.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/twilio55.png b/multi_sms_gateway/static/description/assets/screenshots/twilio55.png new file mode 100644 index 000000000..2b6ee0019 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/twilio55.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/twilio66.png b/multi_sms_gateway/static/description/assets/screenshots/twilio66.png new file mode 100644 index 000000000..e7d6886f6 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/twilio66.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/von.png b/multi_sms_gateway/static/description/assets/screenshots/von.png new file mode 100644 index 000000000..53042ce59 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/von.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/vonage10.png b/multi_sms_gateway/static/description/assets/screenshots/vonage10.png new file mode 100644 index 000000000..bd1470e2f Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/vonage10.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/vonage1000.png b/multi_sms_gateway/static/description/assets/screenshots/vonage1000.png new file mode 100644 index 000000000..745eaa2b7 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/vonage1000.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/vonage11.png b/multi_sms_gateway/static/description/assets/screenshots/vonage11.png new file mode 100644 index 000000000..03425861f Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/vonage11.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/vonage20.png b/multi_sms_gateway/static/description/assets/screenshots/vonage20.png new file mode 100644 index 000000000..371e96743 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/vonage20.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/vonage2000.png b/multi_sms_gateway/static/description/assets/screenshots/vonage2000.png new file mode 100644 index 000000000..2867f81b8 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/vonage2000.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/vonage22.png b/multi_sms_gateway/static/description/assets/screenshots/vonage22.png new file mode 100644 index 000000000..ead6b73f8 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/vonage22.png differ diff --git a/multi_sms_gateway/static/description/assets/screenshots/vonage300.png b/multi_sms_gateway/static/description/assets/screenshots/vonage300.png new file mode 100644 index 000000000..9120137e5 Binary files /dev/null and b/multi_sms_gateway/static/description/assets/screenshots/vonage300.png differ diff --git a/multi_sms_gateway/static/description/banner.jpg b/multi_sms_gateway/static/description/banner.jpg new file mode 100644 index 000000000..5e242be58 Binary files /dev/null and b/multi_sms_gateway/static/description/banner.jpg 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..809f6698b 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..ba7f92653 --- /dev/null +++ b/multi_sms_gateway/static/description/index.html @@ -0,0 +1,799 @@ +
+ +
+ +
+
+ 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 + Twilio, Vonage, TeleSign. +
+
+ + + +
+
+ +
+

+ Features +

+
+
+
+
+ +
+ + Send SMS through different Gateway. + + +
+
+
+ +
+ + Can see all the SMS history send through the Gateway + + +
+
+
+ +
+ + Sms gateways used in this module are Twilio, vonage, + Telesign. + + +
+
+
+
+ + + +
+
+ +
+

+ 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 for the gateway vonage can be accessed by + creating account in each platform we get the credentials for + different gateways. + To create Account in Vonage platform + + Click Here + +

+

+ +
+
+

+ Click on Try it for free +

+

+ +
+
+

+ Fill up the form and create free account. +

+

+ +
+
+

+ Login with the details +

+

+ +
+
+

+ Then fetch the credentials from the vonage dashboard. +

+

+ +
+
+

+ The credential for the gateway Twilio can be accessed by + creating account in Twilio platform. + To create Account in Twilio platform + + Click Here + + .Click start for free button +

+

+ +
+
+

+ Then Sign up on twilio platform +

+

+ +
+
+

+ There will be twofactor authentication after signup. +

+

+ +
+
+

+ After fill a form on which we have to mention the product + details we want to get from twilio platform. +

+

+ +
+
+

+ We get the credentials after that, And we can generate a twilio + phone number by clicking on Get a phone number button +

+

+ +
+
+

+ Hence, we have all the credentials needed +

+

+ +
+
+

+ Go to Telesign sms api platform +

+

+ +
+
+

+ In Developer section we get the API key by clicking try for free + button +

+

+ +
+
+

+ It leads to create free account form +

+

+ +
+
+

+ After creation, we get a verification code +

+

+ +
+
+

+ After verification, It will lead to the credentials page +

+

+ +
+ +
+

+ 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..5a0a8426d --- /dev/null +++ b/multi_sms_gateway/views/multi_sms_gateway_menus.xml @@ -0,0 +1,16 @@ + + + + + + + + + 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..403cd3f3e --- /dev/null +++ b/multi_sms_gateway/views/res_partner_views.xml @@ -0,0 +1,13 @@ + + + + + + Send SMS + + + form,list + code + action = records.send_sms() + + 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..dcdd744d2 --- /dev/null +++ b/multi_sms_gateway/views/sms_gateway_config_views.xml @@ -0,0 +1,89 @@ + + + + + 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 +

+
+
+
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..cc0fd19e7 --- /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. +

+
+
+
diff --git a/multi_sms_gateway/wizard/__init__.py b/multi_sms_gateway/wizard/__init__.py new file mode 100644 index 000000000..02f06b4b4 --- /dev/null +++ b/multi_sms_gateway/wizard/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Subina P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +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..f235468ce --- /dev/null +++ b/multi_sms_gateway/wizard/send_sms.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Subina P (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +import vonage +from telesign.messaging import MessagingClient +from twilio.rest import Client +from odoo import fields, models + + +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') 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..02b7d7055 --- /dev/null +++ b/multi_sms_gateway/wizard/send_sms_views.xml @@ -0,0 +1,29 @@ + + + + + send.sms.view.form + send.sms + + +
+ + + + + + + + + + + + +
+
+
+