# -*- coding: utf-8 -*- from odoo import api, fields, models import urllib2 import urllib import ssl import unicodedata from odoo.exceptions import RedirectWarning, UserError, ValidationError from odoo import models, fields, api, _ from xml.dom.minidom import Node import xml.dom.minidom from odoo import tools import re from datetime import datetime # main mako-like expression pattern EXPRESSION_PATTERN = re.compile('(\$\{.+?\})') ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE class SMS(models.Model): _name = 'sms.sms' _description = "SMS by CVMovel" number = fields.Char(string='Phone') number_t = fields.Char(string='Phone') message = fields.Text(string='Message', required=True) template = fields.Many2one('mail.template', string='Tempate SMS') phonecall_id = fields.Many2one('lams.phonecall', string='Phone Call ID', readonly=True) datetime= fields.Datetime(string='Assigned', readonly=True, index=True) state= fields.Char(string='State', readonly=True) @api.model def default_get(self, fields): res = super(SMS, self).default_get(fields) move = self.env['lams.phonecall'].browse(self._context.get('active_ids')) number = [] n = [] for i in move: if i.attendee_mobile: number.append(str(i.attendee_mobile)) if 'number' in fields: res.update({'number': number}) #print("NUMBER DEFAULT GET: ",number) return res @api.onchange('template') def onchange_temp(self): if self.template: self.number_t = self.template.number self.message = self.template.content @api.multi def sendSMS(self): self.action_sendSMS(self.number, self.message) return self.env['warning'].info(title='Sucesso', message="Os SMS foram enviados com sucesso!!!") @api.one def action_sendSMS(self, number, message): msg=[] if not number: # self.template.state = 'notsend' raise ValidationError(_('No Mobile\'s information for send SMS')) active_ids = self._context.get('active_ids') #print("ACTIVE IDS: "+str(active_ids)) part_obj = self.env['lams.phonecall'] for res_id in part_obj.browse(active_ids): self.Send(res_id.attendee_mobile,message,res_id.date,res_id.id) msg.append({"number":res_id.attendee_mobile,"message":message}) if msg: print("RETURN SUCESS") #print("MESSAGE: "+str(msg)) return True return False @api.one def Send(self,number,message,date,phonecall_id): #print("MESSAGE FIRST LOG: "+message) #print("NUMBER FIRST LOG: "+number) phonecall = self.env['lams.phonecall'].browse(phonecall_id) nip = phonecall.project_id.nip message = message + ' NIP: ' + nip original_message = message message = unicodedata.normalize('NFKD', message).encode('ASCII', 'ignore').decode('ASCII') if number[0] == "+": number = urllib.urlencode({'number': number}) number1 = number.split('=') number = number1[1] number = number.replace(' ', '') elif number[0] == "0": raise ValidationError(_( 'The phone number must be formated like this: + followed by country operator followed by the numbers without characters. e.g. : +3265698745')) message = message.decode('UTF-8') message = urllib.urlencode({'message': message}) #print("MESSAGE LOG: "+message) msg = message.split('=') message = msg[1] sender = unicode('Cadastro Predial') sender = unicodedata.normalize('NFKD', sender).encode('ASCII', 'ignore').decode('ASCII') sender = sender.decode('UTF-8') sender = urllib.urlencode({'sender': sender}) #print("SENDER LOG: "+sender) #url="https://cvmensagens.cvmovel.cv/GwHTTPin/sendtext?UID=3046&PW=EPEhUe9BNhuR7j%2FBBl4U0g%3D%3D&O="+sender+"&M="+message+"&N="+number url="https://cvmensagens.cvmovel.cv/GwHTTPin/sendtext?UID=3046&PW=EPEhUe9BNhuR7j%2FBBl4U0g%3D%3D&O=Cadastro&M="+message+"&N="+number the_page ="999999" try: handle =urllib2.urlopen(url, context=ctx) #print("HANDLE LOG: " + str(handle)) the_page = handle.read() except: raise ValidationError(_('The SMS Service is Down')) str_the_page = str(the_page) str_number = str(number) #print("THE PAGE LOG: " + str(the_page)) #print("NUMBER: " + str(number)) codes = str_the_page.split(",") numbers = number.split(",") success_numbers=[] unsuccess_numbers=[] for i,num in enumerate(codes): if num == '01': success_numbers.append(numbers[i]) elif num == '92': unsuccess_numbers.append(numbers[i]) #print "SUCCESS NUMBERS:::: ",success_numbers #print "UNSUCCESS NUMBERS:::: ",unsuccess_numbers final_message='' if len(success_numbers) > 0: success="Com sucesso: " + ",".join(str(x) for x in success_numbers) + "
" final_message = final_message + success if len(unsuccess_numbers) > 0: unsuccess="Sem sucesso: " + ",".join(str(x) for x in unsuccess_numbers) + "
" final_message = final_message + unsuccess final_message = final_message + original_message if the_page: self.history(str(the_page)) msg_record_name=str(date) self.env['mail.message'].create({'body': final_message, 'record_name': msg_record_name, 'date': datetime.now(),'model':'lams.phonecall','message_type':'comment','website_published':True,'res_id':phonecall_id,'subtype_id':2}) phonecall.write({'sms_sent':True}) @api.one def history(self, result): active_ids = self._context.get('active_ids') #print "ACTIVE IDS::::::::::::",active_ids part_obj = self.env['lams.phonecall'] msg_obj = self.env['sms.sms'] part=part_obj.browse(active_ids) #print("PART OBJECT: "+str(part)) sms = [] for res_id in part: msg = msg_obj.create({'number': res_id.attendee_mobile, 'message': self.message, 'template': self.template and self.template.id or False, 'phonecall_id': res_id.id, 'state': result, 'datetime': datetime.now()}) sms.append(msg) msg_body=self.message msg_res_id=res_id.id #print "ID PHONECALL::::::::::::",res_id.id #print "PHONECALL IDS::::::::::::",phonecalls_ids #print "VAI CRIAR A MENSAGEM::::::::::::::::::::" print ("SMS SENT: "+str(sms)) def getText(self, nodelist): rc = [] for node in nodelist: if node.nodeType == node.TEXT_NODE: rc.append(node.data) return ''.join(rc)