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

134 lines
5.6 KiB

# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Raveena V (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 <http://www.gnu.org/licenses/>.
#
#############################################################################
from __future__ import print_function
import clicksend_client
import logging
from ast import literal_eval
from clicksend_client import SmsMessage
from odoo import fields, models, _
from odoo.exceptions import UserError
_logger = logging.getLogger(__name__)
class SendSms(models.TransientModel):
"""This Transient model will read all the user inputs and sends sms"""
_name = 'send.sms'
_description = "Send SMS for a Partner ,Group or Anyone"
number = fields.Char(string='Number', related='partner_id.phone',
readonly=False,
store=True, help="Phone number of the Partner")
name = fields.Char(string="Name", help="Name of the Receiver")
partner_id = fields.Many2one('res.partner', string="Partner",
help="Receiver name")
message = fields.Text(string='Message', help="Content of the SMS Message")
group_id = fields.Many2one('sms.group', string='Group',
help="Choose a group to send the sms")
partner_ids = fields.Many2many('res.partner', string="Partners",
help="The partners to send SMS",
related='group_id.partner_ids')
def action_send_sms(self):
"""Send an SMS message using the ClickSend API."""
username = self.env['ir.config_parameter'].sudo().get_param(
'clicksend_sms_odoo.username')
password = self.env['ir.config_parameter'].sudo().get_param(
'clicksend_sms_odoo.api_key')
if not username or not password:
raise UserError(
_("Please configure your ClickSend credentials"))
configuration = clicksend_client.Configuration()
configuration.username = self.env[
'ir.config_parameter'].sudo().get_param(
'clicksend_sms_odoo.username')
configuration.password = self.env[
'ir.config_parameter'].sudo().get_param(
'clicksend_sms_odoo.api_key')
num_list = []
name_list = []
number = False
api_instance = clicksend_client.SMSApi(
clicksend_client.ApiClient(configuration))
if self.partner_id:
number = self.partner_id.phone
elif self.name and self.number:
number = self.number
elif self.group_id:
partner_ids = self.group_id.partner_ids
num_list = partner_ids.mapped('phone')
name_list = partner_ids.mapped('name')
if number:
sms_message = SmsMessage(
source="php",
body=self.message,
to=number,
schedule=1436874701)
sms_messages = clicksend_client.SmsMessageCollection(
messages=[sms_message])
try:
api_response = api_instance.sms_send_post(sms_messages)
response = api_response.replace("\'", "\"")
response = literal_eval(response)
if response.get('response_code') == 'SUCCESS':
state = "sent"
else:
state = "canceled"
name = self.name if self.name else (
self.partner_id.name if self.partner_id else "")
self.env['sms.history'].create({
'name': name,
'number': number,
'state': state,
'message': self.message
})
except Exception as e:
_logger.warning(
"Exception when calling SMSApi->sms_send_post: %s\n" % e)
elif num_list:
for num, name in zip(num_list, name_list):
sms_message = SmsMessage(
source="php",
body=self.message,
to=num,
schedule=1436874701
)
sms_messages = clicksend_client.SmsMessageCollection(
messages=[sms_message])
try:
api_response = api_instance.sms_send_post(sms_messages)
response = api_response.replace("\'", "\"")
response = literal_eval(response)
if response.get('response_code') == 'SUCCESS':
state = "sent"
else:
state = "canceled"
self.env['sms.history'].create({
'name': name,
'number': num,
'state': state,
'message': self.message
})
except Exception as e:
_logger.warning(
"Exception when calling SMSApi->sms_send_post: %s\n"
% e)