incidencias.py 8.03 KB
# -*- coding: utf-8 -*-
from odoo.exceptions import UserError
from odoo import models, fields, api
import requests

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

    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',
    )

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

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

    #PONERLE A DESCRIPCION NAME 


    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',
    )

    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_mensajes = fields.Many2many('hgt.incidencias_mensaje', string=u'Mensajes',
        relation='hgt_incidencia_mensaje_rel',
        column1='hgt_incidencias_id',
        column2='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')
    
    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)

    def registrar_mensaje(self, mens):
        text = mens.in_mensaje
        envia = mens.in_creador
        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 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 = 30
        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 

    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')

    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',
        }

    # @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
    #     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)