incidencias.py 13.1 KB
# -*- coding: utf-8 -*-
from odoo.exceptions import UserError
from odoo import models, fields, api
from datetime import datetime
import requests, json
headers = {'Content-Type': 'application/json'}

class hgt_incidencias(models.Model):
    _name = 'hgt.incidencias'
    _order = "id desc"

    in_cerrada = fields.Boolean(
       string=u'Cerrada', 
       default=False,
    )

    name = fields.Char(
        string=u'Nombre',
    )

    responsabilidad = fields.Selection(
        string=u'Responsabilidad',
        selection=[('pro', 'Propia'), ('ter', 'Tercero'), ('cli', 'Cliente'), ('cat', 'Catástrofe')]
    )
    
    responsable = fields.Many2one('res.users', string='Responsable', index=True, default=lambda self: self.env.user)
    
    reporte = fields.Many2one(
        string='Reporte',
        comodel_name='hgt.reporte',
        ondelete='restrict',
    )

    cliente = fields.Many2one(
        string='Cliente',
        comodel_name='hgt.instituciones',
    )

    url_sis_cliente = fields.Char(string='URL sistema del cliente')
    

    descripcion = fields.Html(
        string=u'Descripción',
    )

    url = fields.Char(string='Url de ticketera')

    numero = fields.Char(string='Numero de ticket')

    _sql_constraints = [('id_ost_uniq', 'unique (id_ost)', 'Id Ticket must be unique.')]

    id_ost = fields.Integer(string='Id osticket')

    ost_cliente = fields.Char(string='Ost cliente')

    ost_asunto = fields.Char(string='Ost asunto')

    ost_mail = fields.Char(string='Ost mail')

    ost_telefeno = fields.Char(string='Ost telefono')

    ost_mensaje = fields.Text(string='Mensajes')

    fecha_creacion = fields.Date(
        string=u'Fecha de creación',
        default=fields.Date.context_today,
    )
    
    estado = fields.Many2one(
        string='Estados',
        comodel_name='hgt.estados',
        ondelete='restrict',
    )

    tarea = fields.Many2one(
        string='Tarea',
        comodel_name='hgt.tarea',
        ondelete='restrict',
    )

    tareas = fields.Many2many(
    comodel_name='hgt.tarea',
    relation="tareas_incidente",
    string='Tareas derivadas',
    )
    

    proyecto = fields.Many2one(
        string='Proyecto',
        comodel_name='hgt.proyecto',
        ondelete='restrict',
    )

    accion = fields.Many2one(
        string='Acción',
        comodel_name='hgt.acciones',
        ondelete='restrict',
    )

    in_fecha = fields.Datetime(
        string = 'Fecha de creación',
        default=datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    )

    texto_descripcion = fields.Html(string='Texto descripcion de la tarea')

    asignador = fields.Many2one(comodel_name='res.users', string='Ejecuta')

    abrir = fields.Boolean(string='Abrir al crear', default=False)

    tiempo_carga = fields.Integer(string='Tiempo utilizado', default=30)

    in_numero = fields.Char(string='Numero de ticket')

    in_historico_mensajes = fields.Text(string='Mensajes')

    in_texto_mensaje = fields.Char(string='Mensaje')

    in_in_interno = fields.Boolean(
        string="Nota Interna?",
        default=False
    )

    in_mensajes = fields.Many2many('hgt.incidencias_mensaje', string=u'Mensajes',
        relation='hgt_incidencia_mensaje_rel',
        column2='hgt_incidencias_id',
        column1='hgt_incidencias_mensaje_id')

    in_temas = fields.Many2many('hgt.incidencias_temas', string=u'Temas',
        relation='hgt_incidencia_temas_rel',
        column2='hgt_incidencias_id',
        column1='hgt_incidencias_temas_id')

    in_id_si = fields.Char(
        string=u'Id Soporte Incidencia',
    )
    def enviarMensaje_in(self):
        if (self.in_texto_mensaje == False) or (self.in_texto_mensaje == ""):
            raise UserError("No se puede enviar un mensaje vacío")
        
        datos = {'in_mensaje': self.in_texto_mensaje,
        'in_interno': False,
        }
        nvo_mensaje = self.env['hgt.incidencias_mensaje'].create(datos)
        lista_msj = []
        for msj in self.in_mensajes:
            lista_msj.append(msj.id)
        lista_msj.append(nvo_mensaje.id)
        self.in_mensajes = lista_msj
        self.in_texto_mensaje = False
        self.registrar_mensaje(nvo_mensaje)

        if (self.in_in_interno == False):
            self.enviar_mensaje(nvo_mensaje) 

    def enviar_mensaje(self, mens):
        #funcion para mandar el mensaje al modulo de incidencias
        datos = {
            'params': { 'token':"""34567uykjhgfd4567iukhjgfe43567ujhgfder456yhgfde""",
                        'si_mensaje': mens.in_mensaje,
                        'si_creador_nombre': mens.in_creador.name,
                        'si_mens_fecha': mens.in_mens_fecha,
                        'id_incide_original': self.in_id_si,
                        'si_fecha': self.in_fecha,
                        'name': self.name,        
            }
        }

        #URL = self.env['ir.config_parameter'].sudo().search([('key','=','web.base.url')])
        #URL = str(URL.value)

        URL = self.url_sis_cliente

        datos_json = json.dumps(datos)
        f = requests.post(URL+'/soporteMensaje', data=datos_json, headers=headers)
        frespuesta = f.json()
        #print(frespuesta)


    def registrar_mensaje(self, mens):
        text = mens.in_mensaje
        envia = mens.in_creador_nombre
        #envia = envia.name
        fecha = mens.in_mens_fecha
        text_orig = self.in_historico_mensajes
        if text_orig:
            texto_nuevo = """\n{} - {} \n\n{}\n\n ______________________________________________________\n""".format(fecha,envia,text)
            Texto = """{}\n{}""".format(texto_nuevo,text_orig)
            self.in_historico_mensajes = Texto
            return(True)
        else:
            texto_nuevo = """\n{} - {} \n\n{}\n\n ______________________________________________________\n""".format(fecha,envia,text)
            Texto = """{}""".format(texto_nuevo)
            self.in_historico_mensajes = Texto
            return(True)

    def splitInci(self):
        #funcion para insertar incidencia activa en popup y abrirlo
        active_inc = self.id
        datos = {
            'split_incidencia': active_inc,
        }
        wizard = self.env['hgt.incidencias_temas_split'].create(datos)
        return {
            'type': 'ir.actions.act_window',
            'name': 'Dividir incidencias por temas',
            'view_type': 'form',
            'view_mode': 'form',
            'res_model': 'hgt.incidencias_temas_split',
            'res_id': wizard.id,
            'target': 'new',
        }
    
    def cerrarIncidencia(self):
        if (self.in_cerrada == True):
            datos = {
                'params': {
                    'token': """sdfghjkjhgfds2568uyhgfds657875645324ghgjhfgdfsgdfghjk65""",
                    'si_cerrada': True,
                    'id_incide_original': self.in_id_si,
                }
            }
            #URL = self.env['ir.config_parameter'].sudo().search([('key','=','web.base.url')])
            #URL = str(URL.value)
            URL = self.url_sis_cliente
            datos_json = json.dumps(datos)
            f = requests.post(URL+'/soporteIncidencias/crear', data=datos_json, headers=headers)
            frespuesta = f.json()
          

    #desde aca creamos incidencias a soporte solo desde split 
    def enviarIncidencia(self):
        #funcion para la creacion de incidencias en modulo soporte
        datos = {
            'params': { 'token':"""sdfghjkjhgfds2568uyhgfds657875645324ghgjhfgdfsgdfghjk65""",
                        'si_fecha': self.in_fecha,
                        'name': self.name,  
                        'descripcion': self.descripcion,
                        'id_original': self.in_id_si, 
                        'si_cerrada': self.in_cerrada,   
                        'responsabilidad': self.responsabilidad,     
            }
        }
        #URL = self.env['ir.config_parameter'].sudo().search([('key','=','web.base.url')])
        #URL = str(URL.value)
        URL = self.url_sis_cliente
        datos_json = json.dumps(datos)
        f = requests.post(URL+'/soporteIncidencias/crear', data=datos_json, headers=headers)
        frespuesta = f.json()
        if frespuesta['result']:
            self.in_id_si = frespuesta['result'] 
        else:
            raise UserError ("Hubo un error en la creación de las nuevas incidencias")

    def generar_tareas(self):
        #import ipdb; ipdb.set_trace()
        if (len(self.asignador) == 0):
            raise UserError("""Esta creando una tarea nula.
            La tarea tiene que tener ejecutante.""")
        datos = {'resumen':'Incidencia {} OST {} {}'.format(self.id, self.numero, self.ost_asunto),
            'descripcion': self.texto_descripcion,
            'ejecutor': self.asignador.id,
            'minutos_reales': self.tiempo_carga}
        nueva_tar = self.env['hgt.tarea'].create(datos)
        self.asignador = False
        self.texto_descripcion = False
        self.tareas = [(4,nueva_tar.id,0)]
        self.tiempo_carga = 15
        if self.abrir == True:
            return {
            'type': 'ir.actions.act_window',
            'res_model': 'hgt.tarea',
            'views': ((False, 'form'), (False, 'tree')),
            'res_id': nueva_tar.id,
            'domain': [('field', '=', 'value')],
            }

    @api.onchange('proyecto') 
    def onchange_campo(self):
        result = {}
        result['domain'] = []
        if self.proyecto:
            ids = self.proyecto.acciones.ids
            result['domain'] = {'accion' : [('id', 'in', ids)]}
            return result 

    @api.multi
    def write(self, vals):   
        datos={}     
        if('responsabilidad' in vals) and ('estado' in vals):
            state = self.env['hgt.estados'].search([('id', '=', vals["estado"])])
            estado_string = state.name 
            datos = {
                    'params': { 
                        'token':"""sdfghjkjhgfds2568uyhgfds657875645324ghgjhfgdfsgdfghjk65""",
                        'estado': estado_string,
                        'responsabilidad': vals['responsabilidad'],
                        'modificacion': True, 
                        'id_original': self.in_id_si, 
                    }
                }
        else:
            if ('responsabilidad' in vals):
                datos = {
                    'params': { 
                        'token':"""sdfghjkjhgfds2568uyhgfds657875645324ghgjhfgdfsgdfghjk65""",
                        'responsabilidad': vals['responsabilidad'],
                        'modificacion': True, 
                        'id_original': self.in_id_si, 
                    }
                }
            if ('estado' in vals):
                state = self.env['hgt.estados'].search([('id', '=', vals["estado"])])
                estado_string = state.name 
                datos = {
                    'params': { 
                        'token':"""sdfghjkjhgfds2568uyhgfds657875645324ghgjhfgdfsgdfghjk65""",
                        'estado': estado_string,
                        'modificacion': True, 
                        'id_original': self.in_id_si, 
                    }
                }
        URL = self.url_sis_cliente
        datos_json = json.dumps(datos)
        try:
            f = requests.post(URL+'/soporteIncidencias/crear', data=datos_json, headers=headers)
            frespuesta = f.json()
        except:
            pass
        return super(hgt_incidencias, self).write(vals)

    @api.model
    def create(self, vals):
        dom =[]
        config = self.env['hgt.coniguracion_incidencias'].search([["habilitado", "=", True]])
        try:
            datos = {'resumen':'Incidencia OST {} {}'.format(vals['numero'], vals['ost_asunto']),
                'descripcion': vals['descripcion'],
                'ejecutor':config.dispacher.id,
                'origen':"Incidentes",}
            if config.url_ost == True:
                datos['notitas'] = vals['url']
            if (vals['numero'] == False) or (vals['numero'] == ""):
                raise()
        except:
            num = self.search_count([]) + 1
            #num = 1
            datos = {'resumen':'Incidencia local {} '.format(num),'origen':"Incidentes",'ejecutor':config.dispacher.id}
            vals['numero'] = "INC {}".format(num)
        print(datos)
        nueva_tar = self.env['hgt.tarea'].create(datos)  
        try:
            if vals['accion']:
                accion = vals['accion']
                acc = self.env['hgt.acciones'].search([('id','=',accion)])
                acc.tareas = [(4,nueva_tar.id)]
        except:
            pass
        vals['tarea'] = nueva_tar.id
        print(vals)
        result = super(hgt_incidencias, self).create(vals)
        return result


    def mensajes_ost(self, val):
        #print(val[0])
        dom = [["numero", "=", val[0]]]
        ins =  self.env['hgt.incidencias'].search(dom, limit=1)
        if len(ins) == 0:
            #print("no esta en sistemma")
            return(True)
        text_orig = ins.ost_mensaje
        texto_nuevo = """\n{} {} {} \n{}\n\n#######################################################\n""".format(val[1],val[2],val[4],val[3])
        Texto = """{}\n{}""".format(text_orig,texto_nuevo)
        #print(Texto)
        ins.ost_mensaje = Texto
        return(True)