Commit c4fb4d28 by Juan

empieza a funcionar

1 parent 3246a45a
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from . import controllers from . import controllers
from . import models
\ No newline at end of file \ No newline at end of file
from . import models
from . import wizard
\ No newline at end of file \ No newline at end of file
...@@ -11,13 +11,13 @@ ...@@ -11,13 +11,13 @@
'author': 'ANAC SOFT', 'author': 'ANAC SOFT',
'website': 'http://anacsoft.com', 'website': 'http://hgt.com.ar',
# Categories can be used to filter modules in modules listing # Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml # Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml
# for the full list # for the full list
'category': 'Uncategorized', 'category': 'Uncategorized',
'version': '0.21.01.29', 'version': '0.21.07.09',
# any module necessary for this one to work correctly # any module necessary for this one to work correctly
'depends': ['base', 'depends': ['base',
...@@ -31,9 +31,13 @@ ...@@ -31,9 +31,13 @@
'security/permisos.xml', 'security/permisos.xml',
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'views/incidencias.xml', 'views/incidencias.xml',
'views/mensajes.xml',
'views/temas.xml',
'views/configuracion.xml', 'views/configuracion.xml',
'wizard/merge.xml',
#'wizard/split.xml',
'views/menu.xml', 'views/menu.xml',
], ],
# only loaded in demonstration mode # only loaded in demonstration mode
'demo': [ 'demo': [
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from . import controllers
\ No newline at end of file \ No newline at end of file
from . import controllers
from . import controllers_incide
\ No newline at end of file \ No newline at end of file
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from requests.sessions import session
from odoo import http from odoo import http
# class MyModule(http.Controller): TOKEN ="""a2354mtrgrerxswertyhj76543edfghoiuhEDSfvwerd-5644-fgdh34ergdf"""
# @http.route('/my_module/my_module/', auth='public')
class controlador_mensajes(http.Controller):
"""Controlador orientado al envio de mensajes entre incidencias y soporte"""
@http.route('/incidencia/mensaje', auth='public', type='json' , website=False ,csrf=False, methods = ['POST','GET'])
def index(self, **kw):
if not kw["token"] == TOKEN:
return({"resultado":"ALERTA DE SEGURIDAD error autenticacion"})
inci_model = http.request.env["hgt.incidencias"].sudo()
incidencia = inci_model.search([('in_id_si', '=', kw["in_id_si"] )])
model = http.request.env["hgt.incidencias_mensaje"].sudo()
if incidencia:
lista = incidencia.in_mensajes.ids
nvo_mensaje = self.crearMensaje(model,incidencia, kw)
lista.append(nvo_mensaje.id)
incidencia.in_mensajes = lista
incidencia.registrar_mensaje(nvo_mensaje)
return (True)
else:
nva_incidencia = self.crearIncidencia(inci_model, kw)
lista = []
nvo_mensaje = self.crearMensaje(model,nva_incidencia, kw)
lista.append(nvo_mensaje.id)
nva_incidencia.in_mensajes = lista
nva_incidencia.registrar_mensaje(nvo_mensaje)
return(nva_incidencia.id)
def crearIncidencia(self, model, kw):
nva_inci = model.create({
'in_fecha': kw['in_fecha'],
'name': kw['name'],
'descripcion': kw['descripcion'],
'in_id_si': kw["in_id_si"],
})
return(nva_inci)
def crearMensaje(self, model, incidencia, kw):
nvo_mens = model.create({
'in_mensaje': kw['in_mensaje'],
'in_creador_nombre': kw['in_creador_nombre'],
'in_mens_fecha': kw['in_mens_fecha'],
})
#nvo_mens.in_incidencias = (4,incidencia.id)
return(nvo_mens)
# TOKEN ="""a2354mtrgrerxsiaojifdwvpiochjnioverhjoiuhEDSfvwerd-5644-fgdh34ergdf"""
# class controlador_incidencia(http.Controller):
# """Controlador orientado a soporte de ingreso"""
# # #http://s2.hgtec.com.ar:8005/soporte/alta
# # @http.route('/soporte/alta', auth='public', type='json' , website=False ,csrf=False, methods = ['POST','GET'])
# # def index(self, **kw):
# # if not kw["token"] == TOKEN:
# # return({"resultado":"error autenticacion"})
# # model = http.request.env["hgt.incidencias"].sudo()
# # incidencias = model.search([])
# # self.procesar(model,kw)
# # rest = []
# # for inc in incidencias:
# # rest.append(inc.descripcion)
# # return({"resultado":"OK",
# # "incidencias":rest})
# # def procesar(self,model,kw):
# # print(kw)
# # return()
# @http.route('/soporte/alta/2', auth='public', type='json' , website=False ,csrf=False, methods = ['POST','GET'])
# def index(self, **kw): # def index(self, **kw):
# return "Hello, world"
# @http.route('/my_module/my_module/objects/', auth='public')
# def list(self, **kw):
# return http.request.render('my_module.listing', {
# 'root': '/my_module/my_module',
# 'objects': http.request.env['my_module.my_module'].search([]),
# })
# @http.route('/my_module/my_module/objects/<model("my_module.my_module"):obj>/', auth='public')
# def object(self, obj, **kw):
# return http.request.render('my_module.object', {
# 'object': obj
# })
\ No newline at end of file \ No newline at end of file
# if not kw["token"] == TOKEN:
# return({"resultado":"ALERTA DE SEGURIDAD error autenticacion"})
# model = http.request.env["hgt.incidencias"].sudo()
# incidencias = model.search([])
# print(kw)
# incidente_id = self.procesar_dos(model,kw)
# print(incidente_id)
# rest = []
# for inc in incidencias:
# rest.append(inc.descripcion)
# return({"resultado":"OK",
# "incidencias":rest,
# "argum": kw})
# def procesar_dos(self, model, kw):
# if kw['incidencia']:
# print(kw['incidencia'])
# if kw['descripcion']:
# print(kw['descripcion'])
# if kw['fecha']:
# print(kw['fecha'])
# if kw['responsabilidad']:
# print(kw['responsabilidad'])
# nva_inci = model.create({
# 'name': kw['incidencia'],
# 'descripcion': kw['descripcion'],
# 'fecha_creacion': kw['fecha'],
# 'responsabilidad': kw['responsabilidad'],
# })
# return(nva_inci)
from requests.sessions import session
from odoo import http
TOKEN ="""a2354mtrgre3456783edfghoiuhEDSfvwerd-5644-fgdh34ergdf"""
class controlador_incidencias(http.Controller):
@http.route('/incidencias/crear', auth='public', type='json' , website=False ,csrf=False, methods = ['POST','GET'])
def index(self, **kw):
if not kw["token"] == TOKEN:
return({"resultado":"ALERTA DE SEGURIDAD error autenticacion"})
inci_model = http.request.env["hgt.incidencias"].sudo()
incidencia = inci_model.search([('in_id_si', '=', kw["in_id_si"] ),("url_sis_cliente","=", kw['cliente_URL'] )]) # le falta la url para que este dominio cumpla la logica
serv_model = http.request.env["asw.servicio_falange"].sudo()
if len(incidencia) == 0:
nva_incidencia = self.crearIncidencia2(inci_model, serv_model, kw)
else:
nva_incidencia = False
return(nva_incidencia.id)
def crearIncidencia2(self, i_model, s_model, kw):
url = kw['cliente_URL']
servicio = s_model.search([('sfa_link', '=', url)]) #Porque duplicar la url? o me sirve para manejar multiple urls
val = {
'in_fecha': kw['in_fecha'],
'name': kw['name'],
'descripcion': kw['descripcion'],
'in_id_si': kw["in_id_si"],
'url_sis_cliente': url,
}
print(servicio, url)
print(val)
nva_inci = i_model.create(val)
print(nva_inci)
if servicio:
cli = servicio.cliente
nva_inci.cliente = cli.id
return(nva_inci)
\ No newline at end of file \ No newline at end of file
import requests
import json
URL = 'http://s2.hgtec.com.ar:8005'
headers = {'Content-Type': 'application/json'}
datos = {
'params': { 'token':"""a2354mtrgrerxsiaojifdwvpiochjnioverhjoiuhEDSfvwerd-5644-fgdh34ergdf""",
'incidencia': "nombreIncidencia",
'descripcion': "No me anda la compu, no me anda la bicicleta, quiero tomar mates, afuera esta lloviendo",
'fecha': "25-03-2021",
'responsabilidad': "ter",
}
}
datos_json = json.dumps(datos)
f = requests.post(URL+'/soporte/alta/2', data=datos_json, headers=headers)
frespuesta = f.json()
#print(frespuesta)
data = {
'params':{'token':"""a2354mtrgrerxsiaojifdwvpiochjnioverhjoiuhEDSfvwerd-5644-fgdh34ergdf""",
"asdffas":"dsdsacfv"}
}
data_json = json.dumps(data)
#r = requests.post(URL+ '/soporte/alta', data=data_json, headers=headers)
#respuesta = r.json()
#print(respuesta)
\ No newline at end of file \ No newline at end of file
...@@ -4,4 +4,6 @@ from . import incidencias ...@@ -4,4 +4,6 @@ from . import incidencias
from . import reporte from . import reporte
from . import cliente from . import cliente
from . import estados from . import estados
from . import configuracion
\ No newline at end of file \ No newline at end of file
from . import configuracion
from . import mensajes
from . import temas
\ No newline at end of file \ No newline at end of file
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from odoo.exceptions import UserError from odoo.exceptions import UserError
from odoo import models, fields, api from odoo import models, fields, api
import requests from datetime import datetime
import requests, json
headers = {'Content-Type': 'application/json'}
class hgt_incidencias(models.Model): class hgt_incidencias(models.Model):
_name = 'hgt.incidencias' _name = 'hgt.incidencias'
_order = "id desc" _order = "id desc"
in_cerrada = fields.Boolean(
string=u'Cerrada',
default=False,
)
name = fields.Char(
string=u'Nombre',
)
responsabilidad = fields.Selection( responsabilidad = fields.Selection(
string=u'Responsabilidad', string=u'Responsabilidad',
selection=[('pro', 'Propia'), ('ter', 'Tercero'), ('cli', 'Cliente'), ('cat', 'Catástrofe')] selection=[('pro', 'Propia'), ('ter', 'Tercero'), ('cli', 'Cliente'), ('cat', 'Catástrofe')]
...@@ -24,6 +36,9 @@ class hgt_incidencias(models.Model): ...@@ -24,6 +36,9 @@ class hgt_incidencias(models.Model):
comodel_name='hgt.instituciones', comodel_name='hgt.instituciones',
) )
url_sis_cliente = fields.Char(string='URL sistema del cliente')
descripcion = fields.Html( descripcion = fields.Html(
string=u'Descripción', string=u'Descripción',
) )
...@@ -33,6 +48,7 @@ class hgt_incidencias(models.Model): ...@@ -33,6 +48,7 @@ class hgt_incidencias(models.Model):
numero = fields.Char(string='Numero de ticket') numero = fields.Char(string='Numero de ticket')
_sql_constraints = [('id_ost_uniq', 'unique (id_ost)', 'Id Ticket must be unique.')] _sql_constraints = [('id_ost_uniq', 'unique (id_ost)', 'Id Ticket must be unique.')]
id_ost = fields.Integer(string='Id osticket') id_ost = fields.Integer(string='Id osticket')
ost_cliente = fields.Char(string='Ost cliente') ost_cliente = fields.Char(string='Ost cliente')
...@@ -81,6 +97,11 @@ class hgt_incidencias(models.Model): ...@@ -81,6 +97,11 @@ class hgt_incidencias(models.Model):
ondelete='restrict', 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') texto_descripcion = fields.Html(string='Texto descripcion de la tarea')
asignador = fields.Many2one(comodel_name='res.users', string='Ejecuta') asignador = fields.Many2one(comodel_name='res.users', string='Ejecuta')
...@@ -89,6 +110,148 @@ class hgt_incidencias(models.Model): ...@@ -89,6 +110,148 @@ class hgt_incidencias(models.Model):
tiempo_carga = fields.Integer(string='Tiempo utilizado', default=30) 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
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): def generar_tareas(self):
#import ipdb; ipdb.set_trace() #import ipdb; ipdb.set_trace()
if (len(self.asignador) == 0): if (len(self.asignador) == 0):
...@@ -102,7 +265,7 @@ class hgt_incidencias(models.Model): ...@@ -102,7 +265,7 @@ class hgt_incidencias(models.Model):
self.asignador = False self.asignador = False
self.texto_descripcion = False self.texto_descripcion = False
self.tareas = [(4,nueva_tar.id,0)] self.tareas = [(4,nueva_tar.id,0)]
self.tiempo_carga = 30 self.tiempo_carga = 15
if self.abrir == True: if self.abrir == True:
return { return {
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',
...@@ -121,6 +284,50 @@ class hgt_incidencias(models.Model): ...@@ -121,6 +284,50 @@ class hgt_incidencias(models.Model):
result['domain'] = {'accion' : [('id', 'in', ids)]} result['domain'] = {'accion' : [('id', 'in', ids)]}
return result 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 @api.model
def create(self, vals): def create(self, vals):
...@@ -150,6 +357,7 @@ class hgt_incidencias(models.Model): ...@@ -150,6 +357,7 @@ class hgt_incidencias(models.Model):
except: except:
pass pass
vals['tarea'] = nueva_tar.id vals['tarea'] = nueva_tar.id
print(vals)
result = super(hgt_incidencias, self).create(vals) result = super(hgt_incidencias, self).create(vals)
return result return result
......
# -*- coding: utf-8 -*-
from odoo import models, fields, api
import datetime
from datetime import datetime
class hgt_incidencias_mensaje(models.Model):
_name = 'hgt.incidencias_mensaje'
_order = 'id desc'
in_mensaje = fields.Text(string='Mensaje')
in_creador = fields.Many2one(
string = 'Creador',
comodel_name = 'res.users',
ondelete = 'set null',
default = lambda self: self.env.user.id,
)
in_creador_nombre = fields.Char(
string="Creador",
)
in_mens_fecha = fields.Datetime(
string = u'Fecha de envío',
default=datetime.now().strftime('%Y-%m-%d %H:%M:%S')
)
in_interno = fields.Boolean(
string="Nota Interna?",
default=False
)
in_incidencias = fields.Many2many('hgt.incidencias', string=u'Incidencias',
relation='hgt_incidencia_mensaje_rel',
column1='hgt_incidencias_id',
column2='hgt_incidencias_mensaje_id')
\ No newline at end of file \ No newline at end of file
# -*- coding: utf-8 -*-
from odoo import models, fields, api
from datetime import datetime
import requests, json
headers = {'Content-Type': 'application/json'}
class hgt_incidencias_temas(models.Model):
_name = 'hgt.incidencias_temas'
_rec_name = "t_titulo"
t_titulo = fields.Char(string=u'Nombre')
t_estado = fields.Many2one(
string='Estados',
comodel_name='hgt.estados',
ondelete='restrict',
)
t_descripcion = fields.Text(string=u'Descripción')
t_tareas = fields.Many2many('hgt.tarea', string=u'Tareas derivadas',
relation='hgt_tareas_tema_rel',
column1='hgt_tarea_id',
column2='hgt_incidencias_temas_id')
t_incidencias = fields.Many2many('hgt.incidencias', string=u'Incidencias',
relation='hgt_incidencia_temas_rel',
column1='hgt_incidencias_id',
column2='hgt_incidencias_temas_id')
t_texto_mensaje = fields.Char(string='Mensaje')
t_t_interno = fields.Boolean(
string="Nota Interna?",
default=False
)
def enviarMensaje_t(self):
for inci in self.t_incidencias:
inci.in_texto_mensaje = self.t_texto_mensaje
inci_in_in_interno = self.t_t_interno
inci.enviarMensaje_in()
inci.in_texto_mensaje = ""
inci_in_in_interno = False
self.t_texto_mensaje = ""
self.t_t_interno = False
return "Exito"
\ No newline at end of file \ No newline at end of file
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_hgt_incidencias,access_hgt_incidencias,model_hgt_incidencias,group_crm_incidentes,1,1,1,0 access_hgt_incidencias,access_hgt_incidencias,model_hgt_incidencias,group_crm_incidentes,1,1,1,0
access_hgt_coniguracion_incidencias,access_hgt_coniguracion_incidencias,model_hgt_coniguracion_incidencias,group_crm_incidentesconf,1,1,1,0
\ No newline at end of file \ No newline at end of file
access_hgt_coniguracion_incidencias,access_hgt_coniguracion_incidencias,model_hgt_coniguracion_incidencias,group_crm_incidentesconf,1,1,1,0
access_hgt_incidencias_temas,access_hgt_incidencias_temas,model_hgt_incidencias_temas,group_crm_incidentesconf,1,1,1,1
access_hgt_incidencias_mensaje,access_hgt_incidencias_mensaje,model_hgt_incidencias_mensaje,,1,1,1,1
access_hgt_cliente,access_hgt_cliente,model_hgt_cliente,,1,1,1,1
access_hgt_estados,access_hgt_estados,model_hgt_estados,,1,1,1,1
...@@ -26,6 +26,9 @@ ...@@ -26,6 +26,9 @@
<field name="url" widget="url"/> <field name="url" widget="url"/>
<field colspan="2" name="cliente"/> <field colspan="2" name="cliente"/>
<field name="descripcion"/> <field name="descripcion"/>
<field name="in_fecha"/>
<field name="name"/>
<field name="in_cerrada" />
</tree> </tree>
</field> </field>
</record> </record>
...@@ -40,15 +43,49 @@ ...@@ -40,15 +43,49 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form> <form>
<!--<sheet>--> <!--<sheet>-->
<header>
<button type="object" name="splitInci" string="Separar en incidencias" class="oe_highlight" attrs="{'invisible':[('in_cerrada','=',True)]}"/>
<field name="in_cerrada" invisible="1" />
</header>
<group col="4" string="Incidencia"> <group col="4" string="Incidencia">
<field colspan="2" name="fecha_creacion"/> <field name="name" colspan="2" attrs="{'readonly':[('in_cerrada','=',True)]}"/>
<field colspan="2" name="estado"/> <!-- <field colspan="2" name="fecha_creacion"/> -->
<field colspan="2" name="in_fecha" attrs="{'readonly':[('in_cerrada','=',True)]}"/>
<field colspan="2" name="descripcion" attrs="{'readonly':[('in_cerrada','=',True)]}"/>
<field colspan="2" name="estado" attrs="{'readonly':[('in_cerrada','=',True)]}"/>
</group> </group>
<group col="4"> <group col="4">
<field colspan="2" name="responsabilidad"/> <field colspan="2" name="responsabilidad"/>
<field colspan="2" name="cliente"/> <field colspan="2" name="cliente"/>
<field colspan="2" name="url_sis_cliente" widget='url' />
</group> </group>
<group col="1">
<h2>Temas</h2>
<field name="in_temas" nolabel="1" attrs="{'readonly':[('in_cerrada','=',True)]}"/>
</group>
<group col="2" string="Mensajes">
<h3>Histórico de mensajes:</h3>
<field name="in_historico_mensajes" readonly="1" colspan="2" nolabel='1' attrs="{'readonly':[('in_cerrada','=',True)]}"/>
</group>
<group col="2">
<field name="in_texto_mensaje" nolabel='1' colspan="1" attrs="{'readonly':[('in_cerrada','=',True)]}" />
<button name="enviarMensaje_in" attrs="{'readonly':[('in_cerrada','=',True)]}" class="oe_edit_only" colspan="1" string="Enviar Mensaje" type="object" />
<field name="in_in_interno" attrs="{'readonly':[('in_cerrada','=',True)]}" colspan="1"/>
</group>
<group>
<field name="in_mensajes" required="0" nolabel="1" >
<tree delete="false" create="false">
<field name="in_mens_fecha" attrs="{'readonly': True}" />
<field name="in_creador" attrs="{'readonly': True}" />
<field name="in_mensaje" attrs="{'readonly': True}" />
</tree>
</field>
</group>
<h2>Osticket</h2> <h2>Osticket</h2>
<group col="2"> <group col="2">
<field name="url" widget="url"/> <field name="url" widget="url"/>
......
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data noupdate="0">
<record id="action_hgt_incidencias_mensaje_act_window" model="ir.actions.act_window">
<field name="type">ir.actions.act_window</field>
<field name="name">Mensaje</field>
<field name="res_model">hgt.incidencias_mensaje</field>
<field name="view_mode">tree,form</field>
<field name="view_type">form</field>
<field name="target">current</field>
</record>
<record id="view_hgt_incidencias_mensaje_tree" model="ir.ui.view">
<field name="name">Mensaje</field>
<field name="model">hgt.incidencias_mensaje</field>
<field name="type">tree</field>
<field name="mode">primary</field>
<field name="priority" eval="16" />
<field name="active" eval="True" />
<field name="arch" type="xml">
<tree>
<field name="in_creador" />
<field name="in_mens_fecha"/>
<field name="in_interno"/>
</tree>
</field>
</record>
<record id="view_hgt_incidencias_mensaje_form" model="ir.ui.view">
<field name="name">Mensaje</field>
<field name="model">hgt.incidencias_mensaje</field>
<field name="type">form</field>
<field name="mode">primary</field>
<field name="priority" eval="16" />
<field name="active" eval="True" />
<field name="arch" type="xml">
<form>
<!--<sheet>-->
<group col="4" string="Mensaje">
<field name="in_mens_fecha" colspan="2" attrs="{'readonly': True}" />
<field name="in_creador" colspan="2" attrs="{'readonly': True}" />
<field name="in_mensaje" attrs="{'readonly': True}" />
</group>
<group col="4">
<field name="in_interno" colspan="2" attrs="{'readonly': True}"/>
</group>
<!--</sheet>-->
</form>
</field>
</record>
</data>
</odoo>
...@@ -4,8 +4,12 @@ ...@@ -4,8 +4,12 @@
<!--<menuitem name="Incidencias" id="hgt_incidencias" />--> <!--<menuitem name="Incidencias" id="hgt_incidencias" />-->
<menuitem name="Incidencias" id="hgt_incidencias_incidencias" parent="asw_crm.asw_crm_root" /> <menuitem name="Incidencias" sequence="10" id="hgt_incidencias_incidencias" parent="asw_crm.asw_crm_root" />
<menuitem name="Ver Incidencias" parent="hgt_incidencias_incidencias" id="hgt_incidencias_accion" action="action_incidencias_act_window" /> <menuitem name="Ver Incidencias" parent="hgt_incidencias_incidencias" id="hgt_incidencias_accion" action="action_incidencias_act_window" />
<menuitem name="Configuracion incidencia" parent="hgt_incidencias_incidencias" id="hgt_conf_incidencias_accion" action="action_incidenciasconfig_act_window" /> <menuitem name="Configuracion incidencia" parent="hgt_incidencias_incidencias" id="hgt_conf_incidencias_accion" action="action_incidenciasconfig_act_window" />
<menuitem name="Temas" sequence="20" id="hgt_incidencias_temas" parent="asw_crm.asw_crm_root" />
<menuitem name="Ver Temas" parent="hgt_incidencias_temas" id="hgt_temas_accion" action="action_hgt_incidencias_temas_act_window" />
<menuitem name="Agrupar Incidencias" parent="hgt_incidencias_temas" id="hgt_merge_it" action="action_hgt_merge_incidenciastemas_act_window" />
</data> </data>
</odoo> </odoo>
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data noupdate="0">
<record id="action_hgt_incidencias_temas_act_window" model="ir.actions.act_window">
<field name="type">ir.actions.act_window</field>
<field name="name">Tema</field>
<field name="res_model">hgt.incidencias_temas</field>
<field name="view_mode">tree,form</field>
<field name="view_type">form</field>
<field name="target">current</field>
</record>
<record id="view_hgt_incidencias_temas_tree" model="ir.ui.view">
<field name="name">Tema</field>
<field name="model">hgt.incidencias_temas</field>
<field name="type">tree</field>
<field name="mode">primary</field>
<field name="priority" eval="16" />
<field name="active" eval="True" />
<field name="arch" type="xml">
<tree>
<field name="t_titulo" />
<field name="t_estado"/>
<field name="t_descripcion"/>
</tree>
</field>
</record>
<record id="view_hgt_incidencias_temas_form" model="ir.ui.view">
<field name="name">Tema</field>
<field name="model">hgt.incidencias_temas</field>
<field name="type">form</field>
<field name="mode">primary</field>
<field name="priority" eval="16" />
<field name="active" eval="True" />
<field name="arch" type="xml">
<form>
<!--<sheet>-->
<group col="4" string="Tema">
<field name="t_titulo" colspan="2" />
<field name="t_estado" colspan="2"/>
</group>
<group col="4" string="Descripción">
<field name="t_descripcion" colspan="4" nolabel="1"/>
</group>
<group col="4" string="Incidencias">
<field name="t_incidencias" colspan="2" nolabel="1"/>
</group>
<group col="4" string="Responder a todas">
<field name="t_texto_mensaje" nolabel='1' colspan="1" />
<button name="enviarMensaje_t" class="oe_edit_only" colspan="1" string="Enviar Mensaje" type="object" />
<field name="t_t_interno" colspan="1"/>
</group>
<group col="4" string="Tareas">
<field name="t_tareas" colspan="2" nolabel="1"/>
</group>
<!--</sheet>-->
</form>
</field>
</record>
</data>
</odoo>
# -*- coding: utf-8 -*-
from . import merge
#from . import split
#from . import split_tema_descr
\ No newline at end of file \ No newline at end of file
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class hgt_incidencias_temas_merge(models.TransientModel):
_name = "hgt.incidencias_temas_merge"
merge_incidencias = fields.Many2many('hgt.incidencias',
string='Incidencias')
merge_temas = fields.Many2one('hgt.incidencias_temas',
string='Temas')
def merge_incidenciasytemas(self):
tema = self.merge_temas.id
tema = self.env['hgt.incidencias_temas'].search([('id', '=', tema)])
for inc in self.merge_incidencias:
tema.t_incidencias = (4, inc.id)
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data noupdate="0">
<record id="action_hgt_merge_incidenciastemas_act_window" model="ir.actions.act_window">
<field name="type">ir.actions.act_window</field>
<field name="name">Agrupar</field>
<field name="res_model">hgt.incidencias_temas_merge</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<record id="view_hgt_merge_incidenciastemas_form" model="ir.ui.view">
<field name="name">Agrupar</field>
<field name="model">hgt.incidencias_temas_merge</field>
<field name="type">form</field>
<field name="mode">primary</field>
<field name="priority" eval="16" />
<field name="active" eval="True" />
<field name="arch" type="xml">
<form>
<!--<sheet>-->
<group col="4" string="Agrupar Incidencias por Temas">
<h3 colspan="2">Elegir Incidencias</h3>
<h3 colspan="2" >Elegir Tema</h3>
<field name="merge_incidencias" widget="many2many_checkboxes" colspan="2" nolabel="1"/>
<field name="merge_temas" colspan="2" nolabel="1"/>
</group>
<footer>
<button name="merge_incidenciasytemas" type="object" string="Agrupar"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
<!--</sheet>-->
</form>
</field>
</record>
</data>
</odoo>
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class hgt_incidencias_temas_split(models.TransientModel):
_name = "hgt.incidencias_temas_split"
split_incidencia = fields.Many2one('hgt.incidencias',
string='Incidencias')
split_name = fields.Char(
string=u'Nombre',
related="split_incidencia.name"
)
split_descripcion = fields.Text(
string=u'Descripción',
related="split_incidencia.descripcion"
)
split_responsabilidad = fields.Selection(
string=u'Responsabilidad',
related="split_incidencia.responsabilidad"
)
split_cliente = fields.Many2one(
string='Cliente',
related="split_incidencia.cliente"
)
split_incidenciastd = fields.One2many(
string='Nuevas incidencias',
comodel_name='hgt.split_tema_descr',
inverse_name='rel_split'
)
def splitIncidencia(self):
#metodo que crea incidencias a partir de las descripciones aportadas x usuario y las reune en un mismo tema
titulo_tema = "Split - "+ self.split_name
descrip_tema = "Tema que reune la división en incidencias de la incidencia original " + self.split_name
datos_tema = {'t_titulo': titulo_tema, 't_descripcion': descrip_tema}
nvo_tema = self.env['hgt.incidencias_temas'].create(datos_tema)
texto = "TICKET CERRADO - SEPARADO EN: "
for inc in self.split_incidenciastd:
nombre = inc.splittd_nom
descripcion = inc.splittd_descr
tema = nvo_tema
datos = {'name': nombre,
'descripcion': descripcion,
'responsabilidad': self.split_responsabilidad,
'cliente': self.split_cliente.id,
'url_cliente': self.split_incidencia.url_cliente,
}
nva_inci = self.env['hgt.incidencias'].create(datos)
nvo_tema.t_incidencias = (4, nva_inci.id)
#creacion de las mismas incidencias en soporte p q el cliente las vea
nva_inci.enviarIncidencia()
texto += " -"+nombre
self.cerrarIncidencia(texto)
def cerrarIncidencia(self, texto):
self.split_incidencia.in_texto_mensaje = texto
self.split_incidencia.enviarMensaje_in()
self.split_incidencia.in_texto_mensaje = ""
self.split_incidencia.in_cerrada = True
self.split_incidencia.cerrarIncidencia()
return "Exito"
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data noupdate="0">
<record id="action_hgt_split_incidenciastemas_act_window" model="ir.actions.act_window">
<field name="type">ir.actions.act_window</field>
<field name="name">Dividir</field>
<field name="res_model">hgt.incidencias_temas_split</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<record id="view_hgt_split_incidenciastemas_form" model="ir.ui.view">
<field name="name">Dividir</field>
<field name="model">hgt.incidencias_temas_split</field>
<field name="type">form</field>
<field name="mode">primary</field>
<field name="priority" eval="16" />
<field name="active" eval="True" />
<field name="arch" type="xml">
<form>
<!--<sheet>-->
<group col="4" string="Incidencia original">
<field name="split_name" colspan="4" readonly="1" nolabel="1"/>
<field name="split_descripcion" colspan="4" readonly="1" nolabel="1"/>
</group>
<group col="4" string="Escribir descripción de nuevas incidencias">
<field name="split_incidenciastd" nolabel="1">
<tree create="1" edit="1" editable="1">
<field name="splittd_nom"/>
<field name="splittd_descr"/>
</tree>
</field>
</group>
<footer>
<button name="splitIncidencia" type="object" class="oe_highlight" string="Dividir y crear nuevas incidencias"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
<!--</sheet>-->
</form>
</field>
</record>
</data>
</odoo>
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class hgt_split_tema_descr(models.TransientModel):
_name = "hgt.split_tema_descr"
splittd_descr = fields.Text(
string=u'Descripción',
)
splittd_nom = fields.Char(
string=u'Nombre',
)
rel_split = fields.Many2one(
string='Split',
comodel_name='hgt.incidencias_temas_split',
ondelete='set null',
)
\ No newline at end of file \ No newline at end of file
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!