dbo.Imperium_contratista_doc_upload_reemplazo

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

2
Name Data Type Length Description
@p_doc_id bigint 8
@p_user_id int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
/*

exec Imperium_contratista_nuevo_doc_reemplazo 4938932119
exec imperium_data_doc 4938932119
*/


-- =============================================
CREATE OR ALTER PROCEDURE dbo.Imperium_contratista_doc_upload_reemplazo
 -- Add the parameters for the stored procedure here
 @p_doc_id         bigint = NULL,
 @p_user_id         int = NULL

  
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

    -- Insert statements for procedure here
 DECLARE @led_seccion varchar(1) = NULL, @exist int = 0, @doc_version tinyint, @crear_reemplazo tinyint = 0 
 DECLARE @estado_original varchar(1), @estado_reemplazo varchar(1), @nueva_version tinyint
 DECLARE @timestamp varchar(16) = CONVERT(VARCHAR(10),GETDATE(),103)+' '+CONVERT(VARCHAR(5),GETDATE(),14)
 DECLARE @usuario varchar(100) = ''

 if (@p_doc_id > 0) begin

  if (@p_user_id > 0) begin
   select @usuario = ISNULL(first_name,'')+' '+ISNULL(last_name,'') from users where user_id = @p_user_id
  end

  select @led_seccion = led_seccion from led_docs where doc_id = @p_doc_id and doc_id_lista is null

  if (@led_seccion is not null) begin

   if (@led_seccion = 'C')

    SELECT @exist = COUNT(*)
    FROM led_docs 
    INNER JOIN led_tipos_doc ON led_docs.tipo_doc = led_tipos_doc.tipo_doc
    INNER JOIN led_contratistas ON led_docs.contratista = led_contratistas.contratista
    INNER JOIN led_tipos_contratista ON led_contratistas.tipo_contratista = led_tipos_contratista.tipo_contratista
    INNER JOIN led_cliente_contratista ON (led_docs.cliente = led_cliente_contratista.cliente
              AND led_docs.tipo_doc = led_cliente_contratista.tipo_doc
              AND led_contratistas.tipo_contratista = led_cliente_contratista.tipo_contratista)
    LEFT OUTER JOIN led_docs_aux ON (led_docs.doc_id = led_docs_aux.doc_id AND led_docs.doc_version = led_docs_aux.doc_version)
    WHERE led_docs.doc_id = @p_doc_id
    AND (
     (led_docs.estado_doc = 'V'
     AND led_tipos_doc.modalidad = 'A'
     AND led_docs.periodo = dbo.PeriodoAdelantado() 
     AND ISNULL(led_cliente_contratista.ci_killer, 0) > 0
     AND DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) <= 96
     AND DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) >= 0)
    OR
     (led_docs.doc_version > 0 AND
     led_docs.estado_doc IN ('I','R') AND
     led_docs_aux.estado_doc IN ('I','R') AND
     led_tipos_doc.modalidad = 'A' AND 
     led_docs.periodo = dbo.PeriodoAdelantado() AND
     ISNULL(led_cliente_contratista.ci_killer, 0) > 0 AND
     DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) <= 96 AND
     DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) >= 0))



   else if (@led_seccion = 'E')

    SELECT @exist = COUNT(*)
    FROM led_docs 
    INNER JOIN led_tipos_doc ON led_docs.tipo_doc = led_tipos_doc.tipo_doc
    INNER JOIN led_empleados ON led_docs.empleado = led_empleados.empleado
    INNER JOIN led_tipos_empleado ON led_empleados.tipo_empleado = led_tipos_empleado.tipo_empleado
    INNER JOIN led_cliente_empleado ON (led_docs.cliente = led_cliente_empleado.cliente
              AND led_docs.tipo_doc = led_cliente_empleado.tipo_doc
              AND led_empleados.tipo_empleado = led_cliente_empleado.tipo_empleado)
    LEFT OUTER JOIN led_docs_aux ON (led_docs.doc_id = led_docs_aux.doc_id AND led_docs.doc_version = led_docs_aux.doc_version)
    WHERE led_docs.doc_id = @p_doc_id
    AND (
     (led_docs.estado_doc = 'V'
     AND led_tipos_doc.modalidad = 'A'
     AND led_docs.periodo = dbo.PeriodoAdelantado() 
     AND ISNULL(led_cliente_empleado.ci_killer, 0) > 0
     AND DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) <= 96
     AND DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) >= 0)
    OR
     (led_docs.doc_version > 0 AND
     led_docs.estado_doc IN ('I','R') AND
     led_docs_aux.estado_doc IN ('I','R') AND
     led_tipos_doc.modalidad = 'A' AND 
     led_docs.periodo = dbo.PeriodoAdelantado() AND
     ISNULL(led_cliente_empleado.ci_killer, 0) > 0 AND
     DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) <= 96 AND
     DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) >= 0))


   else if (@led_seccion = 'V')

    SELECT @exist = COUNT(*)
    FROM led_docs 
    INNER JOIN led_tipos_doc ON led_docs.tipo_doc = led_tipos_doc.tipo_doc
    INNER JOIN led_vehiculos ON led_docs.vehiculo = led_vehiculos.vehiculo
    INNER JOIN led_tipos_vehiculo ON led_vehiculos.tipo_vehiculo = led_tipos_vehiculo.tipo_vehiculo
    INNER JOIN led_cliente_vehiculo ON (led_docs.cliente = led_cliente_vehiculo.cliente
              AND led_docs.tipo_doc = led_cliente_vehiculo.tipo_doc
              AND led_vehiculos.tipo_vehiculo = led_cliente_vehiculo.tipo_vehiculo)
    LEFT OUTER JOIN led_docs_aux ON (led_docs.doc_id = led_docs_aux.doc_id AND led_docs.doc_version = led_docs_aux.doc_version)
    WHERE led_docs.doc_id = @p_doc_id
    AND (
     (led_docs.estado_doc = 'V'
     AND led_tipos_doc.modalidad = 'A'
     AND led_docs.periodo = dbo.PeriodoAdelantado() 
     AND ISNULL(led_cliente_vehiculo.ci_killer, 0) > 0
     AND DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) <= 96
     AND DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) >= 0)
    OR
     (led_docs.doc_version > 0 AND
     led_docs.estado_doc IN ('I','R') AND
     led_docs_aux.estado_doc IN ('I','R') AND
     led_tipos_doc.modalidad = 'A' AND 
     led_docs.periodo = dbo.PeriodoAdelantado() AND
     ISNULL(led_cliente_vehiculo.ci_killer, 0) > 0 AND
     DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) <= 96 AND
     DATEDIFF(HOUR, GETDATE(), ISNULL(led_docs.fecha_vigencia, DATEFROMPARTS(2059,12,31))) >= 0))


   if (@exist = 1) begin

    -- El doc es próximo a vencer pero hay que chequear que no haya una versión de reemplazo activa
    select @doc_version = doc_version, @estado_original = estado_doc from led_docs where doc_id = @p_doc_id

    if (@doc_version = 0 AND @estado_original = 'V') begin
     set @crear_reemplazo = 1
    end
    else begin
     -- hay másde una versión y el estado verificado se guarda en la versión 0
     select @estado_original = estado_doc from led_docs_aux where doc_id = @p_doc_id and doc_version = 0
     select @estado_reemplazo = estado_doc from led_docs_aux where doc_id = @p_doc_id and doc_version = @doc_version

     -- se puede crear reemplazo si ambas estan verificadas
     if (@estado_original = 'V' AND @estado_reemplazo = 'V') begin
      set @crear_reemplazo = 1
     end
    end

    if (@crear_reemplazo = 1) begin
     set @nueva_version = @doc_version + 1

     -- Si es la versión 1 también tengo que crear la 0 en la tabla de documentos de reemplazo
     if (@doc_version = 0) begin

      insert into led_docs_aux
       (doc_id, tipo_doc, estado_doc, led_seccion, cliente, contratista, empleado, vehiculo, ingresado, ingresado_por, verificado, verificado_por, rechazado, 
       rechazado_por, fecha_vigencia, texto_rechazo, doc_log, periodo, contratista_1, grupo_doc, insertado, fecha_tolerancia, compliance_doc, doc_id_lista, 
       aprobacion_parcial, notificacion, parcial_actualizado, reapertura_por_alta, replicated_doc_id, doc_version)

      select doc_id, tipo_doc, estado_doc, led_seccion, cliente, contratista, empleado, vehiculo, ingresado, ingresado_por, verificado, verificado_por, rechazado, 
       rechazado_por, fecha_vigencia, texto_rechazo, doc_log, periodo, contratista_1, grupo_doc, insertado, fecha_tolerancia, compliance_doc, doc_id_lista, 
       aprobacion_parcial, notificacion, parcial_actualizado, reapertura_por_alta, replicated_doc_id, 0 as doc_version
      from led_docs
      where doc_id = @p_doc_id

     end
     
     -- Inserto la nueva versión como ingresado
     insert into led_docs_aux
      (doc_id, tipo_doc, estado_doc, led_seccion, cliente, contratista, empleado, vehiculo, ingresado, ingresado_por, verificado, verificado_por, rechazado, 
      rechazado_por, fecha_vigencia, texto_rechazo, doc_log, periodo, contratista_1, grupo_doc, insertado, fecha_tolerancia, compliance_doc, doc_id_lista, 
      aprobacion_parcial, notificacion, parcial_actualizado, reapertura_por_alta, replicated_doc_id, doc_version)

     select doc_id, tipo_doc, 'I' as estado_doc, led_seccion, cliente, contratista, empleado, vehiculo, 
      GETDATE() AS ingresado, @p_user_id AS ingresado_por, NULL AS verificado, NULL AS verificado_por, NULL AS rechazado, NULL AS rechazado_por, 
      NULL AS fecha_vigencia, NULL as texto_rechazo, 
      @timestamp + ' - ' + 'Documento de reemplazo ingresado por ' + @usuario AS doc_log, 
      periodo, contratista_1, grupo_doc, GETDATE() AS insertado, NULL AS fecha_tolerancia, 
      'I' AS compliance_doc, doc_id_lista, 0 AS aprobacion_parcial, NULL AS notificacion, 0 AS parcial_actualizado, 0 AS reapertura_por_alta, 
      NULL AS replicated_doc_id, @nueva_version as doc_version
     from led_docs
     where doc_id = @p_doc_id


     -- Actualizo la tabla de Documentos principal
     UPDATE led_docs SET 
      doc_version = @nueva_version,
      estado_doc = 'I', 
      compliance_doc = 'I',
      doc_log = CONVERT(VARCHAR(MAX),doc_log)+CHAR(13)+CHAR(10)+@timestamp + ' - ' + 'Documento de reemplazo ingresado por ' + @usuario
     WHERE doc_id = @p_doc_id

    end else begin

     -- Se actualizó el reemplazo rechazado

     UPDATE led_docs SET 
      estado_doc = 'I', 
      compliance_doc = 'I',
      doc_log = CONVERT(VARCHAR(MAX),doc_log)+CHAR(13)+CHAR(10)+@timestamp + ' - ' + 'Documento de reemplazo ingresado por ' + @usuario
     WHERE doc_id = @p_doc_id

     -- Actualizo la tabla de Documentos Aux en la versión ultima
     UPDATE led_docs_aux SET 
      estado_doc = 'I', 
      compliance_doc = 'I',
      doc_log = CONVERT(VARCHAR(MAX),doc_log)+CHAR(13)+CHAR(10)+@timestamp + ' - ' + 'Documento de reemplazo ingresado por ' + @usuario
     WHERE doc_id = @p_doc_id
     AND doc_version = @doc_version


    end


   end

  end


 end
  
END
GO

Used By

No items found