dbo.Imperium_vista_contratista_Alta_Subcontratista

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

7
Name Data Type Length Description
@p_contratista int 4
@p_id_padron int 4
@p_tipo_contratista int 4
@p_tipo_alta tinyint 1
@p_subcontratista_de int 4
@p_locaciones varchar 200
@p_user_id int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
exec Imperium_vista_contratista_Alta_Subcontratista 5080,8736853,226,2,5080,1019,30963358
*/

-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.Imperium_vista_contratista_Alta_Subcontratista 
 -- Add the parameters for the stored procedure here
 @p_contratista          int,
 @p_id_padron          int,
 @p_tipo_contratista         int,
 @p_tipo_alta          tinyint,
 @p_subcontratista_de        int,
 @p_locaciones          varchar(200),
 @p_user_id           int

 /*
  select * from led_contratistas where contratista_1 = 6122
  */

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

    -- Insert statements for procedure here
 IF (@p_contratista > 0 AND @p_id_padron > 0 AND @p_tipo_contratista > 0 AND @p_subcontratista_de > 0 AND @p_user_id > 0) BEGIN

  DECLARE @subcontratista    INT
  DECLARE @cliente     INT
  DECLARE @contratista_1    INT
  DECLARE @modalidad     VARCHAR(1)
  DECLARE @tipo_doc     SMALLINT
  DECLARE @grupo_doc     INT
  DECLARE @dias_tolerancia   TINYINT
  DECLARE @fecha_tolerancia   DATETIME
  DECLARE @fecha_vigencia    DATETIME
  DECLARE @estado_inicial    VARCHAR(1)
  DECLARE @periodicidad    VARCHAR(1)
  DECLARE @doc_id_lista    SMALLINT
  DECLARE @compliance_doc    VARCHAR(1)
  DECLARE @alta      bit = 0
  DECLARE @reafectacion    bit = 0
  DECLARE @reactivacion    bit = 0
  DECLARE @estado_anterior   varchar(1) = NULL
  DECLARE @periodo     INT
  DECLARE @doc_log     VARCHAR(MAX)
  DECLARE @locacion     INT
  DECLARE @periodos_text    VARCHAR(20) = NULL

  DECLARE @periodo_adelantado INT = CONVERT(INT, CONVERT(VARCHAR(4),YEAR(GETDATE())) + RIGHT('00' + CONVERT(VARCHAR(2),MONTH(GETDATE())), 2))
  DECLARE @periodo_vencido INT = CONVERT(INT, CONVERT(VARCHAR(4),YEAR(DATEADD(MONTH,-1,GETDATE()))) + RIGHT('00' + CONVERT(VARCHAR(2),MONTH(DATEADD(MONTH,-1,GETDATE()))), 2))

  SELECT @cliente = cliente, @contratista_1 = contratista_1
  FROM led_contratistas WHERE contratista = @p_contratista

  IF NOT EXISTS (SELECT contratista FROM led_contratistas WHERE contratista_1 = @p_contratista AND id_padron = @p_id_padron AND subcontratista_de = @p_subcontratista_de) 
  BEGIN

   INSERT INTO led_contratistas
   (cliente, estado_contratista, tipo_contratista, id_padron, contratista_1, subcontratista_de, created)
   SELECT @cliente as cliente, 'A' as estado_contratista, @p_tipo_contratista as tipo_contratista, 
   @p_id_padron as id_padron, @contratista_1 AS contratista_1, @p_subcontratista_de as subcontratista_de, GETDATE() as created
   FROM led_contratistas
   WHERE contratista = @p_contratista

   SELECT @subcontratista = @@IDENTITY

   SET @alta = 1

  END ELSE BEGIN
   /* existe el id padron bajo el contratista */

   SELECT @subcontratista = contratista, @estado_anterior = estado_contratista
   from led_contratistas
   WHERE contratista_1 = @p_contratista AND id_padron = @p_id_padron AND subcontratista_de = @p_subcontratista_de

   UPDATE led_contratistas SET tipo_contratista = @p_tipo_contratista WHERE contratista = @subcontratista

  END


  /* modalidades del subcontratista - vencida / adelantada */
  DECLARE modalidades CURSOR FOR

   SELECT led_tipos_doc.modalidad
   FROM led_tipos_doc 
   inner join led_cliente_contratista on led_tipos_doc.tipo_doc = led_cliente_contratista.tipo_doc
   WHERE led_cliente_contratista.tipo_contratista = @p_tipo_contratista
   AND led_cliente_contratista.cliente = @cliente
   GROUP BY led_tipos_doc.modalidad
   HAVING led_tipos_doc.modalidad IS NOT NULL
   ORDER BY led_tipos_doc.modalidad DESC

  OPEN modalidades  

  FETCH NEXT FROM modalidades INTO @modalidad  

  WHILE @@FETCH_STATUS = 0 BEGIN 

   IF (@modalidad = 'V') BEGIN
   
    IF NOT EXISTS (SELECT subcontratista FROM led_subcontratista_periodo WHERE subcontratista = @subcontratista AND periodo = @periodo_vencido) BEGIN
    
     INSERT INTO led_subcontratista_periodo 
     (subcontratista, periodo, contratista, tipo_alta, contratista_1, fecha_afectacion)
     values
     (@subcontratista, @periodo_vencido, @p_contratista, @p_tipo_alta, @contratista_1, GETDATE())

     IF (@estado_anterior = 'A') BEGIN
      SET @reafectacion = 1
     END


     IF (@periodos_text IS NOT NULL) SET @periodos_text = @periodos_text + ', '
     SET @periodos_text = @periodos_text + CONVERT(VARCHAR, @periodo_vencido)

    END


    IF (@estado_anterior = 'N') BEGIN
     UPDATE led_contratistas SET estado_contratista = 'A' WHERE contratista = @subcontratista

     SET @reactivacion = 1
    END

   END

   ELSE BEGIN
    /* periodo adelantado */

    IF NOT EXISTS (SELECT subcontratista FROM led_subcontratista_periodo WHERE subcontratista = @subcontratista AND periodo = @periodo_adelantado) BEGIN

     INSERT INTO led_subcontratista_periodo 
     (subcontratista, periodo, contratista, tipo_alta, contratista_1, fecha_afectacion)
     values
     (@subcontratista, @periodo_adelantado, @p_contratista, NULL, @contratista_1, GETDATE())


     IF (@estado_anterior = 'A') BEGIN
      SET @reafectacion = 1
     END

     IF (@periodos_text IS NOT NULL) SET @periodos_text = @periodos_text + ', '
     SET @periodos_text = @periodos_text + CONVERT(VARCHAR, @periodo_adelantado)

    END
 
    IF (@estado_anterior = 'N') BEGIN
     UPDATE led_contratistas SET estado_contratista = 'A' WHERE contratista = @subcontratista

     SET @reactivacion = 1
    END

   END

   FETCH NEXT FROM modalidades INTO @modalidad  
  END

  CLOSE modalidades
  DEALLOCATE modalidades
  /* fin modalidades */



  /* tabla multi */
  IF NOT EXISTS (SELECT contratista FROM led_contratista_multi WHERE contratista = @subcontratista) BEGIN

   INSERT INTO led_contratista_multi
   (contratista, id, tipo_contratista, id_dep, vigencia_desde, vigencia_hasta, tipo_contratista_principal,
    contratista_1, cliente, activo, created, created_by)
   VALUES
   (@subcontratista, 1, @p_tipo_contratista, 0, convert(date,getdate()), NULL, NULL,
    @contratista_1, @cliente, 1, GETDATE(), @p_user_id)


  END ELSE BEGIN

   IF NOT EXISTS (SELECT contratista FROM led_contratista_multi WHERE contratista = @subcontratista AND tipo_contratista = @p_tipo_contratista) BEGIN

    INSERT INTO led_contratista_multi
    (contratista, id, tipo_contratista, id_dep, vigencia_desde, vigencia_hasta, tipo_contratista_principal,
     contratista_1, cliente, activo, created, created_by)
    SELECT @subcontratista AS contratista,
     (SELECT ISNULL(MAX(id), 0) + 1 FROM led_contratista_multi WHERE contratista = @subcontratista) AS id,
     @p_tipo_contratista AS tipo_contratista, 0 AS id_dep, 
     convert(date,getdate()) AS vigencia_desde, NULL AS vigencia_hasta, 
     NULL as tipo_contratista_principal,
     @contratista_1 AS contratista_1,
     @cliente AS cliente, 1 AS activo, GETDATE() AS created, @p_user_id as created_by


   END ELSE BEGIN

    UPDATE led_contratista_multi SET
    activo = 1, 
    modified = GETDATE(),
    modified_by = @p_user_id,
    vigencia_desde = convert(date,getdate()),
    vigencia_hasta = NULL
    WHERE contratista = @subcontratista
    AND tipo_contratista = @p_tipo_contratista

   END

   UPDATE led_contratista_multi SET
   activo = 0,
   modified = GETDATE(),
   modified_by = @p_user_id
   WHERE contratista = @subcontratista
   AND tipo_contratista <> @p_tipo_contratista

  END
  /* fin tabla multi */




  /* documentos de alta */
  IF (NOT @reafectacion = 1) BEGIN

   IF (@p_tipo_alta > 0) BEGIN 

    DECLARE tipos_doc_alta CURSOR FOR

     SELECT led_cliente_contratista.tipo_doc, led_tipos_doc.modalidad,
      led_cliente_contratista.dias_tolerancia, led_cliente_contratista.estado_inicial,
      led_grupo_tipo_doc.grupo_doc, led_tipos_doc.periodicidad, led_tipos_doc.tipo_doc_lista
     FROM led_cliente_contratista inner join led_tipos_doc
      on led_cliente_contratista.tipo_doc = led_tipos_doc.tipo_doc
     inner join led_grupo_tipo_doc on led_tipos_doc.tipo_doc = led_grupo_tipo_doc.tipo_doc
     inner join led_grupos_doc on 
      (led_grupo_tipo_doc.grupo_doc = led_grupos_doc.grupo_doc
      AND led_cliente_contratista.cliente = led_grupos_doc.cliente)
     WHERE led_cliente_contratista.cliente = @cliente
     AND led_cliente_contratista.tipo_contratista = @p_tipo_contratista
     AND led_cliente_contratista.tipo_alta = @p_tipo_alta
     AND led_cliente_contratista.activo = 1

    OPEN tipos_doc_alta  

    FETCH NEXT FROM tipos_doc_alta INTO @tipo_doc, @modalidad, @dias_tolerancia, 
             @estado_inicial, @grupo_doc, @periodicidad, @doc_id_lista

    WHILE @@FETCH_STATUS = 0 BEGIN
    
     IF (@modalidad = 'V') 
      SET @periodo = @periodo_vencido
     ELSE
      SET @periodo = @periodo_adelantado

     IF (@estado_inicial = 'N')
      SET @compliance_doc = 'B'
     ELSE
      IF (@estado_inicial = 'I')
       SET @compliance_doc = 'B'
      ELSE
       IF (@estado_inicial = 'V')
        SET @compliance_doc = 'V'
       ELSE
        SET @compliance_doc = 'N'

     
     IF (@dias_tolerancia > 0)
      SET @fecha_tolerancia = DATEADD(SECOND,-1,CONVERT(DATETIME,DATEADD(DAY, @dias_tolerancia+1, CONVERT(DATE, GETDATE()))))
     ELSE
      SET @fecha_tolerancia = DATEADD(SECOND,-1,CONVERT(DATETIME,DATEADD(DAY, 6, CONVERT(DATE, GETDATE()))))


     DECLARE @dias_mes_a INT = datediff(day, getdate(), dateadd(month, 1, getdate()))
     DECLARE @dias_mes_v INT = datediff(day, dateadd(month,-1,getdate()), dateadd(month, 1, dateadd(month,-1,getdate())))
     DECLARE @mes_a INT = month(getdate())
     DECLARE @mes_v INT = month(dateadd(month,-1,getdate()))
     DECLARE @ano_a INT = Year(getdate())
     DECLARE @ano_v INT = Year(dateadd(month,-1,getdate()))


     IF (@periodicidad = 'M') BEGIN

      IF (@modalidad = 'V')
       SET @fecha_vigencia = DATETIMEFROMPARTS(@ano_v,@mes_v,@dias_mes_v,23,59,59,0)
      ELSE
       SET @fecha_vigencia = DATETIMEFROMPARTS(@ano_a,@mes_a,@dias_mes_a,23,59,59,0)

     END ELSE

      IF (@periodicidad = 'A') BEGIN

       IF (@modalidad = 'V')
        SET @fecha_vigencia = DATETIMEFROMPARTS(@ano_v,12,31,23,59,59,0)
       ELSE
        SET @fecha_vigencia = DATETIMEFROMPARTS(@ano_a,12,31,23,59,59,0)

      END ELSE       
       SET @fecha_vigencia = NULL

     

     IF NOT EXISTS (SELECT tipo_doc, periodo, led_seccion, contratista, contratista_1
         FROM led_docs
         WHERE tipo_doc = @tipo_doc
         AND periodo = @periodo
         AND led_seccion = 'C'
         AND contratista_1 = @contratista_1
         AND contratista = @subcontratista) BEGIN

      SET @doc_log = CONVERT(VARCHAR, GETDATE(), 120) + ' - GENERACION AUTOMATICA DE DOCUMENTO DE ALTA DE SUBCONTRATISTA'

      INSERT INTO led_docs 
      (tipo_doc, cliente, contratista, contratista_1, led_seccion, periodo,
      insertado, estado_doc, compliance_doc, grupo_doc, fecha_tolerancia, fecha_vigencia, 
      doc_id_lista, doc_log)
      VALUES
      (@tipo_doc, @cliente, @subcontratista, @contratista_1, 'C', @periodo,
      GETDATE(), @estado_inicial, @compliance_doc, @grupo_doc, @fecha_tolerancia, 
      @fecha_vigencia, @doc_id_lista, @doc_log)


     END


     FETCH NEXT FROM tipos_doc_alta INTO @tipo_doc, @modalidad, @dias_tolerancia, 
              @estado_inicial, @grupo_doc, @periodicidad, @doc_id_lista
    END

    CLOSE tipos_doc_alta
    DEALLOCATE tipos_doc_alta



   END

  END
  /* fin doc de alta */
  /* Locaciones : Viene una lista de ID generada por los checkboxes restringida por las locaciones del contratista principal */
  IF (@p_locaciones IS NOT NULL) BEGIN

   set @p_locaciones = '0,' + @p_locaciones

   DECLARE Locaciones CURSOR FOR

    SELECT led_locaciones.locacion
    FROM led_locaciones INNER JOIN led_contratista_locaciones
    ON led_locaciones.locacion = led_contratista_locaciones.locacion
     INNER JOIN dbo.DelimitedSplit8K(@p_locaciones, ',') lista ON led_locaciones.locacion = lista.Item
    WHERE led_locaciones.visible = 1
    AND led_contratista_locaciones.contratista = @contratista_1
    AND led_contratista_locaciones.vigencia_desde <= GETDATE()
    AND (led_contratista_locaciones.vigencia_hasta IS NULL
      OR led_contratista_locaciones.vigencia_hasta > GETDATE())
    AND led_contratista_locaciones.activo = 1
   

   OPEN Locaciones  

   FETCH NEXT FROM Locaciones INTO @locacion

   WHILE @@FETCH_STATUS = 0 BEGIN 

    IF NOT EXISTS (SELECT locacion FROM led_contratista_locaciones WHERE contratista = @subcontratista AND locacion = @locacion) BEGIN

     INSERT INTO led_contratista_locaciones
     (contratista, locacion, asignada, asignada_por, 
     vigencia_desde, vigencia_hasta, activo, created, created_by)
     VALUES
     (@subcontratista, @locacion, GETDATE(), @p_user_id,
     DATETIMEFROMPARTS(year(getdate()),Month(getdate()),day(getdate()),0,0,0,0), NULL, 1, GETDATE(), @p_user_id)

    END ELSE BEGIN

     UPDATE led_contratista_locaciones SET
     vigencia_desde = DATETIMEFROMPARTS(year(getdate()),Month(getdate()),day(getdate()),0,0,0,0), 
     vigencia_hasta = NULL,
     activo = 1,
     modified = GETDATE(),
     modified_by = @p_user_id
     WHERE contratista = @subcontratista 
     AND locacion = @locacion

    END

    FETCH NEXT FROM Locaciones INTO @locacion
   END

   CLOSE Locaciones
   DEALLOCATE Locaciones

  END
  /* fin locaciones */


  /* LOG */
  DECLARE @logtext VARCHAR(250) = NULL
  DECLARE @nombre VARCHAR(200) = NULL
  DECLARE @identif VARCHAR(100) = NULL

  SELECT @nombre = padrones.nombre_persona, 
    @identif = identificadores.abreviatura + ' ' + padrones.numero
  FROM padrones INNER JOIN led_contratistas ON padrones.id_padron = led_contratistas.id_padron
  INNER JOIN identificadores ON padrones.identificador = identificadores.identificador
  WHERE led_contratistas.contratista = @subcontratista

  IF (@alta = 1) BEGIN

   SET @logtext = 'Alta nuevo Subcontratista: ' + @nombre + ' (' + @identif + ')'

   INSERT INTO led_log
   (led_seccion, contratista, tipo_log, descripcion_log, 
   horario_log, user_id, cliente, doc_id, contratista_1)
   VALUES
   ('S', @subcontratista, 'A', @logtext, GETDATE(), @p_user_id, @cliente, NULL, @contratista_1)

  END ELSE

   IF (@reafectacion = 1) BEGIN

    SET @logtext = 'Reafectación Subcontratista: ' + @nombre + ' (' + @identif + ')'

    INSERT INTO led_log
    (led_seccion, contratista, tipo_log, descripcion_log, 
    horario_log, user_id, cliente, doc_id, contratista_1)
    VALUES
    ('S', @subcontratista, 'R', @logtext, GETDATE(), @p_user_id, @cliente, NULL, @contratista_1)


   END ELSE

    IF (@reactivacion = 1) BEGIN

     SET @logtext = 'Alta Subcontratista (estado anterior NO activo): ' + @nombre + ' (' + @identif + ')'

     INSERT INTO led_log
     (led_seccion, contratista, tipo_log, descripcion_log, 
     horario_log, user_id, cliente, doc_id, contratista_1)
     VALUES
     ('S', @subcontratista, 'A', @logtext, GETDATE(), @p_user_id, @cliente, NULL, @contratista_1)

    END



  /* ejecución de SP para creación de documentos */
  EXEC [dbo].[Imperium_Multi_Carga_Docs_Contratista] @cliente, @subcontratista, @periodo_vencido, 'V'
  EXEC [dbo].[Imperium_Multi_Carga_Docs_Contratista] @cliente, @subcontratista, @periodo_adelantado, 'A'


 END

END

GO

Used By

No items found