dbo.LN_Blue2

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

26
Name Data Type Length Description
@p_accion varchar 50
@p_contraparte int 4
@p_informe int 4
@p_user_id int 4
@p_item_contrato int 4
@p_producto smallint 2
@p_id_tipo_informe int 4
@p_prioridad tinyint 1
@p_estado_informe varchar 1
@p_ingresado_por int 4
@p_datamanager int 4
@p_asignado int 4
@p_cliente int 4
@p_fecha_limite_doc datetime 8
@p_producto_led int 4
@p_fecha_comprometida datetime 8
@p_objeto_informe varchar -1
@p_familia int 4
@p_idioma_iso varchar 3
@p_fecha_inicio datetime 8
@p_notas_informe varchar -1
@p_path_archivo varchar 150
@p_extension_archivo varchar 5
@p_fecha_desde datetime 8
@p_fecha_hasta datetime 8
@p_pausa_tarea bit 1

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/* SP LN_BLUE */

CREATE OR ALTER PROCEDURE dbo.LN_Blue2
 @p_accion         varchar(50) = NULL,
 @p_contraparte        int = NULL,
 @p_informe         int OUTPUT,
 @p_user_id         int = NULL,
 @p_item_contrato       int = NULL,
 @p_producto         smallint = NULL,    
 @p_id_tipo_informe       int = NULL,
 @p_prioridad        tinyint = NULL,
 @p_estado_informe       varchar(1) = NULL,
 @p_ingresado_por       int = NULL,
 @p_datamanager        int = NULL,
 @p_asignado         int = NULL,
 @p_cliente         int = NULL,
 @p_fecha_limite_doc       datetime = NULL,
 @p_producto_led        int = NULL,
 @p_fecha_comprometida      datetime = NULL,
 @p_objeto_informe       varchar(max) = NULL,
 @p_familia         int = NULL,
 @p_idioma_iso        varchar(3) = 'spa',
 @p_fecha_inicio        datetime = null,
 @p_notas_informe       varchar(max) = NULL,
 @p_path_archivo        varchar(150)= null,
 @p_extension_archivo      varchar(5)= null,
 @p_fecha_desde datetime = null,
 @p_fecha_hasta datetime = null,
 @p_pausa_tarea bit = 0

 
AS
BEGIN
 SET NOCOUNT ON;
/*
exec LN_Blue 'tareas_informe',null,100603443
exec LN_Blue2 'tareas_informe',null,100603443
exec ln_blue2 'UPD_informe',198672,100615876,793639331,NULL,NULL,1645350,2,'E',793639331,NULL,NULL,2254875,NULL,NULL,'2023-03-03 12:02:00',NULL,NULL,'spa','2023-02-28 00:00:00'

*/



 /* AGB DECLARAMOS VARIABLES PARA EVITAR PARAMETER SNIFFING EN LA CONFECCIÓN DEL QUERY PLAN */
 DECLARE @V_accion           varchar(50)  = @p_accion
 DECLARE @V_contraparte          int    = @p_contraparte
 DECLARE @V_informe           int    = @p_informe
 DECLARE @V_user_id           int    = @p_user_id
 DECLARE @V_item_contrato         int    = @p_item_contrato
 DECLARE @V_producto           smallint   = @p_producto
 DECLARE @V_id_tipo_informe         int    = @p_id_tipo_informe
 DECLARE @V_prioridad          tinyint   = @p_prioridad
 DECLARE @V_estado_informe         varchar(1)   = @p_estado_informe
 DECLARE @V_ingresado_por         int    = @p_ingresado_por
 DECLARE @V_datamanager          int    = @p_datamanager
 DECLARE @V_asignado           int    = @p_asignado
 DECLARE @V_cliente           int    = @p_cliente
 DECLARE @V_fecha_limite_doc         datetime   = @p_fecha_limite_doc
 DECLARE @V_producto_led          int    = @p_producto_led
 DECLARE @V_fecha_comprometida        datetime   = @p_fecha_comprometida
 DECLARE @V_objeto_informe         varchar (max)  = @p_objeto_informe
 DECLARE @V_familia           int    = @p_familia
 DECLARE @V_idioma_iso          varchar(3)   = @p_idioma_iso
 DECLARE @V_fecha_inicio          datetime   = @p_fecha_inicio
 DECLARE @V_notas_informe         varchar (max)  = @p_notas_informe
 DECLARE @V_path_archivo          varchar(150) = @p_path_archivo
 DECLARE @V_extension_archivo        varchar(5)  = @p_extension_archivo
 DECLARE @V_fecha_desde           datetime   = @p_fecha_desde 
 DECLARE @V_fecha_hasta           datetime   = @p_fecha_hasta 
 DECLARE @V_pausa_tarea           bit    = @p_pausa_tarea 







 DECLARE @estado VARCHAR(1) = NULL, @estado_tarea varchar(1) = NULL
 DECLARE @ahora datetime = GETDATE()
 DECLARE @usuario varchar(100) = NULL
 DECLARE @preffix varchar(200) = ''
 DECLARE @nombre_asignado varchar(200)
 DECLARE @informe int = NULL
 DECLARE @tarea INT = null
 DECLARE @gestion int = NULL
 DECLARE @noing int = 0, @ing int = 0, @verif int = 0, @rech int = 0, @total_estado int = 0, @total_docs int = 0, @publicados int = 0

 if (@V_user_id > 0) 
 begin
  select @usuario = isnull(first_name,'') + ' ' + isnull(last_name, '')
  from users where user_id = @V_user_id
  SET @preffix = '['+@usuario+' - '+convert(varchar(10),@ahora,103) + ' ' + substring(convert(varchar,@ahora,121),12,5)+']: '
 end 
 else
  begin
   SET @preffix = '['+convert(varchar(10),@ahora,103) + ' ' + substring(convert(varchar,@ahora,121),12,5)+']: '
  end



 DECLARE @id INT = null
 DECLARE @moneda varchar(3) = null
 DECLARE @precio money = NULL
 DECLARE @id_contrato int = NULL
 DECLARE @cliente int = NULL
 DECLARE @nombre_cliente varchar(200) = NULL
 DECLARE @identificador varchar(10) = NULL
 DECLARE @abreviatura varchar(10) = NULL
 DECLARE @numero varchar(50) = NULL
 DECLARE @nombre_persona varchar(200) = NULL
 DECLARE @nombre varchar(50) = NULL
 DECLARE @email varchar(50) = NULL
 DECLARE @telefono varchar(30) = NULL
 DECLARE @nombre_tipo_informe varchar(200) = NULL
 DECLARE @grupo_informes varchar(50) = NULL
 DECLARE @detalle_log varchar(max)


declare @logs_total table (informe bigint, desde datetime, hasta datetime, duracion int, pausa_fin char(1)) 
declare @logs_rango table (informe bigint, desde datetime, hasta datetime, duracion int, pausa_fin char(1)) 


select @V_user_id as zxczxbv
return 

if (@V_accion='REPORTE_TAREAS_LOG_TOTAL')
BEGIN
 insert into @logs_total 

   select subinformes.informe, a1.horario, b1.horario, datediff(minute,a1.horario,b1.horario) as duracion, b1.operacion    
   from informes 
   inner join informes as subinformes on informes.informe = subinformes.informe_padre
   /*inner join tipos_informe as tipos_informe_tarea on subinformes.id_tipo_informe = tipos_informe_tarea.id_tipo_informe*/
   inner join ln_tareas as tipos_informe_tarea on subinformes.id_tipo_informe = tipos_informe_tarea.id_tipo_informe_blue

   inner join  informes_log a1 on a1.informe = subinformes.informe 
   left outer join informes_log b1 
        on (b1.informe = a1.informe and b1.operacion in ('F','P') 
         and b1.horario > a1.horario 
      and b1.horario = (select min(c.horario) 
           from informes_log c 
           where c.informe = a1.informe and 
           c.operacion in ('F','P') and c.horario > a1.horario))
   inner join LN_demo on informes.informe=ln_demo.informe 
   inner join ln_contrapartes on ln_demo.contraparte = ln_contrapartes.contraparte
   inner join ln_gestiones on ln_gestiones.contraparte = ln_contrapartes.contraparte  
   where subinformes.fecha_entregado between @V_fecha_desde and (@V_fecha_hasta+1)
   and subinformes.estado_informe IN ('F', 'K')
   --and ISNULL(tipos_informe_tarea.genera_solicitud_doc, 0) = 0

   and (informes.cliente = @V_cliente or @V_cliente = 0)
   --and (subinformes.id_tipo_informe = @V_id_tipo_informe or @V_id_tipo_informe = 0)
   --and (subinformes.asignado = @V_user_id or @V_user_id = 0)

   and a1.operacion = 'I'
   and  a1.informe = subinformes.informe
   and LN_gestiones.desde <= CONVERT(date, GETDATE())
            AND LN_gestiones.hasta >= CONVERT(date, GETDATE())
   and isnull(ln_demo.visible,0)=1
   AND LN_contrapartes.activo = 1

   order by subinformes.informe, a1.horario 
   


   select * from @logs_total order by informe,desde
END 



if (@V_accion='REPORTE_TAREAS_LOG_RANGO')
BEGIN
 insert into @logs_rango 

   select subinformes.informe, a1.horario, b1.horario, datediff(minute,a1.horario,b1.horario) as duracion, b1.operacion  
   from informes 
   inner join informes as subinformes on informes.informe = subinformes.informe_padre
   inner join ln_tareas as tipos_informe_tarea on subinformes.id_tipo_informe = tipos_informe_tarea.id_tipo_informe_blue
   inner join  informes_log a1 on a1.informe = subinformes.informe 
   left outer join informes_log b1 
        on (b1.informe = a1.informe and b1.operacion in ('F','P') 
         and b1.horario > a1.horario 
      and b1.horario = (select min(c.horario) 
           from informes_log c 
           where c.informe = a1.informe and 
           c.operacion in ('F','P') and c.horario > a1.horario))
   inner join LN_demo on informes.informe=ln_demo.informe 
   inner join ln_contrapartes on ln_demo.contraparte = ln_contrapartes.contraparte
   inner join ln_gestiones on ln_gestiones.contraparte = ln_contrapartes.contraparte

   where LN_demo.fecha_publicacion between @V_fecha_desde and (@V_fecha_hasta+1)
   /*subinformes.fecha_entregado between '2023-02-01' and (getdate()+1)*/
   and subinformes.estado_informe IN ('F', 'K')
   /*and ISNULL(tipos_informe_tarea.genera_solicitud_doc, 0) = 0*/
   
   and (informes.cliente = @V_cliente or @V_cliente = 0)
   --and (subinformes.id_tipo_informe = null or null = 0)
-- and (subinformes.asignado = null or null = 0)
   and a1.operacion = 'I'
   and  a1.informe = subinformes.informe
   and b1.horario  between @V_fecha_desde and (@V_fecha_hasta+1)
   and LN_gestiones.desde <= CONVERT(date, GETDATE())
            AND LN_gestiones.hasta >= CONVERT(date, GETDATE())
   and isnull(ln_demo.visible,0)=1
   AND LN_contrapartes.activo = 1
   order by subinformes.informe, a1.horario 

   
   select * from @logs_rango order by informe,desde


END 




if (@V_accion='REPORTE_TAREAS')
 BEGIN
   
   insert into @logs_total 
   exec LN_Blue 'REPORTE_TAREAS_LOG_TOTAL',NULL,NULL,@V_user_id,NULL,NULL,
   @V_id_tipo_informe,NULL,NULL,NULL,NULL,NULL,@V_cliente,
   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,@V_fecha_desde,@V_fecha_hasta

   insert into @logs_rango
   exec LN_Blue 'REPORTE_TAREAS_LOG_RANGO',NULL,NULL,@V_user_id,NULL,NULL,
   @V_id_tipo_informe,NULL,NULL,NULL,NULL,NULL,@V_cliente,
   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,@V_fecha_desde,@V_fecha_hasta

   select informes.informe, subinformes.informe as tarea,  

   clientes.nombre_cliente,
   
   tipos_informe_padre.nombre_tipo_informe as tipo_informe_padre,
  

   users.first_name, users.last_name, 
   ISNULL(users.first_name,'') + ' ' + ISNULL(users.last_name,'') as usuario,
   
   /*tipos_informe_tarea.nombre_tarea as tipo_informe_tarea,*/
   tipos_informe_tarea.nombre_tarea as tipo_informe_tarea,
   subinformes.fecha_inicio as fecha_iniciado, subinformes.fecha_entregado, identificadores.abreviatura,
   identificadores.country_code, padrones.numero, padrones.nombre_persona, country.country_name
   , 
   (select sum(duracion) from @logs_total log1 where log1.informe = subinformes.informe) as minutos_tardo,
   /* lo que tardo en total en minutos */ 
   datediff(minute,'1899-12-30 00:00:00.000',tipos_informe_tarea.duracion) as minutos_std,  
   /* duracion standard de la tarea en minutos */
   format(
   (datediff(minute,'1899-12-30 00:00:00.000',tipos_informe_tarea.duracion)/60*100)+
   (datediff(minute,'1899-12-30 00:00:00.000',tipos_informe_tarea.duracion)%60*1) 
   ,'00:00') as duracion, /* duracion standard de la tarea en hh:mm */

   format(
   (select sum(duracion) from @logs_rango log1 where log1.informe = subinformes.informe)/60*100+
   (select sum(duracion) from @logs_rango log1 where log1.informe = subinformes.informe)%60*1,'00:00')
   as tiempo_rango, /* lo que tardo dentro del rango de fechas solicitadas en hh:mm */ 

   format(
   (select sum(duracion) from @logs_total log2 where log2.informe = subinformes.informe)/60*100+
   (select sum(duracion) from @logs_total log2 where log2.informe = subinformes.informe)%60*1,'00:00')
   as tiempo_acumulado, /* lo que tardo en total en hh:mm */ 

   format(
    ((select sum(duracion) from @logs_total log1 where log1.informe = subinformes.informe) - 
     (datediff(minute,'1899-12-30 00:00:00.000',tipos_informe_tarea.duracion)))/60*100+
    ((select sum(duracion) from @logs_total log1 where log1.informe = subinformes.informe) - 
     (datediff(minute,'1899-12-30 00:00:00.000',tipos_informe_tarea.duracion)))%60*1,'00:00')
     as diferencia, /* diferencia entre la duracion standard de la tarea y lo que tardo en total */ 

   detalle.detalle



   from informes inner join informes as subinformes on informes.informe = subinformes.informe_padre
   /*inner join tipos_informe as tipos_informe_padre1 on informes.id_tipo_informe = tipos_informe_padre.id_tipo_informe*/
   inner join ln_demo on (ln_demo.informe=informes.informe)
   inner join ln_contrapartes on (ln_demo.contraparte=ln_contrapartes.contraparte and LN_contrapartes.servicio_contratado = 10)
   inner join LN_tipo_informes as tipos_informe_padre on informes.id_tipo_informe=tipos_informe_padre.idTipoInforme

   /*inner join tipos_informe as tipos_informe_tarea on subinformes.id_tipo_informe = tipos_informe_tarea.id_tipo_informe*/
   inner join ln_tareas as tipos_informe_tarea on subinformes.id_tipo_informe = tipos_informe_tarea.id_tipo_informe_blue

   inner join clientes on informes.cliente = clientes.cliente
   inner join users on subinformes.asignado = users.user_id
   inner join padrones on (informes.identificador = padrones.identificador and informes.numero = padrones.numero)
   inner join identificadores on padrones.identificador = identificadores.identificador
   inner join country on identificadores.country_code = country.country_code
   
   left join (SELECT informe , detalle=STUFF(
      (SELECT '; ' + convert(varchar,desde,20) + ' a ' + convert(varchar,hasta,20) + ' (' + format((duracion/60*100+duracion%60*1),'00:00') + ') ' + pausa_fin AS [text()]
       FROM @logs_total XT 
       WHERE XT.informe = T.informe
       order by informe,desde 
       FOR XML PATH('')), 1, 2, '') 
     FROM @logs_total T
     GROUP BY informe) detalle on (detalle.informe = subinformes.informe)


   where /*ln_demo.fecha_publicacion between @V_fecha_desde and (@V_fecha_hasta+1)*/
   (subinformes.fecha_entregado between @V_fecha_desde and (@V_fecha_hasta+1) or subinformes.fecha_aprobacion between @V_fecha_desde and (@V_fecha_hasta+1) )

   and subinformes.estado_informe IN ('F', 'K')
   /*and ISNULL(tipos_informe_tarea.genera_solicitud_doc, 0) = 0*/

   /* estos 3 filtros de abajo AGB se los habia sacado, 
    pero MIS se los volvi a poner el 16/2/2023 porque sino justamente no hacia los filtros en el panel... 
    no se si los sacaron porque estaba queriendo usar la misma acción de este SP, para otra cosa */

   and (clientes.cliente = @V_cliente or @V_cliente = 0)
   and (subinformes.id_tipo_informe = @V_id_tipo_informe or @V_id_tipo_informe = 0)
   and (users.user_id = @V_user_id or @V_user_id = 0)
   
   order by
   subinformes.fecha_entregado asc 


   /*
    select informes.informe, subinformes.informe as tarea,  
   
    clientes.nombre_cliente, tipos_informe_padre.nombre_tipo_informe as tipo_informe_padre,
    users.first_name, users.last_name, 
    ISNULL(users.first_name,'') + ' ' + ISNULL(users.last_name,'') as usuario,
    tipos_informe_tarea.nombre_tarea as tipo_informe_tarea,
    subinformes.fecha_iniciado, subinformes.fecha_entregado, identificadores.abreviatura,
    identificadores.country_code, padrones.numero, padrones.nombre_persona, country.country_name, 
    (select sum(duracion) from @logs_total log1 where log1.informe = subinformes.informe) as minutos_tardo,
    /* lo que tardo en total en minutos */
 
    datediff(minute,'1899-12-30 00:00:00.000',tipos_informe_tarea.duracion) as minutos_std,  
    /* duracion standard de la tarea en minutos */

    format(
    (datediff(minute,'1899-12-30 00:00:00.000',tipos_informe_tarea.duracion)/60*100)+
    (datediff(minute,'1899-12-30 00:00:00.000',tipos_informe_tarea.duracion)%60*1) 
    ,'00:00') as duracion, /* duracion standard de la tarea en hh:mm */

   
    format(
    (select sum(duracion) from @logs_rango log1 where log1.informe = subinformes.informe)/60*100+
    (select sum(duracion) from @logs_rango log1 where log1.informe = subinformes.informe)%60*1,'00:00')
    as tiempo_rango, /* lo que tardo dentro del rango de fechas solicitadas en hh:mm */
 
   
    format(
    (select sum(duracion) from @logs_total log2 where log2.informe = subinformes.informe)/60*100+
    (select sum(duracion) from @logs_total log2 where log2.informe = subinformes.informe)%60*1,'00:00')
    as tiempo_acumulado, /* lo que tardo en total en hh:mm */
 
   
    format(
     ((select sum(duracion) from @logs_total log1 where log1.informe = subinformes.informe) - 
      (datediff(minute,'1899-12-30 00:00:00.000',tipos_informe_tarea.duracion)))/60*100+
     ((select sum(duracion) from @logs_total log1 where log1.informe = subinformes.informe) - 
      (datediff(minute,'1899-12-30 00:00:00.000',tipos_informe_tarea.duracion)))%60*1,'00:00')
      as diferencia, /* diferencia entre la duracion standard de la tarea y lo que tardo en total */
 
   
    detalle.detalle
   
   
   
    from informes inner join informes as subinformes on informes.informe = subinformes.informe_padre
    inner join tipos_informe as tipos_informe_padre on informes.id_tipo_informe = tipos_informe_padre.id_tipo_informe
   
    /*inner join tipos_informe as tipos_informe_tarea on subinformes.id_tipo_informe = tipos_informe_tarea.id_tipo_informe*/

    inner join ln_tareas as tipos_informe_tarea on subinformes.id_tipo_informe = tipos_informe_tarea.id_tipo_informe_blue
   
    inner join clientes on informes.cliente = clientes.cliente
    inner join users on subinformes.asignado = users.user_id
    inner join padrones on (informes.identificador = padrones.identificador and informes.numero = padrones.numero)
    inner join identificadores on padrones.identificador = identificadores.identificador
    inner join country on identificadores.country_code = country.country_code
   
    left join (SELECT informe , detalle=STUFF(
    (SELECT '; ' + convert(varchar,desde,20) + ' a ' + convert(varchar,hasta,20) + ' (' + format((duracion/60*100+duracion%60*1),'00:00') + ') ' + pausa_fin AS [text()]
    FROM @logs_total XT 
    WHERE XT.informe = T.informe
    order by informe,desde 
    FOR XML PATH('')), 1, 2, '') 
    FROM @logs_total T
    GROUP BY informe) detalle on (detalle.informe = subinformes.informe)
   
   
    where subinformes.fecha_entregado between @V_fecha_desde and (@V_fecha_hasta+1)
    and subinformes.estado_informe IN ('F', 'K')
    /*and ISNULL(tipos_informe_tarea.genera_solicitud_doc, 0) = 0*/

   
    and (clientes.cliente = @V_cliente or @V_cliente = 0)
    /*and (subinformes.id_tipo_informe = @V_id_tipo_informe or @V_id_tipo_informe = 0)*/

    and (users.user_id = @V_user_id or @V_user_id = 0)
    order by
    subinformes.fecha_entregado asc 
    */

END 

 if (@V_accion = 'obtener_id') begin

  DECLARE @cnt int
  DECLARE @nuevo int = round(rand()*10000000,0)

  DECLARE @found bit = 0

  while (@found = 0) begin
   select @cnt = COUNT(*) from informes where informe = @nuevo
   if (@cnt = 0) begin
    set @found = 1   
   end
   else begin
    set @nuevo = round(rand()*10000000,0)
   end
  end

  SET @V_informe = @nuevo

 end


 /* Dada la contraparte, obtener qué tipos de informe se le pueden generar */
 if (@V_accion = 'tipos_informe') begin

  if (@V_id_tipo_informe) IS NULL

   select tipos_informe.id_tipo_informe, tipos_informe.nombre_tipo_informe,
     tipos_informe.tipo_informe, tipos_informe.version,
     contratos_items.item_contrato, contratos_items.id_contrato,
     contratos_items.producto, LN_contrapartes.cliente,
     contratos_items.moneda, contratos_items.precio_unitario
   from grupos_clientes 
   inner join LN_contrapartes on grupos_clientes.cliente = LN_contrapartes.cliente
   inner join contratos_grupos on grupos_clientes.grupo = contratos_grupos.grupo
   inner join contratos_items on (contratos_grupos.id_contrato = contratos_items.id_contrato
           and grupos_clientes.cliente = contratos_items.cliente)
   inner join productos on contratos_items.producto = productos.producto
   inner join tipos_informe on productos.grupo_informes = tipos_informe.grupo_informes
   where contratos_grupos.fecha_vigencia <= GETDATE()
   and contratos_grupos.estado_contrato = 'A'
   and LN_contrapartes.contraparte = @V_contraparte 
   and productos.estado_producto = 'A'
   and tipos_informe.vigente = 1
   and tipos_informe.selec_nuevo_informe = 1
   and (tipos_informe.cliente IS NULL or tipos_informe.cliente = (select cliente from LN_contrapartes
                   where contraparte = @V_contraparte ))

  else

   select tipos_informe.id_tipo_informe, tipos_informe.nombre_tipo_informe,
     tipos_informe.tipo_informe, tipos_informe.version,
     contratos_items.item_contrato, contratos_items.id_contrato,
     contratos_items.producto, LN_contrapartes.cliente,
     contratos_items.moneda, contratos_items.precio_unitario
   from grupos_clientes 
   inner join LN_contrapartes on grupos_clientes.cliente = LN_contrapartes.cliente
   inner join contratos_grupos on grupos_clientes.grupo = contratos_grupos.grupo
   inner join contratos_items on (contratos_grupos.id_contrato = contratos_items.id_contrato
           and grupos_clientes.cliente = contratos_items.cliente)
   inner join productos on contratos_items.producto = productos.producto
   inner join tipos_informe on productos.grupo_informes = tipos_informe.grupo_informes
   where contratos_grupos.fecha_vigencia <= GETDATE()

   and contratos_grupos.estado_contrato = 'A'
   and LN_contrapartes.contraparte = @V_contraparte 
   and tipos_informe.id_tipo_informe = @V_id_tipo_informe
   and productos.estado_producto = 'A'
   and tipos_informe.vigente = 1
   and tipos_informe.selec_nuevo_informe = 1
   and (tipos_informe.cliente IS NULL or tipos_informe.cliente = (select cliente from LN_contrapartes
                   where contraparte = @V_contraparte ))


 end


 /* INICIO TIPOS DE INFORME DE BLUE CORRESPONDIENTE A LA FAMILIA DE LA CONTRAPARTE  */
 if (@V_accion = 'tipos_informe_familia') 
  BEGIN
 
 SET @cliente=7855254
 SET @V_familia = 150
   select tipos_informe.id_tipo_informe, tipos_informe.nombre_tipo_informe,
       tipos_informe.tipo_informe, tipos_informe.version,
       contratos_items.item_contrato, contratos_items.id_contrato,
       contratos_items.producto, grupos_clientes.cliente,
       contratos_items.moneda, contratos_items.precio_unitario
     from grupos_clientes 
     inner join contratos_grupos on grupos_clientes.grupo = contratos_grupos.grupo
     inner join contratos_items on (contratos_grupos.id_contrato = contratos_items.id_contrato
             and grupos_clientes.cliente = contratos_items.cliente)
     inner join productos on contratos_items.producto = productos.producto
     inner join tipos_informe on productos.grupo_informes = tipos_informe.grupo_informes
     inner join LN_familias_tipo_informe on LN_familias_tipo_informe.id_tipo_informe = tipos_informe.id_tipo_informe
     where contratos_grupos.fecha_vigencia <= GETDATE()
     and contratos_grupos.fecha_vencimiento >= GETDATE()
     and contratos_grupos.estado_contrato = 'A'
     and grupos_clientes.cliente = @V_cliente
     and productos.estado_producto = 'A'
     and tipos_informe.vigente = 1
     and tipos_informe.selec_nuevo_informe = 1
     and (tipos_informe.cliente IS NULL or tipos_informe.cliente = @V_cliente)
     and LN_familias_tipo_informe.familia = @V_familia 



  END
 /* FIN TIPOS DE INFORME DE BLUE CORRESPONDIENTE A LA FAMILIA DE LA CONTRAPARTE  */




 /** Similar a la accion anterior pero pasando el parámetro del cliente, no la contraparte */
 if (@V_accion = 'tipos_informe_cliente') begin

  if (@V_id_tipo_informe) IS NULL

   select tipos_informe.id_tipo_informe, tipos_informe.nombre_tipo_informe,
     tipos_informe.tipo_informe, tipos_informe.version,
     contratos_items.item_contrato, contratos_items.id_contrato,
     contratos_items.producto, grupos_clientes.cliente,
     contratos_items.moneda, contratos_items.precio_unitario
   from grupos_clientes 
   inner join contratos_grupos on grupos_clientes.grupo = contratos_grupos.grupo
   inner join contratos_items on (contratos_grupos.id_contrato = contratos_items.id_contrato
           and grupos_clientes.cliente = contratos_items.cliente)
   inner join productos on contratos_items.producto = productos.producto
   inner join tipos_informe on productos.grupo_informes = tipos_informe.grupo_informes
   where contratos_grupos.fecha_vigencia <= GETDATE()
   and contratos_grupos.fecha_vencimiento >= GETDATE()
   and contratos_grupos.estado_contrato = 'A'
   and grupos_clientes.cliente = @V_cliente
   and productos.estado_producto = 'A'
   and tipos_informe.vigente = 1
   and tipos_informe.selec_nuevo_informe = 1

   group by tipos_informe.id_tipo_informe, tipos_informe.nombre_tipo_informe,
     tipos_informe.tipo_informe, tipos_informe.version,
     contratos_items.item_contrato, contratos_items.id_contrato,
     contratos_items.producto, grupos_clientes.cliente,
     contratos_items.moneda, contratos_items.precio_unitario

  else

   select tipos_informe.id_tipo_informe, tipos_informe.nombre_tipo_informe,
     tipos_informe.tipo_informe, tipos_informe.version,
     contratos_items.item_contrato, contratos_items.id_contrato,
     contratos_items.producto, grupos_clientes.cliente,
     contratos_items.moneda, contratos_items.precio_unitario
   from grupos_clientes 
   inner join contratos_grupos on grupos_clientes.grupo = contratos_grupos.grupo
   inner join contratos_items on (contratos_grupos.id_contrato = contratos_items.id_contrato
           and grupos_clientes.cliente = contratos_items.cliente)
   inner join productos on contratos_items.producto = productos.producto
   inner join tipos_informe on productos.grupo_informes = tipos_informe.grupo_informes
   where contratos_grupos.fecha_vigencia <= GETDATE()
   and contratos_grupos.fecha_vencimiento >= GETDATE()
   and contratos_grupos.estado_contrato = 'A'
   and grupos_clientes.cliente = @V_cliente
   and tipos_informe.id_tipo_informe = @V_id_tipo_informe
   and productos.estado_producto = 'A'
   and tipos_informe.vigente = 1
   and tipos_informe.selec_nuevo_informe = 1
   and (tipos_informe.cliente IS NULL or tipos_informe.cliente = @V_cliente)

 end

 if (upper(@V_accion) = 'LISTA_TAREAS')
 begin
 select tipos_informe.id_tipo_informe, tipos_informe.nombre_tipo_informe
  from tipos_informe inner join tipos_subinformes on
  tipos_informe.id_tipo_informe = tipos_subinformes.id_tipo_subinforme
  where tipos_informe.vigente = 1
  group by tipos_informe.id_tipo_informe, tipos_informe.nombre_tipo_informe
  order by tipos_informe.nombre_tipo_informe

 end



 if (@V_accion = 'users_informe') 
 begin
  select distinct users.user_id, users.first_name, users.last_name, isnull(users.first_name,'') + ' ' + isnull(users.last_name,'') as usuario,users.username,
  /*ROLES.nombre_rol,ROLES.activo,ROLES.country_code,*/ROLES.PLATAFORMA,users.email,users.password as clave,users.active_user as estado_login
    from users 
    inner join usuarios_roles on users.user_id = usuarios_roles.user_id
    inner join roles_tipo_informe on usuarios_roles.rol = roles_tipo_informe.rol
    inner join idiomas on usuarios_roles.idioma = idiomas.idioma
    inner join roles on roles_tipo_informe.rol = roles.rol
    where 
    ROLES.plataforma = 'BLUE' AND ROLES.ACTIVO = 1 and users.user_id not in (29428643,62352520,44240542,6946599,29008337,608083,35426548,11069147)
    /*and idiomas.codigo_idioma = 'ES'
     and roles.datamanager = 1*/

    and users.active_user = 'Y'
    order by isnull(users.first_name,'') + ' ' + isnull(users.last_name,'')

 end

 if (@V_accion = 'users_produccion') 
 begin
  select distinct users.user_id, users.first_name, users.last_name, isnull(users.first_name,'') + ' ' + isnull(users.last_name,'') as usuario,users.username,
  /*ROLES.nombre_rol,ROLES.activo,ROLES.country_code,*/ROLES.PLATAFORMA,users.email,users.password as clave,users.active_user as estado_login
    from users 
    inner join usuarios_roles on users.user_id = usuarios_roles.user_id
    inner join roles_tipo_informe on usuarios_roles.rol = roles_tipo_informe.rol
    inner join idiomas on usuarios_roles.idioma = idiomas.idioma
    inner join roles on roles_tipo_informe.rol = roles.rol
    where 
    ROLES.plataforma = 'BLUE' AND ROLES.ACTIVO = 1
    /*and idiomas.codigo_idioma = 'ES'
     and roles.datamanager = 1*/


    order by isnull(users.first_name,'') + ' ' + isnull(users.last_name,'')

 end


 /* Dado un tipo de informe, obtener qué usuarios de producción se pueden vincular al nuevo informe como "Responsable" o "Datamanager" */
 if (@V_accion = 'responsables_informe') 
 begin

  select users.user_id, users.first_name, users.last_name
  from users 
  inner join usuarios_roles on users.user_id = usuarios_roles.user_id
  inner join roles_tipo_informe on usuarios_roles.rol = roles_tipo_informe.rol
  inner join idiomas on usuarios_roles.idioma = idiomas.idioma
  inner join roles on roles_tipo_informe.rol = roles.rol
  where roles_tipo_informe.id_tipo_informe = @V_id_tipo_informe
  and idiomas.codigo_idioma = 'ES'
  and roles.datamanager = 1
  and users.active_user = 'Y'

 end

 /* Dado un tipo de informe (padre), obtener qué usuarios de producción se pueden vincular a la tarea de gestión de documentación como "Asignado" */
 if (@V_accion = 'asignables_gestion') begin

  select users.user_id, users.first_name, users.last_name
  from users 
  inner join usuarios_roles on users.user_id = usuarios_roles.user_id
  inner join roles_tipo_informe on usuarios_roles.rol = roles_tipo_informe.rol
  inner join idiomas on usuarios_roles.idioma = idiomas.idioma
  inner join roles on roles_tipo_informe.rol = roles.rol
  inner join tipos_subinformes on roles_tipo_informe.id_tipo_informe = tipos_subinformes.id_tipo_subinforme
  inner join tipos_informe on tipos_subinformes.id_tipo_subinforme = tipos_informe.id_tipo_informe
  where tipos_subinformes.id_tipo_informe = @V_id_tipo_informe
  and idiomas.codigo_idioma = 'ES'
  and tipos_informe.genera_solicitud_doc = 1
  and users.active_user = 'Y'

 end


 /* Dado un tipo de informe, obtener qué usuarios de producción se pueden vincular al mismo como "Asignado" */
 if (@V_accion = 'usuarios_asignacion') begin

  select users.user_id, users.first_name, users.last_name
  from users 
  inner join usuarios_roles on users.user_id = usuarios_roles.user_id
  inner join roles_tipo_informe on usuarios_roles.rol = roles_tipo_informe.rol
  inner join idiomas on usuarios_roles.idioma = idiomas.idioma
  inner join roles on roles_tipo_informe.rol = roles.rol
  where roles_tipo_informe.id_tipo_informe = @V_id_tipo_informe
  and idiomas.codigo_idioma = 'ES'
  and users.active_user = 'Y'

 end
 
 if (@V_accion = 'UPD_HIST_INFORME')
 BEGIN
  update informes set historial_informe = convert(varchar(max),historial_informe) +  '<br>' + @V_notas_informe where informe = @V_informe and informe_padre is null 
 END

 if (@V_accion = 'archivo_informe')
 begin
   insert into archivos_informe (path_archivo,fecha_subido,subido_por,mime_type,informe)
   values (@V_path_archivo,getdate(),@V_user_id,@V_extension_archivo,@V_informe)
   
 end

 if (@V_accion = 'list_archivos')
 begin
 select archivos_informe.*,users.last_name,users.first_name from archivos_informe inner join users on archivos_informe.subido_por=users.user_id where informe = @V_informe


/* insert into archivos_informe (path_archivo,fecha_subido,subido_por,mime_type,informe)
values (@V_path_archivo,getdate(),@usuario,@V_extension_archivo,@V_informe)
*/

 end

 /* Dada una contraparte, producto y los datos del informe da de alta el informe padre y las subtareas de producción */
 if (@V_accion = 'UPD_informe') begin 
  /* debe asociarse el informe a un item de contrato, obligatoriamente */
  /*if (@V_item_contrato !=-1  and @V_contraparte IS NOT NULL and @V_user_id IS NOT NULL /*and @V_id_tipo_informe IS NOT NULL*/) 
   begin*/

   
/*
EXEC LN_Blue 'UPD_informe',195057,100566624,422946826,NULL,NULL,NULL,1,'P',793639331,NULL,28750576,2254875,NULL,NULL,'2022-11-24 12:02:00',NULL,NULL,'por','2022-11-23 18:23:00'
select * from informes where fecha_ingreso > '2022-11-24 11:00:00.627'
select * from informes where informe = 100566624
*/


   DECLARE @V_idioma1 smallint = NULL
   DECLARE @V_filial1 smallint = NULL

   select @V_idioma1 = idioma from idiomas where codigo_iso = @V_idioma_iso
   select @V_filial1 = filial from filiales where country_code = 'AR'

   select @cliente = LN_contrapartes.cliente,
     @identificador = LEFT(padrones.identificador,10),
     @abreviatura = LEFT(identificadores.abreviatura,10),
     @numero = LEFT(padrones.identificacion,50),
     @nombre_persona = LEFT(padrones.nombre_persona,200),
     @nombre = LEFT(LN_contrapartes.nombre_contacto,50),
     @email = LEFT(LN_contrapartes.email_contacto,50),
     @telefono = LEFT(LN_contrapartes.telefono_contacto,30),
     @nombre_cliente = LEFT(clientes.nombre_cliente, 200)
   from LN_contrapartes 
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador
   inner join clientes on LN_contrapartes.cliente = clientes.cliente
   where LN_contrapartes.contraparte = @V_contraparte

   select @nombre_tipo_informe = nombre_tipo_informe + ' (' + tipo_informe + ' ' + version + ')',
     @grupo_informes = grupo_informes
   from tipos_informe
   where id_tipo_informe = @V_id_tipo_informe

   set @id=@V_informe 



   if (@id IS NOT NULL) begin
   
    DECLARE @hist1 varchar(max) = @preffix + 'Actualización del informe.'

    if (@V_estado_informe = 'A' or @V_estado_informe = 'T' or @V_estado_informe = 'P') begin     

     select @nombre_asignado = isnull(first_name,'') + ' ' + isnull(last_name, '')
     from users where user_id = @V_asignado

     SET @hist1 = @hist1 + CHAR(13) + CHAR(10) + @preffix + 'Asignación del informe a ' + @nombre_asignado
    end

    if (@V_estado_informe = 'T' or @V_estado_informe = 'P') begin
     SET @hist1 = @hist1 + CHAR(13) + CHAR(10) + @preffix + 'Aceptación del informe.'
    end

    if (@V_estado_informe = 'P') begin
     SET @hist1 = @hist1 + CHAR(13) + CHAR(10) + @preffix + 'Informe puesto en gestión.'
    end
    
    DECLARE @fecha_limite1       datetime = dateadd(second,-1,dateadd(day,1,@V_fecha_limite_doc))
    DECLARE @fecha_comprometida1 datetime = dateadd(second,-1,dateadd(day,1,@V_fecha_comprometida))

    UPDATE informes SET /*informe=@id, cliente=@cliente,*/ identificador=@identificador, numero=@numero, fecha_ingreso=@ahora, id_tipo_informe=@V_id_tipo_informe,
     objeto_informe='INFORME GENERADO A TRAVES DE BACKEND - CARGA DE INFORMES '  + CHAR(13) + CHAR(10) + isnull(@V_objeto_informe, ''), 
     historial_informe= convert(varchar(max),historial_informe) +  CHAR(13) + CHAR(10) +   @hist1, ingresado_por=@V_ingresado_por, idioma=@V_idioma1, filial=@V_filial1, prioridad=@V_prioridad, datamanager=@V_datamanager,
     asignado=iif(@V_estado_informe = 'A' OR @V_estado_informe = 'T' OR @V_estado_informe = 'P', @V_asignado, NULL), estado_informe=@V_estado_informe, 
     fecha_asignado=iif(@V_estado_informe = 'A' OR @V_estado_informe = 'T' OR @V_estado_informe = 'P', @ahora, NULL),
     fecha_aceptacion=iif(@V_estado_informe = 'T' OR @V_estado_informe = 'P', @ahora, NULL),
     excepcion=0, excepcion_prod=0, notificar_cliente=0, precio=@precio, moneda=@moneda,
     /*fecha_inicio = @V_fecha_inicio,*/
     fecha_inicio = iif(@V_estado_informe in ('A','P','E'),@V_fecha_inicio,fecha_inicio),
     fecha_iniciado = iif(@V_estado_informe in ('A','P','E'),@V_fecha_inicio,fecha_inicio),
     
     fecha_entregado= iif(@V_estado_informe in ('F','K'),GETDATE(),fecha_entregado),
     fecha_aprobacion= iif(@V_estado_informe in ('F','K'),GETDATE(),fecha_aprobacion),

     
     nombre_contacto_1=@nombre, 
     email_contacto_1=@email, 
     telefono_contacto_1=@telefono,
     fecha_limite_doc=@fecha_limite1,
     /*fecha_comprometida=@fecha_comprometida1*/
     fecha_comprometida=@V_fecha_comprometida
    WHERE informe = @id and idreg=@id



    SET @V_informe = @id


    if (@V_producto_led > 0) begin
     /* Actualización de la tabla LED para vincular el informe al producto */
     EXEC LN_demo_ 'UPDATE',@V_contraparte,@cliente,@V_producto_led,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,@id
    end


    SELECT @id AS informe

   end


  


 end

 if (upper(@V_accion) = 'CIERRE_TOTAL') 
 begin
   DECLARE @servicio_contratadoCierre INT = NULL
   DECLARE @InfPadreCierre int = null
   DECLARE @GestionCierre int = null
   DECLARE @ClienteCierre int = null
   /*
    select @cliente = LN_contrapartes.cliente,
    @identificador = LEFT(padrones.identificador,10),
    @abreviatura = LEFT(identificadores.abreviatura,10),
    @numero = LEFT(padrones.identificacion,50),
    @nombre_persona = LEFT(padrones.nombre_persona,200),
    @nombre = LEFT(LN_contrapartes.nombre_contacto,50),
    @email = LEFT(LN_contrapartes.email_contacto,50),
    @telefono = LEFT(LN_contrapartes.telefono_contacto,30),
    @nombre_cliente = LEFT(clientes.nombre_cliente, 200),
    @servicio_contratadoCierre= LN_contrapartes.servicio_contratado 
    from LN_contrapartes 
    inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
    inner join identificadores on padrones.identificador = identificadores.identificador
    inner join clientes on LN_contrapartes.cliente = clientes.cliente
    where LN_contrapartes.contraparte = @V_contraparte
    */


   /*select @InfPadreCierre=informe_padre FROM informes where informe = @V_informe*/


   /*select @servicio_contratadoCierre,@InfPadreCierre*/
   
   /*AVERIGUAMOS LOS DATOS DE INFORME PADRE Y GESTION */
   select distinct @servicio_contratadoCierre= ln_contrapartes.servicio_contratado,@InfPadreCierre= informes.informe_padre,@GestionCierre=ln_demo.gestion,@ClienteCierre=informes.cliente  
   from informes inner join ln_demo on informes.informe_padre=ln_demo.informe 
   inner join ln_contrapartes on ln_demo.contraparte=ln_contrapartes.contraparte
   where informes.informe  = @V_informe /*and estado_informe not in ('N','C','K','X')*/
   
   set @id=@V_informe 

   if (@id IS NOT NULL) begin

    /*DECLARE @histT varchar(max) = @preffix + 'Creación de la tarea.'*/
    DECLARE @histCierre varchar(max) = @preffix 

    if (@V_estado_informe = 'A' or @V_estado_informe = 'T' or @V_estado_informe = 'P') begin     

     select @nombre_asignado = isnull(first_name,'') + ' ' + isnull(last_name, '')
     from users where user_id = @V_asignado

     SET @hist1 = @histCierre + CHAR(13) + CHAR(10) + @preffix + 'Asignación de la tarea a ' + @nombre_asignado
    end

    if (@V_estado_informe = 'T' or @V_estado_informe = 'P') begin
     SET @hist1 = @histCierre + CHAR(13) + CHAR(10) + @preffix + 'Aceptación de la tarea.'
    end

    if (@V_estado_informe = 'P') begin
     SET @hist1 = @histCierre + CHAR(13) + CHAR(10) + @preffix + 'Tarea puesta en gestión.'
    end

    if (@V_estado_informe = 'E') begin
     SET @hist1 = @histCierre + CHAR(13) + CHAR(10) + @preffix + 'Tarea puesta en proceso.'
    end
    if (@V_estado_informe = 'N') begin
     SET @hist1 = @histCierre + CHAR(13) + CHAR(10) + @preffix + 'Tarea anulada.'
    end

    if (@V_estado_informe = 'W') begin
     SET @hist1 = @histCierre + CHAR(13) + CHAR(10) + @preffix + 'Tarea puesta en pausa.'
    end
    
    if (@V_estado_informe = 'F') begin
     SET @hist1 = @histCierre + CHAR(13) + CHAR(10) + @preffix + 'Tarea finalizada.'
    end

    if (@V_estado_informe = 'M') begin
     SET @hist1 = @histCierre + CHAR(13) + CHAR(10) + @preffix + 'Tarea a completar.'
    end

    if (@V_estado_informe = 'K') begin
     SET @hist1 = @histCierre + CHAR(13) + CHAR(10) + @preffix + 'Tarea aprobada.'
    end

    /*ACTUALIZA LA TAREA */
    UPDATE informes SET estado_informe=@V_estado_informe WHERE informe = @id and idreg=@id

    SET @V_informe = @id

    /*INSERTA LOG DE TAREA */
    insert into informes_log (informe,horario,user_id,operacion) values (@id,getdate(),@V_user_id,iif(@V_estado_informe in ('P','E'),'I',iif(@V_estado_informe in ('W','M'),'P',iif(@V_estado_informe in ('F','K','C','N'),'F','F'))))

    /* TRAZABILIDAD DEL UPDATE DE TAREAS */
    
    exec insertar_trazabilidad 'ACTUALIZACION DE TAREAS',@ClienteCierre,'UPDTASKS','BACK',@V_contraparte,@V_user_id,NULL,@servicio_contratadoCierre
    


/* select ln_contrapartes.servicio_contratado,informes.informe_padre,ln_demo.gestion 
from informes inner join ln_demo on informes.informe_padre=ln_demo.informe 
inner join ln_contrapartes on ln_demo.contraparte=ln_contrapartes.contraparte
where informe_padre = 100601899 and estado_informe not in ('N','C','K','X')
*/

   /*ACTUALIZAMOS TODAS LAS TAREAS Y EL INFORME QUE HAYA QUE APROBAR */
   if (@InfPadreCierre is not null )
   begin
    update informes set estado_informe='K',fecha_aprobacion=getdate(),aprobado_por=@V_user_id
    from informes inner join ln_demo on informes.informe_padre=ln_demo.informe 
    inner join ln_contrapartes on ln_demo.contraparte=ln_contrapartes.contraparte
    where informe_padre = @InfPadreCierre and estado_informe not in ('N','C','K','X')

    /*PUBLICAMOS EL INFORME */
    UPDATE ln_demo set visible=1,fecha_publicacion=getdate() where contraparte=@V_contraparte AND GESTION = @GestionCierre

    
    exec insertar_trazabilidad 'CIERRE Y PUBLICACION',@ClienteCierre,'CIERREINFORME','BACK',@V_contraparte,@V_user_id,NULL,@servicio_contratadoCierre
    
   end
   SELECT @id AS informe

   end
 end


 /* Dada una contraparte, producto y los datos del informe da de alta el informe padre y las subtareas de producción */
 if (upper(@V_accion) = 'UPD_TAREA') begin 
   DECLARE @V_idiomaT smallint = NULL
   DECLARE @V_filialT smallint = NULL
   DECLARE @servicio_contratado INT = NULL

   select @V_idioma1 = idioma from idiomas where codigo_iso = @V_idioma_iso
   select @V_filial1 = filial from filiales where country_code = 'AR'

   select @cliente = LN_contrapartes.cliente,
     @identificador = LEFT(padrones.identificador,10),
     @abreviatura = LEFT(identificadores.abreviatura,10),
     @numero = LEFT(padrones.identificacion,50),
     @nombre_persona = LEFT(padrones.nombre_persona,200),
     @nombre = LEFT(LN_contrapartes.nombre_contacto,50),
     @email = LEFT(LN_contrapartes.email_contacto,50),
     @telefono = LEFT(LN_contrapartes.telefono_contacto,30),
     @nombre_cliente = LEFT(clientes.nombre_cliente, 200),
     @servicio_contratado= LN_contrapartes.servicio_contratado 
   from LN_contrapartes 
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador
   inner join clientes on LN_contrapartes.cliente = clientes.cliente
   where LN_contrapartes.contraparte = @V_contraparte

   select @nombre_tipo_informe = nombre_tipo_informe + ' (' + tipo_informe + ' ' + version + ')',
     @grupo_informes = grupo_informes,@V_id_tipo_informe=id_tipo_informe 
   from tipos_informe where id_tipo_informe  in (SELECT id_tipo_informe FROM informes where informe = @V_informe)
   
   set @id=@V_informe 

   if (@id IS NOT NULL) begin

    /*DECLARE @histT varchar(max) = @preffix + 'Creación de la tarea.'*/
    DECLARE @histT varchar(max) = @preffix 

    if (@V_estado_informe = 'A' or @V_estado_informe = 'T' or @V_estado_informe = 'P') begin     

     select @nombre_asignado = isnull(first_name,'') + ' ' + isnull(last_name, '')
     from users where user_id = @V_asignado

     SET @hist1 = @histT + CHAR(13) + CHAR(10) + @preffix + 'Asignación de la tarea a ' + @nombre_asignado
    end

    if (@V_estado_informe = 'T' or @V_estado_informe = 'P') begin
     SET @hist1 = @histT + CHAR(13) + CHAR(10) + @preffix + 'Aceptación de la tarea.'
    end

    if (@V_estado_informe = 'P') begin
     SET @hist1 = @histT + CHAR(13) + CHAR(10) + @preffix + 'Tarea puesta en gestión.'
    end

    if (@V_estado_informe = 'E') begin
     SET @hist1 = @histT + CHAR(13) + CHAR(10) + @preffix + 'Tarea puesta en proceso.'
    end
    if (@V_estado_informe = 'N') begin
     SET @hist1 = @histT + CHAR(13) + CHAR(10) + @preffix + 'Tarea anulada.'
    end

    if (@V_estado_informe = 'W') begin
     SET @hist1 = @histT + CHAR(13) + CHAR(10) + @preffix + 'Tarea puesta en pausa.'
    end
    
    if (@V_estado_informe = 'F') begin
     SET @hist1 = @histT + CHAR(13) + CHAR(10) + @preffix + 'Tarea finalizada.'
    end

    if (@V_estado_informe = 'M') begin
     SET @hist1 = @histT + CHAR(13) + CHAR(10) + @preffix + 'Tarea a completar.'
    end

    if (@V_estado_informe = 'K') begin
     SET @hist1 = @histT + CHAR(13) + CHAR(10) + @preffix + 'Tarea aprobada.'
    end

    DECLARE @fecha_limiteT       datetime = dateadd(second,-1,dateadd(day,1,@V_fecha_limite_doc))
    DECLARE @fecha_comprometidaT datetime = dateadd(second,-1,dateadd(day,1,@V_fecha_comprometida))

    set @fecha_comprometidaT = @V_fecha_comprometida

    UPDATE informes SET identificador=@identificador, numero=@numero, fecha_ingreso=@ahora, id_tipo_informe=@V_id_tipo_informe,
     objeto_informe='TAREA GENERADA '  + CHAR(13) + CHAR(10) + isnull(@V_objeto_informe, ''), 
     historial_informe=convert(varchar(max),historial_informe) + CHAR(13) + CHAR(10) + @hist1, ingresado_por=@V_ingresado_por, idioma=@V_idioma1, filial=@V_filial1, prioridad=@V_prioridad, datamanager=@V_datamanager,
     
     /*asignado=iif(@V_estado_informe = 'A' OR @V_estado_informe = 'T' OR @V_estado_informe = 'P', @V_asignado, NULL), */
     
     asignado=@V_asignado, 

     estado_informe=@V_estado_informe, 
     fecha_asignado=iif(asignado != @V_asignado, @ahora, fecha_asignado),
     fecha_aceptacion=iif(@V_estado_informe = 'T' OR @V_estado_informe = 'P', @ahora, fecha_aceptacion),


/* fecha_asignado=iif(@V_estado_informe = 'A' OR @V_estado_informe = 'T' OR @V_estado_informe = 'P', @ahora, NULL),
fecha_aceptacion=iif(@V_estado_informe = 'T' OR @V_estado_informe = 'P', @ahora, NULL),
*/
    
/* fecha_asignado=getdate(),
fecha_aceptacion=getdate(),
*/
 
     
     excepcion=0, excepcion_prod=0, notificar_cliente=0, precio=@precio, moneda=@moneda,
     
     fecha_inicio = iif(@V_estado_informe in ('A','P','E'),@V_fecha_inicio,fecha_inicio),
     fecha_iniciado = iif(@V_estado_informe in ('A','P','E'),@V_fecha_inicio,fecha_inicio),
     
     fecha_entregado= iif(@V_estado_informe in ('F','K'),GETDATE(),fecha_entregado),
     fecha_aprobacion= iif(@V_estado_informe in ('F','K'),GETDATE(),fecha_aprobacion),
     nombre_contacto_1=@nombre, email_contacto_1=@email, telefono_contacto_1=@telefono,fecha_limite_doc=@fecha_limite1,
     fecha_comprometida=@fecha_comprometidaT

    WHERE informe = @id and idreg=@id
    SET @V_informe = @id

/*
AGB UPD LOG INFORMES
*/

    insert into informes_log (informe,horario,user_id,operacion)
    values (@id,getdate(),@V_user_id,iif(@V_estado_informe in ('P','E'),'I',iif(@V_estado_informe in ('W','M'),'P',iif(@V_estado_informe in ('F','K','C','N'),'F','F'))))

    /* TRAZABILIDAD DEL UPDATE DE TAREAS */
    exec insertar_trazabilidad 'ACTUALIZACION DE TAREAS',@cliente,'UPDTASKS','BACK',@V_contraparte,@V_user_id,NULL,@servicio_contratado


    /* READY TO START */
     if (@V_estado_informe in ('K','F')) /* SOLO SI LA TAREA ES APROBADA */
     begin
      declare @triggerPadre int = null

      select @nombre_tipo_informe= nombre_tipo_informe + ' (' + tipo_informe + ' ' + version + ')',@grupo_informes = grupo_informes,@V_id_tipo_informe = tipos_informe.id_tipo_informe,
      @triggerPadre= informes.informe_padre
      from tipos_informe inner join informes on tipos_informe.id_tipo_informe = informes.id_tipo_informe
      where informes.informe = @V_informe

/* select  nombre_tipo_informe + ' (' + tipo_informe + ' ' + version + ')', grupo_informes, tipos_informe.id_tipo_informe,
informes.informe_padre,informes.idTarea,LNTHijo.idTarea,LNTHijo.id_tipo_informe_blue,LNTHijo.*
from tipos_informe inner join informes on tipos_informe.id_tipo_informe = informes.id_tipo_informe
left join ln_tareas on informes.id_tipo_informe=LN_tareas.id_tipo_informe_blue 
left join ln_tareas LNTHijo on ln_tareas.idTarea=LNTHijo.idTarea_Padre
where informes.informe in (/*100601412,100601409*/
100601411) and LNTHijo.id_tipo_informe_blue is not null
*/

/*
select informe_padre,ready_to_start, * from informes where informe_padre=100601406
update informes set estado_informe='A',ready_to_start=0 where informe_padre=100601406

update informes set estado_informe='A',ready_to_start=1 where informe_padre=100601406 and id_tipo_informe = 4071729
*/

/*
if (@V_id_tipo_informe = 4071729)
begin
update informes set ready_to_start=1,ready_to_start_trigger_task=@V_informe,ready_to_start_date=getdate() where informe_padre=@triggerPadre and id_tipo_informe=1767927
end
*/

      





/* update informes set estado_informe=estado_informe,
ready_to_start=1,ready_to_start_user_id=@V_user_id,ready_to_start_date=getdate(),ready_to_start_trigger_task=@V_informe 
where informe_padre = @triggerPadre and id_tipo_informe in (select id_tipo_informe from tipos_informes_requeridos where id_tipo_informe_requerido=@V_id_tipo_informe) and estado_informe='A'
*/

      update informes set estado_informe=estado_informe,
      ready_to_start=1,ready_to_start_user_id=@V_user_id,ready_to_start_date=getdate(),ready_to_start_trigger_task=@V_informe 
      where informe_padre = @triggerPadre and id_tipo_informe in (select id_tipo_informe_blue from LN_tareas where idTarea_Padre in (select idTarea from LN_tareas where id_tipo_informe_blue=@V_id_tipo_informe)) 
      and estado_informe='A'

      /* TRAZABILIDAD DEL READY 2 START*/
      exec insertar_trazabilidad 'TAREAS DEPENDIENTES LISTAS PARA INICIAR',@cliente,'READYTOSTART','BACK',@V_contraparte,@V_user_id,NULL,@servicio_contratado
     end
    /*READY TO START */
    SELECT @id AS informe

   end
 end

  /* PAUSAR TAREAS */
 if (upper(@V_accion) = 'PAUSA_TAREA') 
 begin
  /*AGB */
  
  update informes set pausa = @V_pausa_tarea where informe = @V_informe and idreg=@V_informe and informe_padre is not null
/*
AGB UPD LOG INFORMES
*/
   
  
  
  insert into informes_log (informe,horario,user_id,operacion)
  values (@V_informe,getdate(),@V_user_id,iif(@V_pausa_tarea = 1,'P','I'))
  
  select @V_informe as tarea,@V_pausa_tarea as pausa,@V_informe as ID,@V_user_id as usuario,iif(@V_pausa_tarea = 1,'P','I') as operacion

  
 end


 
 /* Dada una contraparte, producto y los datos del informe da de alta el informe padre y las subtareas de producción */
 if (@V_accion = 'ingresar_informe') begin 

  /* debe asociarse el informe a un item de contrato, obligatoriamente */
  if (@V_item_contrato IS NOT NULL and @V_contraparte IS NOT NULL and @V_user_id IS NOT NULL and @V_id_tipo_informe IS NOT NULL) begin

   
   DECLARE @V_idioma smallint = NULL
   DECLARE @V_filial smallint = NULL

   select @V_idioma = idioma from idiomas where codigo_iso = @V_idioma_iso
   select @V_filial = filial from filiales where country_code = 'AR'

   select @cliente = LN_contrapartes.cliente,
     @identificador = LEFT(padrones.identificador,10),
     @abreviatura = LEFT(identificadores.abreviatura,10),
     @numero = LEFT(padrones.identificacion,50),
     @nombre_persona = LEFT(padrones.nombre_persona,200),
     @nombre = LEFT(LN_contrapartes.nombre_contacto,50),
     @email = LEFT(LN_contrapartes.email_contacto,50),
     @telefono = LEFT(LN_contrapartes.telefono_contacto,30),
     @nombre_cliente = LEFT(clientes.nombre_cliente, 200)
   from LN_contrapartes 
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador
   inner join clientes on LN_contrapartes.cliente = clientes.cliente
   where LN_contrapartes.contraparte = @V_contraparte


   select @precio = isnull(precio_unitario, 0),
     @moneda = moneda,
     @id_contrato = id_contrato
   from contratos_items
   where item_contrato = @V_item_contrato

   select @nombre_tipo_informe = nombre_tipo_informe + ' (' + tipo_informe + ' ' + version + ')',
     @grupo_informes = grupo_informes
   from tipos_informe
   where id_tipo_informe = @V_id_tipo_informe

   /* obtener nuevo ID de informe */


   exec @id = Genera_ID_Informe_2022 @cliente,null



   if (@id IS NOT NULL) begin

    DECLARE @hist varchar(max) = @preffix + 'Creación del informe.'

    if (@V_estado_informe = 'A' or @V_estado_informe = 'T' or @V_estado_informe = 'P') begin     

     select @nombre_asignado = isnull(first_name,'') + ' ' + isnull(last_name, '')
     from users where user_id = @V_asignado

     SET @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Asignación del informe a ' + @nombre_asignado
    end

    if (@V_estado_informe = 'T' or @V_estado_informe = 'P') begin
     SET @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Aceptación del informe.'
    end

    if (@V_estado_informe = 'P') begin
     SET @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Informe puesto en gestión.'
    end
    
    DECLARE @fecha_limite       datetime = dateadd(second,-1,dateadd(day,1,@V_fecha_limite_doc))
    DECLARE @fecha_comprometida datetime = dateadd(second,-1,dateadd(day,1,@V_fecha_comprometida))


    UPDATE informes SET /*informe=@id, cliente=@cliente,*/ identificador=@identificador, numero=@numero, fecha_ingreso=@ahora, id_tipo_informe=@V_id_tipo_informe,
     objeto_informe='INFORME GENERADO A TRAVES DE BACKEND FIDELITAS - CARGA DE REPORTS LED' + CHAR(13) + CHAR(10) + isnull(@V_objeto_informe, ''), 
     historial_informe=@hist, ingresado_por=@V_ingresado_por, idioma=@V_idioma, filial=@V_filial, prioridad=@V_prioridad, datamanager=@V_datamanager,
     asignado=iif(@V_estado_informe = 'A' OR @V_estado_informe = 'T' OR @V_estado_informe = 'P', @V_asignado, NULL), estado_informe=@V_estado_informe, fecha_asignado=iif(@V_estado_informe = 'A' OR @V_estado_informe = 'T' OR @V_estado_informe = 'P', @ahora, NULL),
     fecha_aceptacion=iif(@V_estado_informe = 'T' OR @V_estado_informe = 'P', @ahora, NULL),
     excepcion=0, excepcion_prod=0, notificar_cliente=0, precio=@precio, moneda=@moneda,fecha_inicio = @V_fecha_inicio,
     nombre_contacto_1=@nombre, email_contacto_1=@email, telefono_contacto_1=@telefono,fecha_limite_doc=@fecha_limite,fecha_comprometida=@fecha_comprometida
    WHERE informe = @id and idreg=@id


    /*
    
     INSERT INTO informes
     (informe, cliente, identificador, numero, fecha_ingreso, id_tipo_informe,
     objeto_informe, historial_informe, ingresado_por, idioma, filial, prioridad, datamanager,
     asignado, estado_informe, fecha_asignado, fecha_aceptacion,
     excepcion, excepcion_prod, notificar_cliente, precio, moneda,
     nombre_contacto_1, email_contacto_1, telefono_contacto_1,fecha_limite_doc,fecha_comprometida)
     VALUES
     (@id, @cliente, @identificador, @numero, @ahora, @V_id_tipo_informe,
     'INFORME GENERADO A TRAVES DE BACKEND FIDELITAS - CARGA DE REPORTS LED' + CHAR(13) + CHAR(10) + isnull(@V_objeto_informe, ''), 
     @hist,
     @V_ingresado_por, @V_idioma, @V_filial, @V_prioridad, @V_datamanager,
     iif(@V_estado_informe = 'A' OR @V_estado_informe = 'T' OR @V_estado_informe = 'P', @V_asignado, NULL),
     @V_estado_informe, 
     iif(@V_estado_informe = 'A' OR @V_estado_informe = 'T' OR @V_estado_informe = 'P', @ahora, NULL),
     iif(@V_estado_informe = 'T' OR @V_estado_informe = 'P', @ahora, NULL), 0, 0, 0, @precio, @moneda,
     @nombre, @email, @telefono, @fecha_limite, @fecha_comprometida)
    
     */


    /* Generación de las subtareas */
    DECLARE @tipo_subinforme INT = null
    DECLARE @orden tinyint = NULL
    DECLARE @prioridad_tarea tinyint = NULL

    DECLARE TiposSubinformes CURSOR FOR

    select tipos_subinformes.id_tipo_subinforme, tipos_subinformes.orden, isnull(tipos_informe.prioridad_default,0) as prioridad_default
    from tipos_subinformes inner join tipos_informe on tipos_subinformes.id_tipo_subinforme = tipos_informe.id_tipo_informe
    where tipos_subinformes.id_tipo_informe = @V_id_tipo_informe
    order by tipos_subinformes.orden

    OPEN TiposSubinformes
    FETCH NEXT FROM TiposSubinformes INTO @tipo_subinforme, @orden, @prioridad_tarea
    WHILE @@FETCH_STATUS = 0 BEGIN
     exec @tarea = Genera_ID_Informe_2022 @cliente,@id

     if (@tarea > 0) begin

      /* La prioridad de cada tarea depende del tipo de informe. Si está en 0 o nula toma la del informe padre */
      update informes set identificador=@identificador, numero=@numero, fecha_ingreso=@ahora, id_tipo_informe=@tipo_subinforme,
       objeto_informe=null, historial_informe=@preffix + 'Creación del informe.', ingresado_por=@V_ingresado_por, idioma=@V_idioma, 
       filial=@V_filial, prioridad=iif(@prioridad_tarea > 0, @prioridad_tarea, @V_prioridad), datamanager=@V_datamanager, estado_informe= 'I', orden=@orden, informe_padre=@id
      where informe = @tarea and idreg=@tarea      
      /*
       INSERT INTO informes
       (informe, cliente, identificador, numero, fecha_ingreso, id_tipo_informe,
       objeto_informe, historial_informe, ingresado_por, idioma, 
       filial, prioridad, datamanager, estado_informe, orden, informe_padre)
       VALUES
       (@tarea, @cliente, @identificador, @numero, @ahora, @tipo_subinforme,
       NULL, @preffix + 'Creación del informe.', @V_ingresado_por, @V_idioma,
       @V_filial, iif(@prioridad_tarea > 0, @prioridad_tarea, @V_prioridad), @V_datamanager, 'I', @orden, @id)
       */


     end

     FETCH NEXT FROM TiposSubinformes INTO @tipo_subinforme, @orden, @prioridad_tarea
    END
    CLOSE TiposSubinformes
    DEALLOCATE TiposSubinformes


    /* Generar el consumo del contrato, con T/C=1 */
    DECLARE @consumo INT = NULL

    INSERT INTO consumo_contratos
     (item_contrato, cliente, producto, tipo_cambio, informe, cantidad_consumida, user_id, consumido)
    VALUES
     (@V_item_contrato, @cliente, @V_producto, 1, @id, 1, @V_user_id, @ahora)

    SELECT @consumo = @@IDENTITY

    /* Generar información de log de consumo del contrato */
    SET @detalle_log = 'Nuevo informe ingresado para ' + @nombre_cliente + '<br>'
    SET @detalle_log = @detalle_log + 'Tipo de informe: ' + @nombre_tipo_informe + '<br>'
    SET @detalle_log = @detalle_log + 'Grupo de informes: ' + @grupo_informes + '<br>'
    SET @detalle_log = @detalle_log + 'Cantidad consumida: 1' + '<br>'
    SET @detalle_log = @detalle_log + 'Precio unitario: ' + ltrim(convert(varchar, @precio)) + ' ' + @moneda + '<br>'
    SET @detalle_log = @detalle_log + 'Tipo de cambio (USD): 1' + '<br>'
    SET @detalle_log = @detalle_log + 'Sujeto informado: ' + @nombre_persona + '<br>'
    SET @detalle_log = @detalle_log + 'Identificación: ' + @abreviatura + ' ' + @numero

    INSERT INTO contratos_log
     (fecha_log, user_id, id_contrato, item_contrato, consumo, detalle_log)
    VALUES
     (@ahora, @V_user_id, @id_contrato, @V_item_contrato, @consumo, @detalle_log)

    /* Devolución del ID del informe padre generado
     SELECT @id */


    SET @V_informe = @id


    if (@V_producto_led > 0) begin
     /* Actualización de la tabla LED para vincular el informe al producto */
     EXEC LN_demo_ 'UPDATE',@V_contraparte,@cliente,@V_producto_led,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,@id
    end


    SELECT @id AS informe

   end


  end


 end



 /** Cancelar un informe en producción y colocar en null el campo "informe" en la tabla **/
 if (@V_accion = 'cancelar_informe') begin
  if (@V_contraparte > 0 AND @V_informe > 0) begin

   DECLARE @producto INT = NULL
   

   select @cliente = LN_contrapartes.cliente,
     @producto = LN_demo.producto, 
     @estado = informes.estado_informe,
     @nombre_cliente = clientes.nombre_cliente,
     @nombre_persona = padrones.nombre_persona,
     @abreviatura = identificadores.abreviatura,
     @numero = padrones.numero,
     @nombre_tipo_informe = tipos_informe.nombre_tipo_informe + ' (' + tipos_informe.tipo_informe + ' ' + tipos_informe.version + ')',
     @grupo_informes = tipos_informe.grupo_informes,
     @V_item_contrato = consumo_contratos.item_contrato,
     @V_producto = productos.producto,
     @id_contrato = contratos_items.id_contrato

   from LN_demo 
   inner join LN_gestiones on LN_demo.contraparte = LN_gestiones.contraparte
   inner join informes on LN_demo.informe = informes.informe
   inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador
   inner join clientes on LN_contrapartes.cliente = clientes.cliente
   inner join tipos_informe on informes.id_tipo_informe = tipos_informe.id_tipo_informe
   inner join productos on tipos_informe.grupo_informes = productos.grupo_informes
   inner join consumo_contratos on informes.informe = consumo_contratos.informe
   inner join contratos_items on consumo_contratos.item_contrato = contratos_items.item_contrato
   where LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
      and LN_gestiones.vigente = 1

   and LN_demo.contraparte = @V_contraparte
   and LN_demo.informe = @V_informe

   if (@producto > 0 AND (@estado = 'X' OR @estado = 'I' OR @estado = 'A' OR @estado = 'T')) begin

    /* Cancelación del informe y sus tareas */
    update informes set 
     estado_informe = 'C',
     historial_informe = convert(varchar(max),historial_informe) + CHAR(13) + CHAR(10) +  @preffix + 'Cancelación del informe desde backend.'
    where informe = @V_informe

    update informes set
     estado_informe = 'C',
     historial_informe = convert(varchar(max),historial_informe) + CHAR(13) + CHAR(10) +  @preffix + 'Cancelación del informe desde backend.'
    where informe_padre = @V_informe


    /* Reversión del consumo en contratos con un valor negativo */
    INSERT INTO consumo_contratos
     (item_contrato, cliente, producto, tipo_cambio, informe, cantidad_consumida, user_id, consumido)
    VALUES
     (@V_item_contrato, @cliente, @V_producto, 1, @V_informe, -1, @V_user_id, @ahora)

    SET @consumo = @@IDENTITY

    /* Generar información de log de consumo del contrato */
    SET @detalle_log = 'Cancelación en backend del informe ingresado para ' + @nombre_cliente + '<br>'
    SET @detalle_log = @detalle_log + 'Tipo de informe: ' + @nombre_tipo_informe + '<br>'
    SET @detalle_log = @detalle_log + 'Grupo de informes: ' + @grupo_informes + '<br>'
    SET @detalle_log = @detalle_log + 'Cantidad: 1' + '<br>'
    SET @detalle_log = @detalle_log + 'Sujeto informado: ' + @nombre_persona + '<br>'
    SET @detalle_log = @detalle_log + 'Identificación: ' + @abreviatura + ' ' + @numero

    INSERT INTO contratos_log
     (fecha_log, user_id, id_contrato, item_contrato, consumo, detalle_log)
    VALUES
     (@ahora, @V_user_id, @id_contrato, @V_item_contrato, @consumo, @detalle_log)


    update LN_demo set informe = NULL
    where contraparte = @V_contraparte
    and producto = @producto
    and informe = @V_informe
    

   end


  end
 end


 /*** Asignar, poner fecha límite, activar la gestión de documentación y poner en proceso la tarea de solicitud de documentación del informe padre ***/
 if (@V_accion = 'activar_gestion_documentacion') begin

  if (@V_informe > 0 AND @V_asignado > 0 AND @V_fecha_limite_doc is not null) begin

   DECLARE @fecha_limite_doc datetime = dateadd(second,-1,dateadd(day,1,@V_fecha_limite_doc))
   DECLARE @fecha_comprometida_doc datetime = dateadd(second,-1,dateadd(day,1,@V_fecha_comprometida))


   declare @subinforme int
   declare @estado_subinforme varchar(1)
   declare @log_subinforme varchar(max)

   select   @subinforme = informes.informe,
       @estado_subinforme = informes.estado_informe,
       @log_subinforme = informes.historial_informe
   from informes 
   inner join tipos_informe on informes.id_tipo_informe = tipos_informe.id_tipo_informe
   where informes.informe_padre = @V_informe
   and tipos_informe.genera_solicitud_doc = 1

   if (@estado_subinforme = 'I' and @subinforme > 0) begin

    select @nombre_asignado = isnull(first_name,'') + ' ' + isnull(last_name, '')
    from users where user_id = @V_asignado

    set @log_subinforme = @log_subinforme + CHAR(13) + CHAR(10) + @preffix + 'Asignación de la tarea a ' + @nombre_asignado
    set @log_subinforme = @log_subinforme + CHAR(13) + CHAR(10) + @preffix + 'Aceptación de la tarea'
    set @log_subinforme = @log_subinforme + CHAR(13) + CHAR(10) + @preffix + 'Tarea puesta en proceso'

    UPDATE informes SET
     estado_informe = 'E',
     historial_informe = @log_subinforme,
     fin_pedido_doc = 0,
     asignado = @V_asignado,
     fecha_limite_doc = @fecha_limite_doc,
     fecha_asignado = GETDATE(),
     fecha_aceptacion = GETDATE(),
     fecha_iniciado = GETDATE(),
     /*fecha_comprometida = DATEADD(HOUR,12,DATEADD(DAY,1,@V_fecha_limite_doc))*/
     fecha_comprometida = @fecha_comprometida_doc 
    WHERE informe = @subinforme 


    SELECT @subinforme AS informe

   end
  end
 end


 /*** Dada la contraparte, busca un producto report asociado a un informe en gestión y chequea la documentación solicitada.
  En caso de que esté 100% verificada, se marca la tarea de gestión como que se ha completado la documentación y aparezca
  en el panel de solicitudes del blue como DOCS OK 
 
  Agregada la posibilidad de que el informe esté en proceso o en espera
 
  ***/


 if (@V_accion = 'check_docs_ok') begin

  if (@V_contraparte > 0) begin

   select @informe = LN_demo.informe,
     @gestion = LN_demo.gestion,
     @producto = LN_demo.producto,
     @estado = informes.estado_informe
   from LN_demo
   inner join LN_gestiones on (LN_demo.contraparte = LN_gestiones.contraparte
          and LN_demo.gestion = LN_gestiones.gestion)
   inner join informes on LN_demo.informe = informes.informe

   where LN_demo.contraparte = @V_contraparte
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
      and LN_gestiones.vigente = 1

   and informes.estado_informe IN ('P','E','W')
   
   
   if (@informe is not null) begin

    /* Existe informe en gestión, busco documentación separada de balances */
    DECLARE Documentacion CURSOR FOR

    select LN_docs.estado_doc, count(*) as total_estado
    from LN_docs inner join 

     (select LN_docs.gestion, LN_docs.tipo_doc, max(LN_docs.doc_version) as doc_version
     from LN_docs 
     inner join LN_set_tipo_doc on LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc
     inner join LN_familias on LN_set_tipo_doc.set_doc = LN_familias.set_doc
     inner join LN_contraparte_familias on (LN_familias.familia = LN_contraparte_familias.familia
        AND LN_docs.contraparte = LN_contraparte_familias.contraparte)
     inner join LN_tipos_doc on LN_set_tipo_doc.tipo_doc = LN_tipos_doc.tipo_doc
     where LN_docs.contraparte = @V_contraparte
     and LN_docs.gestion = @gestion
     and LN_docs.estado_doc IN ('N','I','R','V')
     and LN_docs.aplica = 1
     and ISNULL(LN_tipos_doc.es_balance, 0) = 0
     and LN_contraparte_familias.activo = 1
     and LN_set_tipo_doc.activo = 1
     group by LN_docs.gestion, LN_docs.tipo_doc) docs on 
     
      (LN_docs.gestion = docs.gestion and LN_docs.tipo_doc = docs.tipo_doc and LN_docs.doc_version = docs.doc_version)    
    group by LN_docs.estado_doc

    UNION

    select LN_docs.estado_doc, count(*) as total_estado
    from LN_docs inner join 

     (select LN_docs.gestion, LN_docs.tipo_doc, LN_docs.doc_version
     from LN_docs 
     inner join LN_set_tipo_doc on LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc
     inner join LN_familias on LN_set_tipo_doc.set_doc = LN_familias.set_doc
     inner join LN_contraparte_familias on (LN_familias.familia = LN_contraparte_familias.familia
        AND LN_docs.contraparte = LN_contraparte_familias.contraparte)
     inner join LN_tipos_doc on LN_set_tipo_doc.tipo_doc = LN_tipos_doc.tipo_doc
     where LN_docs.contraparte = @V_contraparte
     and LN_docs.gestion = @gestion
     and LN_docs.estado_doc IN ('N','I','R','V')
     and LN_docs.aplica = 1
     and ISNULL(LN_tipos_doc.es_balance, 0) = 1
     and LN_contraparte_familias.activo = 1
     and LN_set_tipo_doc.activo = 1) docs on 
     
      (LN_docs.gestion = docs.gestion and LN_docs.tipo_doc = docs.tipo_doc and LN_docs.doc_version = docs.doc_version)    
    group by LN_docs.estado_doc


    OPEN Documentacion
    FETCH NEXT FROM Documentacion INTO @estado, @total_estado
    WHILE (@@FETCH_STATUS = 0) BEGIN
     SET @noing = @noing + iif(@estado = 'N', @total_estado, 0)
     SET @ing = @ing + iif(@estado = 'I', @total_estado, 0)
     SET @rech = @rech + iif(@estado = 'R', @total_estado, 0)
     SET @verif = @verif + iif(@estado = 'V', @total_estado, 0)

     FETCH NEXT FROM Documentacion INTO @estado, @total_estado
    END
    CLOSE Documentacion
    DEALLOCATE Documentacion

    SET @total_docs = @noing + @ing + @rech + @verif 
    

    if (@total_docs > 0 AND @total_docs = @verif) begin

     /* toda la documentación verificada */
     select @tarea = informes.informe,
       @estado_tarea = informes.estado_informe,
       @hist = convert(varchar(max), informes.historial_informe)
     from informes inner join tipos_informe on informes.id_tipo_informe = tipos_informe.id_tipo_informe
     where informes.estado_informe IN ('I','A','T','E')
     and informes.informe_padre = @informe

     and ISNULL(tipos_informe.genera_solicitud_doc, 0) = 1

     if (@tarea > 0) begin
      SET @hist = iif(@hist is not null, @hist + CHAR(13) + CHAR(10), '')

      if (@estado_tarea = 'I') begin

       if (@V_user_id > 0)
        update informes set asignado = @V_user_id, fecha_asignado = GETDATE(), fecha_aceptacion = GETDATE(), fecha_iniciado = GETDATE(), fecha_entregado = GETDATE() where informe = @tarea

       set @hist = @hist + @preffix + 'Asignación de tarea'
       set @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Aceptación de tarea'
       set @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Inicio de tarea'
       set @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Finalización de tarea en forma automática por cumplimiento y verificación de la documentación solicitada.'
      end
      if (@estado_tarea = 'A') begin

       if (@V_user_id > 0)
        update informes set fecha_aceptacion = GETDATE(), fecha_iniciado = GETDATE(), fecha_entregado = GETDATE() where informe = @tarea

       set @hist = @hist + @preffix + 'Aceptación de tarea'
       set @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Inicio de tarea'
       set @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Finalización de tarea en forma automática por cumplimiento y verificación de la documentación solicitada.'
      end
      if (@estado_tarea = 'T') begin

       if (@V_user_id > 0)
        update informes set fecha_iniciado = GETDATE(), fecha_entregado = GETDATE() where informe = @tarea

       set @hist = @hist + @preffix + 'Inicio de tarea'
       set @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Finalización de tarea en forma automática por cumplimiento y verificación de la documentación solicitada.'
      end
      if (@estado_tarea = 'E') begin
       set @hist = @hist + @preffix + 'Finalización de tarea en forma automática por cumplimiento y verificación de la documentación solicitada.'
      end

      UPDATE informes SET fin_pedido_doc = 1,
           estado_informe = 'F',
           fecha_entregado = GETDATE(),
           historial_informe = @hist
      WHERE informe = @tarea


      /* Log en el informe padre de la finalización automática de la gestión */
      select @hist = convert(varchar(max),informes.historial_informe) from informes where informe = @informe
      SET @hist = iif(@hist is not null, @hist + CHAR(13) + CHAR(10), '')
      set @hist = @hist + @preffix + 'Finalización automática de la tarea de gestión por cumplimiento y verificación de la totalidad de documentación solicitada a la contraparte.'

      UPDATE informes SET historial_informe = @hist,
      excepcion = 0,
      excepcion_prod = 1
      where informe = @informe

      
      if (@estado = 'P') begin

       SET @hist = iif(@hist is not null, @hist + CHAR(13) + CHAR(10), '')
       set @hist = @hist + @preffix + 'Informe colocado en proceso en forma automática por cumplimiento y verificación de la totalidad de documentación solicitada a la contraparte.'

       UPDATE informes set estado_informe = 'E', 
       fecha_iniciado = GETDATE(), 
       historial_informe = @hist 
       where informe = @informe

      end

     end

    end

   end

  end

 end


 /*** Dada la contraparte, busca un producto report asociado a un informe en proceso y chequea la tarea de documentación de balances.
  En caso de que esté asignada y los balances verificados / publicados, se la debe poner en proceso para que pueda iniciarse
 
  HARDCODE del ID tipo informe que corresponde al Análisis de Estados Contables
 
  ***/


 if (@V_accion = 'check_tarea_balances') begin

  DECLARE @id_tipo_analisis_balances INT = 9080511

  if (@V_contraparte > 0) begin

   select @informe = LN_demo.informe,
     @gestion = LN_demo.gestion,
     @producto = LN_demo.producto
   from LN_demo
   inner join LN_gestiones on (LN_demo.contraparte = LN_gestiones.contraparte
          and LN_demo.gestion = LN_gestiones.gestion)
   inner join informes on LN_demo.informe = informes.informe

   where LN_demo.contraparte = @V_contraparte
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
      and LN_gestiones.vigente = 1

   and informes.estado_informe IN ('P','M','E')
   
   
   if (@informe is not null) begin

    DECLARE @estado_balance varchar(50)

    DECLARE Balances CURSOR FOR

    select LN_docs.estado_doc, docs.estado, count(*) as total_estado
    from LN_docs inner join 

     (select LN_docs.gestion, LN_docs.tipo_doc, LN_docs.doc_version, balances_contables.estado
     from LN_docs 
     inner join LN_set_tipo_doc on LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc
     inner join LN_familias on LN_set_tipo_doc.set_doc = LN_familias.set_doc
     inner join LN_contraparte_familias on (LN_familias.familia = LN_contraparte_familias.familia
        AND LN_docs.contraparte = LN_contraparte_familias.contraparte)
     inner join LN_tipos_doc on LN_set_tipo_doc.tipo_doc = LN_tipos_doc.tipo_doc

     left outer join balances_contables on LN_docs.id_externo = balances_contables.id_balance

     where LN_docs.contraparte = @V_contraparte
     and LN_docs.gestion = @gestion
     and LN_docs.estado_doc IN ('N','I','R','V')
     and LN_docs.aplica = 1
     and ISNULL(LN_tipos_doc.es_balance, 0) = 1
     and LN_contraparte_familias.activo = 1
     and LN_set_tipo_doc.activo = 1) docs on 
     
      (LN_docs.gestion = docs.gestion and LN_docs.tipo_doc = docs.tipo_doc and LN_docs.doc_version = docs.doc_version)    
    group by LN_docs.estado_doc, docs.estado


    OPEN Balances
    FETCH NEXT FROM Balances INTO @estado, @estado_balance, @total_estado
    WHILE (@@FETCH_STATUS = 0) BEGIN
     SET @noing = @noing + iif(@estado = 'N', @total_estado, 0)
     SET @ing = @ing + iif(@estado = 'I', @total_estado, 0)
     SET @rech = @rech + iif(@estado = 'R', @total_estado, 0)
     SET @verif = @verif + iif(@estado = 'V', @total_estado, 0)
     SET @publicados = @publicados + iif(@estado_balance = 'PUBLICADO', @total_estado, 0)

     FETCH NEXT FROM Balances INTO @estado, @estado_balance, @total_estado
    END
    CLOSE Balances
    DEALLOCATE Balances

    SET @total_docs = @noing + @ing + @rech + @verif


    if (@total_docs > 0 AND @total_docs = @verif AND @total_docs = @publicados) begin

     /* todos los balances en la gestión verificados / publicados */
     select @tarea = informes.informe,
       @estado_tarea = informes.estado_informe,
       @hist = convert(varchar(max), informes.historial_informe)
     from informes inner join tipos_informe on informes.id_tipo_informe = tipos_informe.id_tipo_informe
     where informes.estado_informe IN ('I','A','T','E')
     and informes.id_tipo_informe = @id_tipo_analisis_balances
     and informes.informe_padre = @informe


     if (@tarea > 0) begin
      SET @hist = iif(@hist is not null, @hist + CHAR(13) + CHAR(10), '')

      if (@estado_tarea = 'I') begin

       if (@V_user_id > 0)
        update informes set asignado = @V_user_id, fecha_asignado = GETDATE(), fecha_aceptacion = GETDATE(), fecha_iniciado = GETDATE() where informe = @tarea

       set @hist = @hist + @preffix + 'Asignación de tarea'
       set @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Aceptación de tarea'
       set @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Inicio de tarea en forma automática por encontrarse verificada la documentación de balances de la contraparte.'
      end
      if (@estado_tarea = 'A') begin

       if (@V_user_id > 0)
        update informes set fecha_aceptacion = GETDATE(), fecha_iniciado = GETDATE() where informe = @tarea

       set @hist = @hist + @preffix + 'Aceptación de tarea'
       set @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Inicio de tarea en forma automática por encontrarse verificada la documentación de balances de la contraparte.'
      end
      if (@estado_tarea = 'T') begin

       if (@V_user_id > 0)
        update informes set fecha_iniciado = GETDATE() where informe = @tarea

       set @hist = @hist + CHAR(13) + CHAR(10) + @preffix + 'Inicio de tarea en forma automática por encontrarse verificada la documentación de balances de la contraparte.'
      end

      UPDATE informes SET estado_informe = 'E',
           historial_informe = @hist
      WHERE informe = @tarea


      /* Log en el informe padre del inicio automático del análisis de balances */
      select @hist = convert(varchar(max),informes.historial_informe) from informes where informe = @informe
      SET @hist = iif(@hist is not null, @hist + CHAR(13) + CHAR(10), '')
      set @hist = @hist + @preffix + 'Inicio automático de la tarea de análisis de estados contables por encontrarse verificada la documentación de balances de la contraparte.'

      UPDATE informes SET historial_informe = @hist where informe = @informe

     end


    end
   end
  end

 end


 /* registro del tipo de informe */
 if (@V_accion = 'tipo_informe') begin
  if (@V_id_tipo_informe is not null)

   select tipos_informe.*, 
     productos.producto, productos.nombre_producto, ISNULL(productos.confidencial, 0) AS confidencial, productos.sigla
   from tipos_informe 
   left outer join productos on tipos_informe.grupo_informes = productos.grupo_informes
   where tipos_informe.id_tipo_informe = @V_id_tipo_informe

 end

 /* Dado un informe (padre) trae los datos de la tarea de gestión de documentación */
 if (@V_accion = 'datos_tarea_gestion') begin
  if (@V_informe is not null)

   select informes.*, users.first_name, users.last_name, users.email
   from informes 
   inner join tipos_informe on informes.id_tipo_informe = tipos_informe.id_tipo_informe
   left outer join users on informes.asignado = users.user_id
   where informes.informe_padre = @V_informe
   and tipos_informe.genera_solicitud_doc = 1

 end


 /* Dada una contraparte y una fecha límite, busca informes activos que tengan la tarea de gestión en proceso y actualiza el registro 
  de la tarea con dicha fecha límite de carga de la documentación.
  Para utilizar luego de re-enviar el link de acceso facon desde el backend 
 
  Debe actualizar la fecha comprometida de entrega del informa padre
  */


 if (@V_accion = 'actualizar_tarea_gestion') begin

  if (@V_contraparte is not null AND @V_fecha_limite_doc is not null) begin

   DECLARE @fecha_limite_anterior datetime, @fecha_comprometida_anterior datetime, @fecha_comprometida_update datetime

   select @estado_tarea = informes.estado_informe,
     @tarea = informes.informe_padre,
     @informe = padre.informe,
     @fecha_limite_anterior = informes.fecha_limite_doc,
     @fecha_comprometida_anterior = padre.fecha_comprometida

   from informes 
   inner join tipos_informe on informes.id_tipo_informe = tipos_informe.id_tipo_informe
   inner join informes as padre on informes.informe_padre = padre.informe
   inner join LN_demo on padre.informe = LN_demo.informe
   inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte

   where tipos_informe.genera_solicitud_doc = 1
   and informes.estado_informe in ('P','M','W','E')
   and informes.fin_pedido_doc = 0
   and padre.estado_informe in ('I','A','T','E','P','M','W')
   and LN_contrapartes.contraparte = @V_contraparte
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
      and LN_gestiones.vigente = 1

   and LN_contrapartes.cliente = informes.cliente

   if (@tarea is not null AND @informe is not null) begin

    if ( convert(date, @V_fecha_limite_doc) >= convert(date, GETDATE()) ) begin

     SET @fecha_comprometida_update = DATEADD(day, datediff(day, @fecha_limite_anterior, @V_fecha_limite_doc), @fecha_comprometida_anterior)

     UPDATE informes SET 
      fecha_limite_doc = Dateadd(second,-1,Dateadd(day,1,@V_fecha_limite_doc)),
      historial_informe = convert(varchar(max),historial_informe) + CHAR(13) + CHAR(10) + @preffix + 'Fecha límite de carga de documentación establecida en ' + convert(varchar(10),@V_fecha_limite_doc,103)
     WHERE informe = @tarea

     /* Aquí corresponde actualizar la fecha comprometida del informe padre - falta definir lógica, por ahora calculamos estirando
      la fecha comprometida preexistente según los días que estiramos la gestión */


     UPDATE informes SET
      fecha_comprometida = @fecha_comprometida_update,
      historial_informe = convert(varchar(max),historial_informe) + CHAR(13) + CHAR(10) + @preffix + 'Fecha comprometida del informe establecida en ' + convert(varchar(10),@fecha_comprometida_update,103) + ' por cambio de la fecha límite de carga de documentación.'
     WHERE informe = @informe


    end

   end


  end

 end

 /*
  EXEC LN_Blue_Tareas_Informe  'tareas_informe',NULL,100615876
 
  */

 if (@V_accion='tareas_informe') 
 begin
  /*if (@V_contraparte is null and @V_informe is null)*/

   SELECT distinct 1 as etapa, tareas.informe as tarea, tareas.informe_padre, tareas.estado_informe as estado_tarea, tareas.id_tipo_informe as id_tipo_tarea, 
     case
        when tareas.estado_informe = 'I' then 'Ingresado'
        when tareas.estado_informe = 'A' then 'No calificado'
        when tareas.estado_informe = 'X' then 'Carga Comercial'
        when tareas.estado_informe = 'T' then 'Aceptado'
        when tareas.estado_informe = 'P' then 'En gestión'
        when tareas.estado_informe = 'W' then 'En espera'
        when tareas.estado_informe = 'M' then 'A Completar'
        when tareas.estado_informe = 'E' then 'En proceso'
        when tareas.estado_informe = 'F' then 'Finalizado'
        when tareas.estado_informe = 'K' then 'Aprobado'
        when tareas.estado_informe = 'R' then 'En revisión'
        when tareas.estado_informe = 'C' then 'Cancelado'
        when tareas.estado_informe = 'N' then 'Anulado'
       end as nombre_estado_tarea,


 

   /*tipos_informe.nombre_tipo_informe as nombre_tipo_tarea,*/

     /*tipos_informe.nombre_tipo_informe as nombre_tarea,*/
       upper(LN_tareas.nombre_tarea) as nombre_tipo_tarea,


     LN_demo.contraparte, LN_gestiones.gestion, padrones.nombre_persona, convert(varchar(max),tareas.historial_informe) as historial_informe,
     padrones.identificacion, padrones.identificador,
     identificadores.country_code, country.country_name,
     users.first_name, users.last_name, users.email, tareas.ingresado_por,
     convert(varchar(10), tareas.fecha_ingreso, 103) as fecha_ingreso,
     convert(varchar(10), tareas.fecha_aprobacion, 103) as fecha_aprobacion,
     convert(varchar(10), tareas.fecha_comprometida, 103) as fecha_comprometidaINF,
     convert(varchar(10), tareas.fecha_comprometida, 121) as fecha_comprometida_ymd,
     clientes.nombre_cliente,
     
     ln_contrapartes.servicio_contratado, productos.nombre_producto as servicio, ln_familias.nombre_familia as familia
     ,convert(varchar(10),ln_contrapartes.limite_carga_inicial,103) as limite_carga_inicial_dmy
     ,convert(varchar(10),ln_contrapartes.limite_carga_inicial,121) as limite_carga_inicial_ymd
     ,isnull(LN_demo.fecha_comprometida,getdate()-1) as fecha_comprometidaINF,
     datediff(day,getdate(),isnull(LN_demo.fecha_comprometida,getdate()-1)) as diffdiasINF,
     datediff(day,getdate(),isnull(LN_demo.fecha_publicacion,getdate()-1)) as diffpublicacionINF,
     tareas.fecha_comprometida as fecha_comprometidaTAR, 
     datediff(day,getdate(),isnull(tareas.fecha_comprometida,getdate()-1)) as diffdiasTAR,
     LN_demo.fecha_publicacion,isnull(LN_demo.visible,0) as publicado,
     isnull(LN_demo.integ_carga,0) as integ_carga,isnull(LN_demo.integ_rech,0) as integ_rech,isnull(LN_demo.integ_verif,0) as integ_verif,isnull(LN_demo.docs_ok,0) as docs_ok,
     tareas.asignado as inf_asignado,tareas.asignado as tar_asignado,
     USRINF.last_name + ' ' + USRINF.first_name  as informe_usuario_asignado,
     USRTAR.last_name + ' ' + USRTAR.first_name  as tarea_usuario_asignado,
     tareas.fecha_inicio ,
     tareas.prioridad as dedicacion,LN_tareas.duracion as duracion,
     
     tareas.informe_padre as tarea_padre, tareas.pausa,tareas.orden as ordTarea,

     tareas.ready_to_start_trigger_task as idTareaPadre,
     
     tareas.ready_to_start_date,
     tareas.ready_to_start,
     tareas.ready_to_start_user_id,
     '' as estadoTareaPadre,
     LN_tareas.idTarea_Padre as dependencia 
     
       /*select id_tipo_informe,* from informes where informe_padre = 100603443
        select * from ln_demo where informe = 100603443
        select * from ln_contrapartes where contraparte=198487
        select * from ln_gestiones where contraparte=198487
        */




   FROM informes tareas
   inner join tipos_informe on tareas.id_tipo_informe = tipos_informe.id_tipo_informe
   /*inner join informes as tareas ON informes.informe = tareas.informe_padre*/
   inner join tipos_informe as tipos_tarea on tareas.id_tipo_informe = tipos_tarea.id_tipo_informe
   left join clientes ON tareas.cliente = clientes.cliente
   left outer join users on tareas.ingresado_por = users.user_id
   /*inner join padrones ON (tareas.identificador = padrones.identificador AND tareas.numero = padrones.numero)*/
   /*inner join padrones ON (tareas.numero = padrones.identificacion)*/
   left join LN_demo ON tareas.informe_padre = LN_demo.informe
   left join LN_contrapartes ON LN_demo.contraparte = LN_contrapartes.contraparte
   inner join padrones ON (ln_contrapartes.id_padron = padrones.id_padron)
   left join LN_gestiones ON (LN_contrapartes.contraparte = LN_gestiones.contraparte and ln_demo.gestion=LN_gestiones.gestion) 
   left join identificadores ON padrones.identificador = identificadores.identificador
   left join country ON identificadores.country_code = country.country_code
   left join productos on productos.producto = ln_contrapartes.servicio_contratado
   left join ln_contraparte_familias cf on cf.contraparte = ln_contrapartes.contraparte
   left join ln_familias on ln_familias.familia = cf.familia 
   left join  users USRINF on USRINF.user_id = tareas.asignado
   left join  users USRTAR on USRTAR.user_id = tareas.asignado
   /*left join LN_tareas on tipos_informe.tipo_tarea = LN_tareas.idTarea  */
   left join LN_tareas on LN_tareas.id_tipo_informe_blue=tareas.id_tipo_informe 

   WHERE /*tareas.estado_informe IN ('P','M','E','W','F','K','R','I')
    and LN_gestiones.desde <= GETDATE() AND LN_gestiones.hasta >= GETDATE() 
    and LN_gestiones.vigente = 1
    and */
 tareas.informe_padre = @V_informe


   ORDER BY ordTarea ASC,tareas.informe ASC

   /*
    exec LN_Blue 'informes_panel',null,null
    exec LN_Blue 'tareas_informe',null,100603443
    */


 end



 if (@V_accion='informes_panel') begin
 

  if (@V_contraparte is null and @V_informe is null)
   SELECT 1 as etapa, informes.informe, informes.estado_informe, informes.id_tipo_informe, tipos_informe.nombre_tipo_informe,
     /*tipos_informe.tipo_informe, tipos_informe.version,
      tipos_informe.texto_email, tipos_informe.texto_email_solicitud, tipos_informe.asunto_email_solicitud,*/

     LN_demo.contraparte, LN_gestiones.gestion, padrones.nombre_persona, informes.historial_informe,
     padrones.identificacion, /*padrones.numero,*/ padrones.identificador, /*identificadores.abreviatura,*/
     identificadores.country_code, country.country_name,
     users.first_name, users.last_name, users.email, informes.ingresado_por,
     convert(varchar(10), informes.fecha_ingreso, 103) as fecha_ingreso,
     convert(varchar(10), informes.fecha_aprobacion, 103) as fecha_aprobacion,
     convert(varchar(10), informes.fecha_comprometida, 103) as fecha_comprometidaINF,
     convert(varchar(10), informes.fecha_comprometida, 121) as fecha_comprometida_ymd,
     case
      when informes.estado_informe = 'I' then 'Ingresado'
      when informes.estado_informe = 'A' then 'Asignado'
      when informes.estado_informe = 'T' then 'Aceptado'
      when informes.estado_informe = 'P' then 'En gestión'
      when informes.estado_informe = 'M' then 'En espera'
      when informes.estado_informe = 'E' then 'En proceso'
      when informes.estado_informe = 'F' then 'Finalizado'
      when informes.estado_informe = 'K' then 'Aprobado'
      when informes.estado_informe = 'R' then 'En revisión'
      when informes.estado_informe = 'W' then 'En espera'
     end as nombre_estado_informe,
     clientes.nombre_cliente, 
     
     ln_contrapartes.servicio_contratado, productos.nombre_producto as servicio, ln_familias.nombre_familia as familia
     ,convert(varchar(10),ln_contrapartes.limite_carga_inicial,103) as limite_carga_inicial_dmy
     ,convert(varchar(10),ln_contrapartes.limite_carga_inicial,121) as limite_carga_inicial_ymd,

     isnull(LN_demo.fecha_comprometida,getdate()-1) as fecha_comprometida,
     datediff(day,getdate(),isnull(LN_demo.fecha_comprometida,getdate()-1)) as diffdias,
     datediff(day,getdate(),isnull(LN_demo.fecha_publicacion,getdate()-1)) as diffpublicacion,

     LN_demo.fecha_publicacion,isnull(LN_demo.visible,0) as publicado,isnull(LN_demo.integ_carga,0) as integ_carga,isnull(LN_demo.integ_rech,0) as integ_rech,isnull(LN_demo.integ_verif,0),isnull(LN_demo.docs_ok,0) as docs_ok,
     informes.asignado as inf_asignado,
     USRINF.last_name + ' ' + USRINF.first_name  as informe_usuario_asignado
       

   FROM informes 
   inner join tipos_informe on informes.id_tipo_informe = tipos_informe.id_tipo_informe
   inner join tipos_informe as tipos_tarea on informes.id_tipo_informe = tipos_tarea.id_tipo_informe
   left join clientes ON informes.cliente = clientes.cliente
   left outer join users on informes.ingresado_por = users.user_id

   inner join padrones ON (informes.identificador = padrones.identificador AND informes.numero = padrones.numero)

   left join LN_demo ON informes.informe = LN_demo.informe
   left join LN_contrapartes ON LN_demo.contraparte = LN_contrapartes.contraparte
   left join LN_gestiones ON LN_contrapartes.contraparte = LN_gestiones.contraparte
   left join identificadores ON padrones.identificador = identificadores.identificador
   left join country ON identificadores.country_code = country.country_code
   left join productos on productos.producto = ln_contrapartes.servicio_contratado
   left join ln_contraparte_familias cf on cf.contraparte = ln_contrapartes.contraparte
   left join ln_familias on ln_familias.familia = cf.familia 
   left join  users USRINF on USRINF.user_id = informes.asignado

       

   WHERE informes.estado_informe IN ('I','A','T','P','M','E','W','R')
   and LN_gestiones.desde <= GETDATE() AND LN_gestiones.hasta >= GETDATE() 
   and LN_gestiones.vigente = 1

   ORDER BY diffdias asc




 end






 /* BACKEND : Panel de control para documentación de Reports / Documentación para producción de informes / Para buscar un report específico o 
  determinar si una contraparte tiene un report activo vinculado a documentación LED  */

 if (@V_accion = 'panel_control_reports' or @V_accion='informes_panel2') begin

  declare @exceptuados varchar(max) = '3982729,2371399,5168031,5218284,4178243,1542401,5837954,9711129,6754119,9176353,3183825,7773973,2484295,651332,9833977,2419690,7726636,4455535,4672751,4991990,7554775,9470808,5340284,652771,2904531,7031105,9689736,9861987,5537769,8220394,7046573,4573001,7849454,3806616,1054380,2023650,4165844,7334274,3108853,3233597,4465843,6401234,3793926,2687541,3786823,6342074,2414915,8801003,2815108,2896510,1306357,2957208,4489107,8540339,4986940,3851105,5716076,1501711,1054097,6094230,793725,8572699,2427354,8964417,9694293,6756499,6831398,2826029,5763219,1320,6955007,1183078,8866570,6564186,1130153,1417132,9057277,8181046,5645895,5450571,3946220,594892,5042479,4601593,9244071,3802363,414608,3922289,509005,9186151,7275700,5606918,2018497,7616862,2694707,7108228,3789485,8645259,4099881,2039463,3034032,1020116,7759330,7560634,503985,6790563,5321667,392174,2050636,840033,742547,2862753,4476180,7876607,1118505,8546756,4809425,42221,9697952,5394529,4320154,5803346,7559539,4688566,14325,2110447,9468990,5399592,5942796,6378600,306466,3458277,511150,2156312,2250938,7893918,7695187,8094812,2578389,9890172,1877551,5525474,1997451,3751555,6158847,6522538,9028232,5758261,8534217,9134153,7968193,3940751,1771522,7575808,2031390,7418772,7532858,1554345,9647700,2895646,5257668,9267616,2342041,5393664,2294633,7203663,7542660,3885937,8272808,5183870,7427451,6074414,7680120,113534,4015131,7207763,5508337,2168887,2198958,3034447,2484543,509031,4500385,9907210,5183043,1312181,6440412,4832339,5562748,9034849,3805165,8786261,5352049,2399261,3475021,9154594,7486757,9084963,5409200,2443292,213664,8980289,6004830,2097805,6620749,115755,259603,799349,864377,4572217,4201884,3426697,5816098,2590867,1394197,6419768,3048099,2972819,4874235,4265288,8474426,91833,464012,7897828,9976694,9635777,6115959,808389,962765,6395559,7165885,4800711,1627634,7802647,1753335,1191904,6029832,4414293,9764410,3469706,4528013,6091823,2681609,22909,5485281,9309304,7173617,5918135,8253457,2962959,2094685,2221611,5754108,5629469,6020365,4725963,4210822,1780264,7745392,7234627,5550378,9646919,4080777,1157428,1538261,9304839,3210357,7568092,4134432,5611449,3514691,1655982,3167730,2125510,9064103,5264350,2826850,7153304,1218272,5671823,6934568,9579040,3418995,3903118,3197133,2440237,2183677,3545621,1888371,9163044,42802,170471,489344,7194760,8253833,6651935,6714306,716395,8186824,6039846,3125827,8252247,2755999,7405605,1833575,4993162,4385744,631414,8633914,5102,5442213,7120540,4618263,2907606,7335232,4219601,5172005,3880101,73188,391756,3811625,7269492,9736447,8918123,3471899,9048051,4010479,3280944,2524651,7840813,8644247,266532,3217715,2874046,8292741,1957201,3124446,9858957,8930573,3557731,8290980,6839691,5158198,2426957,4193275,2191147,3781071,3629913,2009082,2167666,2209905,7045318,1424816,1492183,6429942,7757523,5345998,194726,2935861,916510,6130663,5076660,179463,7482775,5885110,3232244,5190125,8488725,1887654,3237604,736244,3754663,7117376,1258999,5494692'
  
  if (@V_contraparte is null and @V_informe is null)

   SELECT informes.informe, informes.estado_informe, informes.id_tipo_informe, tipos_informe.nombre_tipo_informe,
     /*tipos_informe.tipo_informe, tipos_informe.version,
      tipos_informe.texto_email, tipos_informe.texto_email_solicitud, tipos_informe.asunto_email_solicitud,*/

     LN_demo.contraparte, LN_gestiones.gestion, padrones.nombre_persona, informes.historial_informe,
     padrones.identificacion, /*padrones.numero,*/ padrones.identificador, /*identificadores.abreviatura,*/
     identificadores.country_code, country.country_name,
     users.first_name, users.last_name, users.email, informes.ingresado_por,
     convert(varchar(10), informes.fecha_ingreso, 103) as fecha_ingreso,
     convert(varchar(10), informes.fecha_aprobacion, 103) as fecha_aprobacion,
     convert(varchar(10), informes.fecha_comprometida, 103) as fecha_comprometidaINF,
     convert(varchar(10), informes.fecha_comprometida, 121) as fecha_comprometida_ymd,
     case
      when informes.estado_informe = 'I' then 'Ingresado'
      when informes.estado_informe = 'A' then 'Asignado'
      when informes.estado_informe = 'T' then 'Aceptado'
      when informes.estado_informe = 'P' then 'En gestión'
      when informes.estado_informe = 'M' then 'En espera'
      when informes.estado_informe = 'E' then 'En proceso'
      when informes.estado_informe = 'F' then 'Finalizado'
      when informes.estado_informe = 'K' then 'Aprobado'
      when informes.estado_informe = 'R' then 'En revisión'
     end as nombre_estado_informe,
     clientes.nombre_cliente, tareas.informe as tarea, tareas.estado_informe as estado_tarea, 
     case
      when tareas.estado_informe = 'I' then 'Ingresado'
      when tareas.estado_informe = 'A' then 'Asignado'
      when tareas.estado_informe = 'T' then 'Aceptado'
      when tareas.estado_informe = 'P' then 'En gestión'
      when tareas.estado_informe = 'M' then 'En espera'
      when tareas.estado_informe = 'E' then 'En proceso'
      when tareas.estado_informe = 'F' then 'Finalizado'
      when tareas.estado_informe = 'K' then 'Aprobado'
      when tareas.estado_informe = 'R' then 'En revisión'
     end as nombre_estado_tarea,
     
     /*tareas.fin_pedido_doc,
      convert(varchar(10),tareas.fecha_limite_doc,103) as fecha_limite_doc,
      convert(varchar(10),tareas.fecha_limite_doc,121) as fecha_limite_doc_ymd,*/


     /*isnull(indicadores.valor_numerico,0) as cumplimiento,*/
     /*
      iif(documentacion.total_documentos is not null AND ingresados.total_ingresados is not null,
      iif(documentacion.total_documentos > 0, ROUND(convert(decimal,ingresados.total_ingresados)/convert(decimal,documentacion.total_documentos)*100,0), 0),
      0) as cumplimiento,
     
      iif(documentacion.total_documentos is not null AND verificados.total_verificados is not null,
      iif(documentacion.total_documentos > 0, ROUND(convert(decimal,verificados.total_verificados)/convert(decimal,documentacion.total_documentos)*100,0), 0),
      0) as verificacion
     
      , ingresados.total_ingresados, documentacion.total_documentos, verificados.total_verificados
     
      , CASE
      WHEN ingresados.total_ingresados IS NULL AND documentacion.total_documentos IS NULL AND verificados.total_verificados IS NULL THEN 1
      WHEN exceptuados.Item IS NOT NULL THEN 1
      ELSE 0
      END AS facon,*/

     ln_contrapartes.servicio_contratado, productos.nombre_producto as servicio, ln_familias.nombre_familia as familia
     ,convert(varchar(10),ln_contrapartes.limite_carga_inicial,103) as limite_carga_inicial_dmy
     ,convert(varchar(10),ln_contrapartes.limite_carga_inicial,121) as limite_carga_inicial_ymd
     ,tareas.id_tipo_informe as id_tipo_tarea,tipos_tarea.nombre_tipo_informe as nombre_tipo_tarea,
     isnull(LN_demo.fecha_comprometida,getdate()-1) as fecha_comprometidaDEMO,LN_demo.fecha_publicacion,isnull(LN_demo.visible,0) as publicado,isnull(LN_demo.integ_carga,0) as integ_carga,isnull(LN_demo.integ_rech,0) as integ_rech,isnull(LN_demo.integ_verif,0),isnull(LN_demo.docs_ok,0) as docs_ok,
     informes.asignado as inf_asignado,tareas.asignado as tar_asignado,
     
     /*USRINF.username as informe_usuario_asignado,*/
     /*USRTAR.username as tarea_usuario_asignado,*/
     USRINF.last_name + ' ' + USRINF.first_name  as informe_usuario_asignado,

     USRTAR.last_name + ' ' + USRTAR.first_name  as tarea_usuario_asignado,

     tareas.fecha_comprometida as fecha_comprometidaTAR 


       

   FROM informes 
   inner join tipos_informe on informes.id_tipo_informe = tipos_informe.id_tipo_informe
   inner join informes as tareas ON informes.informe = tareas.informe_padre
   inner join tipos_informe as tipos_tarea on tareas.id_tipo_informe = tipos_tarea.id_tipo_informe
   left join clientes ON informes.cliente = clientes.cliente
   left outer join users on informes.ingresado_por = users.user_id

   inner join padrones ON (informes.identificador = padrones.identificador AND informes.numero = padrones.numero)

   left join LN_demo ON informes.informe = LN_demo.informe
   left join LN_contrapartes ON LN_demo.contraparte = LN_contrapartes.contraparte
   left join LN_gestiones ON LN_contrapartes.contraparte = LN_gestiones.contraparte
   left join identificadores ON padrones.identificador = identificadores.identificador
   left join country ON identificadores.country_code = country.country_code
   left join productos on productos.producto = ln_contrapartes.servicio_contratado
   left join ln_contraparte_familias cf on cf.contraparte = ln_contrapartes.contraparte
   left join ln_familias on ln_familias.familia = cf.familia 
   left join  users USRINF on USRINF.user_id = informes.asignado
   left join  users USRTAR on USRTAR.user_id = tareas.asignado

   /*LEFT OUTER JOIN (select LN_contraparte_indicadores.contraparte, LN_contraparte_indicadores.gestion, LN_contraparte_indicadores.valor_numerico
    from LN_contraparte_indicadores 
    inner join LN_indicadores on LN_contraparte_indicadores.indicador = LN_indicadores.indicador
    inner join LN_demo on (LN_contraparte_indicadores.contraparte = LN_demo.contraparte and LN_contraparte_indicadores.gestion = LN_demo.gestion)
    where LN_indicadores.clave_indicador = 'CUMPL_DOC'
    and LN_demo.informe IS NOT NULL) indicadores ON (LN_gestiones.contraparte = indicadores.contraparte and LN_gestiones.gestion = indicadores.gestion)*/

/*
LEFT OUTER JOIN (SELECT COUNT(*) AS total_documentos, LN_demo.contraparte, LN_demo.gestion
FROM LN_docs 
inner join LN_demo ON (LN_docs.contraparte = LN_demo.contraparte
and LN_docs.gestion = LN_demo.gestion)
inner join LN_contraparte_familias on LN_demo.contraparte = LN_contraparte_familias.contraparte
inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
and LN_contrapartes.cliente = LN_familias.cliente)
inner join LN_set_tipo_doc on (LN_familias.set_doc = LN_set_tipo_doc.set_doc
and LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc)
WHERE LN_docs.aplica = 1
AND LN_familias.visible = 1
AND LN_contraparte_familias.activo = 1
GROUP BY LN_demo.contraparte, LN_demo.gestion) documentacion  ON (LN_gestiones.contraparte = documentacion.contraparte and LN_gestiones.gestion = documentacion.gestion)


LEFT OUTER JOIN (SELECT COUNT(*) AS total_ingresados, LN_demo.contraparte, LN_demo.gestion
FROM LN_docs 
inner join LN_demo ON (LN_docs.contraparte = LN_demo.contraparte
and LN_docs.gestion = LN_demo.gestion)
inner join LN_contraparte_familias on LN_demo.contraparte = LN_contraparte_familias.contraparte
inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
and LN_contrapartes.cliente = LN_familias.cliente)
inner join LN_set_tipo_doc on (LN_familias.set_doc = LN_set_tipo_doc.set_doc
and LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc)
WHERE LN_docs.aplica = 1
AND LN_docs.estado_doc IN ('I','V')
AND LN_familias.visible = 1
AND LN_contraparte_familias.activo = 1
GROUP BY LN_demo.contraparte, LN_demo.gestion) ingresados  ON (LN_gestiones.contraparte = ingresados.contraparte and LN_gestiones.gestion = ingresados.gestion)


LEFT OUTER JOIN (SELECT COUNT(*) AS total_verificados, LN_demo.contraparte, LN_demo.gestion
FROM LN_docs 
inner join LN_demo ON (LN_docs.contraparte = LN_demo.contraparte
and LN_docs.gestion = LN_demo.gestion)
inner join LN_contraparte_familias on LN_demo.contraparte = LN_contraparte_familias.contraparte
inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
and LN_contrapartes.cliente = LN_familias.cliente)
inner join LN_set_tipo_doc on (LN_familias.set_doc = LN_set_tipo_doc.set_doc
and LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc)
WHERE LN_docs.aplica = 1
AND LN_docs.estado_doc = 'V'
AND LN_familias.visible = 1
AND LN_contraparte_familias.activo = 1
GROUP BY LN_demo.contraparte, LN_demo.gestion) verificados  ON (LN_gestiones.contraparte = verificados.contraparte and LN_gestiones.gestion = verificados.gestion)
*/

       


   WHERE informes.estado_informe IN ('I','A','T','P','M','E','W','R')
   and tareas.estado_informe IN ('P','M','E','W','F','K','R','I')
   and LN_gestiones.desde <= GETDATE() AND LN_gestiones.hasta >= GETDATE() 
   and LN_gestiones.vigente = 1

   ORDER BY informes.informe, tareas.fecha_limite_doc

  else 
  
   if (@V_contraparte is not null and @V_informe is null)


    SELECT informes.informe, informes.estado_informe, informes.id_tipo_informe, tipos_informe.nombre_tipo_informe,
      tipos_informe.tipo_informe, tipos_informe.version,
      tipos_informe.texto_email, tipos_informe.texto_email_solicitud, tipos_informe.asunto_email_solicitud,
      LN_demo.contraparte, LN_gestiones.gestion, padrones.nombre_persona, informes.historial_informe,
      padrones.identificacion, padrones.numero, padrones.identificador, identificadores.abreviatura,
      identificadores.country_code, country.country_name,
      users.first_name, users.last_name, users.email, informes.ingresado_por,
      convert(varchar(10), informes.fecha_ingreso, 103) as fecha_ingreso,
      convert(varchar(10), informes.fecha_aprobacion, 103) as fecha_aprobacion,
      convert(varchar(10), informes.fecha_comprometida, 103) as fecha_comprometida,
      convert(varchar(10), informes.fecha_comprometida, 121) as fecha_comprometida_ymd,
      case
       when informes.estado_informe = 'I' then 'Ingresado'
       when informes.estado_informe = 'A' then 'Asignado'
       when informes.estado_informe = 'T' then 'Aceptado'
       when informes.estado_informe = 'P' then 'En gestión'
       when informes.estado_informe = 'M' then 'En espera'
       when informes.estado_informe = 'E' then 'En proceso'
       when informes.estado_informe = 'F' then 'Finalizado'
       when informes.estado_informe = 'K' then 'Aprobado'
       when informes.estado_informe = 'R' then 'En revisión'
      end as nombre_estado,
      clientes.nombre_cliente, tareas.informe as tarea, tareas.estado_informe as estado_tarea, tareas.fin_pedido_doc,
      convert(varchar(10),tareas.fecha_limite_doc,103) as fecha_limite_doc,
      convert(varchar(10),tareas.fecha_limite_doc,121) as fecha_limite_doc_ymd,
      
      /*isnull(indicadores.valor_numerico,0) as cumplimiento*/

      iif(documentacion.total_documentos is not null AND ingresados.total_ingresados is not null,
       iif(documentacion.total_documentos > 0, ROUND(convert(decimal,ingresados.total_ingresados)/convert(decimal,documentacion.total_documentos)*100,0), 0),
       0) as cumplimiento,

      iif(documentacion.total_documentos is not null AND verificados.total_verificados is not null,
       iif(documentacion.total_documentos > 0, ROUND(convert(decimal,verificados.total_verificados)/convert(decimal,documentacion.total_documentos)*100,0), 0),
       0) as verificacion

      , ingresados.total_ingresados, documentacion.total_documentos, verificados.total_verificados
     ,ln_contrapartes.servicio_contratado, productos.nombre_producto as servicio, ln_familias.nombre_familia as familia
     ,convert(varchar(10),ln_contrapartes.limite_carga_inicial,103) as limite_carga_inicial_dmy
     ,convert(varchar(10),ln_contrapartes.limite_carga_inicial,121) as limite_carga_inicial_ymd
     ,tareas.id_tipo_informe as id



    FROM informes 
    inner join tipos_informe on informes.id_tipo_informe = tipos_informe.id_tipo_informe
    inner join LN_demo ON informes.informe = LN_demo.informe
    inner join LN_contrapartes ON LN_demo.contraparte = LN_contrapartes.contraparte
    inner join LN_gestiones ON LN_contrapartes.contraparte = LN_gestiones.contraparte
    inner join padrones ON LN_contrapartes.id_padron = padrones.id_padron
    inner join identificadores ON padrones.identificador = identificadores.identificador
    inner join country ON identificadores.country_code = country.country_code
    inner join clientes ON LN_contrapartes.cliente = clientes.cliente
       left join productos on productos.producto = ln_contrapartes.servicio_contratado
    left join ln_contraparte_familias cf on cf.contraparte = ln_contrapartes.contraparte
    left join ln_familias on ln_familias.familia = cf.familia 


    inner join informes as tareas ON informes.informe = tareas.informe_padre
    inner join tipos_informe as tipos_tarea on tareas.id_tipo_informe = tipos_tarea.id_tipo_informe
    left outer join users on informes.ingresado_por = users.user_id

    /*LEFT OUTER JOIN (select LN_contraparte_indicadores.contraparte, LN_contraparte_indicadores.gestion, LN_contraparte_indicadores.valor_numerico
     from LN_contraparte_indicadores 
     inner join LN_indicadores on LN_contraparte_indicadores.indicador = LN_indicadores.indicador
     inner join LN_demo on (LN_contraparte_indicadores.contraparte = LN_demo.contraparte and LN_contraparte_indicadores.gestion = LN_demo.gestion)
     where LN_indicadores.clave_indicador = 'CUMPL_DOC'
     and LN_demo.informe IS NOT NULL) indicadores ON (LN_gestiones.contraparte = indicadores.contraparte and LN_gestiones.gestion = indicadores.gestion)*/



    LEFT OUTER JOIN (SELECT COUNT(*) AS total_documentos, LN_demo.contraparte, LN_demo.gestion
         FROM LN_docs 
         inner join LN_demo ON (LN_docs.contraparte = LN_demo.contraparte
                  and LN_docs.gestion = LN_demo.gestion)
         inner join LN_contraparte_familias on LN_demo.contraparte = LN_contraparte_familias.contraparte
         inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
         inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
                and LN_contrapartes.cliente = LN_familias.cliente)
         inner join LN_set_tipo_doc on (LN_familias.set_doc = LN_set_tipo_doc.set_doc
                 and LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc)
         WHERE LN_docs.aplica = 1
         AND LN_familias.visible = 1
         AND LN_contraparte_familias.activo = 1
         AND LN_demo.contraparte = @V_contraparte
         GROUP BY LN_demo.contraparte, LN_demo.gestion) documentacion  ON (LN_gestiones.contraparte = documentacion.contraparte and LN_gestiones.gestion = documentacion.gestion)


    LEFT OUTER JOIN (SELECT COUNT(*) AS total_ingresados, LN_demo.contraparte, LN_demo.gestion
         FROM LN_docs 
         inner join LN_demo ON (LN_docs.contraparte = LN_demo.contraparte
                  and LN_docs.gestion = LN_demo.gestion)
         inner join LN_contraparte_familias on LN_demo.contraparte = LN_contraparte_familias.contraparte
         inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
         inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
                and LN_contrapartes.cliente = LN_familias.cliente)
         inner join LN_set_tipo_doc on (LN_familias.set_doc = LN_set_tipo_doc.set_doc
                 and LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc)
         WHERE LN_docs.aplica = 1
         AND LN_docs.estado_doc IN ('I','V')
         AND LN_familias.visible = 1
         AND LN_contraparte_familias.activo = 1
         AND LN_demo.contraparte = @V_contraparte
         GROUP BY LN_demo.contraparte, LN_demo.gestion) ingresados  ON (LN_gestiones.contraparte = ingresados.contraparte and LN_gestiones.gestion = ingresados.gestion)


    LEFT OUTER JOIN (SELECT COUNT(*) AS total_verificados, LN_demo.contraparte, LN_demo.gestion
         FROM LN_docs 
         inner join LN_demo ON (LN_docs.contraparte = LN_demo.contraparte
                  and LN_docs.gestion = LN_demo.gestion)
         inner join LN_contraparte_familias on LN_demo.contraparte = LN_contraparte_familias.contraparte
         inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
         inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
                and LN_contrapartes.cliente = LN_familias.cliente)
         inner join LN_set_tipo_doc on (LN_familias.set_doc = LN_set_tipo_doc.set_doc
                 and LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc)
         WHERE LN_docs.aplica = 1
         AND LN_docs.estado_doc = 'V'
         AND LN_familias.visible = 1
         AND LN_contraparte_familias.activo = 1
         AND LN_demo.contraparte = @V_contraparte
         GROUP BY LN_demo.contraparte, LN_demo.gestion) verificados  ON (LN_gestiones.contraparte = verificados.contraparte and LN_gestiones.gestion = verificados.gestion)


    LEFT OUTER JOIN dbo.DelimitedSplit8K(@exceptuados, ',') exceptuados ON informes.informe = convert(int,exceptuados.Item)      

    WHERE LN_demo.contraparte = @V_contraparte
    and tipos_tarea.genera_solicitud_doc = 1
    and exceptuados.Item is null

    and LN_gestiones.desde <= GETDATE() AND LN_gestiones.hasta >= GETDATE()
   and LN_gestiones.vigente = 1



   else
    SELECT informes.informe, informes.estado_informe, informes.id_tipo_informe, tipos_informe.nombre_tipo_informe,
      tipos_informe.tipo_informe, tipos_informe.version,
      tipos_informe.texto_email, tipos_informe.texto_email_solicitud, tipos_informe.asunto_email_solicitud,
      LN_demo.contraparte, LN_gestiones.gestion, padrones.nombre_persona, informes.historial_informe,
      padrones.identificacion, padrones.numero, padrones.identificador, identificadores.abreviatura,
      identificadores.country_code, country.country_name,
      users.first_name, users.last_name, users.email, informes.ingresado_por,
      convert(varchar(10), informes.fecha_ingreso, 103) as fecha_ingreso,
      convert(varchar(10), informes.fecha_aprobacion, 103) as fecha_aprobacion,
      convert(varchar(10), informes.fecha_comprometida, 103) as fecha_comprometida,
      convert(varchar(10), informes.fecha_comprometida, 121) as fecha_comprometida_ymd,
      case
       when informes.estado_informe = 'I' then 'Ingresado'
       when informes.estado_informe = 'A' then 'Asignado'
       when informes.estado_informe = 'T' then 'Aceptado'
       when informes.estado_informe = 'P' then 'En gestión'
       when informes.estado_informe = 'M' then 'En espera'
       when informes.estado_informe = 'E' then 'En proceso'
       when informes.estado_informe = 'F' then 'Finalizado'
       when informes.estado_informe = 'K' then 'Aprobado'
       when informes.estado_informe = 'R' then 'En revisión'
      end as nombre_estado,
      clientes.nombre_cliente, tareas.informe as tarea, tareas.estado_informe as estado_tarea, tareas.fin_pedido_doc,
      convert(varchar(10),tareas.fecha_limite_doc,103) as fecha_limite_doc,
      convert(varchar(10),tareas.fecha_limite_doc,121) as fecha_limite_doc_ymd,
      
      /*isnull(indicadores.valor_numerico,0) as cumplimiento*/

      iif(documentacion.total_documentos is not null AND ingresados.total_ingresados is not null,
       iif(documentacion.total_documentos > 0, ROUND(convert(decimal,ingresados.total_ingresados)/convert(decimal,documentacion.total_documentos)*100,0), 0),
       0) as cumplimiento,

      iif(documentacion.total_documentos is not null AND verificados.total_verificados is not null,
       iif(documentacion.total_documentos > 0, ROUND(convert(decimal,verificados.total_verificados)/convert(decimal,documentacion.total_documentos)*100,0), 0),
       0) as verificacion

      , ingresados.total_ingresados, documentacion.total_documentos, verificados.total_verificados
     ,ln_contrapartes.servicio_contratado, productos.nombre_producto as servicio, ln_familias.nombre_familia as familia
      ,convert(varchar(10),ln_contrapartes.limite_carga_inicial,103) as limite_carga_inicial_dmy
      ,convert(varchar(10),ln_contrapartes.limite_carga_inicial,121) as limite_carga_inicial_ymd
     ,tareas.id_tipo_informe as id



    FROM informes 
    inner join tipos_informe on informes.id_tipo_informe = tipos_informe.id_tipo_informe
    inner join LN_demo ON informes.informe = LN_demo.informe
    inner join LN_contrapartes ON LN_demo.contraparte = LN_contrapartes.contraparte
    inner join LN_gestiones ON LN_contrapartes.contraparte = LN_gestiones.contraparte
    inner join padrones ON LN_contrapartes.id_padron = padrones.id_padron
    inner join identificadores ON padrones.identificador = identificadores.identificador
    inner join country ON identificadores.country_code = country.country_code
    inner join clientes ON LN_contrapartes.cliente = clientes.cliente
    left join productos on productos.producto = ln_contrapartes.servicio_contratado
    left join ln_contraparte_familias cf on cf.contraparte = ln_contrapartes.contraparte
    left join ln_familias on ln_familias.familia = cf.familia 


    inner join informes as tareas ON informes.informe = tareas.informe_padre
    inner join tipos_informe as tipos_tarea on tareas.id_tipo_informe = tipos_tarea.id_tipo_informe
    left outer join users on informes.ingresado_por = users.user_id

    /*LEFT OUTER JOIN (select LN_contraparte_indicadores.contraparte, LN_contraparte_indicadores.gestion, LN_contraparte_indicadores.valor_numerico
     from LN_contraparte_indicadores 
     inner join LN_indicadores on LN_contraparte_indicadores.indicador = LN_indicadores.indicador
     inner join LN_demo on (LN_contraparte_indicadores.contraparte = LN_demo.contraparte and LN_contraparte_indicadores.gestion = LN_demo.gestion)
     where LN_indicadores.clave_indicador = 'CUMPL_DOC'
     and LN_demo.informe IS NOT NULL) indicadores ON (LN_gestiones.contraparte = indicadores.contraparte and LN_gestiones.gestion = indicadores.gestion)*/


    LEFT OUTER JOIN (SELECT COUNT(*) AS total_documentos, LN_demo.contraparte, LN_demo.gestion
         FROM LN_docs 
         inner join LN_demo ON (LN_docs.contraparte = LN_demo.contraparte
                  and LN_docs.gestion = LN_demo.gestion)
         inner join LN_contraparte_familias on LN_demo.contraparte = LN_contraparte_familias.contraparte
         inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
         inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
                and LN_contrapartes.cliente = LN_familias.cliente)
         inner join LN_set_tipo_doc on (LN_familias.set_doc = LN_set_tipo_doc.set_doc
                 and LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc)
         WHERE LN_docs.aplica = 1
         AND LN_familias.visible = 1
         AND LN_contraparte_familias.activo = 1
         AND LN_demo.informe = @V_informe
         AND LN_demo.contraparte = @V_contraparte
         GROUP BY LN_demo.contraparte, LN_demo.gestion) documentacion  ON (LN_gestiones.contraparte = documentacion.contraparte and LN_gestiones.gestion = documentacion.gestion)


    LEFT OUTER JOIN (SELECT COUNT(*) AS total_ingresados, LN_demo.contraparte, LN_demo.gestion
         FROM LN_docs 
         inner join LN_demo ON (LN_docs.contraparte = LN_demo.contraparte
                  and LN_docs.gestion = LN_demo.gestion)
         inner join LN_contraparte_familias on LN_demo.contraparte = LN_contraparte_familias.contraparte
         inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
         inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
                and LN_contrapartes.cliente = LN_familias.cliente)
         inner join LN_set_tipo_doc on (LN_familias.set_doc = LN_set_tipo_doc.set_doc
                 and LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc)
         WHERE LN_docs.aplica = 1
         AND LN_docs.estado_doc IN ('I','V')
         AND LN_familias.visible = 1
         AND LN_contraparte_familias.activo = 1
         AND LN_demo.informe = @V_informe
         AND LN_demo.contraparte = @V_contraparte
         GROUP BY LN_demo.contraparte, LN_demo.gestion) ingresados  ON (LN_gestiones.contraparte = ingresados.contraparte and LN_gestiones.gestion = ingresados.gestion)


    LEFT OUTER JOIN (SELECT COUNT(*) AS total_verificados, LN_demo.contraparte, LN_demo.gestion
         FROM LN_docs 
         inner join LN_demo ON (LN_docs.contraparte = LN_demo.contraparte
                  and LN_docs.gestion = LN_demo.gestion)
         inner join LN_contraparte_familias on LN_demo.contraparte = LN_contraparte_familias.contraparte
         inner join LN_contrapartes on LN_demo.contraparte = LN_contrapartes.contraparte
         inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
                and LN_contrapartes.cliente = LN_familias.cliente)
         inner join LN_set_tipo_doc on (LN_familias.set_doc = LN_set_tipo_doc.set_doc
                 and LN_docs.tipo_doc = LN_set_tipo_doc.tipo_doc)
         WHERE LN_docs.aplica = 1
         AND LN_docs.estado_doc = 'V'
         AND LN_familias.visible = 1
         AND LN_contraparte_familias.activo = 1
         AND LN_demo.informe = @V_informe
         AND LN_demo.contraparte = @V_contraparte
         GROUP BY LN_demo.contraparte, LN_demo.gestion) verificados  ON (LN_gestiones.contraparte = verificados.contraparte and LN_gestiones.gestion = verificados.gestion)


    LEFT OUTER JOIN dbo.DelimitedSplit8K(@exceptuados, ',') exceptuados ON informes.informe = convert(int,exceptuados.Item)        

    WHERE informes.informe = @V_informe
    and LN_demo.contraparte = @V_contraparte

/* COMENTO LA SIGUIENTE LINEA DE TAREA DE GESTION, PORQUE SI ES UN INFORME SIN GESTION PERO LOS DOCS LOS CARGA FIDELITAS ENTONCES LA CONSULTA VUELVE VACIA
SI SE REALIZA UN FETCH-ONE EN ESTA CONSULTA SE OBTIENEN LOS DATOS DEL INFORME SIN PROBLEMAS Y EL BACKEND NO FALLA
--and tipos_tarea.genera_solicitud_doc = 1
*/


    and LN_gestiones.desde <= GETDATE() AND LN_gestiones.hasta >= GETDATE()
       and LN_gestiones.vigente = 1

  
 end


 /** backend : para dar por finalizada manualmente la gestión de documentación. El informe debe estar en gestión, la tarea en proceso o rechazada
  y la marca de finalización de carga en la tarea (fin_pedido_doc = 0) **/

 if (@V_accion = 'finalizar_gestion_informe') begin

  if (@V_contraparte is not null AND @V_informe is not null) begin

   declare @historial_informe varchar(max) = NULL
   declare @historial_tarea varchar(max) = NULL

   SELECT @estado = informes.estado_informe, 
     @estado_tarea = tareas.estado_informe,
     @tarea = tareas.informe,
     @historial_informe = convert(varchar(max),informes.historial_informe),
     @historial_tarea = convert(varchar(max),tareas.historial_informe)
   FROM informes 
   inner join LN_demo ON informes.informe = LN_demo.informe
   inner join LN_contrapartes ON LN_demo.contraparte = LN_contrapartes.contraparte
   inner join LN_gestiones ON LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join informes as tareas ON informes.informe = tareas.informe_padre
   inner join tipos_informe as tipos_tarea on tareas.id_tipo_informe = tipos_tarea.id_tipo_informe
   WHERE informes.informe = @V_informe
   and LN_demo.contraparte = @V_contraparte
   and tipos_tarea.genera_solicitud_doc = 1

   if (@estado = 'P' AND (@estado_tarea = 'E' OR @estado_tarea = 'R')) begin

    if (@historial_tarea is not null)
     SET @historial_tarea = @historial_tarea + CHAR(13) + CHAR(10)
    else
     SET @historial_tarea = ''

    SET @historial_tarea = @historial_tarea + @preffix + 'Finalización de la tarea por terminación manual de la gestión en backend.'

    UPDATE informes SET
     estado_informe = 'F',
     fin_pedido_doc = 1, 
     fecha_entregado = GETDATE(),
     historial_informe = @historial_tarea
    WHERE informe = @tarea

    if (@historial_informe is not null)
     SET @historial_informe = @historial_informe + CHAR(13) + CHAR(10)
    else
     SET @historial_informe = ''

    SET @historial_informe = @historial_informe + @preffix + 'Tarea de gestión de documentación finalizada manualmente en backend.'

    SET @historial_informe = @historial_informe + CHAR(13) + CHAR(10) + @preffix + 'Informe colocado en proceso automáticamente por finalización manual de la gestión en backend.'

    /* PARA QUE APAREZCA EN DOCS OK NO DEBE DARSE POR APROBADA LA TAREA DE GESTIÓN, SINO FINALIZADA */

    UPDATE informes SET
     historial_informe = @historial_informe,
     excepcion = 0,
     excepcion_prod = 1,
     estado_informe = 'E'
    WHERE informe = @informe



   end

  end
  
 end


 /* Esta opción es para llamar desde el backend cuando se decide publicar un Report / Dossier para que esté visible en el LED del cliente.
  Cierra todas las tareas activas y da el informe por aprobado. Usar con precaución
  */

 if (@V_accion = 'cerrar_informe') begin

  if (@V_informe > 0) begin

   /* ESTADOS INFORME  : ingresado, no calificado, aceptado, en gestión, en proceso, en espera, finalizado */

   if exists (select informe from informes
      where informe = @V_informe
      and informe_padre is null
      and estado_informe IN ('I','A','T','P','E','W','F') ) begin

    DECLARE @hist_tarea varchar(max)
    DECLARE @asignado int
    DECLARE @operacion varchar(1)

    declare Tareas cursor for

    select informe, estado_informe, CONVERT(VARCHAR(MAX), historial_informe) AS historial_informe, asignado
    from informes
    where informe_padre = @V_informe
    and estado_informe IN ('I','A','T','P','E','W','F','R')

    Open Tareas

    Fetch Next from Tareas into @tarea, @estado_tarea, @detalle_log, @asignado

    While @@FETCH_STATUS = 0 begin

     SET @hist_tarea = @detalle_log

     if (@estado_tarea = 'I' OR @estado_tarea = 'P' OR @estado_tarea = 'E' or @estado_tarea = 'W') begin
      set @hist_tarea = @hist_tarea + CHAR(13) + CHAR(10) +  @preffix + 'Finalización automática de la tarea por publicación del producto en backend.'
     end

     if (@estado_tarea = 'T') begin
      set @hist_tarea = @hist_tarea + CHAR(13) + CHAR(10) +  @preffix + 'Tarea iniciada automáticamente por publicación del producto en backend.'
      set @hist_tarea = @hist_tarea + CHAR(13) + CHAR(10) +  @preffix + 'Finalización automática de la tarea por publicación del producto en backend.'
     end

     if (@estado_tarea = 'A') begin
      set @hist_tarea = @hist_tarea + CHAR(13) + CHAR(10) +  @preffix + 'Aceptación automática de la tarea por publicación del producto en backend.'
      set @hist_tarea = @hist_tarea + CHAR(13) + CHAR(10) +  @preffix + 'Tarea iniciada automáticamente por publicación del producto en backend.'
      set @hist_tarea = @hist_tarea + CHAR(13) + CHAR(10) +  @preffix + 'Finalización automática de la tarea por publicación del producto en backend.'
     end

     if (@estado_tarea = 'R') begin
      set @hist_tarea = @hist_tarea + CHAR(13) + CHAR(10) +  @preffix + 'Tarea iniciada automáticamente por publicación del producto en backend.'
      set @hist_tarea = @hist_tarea + CHAR(13) + CHAR(10) +  @preffix + 'Finalización automática de la tarea por publicación del producto en backend.'
     end

     set @hist_tarea = @hist_tarea + CHAR(13) + CHAR(10) +  @preffix + 'Aprobación automática de la tarea por publicación del producto en backend.'

     UPDATE informes SET estado_informe = 'K',
          historial_informe = @hist_tarea,
          fecha_aceptacion = iif(@estado_tarea = 'A', GETDATE(), fecha_aceptacion),
          fecha_iniciado = iif(@estado_tarea = 'I' OR @estado_tarea = 'A' OR @estado_tarea = 'T', GETDATE(), fecha_iniciado),
          fecha_entregado = iif(@estado_tarea not in ('F','K','N'), GETDATE(), fecha_entregado), /*iif(@estado_tarea != 'F', GETDATE(), fecha_entregado),*/
          fecha_aprobacion = iif(@estado_tarea not in ('F','K','N'), GETDATE(), fecha_aprobacion),/*GETDATE(),*/
          aprobado_por = @V_user_id
     WHERE informe = @tarea

     /* Cierro el log de la tarea */
     if (@asignado > 0) begin
      select TOP 1 @operacion = operacion from informes_log where informe = @tarea order by horario desc

      if (@operacion = 'I') begin
       insert into informes_log (informe, horario, user_id, operacion)
       values (@tarea, GETDATE(), @asignado, 'F')
      end
      else
      if (@operacion is null) begin
       insert into informes_log (informe, horario, user_id, operacion)
       values (@tarea, dateadd(minute,-1,getdate()), @asignado, 'I')

       insert into informes_log (informe, horario, user_id, operacion)
       values (@tarea, GETDATE(), @asignado, 'F')
      end

     end



     Fetch Next from Tareas into @tarea, @estado_tarea, @detalle_log, @asignado
    end

    Close Tareas
    Deallocate Tareas

    /* Tareas terminadas, cerrar informe */

    SELECT @estado = estado_informe, @detalle_log = historial_informe
    from informes 
    where informe = @V_informe


    if (@estado = 'I' OR @estado = 'P' OR @estado = 'E' or @estado = 'W') begin
     set @detalle_log = @detalle_log + CHAR(13) + CHAR(10) +  @preffix + 'Finalización automática del informe por publicación del producto en backend.'
    end

    if (@estado = 'T') begin
     set @detalle_log = @detalle_log + CHAR(13) + CHAR(10) +  @preffix + 'Informe iniciado automáticamente por publicación del producto en backend.'
     set @detalle_log = @detalle_log + CHAR(13) + CHAR(10) +  @preffix + 'Finalización automática del informe por publicación del producto en backend.'
    end

    if (@estado = 'A') begin
     set @detalle_log = @detalle_log + CHAR(13) + CHAR(10) +  @preffix + 'Aceptación automática del informe por publicación del producto en backend.'
     set @detalle_log = @detalle_log + CHAR(13) + CHAR(10) +  @preffix + 'Informe iniciado automáticamente por publicación del producto en backend.'
     set @detalle_log = @detalle_log + CHAR(13) + CHAR(10) +  @preffix + 'Finalización automática del informe por publicación del producto en backend.'
    end

    if (@estado = 'R') begin
     set @detalle_log = @detalle_log + CHAR(13) + CHAR(10) +  @preffix + 'Informe iniciado automáticamente por publicación del producto en backend.'
     set @detalle_log = @detalle_log + CHAR(13) + CHAR(10) +  @preffix + 'Finalización automática del informe por publicación del producto en backend.'
    end

    set @detalle_log = @detalle_log + CHAR(13) + CHAR(10) +  @preffix + 'Aprobación automática del informe por publicación del producto en backend.'

    UPDATE informes SET estado_informe = 'K',
         historial_informe = @detalle_log,
         fecha_aceptacion = iif(@estado = 'A', GETDATE(), fecha_aceptacion),
         fecha_iniciado = iif(@estado = 'I' OR @estado = 'A' OR @estado = 'T', GETDATE(), fecha_iniciado),
         fecha_entregado = iif(@estado not in ('F','K','N'), GETDATE(), fecha_entregado),/*iif(@estado != 'F', GETDATE(), fecha_entregado),*/
         fecha_aprobacion = iif(@estado not in ('F','K','N'), GETDATE(), fecha_entregado), /*GETDATE(),*/
         aprobado_por = @V_user_id,
         excepcion = 0,
         excepcion_prod = 0         
    WHERE informe = @V_informe


   end

  end

 end

END
GO

Used By

No items found