Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
13| Name | Data Type | Length | Description |
|---|---|---|---|
| @p_contratista | int | 4 | |
| @p_country_code | varchar | 2 | |
| @p_dominio | varchar | 15 | |
| @p_nombre_vehiculo | varchar | 30 | |
| @p_modelo | smallint | 2 | |
| @p_tipo_vehiculo | tinyint | 1 | |
| @p_tipo_alta | tinyint | 1 | |
| @p_descripcion_vehiculo | varchar | 100 | |
| @p_user_id | int | 4 | |
| @p_motor | varchar | 30 | |
| @p_chasis | varchar | 30 | |
| @tara | varchar | 10 | |
| @tarimas | smallint | 2 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
select * from led_vehiculos order by created desc
select * from led_vehiculos_periodo where vehiculo = 11681
SELECT vehiculo FROM led_vehiculos WHERE contratista = 5670 AND country_code = 'BZ' AND dominio = 7
exec Imperium_vista_contratista_Alta_Vehiculo 5996,'AR','LSY688','MERCEDES BENZ ATEGO 1725 S',2012,21,1,'MERCEDES BENZ ATEGO 1725 S',69605718,'906985U0998785','9BM958077CB855041'
*/
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.Imperium_vista_contratista_Alta_Vehiculo
-- Add the parameters for the stored procedure here
@p_contratista int,
@p_country_code varchar(2),
@p_dominio varchar(15),
@p_nombre_vehiculo varchar(30),
@p_modelo smallint,
@p_tipo_vehiculo tinyint,
@p_tipo_alta tinyint,
@p_descripcion_vehiculo varchar(100),
@p_user_id int,
@p_motor varchar(30) = NULL,
@p_chasis varchar(30) = NULL,
@tara varchar(10) = null,
@tarimas smallint = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
IF (@p_contratista > 0 AND @p_country_code IS NOT NULL AND @p_dominio IS NOT NULL AND @p_nombre_vehiculo IS NOT NULL AND @p_tipo_vehiculo > 0 AND @p_user_id > 0) BEGIN
DECLARE @vehiculo 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 vehiculo FROM led_vehiculos WHERE contratista = @p_contratista AND country_code = @p_country_code AND dominio = @p_dominio) BEGIN
INSERT INTO led_vehiculos
(cliente, estado_vehiculo, country_code, dominio, tipo_vehiculo, contratista, contratista_1, nombre_vehiculo, modelo, descripcion_vehiculo, created, motor, chasis,tara,tarimas)
SELECT @cliente as cliente, 'A' as estado_vehiculo, @p_country_code AS country_code, @p_dominio as dominio,
@p_tipo_vehiculo as tipo_vehiculo, contratista, @contratista_1 AS contratista_1,
@p_nombre_vehiculo as nombre_vehiculo, @p_modelo, @p_descripcion_vehiculo as descripcion_vehiculo, GETDATE() as created, @p_motor, @p_chasis,@tara,@tarimas
FROM led_contratistas
WHERE contratista = @p_contratista
SELECT @vehiculo = @@IDENTITY
SET @alta = 1
END ELSE BEGIN
/* existe el pais+dominio del vehículo bajo el contratista */
SELECT @vehiculo = vehiculo, @estado_anterior = estado_vehiculo
from led_vehiculos
WHERE contratista = @p_contratista AND country_code = @p_country_code AND dominio = @p_dominio
UPDATE led_vehiculos SET tipo_vehiculo = @p_tipo_vehiculo WHERE vehiculo = @vehiculo
END
/* modalidades del vehiculo - vencida / adelantada */
DECLARE modalidades CURSOR FOR
SELECT led_tipos_doc.modalidad
FROM led_tipos_doc
inner join led_cliente_vehiculo on led_tipos_doc.tipo_doc = led_cliente_vehiculo.tipo_doc
WHERE led_cliente_vehiculo.tipo_vehiculo = @p_tipo_vehiculo
AND led_cliente_vehiculo.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 vehiculo FROM led_vehiculos_periodo WHERE vehiculo = @vehiculo AND periodo = @periodo_vencido) BEGIN
INSERT INTO led_vehiculos_periodo
(vehiculo, contratista, tipo_alta, periodo, contratista_1, fecha_afectacion)
values
(@vehiculo, @p_contratista, @p_tipo_alta, @periodo_vencido, @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_vehiculos SET estado_vehiculo = 'A' WHERE vehiculo = @vehiculo
SET @reactivacion = 1
END
END ELSE BEGIN
/* periodo adelantado */
IF NOT EXISTS (SELECT vehiculo FROM led_vehiculos_periodo WHERE vehiculo = @vehiculo AND periodo = @periodo_adelantado) BEGIN
INSERT INTO led_vehiculos_periodo
(vehiculo, contratista, tipo_alta, periodo, contratista_1, fecha_afectacion)
values
(@vehiculo, @p_contratista, NULL, @periodo_adelantado, @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_vehiculos SET estado_vehiculo = 'A' WHERE vehiculo = @vehiculo
SET @reactivacion = 1
END
END
FETCH NEXT FROM modalidades INTO @modalidad
END
CLOSE modalidades
DEALLOCATE modalidades
/* fin modalidades */
/* documentos de alta */
IF (NOT @reafectacion = 1) BEGIN
IF (@p_tipo_alta > 0) BEGIN
DECLARE tipos_doc_alta CURSOR FOR
SELECT led_cliente_vehiculo.tipo_doc, led_tipos_doc.modalidad,
led_cliente_vehiculo.dias_tolerancia, led_cliente_vehiculo.estado_inicial,
led_grupo_tipo_doc.grupo_doc, led_tipos_doc.periodicidad, led_tipos_doc.tipo_doc_lista
FROM led_cliente_vehiculo inner join led_tipos_doc
on led_cliente_vehiculo.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_vehiculo.cliente = led_grupos_doc.cliente)
WHERE led_cliente_vehiculo.cliente = @cliente
AND led_cliente_vehiculo.tipo_vehiculo = @p_tipo_vehiculo
AND led_cliente_vehiculo.tipo_alta = @p_tipo_alta
AND led_cliente_vehiculo.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, vehiculo
FROM led_docs
WHERE tipo_doc = @tipo_doc
AND periodo = @periodo
AND led_seccion = 'V'
AND contratista = @p_contratista
AND vehiculo = @vehiculo) BEGIN
SET @doc_log = CONVERT(VARCHAR, GETDATE(), 120) + ' - GENERACION AUTOMATICA DE DOCUMENTO DE ALTA DE VEHICULO'
INSERT INTO led_docs
(tipo_doc, cliente, contratista, contratista_1, vehiculo, led_seccion, periodo,
insertado, estado_doc, compliance_doc, grupo_doc, fecha_tolerancia, fecha_vigencia,
doc_id_lista, doc_log)
VALUES
(@tipo_doc, @cliente, @p_contratista, @contratista_1, @vehiculo, 'V', @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 */
DECLARE Locaciones CURSOR FOR
SELECT led_locaciones.locacion
FROM led_locaciones INNER JOIN led_contratista_locaciones
ON led_locaciones.locacion = led_contratista_locaciones.locacion
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_vehiculo_locaciones WHERE vehiculo = @vehiculo AND locacion = @locacion) BEGIN
INSERT INTO led_vehiculo_locaciones
(vehiculo, locacion, asignada, asignada_por,
vigencia_desde, vigencia_hasta, activo, created, created_by)
VALUES
(@vehiculo, @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_vehiculo_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 vehiculo = @vehiculo
AND locacion = @locacion
END
FETCH NEXT FROM Locaciones INTO @locacion
END
CLOSE Locaciones
DEALLOCATE Locaciones
/* fin locaciones */
/* LOG */
DECLARE @logtext VARCHAR(250) = NULL
DECLARE @nombre VARCHAR(200) = NULL
DECLARE @identif VARCHAR(100) = NULL
SELECT @nombre = led_vehiculos.nombre_vehiculo,
@identif = led_vehiculos.country_code + '-' + led_vehiculos.dominio
FROM led_vehiculos
WHERE led_vehiculos.vehiculo = @vehiculo
IF (@alta = 1) BEGIN
SET @logtext = 'Alta nuevo vehículo: ' + @nombre + ' (' + @identif + ')'
INSERT INTO led_log
(led_seccion, contratista, vehiculo, tipo_log, descripcion_log,
horario_log, user_id, cliente, doc_id, contratista_1)
VALUES
('V', @p_contratista, @vehiculo, 'A', @logtext, GETDATE(), @p_user_id, @cliente, NULL, @contratista_1)
END ELSE
IF (@reafectacion = 1) BEGIN
SET @logtext = 'Reafectación vehículo: ' + @nombre + ' (' + @identif + ')'
INSERT INTO led_log
(led_seccion, contratista, vehiculo, tipo_log, descripcion_log,
horario_log, user_id, cliente, doc_id, contratista_1)
VALUES
('V', @p_contratista, @vehiculo, 'R', @logtext, GETDATE(), @p_user_id, @cliente, NULL, @contratista_1)
END ELSE
IF (@reactivacion = 1) BEGIN
SET @logtext = 'Alta vehículo (estado anterior NO activo): ' + @nombre + ' (' + @identif + ')'
INSERT INTO led_log
(led_seccion, contratista, vehiculo, tipo_log, descripcion_log,
horario_log, user_id, cliente, doc_id, contratista_1)
VALUES
('V', @p_contratista, @vehiculo, 'A', @logtext, GETDATE(), @p_user_id, @cliente, NULL, @contratista_1)
END
/* Reapertura de documentos nómina */
DECLARE @doc_id BIGINT
DECLARE @nombre_tipo_doc VARCHAR(100)
DECLARE @texto_noti VARCHAR(MAX)
DECLARE @notificacion INT
DECLARE @doc_version TINYINT
DECLARE @docaux_log VARCHAR(MAX)
DECLARE Periodos CURSOR FOR
SELECT periodo FROM led_vehiculos_periodo
WHERE vehiculo = @vehiculo
AND periodo >= @periodo_vencido
ORDER BY periodo
OPEN Periodos
FETCH NEXT FROM Periodos INTO @periodo
WHILE @@FETCH_STATUS = 0 BEGIN
DECLARE DocLista CURSOR FOR
SELECT led_docs.doc_id, led_tipos_doc.nombre_tipo_doc, led_docs.doc_version
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_contratista_multi ON led_docs.contratista = led_contratista_multi.contratista
INNER JOIN led_cliente_contratista ON
(led_contratistas.cliente = led_cliente_contratista.cliente
AND led_contratista_multi.tipo_contratista = led_cliente_contratista.tipo_contratista
AND led_docs.tipo_doc = led_cliente_contratista.tipo_doc)
WHERE led_docs.led_seccion = 'C'
AND led_docs.contratista = @p_contratista
AND led_docs.periodo = @periodo
AND led_docs.estado_doc = 'V'
AND led_docs.doc_id_lista IS NULL
AND led_tipos_doc.validar_lista_dominios > 0
AND led_cliente_contratista.activo = 1
AND led_contratista_multi.activo = 1
AND led_contratista_multi.vigencia_desde < GETDATE()
AND (led_contratista_multi.vigencia_hasta > GETDATE() OR led_contratista_multi.vigencia_hasta IS NULL)
AND led_docs.tipo_doc IN
(SELECT led_tipos_doc.tipo_doc_lista
FROM led_vehiculos
INNER JOIN led_cliente_vehiculo ON
(led_vehiculos.cliente = led_cliente_vehiculo.cliente
AND led_vehiculos.tipo_vehiculo = led_cliente_vehiculo.tipo_vehiculo)
INNER JOIN led_tipos_doc ON led_cliente_vehiculo.tipo_doc = led_tipos_doc.tipo_doc
WHERE led_vehiculos.vehiculo = @vehiculo
AND led_cliente_vehiculo.activo = 1
GROUP BY led_tipos_doc.tipo_doc_lista
HAVING led_tipos_doc.tipo_doc_lista IS NOT NULL)
GROUP BY led_docs.doc_id, led_tipos_doc.nombre_tipo_doc, led_docs.doc_version
OPEN DocLista
FETCH NEXT FROM DocLista INTO @doc_id, @nombre_tipo_doc, @doc_version
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @doc_log = doc_log FROM led_docs WHERE doc_id = @doc_id
SET @doc_log = @doc_log + CHAR(10) + CONVERT(VARCHAR,GETDATE(),120) + ': REAPERTURA DE DOCUMENTO POR INCORPORACION A NOMINA DEL VEHICULO ' + @nombre + ' (' + @identif + ')'
UPDATE led_docs SET
estado_doc = 'I',
verificado = NULL,
verificado_por = NULL,
aprobacion_parcial = 1,
parcial_actualizado = 0,
reapertura_por_alta = 1,
doc_log = @doc_log,
notificacion = @notificacion,
last_modified = GETDATE()
WHERE doc_id = @doc_id
/* Notificar reapertura */
SET @texto_noti = 'El documento ' + @nombre_tipo_doc + ' correspondiente al período ' + left(convert(varchar, dbo.Periodo2Date(@periodo), 120), 7) + ' '
SET @texto_noti = @texto_noti + 'que se encontraba previamente verificado ha sido reabierto y colocado en estado "Ingresado" debido a la incorporación a la nómina del siguiente '
SET @texto_noti = @texto_noti + 'vehículo: ' + @nombre + ' (' + @identif + '). El documento ingresa nuevamente en proceso de verificación por parte de Fidelitas.' + CHAR(10)
SET @texto_noti = @texto_noti + 'Si el archivo adjunto preexistente incluye al recurso incorporado no es necesario tomar ninguna acción. Por el contrario, si no lo incluye, usted puede '
SET @texto_noti = @texto_noti + 'reemplazar o adjuntar nuevos archivos al documento a los fines de cumplir con la documentación requerida.'
INSERT INTO led_notificaciones
(horario, tipo_notificacion, texto_notificacion, visible_contratista,
cliente, contratista, leido, usuario_de, usuario_para, doc_id)
VALUES
(GETDATE(), 'A2C', @texto_noti, 1, @cliente, @contratista_1, 0, 15342812, @p_user_id, @doc_id)
SELECT @notificacion = @@IDENTITY
SELECT @doc_log = doc_log FROM led_docs WHERE doc_id = @doc_id
SET @doc_log = @doc_log + CHAR(10) + CONVERT(VARCHAR,GETDATE(),120) + ': REAPERTURA DE DOCUMENTO POR INCORPORACION A NOMINA DEL VEHICULO ' + @nombre + ' (' + @identif + ')'
UPDATE led_docs SET
estado_doc = 'I',
verificado = NULL,
verificado_por = NULL,
aprobacion_parcial = 1,
parcial_actualizado = 0,
reapertura_por_alta = 1,
doc_log = @doc_log,
notificacion = @notificacion,
last_modified = GETDATE()
WHERE doc_id = @doc_id
/* Actualización de la versión auxiliar si corresponde */
IF (@doc_version > 0 AND @periodo = dbo.PeriodoAdelantado()) BEGIN
SELECT @docaux_log = doc_log FROM led_docs_aux
WHERE doc_id = @doc_id
AND doc_version = @doc_version
UPDATE led_docs_aux SET
estado_doc = 'I',
doc_log = @docaux_log + CHAR(10) + CONVERT(VARCHAR,GETDATE(),120) + ': REAPERTURA DE DOCUMENTO POR INCORPORACION A NOMINA DEL VEHICULO ' + @nombre + ' (' + @identif + ')',
aprobacion_parcial = 1,
reapertura_por_alta = 1
WHERE doc_id = @doc_id
AND doc_version = @doc_version
END
FETCH NEXT FROM DocLista INTO @doc_id, @nombre_tipo_doc, @doc_version
END
CLOSE DocLista
DEALLOCATE DocLista
FETCH NEXT FROM Periodos INTO @periodo
END
CLOSE Periodos
DEALLOCATE Periodos
/* ejecución de SP para creación de documentos */
EXEC [dbo].[Imperium_Carga_Docs_Vehiculos_Contratista] @periodo_vencido, @cliente, @p_contratista, 'V'
EXEC [dbo].[Imperium_Carga_Docs_Vehiculos_Contratista] @periodo_adelantado, @cliente, @p_contratista, 'A'
END
END
GO
GO
/*
select * from led_vehiculos order by created desc
select * from led_vehiculos_periodo where vehiculo = 11681
SELECT vehiculo FROM led_vehiculos WHERE contratista = 5670 AND country_code = 'BZ' AND dominio = 7
exec Imperium_vista_contratista_Alta_Vehiculo 5996,'AR','LSY688','MERCEDES BENZ ATEGO 1725 S',2012,21,1,'MERCEDES BENZ ATEGO 1725 S',69605718,'906985U0998785','9BM958077CB855041'
*/
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.Imperium_vista_contratista_Alta_Vehiculo
-- Add the parameters for the stored procedure here
@p_contratista int,
@p_country_code varchar(2),
@p_dominio varchar(15),
@p_nombre_vehiculo varchar(30),
@p_modelo smallint,
@p_tipo_vehiculo tinyint,
@p_tipo_alta tinyint,
@p_descripcion_vehiculo varchar(100),
@p_user_id int,
@p_motor varchar(30) = NULL,
@p_chasis varchar(30) = NULL,
@tara varchar(10) = null,
@tarimas smallint = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
IF (@p_contratista > 0 AND @p_country_code IS NOT NULL AND @p_dominio IS NOT NULL AND @p_nombre_vehiculo IS NOT NULL AND @p_tipo_vehiculo > 0 AND @p_user_id > 0) BEGIN
DECLARE @vehiculo 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 vehiculo FROM led_vehiculos WHERE contratista = @p_contratista AND country_code = @p_country_code AND dominio = @p_dominio) BEGIN
INSERT INTO led_vehiculos
(cliente, estado_vehiculo, country_code, dominio, tipo_vehiculo, contratista, contratista_1, nombre_vehiculo, modelo, descripcion_vehiculo, created, motor, chasis,tara,tarimas)
SELECT @cliente as cliente, 'A' as estado_vehiculo, @p_country_code AS country_code, @p_dominio as dominio,
@p_tipo_vehiculo as tipo_vehiculo, contratista, @contratista_1 AS contratista_1,
@p_nombre_vehiculo as nombre_vehiculo, @p_modelo, @p_descripcion_vehiculo as descripcion_vehiculo, GETDATE() as created, @p_motor, @p_chasis,@tara,@tarimas
FROM led_contratistas
WHERE contratista = @p_contratista
SELECT @vehiculo = @@IDENTITY
SET @alta = 1
END ELSE BEGIN
/* existe el pais+dominio del vehículo bajo el contratista */
SELECT @vehiculo = vehiculo, @estado_anterior = estado_vehiculo
from led_vehiculos
WHERE contratista = @p_contratista AND country_code = @p_country_code AND dominio = @p_dominio
UPDATE led_vehiculos SET tipo_vehiculo = @p_tipo_vehiculo WHERE vehiculo = @vehiculo
END
/* modalidades del vehiculo - vencida / adelantada */
DECLARE modalidades CURSOR FOR
SELECT led_tipos_doc.modalidad
FROM led_tipos_doc
inner join led_cliente_vehiculo on led_tipos_doc.tipo_doc = led_cliente_vehiculo.tipo_doc
WHERE led_cliente_vehiculo.tipo_vehiculo = @p_tipo_vehiculo
AND led_cliente_vehiculo.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 vehiculo FROM led_vehiculos_periodo WHERE vehiculo = @vehiculo AND periodo = @periodo_vencido) BEGIN
INSERT INTO led_vehiculos_periodo
(vehiculo, contratista, tipo_alta, periodo, contratista_1, fecha_afectacion)
values
(@vehiculo, @p_contratista, @p_tipo_alta, @periodo_vencido, @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_vehiculos SET estado_vehiculo = 'A' WHERE vehiculo = @vehiculo
SET @reactivacion = 1
END
END ELSE BEGIN
/* periodo adelantado */
IF NOT EXISTS (SELECT vehiculo FROM led_vehiculos_periodo WHERE vehiculo = @vehiculo AND periodo = @periodo_adelantado) BEGIN
INSERT INTO led_vehiculos_periodo
(vehiculo, contratista, tipo_alta, periodo, contratista_1, fecha_afectacion)
values
(@vehiculo, @p_contratista, NULL, @periodo_adelantado, @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_vehiculos SET estado_vehiculo = 'A' WHERE vehiculo = @vehiculo
SET @reactivacion = 1
END
END
FETCH NEXT FROM modalidades INTO @modalidad
END
CLOSE modalidades
DEALLOCATE modalidades
/* fin modalidades */
/* documentos de alta */
IF (NOT @reafectacion = 1) BEGIN
IF (@p_tipo_alta > 0) BEGIN
DECLARE tipos_doc_alta CURSOR FOR
SELECT led_cliente_vehiculo.tipo_doc, led_tipos_doc.modalidad,
led_cliente_vehiculo.dias_tolerancia, led_cliente_vehiculo.estado_inicial,
led_grupo_tipo_doc.grupo_doc, led_tipos_doc.periodicidad, led_tipos_doc.tipo_doc_lista
FROM led_cliente_vehiculo inner join led_tipos_doc
on led_cliente_vehiculo.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_vehiculo.cliente = led_grupos_doc.cliente)
WHERE led_cliente_vehiculo.cliente = @cliente
AND led_cliente_vehiculo.tipo_vehiculo = @p_tipo_vehiculo
AND led_cliente_vehiculo.tipo_alta = @p_tipo_alta
AND led_cliente_vehiculo.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, vehiculo
FROM led_docs
WHERE tipo_doc = @tipo_doc
AND periodo = @periodo
AND led_seccion = 'V'
AND contratista = @p_contratista
AND vehiculo = @vehiculo) BEGIN
SET @doc_log = CONVERT(VARCHAR, GETDATE(), 120) + ' - GENERACION AUTOMATICA DE DOCUMENTO DE ALTA DE VEHICULO'
INSERT INTO led_docs
(tipo_doc, cliente, contratista, contratista_1, vehiculo, led_seccion, periodo,
insertado, estado_doc, compliance_doc, grupo_doc, fecha_tolerancia, fecha_vigencia,
doc_id_lista, doc_log)
VALUES
(@tipo_doc, @cliente, @p_contratista, @contratista_1, @vehiculo, 'V', @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 */
DECLARE Locaciones CURSOR FOR
SELECT led_locaciones.locacion
FROM led_locaciones INNER JOIN led_contratista_locaciones
ON led_locaciones.locacion = led_contratista_locaciones.locacion
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_vehiculo_locaciones WHERE vehiculo = @vehiculo AND locacion = @locacion) BEGIN
INSERT INTO led_vehiculo_locaciones
(vehiculo, locacion, asignada, asignada_por,
vigencia_desde, vigencia_hasta, activo, created, created_by)
VALUES
(@vehiculo, @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_vehiculo_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 vehiculo = @vehiculo
AND locacion = @locacion
END
FETCH NEXT FROM Locaciones INTO @locacion
END
CLOSE Locaciones
DEALLOCATE Locaciones
/* fin locaciones */
/* LOG */
DECLARE @logtext VARCHAR(250) = NULL
DECLARE @nombre VARCHAR(200) = NULL
DECLARE @identif VARCHAR(100) = NULL
SELECT @nombre = led_vehiculos.nombre_vehiculo,
@identif = led_vehiculos.country_code + '-' + led_vehiculos.dominio
FROM led_vehiculos
WHERE led_vehiculos.vehiculo = @vehiculo
IF (@alta = 1) BEGIN
SET @logtext = 'Alta nuevo vehículo: ' + @nombre + ' (' + @identif + ')'
INSERT INTO led_log
(led_seccion, contratista, vehiculo, tipo_log, descripcion_log,
horario_log, user_id, cliente, doc_id, contratista_1)
VALUES
('V', @p_contratista, @vehiculo, 'A', @logtext, GETDATE(), @p_user_id, @cliente, NULL, @contratista_1)
END ELSE
IF (@reafectacion = 1) BEGIN
SET @logtext = 'Reafectación vehículo: ' + @nombre + ' (' + @identif + ')'
INSERT INTO led_log
(led_seccion, contratista, vehiculo, tipo_log, descripcion_log,
horario_log, user_id, cliente, doc_id, contratista_1)
VALUES
('V', @p_contratista, @vehiculo, 'R', @logtext, GETDATE(), @p_user_id, @cliente, NULL, @contratista_1)
END ELSE
IF (@reactivacion = 1) BEGIN
SET @logtext = 'Alta vehículo (estado anterior NO activo): ' + @nombre + ' (' + @identif + ')'
INSERT INTO led_log
(led_seccion, contratista, vehiculo, tipo_log, descripcion_log,
horario_log, user_id, cliente, doc_id, contratista_1)
VALUES
('V', @p_contratista, @vehiculo, 'A', @logtext, GETDATE(), @p_user_id, @cliente, NULL, @contratista_1)
END
/* Reapertura de documentos nómina */
DECLARE @doc_id BIGINT
DECLARE @nombre_tipo_doc VARCHAR(100)
DECLARE @texto_noti VARCHAR(MAX)
DECLARE @notificacion INT
DECLARE @doc_version TINYINT
DECLARE @docaux_log VARCHAR(MAX)
DECLARE Periodos CURSOR FOR
SELECT periodo FROM led_vehiculos_periodo
WHERE vehiculo = @vehiculo
AND periodo >= @periodo_vencido
ORDER BY periodo
OPEN Periodos
FETCH NEXT FROM Periodos INTO @periodo
WHILE @@FETCH_STATUS = 0 BEGIN
DECLARE DocLista CURSOR FOR
SELECT led_docs.doc_id, led_tipos_doc.nombre_tipo_doc, led_docs.doc_version
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_contratista_multi ON led_docs.contratista = led_contratista_multi.contratista
INNER JOIN led_cliente_contratista ON
(led_contratistas.cliente = led_cliente_contratista.cliente
AND led_contratista_multi.tipo_contratista = led_cliente_contratista.tipo_contratista
AND led_docs.tipo_doc = led_cliente_contratista.tipo_doc)
WHERE led_docs.led_seccion = 'C'
AND led_docs.contratista = @p_contratista
AND led_docs.periodo = @periodo
AND led_docs.estado_doc = 'V'
AND led_docs.doc_id_lista IS NULL
AND led_tipos_doc.validar_lista_dominios > 0
AND led_cliente_contratista.activo = 1
AND led_contratista_multi.activo = 1
AND led_contratista_multi.vigencia_desde < GETDATE()
AND (led_contratista_multi.vigencia_hasta > GETDATE() OR led_contratista_multi.vigencia_hasta IS NULL)
AND led_docs.tipo_doc IN
(SELECT led_tipos_doc.tipo_doc_lista
FROM led_vehiculos
INNER JOIN led_cliente_vehiculo ON
(led_vehiculos.cliente = led_cliente_vehiculo.cliente
AND led_vehiculos.tipo_vehiculo = led_cliente_vehiculo.tipo_vehiculo)
INNER JOIN led_tipos_doc ON led_cliente_vehiculo.tipo_doc = led_tipos_doc.tipo_doc
WHERE led_vehiculos.vehiculo = @vehiculo
AND led_cliente_vehiculo.activo = 1
GROUP BY led_tipos_doc.tipo_doc_lista
HAVING led_tipos_doc.tipo_doc_lista IS NOT NULL)
GROUP BY led_docs.doc_id, led_tipos_doc.nombre_tipo_doc, led_docs.doc_version
OPEN DocLista
FETCH NEXT FROM DocLista INTO @doc_id, @nombre_tipo_doc, @doc_version
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @doc_log = doc_log FROM led_docs WHERE doc_id = @doc_id
SET @doc_log = @doc_log + CHAR(10) + CONVERT(VARCHAR,GETDATE(),120) + ': REAPERTURA DE DOCUMENTO POR INCORPORACION A NOMINA DEL VEHICULO ' + @nombre + ' (' + @identif + ')'
UPDATE led_docs SET
estado_doc = 'I',
verificado = NULL,
verificado_por = NULL,
aprobacion_parcial = 1,
parcial_actualizado = 0,
reapertura_por_alta = 1,
doc_log = @doc_log,
notificacion = @notificacion,
last_modified = GETDATE()
WHERE doc_id = @doc_id
/* Notificar reapertura */
SET @texto_noti = 'El documento ' + @nombre_tipo_doc + ' correspondiente al período ' + left(convert(varchar, dbo.Periodo2Date(@periodo), 120), 7) + ' '
SET @texto_noti = @texto_noti + 'que se encontraba previamente verificado ha sido reabierto y colocado en estado "Ingresado" debido a la incorporación a la nómina del siguiente '
SET @texto_noti = @texto_noti + 'vehículo: ' + @nombre + ' (' + @identif + '). El documento ingresa nuevamente en proceso de verificación por parte de Fidelitas.' + CHAR(10)
SET @texto_noti = @texto_noti + 'Si el archivo adjunto preexistente incluye al recurso incorporado no es necesario tomar ninguna acción. Por el contrario, si no lo incluye, usted puede '
SET @texto_noti = @texto_noti + 'reemplazar o adjuntar nuevos archivos al documento a los fines de cumplir con la documentación requerida.'
INSERT INTO led_notificaciones
(horario, tipo_notificacion, texto_notificacion, visible_contratista,
cliente, contratista, leido, usuario_de, usuario_para, doc_id)
VALUES
(GETDATE(), 'A2C', @texto_noti, 1, @cliente, @contratista_1, 0, 15342812, @p_user_id, @doc_id)
SELECT @notificacion = @@IDENTITY
SELECT @doc_log = doc_log FROM led_docs WHERE doc_id = @doc_id
SET @doc_log = @doc_log + CHAR(10) + CONVERT(VARCHAR,GETDATE(),120) + ': REAPERTURA DE DOCUMENTO POR INCORPORACION A NOMINA DEL VEHICULO ' + @nombre + ' (' + @identif + ')'
UPDATE led_docs SET
estado_doc = 'I',
verificado = NULL,
verificado_por = NULL,
aprobacion_parcial = 1,
parcial_actualizado = 0,
reapertura_por_alta = 1,
doc_log = @doc_log,
notificacion = @notificacion,
last_modified = GETDATE()
WHERE doc_id = @doc_id
/* Actualización de la versión auxiliar si corresponde */
IF (@doc_version > 0 AND @periodo = dbo.PeriodoAdelantado()) BEGIN
SELECT @docaux_log = doc_log FROM led_docs_aux
WHERE doc_id = @doc_id
AND doc_version = @doc_version
UPDATE led_docs_aux SET
estado_doc = 'I',
doc_log = @docaux_log + CHAR(10) + CONVERT(VARCHAR,GETDATE(),120) + ': REAPERTURA DE DOCUMENTO POR INCORPORACION A NOMINA DEL VEHICULO ' + @nombre + ' (' + @identif + ')',
aprobacion_parcial = 1,
reapertura_por_alta = 1
WHERE doc_id = @doc_id
AND doc_version = @doc_version
END
FETCH NEXT FROM DocLista INTO @doc_id, @nombre_tipo_doc, @doc_version
END
CLOSE DocLista
DEALLOCATE DocLista
FETCH NEXT FROM Periodos INTO @periodo
END
CLOSE Periodos
DEALLOCATE Periodos
/* ejecución de SP para creación de documentos */
EXEC [dbo].[Imperium_Carga_Docs_Vehiculos_Contratista] @periodo_vencido, @cliente, @p_contratista, 'V'
EXEC [dbo].[Imperium_Carga_Docs_Vehiculos_Contratista] @periodo_adelantado, @cliente, @p_contratista, 'A'
END
END
GO
Depends On
18- dbo.Imperium_Carga_Docs_Vehiculos_Contratista
- dbo.periodos
- dbo.Periodo2Date
- dbo.PeriodoAdelantado
- dbo.led_cliente_contratista
- dbo.led_cliente_vehiculo
- dbo.led_contratista_locaciones
- dbo.led_contratista_multi
- dbo.led_contratistas
- dbo.led_docs
- dbo.led_docs_aux
- dbo.led_grupo_tipo_doc
- dbo.led_grupos_doc
- dbo.led_locaciones
- dbo.led_tipos_doc
- dbo.led_vehiculo_locaciones
- dbo.led_vehiculos
- dbo.led_vehiculos_periodo
Used By
No items found