SET NOCOUNT ON
PRINT '*** Inicio de Script ***'
GO

-- F1 es el módulo equivalente a FCO, porque el campo es de 2
DELETE aut_operaciones WHERE operacion like 'FCO%';
DELETE rel_oper_modulos WHERE operacion like 'FCO%';
DELETE rel_oper_menus WHERE ejecuta_operacion like 'FCO%'; 
DELETE operaciones WHERE operacion like 'FCO%';
DELETE menus WHERE modulo = 'F1'; 
GO
DELETE modulos WHERE modulo = 'F1';
GO

-- ************************************************************************************************
-- Módulo F1 (FCO)
-- ************************************************************************************************
INSERT INTO modulos (modulo, descripcion, instalado, version, release, modificacion, etiqueta, exe) 
VALUES ('F1', 'Fiscal de Colombia', 0, 3, 1, 0, 'Fiscal Colombia - por Data Tecnologia', 'FCO');
GO
-- ************************************************************************************************
-- Menús
-- ************************************************************************************************
INSERT INTO menus (modulo, menu, descripcion, icono, ruta) VALUES ('F1', 0, 'Menú Principal', 7, NULL);
INSERT INTO menus (modulo, menu, descripcion, icono, ruta) VALUES ('F1', 10, 'Parámetros y Archivos', 1, NULL);
INSERT INTO menus (modulo, menu, descripcion, icono, ruta) VALUES ('F1', 20, 'Administración y Registros', 2, NULL);
INSERT INTO menus (modulo, menu, descripcion, icono, ruta) VALUES ('F1', 30, 'Procesos', 6, NULL);
--INSERT INTO menus (modulo, menu, descripcion, icono, ruta) VALUES ('F1', 40, 'Consultas', 3, NULL); 
INSERT INTO menus (modulo, menu, descripcion, icono, ruta) VALUES ('F1', 50, 'Reportes y Archivos', 7, NULL);

-- ************************************************************************************************ --
-- Menú Principal
-- ************************************************************************************************ --
INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu) VALUES ('F1',0, 1, 1, 10);
INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu) VALUES ('F1',0, 2, 1, 20);
INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu) VALUES ('F1',0, 3, 1, 30);
INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu) VALUES ('F1',0, 4, 1, 40); 
INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu) VALUES ('F1',0, 5, 1, 50);

-- ************************************************************************************************
-- Operación FCO1010 de Parametros del Fiscal
-- ************************************************************************************************
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO1010';
DELETE rel_oper_modulos WHERE operacion = 'FCO1010';
DELETE operaciones WHERE operacion = 'FCO1010';
DELETE aut_operaciones WHERE operacion = 'FCO1010';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion) 
VALUES ('FCO1010', 'Parámetros Fiscal de Colombia', 1, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 10, IsNull(max(secuencia),0) + 1, 2, null, 'FCO1010' from rel_oper_menus WHERE modulo='F1' and menu = 10;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO1010','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO1010',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO1010', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF0000'

-- ************************************************************************************************ --
-- Operación FCO1020 Administradoras EPS
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO1020';
DELETE rel_oper_modulos WHERE operacion = 'FCO1020';
DELETE operaciones WHERE operacion = 'FCO1020';
DELETE aut_operaciones WHERE operacion = 'FCO1020';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion) 
VALUES ('FCO1020', 'Entidades Promotoras Salud', 1, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 10, IsNull(max(secuencia),0) + 1, 2, null, 'FCO1020' from rel_oper_menus WHERE modulo='F1' and menu = 10;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO1020','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO1020',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO1020', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF0010'

-- ************************************************************************************************ --
-- Operación FCO1030 Administradoras AFP
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO1030';
DELETE rel_oper_modulos WHERE operacion = 'FCO1030';
DELETE operaciones WHERE operacion = 'FCO1030';
DELETE aut_operaciones WHERE operacion = 'FCO1030';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO1030', 'Administradoras de Fondos de Pensiones', 1, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 10, IsNull(max(secuencia),0) + 1, 2, null, 'FCO1030' from rel_oper_menus WHERE modulo='F1' and menu = 10;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO1030','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO1030',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO1030', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF0020'

-- ************************************************************************************************ --
-- Operación FCO1035 Cajas de Compensación Familiar
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO1035';
DELETE rel_oper_modulos WHERE operacion = 'FCO1035';
DELETE operaciones WHERE operacion = 'FCO1035';
DELETE aut_operaciones WHERE operacion = 'FCO1035';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO1035', 'Cajas de Compensación Familiar', 1, 1);


INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 10, IsNull(max(secuencia),0) + 1, 2, null, 'FCO1035' from rel_oper_menus WHERE modulo='F1' and menu = 10;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO1035','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO1035',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO1035', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF0020'

-- ************************************************************************************************ --
-- Operación FCO1040 Sucursales de la compañia
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO1040';
DELETE rel_oper_modulos WHERE operacion = 'FCO1040';
DELETE operaciones WHERE operacion = 'FCO1040';
DELETE aut_operaciones WHERE operacion = 'FCO1040';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO1040', 'Sucursales de la compañia', 1, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 10, IsNull(max(secuencia),0) + 1, 2, null, 'FCO1040' from rel_oper_menus WHERE modulo='F1' and menu = 10;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO1040','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO1040',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO1040', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF0030'

-- ************************************************************************************************ --
-- Operación FCO1045 Centros de Trabajo
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO1045';
DELETE rel_oper_modulos WHERE operacion = 'FCO1045';
DELETE operaciones WHERE operacion = 'FCO1045';
DELETE aut_operaciones WHERE operacion = 'FCO1045';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO1045', 'Centros de Trabajo', 1, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 10, IsNull(max(secuencia),0) + 1, 2, null, 'FCO1045' from rel_oper_menus WHERE modulo='F1' and menu = 10;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO1045','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO1045',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO1045', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF0030'

-- ************************************************************************************************ --
-- Operación FCO1050 Definicion reporte de autoliquidacion
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO1050';
DELETE rel_oper_modulos WHERE operacion = 'FCO1050';
DELETE operaciones WHERE operacion = 'FCO1050';
DELETE aut_operaciones WHERE operacion = 'FCO1050';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO1050', 'Definición de Reportes de Autoliquidación', 1, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 10, IsNull(max(secuencia),0) + 1, 2, null, 'FCO1050' from rel_oper_menus WHERE modulo='F1' and menu = 10;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO1050','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO1050',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO1050', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF0050'

-- ************************************************************************************************ --
-- Operación FCO1060 Datos Adicionales de la compañia
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO1060';
DELETE rel_oper_modulos WHERE operacion = 'FCO1060';
DELETE operaciones WHERE operacion = 'FCO1060';
DELETE aut_operaciones WHERE operacion = 'FCO1060';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO1060', 'Datos Adicionales de la compañia', 1, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 10, IsNull(max(secuencia),0) + 1, 2, null, 'FCO1060' from rel_oper_menus WHERE modulo='F1' and menu = 10;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO1060','F1');
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO1060',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO1060', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF0060'

-- ************************************************************************************************ --
-- Operación FCO1070 Definición de Medios para Bancos
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO1070';
DELETE rel_oper_modulos WHERE operacion = 'FCO1070';
DELETE operaciones WHERE operacion = 'FCO1070';
DELETE aut_operaciones WHERE operacion = 'FCO1070';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO1070', 'Definición de Medios para Bancos', 1, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 10, IsNull(max(secuencia),0) + 1, 2, null, 'FCO1070' from rel_oper_menus WHERE modulo='F1' and menu = 10;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO1070','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO1070',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO1070', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF0070'

-- ************************************************************************************************ --
-- Operación FCO1080 Definicion de Reportes Varios
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO1080';
DELETE rel_oper_modulos WHERE operacion = 'FCO1080';
DELETE operaciones WHERE operacion = 'FCO1080';
DELETE aut_operaciones WHERE operacion = 'FCO1080';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO1080', 'Definicion de Reportes Varios', 1, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 10, IsNull(max(secuencia),0) + 1, 2, null, 'FCO1080' from rel_oper_menus WHERE modulo='F1' and menu = 10;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO1080','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO1080',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO1080', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF0050'

-- ************************************************************************************************ --
-- Operación FCO2000 Registro de Ausentismos
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2000';
DELETE rel_oper_modulos WHERE operacion = 'FCO2000';
DELETE operaciones WHERE operacion = 'FCO2000';
DELETE aut_operaciones WHERE operacion = 'FCO2000';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2000', 'Registro de Ausentismos', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2000' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2000','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2000',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2000', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2000'

-- ************************************************************************************************ --
-- Operación FCO2005 Aportantes por Fuera de Nomina
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2005';
DELETE rel_oper_modulos WHERE operacion = 'FCO2005';
DELETE operaciones WHERE operacion = 'FCO2005';
DELETE aut_operaciones WHERE operacion = 'FCO2005';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion) 
VALUES ('FCO2005', 'Aportantes por Fuera de Nomina', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2005' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2005','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2005',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2005', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2005'

-- ************************************************************************************************ --
-- operacion FCO2010 Autorizaciones de Incapacidades y Licencias de Maternidad
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2010';
DELETE rel_oper_modulos WHERE operacion = 'FCO2010';
DELETE operaciones WHERE operacion = 'FCO2010';
DELETE aut_operaciones WHERE operacion = 'FCO2010';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2010', 'Autorizaciones de Incapacidades y Licencias de Maternidad', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2010' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2010','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2010',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2010', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2010'

-- ************************************************************************************************ --
-- Operación FCO2020 Registro y Administración de Embargos
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2020';
DELETE rel_oper_modulos WHERE operacion = 'FCO2020';
DELETE operaciones WHERE operacion = 'FCO2020';
DELETE aut_operaciones WHERE operacion = 'FCO2020';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2020', 'Registro y Administración de Embargos', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2020' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2020','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2020',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2020', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2020'

-- ************************************************************************************************ --
-- Operación FCO2030 Registro de Traslado de EPS
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2030';
DELETE rel_oper_modulos WHERE operacion = 'FCO2030';
DELETE operaciones WHERE operacion = 'FCO2030';
DELETE aut_operaciones WHERE operacion = 'FCO2030';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2030', 'Registro de Traslado de EPS', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2030' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2030','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2030',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2030', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2030'

-- ************************************************************************************************ --
-- Operación FCO2040 Registro de Traslado de EPS
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2040';
DELETE rel_oper_modulos WHERE operacion = 'FCO2040';
DELETE operaciones WHERE operacion = 'FCO2040';
DELETE aut_operaciones WHERE operacion = 'FCO2040';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2040', 'Registro de Traslado de Fondo de Pensiones', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2040' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2040','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2040',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2040', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2040'
 
-- ************************************************************************************************ --
-- Operación FCO2060 Tablas Salud
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2060';
DELETE rel_oper_modulos WHERE operacion = 'FCO2060';
DELETE operaciones WHERE operacion = 'FCO2060';
DELETE aut_operaciones WHERE operacion = 'FCO2060';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2060', 'Tablas Salud', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2060' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2060','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2060',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2060', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2060'

-- ************************************************************************************************ --
-- Operación FCO2070 Tablas Pensiones
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2070';
DELETE rel_oper_modulos WHERE operacion = 'FCO2070';
DELETE operaciones WHERE operacion = 'FCO2070';
DELETE aut_operaciones WHERE operacion = 'FCO2070';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2070', 'Tablas Pensiones', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion)
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2070' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2070','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2070',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2070', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2070'

-- ************************************************************************************************ --
-- Operación FCO2080 Tablas ISS (Autol)
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2080';
DELETE rel_oper_modulos WHERE operacion = 'FCO2080';
DELETE operaciones WHERE operacion = 'FCO2080';
DELETE aut_operaciones WHERE operacion = 'FCO2080';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2080', 'Tablas ISS (Autol)', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion)
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2080' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2080','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2080',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2080', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2080'

-- ************************************************************************************************ --
-- Operación FCO2085 Tablas ISS (SIGA)
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2085';
DELETE rel_oper_modulos WHERE operacion = 'FCO2085';
DELETE operaciones WHERE operacion = 'FCO2085';
DELETE aut_operaciones WHERE operacion = 'FCO2085';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2085', 'Tablas ISS (SIGA)', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2085' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2085','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2085',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2085', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2085'

-- ************************************************************************************************ --
-- Operación FCO2090 Tablas Riesgos Profesionales
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2090';
DELETE rel_oper_modulos WHERE operacion = 'FCO2090';
DELETE operaciones WHERE operacion = 'FCO2090';
DELETE aut_operaciones WHERE operacion = 'FCO2090';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2090', 'Tablas Riesgos Profesionales', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2090' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2090','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2090',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2090', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2090'

-- ************************************************************************************************ --
-- Operación FCO2095 Tablas Planilla Integrada
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2095';
DELETE rel_oper_modulos WHERE operacion = 'FCO2095';
DELETE operaciones WHERE operacion = 'FCO2095';
DELETE aut_operaciones WHERE operacion = 'FCO2095';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2095', 'Control Planilla Integrada', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2095' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2095','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2095',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2095', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2090'

-- ************************************************************************************************ --
-- Operación FCO2096 Control Planilla Integrada Pensionados
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2096';
DELETE rel_oper_modulos WHERE operacion = 'FCO2096';
DELETE operaciones WHERE operacion = 'FCO2096';
DELETE aut_operaciones WHERE operacion = 'FCO2096';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2096', 'Control Planilla Integrada Pensionados', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2096' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2096','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2096',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2096', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2090'


-- ************************************************************************************************ --
-- Operación FCO2098 Asignación de Números de Planilla
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO2098';
DELETE rel_oper_modulos WHERE operacion = 'FCO2098';
DELETE operaciones WHERE operacion = 'FCO2098';
DELETE aut_operaciones WHERE operacion = 'FCO2098';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO2098', 'Asignación de Números de Planilla', 2, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 20, IsNull(max(secuencia),0) + 1, 2, null, 'FCO2098' from rel_oper_menus WHERE modulo='F1' and menu = 20;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO2098','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO2098',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO2098', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF2090'


-- ************************************************************************************************ --
-- Operación FCO3010 Efectuar Traslados de Administradora
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO3010';
DELETE rel_oper_modulos WHERE operacion = 'FCO3010';
DELETE operaciones WHERE operacion = 'FCO3010';
DELETE aut_operaciones WHERE operacion = 'FCO3010';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO3010', 'Efectuar Traslados de Administradora', 6, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 30, IsNull(max(secuencia),0) + 1, 2, null, 'FCO3010' from rel_oper_menus WHERE modulo='F1' and menu = 30;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO3010','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO3010',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO3010', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF3010'

-- ************************************************************************************************ --
-- Operación FCO3040 Actualizar Variable de Trabajador
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO3040';
DELETE rel_oper_modulos WHERE operacion = 'FCO3040';
DELETE operaciones WHERE operacion = 'FCO3040';
DELETE aut_operaciones WHERE operacion = 'FCO3040';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO3040', 'Actualizar Variable de Trabajador', 6, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 30, IsNull(max(secuencia),0) + 1, 2, null, 'FCO3040' from rel_oper_menus WHERE modulo='F1' and menu = 30;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO3040','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO3040',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO3040', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF3040'

-- ************************************************************************************************ --
-- Operación FCO3050 Generación de Medios para bancos
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO3050';
DELETE rel_oper_modulos WHERE operacion = 'FCO3050';
DELETE operaciones WHERE operacion = 'FCO3050';
DELETE aut_operaciones WHERE operacion = 'FCO3050';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO3050', 'Generación de Medios para Bancos', 4, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 30, IsNull(max(secuencia),0) + 1, 2, null, 'FCO3050' from rel_oper_menus WHERE modulo='F1' and menu = 30;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO3050','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO3050',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO3050', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF5010'

-- ************************************************************************************************ --
-- Operación FCO3051 de Medios para bancos NI
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO3051';
DELETE rel_oper_modulos WHERE operacion = 'FCO3051';
DELETE operaciones WHERE operacion = 'FCO3051';
DELETE aut_operaciones WHERE operacion = 'FCO3051';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO3051', 'Generación de Medios para Bancos NI', 4, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 30, IsNull(max(secuencia),0) + 1, 2, null, 'FCO3051' from rel_oper_menus WHERE modulo='F1' and menu = 30;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO3051','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO3051',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO3051', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF5010'

-- ************************************************************************************************ --
-- Operación FCO3060 Cierre de período de autoliquidación
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO3060';
DELETE rel_oper_modulos WHERE operacion = 'FCO3060';
DELETE operaciones WHERE operacion = 'FCO3060';
DELETE aut_operaciones WHERE operacion = 'FCO3060';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO3060', 'Cierre de período de autoliquidación', 6, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 30, IsNull(max(secuencia),0) + 1, 2, null, 'FCO3060' from rel_oper_menus WHERE modulo='F1' and menu = 30;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO3060','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO3060',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO3060', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF5010'

-- ************************************************************************************************ --
-- Operación FCO3070 Reapertura de período de autoliquidación
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO3070';
DELETE rel_oper_modulos WHERE operacion = 'FCO3070';
DELETE operaciones WHERE operacion = 'FCO3070';
DELETE aut_operaciones WHERE operacion = 'FCO3070';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO3070', 'Reapertura de período de autoliquidación', 6, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 30, IsNull(max(secuencia),0) + 1, 2, null, 'FCO3070' from rel_oper_menus WHERE modulo='F1' and menu = 30;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO3070','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO3070',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO3070', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF5010'


-- ************************************************************************************************ --
-- Operación FCO5010 Reportes y Medios Magneticos
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO5010';
DELETE rel_oper_modulos WHERE operacion = 'FCO5010';
DELETE operaciones WHERE operacion = 'FCO5010';
DELETE aut_operaciones WHERE operacion = 'FCO5010';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion) 
VALUES ('FCO5010', 'Reportes y Medios Magneticos', 7, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 50, IsNull(max(secuencia),0) + 1, 2, null, 'FCO5010' from rel_oper_menus WHERE modulo='F1' and menu = 50;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO5010','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO5010',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO5010', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF3020'

-- ************************************************************************************************ --
-- Operación FCO5015 Archivo Planilla Integrada
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO5015';
DELETE rel_oper_modulos WHERE operacion = 'FCO5015';
DELETE operaciones WHERE operacion = 'FCO5015';
DELETE aut_operaciones WHERE operacion = 'FCO5015';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion) 
VALUES ('FCO5015', 'Generar Archivo Planilla Integrada', 7, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 50, IsNull(max(secuencia),0) + 1, 2, null, 'FCO5015' from rel_oper_menus WHERE modulo='F1' and menu = 50;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO5015','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO5015',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO5015', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF3020'

-- ************************************************************************************************ --
-- Operación FCO5016 Archivo Planilla Integrada para Pensionados
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO5016';
DELETE rel_oper_modulos WHERE operacion = 'FCO5016';
DELETE operaciones WHERE operacion = 'FCO5016';
DELETE aut_operaciones WHERE operacion = 'FCO5016';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion) 
VALUES ('FCO5016', 'Generar Archivo Planilla Integrada (Pensionados)', 7, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 50, IsNull(max(secuencia),0) + 1, 2, null, 'FCO5016' from rel_oper_menus WHERE modulo='F1' and menu = 50;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO5016','F1');
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO5016',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO5016', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF3020'

-- ************************************************************************************************ --
-- Operación FCO5020 Generacion de Reportes Varios
-- ************************************************************************************************ --
DELETE rel_oper_menus WHERE ejecuta_operacion = 'FCO5020';
DELETE rel_oper_modulos WHERE operacion = 'FCO5020';
DELETE operaciones WHERE operacion = 'FCO5020';
DELETE aut_operaciones WHERE operacion = 'FCO5020';

INSERT INTO operaciones (operacion, descripcion_ope, icono, tipo_operacion)  
VALUES ('FCO5020', 'Generacion de Reportes Varios', 7, 1);

INSERT INTO rel_oper_menus (modulo, menu, secuencia, tipo_llamada, ejecuta_menu, ejecuta_operacion) 
SELECT 'F1', 50, IsNull(max(secuencia),0) + 1, 2, null, 'FCO5020' from rel_oper_menus WHERE modulo='F1' and menu = 50;

INSERT INTO rel_oper_modulos (operacion, modulo)  VALUES ('FCO5020','F1');

INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad) VALUES ('ADAM','FCO5020',4);
INSERT INTO aut_operaciones (usuario, operacion, nivel_seguridad)
SELECT usuario, 'FCO5020', nivel_seguridad FROM aut_operaciones  WHERE usuario <> 'ADAM' AND operacion = 'MF3030'

--Esto por si existe en el cliente el modulo fiscal anterior
/*
DELETE parametros_oper WHERE operacion like 'MF%'
DELETE aut_operaciones WHERE operacion like 'MF%'
DELETE rel_oper_menus WHERE ejecuta_operacion like 'MF%' 
DELETE rel_oper_modulos WHERE operacion like 'MF%'
DELETE operaciones WHERE operacion like 'MF%'
DELETE menus WHERE modulo = 'MF';
DELETE modulos WHERE modulo = 'MF';
*/

update operaciones
set descripcion_ope = '(MF) ' + LEFT(descripcion_ope, 55)
where operacion like 'mf%'
AND descripcion_ope NOT LIKE '(MF)%'
GO

PRINT 'Modulo y Operaciones... OK'
GO

IF OBJECT_ID('dbo.criterios_valores_col') IS NULL
CREATE TABLE dbo.criterios_valores_col
( 
  campo varchar(20) NOT NULL,
  item  tinyint NOT NULL,
  descripcion varchar(40) NOT NULL,
  campo_rel varchar(20) NULL,
  valor tinyint NULL
)
GO
GRANT ALL ON criterios_valores_col TO PUBLIC
GO
IF OBJECT_ID('dbo.fdt_parametros') IS NULL
CREATE TABLE dbo.fdt_parametros
(
    pais         char(3) NOT NULL, --1
    compania     char(4) NOT NULL, --2
    parametro    varchar(10) NOT NULL,
    secuencia    tinyint NOT NULL,
    descripcion  varchar(100) NOT NULL,
    dato         varchar(20) NULL,
    tipo         tinyint NULL, --3
    campo        tinyint NULL, --4
    CONSTRAINT pk_fdt_parametros PRIMARY KEY (pais, compania, parametro, secuencia)
)
GO
GRANT ALL ON fdt_parametros TO PUBLIC
GO
IF NOT EXISTS
(SELECT 1 FROM syscolumns WHERE name = 'dato_largo'
 AND id = (SELECT id FROM sysobjects WHERE name = 'fdt_parametros'))

ALTER TABLE fdt_parametros ADD dato_largo varchar(250) NULL
go


IF OBJECT_ID('dbo.vw_fdt_parametros_nocorp') IS NOT NULL
    DROP VIEW dbo.vw_fdt_parametros_nocorp
GO
CREATE VIEW dbo.vw_fdt_parametros_nocorp
AS
SELECT
    pais, compania, parametro, secuencia, descripcion, dato, tipo, campo, dato_largo
FROM
    fdt_parametros
WHERE
    compania <> '0'
GO
GRANT ALL ON vw_fdt_parametros_nocorp TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fdt_parametros') IS NOT NULL
    DROP VIEW dbo.vw_fdt_parametros
GO
CREATE VIEW dbo.vw_fdt_parametros
AS
SELECT
    pais, compania, parametro, secuencia, descripcion, 
    dato = 
    CASE tipo WHEN 3 THEN CASE WHEN ISNUMERIC(RTRIM(LEFT(dato, 2))) = 1 
                               THEN RIGHT('00' + RTRIM(CONVERT(tinyint, RTRIM(LEFT(dato, 2)))), 2)
                               ELSE '00'
                          END
              WHEN 8 THEN CASE WHEN ISNUMERIC(RTRIM(LEFT(dato, 2))) = 1 
                               THEN RIGHT('00' + RTRIM(CONVERT(tinyint, RTRIM(LEFT(dato, 2)))), 2)
                               ELSE '00'
                          END
              WHEN 14 THEN CASE WHEN ISNUMERIC(RTRIM(LEFT(dato, 5))) = 1 
                               THEN RTRIM(CONVERT(smallint, RTRIM(LEFT(dato, 5))))
                               ELSE '0'
                           END
              ELSE dato END, 
    tipo, campo, dato_largo
FROM
    vw_fdt_parametros_nocorp
UNION
SELECT
    a.pais, b.compania, a.parametro, a.secuencia, a.descripcion, 
    dato = 
    CASE a.tipo WHEN 8 
              THEN CASE WHEN ISNUMERIC(RTRIM(LEFT(a.dato, 2))) = 1 
                        THEN RIGHT('00' + RTRIM(CONVERT(tinyint, RTRIM(LEFT(dato, 2)))), 2)
                        ELSE '00'
                   END
              ELSE a.dato END, 
    a.tipo, a.campo, a.dato_largo
FROM
    fdt_parametros a, companias b
WHERE
    a.compania = '0' AND
    NOT EXISTS (SELECT 1 FROM vw_fdt_parametros_nocorp x 
                WHERE a.pais = x.pais AND b.compania = x.compania
                  AND a.parametro = x.parametro AND a.secuencia = x.secuencia)
GO
GRANT ALL ON vw_fdt_parametros TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_del_parametros') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_del_parametros
GO
CREATE PROCEDURE dbo.sp_fdt_del_parametros
(
    @pch_pais      char(3),
    @pch_compania  char(4),
    @pvc_parametro varchar(10),
    @pti_secuencia tinyint
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: borra registros en las tablas fdt_parametros    ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Abril 26 de 2005                                      ***/
/********************************************************************/
BEGIN
    DECLARE @vbi_no_borrar bit

    IF UPPER(SYSTEM_USER) NOT IN ('ADAM', 'DATA', 'DATATEC')
    BEGIN
        RAISERROR ('Esta funcionalidad solo puede ser utilizada por un usuario de Data Tecnologia', 16, 1)
        RETURN
    END

    IF EXISTS(SELECT 1 FROM fdt_parametros
               WHERE pais = @pch_pais
               AND compania = @pch_compania
               AND parametro = @pvc_parametro
               AND secuencia = @pti_secuencia)
       DELETE fdt_parametros
       WHERE pais = @pch_pais
       AND compania = @pch_compania
       AND parametro = @pvc_parametro
       AND secuencia = @pti_secuencia
    ELSE  --no existe en la compañia
     --se debe verificar que la secuencia no exista en otra compañia <> de '0' y de la que viene en el parametro
        IF NOT EXISTS
        (SELECT 1
         FROM fdt_parametros
         WHERE pais = @pch_pais
         AND compania NOT IN('0', @pch_compania)
         AND parametro = @pvc_parametro
         AND secuencia = @pti_secuencia)
             DELETE fdt_parametros
             WHERE pais = @pch_pais
             AND compania = '0'
             AND parametro = @pvc_parametro
             AND secuencia = @pti_secuencia
         ELSE
             RAISERROR ('La secuencia que pretende borrar esta relacionada con otra compañia.', 16, 1)
END
GO
GRANT EXECUTE ON sp_fdt_del_parametros TO PUBLIC
GO



IF OBJECT_ID('dbo.sp_fdt_upd_parametros') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_upd_parametros
GO
CREATE PROCEDURE dbo.sp_fdt_upd_parametros
(
    @pch_pais        char(3),
    @pch_compania    char(4),
    @pvc_parametro   varchar(10),
    @pti_secuencia   tinyint,
    @pvc_dato        varchar(20),
    @pti_tipo        tinyint,
    @pti_campo       tinyint,
    @pvc_descripcion varchar(100),
    @pvc_dato_largo  varchar(250) = null
)
AS
BEGIN
    DECLARE
        @vti_secuencia tinyint,
        @vch_compania char(4)

    
    IF IsNull(@pti_secuencia,0) = 0 -- es un registro nuevo, un alta
    BEGIN
        IF UPPER(SYSTEM_USER) NOT IN ('ADAM', 'DATA', 'DATATEC')
        BEGIN
            RAISERROR ('Esta funcionalidad solo puede ser utilizada por un usuario de Data Tecnologia', 16, 1)
            RETURN
        END
    
        --todos los registros nuevos los insertamos con la compañia 0, para que las otras cias los puedan ver
        SELECT @vti_secuencia = MAX(secuencia)
        FROM fdt_parametros
        WHERE pais = @pch_pais AND compania = '0'
          AND parametro = @pvc_parametro

        SET @vti_secuencia = IsNull(@vti_secuencia,0) + 1

        INSERT INTO fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo, dato_largo)
        VALUES (@pch_pais, '0', @pvc_parametro, @vti_secuencia, @pvc_descripcion, @pvc_dato, @pti_tipo, IsNull(@pti_campo,0), @pvc_dato_largo)
    END
    ELSE --viene algo en la secuencia
    BEGIN
        IF EXISTS(SELECT 1 FROM fdt_parametros 
                  WHERE pais = @pch_pais AND compania = @pch_compania
                    AND parametro = @pvc_parametro AND secuencia = @pti_secuencia)
            UPDATE fdt_parametros
            SET dato = @pvc_dato,  
                tipo = IsNull(@pti_tipo,0),  
                campo = IsNull(@pti_campo,0),
                dato_largo = @pvc_dato_largo
            WHERE  
                pais = @pch_pais AND  
                compania = @pch_compania AND  
                parametro = @pvc_parametro AND  
                secuencia = @pti_secuencia;  
        ELSE  
            INSERT INTO fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo, dato_largo)
            SELECT 
                @pch_pais, @pch_compania, @pvc_parametro, @pti_secuencia, 
                descripcion, @pvc_dato, @pti_tipo, IsNull(@pti_campo,0), @pvc_dato_largo
            FROM
                fdt_parametros
            WHERE 
                pais = @pch_pais AND  
                compania = '0' AND  
                parametro = @pvc_parametro AND  
                secuencia = @pti_secuencia
    END

END
GO
GRANT EXECUTE ON sp_fdt_upd_parametros TO PUBLIC
GO

delete fdt_parametros where pais = 'COL' and compania = '0' AND parametro in ('autoliq', 'parafiscal', 'retencion', 'cesantias', 'otros')
go
delete fdt_parametros where pais = 'COL' and parametro = 'autoliq' and secuencia in (30, 31, 32, 40)
go
-- *** Parametros de Autoliq. *** 
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq', 2,'IBC Pension','S02',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq', 3,'Cotizacion Obligatoria Pension','S03',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq', 4,'Cotizacion Fondo de Solidaridad Pensional','S04',5,0); 
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq', 5,'Cotizacion Obligatoria Salud','S05',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq', 8,'Vacaciones','S08',5,0); 
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq', 9,'Cotizacion Obligatoria Riesgos Profesionales','S09',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',10,'Licencia de Maternidad','S10',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',11,'Incapacidad por Enfermedad General','S11',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',12,'Incapacidad por Accidente de Trabajo','S12',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',13,'Cotizacion Voluntaria Pension Empleado','S13',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',14,'Cotizacion Voluntaria Pension Patrono','S14',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',15,'UPC - Aporte Unidad de Capitacion','S15',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',16,'IBC Salud','S16',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',17,'IBC Riesgos Profesionales','S17',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',18,'Licencia No Remunerada y Sanciones','S18',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',19,'Valor No Retenido por Aportes Voluntarios','S19',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',20,'Variacion Transitoria del Salario','S20',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',21,'Agrupacion trabajadores por EPS','EPS',1,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',22,'Agrupacion trabajadores por Fondos de Pensiones','FPO',1,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',23,'Agrupacion trabajadores por Sucursal','SUC',1,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',24,'Agrupacion trabajadores por Centro de Trabajo','CENTROS',1,0);

--en las variables de nomina se guardan
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',25,'% Aporte Salud Empleado','12',8,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',26,'% Aporte Salud Empresa','13',8,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',27,'% Aporte Pension Empleado','14',8,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',28,'% Aporte Pension Empresa','15',8,0);
-- mas parametros de autoliq
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',29,'Agrupacion trabajadores para Tipo Documento','TIPO_DOC',1,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',33,'Método para obtener Porcentaje de Riesgos','4',4,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',34,'Variable relacionada a tarifa ARP','00',3,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',35,'Tabla de Impuestos relacionada a tarifa ARP','52',14,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',36,'Agrupación relacionada a tarifa ARP (para método 4)','CENTRO_C',1,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',37,'Orden de los Trabajadores en medios y listados','2',4,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',38,'Variable Salarios Min para aportar a FSP','18',8,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',39,'Variable % Aporte a Fondo de Solidaridad Pensional','16',8,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',41,'Agrupación para Tipo de Cotizante','TIPO_COTIZ',1,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',42,'Extranjero no obligado a cotizar a pensión','EXTRANJERO',12,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',43,'Colombiano residente en el exterior','RESIDE_EXT',12,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',44,'Municipio de Trabajo','MUNI_TRA',1,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',45,'Concepto aporte a FSP subcuenta de Solidaridad',10230,0,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',46,'Concepto aporte a FSP subcuenta de Subsistencia',10235,0,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo, dato_largo) values ('COL', '0', 'autoliq',47,'Agrupación Tipo Salario y Dato para Integral','TIPO_SAL',1,0,'INTEGRAL');
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'autoliq',48,'Variable % aporte salud colombianos residentes en el exterior',50,8,0);

--*** Parametro parafiscal ***
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal', 1,'Agrupacion trabajadores por Cajas de Compensacion','CAJ',1,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal', 2,'Aporte Obligatorio Caja de Compensacion','CAJ',2,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal', 3,'Aporte Obligatorio al SENA','SEN',0,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal', 4,'Aporte Obligatorio al ICBF','ICB',0,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal', 5,'Informe por Sucursal','NO',4,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal', 6,'Base Parafiscales','PAF',0,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal', 7,'Aporte Obligatorio ESAP','x',2,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal', 8,'Aporte Obligatorio MinEducacion','x',2,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal', 9,'% Aporte Cajas de Compensación','23',8,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal',10,'% Aporte SENA','21',8,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal',11,'% Aporte ICBF','22',8,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal',12,'% Aporte ESAP','',8,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'parafiscal',13,'% Aporte MinEducacion','',8,0);
 
--*** Parametro retencion ***
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 1,'Salarios y demas Ingresos Laborales','RTF',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 2,'Conceptos No Gravados','DPE',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 3,'Cesantias e Intereses de Cesantias','CES',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 4,'Gastos de Representacion','',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 5,'Pensiones de Jubilacion, Vejes o Invalidez','',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 6,'Otros Ingresos','',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 7,'Valor de Retencion en la Fuente','',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 8,'Acumulado base retencion anual','',0,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 9,'Base retencion mensual','',0,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 10,'Deduccion por intereses o correccion monetaria','3',3,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 11,'Deduccion por pagos a salud y educacion','4',3,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 12,'Base Neta Gravable','0000',0,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 13,'Porcentaje Retencion','0000',0,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 14,'Dias acumulados para retencion','0000',0,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 15,'Tipo de Nomina para calculo del % de Retencion','RE',6,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 17,'Aportes a Pensiones Obligatorias','APE',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 18,'Aportes Obligatorios a Salud','AAS',5,0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'retencion', 19,'Aportes Voluntarios a pension y AFC','APV',5,0);

--*** Parametro cesantias ***
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'cesantias', 1,'Cesantias 1','C01',2,0);

-- *** Parametro Otros ***
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'otros', 1,'Agrupación de conceptos de Embargos','EMB',5, 0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'otros', 3,'Agrupación de Conceptos de Ausentismos','DAU',5, 0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'otros', 12, 'Utilizar IBC de Salud en lugar del de Riesgos en reporte al ISS', 'NO', 4, 0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'otros', 13, 'Reporta Vacaciones al ISS (cuando no es la ARP) - Solo Afiliados a Salud', 'SI', 4, 0);
insert into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo) values ('COL', '0', 'otros', 14, 'Reporta Vacaciones al ISS (cuando no es la ARP) - Todos (modelo DORIA)', 'NO', 4, 0);
GO

IF (SELECT count(*) FROM fdt_parametros WHERE pais = 'COL' AND compania <> '0' AND parametro in ('autoliq', 'parafiscal', 'retencion', 'cesantias', 'otros')) = 0
    IF EXISTS(SELECT 1 FROM syscolumns sc INNER JOIN sysobjects so ON sc.id = so.id WHERE so.name = 'parametros_mf' AND sc.name = 'campo')
    EXEC ('INSERT into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo)' +
          ' SELECT DISTINCT ''COL'', compania, parametro, secuencia, descripcion, dato, tipo, campo' + 
          ' FROM parametros_mf a WHERE compania <> ''0''')
ELSE
    INSERT into fdt_parametros (pais, compania, parametro, secuencia, descripcion, dato, tipo, campo)
    SELECT DISTINCT 'COL', compania, parametro, secuencia, descripcion, dato, tipo, 0
    FROM parametros_mf a WHERE compania <> '0'
GO

PRINT 'Parametros... OK'
GO
IF OBJECT_ID('dbo.fco_departamentos') IS NULL
CREATE TABLE dbo.fco_departamentos
(
    codigo char(2) NOT NULL,
    nombre varchar(40) NOT NULL,
    CONSTRAINT PK_fco_departamentos PRIMARY KEY (codigo)
)
GO
GRANT ALL ON fco_departamentos TO PUBLIC
GO

IF OBJECT_ID('dbo.fco_ciudades') IS NULL
CREATE TABLE dbo.fco_ciudades
(
    codigo char(3) NOT NULL,
    nombre varchar(40) NOT NULL,
    cod_dpto char(2) NOT NULL,
    CONSTRAINT PK_fco_ciudades PRIMARY KEY (codigo, cod_dpto),
    CONSTRAINT FK_fco_ciu_dpto FOREIGN KEY (cod_dpto) REFERENCES fco_departamentos (codigo) ON DELETE CASCADE
)
GO
GRANT ALL ON fco_ciudades TO PUBLIC
GO
IF OBJECT_ID('dbo.fco_administradoras') IS NOT NULL
    DROP TABLE dbo.fco_administradoras
GO
CREATE TABLE dbo.fco_administradoras
(	
    codigo char(10) NOT NULL,
    registro_fiscal varchar(10) NULL,
    digito_verificacion	char(1)	NULL,
    direccion	varchar(40) NULL,
    telefono	varchar(20) NULL,
    cod_super	varchar(15) NULL,
    cod_alterno	varchar(20) NULL,
    tipo	char(3) NOT NULL,
    agrupacion	char(10) NOT NULL,
    forma_presentacion char(1) NOT NULL,
    departamento char(2) NULL,
    municipio char(3) NULL,
    CONSTRAINT PK_fco_administradoras PRIMARY KEY (codigo, tipo),
    CONSTRAINT ck_fco_admin_tipo CHECK (tipo IN ('EPS','AFP','FPV', 'CCF')),
    CONSTRAINT ck_fco_admin_forma CHECK (forma_presentacion IN ('U','C','S')),
	CONSTRAINT fk_fco_administradoras_01 FOREIGN KEY (agrupacion,codigo) REFERENCES datos_agr_trab (agrupacion,dato)
)
GO
GRANT ALL ON fco_administradoras TO PUBLIC
GO
IF OBJECT_ID('dbo.fco_super') IS NOT NULL
    DROP TABLE dbo.fco_super
GO
CREATE TABLE dbo.fco_super
(
    tipo char(3),
    super char(6),
    nombre varchar(100),
    nit decimal(9),
    dv decimal(1),
    departamento char(2),
    municipio char(3),
 Constraint pk_fco_super PRIMARY KEY (tipo, super)
)
GO
GRANT ALL ON dbo.fco_super TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_fco_administradoras') IS NOT NULL
    DROP VIEW vw_fco_administradoras
GO
CREATE VIEW vw_fco_administradoras
AS
-- EPS
SELECT c.compania, ISNULL(a.codigo, EPS.dato) AS codigo, RTRIM(EPS.descripcion) AS descripcion,
a.registro_fiscal, a.digito_verificacion, a.direccion, a.telefono, 
a.cod_super, a.cod_alterno, 'EPS' AS tipo, a.agrupacion, a.forma_presentacion, departamento, municipio
FROM datos_agr_trab EPS
INNER JOIN companias c ON 1=1
LEFT JOIN fco_administradoras a ON a.codigo = EPS.dato AND a.tipo = 'EPS'
WHERE EPS.agrupacion = ISNULL((SELECT x.dato FROM vw_fdt_parametros x 
                               WHERE x.pais = 'COL' AND x.compania = c.compania
                                 AND parametro = 'autoliq' AND secuencia = 21), 'EPS')
UNION
-- AFP
SELECT c.compania, ISNULL(a.codigo, AFP.dato), RTRIM(AFP.descripcion),
a.registro_fiscal, a.digito_verificacion, a.direccion, a.telefono, 
a.cod_super, a.cod_alterno, 'AFP', a.agrupacion, a.forma_presentacion, departamento, municipio
FROM datos_agr_trab AFP
INNER JOIN companias c ON 1=1
LEFT JOIN fco_administradoras a ON a.codigo = AFP.dato AND a.tipo = 'AFP'
WHERE AFP.agrupacion = ISNULL((SELECT x.dato FROM vw_fdt_parametros x 
                               WHERE x.pais = 'COL' AND x.compania = c.compania
                                 AND parametro = 'autoliq' AND secuencia = 22), 'AFP')
UNION
-- CCF
SELECT c.compania, ISNULL(a.codigo, CCF.dato), RTRIM(CCF.descripcion),
a.registro_fiscal, a.digito_verificacion, a.direccion, a.telefono, 
a.cod_super, a.cod_alterno, 'CCF', a.agrupacion, a.forma_presentacion, departamento, municipio
FROM datos_agr_trab CCF
INNER JOIN companias c ON 1=1
LEFT JOIN fco_administradoras a ON a.codigo = CCF.dato AND a.tipo = 'CCF'
WHERE CCF.agrupacion = ISNULL((SELECT x.dato FROM vw_fdt_parametros x 
                               WHERE x.pais = 'COL' AND x.compania = c.compania
                                 AND parametro = 'parafiscal' AND secuencia = 1), 'CAJAS')
GO
GRANT SELECT ON vw_fco_administradoras TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_baja_administradora') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_baja_administradora
GO
CREATE PROCEDURE dbo.sp_fco_baja_administradora
(	
    @pch_codigo 	char(10),
    @pch_tipo   	char(3),
	@pch_agrupacion char(10)
)
AS
BEGIN
    BEGIN TRAN

	DELETE fco_administradoras
	WHERE codigo = @pch_codigo
	  AND   tipo = @pch_tipo
	
    EXEC sp_baja_datos_agr_trab @pch_agrupacion, @pch_codigo

    IF @@ERROR <> 0
        ROLLBACK TRAN
    ELSE
        COMMIT TRAN
END
GO
GRANT EXECUTE ON sp_fco_baja_administradora TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_alta_administradora') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_alta_administradora
GO
CREATE PROCEDURE dbo.sp_fco_alta_administradora
(
    @pch_codigo    char(10),
    @pvc_registro_fiscal    varchar(10),
    @pch_digito_verificacion  char(1),
    @pvc_direccion  varchar(40),
    @pvc_telefono  varchar(20),
    @pvc_cod_super  varchar(15),
    @pvc_cod_alterno  varchar(20),
    @pch_tipo   char(3),
    @pch_agrupacion  char(10),
    @pch_forma_presentacion char(1),
    @pch_descripcion  char(40),
    @pch_departamento char(2) = '',
    @pch_municipio char(3) = ''
)
AS
BEGIN
    IF EXISTS (SELECT 1 FROM datos_agr_trab
               WHERE agrupacion = @pch_agrupacion
                 AND dato = @pch_codigo)
        EXEC sp_cambio_datos_agr_trab @pch_agrupacion, @pch_codigo, @pch_descripcion
    ELSE
        EXEC sp_alta_datos_agr_trab @pch_agrupacion, @pch_codigo, @pch_descripcion


    IF EXISTS(SELECT 1 FROM fco_administradoras WHERE codigo = @pch_codigo AND tipo = @pch_tipo)  
    BEGIN
      	UPDATE fco_administradoras
      	SET registro_fiscal = @pvc_registro_fiscal,
      		digito_verificacion = @pch_digito_verificacion,
      		direccion = @pvc_direccion,
      		telefono = @pvc_telefono,
      		cod_super = @pvc_cod_super,
      		cod_alterno = @pvc_cod_alterno,
      		forma_presentacion = @pch_forma_presentacion,
            departamento = @pch_departamento,
            municipio = @pch_municipio
      	WHERE
      		rtrim(ltrim(codigo)) = rtrim(ltrim(@pch_codigo)) And
      		tipo   = @pch_tipo
    
        EXEC sp_cambio_datos_agr_trab @pch_agrupacion, @pch_codigo, @pch_descripcion
    END
    ELSE
        INSERT INTO fco_administradoras 
        (codigo, registro_fiscal, digito_verificacion, direccion, telefono, cod_super, cod_alterno,
         tipo, agrupacion, forma_presentacion, departamento, municipio)
        SELECT @pch_codigo, @pvc_registro_fiscal, @pch_digito_verificacion, @pvc_direccion, 
        @pvc_telefono, @pvc_cod_super, @pvc_cod_alterno, @pch_tipo, @pch_agrupacion, @pch_forma_presentacion, @pch_departamento, @pch_municipio
  
END
GO
GRANT EXECUTE ON sp_fco_alta_administradora TO PUBLIC
GO


IF (SELECT COUNT(*) FROM fco_Administradoras) = 0
INSERT INTO fco_administradoras
(codigo, registro_fiscal, digito_verificacion, direccion, telefono, 
cod_super, cod_alterno, tipo, agrupacion, forma_presentacion, departamento, municipio)
SELECT codigo, registro_fiscal, digito_verificacion, direccion, telefono, 
cod_super, cod_alterno, tipo, agrupacion, forma_presentacion, '', ''
FROM administradoras a
WHERE EXISTS 
(SELECT 1 FROM datos_agr_trab x
 WHERE x.agrupacion = a.agrupacion AND a.codigo = x.dato)


GO
IF (SELECT COUNT(*) FROM fco_Administradoras WHERE tipo = 'CCF') = 0

INSERT INTO fco_administradoras (codigo, tipo, agrupacion, forma_presentacion, departamento, municipio)
SELECT dato, 'CCF', 
(SELECT top 1 dato FROM vw_fdt_parametros WHERE pais = 'COL' AND parametro = 'parafiscal' AND secuencia = 1),
'C', '', ''
FROM datos_agr_trab
WHERE agrupacion = 
(SELECT top 1 dato FROM vw_fdt_parametros WHERE pais = 'COL' AND parametro = 'parafiscal' AND secuencia = 1)
go
Delete fco_departamentos;
Insert Into fco_departamentos Values ('05','Antioquia');
Insert Into fco_departamentos Values ('08','Atlántico');
Insert Into fco_departamentos Values ('11','Bogotá D.C.');
Insert Into fco_departamentos Values ('13','Bolívar');
Insert Into fco_departamentos Values ('15','Boyaca');
Insert Into fco_departamentos Values ('17','Caldas');
Insert Into fco_departamentos Values ('18','Caquetá');
Insert Into fco_departamentos Values ('19','Cauca');
Insert Into fco_departamentos Values ('20','Cesar');
Insert Into fco_departamentos Values ('23','Córdoba');
Insert Into fco_departamentos Values ('25','Cundinamarca');
Insert Into fco_departamentos Values ('27','Chocó');
Insert Into fco_departamentos Values ('41','Huila');
Insert Into fco_departamentos Values ('44','La Guajira');
Insert Into fco_departamentos Values ('47','Magdalena');
Insert Into fco_departamentos Values ('50','Meta');
Insert Into fco_departamentos Values ('52','Nariño');
Insert Into fco_departamentos Values ('54','Norte de Santander');
Insert Into fco_departamentos Values ('63','Quindio');
Insert Into fco_departamentos Values ('66','Risaralda');
Insert Into fco_departamentos Values ('68','Santander');
Insert Into fco_departamentos Values ('70','Sucre');
Insert Into fco_departamentos Values ('73','Tolima');
Insert Into fco_departamentos Values ('76','Valle');
Insert Into fco_departamentos Values ('81','Arauca');
Insert Into fco_departamentos Values ('85','Casanare');
Insert Into fco_departamentos Values ('86','Putumayo');
Insert Into fco_departamentos Values ('88','San Andrés');
Insert Into fco_departamentos Values ('91','Amazonas');
Insert Into fco_departamentos Values ('94','Guainía');
Insert Into fco_departamentos Values ('95','Guaviare');
Insert Into fco_departamentos Values ('97','Vaupés');
Insert Into fco_departamentos Values ('99','Vichada');
go
Delete fco_ciudades;
Insert Into fco_ciudades Values ('001','MEDELLIN','05');
Insert Into fco_ciudades Values ('088','BELLO','05');
Insert Into fco_ciudades Values ('129','CALDAS','05');
Insert Into fco_ciudades Values ('266','ENVIGADO','05');
Insert Into fco_ciudades Values ('360','ITAGUI','05');
Insert Into fco_ciudades Values ('615','RIONEGRO','05');
Insert Into fco_ciudades Values ('001','BARRANQUILLA;','08');
Insert Into fco_ciudades Values ('001','BOGOTA D.C.','11');
Insert Into fco_ciudades Values ('001','CARTAGENA DE INDIAS','13');
Insert Into fco_ciudades Values ('001','TUNJA','15');
Insert Into fco_ciudades Values ('189','CIENEGA','15');
Insert Into fco_ciudades Values ('001','MANIZALES','17');
Insert Into fco_ciudades Values ('001','FLORENCIA','18');
Insert Into fco_ciudades Values ('001','POPAYAN','19');
Insert Into fco_ciudades Values ('001','VALLEDUPAR','20');
Insert Into fco_ciudades Values ('001','MONTERIA','23');
Insert Into fco_ciudades Values ('162','CERETE','23');
Insert Into fco_ciudades Values ('175','CHIA','25');
Insert Into fco_ciudades Values ('269','FACATATIVA','25');
Insert Into fco_ciudades Values ('286','FUNZA','25');
Insert Into fco_ciudades Values ('307','GIRARDOT','25');
Insert Into fco_ciudades Values ('377','LA CALERA','25');
Insert Into fco_ciudades Values ('386','LA MESA','25');
Insert Into fco_ciudades Values ('430','MADRID','25');
Insert Into fco_ciudades Values ('473','MOSQUERA','25');
Insert Into fco_ciudades Values ('754','SOACHA','25');
Insert Into fco_ciudades Values ('758','SOPO','25');
Insert Into fco_ciudades Values ('817','TOCANCIPA','25');
Insert Into fco_ciudades Values ('843','UBATE','25');
Insert Into fco_ciudades Values ('899','ZIPAQUIRA','25');
Insert Into fco_ciudades Values ('001','QUIBDO (SAN FRANCISCO DE QUIBDO);','27');
Insert Into fco_ciudades Values ('001','NEIVA','41');
Insert Into fco_ciudades Values ('001','RIOHACHA','44');
Insert Into fco_ciudades Values ('001','SANTA MARTA','47');
Insert Into fco_ciudades Values ('001','VILLAVICENCIO','50');
Insert Into fco_ciudades Values ('001','PASTO (SAN JUAN DE PASTO);','52');
Insert Into fco_ciudades Values ('001','CUCUTA','54');
Insert Into fco_ciudades Values ('518','PAMPLONA','54');
Insert Into fco_ciudades Values ('001','ARMENIA','63');
Insert Into fco_ciudades Values ('001','PEREIRA','66');
Insert Into fco_ciudades Values ('001','BUCARAMANGA','68');
Insert Into fco_ciudades Values ('081','BARRANCABERMEJA','68');
Insert Into fco_ciudades Values ('276','FLORIDABLANCA','68');
Insert Into fco_ciudades Values ('307','GIRON','68');
Insert Into fco_ciudades Values ('547','PIEDECUESTA','68');
Insert Into fco_ciudades Values ('679','SAN GIL','68');
Insert Into fco_ciudades Values ('001','SINCELEJO','70');
Insert Into fco_ciudades Values ('001','IBAGUE','73');
Insert Into fco_ciudades Values ('001','CALI (SANTIAGO DE CALI);','76');
Insert Into fco_ciudades Values ('001','ARAUCA','81');
Insert Into fco_ciudades Values ('001','YOPAL','85');
Insert Into fco_ciudades Values ('001','MOCOA','86');
Insert Into fco_ciudades Values ('001','SAN ANDRES','88');
Insert Into fco_ciudades Values ('564','PROVIDENCIA','88');
Insert Into fco_ciudades Values ('001','LETICIA','91');
Insert Into fco_ciudades Values ('001','PUERTO INIRIDA','94');
Insert Into fco_ciudades Values ('001','SAN JOSE DEL GUAVIARE','95');
Insert Into fco_ciudades Values ('001','MITU','97');
Insert Into fco_ciudades Values ('001','PUERTO CARREÑO','99');
Insert Into fco_ciudades Values ('380','LA DORADA','17');
Insert Into fco_Ciudades Values ('268','ESPINAL','73');
Insert Into fco_Ciudades Values ('349','HONDA','73');
Insert Into fco_Ciudades Values ('109','BUENAVENTURA','76');
Insert Into fco_Ciudades Values ('147','CARTAGO','76');
Insert Into fco_Ciudades Values ('520','PALMIRA','76');
Insert Into fco_Ciudades Values ('834','TULUA','76');
Insert Into fco_Ciudades Values ('568','PUERTO ASIS','86');
go
delete fco_super;
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-1','ASEGURADORA DE VIDA COLSEGUROS',860027404,1,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-4','SEGUROS DE VIDA COLPATRIA S.A.',860002183,9,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-5','COMPAÑIA AGRICOLA DE SEGUROS DE VIDA S.A.',860002528,6,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-7','CIA. DE SEGUROS BOLIVAR S.A.',860002503,2,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-8','COMPAÑIA DE SEGUROS DE VIDA AURORA',890300465,2,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','25-10','INSTITUTO DE SEGUROS SOCIALES I.S.S. RIESGOS PROFESIONALES',860013816,1,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-17','SEGUROS DE VIDA ALFA S.A.',860503617,3,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-18','LIBERTY SEGUROS DE VIDA ',960039988,0,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-19','SEGUROS DE VIDA DEL ESTADO S.A.',860006578,6,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-23','LA PREVISORA VIDA S.A. COMPAÑIA DE SEGUROS',860011153,6,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-25','RIESGOS PROFESIONALES COLMENA S.A COMPAÑÍA DE SEGUROS DE VIDA',800228175,2,'','');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-26','BBVA SEGUROS DE VIDA COLOMBIA S.A',800226098,4,'05','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-27','COMPAÑÍA CENTRAL DE SEGUROS DE VIDA S.A.',830005997,1,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-28','COMPAÑIA SURAMERICANA ADMINISTRADORA DE RIESGOS PROFESIONALES Y SEGUROS VIDA',800256161,9,'','');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('ARP','14-29',' LA EQUIDAD SEGUROS DE VIDA ORGANISMO COOPERATIVO - LA EQUIDAD VIDA',860028415,5,'05','001');

INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','230201','Administradora de Fondos de Pensiones y Cesantía Protección S.A.',800138188,1,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','230301','Sociedad Administradora de Fondos de Pensiones y Cesantías Porvenir S.A.',800144331,3,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','230501','Bbva Horizonte Sociedad Administradora de Fondos de Pensiones y de Cesantías S.A. ',800231967,1,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','230801','Fondos de Pensiones y Cesantía Santander S.A.',800148959,6,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','230901','Skandia Administradora de Fondos de Pensiones y Cesantías S.A.',800148514,2,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','231001','Compañía Colombiana Administradora de Fondos de Pensiones y Cesantías S.A. COLFONDOS',800149496,2,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','25-11','Instituto de Seguros Sociales  I.S.S. Pensiones',860013816,1,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','25-2','Caja de Auxilios y Prestaciones de la Asociación Colombiana de Aviadores Civiles Acdac “Caxdac"',860007379,8,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','25-3','Fondo de Previsión Social del Congreso de la República –Fonprecon-',899999734,7,'05','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','25-4','Caja de Previsión Social de Comunicaciones -Caprecom-',899999026,0,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','25-7','Pensiones de Antioquia',800216278,0,'','');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('AFP','25-8','Caja Nacional de Previsión Social “Cajanal”',899999010,3,'05','001');

INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF02','Caja de Compensación Familiar Camacol COMFAMILIAR CAMACOL',890900840,1,'05','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF03','Caja de Compensación Familiar COMFENALCO ANTIOQUIA',890600842,6,'08','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF04','Caja de Compensación Familiar de Antioquia COMFAMA',890900841,9,'08','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF05','Caja de Compensación Familiar CAJACOPI ATLANTICO',890102044,1,'08','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF06','Caja de Compensación Familiar de Barranquilla COMBARRANQUILLA',890102002,2,'13','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF07','Caja de Compensación Familiar COMFAMILIAR DEL ATLANTICO',890101994,9,'13','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF08','Caja de Compensación Familiar de Fenalco - Andi COMFENALCO CARTAGENA',890480023,7,'13','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF09','Caja de Compensación Familiar de Cartagena',890480110,1,'17','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF10','Caja de Compensación Familiar de Boyacá - COMFABOY',891800213,8,'17','380');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF11','Caja de Compensación Familiar de Caldas',890806490,5,'18','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF12','Caja de Compensación Familiar de la Dorada - COMFAMILIAR',890801263,7,'19','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF13','Caja de Compensación Familiar del Caquetá - COMFACA',891190047,2,'20','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF14','Caja de Compensación Familiar del Cauca - COMFACAUCA',891500182,0,'23','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF15','Caja de Compensación Familiar del Cesar COMFACESAR',892399989,8,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF16','Caja de Compensación Familiar de Córdoba COMFACOR',891080005,1,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF18','Caja de Compensación Familiar AFIDRO',860007331,5,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF20','Caja de Compensación Familiar ASFAMILIAS ',860013433,2,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF21','Caja de Compensación Familiar CAFAM',860013570,3,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF22','Caja Colombiana de Subsidio Familiar COLSUBSIDIO',860007336,1,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF23','Caja de Compensación Familiar de Fenalco COMFENALCO CUNDINAMARCA',860006606,0,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF24','Caja de Compensación Familiar COMPENSAR',860066942,7,'25','307');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF26','Caja de Compensación Familiar de Cundinamarca - COMFACUNDI',860045904,7,'27','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF28','Caja de Compensación Familiar de Girardot COMGIRARDOT (en liquidación)',890680023,5,'44','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF29','Caja de Compensación Familiar del Chocó',891600091,8,'41','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF30','Caja de Compensación Familiar de la Guajira',892115006,5,'47','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF32','Caja de Compensación Familiar del Huila - COMFAMILIAR',891180008,2,'50','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF33','Caja de Compensación Familiar del Magdalena',891780093,3,'52','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF34','Caja de Compensación Familiar Regional del Meta COFREM',892000146,3,'54','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF35','Caja de Compensación Familiar de Nariño',891280008,1,'54','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF36','Caja de Compensación Familiar del Oriente Colombiano COMFAORIENTE',890500675,6,'68','081');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF37','Caja de Compensación Familiar del Norte de Santander COMFANORTE',890500516,3,'68','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF38','Caja de Compensación Familiar de Barrancabermeja CAFABA',890270275,5,'68','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF39','Caja Santandereana de Subsidio Familiar CAJASAN',890200106,1,'70','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF40','Caja de Compensación Familiar COMFENALCO SANTANDER',890201578,7,'63','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF41','Caja de Compensación Familiar de Sucre',892200015,5,'63','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF42','Caja de Compensación Familiar del Quindío COMFAMILIAR',890000062,6,'66','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF43','Caja de Compensación Familiar de Fenalco COMFENALCO QUINDIO',890000381,0,'73','268');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF44','Caja de Compensación Familiar de Risaralda- COMFAMILIAR RISARALDA',891480000,1,'73','349');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF46','Caja de Compensación Familiar del Sur del Tolima CAFASUR',890704737,7,'73','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF47','Caja de Compensación Familiar de Honda COMFAHONDA',890700679,3,'73','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF48','Caja de Compensación Familiar del Tolima COMFATOLIMA',890700687,2,'76','109');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF50','Caja de Compensación Familiar de Fenalco del Tolima - COMFENALCO',890700148,4,'76','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF51','Caja de Compensación Familiar de Buenaventura',890304033,8,'76','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF56','Caja de Compensación Familiar Comfenalco del Valle del Cauca - COMFENALCO VALLE',890303093,5,'76','147');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF57','Caja de Compensación Familiar del Valle del Cauca COMFAMILIAR ANDI - COMFANDI',890303208,5,'76','520');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF59','Caja de Compensación Familiar de Cartago - Comfacartago',891900452,0,'76','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF61','Caja de Compensación Familiar Comfamiliares Unidas del Valle COMFAUNION',891380056,4,'76','834');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF62','Caja de Compensación Familiar de Tuluá - Comfamiliar de Tuluá',891900280,0,'88','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF63','Caja de Compensación Familiar del Putumayo - COMFAMILIAR PUTUMAYO',891200337,8,'91','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF64','Caja de Compensación Familiar de San Andrés y Providencia, Islas CAJASAI',892400320,5,'81','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF65','Caja de Compensación Familiar del Amazonas CAFAMAZ',800003122,6,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF67','Caja de Compensación Familiar de Arauca COMFIAR',800219488,4,'85','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF68','Caja de Compensación Familiar Campesina COMCAJA',800231969,4,'','');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('CCF','CCF69','Caja de Compensación Familiar del Casanare - COMFACASANARE',844003392,8,'11','001');

INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS001','COLMÉDICA EPS    ',830113831,0,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS002','SALUD TOTAL S.A. ENTIDAD PROMOTORA DE SALUD    ',800130907,4,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS003','CAFESALUD MEDICINA PREPAGADA S.A.  ',800140949,6,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS005','ENTIDAD PROMOTORA DE SALUD SANITAS S.A.  ',800251440,6,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS006','INSTITUTO DE SEGUROS SOCIALES ENTIDAD PROMOTORA DE SALUD  ',860013816,1,'05','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS008','COMPENSAR ENTIDAD PROMOTORA DE SALUD  ',860066942,7,'05','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS009','E.P.S. PROGRAMA COMFENALCO ANTIOQUIA  ',890900842,6,'76','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS010','SUSALUD EPS    ',800088702,2,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS012','COMFENALCO VALLE E.P.S.  ',890303093,5,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS013','ENTIDAD PROMOTORA DE SALUD ORGANISMO COOPERATIVO SALUDCOOP  ',800250119,1,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS014','HUMANA VIVIR S.A.  EPS  ARS   ',830006404,0,'76','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS015','Programa SERVICIOS MÉDICOS COLPATRIA S.A. ENTIDAD PROMOTORA DE SALUD  ',860512237,6,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS016','COOMEVA ENTIDAD PROMOTORA DE SALUD S.A.  ',805000427,1,'76','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS017','ENTIDAD PROMOTORA DE SALUD FAMISANAR LIMITADA CAFAM-COLSUBSIDIO  ',830003564,7,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS018','ENTIDAD PROMOTORA DE SALUD SERVICIO OCCIDENTAL DE SALUD S.A. S.O.S. ',805001157,2,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS020','CAJA DE PREVISIÓN SOCIAL DE COMUNICACIONES CAPRECOM ENTIDAD PROMOTORA DE SALUD  ',899999026,0,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS023','CRUZ BLANCA ENTIDAD PROMOTORA DE SALUD S.A.  ',830009783,0,'85','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS024','CAJANAL E.P.S.',899999010,3,'68','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS025','CAPRESOCA E.P.S. ',891856000,0,'76','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS026','SOLSALUD E.P.S. S.A.  ',804001273,5,'52','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS028','CALISALUD ENTIDAD PROMOTORA DE SALUD  ',805004565,8,'86','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS030','ENTIDAD PROMOTORA DE SALUD CONDOR S.A.  -   E.P.S. CONDOR S.A.  ',814000608,0,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS031','SELVASALUD S.A. ENTIDAD PROMOTORA DE SALUD SELVASALUD S.A. E.P.S. ',846000244,1,'76','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS033','SALUDVIDA S.A. ENTIDAD PROMOTORA DE SALUD   ',830074184,5,'11','001');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS034','SALUDCOLOMBIA ENTIDAD PROMOTORA DE SALUD S.A.  ',805021984,2,'','');
INSERT INTO fco_super (tipo, super, nombre, nit, dv, departamento, municipio) VALUES ('EPS','EPS035','RED SALUD ATENCIÓN HUMANA E.P.S. S.A.  ',830096513,1,'','');

insert into fco_super (tipo, super, nombre) select 'EPS', 'RES001', 'Policia Nacional'
insert into fco_super (tipo, super, nombre) select 'EPS', 'RES002', 'Ecopetrol'
insert into fco_super (tipo, super, nombre) select 'EPS', 'RES003', 'Fuerzas Militares'
insert into fco_super (tipo, super, nombre) select 'EPS', 'RES004', 'Fondo de Prestaciones Sociales del Magisterio'
insert into fco_super (tipo, super, nombre) select 'EPS', 'EAS002', 'CAJA DE PREVISION SOCIAL DE LA UNIVERSIDAD DE SANTANDER'
insert into fco_super (tipo, super, nombre) select 'EPS', 'EAS005', 'UNIVERSIDAD DE ANTIOQUIA DIVISION SALUD'
insert into fco_super (tipo, super, nombre) select 'EPS', 'EAS021', 'UNISALUD'
insert into fco_super (tipo, super, nombre) select 'EPS', 'EAS024', 'SERVICIO MEDICO UNIVERSIDAD DEL VALLE'
insert into fco_super (tipo, super, nombre) select 'EPS', 'EAS025', 'FONDO DE SALUD UNIVERSIDAD DE CORDOBA'
insert into fco_super (tipo, super, nombre) select 'EPS', 'EAS026', 'FONDO PRESTACIONAL UNIVERSIDAD DE NARIÑO'
insert into fco_super (tipo, super, nombre) select 'EPS', 'EAS030', 'CAJA DE PREVISION SOCIAL UNIVERSIDAD DE CARTAGENA'

PRINT 'Administradoras... OK'
GO

IF OBJECT_ID('dbo.fco_sucursales') IS NULL
CREATE TABLE dbo.fco_sucursales
( 
    compania char(4) NOT NULL,
    sucursal char(10) NOT NULL,
    descripcion varchar(40) NOT NULL,
    direccion varchar(40) NULL,
    cod_ciudad char(3) NULL,
    cod_dpto char(2) NULL,
    telefono varchar(10) NULL,
    fax varchar(10) NULL,
    clase_nomina char(2) NULL,
    nombre_retenedor varchar(60) NULL,
    cedula_retenedor varchar(60) NULL,
    agencias varchar(300) NULL,
    codigo_iss char(3) NULL,
    autoliquida bit NULL,
    CONSTRAINT pk_fco_sucursales PRIMARY KEY (compania, sucursal)
)
GO
GRANT ALL ON fco_sucursales TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_sucursales_cia') IS NOT NULL
    DROP VIEW dbo.vw_fco_sucursales_cia
GO
CREATE VIEW dbo.vw_fco_sucursales_cia
AS
SELECT 
    rac.compania, 
    dat.dato AS sucursal, 
    ISNULL(suc.descripcion, dat.descripcion) AS descripcion, 
    ISNULL(suc.clase_nomina, '--') clase_nomina
FROM rel_agr_companias rac
INNER JOIN datos_agr_trab dat ON rac.agrupacion = dat.agrupacion 
LEFT JOIN fco_sucursales suc ON suc.compania = rac.compania AND suc.sucursal = dat.dato
WHERE rac.agrupacion = (SELECT x.dato FROM vw_fdt_parametros x
                        WHERE x.pais = 'COL' AND x.compania = rac.compania
                          AND x.parametro = 'autoliq' AND x.secuencia = 23)
AND (SELECT x.dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = rac.compania
       AND x.parametro = 'autoliq' AND x.secuencia = 23) IS NOT NULL
-- SEGURIDAD POR DATO DE AGRUPACION
AND NOT EXISTS
(SELECT 1 FROM rel_usu_agr_trab r 
 WHERE r.agrupacion = dat.agrupacion AND r.dato = dat.dato AND r.usuario = SYSTEM_USER)

UNION

SELECT 
    cias.compania, 
    '', 
    'Cia. sin Sucursales', 
    '--' 
FROM companias cias
WHERE (SELECT x.dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = cias.compania
       AND x.parametro = 'autoliq' AND x.secuencia = 23) IS NULL
OR
NOT EXISTS
(SELECT 1 FROM agrupaciones_trab a
 WHERE agrupacion = (SELECT x.dato FROM vw_fdt_parametros x
                           WHERE x.pais = 'COL' AND x.compania = cias.compania
                             AND x.parametro = 'autoliq' AND x.secuencia = 23))

GO
GRANT SELECT ON vw_fco_sucursales_cia TO PUBLIC
GO


IF OBJECT_ID('dbo.vw_fco_sucursales') IS NOT NULL
    DROP VIEW dbo.vw_fco_sucursales
GO
CREATE VIEW dbo.vw_fco_sucursales  
AS  
SELECT   
    v.compania, v.sucursal, s.codigo_iss,   
    ISNULL(v.descripcion, s.descripcion) AS descripcion,   
    s.direccion, s.cod_dpto, s.cod_ciudad, s.telefono, s.fax,    
    s.nombre_retenedor, s.cedula_retenedor, s.agencias, IsNull(Convert(tinyint, s.autoliquida), 1) autoliquida
FROM vw_fco_sucursales_cia v  
LEFT JOIN fco_sucursales s ON v.compania = s.compania AND v.sucursal = s.sucursal
WHERE 
-- SEGURIDAD POR CLASE DE NOMINA
(EXISTS(SELECT 1 FROM rel_usu_clase_nom x 
           WHERE x.clase_nomina = s.clase_nomina
             AND x.usuario = SYSTEM_USER) OR ISNULL(v.clase_nomina, '--') = '--')
GO
GRANT SELECT ON dbo.vw_fco_sucursales TO PUBLIC
GO


IF OBJECT_ID('dbo.vw_fco_div_trabajador') IS NOT NULL
    DROP VIEW dbo.vw_fco_div_trabajador
GO
CREATE VIEW dbo.vw_fco_div_trabajador
AS
/* Compañías Con Sucursales */
SELECT tg.compania, tg.trabajador, ISNULL(x.sucursal, '0') dato, ISNULL(x.descripcion, 'NO ASIGNADA') descripcion
FROM trabajadores_grales tg
LEFT JOIN 
(SELECT rta.compania, rta.trabajador, s.sucursal, s.descripcion
 FROM vw_fco_sucursales_cia s
 INNER JOIN rel_trab_agr rta ON rta.compania = s.compania AND rta.dato = s.sucursal
   AND rta.agrupacion = (SELECT x.dato FROM vw_fdt_parametros x
                         WHERE x.pais = 'COL' AND x.compania = s.compania
                           AND x.parametro = 'autoliq' AND x.secuencia = 23)) AS x 
    ON tg.compania = x.compania AND tg.trabajador = x.trabajador
WHERE (SELECT x.dato FROM vw_fdt_parametros x
       WHERE x.pais = 'COL' AND x.compania = tg.compania
         AND x.parametro = 'autoliq' AND x.secuencia = 23) IS NOT NULL
AND EXISTS
(SELECT 1 FROM agrupaciones_trab a
 INNER JOIN rel_agr_companias rac ON a.agrupacion = rac.agrupacion
 WHERE a.agrupacion = (SELECT x.dato FROM vw_fdt_parametros x
                       WHERE x.pais = 'COL' AND x.compania = tg.compania
                         AND x.parametro = 'autoliq' AND x.secuencia = 23)
   AND rac.compania = tg.compania)

UNION

/* Compañías Sin Sucursales */
SELECT tg.compania, tg.trabajador, '', 'Cia. sin sucursales'
FROM trabajadores_grales tg
WHERE (SELECT x.dato FROM vw_fdt_parametros x
       WHERE x.pais = 'COL' AND x.compania = tg.compania
         AND x.parametro = 'autoliq' AND x.secuencia = 23) IS NULL
OR
NOT EXISTS
(SELECT 1 FROM agrupaciones_trab a
 WHERE agrupacion = (SELECT x.dato FROM vw_fdt_parametros x
                           WHERE x.pais = 'COL' AND x.compania = tg.compania
                             AND x.parametro = 'autoliq' AND x.secuencia = 23))


GO
GRANT ALL ON dbo.vw_fco_div_trabajador TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_alta_sucursales') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_alta_sucursales
GO
CREATE PROCEDURE dbo.sp_fco_alta_sucursales
(
    @pch_compania char(4),
    @pch_sucursal char(10),
    @pvc_descripcion varchar(40),
    @pvc_direccion varchar(40),
    @pch_cod_dpto char(2),
    @pch_cod_ciudad char(3),
    @pvc_telefono varchar(10),
    @pvc_fax varchar(10),
    @pvc_nombre_retenedor varchar(60),
    @pvc_cedula_retenedor varchar(60),
    @pvc_agencias varchar(300),
    @pch_codigo_iss char(3)
)
AS
BEGIN
    IF EXISTS(
		SELECT 1 FROM fco_sucursales
        WHERE compania = @pch_compania 
          AND sucursal = @pch_sucursal)
    BEGIN
		RAISERROR ('El registro a insertar en [fco_sucursales] ya existe', 16, 1)
		RETURN
	END

    DECLARE @vch_agr char(10)

    SELECT @vch_agr = ISNULL(dato, 'SUC') 
    FROM vw_fdt_parametros 
    WHERE pais = 'COL' 
      AND compania = @pch_compania 
      AND parametro = 'autoliq' 
      AND secuencia = 23

    IF EXISTS (SELECT 1 FROM datos_agr_trab
               WHERE agrupacion = @vch_agr
                 AND dato = @pch_sucursal)
        EXEC sp_cambio_datos_agr_trab @vch_agr, @pch_sucursal, @pvc_descripcion
    ELSE
        EXEC sp_alta_datos_agr_trab @vch_agr, @pch_sucursal, @pvc_descripcion

	INSERT INTO fco_sucursales
	(compania, sucursal, descripcion, direccion, cod_dpto, 
     cod_ciudad, telefono, fax, nombre_retenedor, cedula_retenedor, 
     agencias, codigo_iss, clase_nomina)
	VALUES
	(@pch_compania, @pch_sucursal, @pvc_descripcion, @pvc_direccion, @pch_cod_dpto, 
     @pch_cod_ciudad, @pvc_telefono, @pvc_fax, @pvc_nombre_retenedor, @pvc_cedula_retenedor, 
     @pvc_agencias, @pch_codigo_iss, '--')
END
GO
GRANT EXECUTE ON dbo.sp_fco_alta_sucursales TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_baja_sucursales') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_baja_sucursales
GO
CREATE PROCEDURE dbo.sp_fco_baja_sucursales
(
    @pch_compania char(4),
    @pch_sucursal char(10)
)
AS
BEGIN
    DELETE FROM fco_sucursales
    WHERE compania = @pch_compania AND sucursal = @pch_sucursal
END
GO
GRANT EXECUTE ON sp_fco_baja_sucursales TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_cambio_sucursales') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_cambio_sucursales
GO
CREATE PROCEDURE dbo.sp_fco_cambio_sucursales  
(  
    @pch_compania char(4),  
    @pch_sucursal char(10),  
    @pvc_descripcion varchar(40),  
    @pvc_direccion varchar(40),  
    @pch_cod_dpto char(2),  
    @pch_cod_ciudad char(3),  
    @pvc_telefono varchar(10),  
    @pvc_fax varchar(10),  
    @pvc_nombre_retenedor varchar(60),  
    @pvc_cedula_retenedor varchar(60),  
    @pvc_agencias varchar(300),  
    @pch_codigo_iss char(3),
    @pbi_autoliquida bit
)  
AS  
BEGIN  
    IF NOT EXISTS(  
        SELECT 1 FROM fco_sucursales  
        WHERE compania = @pch_compania   
          AND sucursal = @pch_sucursal)  
        EXEC sp_fco_alta_sucursales  
            @pch_compania, @pch_sucursal,   @pvc_descripcion, @pvc_direccion, @pch_cod_dpto, 
            @pch_cod_ciudad, @pvc_telefono, @pvc_fax, @pvc_nombre_retenedor, @pvc_cedula_retenedor, 
            @pvc_agencias, @pch_codigo_iss
    ELSE
    BEGIN
        DECLARE @vch_agr char(10)
    
        SELECT @vch_agr = ISNULL(dato, 'SUC') 
        FROM vw_fdt_parametros 
        WHERE pais = 'COL' 
          AND compania = @pch_compania 
          AND parametro = 'autoliq' 
          AND secuencia = 23
    
        IF EXISTS (SELECT 1 FROM datos_agr_trab
                   WHERE agrupacion = @vch_agr
                     AND dato = @pch_sucursal)
            EXEC sp_cambio_datos_agr_trab @vch_agr, @pch_sucursal, @pvc_descripcion
        ELSE
            EXEC sp_alta_datos_agr_trab @vch_agr, @pch_sucursal, @pvc_descripcion
    
        UPDATE fco_sucursales  
        SET descripcion = @pvc_descripcion,  
            direccion = @pvc_direccion,  
            cod_dpto = @pch_cod_dpto,  
            cod_ciudad = @pch_cod_ciudad,  
            telefono = @pvc_telefono,  
            fax = @pvc_fax,  
            nombre_retenedor = @pvc_nombre_retenedor,  
            cedula_retenedor = @pvc_cedula_retenedor,  
            agencias = @pvc_agencias,  
            codigo_iss = @pch_codigo_iss,
            autoliquida = @pbi_autoliquida
        WHERE compania = @pch_compania   
          AND sucursal = @pch_sucursal  
    END    
END  
GO
GRANT EXECUTE ON dbo.sp_fco_cambio_sucursales TO PUBLIC
GO

PRINT 'Sucursales... OK'
GO
IF OBJECT_ID('dbo.fco_centros_trabajo') IS NOT NULL
    DROP TABLE dbo.fco_centros_trabajo
GO
CREATE TABLE dbo.fco_centros_trabajo
(
    compania char(4) NOT NULL,
    centro_trabajo char(10) NOT NULL,
    descripcion varchar(60) NOT NULL,
    codigo_reporte decimal(9) NOT NULL,
    tarifa decimal(6,5) NOT NULL,
    CONSTRAINT pk_fco_centros_trabajo PRIMARY KEY NONCLUSTERED (compania, centro_trabajo)
)
GO
GRANT ALL ON dbo.fco_centros_trabajo TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_fco_centros_trabajo') IS NOT NULL
    DROP VIEW dbo.vw_fco_centros_trabajo
GO
CREATE VIEW dbo.vw_fco_centros_trabajo
AS
SELECT rac.compania, centro_trabajo = dato, descripcion = ISNULL(ct.descripcion, dat.descripcion), 
       codigo_reporte = ISNULL(Rtrim(ct.codigo_reporte), dato), ct.tarifa
FROM rel_agr_companias rac
INNER JOIN datos_agr_trab dat ON rac.agrupacion = dat.agrupacion
LEFT JOIN fco_centros_trabajo ct ON rac.compania = ct.compania AND ct.centro_trabajo = dat.dato
WHERE rac.agrupacion = ISNULL(
(Select dato FROM vw_fdt_parametros x
 Where x.pais = 'COL' and x.compania = rac.compania 
   and x.parametro = 'autoliq' and secuencia = 24), 'CENTROS_TR')
GO
GRANT SELECT ON dbo.vw_fco_centros_trabajo TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_upd_centros_trabajo') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_upd_centros_trabajo
GO
CREATE PROCEDURE dbo.sp_fco_upd_centros_trabajo
(
    @pch_compania char(4),
    @pch_centro_trabajo char(10),
    @pvc_descripcion varchar(60),
    @pdc_cod_reporte decimal(9),
    @pdc_tarifa decimal(6,5)
)
AS
BEGIN
    IF EXISTS(SELECT 1 FROM fco_centros_trabajo WHERE compania = @pch_compania AND centro_trabajo = @pch_centro_trabajo)
        UPDATE fco_centros_trabajo
        SET descripcion = @pvc_descripcion,
            codigo_reporte = @pdc_cod_reporte,
            tarifa = @pdc_tarifa
        WHERE compania = @pch_compania
          AND centro_trabajo = @pch_centro_trabajo
    ELSE
        INSERT INTO fco_centros_trabajo
        (compania, centro_trabajo, descripcion, codigo_reporte, tarifa)
        SELECT @pch_compania, @pch_centro_trabajo, @pvc_descripcion, @pdc_cod_reporte, @pdc_tarifa
END
GO
GRANT EXECUTE ON dbo.sp_fco_upd_centros_trabajo TO PUBLIC
GO
if object_id('dbo.sp_var_riesgos') is not null
drop procedure dbo.sp_var_riesgos
go
CREATE PROCEDURE dbo.sp_var_riesgos(
	@i_calind		BIT,
	@i_compania 		CHAR(4),
	@i_clase_nomina		CHAR(2),
	@i_id_calendario	SMALLINT,
	@i_tipo_nomina		CHAR(2),
	@i_ano			SMALLINT,
	@i_periodo		TINYINT,
	@i_fecha_final		SMALLDATETIME,
	@i_trabajador		CHAR(10),
	@i_concepto		SMALLINT,
	@i_referencia		CHAR(10),
	@i_sequencia		SMALLINT,
	@i_sub_var1		VARCHAR(10),
	@i_sub_var2		VARCHAR(10),
	@i_resp_valor		DECIMAL(19,6)	OUTPUT,
	@i_resp_carac		VARCHAR(40)	OUTPUT,
	@i_sesion		SMALLINT)
AS
BEGIN


/* Declaración de variables locales */

/***********************************************************/
/* C U E R P O   P R I N C I P A L   D E L   P R O C E S O */
/***********************************************************/

-- Recupera % de Riesgo

   set @i_resp_valor = dbo.fn_fco_tarifa_ARP(@i_compania,@i_trabajador )

RETURN
END
GO
grant execute on dbo.sp_var_riesgos to public
go

DELETE FROM defn_variables_ns WHERE variable = 'riesgos'
GO
INSERT INTO defn_variables_ns 
(compania, variable, descripcion_var, titulo_superior, titulo_inferior, modulo, clasificacion, corporativa)
VALUES('0','riesgos','Porcentaje de ARP',NULL,NULL,'NS',4,0)
GO 
ALTER PROCEDURE sp_companias_defn_var  
  @variable char(10)   
AS  
BEGIN  
  DECLARE @compania        CHAR(04),  
          @descripcion_var VARCHAR(30),  
          @titulo_superior VARCHAR(20),  
          @titulo_inferior VARCHAR(20),  
          @modulo          CHAR(02),  
          @clasificacion   TINYINT,  
          @corporativa     TINYINT  
  
  IF NOT EXISTS(SELECT 1    
                  FROM defn_variables_ns 
                 WHERE compania = '0' AND  
                       variable = @variable)  
      BEGIN  
         RAISERROR 20001 'La variable que está tratando de inserar, no existe definida en la tabla  
                  [defn_variables_ns] para la compania 0.Verifique por favor.'  
         RETURN  
      END  
  
  
  SELECT @descripcion_var = descripcion_var,  
         @titulo_superior = titulo_superior,  
         @titulo_inferior = titulo_inferior,  
         @modulo          = modulo,  
         @clasificacion   = clasificacion,  
         @corporativa     = corporativa  
    FROM defn_variables_ns
   WHERE compania = '0' AND  
         variable = @variable  
  
     
  DECLARE cr_companias CURSOR FOR  
       SELECT compania FROM  
          companias  
  
   OPEN cr_companias  
   FETCH cr_companias INTO @compania  
  
   WHILE @@FETCH_STATUS = 0  
   BEGIN  
  
     IF NOT EXISTS(SELECT * FROM defn_variables_ns
                WHERE compania = @compania AND  
                      variable = @variable)  
       BEGIN  
         INSERT INTO defn_variables_ns
          VALUES(@compania,  
                 @variable,  
                 @descripcion_var,  
                 @titulo_superior,  
                 @titulo_inferior,  
                 @modulo,  
                 @clasificacion,  
                 @corporativa)  
       END  
  
     FETCH cr_companias INTO @compania  
   END  
  
   CLOSE cr_companias  
   DEALLOCATE cr_companias  
  
END  
GO  
EXECUTE sp_companias_defn_var 'riesgos'
GO
if object_id('var_clasificacion') is not null
   insert into var_Clasificacion values ('riesgos', 'riesgos', 0,1,0)
GO

PRINT 'Centros de Trabajo... OK'
GO

IF OBJECT_ID('dbo.fco_cias_datos_adi') IS NOT NULL
    DROP TABLE dbo.fco_cias_datos_adi
GO
CREATE TABLE dbo.fco_cias_datos_adi
( 
    compania char(4) NOT NULL,
    tipo_id char(3) NOT NULL, 
    cod_dpto  char(2) NOT NULL,
    cod_ciudad char(3) NOT NULL,
    fax varchar(20) NULL,
    nit_ARP varchar(11) NULL,
    nombre_ARP varchar(30) NULL,
    clase_aportante char(1) NULL,
    forma_presentacion char(1) NULL,
    sucursal_pagadora char(10) NULL,
    nro_patronal char(11) NULL,
    nombre_retenedor varchar(60) NULL,
    cedula_retenedor varchar(60) NULL,
    agencias varchar(300) NULL,
    arp_iss tinyint NULL,
    dir_ARP varchar(50) NULL,
    tel_ARP varchar(20) NULL,
    nombre_SENA varchar(30) NULL,
    nit_SENA varchar(11) NULL,
    dir_SENA varchar(50) NULL,
    tel_SENA varchar(20) NULL,
    nombre_ICBF varchar(30) NULL,
    nit_ICBF varchar(11) NULL,
    dir_ICBF varchar(50) NULL,
    tel_ICBF varchar(20) NULL,
    cod_admon varchar(40) NULL, 
    iss_redondea bit NULL,
    cod_ARP char(6) NULL,
    Constraint PK_cias_datos_adi PRIMARY KEY (compania),  
    Constraint ck_cda_tipid CHECK (tipo_id IN ('NIT','CC','CE')),
    Constraint ck_cda_fpres CHECK (forma_presentacion IN ('C','U','S')),
    Constraint ck_cda_clase CHECK (clase_aportante IN ('P','G'))
)
GO
GRANT ALL ON fco_cias_datos_adi TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_cias_datos_adi') IS NOT NULL
    DROP VIEW dbo.vw_fco_cias_datos_adi
GO
CREATE VIEW dbo.vw_fco_cias_datos_adi
AS
SELECT 
    c.compania, a.tipo_id, a.fax, a.nit_ARP, a.nombre_ARP, a.clase_aportante, 
    a.sucursal_pagadora, a.nro_patronal, a.forma_presentacion, a.cod_ciudad, a.cod_dpto, 
    c.registro_fiscal, a.nombre_retenedor, a.cedula_retenedor, a.agencias, a.arp_iss, 
    a.dir_ARP, a.tel_ARP, a.nombre_SENA, a.nit_SENA, a.dir_SENA, a.tel_SENA, a.nombre_ICBF, 
    a.nit_ICBF, a.dir_ICBF, a.tel_ICBF, a.cod_admon, a.iss_redondea, a.cod_ARP
FROM companias c
LEFT JOIN fco_cias_datos_adi a ON a.compania = c.compania
GO
GRANT SELECT ON dbo.vw_fco_cias_datos_adi TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_cambio_cias_datos_adi') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_cambio_cias_datos_adi
GO
CREATE PROCEDURE dbo.sp_fco_cambio_cias_datos_adi
(
    @pch_compania char(4),
    @pch_tipo_id char(3),
    @pch_dpto char(2),
    @pch_ciudad char(3),  
    @pvc_fax varchar(20),  
    @pvc_nit_ARP varchar(11),  
    @pvc_nombre_ARP varchar(30),  
    @pch_clase_aportante char(1),  
    @pch_forma_presentacion char(1),  
    @pch_sucursal_pagadora char(10),  
    @pch_nro_patronal char(11),  
    @pvc_nombre_retenedor varchar(60),  
    @pvc_cedula_retenedor varchar(60),  
    @pvc_agencias varchar(300),  
    @pti_arp_iss  tinyint,
    --Agregado JAS, Reporte Dian Grasco
    @pvc_dir_ARP varchar(50),
    @pvc_tel_ARP varchar(20),
    @pvc_nit_SENA varchar(11),
    @pvc_nombre_SENA varchar(30),
    @pvc_dir_SENA varchar(50),
    @pvc_tel_SENA varchar(20),
    @pvc_nit_ICBF varchar(11),
    @pvc_nombre_ICBF varchar(30),
    @pvc_dir_ICBF varchar(50),
    @pvc_tel_ICBF varchar(20),
    @pvc_cod_admon varchar(40),
    @pbi_iss_redondea bit,
    @pch_cod_ARP char(6)
)
AS
BEGIN
    IF EXISTS(SELECT 1 FROM fco_cias_datos_adi WHERE compania = @pch_compania)
        UPDATE  
          fco_cias_datos_adi
        SET  
          tipo_id = @pch_tipo_id,  
          cod_dpto = @pch_dpto,  
          cod_ciudad = @pch_ciudad,  
          fax = @pvc_fax,  
          nit_ARP = @pvc_nit_ARP,  
          nombre_ARP = @pvc_nombre_ARP,  
          clase_aportante = @pch_clase_aportante,  
          forma_presentacion = @pch_forma_presentacion,  
          sucursal_pagadora = @pch_sucursal_pagadora,  
          nro_patronal = @pch_nro_patronal,  
          nombre_retenedor = @pvc_nombre_retenedor,  
          cedula_retenedor = @pvc_cedula_retenedor,  
          agencias = @pvc_agencias,  
          arp_iss = @pti_arp_iss,
          dir_ARP = @pvc_dir_ARP,
          tel_ARP = @pvc_tel_ARP,
          nit_SENA = @pvc_nit_SENA,
          nombre_SENA = @pvc_nombre_SENA,
          dir_SENA = @pvc_dir_SENA,
          tel_SENA = @pvc_tel_SENA,
          nit_ICBF = @pvc_nit_ICBF,
          nombre_ICBF = @pvc_nombre_ICBF,
          dir_ICBF = @pvc_dir_ICBF,
          tel_ICBF = @pvc_tel_ICBF,
          cod_admon = @pvc_cod_admon,
          iss_redondea = @pbi_iss_redondea,
          cod_ARP = @pch_cod_ARP
        WHERE  
          compania = @pch_compania
   ELSE
        INSERT INTO fco_cias_datos_adi
        (compania, tipo_id, cod_dpto, cod_ciudad, fax, nit_ARP, nombre_ARP, 
         clase_aportante, forma_presentacion, sucursal_pagadora, nro_patronal, 
         nombre_retenedor, cedula_retenedor, agencias, arp_iss, dir_ARP, 
         tel_ARP, nombre_SENA, nit_SENA, dir_SENA, tel_SENA, 
         nombre_ICBF, nit_ICBF, dir_ICBF, tel_ICBF, cod_admon, iss_redondea, cod_ARP)
        SELECT
        @pch_compania, @pch_tipo_id, @pch_dpto, @pch_ciudad, @pvc_fax,  @pvc_nit_ARP, @pvc_nombre_ARP, 
        @pch_clase_aportante, @pch_forma_presentacion, @pch_sucursal_pagadora, @pch_nro_patronal, 
        @pvc_nombre_retenedor, @pvc_cedula_retenedor, @pvc_agencias, @pti_arp_iss, @pvc_dir_ARP, 
        @pvc_tel_ARP, @pvc_nombre_SENA, @pvc_nit_SENA, @pvc_dir_SENA, @pvc_tel_SENA, 
        @pvc_nombre_ICBF, @pvc_nit_ICBF, @pvc_dir_ICBF, @pvc_tel_ICBF, @pvc_cod_admon, 
        @pbi_iss_redondea, @pch_cod_ARP

END
GO
GRANT EXECUTE ON sp_fco_cambio_cias_datos_adi TO PUBLIC
GO
IF (SELECT COUNT(*) FROM fco_cias_datos_adi) = 0
    INSERT INTO fco_cias_datos_adi
    (compania, tipo_id, cod_dpto, cod_ciudad, fax, nit_ARP, nombre_ARP, clase_aportante, forma_presentacion, 
     sucursal_pagadora, nro_patronal, nombre_retenedor, cedula_retenedor, agencias, arp_iss, dir_ARP, tel_ARP, 
     nombre_SENA, nit_SENA, dir_SENA, tel_SENA, nombre_ICBF, nit_ICBF, dir_ICBF, tel_ICBF, cod_admon)
    SELECT 
     compania, tipo_id, cod_dpto, cod_ciudad, fax, nit_ARP, nombre_ARP, clase_aportante, forma_presentacion, 
     sucursal_pagadora, nro_patronal, nombre_retenedor, cedula_retenedor, agencias, arp_iss, dir_ARP, tel_ARP, 
     nombre_SENA, nit_SENA, dir_SENA, tel_SENA, nombre_ICBF, nit_ICBF, dir_ICBF, tel_ICBF, NULL
    FROM companias_datos_adi 
GO

PRINT 'Datos Adicionales por Compañia... OK'
GO

IF OBJECT_ID('dbo.vw_fco_companias') IS NOT NULL
    DROP VIEW dbo.vw_fco_companias
GO
CREATE VIEW dbo.vw_fco_companias  
AS  
SELECT  
 C.compania,  
 registro_fiscal,  
 C.nombre_cia,  
 ISNULL(C.domicilio,' ') domicilio,   
 ISNULL(C.telefono,' ') telefono,   
 ISNULL(A.cod_dpto,'11') cod_dpto,   
 ISNULL(A.cod_ciudad,'001') cod_ciudad,   
 ISNULL(A.fax,' ') fax,   
 ISNULL(A.nit_ARP,'000000000-0') nit_ARP,   
 ISNULL(A.nombre_ARP,' ') nombre_ARP,   
 ISNULL(A.clase_aportante,'G') clase_aportante,   
 ISNULL(A.forma_presentacion,'U') forma_presentacion,   
 ISNULL(A.nro_patronal,' ') nro_patronal,  
 ISNULL(A.nombre_retenedor, ' ') pagador_nombre,  
 ISNULL(A.cedula_retenedor, ' ') pagador_id,  
 ISNULL(A.agencias, ' ') agencias,  
 ISNULL(A.cod_admon, ' ') cod_admon,
 isnull(d.nombre, ' ') nom_dpto,
 isnull(m.nombre, ' ') nom_ciudad
FROM  
 companias C
LEFT JOIN fco_cias_datos_adi A ON C.compania = A.compania  
LEFT JOIN fco_departamentos d ON d.codigo = a.cod_dpto
LEFT JOIN fco_ciudades m ON m.cod_dpto = d.codigo and m.codigo = a.cod_ciudad
GO
GRANT ALL ON vw_fco_companias TO PUBLIC
GO

IF OBJECT_ID('dbo.fco_proc_reportes_ala') IS NOT NULL
    DROP TABLE dbo.fco_proc_reportes_ala
GO
CREATE TABLE dbo.fco_proc_reportes_ala
(
    compania                 char(4)         NOT NULL, 
    codigo                   char(4)   	NOT NULL,
    anio                     smallint  	NOT NULL,
    mes                      smallint	NOT NULL,
    EPS_FPO                  char(10)        NULL,
    sucursal                 char(10)        NULL,
    procesar                 char(1)         NULL,
    secuencia	        smallint	NULL
)
GO
GRANT ALL ON fco_proc_reportes_ala TO PUBLIC
GO

IF OBJECT_ID('dbo.fco_reportes_ala') IS NOT NULL
DROP TABLE dbo.fco_reportes_ala
GO
CREATE TABLE dbo.fco_reportes_ala
(	
  codigo          char(10)   	NOT NULL,
  nombre          varchar(100)  	NOT NULL,
  maneja_EPS      char(1)        NULL,
  maneja_FPO      char(1)        NULL,
  ISS_Integrado   char(1)        NULL,
  maneja_SUC      char(1)        NULL,
  maneja_ARP      char(1)        NULL,
  maneja_ISS      char(1)        NULL,
  maneja_rep      char(1)        NULL,
  maneja_mm       char(1)        NULL,  
  ruta_rep        varchar(255) 	NULL,
  ruta_mm         varchar(255)  NULL,
  orden           char(1)        NULL,  
  Constraint PK_fco_reportes_ala PRIMARY KEY (codigo)
)
GO
GRANT ALL ON fco_reportes_ala TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_proc_reportes_ala') IS NOT NULL
    DROP VIEW dbo.vw_fco_proc_reportes_ala
GO
CREATE VIEW dbo.vw_fco_proc_reportes_ala
AS
SELECT p.compania, p.procesar, p.codigo, r.nombre, p.anio, p.mes,  
       p.EPS_FPO, p.sucursal, p.secuencia, v.descripcion  
FROM  fco_proc_reportes_ala p, fco_reportes_ala r, vw_fco_administradoras v  
WHERE p.codigo = r.codigo and p.EPS_FPO = v.codigo And r.maneja_EPS = '1' And v.tipo='EPS' AND p.compania = v.compania
UNION  
SELECT p.compania, p.procesar, p.codigo, r.nombre, p.anio, p.mes,  
       p.EPS_FPO, p.sucursal, p.secuencia, v.descripcion  
FROM  fco_proc_reportes_ala p, fco_reportes_ala r, vw_fco_administradoras v  
WHERE p.codigo = r.codigo and p.EPS_FPO = v.codigo And r.maneja_FPO = '1' And v.tipo='AFP' AND p.compania = v.compania
UNION  
SELECT p.compania, p.procesar, p.codigo, r.nombre, p.anio, p.mes,  
       p.EPS_FPO, p.sucursal, p.secuencia, 'INSTITUTO DE SEGUROS SOCIALES'
FROM  fco_proc_reportes_ala p, fco_reportes_ala r
WHERE p.codigo = r.codigo and r.maneja_ISS = '1'
UNION  
SELECT p.compania, p.procesar, p.codigo, r.nombre, p.anio, p.mes,  
       p.EPS_FPO, p.sucursal, p.secuencia, v.nombre_ARP  
FROM  fco_proc_reportes_ala p, fco_reportes_ala r, vw_fco_companias v  
WHERE p.codigo = r.codigo and   
      p.compania = v.compania And r.maneja_ARP = '1'  
GO
GRANT SELECT ON vw_fco_proc_reportes_ala TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_alta_proc_reportes_ala') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_alta_proc_reportes_ala
GO
CREATE PROCEDURE dbo.sp_fco_alta_proc_reportes_ala
(
    @pch_compania char(4),
    @pch_codigo char(10),
    @psi_anio smallint,
    @pti_mes tinyint,
    @pch_eps_fpo char(10),
    @pch_sucursal char(10)
)
AS
BEGIN
    DECLARE
    	@vch_maneja_eps char(1),
    	@vch_maneja_fpo char(1),
    	@vch_maneja_suc char(1),
    	@vch_maneja_iss char(1),
    	@vch_maneja_arp char(1),
    	@vvc_EPS varchar(10),
    	@vvc_FPO varchar(10),
    	@vvc_SUC varchar(10),
    	@vsi_secuencia smallint

	/* Obtiene el parametro para agrupacion de la EPS */
    SELECT @vvc_EPS = ISNULL(dato, 'EPS') 
    FROM vw_fdt_parametros 
    WHERE pais = 'COL' 
      AND compania = @pch_compania 
      AND parametro = 'autoliq' 
      AND secuencia = 21

	/* Obtiene el parametro para agrupacion de la FPO */
    SELECT @vvc_FPO = ISNULL(dato, 'FPO') 
    FROM vw_fdt_parametros 
    WHERE pais = 'COL' 
      AND compania = @pch_compania 
      AND parametro = 'autoliq' 
      AND secuencia = 22

	/* Obtiene el parametro para agrupacion de la SUC */
    SELECT @vvc_SUC = ISNULL(dato, 'SUC') 
    FROM vw_fdt_parametros 
    WHERE pais = 'COL' 
      AND compania = @pch_compania 
      AND parametro = 'autoliq' 
      AND secuencia = 23

	/* Halla la secuencia siguiente -para mantener orden en el spread-*/
	SELECT @vsi_secuencia = ISNULL(Max(secuencia), 0) FROM fco_proc_reportes_ala
    SET @vsi_secuencia = ISNULL(Max(@vsi_secuencia),0) + 1


    /* Hallar que maneja el reporte */
    SELECT 
        @vch_maneja_eps = ISNULL(maneja_eps,'0'), 
        @vch_maneja_fpo = ISNULL(maneja_fpo,'0'), 
        @vch_maneja_suc = ISNULL(maneja_suc,'0'), 
        @vch_maneja_iss = ISNULL(maneja_iss,'0'), 
        @vch_maneja_arp = ISNULL(maneja_arp,'0')
    FROM fco_reportes_ala
    WHERE codigo = @pch_codigo

	/* AQUI COMIENZA LA ACCION */
	/* CASOS DE REPORTE */
    /* CASO 0 - ES UN REPORTE DE ARP */
    IF @vch_maneja_arp = '1'
    BEGIN
        IF @vch_maneja_suc = '1' /* CASO 0 CON SUCURSALES */
        BEGIN
            IF ISNULL(RTrim(@pch_sucursal) + '0', '0') <> '0'
            BEGIN /* LLEGA LA SUCURSAL */
                DELETE fco_proc_reportes_ala
                WHERE compania = @pch_compania AND codigo = @pch_codigo
                  AND anio = @psi_anio AND mes = @pti_mes
                  AND eps_fpo = 'ARP' AND sucursal = @pch_sucursal
                
                INSERT INTO fco_proc_reportes_ala
                (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
                VALUES 
                (@pch_compania, @pch_codigo, @psi_anio, @pti_mes, 'ARP', @pch_sucursal, '0', @vsi_secuencia)
            END
            ELSE /* SUCURSAL VACIA, GENERAR PARA TODAS */
            BEGIN
                DELETE fco_proc_reportes_ala
                WHERE compania = @pch_compania AND codigo = @pch_codigo
                  AND anio = @psi_anio AND mes = @pti_mes
                  AND eps_fpo = 'ARP'
                
                INSERT INTO fco_proc_reportes_ala 
                (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
                SELECT @pch_compania, @pch_codigo, @psi_anio, @pti_mes, 'ARP', sucursal, '0', @vsi_secuencia
                FROM vw_fco_sucursales
                WHERE compania = @pch_compania AND autoliquida = 1
            END
        END
        ELSE
        BEGIN /* CASO 0 SIN SUCURSALES */
            DELETE fco_proc_reportes_ala
            WHERE compania = @pch_compania AND codigo = @pch_codigo
              AND anio = @psi_anio AND mes = @pti_mes
              AND eps_fpo = 'ARP'
            
            INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, procesar, secuencia)
            VALUES (@pch_compania, @pch_codigo, @psi_anio, @pti_mes, 'ARP', '0', @vsi_secuencia)
        END
    END
    
    /* CASO 1 - ES UN REPORTE PARA EL ISS */
    IF @vch_maneja_iss = '1'
    BEGIN
        IF @vch_maneja_suc = '1' /* CASO 1 CON SUCURSALES */
        BEGIN
            IF ISNULL(RTrim(@pch_sucursal) + '0', '0') <> '0' /* LLEGA LA SUCURSAL */
            BEGIN
                DELETE fco_proc_reportes_ala
                WHERE compania = @pch_compania AND codigo = @pch_codigo
                  AND anio = @psi_anio AND mes = @pti_mes
                  AND eps_fpo = 'ISS' AND sucursal = @pch_sucursal
                
                INSERT INTO fco_proc_reportes_ala
                (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
                VALUES (@pch_compania, @pch_codigo, @psi_anio, @pti_mes, 'ISS', @pch_sucursal, '0', @vsi_secuencia)
            END
            ELSE /* SUCURSAL VACIA, GENERAR PARA TODAS */
            BEGIN
                DELETE fco_proc_reportes_ala
                WHERE compania = @pch_compania AND codigo = @pch_codigo
                  AND anio = @psi_anio AND mes = @pti_mes
                  AND eps_fpo = 'ISS'
                
                INSERT INTO fco_proc_reportes_ala
                (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
                SELECT @pch_compania, @pch_codigo, @psi_anio, @pti_mes, @pch_eps_fpo, sucursal, '0', @vsi_secuencia
                FROM vw_fco_sucursales
                WHERE compania = @pch_compania AND autoliquida = 1
            END
        END
        ELSE
        BEGIN /* CASO 1 SIN SUCURSALES */
            DELETE fco_proc_reportes_ala
            WHERE compania = @pch_compania AND codigo = @pch_codigo
              AND anio = @psi_anio AND mes = @pti_mes
              AND eps_fpo = 'ISS'
            
            INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, procesar, secuencia)
            VALUES (@pch_compania, @pch_codigo, @psi_anio, @pti_mes, @pch_eps_fpo, '0', @vsi_secuencia)
        END
    END
    
    /* CASO A - REPORTE DE EPS (o FPO) POR SUCURSAL, LLEGA LA EPS (o FPO) Y LA SUCURSAL */
    IF (@vch_maneja_eps = '1' AND @vch_maneja_suc = '1' AND ISNULL(LEN(RTrim(@pch_eps_fpo)), 0) > 0 AND ISNULL(LEN(RTrim(@pch_sucursal)), 0) > 0) 
     OR(@vch_maneja_fpo = '1' AND @vch_maneja_suc = '1' AND ISNULL(LEN(RTrim(@pch_eps_fpo)), 0) > 0 AND ISNULL(LEN(RTrim(@pch_sucursal)), 0) > 0)
    BEGIN
        DELETE fco_proc_reportes_ala
        WHERE compania = @pch_compania AND codigo = @pch_codigo
          AND anio = @psi_anio AND mes = @pti_mes
          AND eps_fpo = @pch_eps_fpo AND sucursal = @pch_sucursal
    
        INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
        VALUES (@pch_compania, @pch_codigo, @psi_anio, @pti_mes, @pch_eps_fpo, @pch_sucursal, '0', @vsi_secuencia)
    END
    /**********/
    
    /* CASO B - REPORTE DE EPS POR SUCURSAL, NO LLEGA LA EPS Y LA SUCURSAL SI */
    IF @vch_maneja_eps = '1' AND @vch_maneja_suc = '1' AND ISNULL(LEN(RTrim(@pch_eps_fpo)),0) = 0 AND ISNULL(LEN(RTrim(@pch_sucursal)),0) > 0
    BEGIN
        DELETE fco_proc_reportes_ala
        WHERE compania = @pch_compania AND codigo = @pch_codigo
          AND anio = @psi_anio AND mes = @pti_mes
          AND sucursal = @pch_sucursal
    
        INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
        SELECT @pch_compania, @pch_codigo, @psi_anio, @pti_mes, codigo, @pch_sucursal, '0', @vsi_secuencia
        FROM fco_administradoras
        WHERE tipo = 'EPS'
    END
    /**********/
    
    /* CASO C - REPORTE DE EPS (o FPO) POR SUCURSAL, LLEGA LA EPS (o FPO) Y LA SUCURSAL NO */
    IF (@vch_maneja_eps = '1' AND @vch_maneja_suc = '1' AND ISNULL(LEN(RTrim(@pch_eps_fpo)), 0) > 0 AND ISNULL(LEN(RTrim(@pch_sucursal)), 0) = 0) 
     OR(@vch_maneja_fpo = '1' AND @vch_maneja_suc = '1' AND ISNULL(LEN(RTrim(@pch_eps_fpo)), 0) > 0 AND ISNULL(LEN(RTrim(@pch_sucursal)), 0) = 0)
    BEGIN 
        DELETE fco_proc_reportes_ala
        WHERE compania = @pch_compania AND codigo = @pch_codigo
          AND anio = @psi_anio AND mes = @pti_mes
          AND eps_fpo = @pch_eps_fpo
    
        INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
        SELECT @pch_compania, @pch_codigo, @psi_anio, @pti_mes, @pch_eps_fpo, sucursal, '0', @vsi_secuencia
        FROM vw_fco_sucursales WHERE compania = @pch_compania AND autoliquida = 1
    END
    /**********/
    
    /* CASO D - REPORTE DE EPS POR SUCURSAL, NO LLEGAN NI LA EPS NI LA SUCURSAL */
    IF @vch_maneja_eps = '1' AND @vch_maneja_suc = '1' AND  ISNULL(LEN(RTrim(@pch_eps_fpo)), 0) = 0 AND ISNULL(LEN(RTrim(@pch_sucursal)), 0) = 0
    BEGIN
        DELETE fco_proc_reportes_ala
        WHERE compania = @pch_compania AND codigo = @pch_codigo
          AND anio = @psi_anio AND mes = @pti_mes
        
        INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
        SELECT @pch_compania, @pch_codigo, @psi_anio, @pti_mes, b.codigo, a.sucursal, '0', @vsi_secuencia
        FROM vw_fco_sucursales a, fco_administradoras b
        WHERE a.compania = @pch_compania AND a.autoliquida = 1 AND b.tipo = 'EPS'
    END
    /**********/
    
    /* CASO E - REPORTE DE EPS (o FPO) CONSOLIDADO, LLEGA LA EPS (o FPO) */
    IF (@vch_maneja_eps = '1' AND @vch_maneja_suc = '0' AND ISNULL(LEN(RTrim(@pch_eps_fpo)),0) > 0) 
     OR(@vch_maneja_fpo = '1' AND @vch_maneja_suc = '0' AND ISNULL(LEN(RTrim(@pch_eps_fpo)),0) > 0)
    BEGIN
        DELETE fco_proc_reportes_ala
        WHERE compania = @pch_compania AND codigo = @pch_codigo
          AND anio = @psi_anio AND mes = @pti_mes
          AND eps_fpo = @pch_eps_fpo
    
        INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
        VALUES (@pch_compania, @pch_codigo, @psi_anio, @pti_mes, @pch_eps_fpo, '', '0', @vsi_secuencia)
    END
    /**********/
    
    /* CASO F - REPORTE DE EPS CONSOLIDADO Y NO LLEGA LA EPS */
    IF @vch_maneja_eps = '1' AND @vch_maneja_suc = '0' AND ISNULL(RTrim(@pch_eps_fpo) + '', '') = ''
    BEGIN
        DELETE fco_proc_reportes_ala
        WHERE compania = @pch_compania AND codigo = @pch_codigo
        AND anio = @psi_anio AND mes = @pti_mes
        
        INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
        SELECT @pch_compania, @pch_codigo, @psi_anio, @pti_mes, codigo, '', '0', @vsi_secuencia
        FROM fco_administradoras WHERE tipo = 'EPS'
    END
    /**********/
    
    /* CASO G - REPORTE DE FPO POR SUCURSAL, NO LLEGA EL FPO Y LA SUCURSAL SI */
    IF @vch_maneja_fpo = '1' AND @vch_maneja_suc = '1' AND ISNULL(RTrim(@pch_eps_fpo) + '', '') = '' AND ISNULL(RTrim(@pch_sucursal) + '', '') <> ''
    BEGIN
        DELETE fco_proc_reportes_ala
        WHERE compania = @pch_compania AND codigo = @pch_codigo
          AND anio = @psi_anio AND mes = @pti_mes
          AND sucursal = @pch_sucursal
    
        INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
        SELECT @pch_compania, @pch_codigo, @psi_anio, @pti_mes, codigo, @pch_sucursal, '0', @vsi_secuencia
        FROM fco_administradoras
        WHERE tipo = 'AFP'
    END
    /**********/
    
    /* CASO H - REPORTE DE FPO POR SUCURSAL, NO LLEGAN NI EL FPO NI LA SUCURSAL */
    IF @vch_maneja_fpo = '1' AND @vch_maneja_suc = '1' AND ISNULL(RTrim(@pch_eps_fpo) + '','') = '' AND ISNULL(RTrim(@pch_sucursal) + '', '') =''
    BEGIN
        DELETE fco_proc_reportes_ala
        WHERE compania = @pch_compania AND codigo = @pch_codigo
          AND anio = @psi_anio AND mes = @pti_mes
    
        INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
        SELECT @pch_compania,@pch_codigo,@psi_anio,@pti_mes,b.codigo, a.sucursal, '0', @vsi_secuencia
        FROM vw_fco_sucursales a, fco_administradoras b
        WHERE a.compania = @pch_compania AND a.autoliquida = 1 AND b.tipo = 'AFP'
    END
    /**********/
    
    /* CASO I - REPORTE DE FPO CONSOLIDADO Y NO LLEGA EL FPO */
    IF @vch_maneja_fpo = '1' AND @vch_maneja_suc = '0' AND ISNULL(RTrim(@pch_eps_fpo) + '', '') = ''
    BEGIN
        DELETE fco_proc_reportes_ala
        WHERE compania = @pch_compania AND codigo = @pch_codigo
          AND anio = @psi_anio AND mes = @pti_mes
    
        INSERT INTO fco_proc_reportes_ala (compania, codigo, anio, mes, EPS_FPO, sucursal, procesar, secuencia)
        SELECT @pch_compania,@pch_codigo,@psi_anio,@pti_mes,codigo,'','0', @vsi_secuencia
        FROM fco_administradoras WHERE tipo ='AFP'
    END
    /**********/
END
GO
GRANT EXECUTE ON sp_fco_alta_proc_reportes_ala TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_alta_reportes_ala') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_alta_reportes_ala
GO
CREATE PROCEDURE dbo.sp_fco_alta_reportes_ala
(
    @pch_codigo char(10),
    @pvc_nombre varchar(100),
    @pch_maneja_EPS char(1),
    @pch_maneja_FPO char(1),
    @pch_iss_integrado char(1),
    @pch_maneja_SUC char(1),
    @pch_maneja_ARP	char(1),
    @pch_maneja_ISS	char(1),
    @pch_maneja_rep char(1),       
    @pch_maneja_mm char(1),                
    @pvc_ruta varchar(255),
    @pvc_ruta_salida varchar(255),
    @pch_orden char(1)
)
AS
BEGIN
    IF EXISTS(SELECT 1 FROM fco_reportes_ala WHERE codigo = @pch_codigo)
		UPDATE fco_reportes_ala 
	  	SET Nombre = @pvc_nombre,
        	Maneja_EPS = @pch_maneja_EPS,
        	Maneja_FPO = @pch_maneja_FPO,
        	ISS_Integrado = @pch_iss_integrado,
        	Maneja_SUC = @pch_maneja_SUC,
	      	Maneja_ARP = @pch_maneja_ARP,
	      	Maneja_ISS = @pch_maneja_ISS,
            maneja_rep = @pch_maneja_rep,
	      	maneja_mm = @pch_maneja_mm,          
        	ruta_rep   = Replace(@pvc_ruta,'/','\'),
	      	ruta_mm = Replace(@pvc_ruta_salida,'/','\'),
            orden = @pch_orden
	  	WHERE
	      	Codigo = @pch_codigo
    ELSE
		INSERT INTO fco_reportes_ala 
            (codigo, nombre, maneja_EPS, maneja_FPO, ISS_Integrado, maneja_SUC, 
             maneja_ARP, maneja_ISS, maneja_rep, maneja_mm, 
             ruta_rep, ruta_mm, orden)
        SELECT 
		    @pch_codigo, @pvc_nombre, @pch_maneja_EPS, @pch_maneja_FPO, @pch_ISS_Integrado, @pch_maneja_SUC,
            @pch_maneja_ARP, @pch_maneja_ISS, @pch_maneja_rep, @pch_maneja_mm, 
            Replace(@pvc_ruta,'/','\'), Replace(@pvc_ruta_salida,'/','\'), @pch_orden
END
GO
GRANT EXECUTE ON sp_fco_alta_reportes_ala TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_baja_proc_reportes_ala') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_baja_proc_reportes_ala
GO
CREATE PROCEDURE dbo.sp_fco_baja_proc_reportes_ala
(  
    @pch_compania char(4),  
    @pch_codigo char(10),  
    @psi_anio smallint,  
    @pti_mes tinyint,  
    @pch_epf_fpo char(10),  
    @pch_sucursal char(10)  
)  
AS  
BEGIN  
    DELETE fco_proc_reportes_ala   
    WHERE   
        compania = @pch_compania AND  
        codigo = @pch_codigo AND  
        anio = @psi_anio AND  
        mes = @pti_mes AND  
        EPS_FPO = @pch_epf_fpo AND  
        ISNULL(sucursal,'') = ISNULL(@pch_sucursal, '')  
END  
GO
GRANT EXECUTE ON dbo.sp_fco_baja_proc_reportes_ala TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_upd_proc_reportes_ala') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_upd_proc_reportes_ala
GO
CREATE PROCEDURE dbo.sp_fco_upd_proc_reportes_ala
(
    @pch_procesar char(1),
    @pch_compania char(4),    
    @pch_codigo char(10),    
    @psi_anio smallint,    
    @pti_mes tinyint,    
    @pch_epf_fpo char(10),    
    @pch_sucursal char(10)
)
AS
BEGIN
    UPDATE fco_proc_reportes_ala
    SET procesar = @pch_procesar
    WHERE   
        compania = @pch_compania AND  
        codigo = @pch_codigo AND  
        anio = @psi_anio AND  
        mes = @pti_mes AND  
        EPS_FPO = @pch_epf_fpo AND  
        ISNULL(sucursal,'') = ISNULL(@pch_sucursal, '')  

END
GO
GRANT EXECUTE ON dbo.sp_fco_upd_proc_reportes_ala TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_baja_reportes_ala') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_baja_reportes_ala
GO
CREATE PROCEDURE dbo.sp_fco_baja_reportes_ala
(
    @pch_codigo char(10)
)
AS
BEGIN
    DELETE fco_proc_reportes_ala WHERE Codigo = @pch_codigo

    DELETE fco_reportes_ala WHERE Codigo = @pch_codigo
END
GO
GRANT EXECUTE ON sp_fco_baja_reportes_ala TO PUBLIC
GO
IF (SELECT COUNT(*) FROM fco_reportes_ala) = 0
INSERT INTO fco_reportes_ala 
(codigo, nombre, maneja_EPS, maneja_FPO, ISS_Integrado, maneja_SUC, maneja_ARP, 
maneja_ISS, maneja_rep, maneja_mm, ruta_rep, ruta_mm, orden)
SELECT codigo, nombre, maneja_EPS, maneja_FPO, ISS_Integrado, maneja_SUC, maneja_ARP,
maneja_ISS, CASE WHEN medio_magn = 1 THEN 0 ELSE 1 END, medio_magn, ruta, ruta_salida, 'A'
FROM reportes_ala

IF (SELECT COUNT(*) FROM fco_reportes_ala) = 0
BEGIN
    INSERT INTO fco_reportes_ala (codigo, nombre, maneja_EPS) VALUES ('REPS','Reporte Autoliquidacion Salud', '1');
    INSERT INTO fco_reportes_ala (codigo, nombre, maneja_EPS, maneja_mm) VALUES ('MEPS','Medio Magnetico Autoliquidacion Salud', '1', '1');
    
    INSERT INTO fco_reportes_ala (codigo, nombre, maneja_FPO) VALUES ('RFPO','Reporte Autoliquidacion Pensiones', '1');
    INSERT INTO fco_reportes_ala (codigo, nombre, maneja_FPO, maneja_mm) VALUES ('MFPO','Medio Magnetico Autoliquidacion Pensiones', '1', '1');
    
    INSERT INTO fco_reportes_ala (codigo, nombre, maneja_ISS) VALUES ('RISS','Reporte ISS', '1');
    INSERT INTO fco_reportes_ala (codigo, nombre, maneja_ISS, maneja_mm) VALUES ('MISS','Medio Magnetico ISS', '1', '1');
    
    INSERT INTO fco_reportes_ala (codigo, nombre, maneja_ARP) VALUES ('RARP','Reporte Autoliquidacion Riesgos Profesionales', '1');
    INSERT INTO fco_reportes_ala (codigo, nombre, maneja_ARP, maneja_mm) VALUES ('MARP','Medio Magnetico Riesgos Profesionales', '1', '1');
END
GO
PRINT 'Reportes ALA... OK'
GO
IF OBJECT_ID('dbo.fdt_bancos') IS NOT NULL
    DROP TABLE dbo.fdt_bancos
GO
CREATE TABLE dbo.fdt_bancos
(
    banco        tinyint NOT NULL,
    descripcion  varchar(100) NOT NULL,
	proc_generacion varchar(30) NULL,
    CONSTRAINT PK_fdt_bancos PRIMARY KEY NONCLUSTERED (banco)
)
GO
GRANT ALL ON fdt_bancos TO PUBLIC
GO

IF OBJECT_ID('dbo.fdt_bancos_cias') IS NOT NULL
    DROP TABLE dbo.fdt_bancos_cias
GO
CREATE TABLE dbo.fdt_bancos_cias
(
    banco    tinyint NOT NULL,
    compania char(4) NOT NULL,
    CONSTRAINT PK_fdt_rel_bancos_cias PRIMARY KEY NONCLUSTERED (banco, compania)
)
GO
GRANT ALL ON fdt_bancos_cias TO PUBLIC
GO

IF OBJECT_ID('dbo.fdt_bancos_cias_datos') IS NOT NULL
    DROP TABLE dbo.fdt_bancos_cias_datos
GO
CREATE TABLE dbo.fdt_bancos_cias_datos
(
    banco        tinyint NOT NULL,
    compania     char(4) NOT NULL,
    cuenta       varchar(30) NULL,
    tipo_cta     tinyint NULL,
    oficina_cta  varchar(15) NULL,
    concepto1    smallint NULL,
    concepto2    smallint NULL,
    concepto3    smallint NULL,
    concepto4    smallint NULL,
    concepto5    smallint NULL,                
    simbolo_moneda   char(5) NULL,
    responsable  varchar(20) NULL,
	registro_fiscal varchar(20) NULL,
    agr_tipo_id char(10) NULL,
    agr_tipo_cta char(10) NULL,
    CONSTRAINT PK_fdt_bancos_cias_datos PRIMARY KEY NONCLUSTERED (banco, compania)
)
GO
GRANT ALL ON fdt_bancos_cias_datos TO PUBLIC
GO

IF OBJECT_ID('dbo.fdt_bancos_err') IS NOT NULL
DROP TABLE dbo.fdt_bancos_err
GO
CREATE TABLE dbo.fdt_bancos_err
(
    id_rep smallint NOT NULL, 
    usuariow varchar(30) NOT NULL, 
    banco tinyint NULL,
    trabajador char(10) NOT NULL, 
    numero_liquidacion smallint NULL, --este es para la interactiva
    cod_error smallint NULL,
    error varchar(255) NULL
) 
GO
GRANT ALL ON fdt_bancos_err TO PUBLIC
GO

IF OBJECT_ID('dbo.fdt_bancos_ins_dep') IS NOT NULL
    DROP TABLE dbo.fdt_bancos_ins_dep
GO
CREATE TABLE dbo.fdt_bancos_ins_dep
(
    banco        tinyint NOT NULL,
    ins_dep      char(3) NOT NULL,
    cod_banco    varchar(15) NULL, --este por si el cod de la ins dep es diferente al de los bancos de asobancaria
    CONSTRAINT PK_fdt_bancos_ins_dep PRIMARY KEY NONCLUSTERED (banco, ins_dep)
)
GO
GRANT ALL ON fdt_bancos_ins_dep TO PUBLIC
GO


IF OBJECT_ID('dbo.fdt_bancos_mm') IS NOT NULL
DROP TABLE dbo.fdt_bancos_mm
GO
CREATE TABLE dbo.fdt_bancos_mm
(
	id_rep     smallint NOT NULL,
	usuariow    varchar(30) NOT NULL,
	banco		tinyint,
    sec_archivo tinyint NOT NULL, --por si se manejan varios archivos. Es la sec configurada en la tabla fdt_rutas
	secuencia  decimal(6) NULL ,
	registros  varchar(2000) NULL
)
GO
GRANT ALL ON fdt_bancos_mm TO PUBLIC
GO
CREATE INDEX in_fdt_bancos_mm01 ON fdt_bancos_mm(id_rep, usuariow, banco)
GO

IF OBJECT_ID('dbo.fdt_bancos_rep') IS NOT NULL
DROP TABLE dbo.fdt_bancos_rep
GO
CREATE TABLE dbo.fdt_bancos_rep
(
	id_rep     smallint NOT NULL,
	usuariow	 varchar(30) NOT NULL,
	banco		   tinyint,
	fecha		   smalldatetime,
	responsable  varchar(20),
	trabajador	 char(10),
	importe		 decimal(19,6),
	cuenta_dep	 varchar(20),
	simbolo_moneda	char(5)
)
GO
GRANT ALL ON fdt_bancos_rep TO PUBLIC
GO

IF OBJECT_ID('dbo.fdt_bancos_resultados') IS NOT NULL
    DROP TABLE dbo.fdt_bancos_resultados
GO
CREATE TABLE dbo.fdt_bancos_resultados
(
    id_rep     smallint NOT NULL,
    usuariow	 varchar(30) NOT NULL,
    banco tinyint,
    trabajadores smallint,
    valor_total decimal(19,6)
)
GO
GRANT ALL ON fdt_bancos_resultados TO PUBLIC
GO

IF OBJECT_ID('dbo.fdt_bancos_tmp') IS NOT NULL
    DROP TABLE dbo.fdt_bancos_tmp
GO
CREATE TABLE dbo.fdt_bancos_tmp
(
  id_rep smallint NOT NULL, 
  usuariow varchar(30) NOT NULL, 
  compania char(4) NULL,
  clase_nomina char(2) NULL, 
  id_calendario smallint NULL, 
  trabajador char(10) NOT NULL, 
  importe decimal(13,2) NOT NULL, 
  ins_dep varchar(15) NULL, 
  cuenta_dep varchar(20) NULL, 
  simbolo_mon	char(5) NULL, 
  tipo tinyint NOT NULL,
  numero_liquidacion smallint NULL, --este es para la interactiva
  tipo_cuenta char(5) NULL,  --ahorros, corrientes...
  tipo_doc char(5) NULL,  --tipo de documento, CC, CE...
	mensaje varchar(100) NULL
)
ON [PRIMARY]
GO

GRANT ALL ON fdt_bancos_tmp TO PUBLIC
GO

IF OBJECT_ID('dbo.fdt_rutas') IS NOT NULL
DROP TABLE dbo.fdt_rutas
GO
CREATE TABLE dbo.fdt_rutas
( 
    operacion char(8) NOT NULL, -- dependiendo del desarrollo, INT(interfase), REP(reportes), BCO(Bancos)
    codigo  tinyint NOT NULL,
    tipo tinyint NOT NULL, --1 (reporte), 2(medio magnetico)
    secuencia smallint NOT NULL,
    archivo varchar(50) NOT NULL,
    ruta varchar(500) NOT NULL,
    tabla varchar(30) NOT NULL,  --donde se guardara la info para ser invocado el reporte
    CONSTRAINT PK_fdt_rutas PRIMARY KEY NONCLUSTERED (operacion, codigo, tipo, secuencia)
)
GRANT ALL ON fdt_rutas TO PUBLIC
GO

IF OBJECT_ID('dbo.ri_liq_procesar') IS NOT NULL
    DROP TABLE dbo.ri_liq_procesar
GO
CREATE TABLE dbo.ri_liq_procesar
(
    id_rep smallint NOT NULL,
    compania char(4) NOT NULL,
    numero_liquidacion smallint NOT NULL,
    trabajador char(10) NOT NULL,
    usuariow varchar(30) NULL,
    tipo_nomina char(2) NULL
)
GO
GRANT ALL ON ri_liq_procesar TO PUBLIC
GO


IF OBJECT_ID('dbo.ri_procesar') IS NOT NULL
    DROP TABLE dbo.ri_procesar
GO
CREATE TABLE dbo.ri_procesar
(
    id_rep       smallint NOT NULL,
    usuariow	 varchar(30) NOT NULL,
    grupo_nom    char(6) NULL,
    compania     char(4) NULL,
    clase_nomina char(2) NULL,
    tipo_nomina  char(2) NULL,
    anio         smallint NULL,
    periodo      tinyint NULL,
    concepto	 smallint NULL
)
GO
GRANT ALL ON ri_procesar TO PUBLIC
GO


IF OBJECT_ID('dbo.vw_fdt_bancos') IS NOT NULL
    DROP VIEW dbo.vw_fdt_bancos
GO
CREATE VIEW dbo.vw_fdt_bancos
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos	        ***/
/*** Descripcion: muestra detalles de las tablas fdt_bancos      ***/
/*** y fdt_bancos_cias_datos      								                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 11 de 2005                                      ***/
/********************************************************************/
SELECT
    bc.compania, a.banco, a.descripcion, bcd.cuenta, bcd.tipo_cta, bcd.oficina_cta, 
    bcd.concepto1, bcd.concepto2, bcd.concepto3, bcd.concepto4, bcd.concepto5, bcd.simbolo_moneda, 
    bcd.responsable, bcd.registro_fiscal, a.proc_generacion, bcd.agr_tipo_id, bcd.agr_tipo_cta
FROM 
    fdt_bancos a, fdt_bancos_cias bc, fdt_bancos_cias_datos bcd
WHERE a.banco = bc.banco 
AND bc.banco = bcd.banco 
AND bc.compania = bcd.compania
GO
GRANT SELECT ON vw_fdt_bancos TO PUBLIC
GO




IF OBJECT_ID('dbo.vw_fdt_bancos_err') IS NOT NULL
    DROP VIEW dbo.vw_fdt_bancos_err
GO
CREATE VIEW dbo.vw_fdt_bancos_err
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos	        ***/
/*** Descripcion: Muestra los errores del banco 	                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Junio 8/2005                                          ***/
/********************************************************************/
SELECT a.id_rep, a.usuariow, a.banco, a.trabajador, a.numero_liquidacion,
a.cod_error, a.error,
SUBSTRING(REPLACE(LTRIM(RTRIM(b.nombre)),'/',' '),1,40) as nombre, 
b.clave_unica, c.descripcion
FROM fdt_bancos_err a, trabajadores b, fdt_bancos c
WHERE a.banco = c.banco
AND a.trabajador = b.trabajador
GO
GRANT SELECT ON vw_fdt_bancos_err TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_fdt_bancos_rep') IS NOT NULL
    DROP VIEW dbo.vw_fdt_bancos_rep
GO
CREATE VIEW dbo.vw_fdt_bancos_rep
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos	        ***/
/*** Descripcion: Muestra informacion de la tabla de reporte	      ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 11/2005                                         ***/
/********************************************************************/
SELECT a.id_rep, a.usuariow, a.banco, a.fecha, a.responsable,
a.trabajador, a.importe, a.cuenta_dep, LTRIM(RTRIM(a.simbolo_moneda)) as simbolo_moneda,
SUBSTRING(REPLACE(LTRIM(RTRIM(b.nombre)),'/',' '),1,40) as nombre, 
b.clave_unica, c.descripcion
FROM fdt_bancos_rep a, trabajadores b, fdt_bancos c
WHERE a.banco = c.banco
AND a.trabajador = b.trabajador
GO
GRANT SELECT ON vw_fdt_bancos_rep TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_ri_liquidaciones') IS NOT NULL
    DROP VIEW dbo.vw_ri_liquidaciones
GO
CREATE VIEW dbo.vw_ri_liquidaciones
AS
SELECT 
    le.compania,
    le.numero_liquidacion, 
    le.trabajador, 
    SUBSTRING(REPLACE(t.nombre, '/', ' '),1,40) AS nombre, 
    le.tipo_nomina,
    le.fecha_liquidacion, 
    le.fecha_base,
    (SELECT importe FROM liquidaciones_det ld 
    WHERE ld.compania = le.compania 
    AND ld.tipo_nomina = le.tipo_nomina 
    AND ld.anio_acumular = le.anio_acumular
    AND ld.mes_acumular = le.mes_acumular
    AND ld.numero_liquidacion = le.numero_liquidacion
    AND ld.trabajador = le.trabajador 
    AND ld.concepto = (SELECT x.entero FROM parametros_rh x
		       WHERE x.compania = le.compania AND x.parametro_rh = 'Conc_Neto')) AS neto,
    CASE WHEN DATEDIFF(m, le.fecha_liquidacion, getdate()) > 1 THEN 0 ELSE 1 END AS reciente
FROM 
    liquidaciones_enc le, trabajadores t, trabajadores_grales tg
WHERE
    t.trabajador = tg.trabajador AND
    le.compania = tg.compania AND
    le.trabajador = tg.trabajador AND
    --le.tipo_nomina = 'LV' AND
-- CONDICIONES PARA VALIDAR LA SEGURIDAD
    -- AUTORIZACION A LA COMPANIA
    system_user IN (SELECT usuario FROM aut_companias x WHERE x.compania = le.compania) AND
    -- AUTORIZACION POR CLASE DE NOMINA
    system_user IN (SELECT usuario FROM rel_usu_clase_nom r1
                    WHERE r1.clase_nomina = tg.clase_nomina) AND                    
    -- AUTORIZACION POR AGRUPACIONES
    NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                  AND r2.compania = le.compania AND r2.trabajador = le.trabajador
                  AND u2.usuario = system_user)
GO
GRANT SELECT ON vw_ri_liquidaciones TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fdt_del_bancos') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_del_bancos
GO
CREATE PROCEDURE dbo.sp_fdt_del_bancos
(
    @pch_compania char(4),
    @pti_banco tinyint
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia                                    ***/
/*** Descripcion: borra registros de las tablas fdt_bancos        ***/
/*** y fdt_bancos_cias_datos y fdt_bancos_cias  				          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 11 de 2005                                      ***/
/********************************************************************/
BEGIN
    IF EXISTS(SELECT 1 FROM fdt_bancos_cias
              WHERE banco = @pti_banco AND compania <> @pch_compania)
    BEGIN
        RAISERROR('Este Banco no se puede eliminar porque tiene relación con otras compañías',16,1)
        RETURN
    END
        
    DELETE FROM fdt_bancos_cias WHERE compania = @pch_compania AND banco = @pti_banco
    DELETE FROM fdt_bancos_cias_datos WHERE compania = @pch_compania AND banco = @pti_banco
    DELETE FROM fdt_bancos_ins_dep WHERE banco = @pti_banco
    DELETE FROM fdt_bancos WHERE banco = @pti_banco
    DELETE FROM fdt_rutas WHERE codigo = @pti_banco AND operacion = 'FCO1070'
END
GO
GRANT EXECUTE ON sp_fdt_del_bancos TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fdt_del_bancos_proc') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_del_bancos_proc
GO
CREATE PROCEDURE dbo.sp_fdt_del_bancos_proc
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_banco   tinyint
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia                                    ***/
/*** Descripcion: borra registros de las tablas usadas en bancos  ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Abril 27 de 2005                                      ***/
/********************************************************************/

BEGIN

     DELETE FROM ri_procesar 
     WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario

     DELETE FROM ri_liq_procesar 
     WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario

     DELETE FROM fdt_bancos_mm
     WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario
     AND banco = @pti_banco

     DELETE FROM fdt_bancos_resultados 
     WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario
     AND banco = @pti_banco

     DELETE FROM fdt_bancos_rep
     WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario
     AND banco = @pti_banco

    DELETE FROM fdt_bancos_tmp
    WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario
    
    DELETE FROM fdt_bancos_err
    WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario

END
GO
GRANT EXECUTE ON sp_fdt_del_bancos_proc TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fdt_del_rutas') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_del_rutas
GO
CREATE PROCEDURE dbo.sp_fdt_del_rutas
( 
    @pch_tipo_cod char(8),
    @pti_codigo tinyint,
    @psi_secuencia smallint,
    @pti_tipo tinyint
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: borra registros en las tablas fdt_rutas ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Abril 26 de 2005                                      ***/
/********************************************************************/
BEGIN
     DELETE fdt_rutas
     WHERE operacion = @pch_tipo_cod
     AND codigo = @pti_codigo
     AND tipo = @pti_tipo
     AND secuencia = @psi_secuencia
END
GO
GRANT EXECUTE ON dbo.sp_fdt_del_rutas TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_gen_medios_bancos') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_gen_medios_bancos
GO
CREATE PROCEDURE dbo.sp_fdt_gen_medios_bancos
(
    @psi_id_rep  smallint,
    @pvc_usuario varchar(30),
    @pti_banco   tinyint,
    @pdt_fecha   char(8) = NULL,
    @pvc_responsable varchar(30) = '',
    @pti_origen tinyint = 1, -- 1: de NS, 2: de NI
    @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/**********************************************************************/
/*** Modulo:      Módulo Fiscal ADAM V.3 - Medios Magneticos Bancos ***/
/*** Descripcion: Llama al procedimiento de generacion del archivo  ***/
/***              plano respectivo al banco recibido                ***/
/*** Autor:	  Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	  Marzo 14 de 2005. Version Oracle                      ***/
/**********************************************************************/
/*** Se hace la moficacion, para poder llamar el ***/
/*** sp de medios para interactiva. La unica condicion es que el  ***/
/*** medio sea igual en nombre al ns, con terminacion ni al final ***/
DECLARE
	@vvc_proc_genera	varchar(30),
	@vvc_ssql			varchar(2000),
	@vvc_banco			varchar(10),
    @vdc_len            decimal(7)
BEGIN
    --trayendo el nombre del procedimiento
    SET @vvc_proc_genera = ''
    SET @vdc_len = 0

    SELECT @vvc_proc_genera = proc_generacion
    FROM fdt_bancos
    WHERE banco = @pti_banco

	SET @vvc_proc_genera = LTRIM(RTRIM(ISNULL(@vvc_proc_genera,'')))
    SET @vdc_len = ISNULL(LEN(@vvc_proc_genera),0)  
  
	IF @vdc_len = 0
    BEGIN
		SET @vvc_banco = LTRIM(RTRIM(@pti_banco))
        RAISERROR ('No existe la funcion de generacion para el banco %s ', 16, 1, @vvc_banco)
        RETURN 
	END

	IF @pti_origen = 2 -- viene de interactiva
		SET @vvc_proc_genera = LTRIM(RTRIM(@vvc_proc_genera)) + '_ni'
               
    SET @vvc_ssql = 
        @vvc_proc_genera + ' ' +  RTRIM(@psi_id_rep) + ',' +
        '''' + @pvc_usuario + ''',' + RTRIM(@pti_banco) + ',' +
        '''' + @pdt_fecha + ''',' +
        '''' + @pvc_responsable + ''',' +
        RTRIM(@pti_filtra_cta)

    EXEC (@vvc_ssql)
END
GO
GRANT EXECUTE ON sp_fdt_gen_medios_bancos TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_upd_bancos_detalle') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_upd_bancos_detalle
GO
CREATE PROCEDURE dbo.sp_fdt_upd_bancos_detalle
(
    @pch_compania     char(4),
    @pti_banco        tinyint,
    @pvc_descripcion  varchar(100),
    @pvc_cuenta       varchar(30),
    @pti_tipo_cta     tinyint,
    @pvc_oficina_cta  varchar(15),
    @psi_concepto1     smallint,
    @psi_concepto2     smallint,
    @psi_concepto3     smallint,
    @psi_concepto4     smallint,
    @psi_concepto5     smallint,                
    @pch_simb_moneda  char(5),
    @pvc_responsable  varchar(20),
    @pvc_registro_fiscal varchar(20),
    @pch_operacion    char(1), -- ??? -- Al parecer se penso para algo, pero se quito
    @pvc_usuario      varchar(30),
    @pvc_proc_generar varchar(30),
    @pch_agr_tipo_id char(10) = NULL,
    @pch_agr_tipo_cta char(10) = NULL 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos          ***/
/*** Descripcion: Modifica detalles de las tablas fdt_bancos      ***/
/*** y fdt_bancos_cias_datos      								                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 11 de 2005                                      ***/
/********************************************************************/
BEGIN
    UPDATE fdt_bancos 
    SET descripcion = @pvc_descripcion,
        proc_generacion = @pvc_proc_generar
    WHERE banco = @pti_banco
        
    IF EXISTS(SELECT 1 FROM fdt_bancos_cias_datos
              WHERE banco = @pti_banco
                AND compania = @pch_compania)
        UPDATE fdt_bancos_cias_datos
        SET cuenta = @pvc_cuenta,
            tipo_cta = @pti_tipo_cta,
            oficina_cta = @pvc_oficina_cta,
            concepto1 = @psi_concepto1,
            concepto2 = @psi_concepto2,
            concepto3 = @psi_concepto3,
            concepto4 = @psi_concepto4,
            concepto5 = @psi_concepto5,        
            simbolo_moneda = @pch_simb_moneda,
            responsable = @pvc_responsable,
            registro_fiscal = @pvc_registro_fiscal,
            agr_tipo_id = @pch_agr_tipo_id,
            agr_tipo_cta = @pch_agr_tipo_cta
        WHERE 
            compania = @pch_compania AND banco = @pti_banco
    ELSE
        INSERT INTO fdt_bancos_cias_datos 
        (banco, compania, cuenta, tipo_cta, oficina_cta, concepto1, concepto2, concepto3, concepto4, concepto5, 
         simbolo_moneda, responsable, registro_fiscal, agr_tipo_id, agr_tipo_cta)
        VALUES (@pti_banco,@pch_compania, @pvc_cuenta, @pti_tipo_cta, @pvc_oficina_cta, @psi_concepto1, @psi_concepto2, @psi_concepto3, @psi_concepto4, @psi_concepto5,
        @pch_simb_moneda, @pvc_responsable, @pvc_registro_fiscal, @pch_agr_tipo_id, @pch_agr_tipo_cta)
END
GO
GRANT EXECUTE ON dbo.sp_fdt_upd_bancos_detalle TO PUBLIC
GO


IF OBJECT_ID('dbo.sp_fdt_upd_bancos') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_upd_bancos
GO
CREATE PROCEDURE dbo.sp_fdt_upd_bancos
(
    @pch_compania char(4),
    @pti_relacionado tinyint,
    @pti_banco tinyint,
    @pvc_descripcion varchar(100),
    @pti_operacion tinyint --1:alta, 2:modificacion
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos          ***/
/*** Descripcion: crea registros en las tablas fdt_bancos         ***/
/*** y fdt_bancos_cias_datos      		                          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 10 de 2005                                      ***/
/********************************************************************/
BEGIN

DECLARE
    @vvc_cuenta       varchar(30),
    @vti_tipo_cta     numeric(1),
    @vvc_oficina_cta  varchar(15),
    @vsi_concepto1     smallint,
    @vsi_concepto2     smallint,
    @vsi_concepto3     smallint,
    @vsi_concepto4     smallint,
    @vsi_concepto5     smallint,
    @vch_simb_moneda  char(5),
    @vvc_responsable  varchar(20),
    @vvc_registro_fiscal varchar(20),
    
    @vvc_ruta         varchar(100),
    @vvc_nombre       varchar(50),
    @vvc_nombre2      varchar(50),
    @vti_archivos     tinyint,
    
    @vvc_usuario	  varchar(30),
    @vti_reporte	  tinyint,
    @vvc_proc_generar varchar(30),
    
    @vti_banco       tinyint

    SET @vvc_usuario = SYSTEM_USER
        
    IF EXISTS(SELECT 1 FROM fdt_bancos WHERE banco = @pti_banco) --1. DCRP,Feb23/2005, No esta respetando que existan ya otros bancos con ese codigo
        IF @pti_operacion = 1
        BEGIN
            RAISERROR('El codigo del banco que quiere insertar ya existe. verifique por favor.', 16, 1)
            RETURN
        END
	
    IF @pti_operacion = 2
        UPDATE fdt_bancos SET descripcion = @pvc_descripcion WHERE banco = @pti_banco
    ELSE
        INSERT INTO fdt_bancos (banco, descripcion) VALUES (@pti_banco, @pvc_descripcion)

    IF @pti_relacionado = 1
    BEGIN --2               
        IF NOT EXISTS(SELECT 1 FROM fdt_bancos_cias WHERE compania = @pch_compania AND banco = @pti_banco)
        BEGIN--3
            INSERT INTO fdt_bancos_cias (compania, banco) VALUES (@pch_compania, @pti_banco)
            INSERT INTO fdt_bancos_cias_datos (compania, banco) VALUES (@pch_compania, @pti_banco)

            --Buscamos el banco 1 que se lleno, para guardar los mismos datos del detalle
            SET @vti_banco = NULL
            SELECT @vti_banco = MIN(banco) FROM fdt_bancos_cias_datos
            WHERE compania = @pch_compania

            IF @vti_banco IS NULL
                SELECT @vti_banco = MIN(banco) FROM fdt_bancos_cias_datos    

						IF ISNULL(@vti_banco,'') <> ''
						BEGIN--5
		            SELECT 
		                @vvc_cuenta = cuenta, @vti_tipo_cta = tipo_cta, @vvc_oficina_cta = oficina_cta,
		                @vsi_concepto1 = concepto1, @vsi_concepto2 = concepto2, @vsi_concepto3 = concepto3,
		                @vsi_concepto4 = concepto4,  @vsi_concepto5 = concepto5, @vch_simb_moneda = simbolo_moneda,
		                @vvc_responsable = responsable, @vvc_registro_fiscal = registro_fiscal,
		                @vvc_proc_generar = proc_generacion
		            FROM vw_fdt_bancos
		            WHERE banco = @vti_banco
		                
		                --trayendo la ruta del banco
		/*                SELECT @vvc_ruta = ruta, @vvc_nombre = archivo FROM vw_dt_rutas
		                WHERE banco = @vti_banco AND secuencia = 1            
		                
		                SELECT @vvc_nombre2 = archivo FROM vw_dt_rutas
		                WHERE banco = @vti_banco AND secuencia = 2            
		*/                
		                --ejecutamos el procedimiento
		            EXEC sp_fdt_upd_bancos_detalle 
		                @pch_compania, @pti_banco, @pvc_descripcion, @vvc_cuenta, @vti_tipo_cta, @vvc_oficina_cta, 
		                @vsi_concepto1, @vsi_concepto2, @vsi_concepto3, @vsi_concepto4, @vsi_concepto5, 
		                @vch_simb_moneda, @vvc_responsable, @vvc_registro_fiscal, 
		                'FCO1070', 'TODOS', @vvc_proc_generar
		                
								--revisamos que no exista, para insertar uno nuevo
								IF NOT EXISTS (SELECT 1 FROM fdt_bancos_ins_dep WHERE banco = @vti_banco)
								BEGIN
				            --ahora insertamos las instituciones de deposito existentes
				            INSERT INTO fdt_bancos_ins_dep ( banco, ins_dep, cod_banco)
				            SELECT @pti_banco, ins_dep, cod_banco
				            FROM fdt_bancos_ins_dep WHERE banco = @vti_banco
							  END
					 END--5
        END--3          
    END--2
    ELSE
    BEGIN --4
        DELETE FROM fdt_bancos_cias WHERE compania = @pch_compania AND banco = @pti_banco
        DELETE FROM fdt_bancos_cias_datos WHERE compania = @pch_compania AND banco = @pti_banco        
    END --4

END--1
GO
GRANT EXECUTE ON sp_fdt_upd_bancos TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_upd_bancos_ins_dep') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_upd_bancos_ins_dep
GO
CREATE PROCEDURE dbo.sp_fdt_upd_bancos_ins_dep
(
    @pti_banco  tinyint,
    @pch_ins_dep char(3),
    @pch_cod_banco varchar(15),
    @pti_operacion tinyint  --1:Alta, 2:baja, 3: actualizacion
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos          ***/
/*** Descripcion: crea registros en las tablas fdt_bancos_ins_dep ***/
/*** y borra tambien    								                          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 10 de 2005                                      ***/
/********************************************************************/
BEGIN
     IF @pti_operacion = 1
        INSERT INTO fdt_bancos_ins_dep (banco, ins_dep, cod_banco)
        VALUES (@pti_banco, @pch_ins_dep, @pch_cod_banco)
     
     IF @pti_operacion = 2
        DELETE fdt_bancos_ins_dep
        WHERE banco = @pti_banco
        AND ins_dep = @pch_ins_dep
     
     IF @pti_operacion = 3
        UPDATE fdt_bancos_ins_dep
        SET cod_banco = @pch_cod_banco
        WHERE banco = @pti_banco
        AND ins_dep = @pch_ins_dep
  
END
GO
GRANT EXECUTE ON sp_fdt_upd_bancos_ins_dep TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fdt_upd_rutas') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_upd_rutas
GO
CREATE PROCEDURE dbo.sp_fdt_upd_rutas
( 
    @pch_tipo_cod char(8),
    @pti_codigo tinyint,
    @psi_secuencia smallint,
    @pti_tipo tinyint,
    @pvc_archivo varchar(50),
    @pvc_ruta varchar(500),
    @pvc_tabla varchar(30)
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: crea registros en las tablas fdt_rutas          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Abril 26 de 2005                                      ***/
/********************************************************************/
BEGIN
    DECLARE @vsi_secuencia smallint

    IF ISNULL(@psi_secuencia,0) = 0 -- es un registro nuevo
    BEGIN    
        SELECT @vsi_secuencia = MAX(secuencia)
        FROM fdt_rutas
        WHERE operacion = @pch_tipo_cod
        AND codigo = @pti_codigo
        AND tipo = @pti_tipo
    
        SET @vsi_secuencia = ISNULL(@vsi_secuencia,0) + 1
    
        INSERT INTO fdt_rutas (operacion, codigo, tipo, secuencia, archivo, ruta, tabla)
        VALUES (@pch_tipo_cod ,@pti_codigo, @pti_tipo, @vsi_secuencia, @pvc_archivo, @pvc_ruta, @pvc_tabla)  
    END
    ELSE
        UPDATE fdt_rutas
        SET archivo = @pvc_archivo,
            ruta = @pvc_ruta,
            tabla = @pvc_tabla
        WHERE operacion = @pch_tipo_cod
          AND codigo = @pti_codigo
          AND tipo = @pti_tipo
          AND secuencia = @psi_secuencia    
END
GO
GRANT EXECUTE ON sp_fdt_upd_rutas TO PUBLIC
GO
IF OBJECT_ID('dbo.fdt_bancos_tipos_id') IS NULL
CREATE TABLE dbo.fdt_bancos_tipos_id
(
    pais char(3) NOT NULL,
    compania char(4) NOT NULL,
    banco tinyint NOT NULL,
    tipo_id varchar(10) NOT NULL,
    descripcion varchar(60) NOT NULL,
    dato_eq varchar(10) NULL,
    CONSTRAINT pk_fdt_bancos_tipos_id 
    PRIMARY KEY (pais, compania, banco, tipo_id)
)
GO
GRANT ALL ON dbo.fdt_bancos_tipos_id TO PUBLIC
GO

IF OBJECT_ID('dbo.fdt_bancos_tipos_cta') IS NULL
CREATE TABLE dbo.fdt_bancos_tipos_cta
(
    pais char(3) NOT NULL,
    compania char(4) NOT NULL,
    banco tinyint NOT NULL,
    tipo_cta varchar(10) NOT NULL,
    descripcion varchar(60) NOT NULL,
    dato_eq varchar(10) NULL,
    CONSTRAINT pk_fdt_bancos_tipos_cta 
    PRIMARY KEY (pais, compania, banco, tipo_cta)
)
GO
GRANT ALL ON dbo.fdt_bancos_tipos_cta TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fdt_bancos_tipos_id') IS NOT NULL
    DROP VIEW dbo.vw_fdt_bancos_tipos_id
GO
CREATE VIEW dbo.vw_fdt_bancos_tipos_id
AS
SELECT pais, compania, banco, tipo_id, descripcion, dato_eq
FROM fdt_bancos_tipos_id
WHERE compania <> '0'
UNION
SELECT a.pais, c.compania, a.banco, a.tipo_id, a.descripcion, a.dato_eq
FROM fdt_bancos_tipos_id a
INNER JOIN companias c ON 1 = 1
WHERE a.compania = '0'
AND NOT EXISTS
(SELECT 1 FROM fdt_bancos_tipos_id x
 WHERE x.pais = a.pais AND x.compania = c.compania AND x.banco = a.banco AND x.tipo_id = a.tipo_id)
GO
GRANT SELECT ON dbo.vw_fdt_bancos_tipos_id TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_fdt_bancos_tipos_cta') IS NOT NULL
    DROP VIEW dbo.vw_fdt_bancos_tipos_cta
GO
CREATE VIEW dbo.vw_fdt_bancos_tipos_cta
AS
SELECT pais, compania, banco, tipo_cta, descripcion, dato_eq
FROM fdt_bancos_tipos_cta
WHERE compania <> '0'
UNION
SELECT a.pais, c.compania, a.banco, a.tipo_cta, a.descripcion, a.dato_eq
FROM fdt_bancos_tipos_cta a
INNER JOIN companias c ON 1 = 1
WHERE a.compania = '0'
AND NOT EXISTS
(SELECT 1 FROM fdt_bancos_tipos_cta x
 WHERE x.pais = a.pais AND x.compania = c.compania AND x.banco = a.banco AND x.tipo_cta = a.tipo_cta)
GO
GRANT SELECT ON dbo.vw_fdt_bancos_tipos_cta TO PUBLIC
GO
PRINT 'Definición de Bancos... OK'
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes
GO
CREATE TABLE dbo.fco_reportes
( 
	cod_rep  tinyint NOT NULL,
	descripcion varchar (100) NULL,
	proc_generacion varchar (30) NULL,
	proc_borrado varchar(30) NULL,
	operacion char(8) NULL, --porque se lleva las formas a RI y solo se quiere que se vean esos reportes  
	  CONSTRAINT PK_fco_reportes PRIMARY KEY (cod_rep)
)
ON [PRIMARY]
GO 
GRANT ALL ON fco_reportes TO Public
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes_aut]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes_aut
GO
CREATE TABLE dbo.fco_reportes_aut
( cod_rep  tinyint NOT NULL,
  compania   char(4) NOT NULL,
  usuariow   varchar(30) NOT NULL,
    CONSTRAINT PK_fco_reportes_aut PRIMARY KEY (cod_rep, compania, usuariow)
)
ON [PRIMARY]
GO 
GRANT ALL ON fco_reportes_aut TO Public
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes_cias]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes_cias
GO
CREATE TABLE dbo.fco_reportes_cias
(   cod_rep tinyint NOT NULL,
    compania     char(4) NOT NULL,
    CONSTRAINT PK_fco_reportes_cias PRIMARY KEY (cod_rep, compania)
)
ON [PRIMARY]
GO 
GRANT ALL ON fco_reportes_cias TO Public
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes_mm]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes_mm
GO
CREATE TABLE dbo.fco_reportes_mm
(
	id_rep     smallint NOT NULL,
	usuariow	 varchar(30) NOT NULL,
	cod_rep  tinyint NOT NULL,
  sec_archivo tinyint NOT NULL, --por si se manejan varios archivos. Es la sec configurada en la tabla ri_interfase_rutas
	secuencia  smallint NULL,
	registros  varchar(2000) NULL
)
GO
GRANT ALL ON fco_reportes_mm TO PUBLIC
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes_par]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes_par
GO
CREATE TABLE dbo.fco_reportes_par
( cod_rep  tinyint NOT NULL,
  secuencia tinyint NOT NULL,
  orden tinyint NOT NULL,
  tit_campo varchar(40) NOT NULL,
  tipo_campo tinyint NOT NULL,
  CONSTRAINT PK_fco_reportes_par PRIMARY KEY (cod_rep, secuencia)
)
ON [PRIMARY]
GO 
GRANT ALL ON fco_reportes_par TO Public
GO


/*

xxxxxxxxxxxxxxxxxxx
x TIPOS DE CAMPO: x
xxxxxxxxxxxxxxxxxxx
 1. Compañía
 2. Trabajador
 3. Concepto
 4. Agr. Concepto,
 5. Agr de Trabajador
 6. Dato Agr de Trabajador
 7. Clase de Nomina
 8. Tipo de Nomina
 9. Valor Entero
 10. Valor numerico con decimales
 11. Valor alfanumerico
 12. fecha
 13. variable del trabajador
 14. variable de nomina
 15. coleccion de trabajador
 16. sucursales
 17. Si/No
 18. Ciudades Pago de embargos
 19. Numero de liquidacion (NI)
*/  

IF OBJECT_ID('dbo.fdt_rutas') IS NULL
CREATE TABLE dbo.fdt_rutas
( 
    operacion char(8) NOT NULL, -- dependiendo del desarrollo, INT(interfase), REP(reportes), BCO(Bancos)
    codigo  tinyint NOT NULL,
    tipo tinyint NOT NULL, --1 (reporte), 2(medio magnetico)
    secuencia smallint NOT NULL,
    archivo varchar(50) NOT NULL,
    ruta varchar(500) NOT NULL,
    tabla varchar(30) NOT NULL,  --donde se guardara la info para ser invocado el reporte
    CONSTRAINT PK_fdt_rutas PRIMARY KEY NONCLUSTERED (operacion, codigo, tipo, secuencia)
)
GRANT ALL ON fdt_rutas TO PUBLIC
GO

SET QUOTED_IDENTIFIER OFF
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_del_reportes]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_del_reportes
GO
CREATE PROCEDURE dbo.sp_fco_del_reportes
(
  @pch_compania char(4),
  @pti_cod_rep tinyint,
  @pch_operacion char(8)
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: borra registros de las tablas fco_reportes      ***/
/*** y fco_reportes_cias, fco_reportes_par, fdt_rutas             ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                       ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Septiembre 25/2005							***/
DECLARE
  @vvc_parametro   varchar(10)
BEGIN--1
      
    IF EXISTS (SELECT 1 FROM fco_reportes_cias
      				 WHERE cod_rep = @pti_cod_rep AND compania <> @pch_compania)
		BEGIN
				RAISERROR('Este reporte no se puede eliminar porque tiene relación con otras compañías', 16, 1)
        RETURN;        
    END
        
    SET @vvc_parametro = 'report_' + LTRIM(RTRIM(@pti_cod_rep))
    DELETE FROM fco_reportes_cias WHERE compania = @pch_compania AND cod_rep = @pti_cod_rep
    DELETE FROM fco_reportes_par WHERE cod_rep = @pti_cod_rep
    DELETE FROM fdt_rutas WHERE codigo = @pti_cod_rep AND operacion = @pch_operacion
    DELETE FROM fco_reportes WHERE cod_rep = @pti_cod_rep
    DELETE FROM fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania
    AND parametro = @vvc_parametro

		IF NOT EXISTS (SELECT 1 FROM fco_reportes_cias WHERE compania <> @pch_compania AND cod_rep = @pti_cod_rep)
		BEGIN
	    DELETE FROM fdt_parametros WHERE pais = 'COL' AND compania = '0'
	    AND parametro = @vvc_parametro
		END
        
END--1
GO
GRANT EXECUTE ON sp_fco_del_reportes TO Public
go

GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_del_reportes_par]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_del_reportes_par
GO
CREATE PROCEDURE dbo.sp_fco_del_reportes_par
(
  @pti_cod_rep tinyint,
  @pnu_secuencia tinyint
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: borra registros de las tablas fco_reportes_par  ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                      ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Septiembre 25/2005						 ***/
BEGIN--1
      DELETE fco_reportes_par
      WHERE cod_rep = @pti_cod_rep
      AND secuencia = @pnu_secuencia
      
END
GO
GRANT EXECUTE ON sp_fco_del_reportes_par TO Public
go

GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_upd_reportes]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_upd_reportes
GO
CREATE PROCEDURE dbo.sp_fco_upd_reportes
(
  @pch_compania char(4),
  @pti_relacionado tinyint,
  @pti_cod_rep tinyint,
  @pvc_descripcion varchar(100),
  @pti_operacion tinyint = 1, --1:alta, 2:modificacion
  @pch_operacion char(8),    
  @pvc_nombre_proc varchar(30) = NULL,
  @pvc_proc_borrado varchar(30) = NULL
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: crea registros en las tablas fco_reportes       ***/
/*** y ri_intefase_cias                                           ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                       ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Agosto 26/2005									***/
BEGIN

		IF EXISTS(SELECT 1 FROM fco_reportes WHERE cod_rep = @pti_cod_rep)
		BEGIN--1
		  IF @pti_operacion = 1
      BEGIN
				 RAISERROR('El codigo del reporte que quiere insertar ya existe. verifique por favor.', 16, 1)
         RETURN
      END
  		
      IF @pti_operacion = 2
			BEGIN
		      UPDATE fco_reportes 
          SET descripcion = @pvc_descripcion,
          proc_generacion = @pvc_nombre_proc, 
          proc_borrado = @pvc_proc_borrado,
          operacion = @pch_operacion
          WHERE cod_rep = @pti_cod_rep
      END
    END--1
    ELSE
         INSERT INTO fco_reportes (cod_rep, descripcion, proc_generacion, proc_borrado, operacion) VALUES(@pti_cod_rep, @pvc_descripcion, @pvc_nombre_proc, @pvc_proc_borrado, @pch_operacion)

    IF @pti_relacionado = 1 --2
		BEGIN
			IF NOT EXISTS (SELECT 1 FROM fco_reportes_cias WHERE compania = @pch_compania AND cod_rep = @pti_cod_rep)
					INSERT INTO fco_reportes_cias (compania, cod_rep) VALUES (@pch_compania, @pti_cod_rep)
		END        
    ELSE
       DELETE FROM fco_reportes_cias WHERE compania = @pch_compania AND cod_rep = @pti_cod_rep
    
END
GO
GRANT EXECUTE ON sp_fco_upd_reportes TO Public
go

GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_upd_reportes_aut]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_upd_reportes_aut
GO
CREATE PROCEDURE sp_fco_upd_reportes_aut
(
  @pch_compania char(4),
  @pti_cod_rep tinyint,
  @pti_relacionado tinyint,    
  @pvc_usuario varchar(30)
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: crea registros en las tablas fco_reportes_aut   ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Junio 8 de 2005                                      ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Septiembre 26/2005							***/
BEGIN

    IF @pti_relacionado = 1 --2
    BEGIN
      IF NOT EXISTS (SELECT 1 FROM fco_reportes_aut 
        						WHERE compania = @pch_compania AND cod_rep = @pti_cod_rep AND usuariow = @pvc_usuario)
         INSERT INTO fco_reportes_aut (cod_rep, compania, usuariow) VALUES (@pti_cod_rep, @pch_compania, @pvc_usuario)
    END
    ELSE
       DELETE FROM fco_reportes_aut WHERE compania = @pch_compania AND cod_rep = @pti_cod_rep AND usuariow = @pvc_usuario
    
END
GO
GRANT EXECUTE ON sp_fco_upd_reportes_aut TO Public
go

GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_upd_reportes_par]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_upd_reportes_par
GO
CREATE PROCEDURE dbo.sp_fco_upd_reportes_par
( @pti_cod_rep tinyint,
  @pnu_secuencia tinyint = NULL,
  @pnu_orden tinyint,
  @pvc_tit_campo varchar(40),
  @pnu_tipo_campo tinyint
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: crea registros en las tablas fco_reportes_par   ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                      ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Septiembre 25/2005							***/
DECLARE
  @vnu_secuencia tinyint
BEGIN

IF ISNULL(@pnu_secuencia,0) = 0 -- es un registro nuevo
BEGIN--1
		SELECT @vnu_secuencia = MAX(secuencia)
		FROM fco_reportes_par
		WHERE cod_rep = @pti_cod_rep;

		SET @vnu_secuencia = ISNULL(@vnu_secuencia,0) + 1;

    INSERT INTO fco_reportes_par (cod_rep, secuencia, orden, tit_campo, tipo_campo)
    VALUES (@pti_cod_rep, @vnu_secuencia, @pnu_orden, @pvc_tit_campo, @pnu_tipo_campo);
END--1
ELSE
BEGIN--2
     --revisando que el orden no exista ya en otra secuencia
     IF NOT EXISTS(SELECT 1 FROM fco_reportes_par
					        WHERE cod_rep = @pti_cod_rep
					        AND secuencia <> @pnu_secuencia
					        AND orden = @pnu_orden)
         UPDATE fco_reportes_par
         SET orden = @pnu_orden,
         tit_campo = @pvc_tit_campo,
         tipo_campo = @pnu_tipo_campo
         WHERE cod_rep = @pti_cod_rep
         AND secuencia = @pnu_secuencia
     ELSE
		 BEGIN
				RAISERROR('El valor del orden que digito ya existe en otro registro', 16, 1)
        RETURN
     END
END --2

END
GO
GRANT EXECUTE ON sp_fco_upd_reportes_par TO Public
go
IF OBJECT_ID('dbo.sp_fdt_del_rutas') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_del_rutas
GO
CREATE PROCEDURE dbo.sp_fdt_del_rutas
( 
    @pch_tipo_cod char(8),
    @pti_codigo tinyint,
    @psi_secuencia smallint,
    @pti_tipo tinyint
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: borra registros en las tablas fdt_rutas ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Abril 26 de 2005                                      ***/
/********************************************************************/
BEGIN
     DELETE fdt_rutas
     WHERE operacion = @pch_tipo_cod
     AND codigo = @pti_codigo
     AND tipo = @pti_tipo
     AND secuencia = @psi_secuencia
END
GO
GRANT EXECUTE ON dbo.sp_fdt_del_rutas TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_upd_rutas') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_upd_rutas
GO
CREATE PROCEDURE dbo.sp_fdt_upd_rutas
( 
    @pch_tipo_cod char(8),
    @pti_codigo tinyint,
    @psi_secuencia smallint,
    @pti_tipo tinyint,
    @pvc_archivo varchar(50),
    @pvc_ruta varchar(500),
    @pvc_tabla varchar(30)
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: crea registros en las tablas fdt_rutas          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Abril 26 de 2005                                      ***/
/********************************************************************/
BEGIN
    DECLARE @vsi_secuencia smallint

    IF ISNULL(@psi_secuencia,0) = 0 -- es un registro nuevo
    BEGIN    
        SELECT @vsi_secuencia = MAX(secuencia)
        FROM fdt_rutas
        WHERE operacion = @pch_tipo_cod
        AND codigo = @pti_codigo
        AND tipo = @pti_tipo
    
        SET @vsi_secuencia = ISNULL(@vsi_secuencia,0) + 1
    
        INSERT INTO fdt_rutas (operacion, codigo, tipo, secuencia, archivo, ruta, tabla)
        VALUES (@pch_tipo_cod ,@pti_codigo, @pti_tipo, @vsi_secuencia, @pvc_archivo, @pvc_ruta, @pvc_tabla)  
    END
    ELSE
        UPDATE fdt_rutas
        SET archivo = @pvc_archivo,
            ruta = @pvc_ruta,
            tabla = @pvc_tabla
        WHERE operacion = @pch_tipo_cod
          AND codigo = @pti_codigo
          AND tipo = @pti_tipo
          AND secuencia = @psi_secuencia    
END
GO
GRANT EXECUTE ON sp_fdt_upd_rutas TO PUBLIC
GO
PRINT 'Definición de Reportes Varios... OK'
GO
IF OBJECT_ID('dbo.fco_ausentismos') IS NULL
CREATE TABLE dbo.fco_ausentismos
(
    compania        char(4) NOT NULL,
    id_ausentismo   int NOT NULL,
    trabajador      char(10) NOT NULL,
    concepto        smallint NOT NULL,
    tipo            tinyint NOT NULL,
    fecha_inicio    smalldatetime,
    fecha_causacion smalldatetime,
    fecha_pago      smalldatetime,
    fecha_fin       smalldatetime,
    dias            smallint,
    tipo_dias       tinyint,
    diagnostico     varchar(5),
    observaciones   varchar(1000),
    id_origen       int,
    valor_ibc       decimal(19, 6),
    calculo_ibc     tinyint,
    fecha_registro  smalldatetime NOT NULL DEFAULT GETDATE(),
    usuario_registro varchar(30) NOT NULL DEFAULT SYSTEM_USER,
    CONSTRAINT PK_fco_ausentismos PRIMARY KEY
    (compania, id_ausentismo)
)
GO
GRANT ALL ON fco_ausentismos TO PUBLIC
GO

IF OBJECT_ID('dbo.fco_ausentismos_historico') IS NULL
CREATE TABLE dbo.fco_ausentismos_historico
(
  compania        char(4) NOT NULL,
  id_ausentismo   int NOT NULL,
  trabajador      char(10) NOT NULL,
  concepto        smallint NOT NULL,
  tipo            tinyint NOT NULL,
  fecha_inicio    smalldatetime,
  fecha_causacion smalldatetime,
  fecha_pago      smalldatetime,
  fecha_fin       smalldatetime,
  dias            smallint,
  tipo_dias       tinyint,
  diagnostico     varchar(5),
  observaciones   varchar(1000),
  id_origen       int,
  valor_ibc       decimal(19, 6),
  calculo_ibc     tinyint,
  fecha_registro  smalldatetime NOT NULL DEFAULT GETDATE(),
  usuario_registro varchar(30) NOT NULL DEFAULT SYSTEM_USER,
  CONSTRAINT PK_fco_ausentismos_historico PRIMARY KEY
  (compania, id_ausentismo)
)
GO
GRANT ALL ON fco_ausentismos_historico TO PUBLIC
GO
IF OBJECT_ID('dbo.fco_ausentismos_IBC') IS NULL
CREATE TABLE dbo.fco_ausentismos_IBC
(id_rep smallint NOT NULL,
 usuariow varchar(30) NOT NULL,
 compania char(4) NOT NULL,
 trabajador char(10) NOT NULL,
 concepto smallint NOT NULL,
 valor_ibc decimal(19,6) NOT NULL
)
GO
GRANT ALL ON fco_ausentismos_IBC TO PUBLIC
GO
IF OBJECT_ID('dbo.fco_ausentismos_id') IS NULL
CREATE TABLE dbo.fco_ausentismos_id
(
    compania        char(4) NOT NULL,
    id_ausentismo   int NOT NULL,
    CONSTRAINT PK_fco_ausentismos_id PRIMARY KEY
    (compania, id_ausentismo)
)
GO
GRANT ALL ON fco_ausentismos_id TO PUBLIC
GO
IF (SELECT COUNT(*) FROM fco_ausentismos_id) = 0
    INSERT INTO fco_ausentismos_id 
    SELECT compania, 0 FROM companias;
GO
IF OBJECT_ID('dbo.fco_ausentismos_id_as') IS NULL
CREATE TABLE dbo.fco_ausentismos_id_as 
(clave smallint NOT NULL, 
 id_ausentismo int NOT NULL
)
GO
GRANT ALL ON fco_ausentismos_id_as TO PUBLIC
GO
IF OBJECT_ID('dbo.fco_diagnosticos') IS NULL
CREATE TABLE dbo.fco_diagnosticos
(
  diagnostico    varchar(5) NOT NULL,
  descripcion    varchar(255) NOT NULL,
  CONSTRAINT PK_fco_diagnosticos PRIMARY KEY (diagnostico)
)
GO
GRANT ALL ON fco_diagnosticos TO PUBLIC
GO
IF OBJECT_ID('dbo.fco_tmpfechafin') IS NOT NULL
    DROP TABLE dbo.fco_tmpfechafin 
GO
CREATE TABLE dbo.fco_tmpfechafin
(fecha smalldatetime
)
GO
GRANT ALL ON fco_tmpfechafin TO PUBLIC
GO
IF OBJECT_ID('dbo.fn_acum_imp_rango_meses') IS NOT NULL
    DROP FUNCTION dbo.fn_acum_imp_rango_meses
GO
CREATE FUNCTION dbo.fn_acum_imp_rango_meses
(
    @pch_compania char(4),
    @pch_trabajador char(10),
    @pch_agr_cnc char(3),
    @pnu_anio_ini smallint,
    @pnu_mes_ini tinyint,
    @pnu_anio_fin smallint,
    @pnu_mes_fin tinyint
)
RETURNS decimal(19,6)
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: Retorna el valor de una agrupacion de acumulados***/
/*** mensuales                                                    ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Junio 23 de 2005                                      ***/
/********************************************************************/
--OCT-02-05: DCR, Pasada a SQL de Oracle
--OCT-10-05: DCR, Funcionaba entre dos años, o para el mismo año comenzando en enero, mas no para el mismo
--año, con mes de inicio diferente a enero, Ej. de marzo a agosto de 2003, estaba tomando de enero a agosto de 2003
AS
BEGIN
DECLARE
  @vnu_imp_01 decimal(19,6),
  @vnu_imp_02 decimal(19,6),
  @vnu_imp_03 decimal(19,6),
  @vnu_imp_04 decimal(19,6),
  @vnu_imp_05 decimal(19,6),
  @vnu_imp_06 decimal(19,6),
  @vnu_imp_07 decimal(19,6),
  @vnu_imp_08 decimal(19,6),
  @vnu_imp_09 decimal(19,6),
  @vnu_imp_10 decimal(19,6),
  @vnu_imp_11 decimal(19,6),
  @vnu_imp_12 decimal(19,6),                      
  @vnu_acumula decimal(19,6),
  @vnu_acumula2 decimal(19,6),
  @vdc_importe decimal(19,6)
  
     --hallando el año final
     SET @vnu_acumula = 0
     SET @vnu_acumula2 = 0
     SET @vdc_importe = 0
     
     SET @vnu_imp_01 = 0
     SET @vnu_imp_02 = 0
     SET @vnu_imp_03 = 0
     SET @vnu_imp_04 = 0
     SET @vnu_imp_05 = 0
     SET @vnu_imp_06 = 0
     SET @vnu_imp_07 = 0
     SET @vnu_imp_08 = 0
     SET @vnu_imp_09 = 0
     SET @vnu_imp_10 = 0
     SET @vnu_imp_11 = 0
     SET @vnu_imp_12 = 0

			SELECT @vnu_imp_01 = am.acum_imp_mes_01, 
			@vnu_imp_02 = am.acum_imp_mes_02, 
			@vnu_imp_03 = am.acum_imp_mes_03, 
			@vnu_imp_04 = am.acum_imp_mes_04,
			@vnu_imp_05 = am.acum_imp_mes_05, 
			@vnu_imp_06 = am.acum_imp_mes_06, 
			@vnu_imp_07 = am.acum_imp_mes_07, 
			@vnu_imp_08 = am.acum_imp_mes_08,
			@vnu_imp_09 = am.acum_imp_mes_09, 
			@vnu_imp_10 = am.acum_imp_mes_10, 
			@vnu_imp_11 = am.acum_imp_mes_11, 
			@vnu_imp_12 = am.acum_imp_mes_12
			FROM acumulados_mensuales am
			WHERE compania = @pch_compania
			AND trabajador = @pch_trabajador
			AND agr_conceptos = @pch_agr_cnc
			AND anio = @pnu_anio_fin

     IF @pnu_mes_fin >= 1
        SET @vnu_acumula = @vnu_imp_01

     IF @pnu_mes_fin >= 2
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_02
     
     IF @pnu_mes_fin >= 3
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_03

     IF @pnu_mes_fin >= 4
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_04

     IF @pnu_mes_fin >= 5
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_05

     IF @pnu_mes_fin >= 6
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_06

     IF @pnu_mes_fin >= 7
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_07

     IF @pnu_mes_fin >= 8
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_08

     IF @pnu_mes_fin >= 9
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_09

     IF @pnu_mes_fin >= 10
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_10
     
     IF @pnu_mes_fin >= 11
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_11
     
     IF @pnu_mes_fin >= 12
        SET @vnu_acumula = @vnu_acumula + @vnu_imp_12
  
		 --hallamos de enero hasta el mes inicial, sin contar el inicial, para luego restarlo
     IF (@pnu_anio_fin = @pnu_anio_ini)
		 BEGIN  --año igual
		     IF @pnu_mes_ini > 1
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_01
		
		     IF @pnu_mes_ini > 2
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_02
		     
		     IF @pnu_mes_ini > 3
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_03
		
		     IF @pnu_mes_ini > 4
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_04
		
		     IF @pnu_mes_ini > 5
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_05
		
		     IF @pnu_mes_ini > 6
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_06
		
		     IF @pnu_mes_ini > 7
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_07
		
		     IF @pnu_mes_ini > 8
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_08
		
		     IF @pnu_mes_ini > 9
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_09
		
		     IF @pnu_mes_ini > 10
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_10
		     
		     IF @pnu_mes_ini > 11
		        SET @vnu_acumula = @vnu_acumula - @vnu_imp_11		     
		 END --año igual

     IF (@pnu_anio_fin > @pnu_anio_ini)
		 BEGIN--otro año
       SET @vnu_imp_01 = 0
       SET @vnu_imp_02 = 0
       SET @vnu_imp_03 = 0
       SET @vnu_imp_04 = 0
       SET @vnu_imp_05 = 0
       SET @vnu_imp_06 = 0
       SET @vnu_imp_07 = 0
       SET @vnu_imp_08 = 0
       SET @vnu_imp_09 = 0
       SET @vnu_imp_10 = 0
       SET @vnu_imp_11 = 0
       SET @vnu_imp_12 = 0

			SELECT @vnu_imp_01 = am.acum_imp_mes_01, 
			@vnu_imp_02 = am.acum_imp_mes_02, 
			@vnu_imp_03 = am.acum_imp_mes_03, 
			@vnu_imp_04 = am.acum_imp_mes_04,
			@vnu_imp_05 = am.acum_imp_mes_05, 
			@vnu_imp_06 = am.acum_imp_mes_06, 
			@vnu_imp_07 = am.acum_imp_mes_07, 
			@vnu_imp_08 = am.acum_imp_mes_08,
			@vnu_imp_09 = am.acum_imp_mes_09, 
			@vnu_imp_10 = am.acum_imp_mes_10, 
			@vnu_imp_11 = am.acum_imp_mes_11, 
			@vnu_imp_12 = am.acum_imp_mes_12
			FROM acumulados_mensuales am
			WHERE compania = @pch_compania
			AND trabajador = @pch_trabajador
			AND agr_conceptos = @pch_agr_cnc
			AND anio = @pnu_anio_ini        
            
       IF @pnu_mes_ini <= 1
          SET @vnu_acumula2 = @vnu_imp_01
  
       IF @pnu_mes_ini <= 2
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_02
       
       IF @pnu_mes_ini <= 3
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_03
  
       IF @pnu_mes_ini <= 4
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_04
  
       IF @pnu_mes_ini <= 5
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_05
  
       IF @pnu_mes_ini <= 6
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_06
  
       IF @pnu_mes_ini <= 7
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_07
  
       IF @pnu_mes_ini <= 8
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_08
  
       IF @pnu_mes_ini <= 9
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_09
  
       IF @pnu_mes_ini <= 10
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_10
       
       IF @pnu_mes_ini <= 11
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_11
       
       IF @pnu_mes_ini <= 12
          SET @vnu_acumula2 = @vnu_acumula2 + @vnu_imp_12
     END--otro año

     SET @vdc_importe = ISNULL(@vnu_acumula,0) + ISNULL(@vnu_acumula2,0)
     RETURN @vdc_importe
END
GO
GRANT EXECUTE ON dbo.fn_acum_imp_rango_meses TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_ausentismos_IBC]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_ausentismos_IBC
GO
CREATE PROCEDURE dbo.sp_fco_ausentismos_IBC
(
  @psi_id_rep  smallint,
  @pvc_usuariow varchar(30),      
  @pch_compania   char(4),
  @pch_trabajador char(10),
  @pnu_concepto smallint,
  @pdt_fec_ini char(8),
  @pnu_tipo_ibc tinyint,
  @pin_id_orig int = NULL
)
AS
/*********************************************************************/
/*** Modulo:      Modulo Fiscal ADAM v3 - Embargos                 ***/
/*** Descripcion: Calcula el IBC para registro de ausentismos      ***/
/*** Autor:	  Diana C. Rios Peinado                                ***/
/*** Fecha:	  Junio 22 de 2004                                     ***/
/*** Motor:	  oracle 8i		Version interna: 1.0                     ***/
/*********************************************************************/
--OCT-02-05: DCR, Pasada a SQL de Oracle
DECLARE
  @vnu_ibc decimal(19,6),
  @vnu_mes tinyint,
  @vnu_anio smallint,
  @vvc_parametro varchar(10),
  @vch_agr_cnc char(3),

  @vdt_fec_ing smalldatetime,  
  @vnu_anio_ini smallint,
  @vnu_anio_fin smallint,
  @vnu_mes_ini tinyint,
  @vnu_mes_fin tinyint,
  @vnu_meses_corte tinyint,  
  @vnu_promedio smallint,  
  @vnu_dif_meses smallint,
  @vnu_dif_anios smallint,

  @vnu_acumula decimal(19,6)
  
BEGIN
  SET @vnu_mes =  CONVERT(tinyint, SUBSTRING(@pdt_fec_ini, 5, 2))
  SET @vnu_anio = CONVERT(smallint, SUBSTRING(@pdt_fec_ini, 1, 4))
  --trayendo los parametros que se requieren. En esta interfase, necesitamos el concepto
  SET @vvc_parametro = 'autoliq'
  
  --Agr de conceptos S16, IBC de salud
	SET @vch_agr_cnc = '0'
	SELECT @vch_agr_cnc = dato
	FROM vw_fdt_parametros
	WHERE pais = 'COL'
	AND compania = @pch_compania
	AND LTRIM(RTRIM(parametro)) = LTRIM(RTRIM(@vvc_parametro))
	AND secuencia = 16

  IF @pnu_tipo_ibc = 1 --Basico
	BEGIN--1
		SET @vnu_ibc = 0
		
		SELECT @vnu_ibc = a.salario
		FROM historico_sueldos a                      
		WHERE
		    a.compania = @pch_compania AND
		    a.trabajador = @pch_trabajador AND
		    a.fecha = (select max(fecha) from historico_sueldos b
		               where a.compania = b.compania AND
		                     a.trabajador = b.trabajador AND
		                     b.fecha < @pdt_fec_ini) AND
		    a.secuencia = (select max(secuencia) from historico_sueldos c
		                   where a.compania = c.compania AND
		                         a.trabajador = c.trabajador AND
		                         c.fecha < @pdt_fec_ini)

  END--1
  
  IF @pnu_tipo_ibc = 2   --ibc del mes anterior de la fecha de inicio
	BEGIN--2
     IF @vnu_mes = 1 
		 BEGIN
        SET @vnu_mes = 12
        SET @vnu_anio = @vnu_anio - 1
		 END
     ELSE
        SET @vnu_mes = @vnu_mes - 1
     
		SET @vnu_ibc = 0
		
		SELECT @vnu_ibc = SUM(CASE @vnu_mes WHEN 1 THEN a.acum_imp_mes_01
																        WHEN 2 THEN a.acum_imp_mes_02
																        WHEN 3 THEN a.acum_imp_mes_03
																        WHEN 4 THEN a.acum_imp_mes_04
																        WHEN 5 THEN a.acum_imp_mes_05
																        WHEN 6 THEN a.acum_imp_mes_06
																        WHEN 7 THEN a.acum_imp_mes_07
																        WHEN 8 THEN a.acum_imp_mes_08
																        WHEN 9 THEN a.acum_imp_mes_09
																        WHEN 10 THEN a.acum_imp_mes_10
																        WHEN 11 THEN a.acum_imp_mes_11
																        WHEN 12 THEN a.acum_imp_mes_12 END)
		FROM acumulados_mensuales a
		WHERE compania = @pch_compania
		AND trabajador = @pch_trabajador
		AND agr_conceptos = @vch_agr_cnc
		AND anio = @vnu_anio      
  END--2
  
  IF @pnu_tipo_ibc = 3  -- buscar el ibc del id_origen
	BEGIN--3
		SET @vnu_ibc = 0
		SELECT @vnu_ibc = valor_ibc
		FROM fco_ausentismos
		WHERE compania = @pch_compania
		AND id_ausentismo = @pin_id_orig
		AND trabajador = @pch_trabajador
		AND concepto = @pnu_concepto
  END--3

  IF @pnu_tipo_ibc = 4   --los ultimos 12 meses, de la agrupacion IBC.
	BEGIN--4
     SET @vnu_meses_corte = 12
     SET @vnu_promedio = @vnu_meses_corte
  
     --hallando la fecha de ingreso del trabajador
			SET @vdt_fec_ing = ''
			
			SELECT @vdt_fec_ing = fecha_ingreso
			FROM trabajadores_grales
			WHERE compania = @pch_compania
			AND trabajador = @pch_trabajador

     --hallando el año de ingreso y la fecha de ingreso
     SET @vnu_anio_ini = DATEPART(YEAR, @vdt_fec_ing)
     SET @vnu_mes_ini = DATEPART(MONTH, @vdt_fec_ing)
        
     IF @vnu_mes = 1
		 BEGIN
        SET @vnu_mes = 12
        SET @vnu_anio = @vnu_anio - 1
		 END
     ELSE
        SET @vnu_mes = @vnu_mes - 1

     SET @vnu_anio_fin = @vnu_anio
     SET @vnu_mes_fin = @vnu_mes
     
     SET @vnu_dif_meses = ISNULL(@vnu_mes_fin,0) - ISNULL(@vnu_mes_ini,0)
     SET @vnu_dif_anios = ISNULL(@vnu_anio_fin,0) - ISNULL(@vnu_anio_ini,0)
     IF @vnu_dif_meses > 0 
        SET @vnu_promedio = @vnu_dif_meses+1
     ELSE
        SET @vnu_promedio = (ISNULL(@vnu_mes_ini,0) - ISNULL(@vnu_mes_fin,0))+1

     IF @vnu_dif_anios > 1
		 BEGIN
        SET @vnu_anio_ini = @vnu_anio - 1
        SET @vnu_mes_ini = @vnu_mes_fin + 1
        SET @vnu_promedio = 12
		 END
     ELSE
		 BEGIN
				IF @vnu_dif_anios = 1
				BEGIN
           IF @vnu_dif_meses >= 0 --mas de 12 meses
					 BEGIN	
              SET @vnu_promedio = 12
              SET @vnu_mes_ini = @vnu_mes_fin + 1
           END
				END
     END 
   
     --hallando valor acumulado
			SET @vnu_acumula = 0
			SELECT @vnu_acumula = dbo.fn_acum_imp_rango_meses(@pch_compania, @pch_trabajador, @vch_agr_cnc, @vnu_anio_ini, @vnu_mes_ini, @vnu_anio_fin, @vnu_mes_fin)
			   
			SET @vnu_ibc = ISNULL(@vnu_acumula,0)/ ISNULL(@vnu_promedio,0)
     
  END--4
  
  DELETE fco_ausentismos_IBC
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuariow
    
  --insertando en la tabla
  INSERT INTO fco_ausentismos_IBC
  VALUES (@psi_id_rep, @pvc_usuariow, @pch_compania, @pch_trabajador, @pnu_concepto, ROUND(@vnu_ibc,0))
    
END
GO
GRANT EXECUTE ON sp_fco_ausentismos_IBC TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_baja_ausentismos]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_baja_ausentismos
GO
CREATE PROCEDURE dbo.sp_fco_baja_ausentismos
(
    @pch_compania    char(4),
    @pin_id_ausentismo  int
)
AS
BEGIN
    INSERT INTO fco_ausentismos_historico
    (compania, id_ausentismo, trabajador, concepto, tipo, fecha_inicio, fecha_causacion, fecha_pago, fecha_fin, dias, 
     tipo_dias, diagnostico, observaciones, id_origen, valor_ibc, calculo_ibc)
    SELECT compania, id_ausentismo, trabajador, concepto, tipo, fecha_inicio, fecha_causacion, fecha_pago, fecha_fin, dias, 
     tipo_dias, diagnostico, observaciones, id_origen, valor_ibc, calculo_ibc FROM fco_ausentismos
    WHERE compania = @pch_compania And 
          id_ausentismo = @pin_id_ausentismo

    DELETE fco_ausentismos
    WHERE compania = @pch_compania And 
          id_ausentismo = @pin_id_ausentismo

    IF @@ERROR <> 0 
        RAISERROR 206800 'Error al eliminar el registro de la tabla [fco_ausentismos]'
END
GO
GRANT EXECUTE ON sp_fco_baja_ausentismos TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_crea_ausentismo]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_crea_ausentismo
GO
CREATE PROCEDURE dbo.sp_fco_crea_ausentismo
(
    @pch_compania char(4),
    @pin_id_ausentismo int,
    @pch_trabajador char(10),
    @psi_concepto smallint,
    @pti_tipo tinyint,
    @pdt_inicio smalldatetime,
    @pdt_causacion smalldatetime,
    @pdt_pago smalldatetime,
    @pdt_fin smalldatetime,
    @psi_dias smallint,
    @pti_tipo_dias tinyint,
    @pvc_diagnostico varchar(5),
    @pvc_observaciones varchar(1000),
    @psi_randomico smallint,
    @pin_prorroga  int,  --agregado DCRP Agosto25/2003. Puede venir nulo
    @pde_valor_ibc  decimal(19,6),
    @pti_calculo_ibc decimal(19,6)
)
AS
DECLARE
    @vin_id_ausentismo int
BEGIN

    IF @pti_tipo = 4  --PRORROGA 
		BEGIN
			 IF NOT EXISTS(SELECT 1 
					          FROM fco_ausentismos
					          WHERE compania = @pch_compania   AND
					          trabajador = @pch_trabajador AND
					          id_ausentismo = @pin_prorroga AND
					          concepto = @psi_concepto AND
					          tipo <> 4)
			 BEGIN
					RAISERROR 206800 'El registro a prorrogarar en [FCO_AUSENTISMOS] no existe.'
          RETURN;
       END
    END

    IF @psi_randomico = 0 --UPDATE
        UPDATE fco_ausentismos
        SET concepto = @psi_concepto,
            tipo = @pti_tipo,
            fecha_inicio = @pdt_inicio,
            fecha_causacion = @pdt_causacion,
            fecha_pago = @pdt_pago,
            fecha_fin = @pdt_fin,
            dias = @psi_dias,
            tipo_dias = @pti_tipo_dias,
            diagnostico = @pvc_diagnostico,
            observaciones = @pvc_observaciones,
            id_origen = @pin_prorroga,
            valor_ibc = @pde_valor_ibc,
            calculo_ibc = @pti_calculo_ibc            
        WHERE
            compania = @pch_compania And
            id_ausentismo = @pin_id_ausentismo
    ELSE
    BEGIN
        BEGIN TRAN

        SELECT @vin_id_ausentismo = IsNull(id_ausentismo,0) + 1     
        FROM fco_ausentismos_id
        WHERE compania = @pch_compania

        IF IsNull(@vin_id_ausentismo, 0) = 0
        BEGIN
            SET @vin_id_ausentismo = 1
            INSERT INTO fco_ausentismos_id VALUES (@pch_compania, 1)
        END
        ELSE        
            UPDATE fco_ausentismos_id
            SET id_ausentismo = @vin_id_ausentismo
            WHERE compania = @pch_compania
        

        INSERT INTO fco_ausentismos 
        (compania, id_ausentismo, trabajador, concepto, tipo, fecha_inicio, fecha_causacion, fecha_pago, fecha_fin, dias, tipo_dias, diagnostico, observaciones, id_origen, valor_ibc, calculo_ibc)
        VALUES
        (
            @pch_compania,
            @vin_id_ausentismo,
            @pch_trabajador,
            @psi_concepto,
            @pti_tipo,
            @pdt_inicio,
            @pdt_causacion,
            @pdt_pago,
            @pdt_fin,
            @psi_dias,
            @pti_tipo_dias,
            @pvc_diagnostico,
            @pvc_observaciones,
            @pin_prorroga,
            @pde_valor_ibc,
            @pti_calculo_ibc
        )

        DELETE fco_ausentismos_id_as
        COMMIT TRAN        

        INSERT INTO fco_ausentismos_id_as VALUES (@psi_randomico, @vin_id_ausentismo)

    END
END
GO
GRANT EXECUTE ON sp_fco_crea_ausentismo TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_del_diagnosticos]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_del_diagnosticos
GO
CREATE PROCEDURE dbo.sp_fco_del_diagnosticos
(
    @pvc_diagnostico varchar(5)
)
AS
BEGIN
    DELETE fco_diagnosticos 
    WHERE diagnostico = @pvc_diagnostico
END

GO
GRANT EXECUTE ON sp_fco_del_diagnosticos TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_hallar_final_habil]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_hallar_final_habil
GO
CREATE PROCEDURE sp_fco_hallar_final_habil
    @compania            CHAR(04)      = '', 
    @trabajador          CHAR(10)      = '',
    @fecha_inicial   DATETIME    = '',
    @dias     SMALLINT      = 0
AS
BEGIN
DECLARE @i                 SMALLINT,
        @dia_lab_prog      TINYINT,
        @rel_lab_par       VARCHAR(20),
        @dato              CHAR(10),
        @ndias_periodo     DATETIME,
        @numero_dia        TINYINT,
        @no_habiles        TINYINT,
        @fecha_ini_per2    DATETIME,
        @agrupacion        VARCHAR(20),
        @agrupacion2       CHAR(10),
	@fecha_final	   DATETIME

   SELECT @i               = 0
   SELECT @dia_lab_prog    = 0
   SELECT @rel_lab_par     = ''
   SELECT @dato            = ''
   SELECT @ndias_periodo   = ''

   SELECT @no_habiles      = 0
   SELECT @fecha_ini_per2  = ''
   SELECT @agrupacion      = ''
   SELECT @agrupacion2     = ''
   

 BEGIN
    DECLARE cur_agrupacion_rh CURSOR
     FOR SELECT LTRIM(RTRIM(alfanumerico)) FROM parametros_rh
          WHERE compania = @compania AND
            parametro_rh = 'Ag_Dias_NL'

    OPEN cur_agrupacion_rh 
    FETCH cur_agrupacion_rh  INTO @agrupacion

   WHILE @@FETCH_STATUS = 0
    BEGIN
     
     SELECT @agrupacion2 = LTRIM(RTRIM(@agrupacion))
     SELECT @dato = ''
  
     SELECT @ndias_periodo   = ''
     SELECT @numero_dia = 0

   IF NOT ((@agrupacion2 = '') OR (@agrupacion2 IS NULL))
    BEGIN
      SELECT @dato = dato
        FROM rel_trab_agr
       WHERE compania = @compania   AND
           trabajador = @trabajador AND
           agrupacion = @agrupacion2
   END
  ELSE
   BEGIN
     SELECT @dato = ''
   END
         
   SELECT @i = 1
   SELECT @no_habiles = 0
   SELECT @fecha_ini_per2 = DATEADD(dd,-1,@fecha_inicial)          
   
  WHILE  (@no_habiles < @dias)
    BEGIN  /* BEGIN WHILE  */
      SELECT @ndias_periodo = DATEADD(dd,@i,@fecha_ini_per2)          
      SELECT @numero_dia = DATEPART(dw,@ndias_periodo) 

      IF NOT ((@numero_dia = 1) OR (@numero_dia = 7))       
       BEGIN
         
             IF NOT EXISTS(SELECT 1 FROM dias_no_laborables 
                            WHERE compania   = @compania   AND
                                  dato       = @dato       AND
                                  fecha      = @ndias_periodo )
               BEGIN 
                SELECT @no_habiles = @no_habiles + 1
               END
             END       
          
      SELECT @i = @i + 1
  END    /* END WHILE */      

FETCH cur_agrupacion_rh  INTO @agrupacion
END /* END WHILE @@FETCH_STATUS */

  CLOSE cur_agrupacion_rh
  DEALLOCATE cur_agrupacion_rh

END
  DELETE fco_tmpfechafin
  SELECT @fecha_final = CONVERT(DATETIME,@ndias_periodo) 
  INSERT INTO fco_tmpfechafin VALUES (@fecha_final)
END


GO
GRANT EXECUTE ON sp_fco_hallar_final_habil TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_incorpora_ausentismos]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_incorpora_ausentismos
GO
CREATE PROCEDURE dbo.sp_fco_incorpora_ausentismos
(
    @pch_compania        char(4),
    @psi_id_calendario   smallint,
    @pch_clase_nomina    char(2),
    @pch_trabajador      char(10),
    @pvc_usuario         varchar(30),
    @pdt_fecha_hoy       smalldatetime
)
AS
/*********************************************************************/
/*** Modulo:      Modulo Fiscal ADAM v3 - Embargos                 ***/
/*** Descripcion: Incorpora embargos a la nómina                   ***/
/*** Autor:	  Juan Carlos Leguizamon                           ***/
/*** Fecha:	  Junio 17 de 2002                                 ***/
/*** Revision:	  Agosto 2 de 2002                                 ***/
/*** Motor:	  SQL Server 7.0	Version interna: 1.0       ***/
/*********************************************************************/
DECLARE
    @cin_id_au         int,
    @cch_trabajador    char(10),
    @csi_concepto      smallint,
    @cti_tipo          tinyint,
    @cdt_inicio_au     smalldatetime,
    @cdt_fin_au        smalldatetime,
    @csi_dias          smallint,
    @cti_tipo_dias     tinyint,

    @vdt_inicio_per    smalldatetime,
    @vdt_fin_per       smalldatetime,
    @vdt_inicio        smalldatetime, /* Fecha inicio del ausentismo dentro del periodo */
    @vdt_fin           smalldatetime, /* Fecha fin del ausentismo dentro del periodo */

    @vnm_tiempo        decimal(8,3),
    @vti_prorroga      tinyint,

    @vnu_valor_ibc     decimal(19,6),
    @vnu_ibc           decimal(19,6)

BEGIN
    /* Eliminar las transacciones ya generadas por este incorpora */
    DELETE
        transacciones_ns
    WHERE
        compania = @pch_compania And
        clase_nomina = @pch_clase_nomina And
        id_calendario = @psi_id_calendario And
        referencia = 'Ausentismo' And
        (
         (trabajador = @pch_trabajador And IsNull(LTrim(RTrim(@pch_trabajador)), '') <> '') OR
         (IsNull(LTrim(RTrim(@pch_trabajador)), '') = '')
        )

    /* Recuperar las fechas del periodo */
    SELECT
        @vdt_inicio_per = fecha_inicio, 
        @vdt_fin_per = fecha_termino
    FROM
        calendario_procesos
    WHERE
        id_calendario = @psi_id_calendario;

    IF @pch_clase_nomina <> 'PL' and @pch_compania <> 'GRAS'
    BEGIN
        SET DATEFORMAT dmy
        IF Day(@vdt_fin_per) >= 28  
            SET @vdt_fin_per = Convert(Smalldatetime, 
                '30/' + RTrim(Month(@vdt_fin_per)) + '/' + RTrim(Year(@vdt_fin_per)))
    END

    /* Recorrer los ausentismos del periodo */
    DECLARE cr_ausentismos CURSOR FOR
    SELECT
        au.id_ausentismo, au.trabajador, au.concepto, au.tipo,
        au.fecha_inicio, au.fecha_fin, au.dias, au.tipo_dias, au.valor_ibc
    FROM
        fco_ausentismos au, trabajadores_grales tg
    WHERE
			au.compania = tg.compania And au.trabajador = tg.trabajador And
			au.compania = @pch_compania And
			tg.clase_nomina = @pch_clase_nomina And
			tg.sit_trabajador = 1 And
			au.fecha_fin >= @vdt_inicio_per  And
			(
			(au.trabajador = @pch_trabajador 
			And IsNull(LTrim(RTrim(@pch_trabajador)), '') <> '') OR
			(IsNull(LTrim(RTrim(@pch_trabajador)), '') = ''  )
			)

    OPEN cr_ausentismos
    FETCH NEXT FROM cr_ausentismos
    INTO @cin_id_au, @cch_trabajador, @csi_concepto, @cti_tipo,
         @cdt_inicio_au, @cdt_fin_au, @csi_dias, @cti_tipo_dias, @vnu_valor_ibc

    WHILE @@Fetch_Status = 0
    BEGIN

        /* Hallar si es prorroga o no */
        SET @vti_prorroga = 0
        IF @cti_tipo = 4 SET @vti_prorroga = 1

        /* Calcular las fechas del ausentismo en el periodo */
        IF @cdt_inicio_au < @vdt_inicio_per
            SET @vdt_inicio = @vdt_inicio_per
        ELSE
            SET @vdt_inicio = @cdt_inicio_au

        IF @cdt_fin_au > @vdt_fin_per
            SET @vdt_fin = @vdt_fin_per
        ELSE
            SET @vdt_fin = @cdt_fin_au

        /* Hallar el numero de dias del ausentismo para el periodo */
        SET @vnm_tiempo = Datediff(dd, @vdt_inicio, @vdt_fin) + 1

	IF @vnm_tiempo > 0 
        EXECUTE sp_alta_transacciones_ns
            @pch_compania,
            @pch_clase_nomina,
            @psi_id_calendario,
            @csi_concepto,
            @cch_trabajador,
            'Ausentismo',       /* referencia */
            NULL,               /* secuencia */
            '',	                /* referencia2 */
            @pdt_fecha_hoy,	/* fecha */
            @pdt_fecha_hoy,    	/* fecha2*/
            @vnm_tiempo,         /* tiempo */
            @cin_id_au,          /* factor_01 */
            @cti_tipo,           /* factor_02 */
            @vti_prorroga,       /* factor_03 */
            0,       		/* importe_reportado */
            @vnu_ibc, --0,       		/* importe */
            null,    		/* turno_trn */
            null,    		/* puesto_trn */
            null,    		/* agrupacion_01_trn */
            null,    		/* dato_01_trn */
            null,    		/* agrupacion_02_trn */
            null,    		/* dato_02_trn */
            null,    		/* agrupacion_03_trn */
            null,    		/* dato_03_trn */
            null,    		/* agrupacion_04_trn */
            null,    		/* dato_04_trn */
            1,    		/* origen_transaccion */
            @pvc_usuario, 	/* usuario_registro */
            @pdt_fecha_hoy,	/* fecha_registro */
            null,    		/* usuario_proceso */
            null,		/* fecha_proceso */
            null,    		/* usuario_cambio */
            null,    		/* fecha_cambio */
            1,    		/* sit_transaccion */
            1		        /* checa bajas del periodo */

        FETCH NEXT FROM cr_ausentismos
        INTO @cin_id_au, @cch_trabajador, @csi_concepto, @cti_tipo,
             @cdt_inicio_au, @cdt_fin_au, @csi_dias, @cti_tipo_dias, @vnu_valor_ibc
    END /* BEGIN BAJO EL WHILE */

    CLOSE cr_ausentismos
    DEALLOCATE cr_ausentismos
END

GO
GRANT EXECUTE ON sp_fco_incorpora_ausentismos TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_upd_diagnosticos]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_upd_diagnosticos
GO
CREATE PROCEDURE dbo.sp_fco_upd_diagnosticos
(
    @pvc_diagnostico varchar(5),
    @pvc_descripcion varchar(255)
)
AS
    DECLARE @vti_existe tinyint
BEGIN

    SET @vti_existe = 0


    SELECT @vti_existe = 1 
    FROM fco_diagnosticos
    WHERE diagnostico = @pvc_diagnostico

    IF @vti_existe = 1 
        UPDATE fco_diagnosticos 
        SET descripcion = @pvc_descripcion
        WHERE diagnostico = @pvc_diagnostico
    ELSE
        INSERT INTO fco_diagnosticos (diagnostico, descripcion)
        VALUES (@pvc_diagnostico, @pvc_descripcion)
END

GO
GRANT EXECUTE ON sp_fco_upd_diagnosticos TO Public
GO
IF OBJECT_ID('dbo.sp_fco_cierre_ausentismos_ns') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_cierre_ausentismos_ns
GO
CREATE PROCEDURE dbo.sp_fco_cierre_ausentismos_ns
(  
    @pch_compania      char(4),  
    @psi_id_calendario smallint  
)  
/*********************************************************************/  
/*** Modulo:      Ausentismos                                        ***/  
/*** Descripcion: Actualiza El valor del IBC con el cual se pago   ***/  
/***              la Incapcidad                                   ***/  
/***                               ***/  
/*** Autor:   Silvia Cortes                           ***/  
/*** Fecha:   Noviembre 12 2003                                   ***/  
/*** Motor:   SQL Server 7.0 Version interna: 1.00      ***/  
/*********************************************************************/  
AS  
DECLARE  
    @cdc_compania      char(4),  
    @cdc_id_ausentismo int,  
    @cdc_importe          DECIMAL(13,2),  
    @cdc_tiempo  DECIMAL(8,3),  
    @cdc_fecha  SMALLDATETIME,  
    @cdc_fecha2  SMALLDATETIME,  
    @cdc_trabajador    char(10),  
    @cdc_concepto      smallint,  
    @cdc_factor       decimal (19,6),  
    @cdc_factor_02    decimal (19,6),  
    @cdc_factor_03    decimal (19,6)  
  
  
  
BEGIN  
  
    DECLARE cr_trans1  CURSOR FOR  
     SELECT importe, tiempo, fecha, factor_01, factor_02, factor_03,   
concepto, trabajador  
      FROM transacciones_ns  
      WHERE compania = @pch_compania And  
           id_calendario = @psi_id_calendario And  
           concepto       in (310,335)  
  
    OPEN cr_trans1  
    FETCH NEXT FROM cr_trans1 INTO @cdc_importe, @cdc_tiempo, @cdc_fecha,   
@cdc_factor,@cdc_factor_02,@cdc_factor_03,  
                                    @cdc_concepto, @cdc_trabajador  
  
    WHILE @@fetch_status = 0  
    BEGIN  
        UPDATE fco_ausentismos  
        SET valor_ibc = @cdc_factor_03  
        WHERE compania = @pch_compania And  
              id_ausentismo = @cdc_factor_02 And  
              trabajador  = @cdc_trabajador  And  
              valor_ibc  = 0  
  
    FETCH NEXT FROM cr_trans1 INTO @cdc_importe, @cdc_tiempo, @cdc_fecha,   
@cdc_factor,@cdc_factor_02,@cdc_factor_03,  
                                    @cdc_concepto, @cdc_trabajador  
  
    END /*WHILE @@fetch_status = 0*/  
  
    CLOSE cr_trans1  
    DEALLOCATE cr_trans1  
  
  
END  
GO
GRANT EXECUTE ON dbo.sp_fco_cierre_ausentismos_ns TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_fco_ausentismos') IS NOT NULL
    DROP VIEW dbo.vw_fco_ausentismos
GO
CREATE VIEW dbo.vw_fco_ausentismos
AS
SELECT 
    a.trabajador, 
    nombre = convert(varchar(60), replace(replace(t.nombre, '/', ' '), '  ', ' ')),
    tipo_ausentismo = b.descripcion,
    a.observaciones,
    cargo = (SELECT r.dato FROM rel_trab_agr r 
             WHERE r.compania = a.compania AND r.trabajador = a.trabajador AND r.agrupacion = 'CARGO'),
    cargo_des = (SELECT d.descripcion FROM rel_trab_agr r INNER JOIN datos_agr_trab d ON r.agrupacion = d.agrupacion AND r.dato = d.dato
             WHERE r.compania = a.compania AND r.trabajador = a.trabajador AND r.agrupacion = 'CARGO'),
    a.fecha_registro, a.usuario_registro, 
    a.fecha_inicio, fecha_pago, fecha_fin,
    a.dias,
    a.diagnostico,
    diagnostico_des = (SELECT x.descripcion FROM fco_diagnosticos x WHERE x.diagnostico = a.diagnostico)
FROM fco_ausentismos a
INNER JOIN trabajadores t ON a.trabajador = t.trabajador
LEFT JOIN criterios_valores_col b ON a.tipo = b.item AND b.campo = 'tipo_ausentismo'
GO
GRANT SELECT ON dbo.vw_fco_ausentismos TO PUBLIC
GO
PRINT 'Ausentismos... OK'
GO
IF OBJECT_ID('dbo.fco_fantasmas') IS NOT NULL
begin
    declare @vbi_existia bit, @vbi_vieja bit, @vvc_sql varchar(3000)
    set @vbi_existia = 1
    select * into ##tf from fco_fantasmas
    if exists(select 1 from syscolumns where name = 'extranjero' and id = (select id from sysobjects where name = 'fco_fantasmas'))
        set @vbi_vieja = 0
    else
        set @vbi_vieja = 1
    DROP TABLE dbo.fco_fantasmas
end
CREATE TABLE dbo.fco_fantasmas
(
    compania    char(4) NOT NULL,
    trabajador  char(10) NOT NULL,
    anio        smallint NOT NULL,
    mes         tinyint NOT NULL,
    sucursal    char(10) NOT NULL,
    tipo_planilla char(1) NOT NULL DEFAULT 'E',
    tipo_id     char(2) NOT NULL,
    nro_id      varchar(16) NOT NULL,
    tipo_cotizante tinyint NULL,
    primer_apellido varchar(20) NOT NULL,
    segundo_apellido varchar(30) NOT NULL,
    primer_nombre varchar(20) NOT NULL,
    segundo_nombre varchar(30) NOT NULL,
    AFP         char(10) NOT NULL,
    EPS         char(10) NOT NULL,
    CCF         char(10) NOT NULL,
    CTR         char(10) NOT NULL,    
    dias_AFP    tinyint NOT NULL,
    dias_EPS    tinyint NOT NULL,
    dias_ARP    tinyint NOT NULL,
    dias_CCF    tinyint NOT NULL,
    salario     decimal(9,0) NOT NULL,
    IBC_AFP     decimal(9,0) NOT NULL,
    IBC_EPS     decimal(9,0) NOT NULL,
    IBC_ARP     decimal(9,0) NOT NULL,
    IBC_CCF     decimal(9,0) NOT NULL,
    aporte_AFP  decimal(9,0) NOT NULL,
    aporte_FSP_sol  decimal(9,0) NOT NULL,
    aporte_FSP_sub  decimal(9,0) NOT NULL,
    aporte_EPS  decimal(9,0) NOT NULL,
    UPC_adicional decimal(9,0) NOT NULL,
    tarifa_ARP decimal(9,8) NOT NULL,
    aporte_ARP  decimal(9,0) NOT NULL,
    aporte_CCF	decimal(9,0) NOT NULL,
    aporte_SENA	decimal(9,0) NOT NULL,
    aporte_ICBF	decimal(9,0) NOT NULL,
    aporte_ESAP	decimal(9,0) NOT NULL,
    aporte_MEdu	decimal(9,0) NOT NULL,
    extranjero char(1) NOT NULL,
    residente_exterior char(1) NOT NULL,
    departamento char(2) NOT NULL,
    municipio char(3) NOT NULL,
    planilla_pens bit NOT NULL,
    CONSTRAINT PK_fco_Fantasmas PRIMARY KEY NONCLUSTERED (compania, trabajador)
)
if @vbi_existia = 1
begin
    if @vbi_vieja = 1
        insert into fco_fantasmas 
        (compania, trabajador, anio, mes, sucursal, tipo_id, nro_id, tipo_cotizante, primer_apellido, segundo_apellido, primer_nombre, segundo_nombre, 
         AFP, EPS, CCF, CTR, dias_AFP, dias_EPS, dias_ARP, dias_CCF, salario, IBC_AFP, IBC_EPS, IBC_ARP, IBC_CCF, aporte_AFP, aporte_FSP_sol, 
         aporte_FSP_sub, aporte_EPS, UPC_adicional, tarifa_ARP, aporte_ARP, aporte_CCF, aporte_SENA, aporte_ICBF, aporte_ESAP, aporte_MEdu, 
         extranjero, residente_exterior, departamento, municipio, planilla_pens)
        select 
         compania, trabajador, anio, mes, sucursal, tipo_id, nro_id, tipo_cotizante, primer_apellido, segundo_apellido, primer_nombre, segundo_nombre, 
         AFP, EPS, CCF, CTR, dias_AFP, dias_EPS, dias_ARP, dias_AFP, salario, IBC_AFP, IBC_EPS, IBC_ARP, IBC_CCF, aporte_AFP, aporte_FSP, 
         aporte_FSP,     aporte_EPS, UPC_adicional, tarifa_ARP, aporte_ARP, aporte_CCF, aporte_SENA, aporte_ICBF, aporte_ESAP, aporte_MEdu,
         0, 0, '', '', 0
        from ##tf
    else
    begin
        set @vvc_sql = 'insert into fco_fantasmas ' +
        '(compania, trabajador, anio, mes, sucursal, tipo_id, nro_id, tipo_cotizante, primer_apellido, segundo_apellido, primer_nombre, segundo_nombre, ' + 
        ' AFP, EPS, CCF, CTR, dias_AFP, dias_EPS, dias_ARP, dias_CCF, salario, IBC_AFP, IBC_EPS, IBC_ARP, IBC_CCF, aporte_AFP, aporte_FSP_sol, ' + 
        ' aporte_FSP_sub, aporte_EPS, UPC_adicional, tarifa_ARP, aporte_ARP, aporte_CCF, aporte_SENA, aporte_ICBF, aporte_ESAP, aporte_MEdu, ' + 
        ' extranjero, residente_exterior, departamento, municipio, planilla_pens)' + 
        ' select' +
        ' compania, trabajador, anio, mes, sucursal, tipo_id, nro_id, tipo_cotizante, primer_apellido, segundo_apellido, primer_nombre, segundo_nombre, ' + 
        ' AFP, EPS, CCF, CTR, dias_AFP, dias_EPS, dias_ARP, dias_CCF, salario, IBC_AFP, IBC_EPS, IBC_ARP, IBC_CCF, aporte_AFP, aporte_FSP_sol, ' + 
        ' aporte_FSP_sub, aporte_EPS, UPC_adicional, tarifa_ARP, aporte_ARP, aporte_CCF, aporte_SENA, aporte_ICBF, aporte_ESAP, aporte_MEdu, ' + 
        ' extranjero, residente_exterior, departamento, municipio, planilla_pens' +
        ' from ##tf'
        exec (@vvc_sql)
    end
    drop table ##tf
end
GO
GRANT ALL ON fco_Fantasmas TO PUBLIC
GO
IF OBJECT_ID('dbo.fco_fantasmas_aux') IS NOT NULL
    DROP TABLE dbo.fco_fantasmas_aux
GO
CREATE TABLE dbo.fco_fantasmas_aux
(
    random smallint NOT NULL,
    AFP_Aporte decimal(9) NOT NULL,
    FSP_Aporte_sol decimal(9) NOT NULL,
    FSP_Aporte_sub decimal(9) NOT NULL,
    EPS_Aporte decimal(9) NOT NULL,
    ARP_Aporte decimal(9) NOT NULL,
    CCF_Aporte decimal(9) NOT NULL,
    SENA_Aporte decimal(9) NOT NULL,
    ICBF_Aporte decimal(9) NOT NULL,
    CONSTRAINT pk_fco_fantasmas_aux PRIMARY KEY (random)
)
GO
GRANT ALL ON dbo.fco_fantasmas_aux TO PUBLIC
GO


IF OBJECT_ID('dbo.vw_fco_fantasmas') IS NOT NULL
    DROP VIEW dbo.vw_fco_fantasmas
GO
CREATE VIEW dbo.vw_fco_fantasmas
AS
SELECT 
    compania, trabajador, 
    nombre = primer_apellido + ' ' + segundo_apellido + ' ' + primer_nombre + ' ' + segundo_nombre
FROM fco_fantasmas
GO
GRANT SELECT ON vw_fco_Fantasmas TO PUBLIC
GO


IF OBJECT_ID('dbo.sp_fco_alta_fantasmas') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_alta_fantasmas
GO
CREATE PROCEDURE dbo.sp_fco_alta_fantasmas
(
    @pch_compania char(4), 
    @pch_trabajador char(10),
    @psi_anio smallint,
    @pti_mes tinyint,
    @pch_sucursal char(10),
    @pch_tipo_id char(2),
    @pvc_nro_id varchar(16),
    @pti_tipo_cotizante tinyint,
    @pvc_primer_apellido varchar(20), 
    @pvc_segundo_apellido varchar(30), 
    @pvc_primer_nombre varchar(20), 
    @pvc_segundo_nombre varchar(30), 
    @pch_AFP char(10),
    @pch_EPS char(10),
    @pch_CCF char(10),
    @pch_CTR char(10),
    @pti_dias_AFP tinyint,
    @pti_dias_EPS tinyint,
    @pti_dias_ARP tinyint,
    @pti_dias_CCF tinyint,
    @pdc_salario decimal(9),
    @pdc_IBC_AFP decimal(9),
    @pdc_IBC_EPS decimal(9),
    @pdc_IBC_ARP decimal(9),
    @pdc_IBC_CCF decimal(9),
    @pdc_aporte_AFP decimal(9),
    @pdc_aporte_FSP_sol decimal(9),
    @pdc_aporte_FSP_sub decimal(9),
    @pdc_aporte_EPS decimal(9),
    @pdc_UPC_adicional decimal(9),
    @pdc_tarifa_ARP decimal(9,8),
    @pdc_aporte_ARP decimal(9),
    @pdc_aporte_CCF decimal(9),
    @pdc_aporte_SENA decimal(9),
    @pdc_aporte_ICBF decimal(9),
    @pdc_aporte_ESAP decimal(9),
    @pdc_aporte_MEdu decimal(9),
    @pch_extranjero char(1) = 'N',
    @pch_reside_ext char(1) = 'N',
    @pch_departamento char(2) = '',
    @pch_municipio char(3) = '',
    @pbi_planilla_pens bit = 0
)
AS
BEGIN
    IF EXISTS (SELECT 1 FROM fco_fantasmas
               WHERE compania = @pch_compania
                 AND RTRIM(LTRIM(trabajador)) = RTRIM(LTRIM(@pch_trabajador)))
    BEGIN
        RAISERROR ('El registro a insertar ya existe en [fco_fantasmas]', 16, 1)
        RETURN
    END

    INSERT INTO fco_fantasmas
    (compania, trabajador, anio, mes, sucursal, tipo_id, nro_id, tipo_cotizante, primer_apellido, segundo_apellido, 
     primer_nombre, segundo_nombre, AFP, EPS, CCF, CTR, dias_AFP, dias_EPS, dias_ARP, dias_CCF, salario, IBC_AFP, IBC_EPS, 
     IBC_ARP, IBC_CCF, aporte_AFP, aporte_FSP_sol, aporte_FSP_sub, aporte_EPS, UPC_adicional, tarifa_ARP, aporte_ARP, 
     aporte_CCF, aporte_SENA, aporte_ICBF, aporte_ESAP, aporte_MEdu, extranjero, residente_exterior, departamento, municipio, planilla_pens)
    SELECT 
     @pch_compania, @pch_trabajador, ISNULL(@psi_anio, 0), ISNULL(@pti_mes, 12), 
     @pch_sucursal, @pch_tipo_id, @pvc_nro_id, ISNULL(@pti_tipo_cotizante, 1), 
     @pvc_primer_apellido, @pvc_segundo_apellido, @pvc_primer_nombre, @pvc_segundo_nombre, 
     @pch_AFP, @pch_EPS, @pch_CCF, @pch_CTR, 
     ISNULL(@pti_dias_AFP, 0), ISNULL(@pti_dias_EPS, 0), ISNULL(@pti_dias_ARP, 0), ISNULL(@pti_dias_CCF, 0),
     ISNULL(@pdc_salario, 0), ISNULL(@pdc_IBC_AFP, 0), ISNULL(@pdc_IBC_EPS, 0), ISNULL(@pdc_IBC_ARP, 0), 
     ISNULL(@pdc_IBC_CCF, 0), ISNULL(@pdc_aporte_AFP, 0), ISNULL(@pdc_aporte_FSP_sol, 0), ISNULL(@pdc_aporte_FSP_sub, 0),
     ISNULL(@pdc_aporte_EPS, 0), ISNULL(@pdc_UPC_adicional, 0), ISNULL(@pdc_tarifa_ARP, 0), ISNULL(@pdc_aporte_ARP, 0), 
     ISNULL(@pdc_aporte_CCF, 0), ISNULL(@pdc_aporte_SENA, 0), ISNULL(@pdc_aporte_ICBF, 0), 
     ISNULL(@pdc_aporte_ESAP, 0), ISNULL(@pdc_aporte_MEdu, 0), @pch_extranjero, @pch_reside_ext, @pch_departamento, @pch_municipio, @pbi_planilla_pens
END
GO
GRANT EXECUTE ON dbo.sp_fco_alta_fantasmas TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_baja_fantasmas') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_baja_fantasmas
GO
CREATE PROCEDURE dbo.sp_fco_baja_fantasmas
(
    @pch_compania char(4), 
    @pch_trabajador char(10)
)
AS
BEGIN
    IF NOT EXISTS (SELECT 1 FROM fco_fantasmas
               WHERE compania = @pch_compania
                 AND RTRIM(LTRIM(trabajador)) = RTRIM(LTRIM(@pch_trabajador)))
    BEGIN
        RAISERROR ('El registro a eliminar en [fco_fantasmas] no existe', 16, 1)
        RETURN
    END

    DELETE fco_fantasmas
    WHERE compania = @pch_compania
     AND RTRIM(LTRIM(trabajador)) = RTRIM(LTRIM(@pch_trabajador))
END
GO
GRANT EXECUTE ON dbo.sp_fco_baja_fantasmas TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_calcula_aportes') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_calcula_aportes
GO
CREATE PROCEDURE dbo.sp_fco_calcula_aportes  
(  
    @psi_random smallint,  
    @pch_compania char(4),  
    @pdc_AFP_IBC decimal(9),  
    @pti_AFP_dias tinyint,  
    @pdc_EPS_IBC decimal(9),  
    @pti_EPS_dias tinyint,  
    @pdc_ARP_IBC decimal(9),  
    @pti_ARP_dias tinyint,  
    @pdc_ARP_tarifa decimal(9,8),  
    @pdc_CCF_IBC decimal(9),
    @pti_CCF_dias tinyint
  
)  
/*************************************************************************/  
-- Modulo Fiscal Colombiano 2.0 ADAM V3  
-- Descripcion: Calcula los aportes en la sesión Aportantes por Fuera de Nómina  
--              (fantasmas) según los parámetros indicados por el usuario  
--              y teniendo en cuenta los porcentajes definidos en ADAM  
-- Autor: Juan Carlos Leguizamon  
-- Fecha: Junio 2005  
-- Revisiones:  Julio 24/2006 Calculo del FSP por subcuenta, inclusion dias CCF
/*************************************************************************/  
AS  
BEGIN  
    DECLARE  
        @vch_var_SaT char(2),      -- Variable Salud Trabajador  
        @vch_var_SaE char(2),      -- Variable Salud Empleador  
        @vch_var_PeT char(2),      -- Variable Pensión Trabajador  
        @vch_var_PeE char(2),      -- Variable Pensión Empleador  
        @vch_var_FSP char(2),      -- Variable Aporte FSP  
        @vch_var_FSP_Tope char(2), -- Variable Aporte FSP  
        @vch_var_CCF char(2),      -- Variable Aporte CCF  
        @vch_var_SENA char(2),     -- Variable Aporte SENA  
        @vch_var_ICBF char(2),     -- Variable Aporte ICBF  
        @vdc_tar_EPS decimal(6,5), -- Tarifa Salud  
        @vdc_tar_AFP decimal(6,5), -- Tarifa Pensión  
        @vdc_tar_FSP decimal(6,5), -- Tarifa Fondo de Solidaridad Pensional  
        @vdc_tar_FSP_Tope decimal(6,5), -- Tope Salarios para FSP  
        @vdc_tar_CCF decimal(6,5), -- Tarifa Cajas de Compensación  
        @vdc_tar_SENA decimal(6,5),-- Tarifa SENA  
        @vdc_tar_ICBF decimal(6,5),-- Tarifa ICBF  
        @vdc_sal_min decimal(19,6) -- Salario Mínimo  
  
    SELECT @vch_var_SaT = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'autoliq' AND secuencia = 25  
    SELECT @vch_var_SaE = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'autoliq' AND secuencia = 26  
    SELECT @vch_var_PeT = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'autoliq' AND secuencia = 27  
    SELECT @vch_var_PeE = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'autoliq' AND secuencia = 28  
    SELECT @vch_var_FSP = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'autoliq' AND secuencia = 39  
    SELECT @vch_var_FSP_Tope = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'autoliq' AND secuencia = 38  
    SELECT @vch_var_CCF = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'parafiscal' AND secuencia = 9  
    SELECT @vch_var_SENA = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'parafiscal' AND secuencia = 10  
    SELECT @vch_var_ICBF = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'parafiscal' AND secuencia = 11  
    SELECT @vdc_sal_min = real FROM parametros_rh WHERE compania = @pch_compania AND parametro_rh = 'Sal_Minimo' AND secuencia_parametro = 1     
  
    SET @vdc_tar_EPS = ISNULL(dbo.fn_fco_var_nom(@pch_compania, @vch_var_SaT, 0) + dbo.fn_fco_var_nom(@pch_compania, @vch_var_SaE, 0), 0.12)  
    SET @vdc_tar_AFP = ISNULL(dbo.fn_fco_var_nom(@pch_compania, @vch_var_PeT, 0) + dbo.fn_fco_var_nom(@pch_compania, @vch_var_PeE, 0), 0.15)  
    SET @vdc_tar_FSP = ISNULL(dbo.fn_fco_var_nom(@pch_compania, @vch_var_FSP, 0), 0.01)  
  
    SET @vdc_tar_FSP_Tope = ISNULL(dbo.fn_fco_var_nom(@pch_compania, @vch_var_FSP_Tope, 1), 4)  
    SET @vdc_tar_CCF = ISNULL(dbo.fn_fco_var_nom(@pch_compania, @vch_var_CCF, 0), 0.04)  
    SET @vdc_tar_SENA = ISNULL(dbo.fn_fco_var_nom(@pch_compania, @vch_var_SENA, 0), 0.02)  
    SET @vdc_tar_ICBF = ISNULL(dbo.fn_fco_var_nom(@pch_compania, @vch_var_ICBF, 0), 0.03)  
  
    DELETE fco_fantasmas_aux WHERE random = @psi_random  
    INSERT INTO fco_fantasmas_aux   
    (random, AFP_Aporte, FSP_Aporte_sol, FSP_Aporte_sub, EPS_Aporte, ARP_Aporte, CCF_Aporte, SENA_Aporte, ICBF_Aporte)  
    SELECT  
    @psi_random,  
    Round((@pdc_AFP_IBC * @vdc_tar_AFP * (@pti_AFP_dias/30.00000) - 1)/100,0) * 100,  
    CASE WHEN @pdc_AFP_IBC >= (@vdc_sal_min * @vdc_tar_FSP_Tope) THEN 
        Round((@pdc_AFP_IBC * 0.5 * (@pti_AFP_dias/30.00000) - 1)/100,0) * 100 ELSE 0 END,  
    CASE WHEN @pdc_AFP_IBC >= (@vdc_sal_min * @vdc_tar_FSP_Tope) THEN 
        Round((@pdc_AFP_IBC * 0.5 * (@pti_AFP_dias/30.00000) - 1)/100,0) * 100 ELSE 0 END,  
    Round((@pdc_EPS_IBC * @vdc_tar_EPS * (@pti_EPS_dias/30.00000) - 1)/100,0) * 100,  
    Round((@pdc_ARP_IBC * @pdc_ARP_tarifa * (@pti_ARP_dias/30.00000) - 1)/100,0) * 100,  
    Round((@pdc_CCF_IBC * @vdc_tar_CCF * (@pti_CCF_dias/30.00000) - 1)/100,0) * 100,  
    Round((@pdc_CCF_IBC * @vdc_tar_SENA * (@pti_CCF_dias/30.00000) - 1)/100,0) * 100,  
    Round((@pdc_CCF_IBC * @vdc_tar_ICBF * (@pti_CCF_dias/30.00000) - 1)/100,0) * 100  
END  
GO
GRANT EXECUTE ON dbo.sp_fco_calcula_aportes TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_cambio_fantasmas') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_cambio_fantasmas
GO
CREATE PROCEDURE dbo.sp_fco_cambio_fantasmas
(
    @pch_compania char(4), 
    @pch_trabajador char(10),
    @psi_anio smallint,
    @pti_mes tinyint,
    @pch_sucursal char(10),
    @pch_tipo_id char(2),
    @pvc_nro_id varchar(16),
    @pti_tipo_cotizante tinyint,
    @pvc_primer_apellido varchar(20), 
    @pvc_segundo_apellido varchar(30), 
    @pvc_primer_nombre varchar(20), 
    @pvc_segundo_nombre varchar(30), 
    @pch_AFP char(10),
    @pch_EPS char(10),
    @pch_CCF char(10),
    @pch_CTR char(10),
    @pti_dias_AFP tinyint,
    @pti_dias_EPS tinyint,
    @pti_dias_ARP tinyint,
    @pti_dias_CCF tinyint,
    @pdc_salario decimal(9),
    @pdc_IBC_AFP decimal(9),
    @pdc_IBC_EPS decimal(9),
    @pdc_IBC_ARP decimal(9),
    @pdc_IBC_CCF decimal(9),
    @pdc_aporte_AFP decimal(9),
    @pdc_aporte_FSP_sol decimal(9),
    @pdc_aporte_FSP_sub decimal(9),
    @pdc_aporte_EPS decimal(9),
    @pdc_UPC_adicional decimal(9),
    @pdc_tarifa_ARP decimal(9,8),
    @pdc_aporte_ARP decimal(9),
    @pdc_aporte_CCF decimal(9),
    @pdc_aporte_SENA decimal(9),
    @pdc_aporte_ICBF decimal(9),
    @pdc_aporte_ESAP decimal(9),
    @pdc_aporte_MEdu decimal(9),
    @pch_extranjero char(1) = 'N',
    @pch_reside_ext char(1) = 'N',
    @pch_departamento char(2) = '',
    @pch_municipio char(3) = '',
    @pbi_planilla_pens bit = 0
)
AS
BEGIN
    IF NOT EXISTS (SELECT 1 FROM fco_fantasmas
               WHERE compania = @pch_compania
                 AND RTRIM(LTRIM(trabajador)) = RTRIM(LTRIM(@pch_trabajador)))
    BEGIN
        RAISERROR ('El registro a modificar en [fco_fantasmas] no existe', 16, 1)
        RETURN
    END

    UPDATE fco_fantasmas
    SET anio = @psi_anio, 
        mes = @pti_mes, 
        sucursal = @pch_sucursal, 
        tipo_id = @pch_tipo_id, 
        nro_id = @pvc_nro_id, 
        tipo_cotizante = IsNull(@pti_tipo_cotizante, 1),
        primer_apellido = IsNull(@pvc_primer_apellido, ''),
        segundo_apellido = IsNull(@pvc_segundo_apellido, ''),
        primer_nombre = IsNull(@pvc_primer_nombre, ''),
        segundo_nombre = IsNull(@pvc_segundo_nombre, ''),
        AFP = IsNull(@pch_AFP, ''),
        EPS = IsNull(@pch_EPS, ''),
        CCF = IsNull(@pch_CCF, ''),
        CTR = IsNull(@pch_CTR, ''),
        dias_AFP = IsNull(@pti_dias_AFP, 0), dias_EPS = IsNull(@pti_dias_EPS, 0), 
        dias_ARP = IsNull(@pti_dias_ARP, 0), dias_CCF = IsNull(@pti_dias_CCF, 0),
        salario = IsNull(@pdc_salario, 0),
        IBC_AFP = IsNull(@pdc_IBC_AFP, 0), IBC_EPS = IsNull(@pdc_IBC_EPS, 0), 
        IBC_ARP = IsNull(@pdc_IBC_ARP, 0), IBC_CCF = IsNull(@pdc_IBC_CCF, 0), 
        aporte_AFP = IsNull(@pdc_aporte_AFP, 0), 
        aporte_FSP_sol = IsNull(@pdc_aporte_FSP_sol, 0), aporte_FSP_sub = IsNull(@pdc_aporte_FSP_sub, 0),
        aporte_EPS = IsNull(@pdc_aporte_EPS, 0), UPC_adicional = IsNull(@pdc_UPC_adicional, 0),
        tarifa_ARP = IsNull(@pdc_tarifa_ARP, 0), aporte_ARP = IsNull(@pdc_aporte_ARP, 0),
        aporte_CCF = IsNull(@pdc_aporte_CCF, 0), aporte_SENA = IsNull(@pdc_aporte_SENA, 0), aporte_ICBF = IsNull(@pdc_aporte_ICBF, 0),
        aporte_ESAP = IsNull(@pdc_aporte_ESAP, 0), aporte_MEdu = IsNull(@pdc_aporte_MEdu, 0),
        extranjero = IsNull(UPPER(@pch_extranjero), 'N'),
        residente_exterior = IsNull(UPPER(@pch_reside_ext), 'N'),
        departamento = IsNull(@pch_departamento, ''),
        municipio = IsNull(@pch_municipio, ''),
        planilla_pens = IsNull(@pbi_planilla_pens, 0)
    WHERE compania = @pch_compania
     AND RTRIM(LTRIM(trabajador)) = RTRIM(LTRIM(@pch_trabajador))
END
GO
GRANT EXECUTE ON dbo.sp_fco_cambio_fantasmas TO PUBLIC
GO
PRINT 'Aportantes Fuera de Nómina... OK'
GO
IF OBJECT_ID('dbo.fco_autorizaciones_det') IS NULL
CREATE TABLE dbo.fco_autorizaciones_det 
(
	compania char(4) NOT NULL ,
	autorizacion decimal(10) NOT NULL ,
	trabajador char(10) NOT NULL ,
	valor decimal(12,2) NULL ,
    CONSTRAINT pk_fco_autorizaciones_det  PRIMARY KEY (compania, autorizacion, trabajador)
)
GO
GRANT ALL ON fco_autorizaciones_det TO PUBLIC
GO


IF OBJECT_ID('dbo.fco_autorizaciones') IS NULL
CREATE TABLE dbo.fco_autorizaciones 
(
    compania char(4) NOT NULL ,
    sucursal char(10) NULL,
    autorizacion decimal(10) NOT NULL ,
    numero varchar(15) NOT NULL ,
    tipo_incapacidad char(1) NOT NULL ,
    tipo_entidad char(1) NOT NULL ,
    cod_entidad char(10) NOT NULL ,
    fecha smalldatetime NULL ,
    periodo char(6) NOT NULL ,
    ausentismo int NULL ,
    descontar_ala char(1) NOT NULL ,
    valor_total decimal(13,2) NULL ,
    tipo_planilla char(1) NOT NULL DEFAULT 'E',
    CONSTRAINT pk_fco_autorizaciones PRIMARY KEY (compania, autorizacion)
)
GO
GRANT ALL ON fco_autorizaciones TO PUBLIC
GO


IF OBJECT_ID('dbo.sp_fco_alta_autorizaciones') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_alta_autorizaciones
GO
CREATE PROCEDURE dbo.sp_fco_alta_autorizaciones
(
  @pch_compania char(4),
  @pch_sucursal char(10),
  @pvc_numero varchar(15),
  @pch_tipo_incapacidad char(1),
  @pch_tipo_entidad char(1),
  @pch_cod_entidad char(10),
  @pdt_fecha smalldatetime,
  @pch_periodo char(6),
  @pin_ausentismo int,
  @pch_descontar_ala char(1),
  @pdc_valor_total decimal(13,2)
)
AS
BEGIN
    DECLARE @vdc_autorizacion decimal(10) ---consecutivo

	SET @vdc_autorizacion = 0;

	SELECT @vdc_autorizacion = ISNULL(Max(autorizacion),0) + 1
	FROM fco_autorizaciones
	WHERE compania = @pch_compania

	INSERT INTO fco_autorizaciones 
    (compania, sucursal, autorizacion, numero, tipo_incapacidad, tipo_entidad, 
     cod_entidad, fecha, periodo, ausentismo, descontar_ala, valor_total)
    SELECT
    @pch_compania, @pch_sucursal, @vdc_autorizacion, @pvc_numero, @pch_tipo_incapacidad, @pch_tipo_entidad,
    @pch_cod_entidad, @pdt_fecha, @pch_periodo, @pin_ausentismo, @pch_descontar_ala, @pdc_valor_total
END
GO
GRANT EXECUTE ON sp_fco_alta_autorizaciones TO PUBLIC
GO


IF OBJECT_ID('dbo.sp_fco_alta_autorizaciones_det') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_alta_autorizaciones_det
GO
CREATE PROCEDURE dbo.sp_fco_alta_autorizaciones_det
(
  @pch_compania	char(4),
  @pdc_autorizacion decimal(10),
  @pch_trabajador char(10),
  @pdc_valor decimal(12,2)
)
AS
BEGIN
	INSERT INTO fco_autorizaciones_Det (compania, autorizacion, trabajador, valor)
    SELECT @pch_compania, @pdc_autorizacion, @pch_trabajador, @pdc_valor
END
GO
GRANT EXECUTE ON sp_fco_alta_autorizaciones_det TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_baja_autorizaciones') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_baja_autorizaciones
GO
CREATE PROCEDURE dbo.sp_fco_baja_autorizaciones
(
  @pch_compania char(10),
  @pdc_autorizacion decimal(10)
)
AS
BEGIN
	DELETE fco_autorizaciones_det
	WHERE compania = @pch_compania
      AND autorizacion = @pdc_autorizacion

	DELETE fco_autorizaciones
	WHERE compania = @pch_compania 
      AND autorizacion = @pdc_autorizacion
END
GO
GRANT EXECUTE ON sp_fco_baja_autorizaciones TO PUBLIC
GO


IF OBJECT_ID('dbo.sp_fco_baja_autorizaciones_det') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_baja_autorizaciones_det
GO
CREATE PROCEDURE dbo.sp_fco_baja_autorizaciones_det
(
    @pch_compania char(4),
    @pdc_autorizacion decimal(10),
    @pch_trabajador char(10)
)
AS
BEGIN
    IF @pch_trabajador IS Null OR @pch_trabajador = '0'
        DELETE fco_autorizaciones_det
        WHERE compania = @pch_compania
          AND autorizacion = @pdc_autorizacion
    ELSE
        DELETE fco_autorizaciones_det
        WHERE compania = @pch_compania
          AND autorizacion = @pdc_autorizacion
          AND trabajador = @pch_trabajador
END
GO
GRANT EXECUTE ON sp_fco_baja_autorizaciones_det TO PUBLIC
GO
PRINT 'Autorizaciones de Descuento de Incapacidades y Licencias... OK'
GO

IF OBJECT_ID('dbo.fdt_ciudades_pago') IS NULL
CREATE TABLE dbo.fdt_ciudades_pago
(ciudad char(2), 
nombre varchar(100)
)
GO
GRANT ALL ON fdt_ciudades_pago TO PUBLIC
GO

IF OBJECT_ID('dbo.fdt_embargos') IS NULL
CREATE TABLE dbo.fdt_embargos
(
    compania            char(4) NOT NULL,
    trabajador          char(10) NOT NULL,
    concepto            smallint NOT NULL,
    secuencia           tinyint NOT NULL,
    fecha_alta          smalldatetime NULL,
    fecha_baja          smalldatetime NULL,
    situacion           tinyint NULL,
    consecutivo_oficina decimal(6,0) NULL,
    oficina_origen      char(4) NULL,
    oficina_destino     char(4) NULL,
    clase_deposito      tinyint NULL,
    numero_expediente   varchar(20) NULL,
    codigo_juzgado      decimal(12,0) NULL,
    banco               tinyint NULL,
    cuenta              decimal(12,0) NULL,
    tipo_id_demandante  tinyint NULL,
    id_demandante       decimal(11,0)  NULL,
    apellido_demandante varchar(20) NULL,
    nombre_demandante   varchar(100) NULL,
    agr_conceptos_base  char(3) NULL,
    concepto_base       smallint NULL,
    quinta_parte        tinyint NULL,
    monto_total         decimal(14,2) NULL,
    saldo_actual        decimal(14,2) NULL,
    porcentaje          decimal(5,2) NULL,
    cuota_fija          decimal(14,2) NULL,
    ciudad_pago         char(2) NULL,
    porcentaje_aumento	tinyint NULL,
    valor_aumento       decimal(14,2) NULL,
    mes_aumento		tinyint NULL,
    anio_desde		integer NULL,
    CONSTRAINT PK_fdt_embargos PRIMARY KEY NONCLUSTERED 
    (compania, trabajador, concepto, secuencia) 
)
ON [PRIMARY]
GO
GRANT ALL ON fdt_embargos TO PUBLIC
GO
IF NOT EXISTS (SELECT 1 FROM syscolumns sc INNER JOIN sysobjects so ON sc.id = so.id WHERE sc.name = 'ciudad_pago' AND so.name = 'fdt_embargos')
    ALTER TABLE fdt_embargos ADD ciudad_pago char(2)
GO
IF NOT EXISTS (SELECT 1 FROM syscolumns sc INNER JOIN sysobjects so ON sc.id = so.id WHERE sc.name = 'porcentaje_aumento' AND so.name = 'fdt_embargos')
BEGIN
    ALTER TABLE fdt_embargos ADD porcentaje_aumento	tinyint NULL
    ALTER TABLE fdt_embargos ADD valor_aumento decimal(14,2) NULL
    ALTER TABLE fdt_embargos ADD mes_aumento tinyint NULL
    ALTER TABLE fdt_embargos ADD anio_desde integer NULL 
END
GO
IF OBJECT_ID('dbo.fdt_embargos_oficinas') IS NULL
CREATE TABLE dbo.fdt_embargos_oficinas (
	compania char (4) NOT NULL ,
	cod_oficina char (4) NOT NULL ,
	descripcion_oficina varchar (50) NULL,
  CONSTRAINT PK_fdt_embargos_oficinas PRIMARY KEY NONCLUSTERED 
  (compania, cod_oficina) 
 
) ON [PRIMARY]
GO
GRANT ALL ON fdt_embargos_oficinas TO PUBLIC
GO
IF OBJECT_ID('dbo.fdt_hist_aum_emb') IS NOT NULL
drop table dbo.fdt_hist_aum_emb
go
CREATE TABLE dbo.fdt_hist_aum_emb
(
    compania            char(4) NOT NULL,
    trabajador          char(10) NOT NULL,
    concepto            smallint NOT NULL,
    secuencia           tinyint NOT NULL,
    id_calendario       integer NOT NULL,
    cuota_anterior      decimal(14,2)  NULL,
    cuota_nueva         decimal(14,2)  NULL,
    porcentaje_aum      decimal(14,2)  NULL,
    valor_aum           decimal(14,2)  NULL,
    tipo_nomina         char(2)        NULL,
    anio                smallint       NULL,
    periodo             smallint       NULL,
    CONSTRAINT PK_fdt_hist_aum_emb PRIMARY KEY NONCLUSTERED 
    (compania, trabajador, concepto, secuencia, id_calendario) 
)
ON [PRIMARY]
GO
GRANT ALL ON fdt_hist_aum_emb TO PUBLIC
GO
IF OBJECT_ID('dbo.fdt_embargos_tipo_nom') IS NOT NULL
    drop table dbo.fdt_embargos_tipo_nom
GO
CREATE TABLE dbo.fdt_embargos_tipo_nom
(
    compania            char(4) NOT NULL,
    trabajador          char(10) NOT NULL,
    concepto            smallint NOT NULL,
    secuencia           tinyint NOT NULL,
    tipo_nomina         char(4)  NOT NULL,
    CONSTRAINT PK_fdt_embargos_tipo_nom PRIMARY KEY NONCLUSTERED 
    (compania, trabajador, concepto, secuencia, tipo_nomina) 
)
ON [PRIMARY]
GO
GRANT ALL ON fdt_embargos_tipo_nom TO PUBLIC
GO
IF OBJECT_ID('dbo.fn_Primer_Apellido') IS NOT NULL
    DROP FUNCTION dbo.fn_Primer_Apellido
GO
CREATE FUNCTION dbo.fn_Primer_Apellido
(
    @pvc_nombre varchar(100)
)
RETURNS char(20)
AS
BEGIN
DECLARE 
    @vvc_cad varchar(20),
	@vti_long tinyint

	SET @vti_long = CharIndex('/', @pvc_nombre)

	IF @vti_long = 0
		SET @vti_long = CharIndex(' ', @pvc_nombre)

	IF @vti_long > 0
		SET @vti_long = @vti_long - 1 

    SET @vvc_cad = Substring(@pvc_nombre, 1, @vti_long)
	SET @vvc_cad = Substring(@vvc_cad,1,20)

    RETURN @vvc_cad   
END
GO
GRANT EXECUTE ON fn_Primer_Apellido TO PUBLIC
GO
IF OBJECT_ID('dbo.fn_Primer_Nombre') IS NOT NULL
    DROP FUNCTION dbo.fn_Primer_Nombre
GO
CREATE FUNCTION dbo.fn_Primer_Nombre
(
    @pvc_nombre varchar(100)
)
RETURNS char(20)
AS
BEGIN
DECLARE 
    @vvc_cad varchar(20),
    @vti_pos tinyint,
    @vti_pos2 tinyint,
    @vti_pos3 tinyint,

	@vti_long tinyint
    
    SET @vti_pos = CharIndex('/', @pvc_nombre)
	IF @vti_pos = 0
		SET @vti_pos = CharIndex(' ', @pvc_nombre)

    SET @vti_pos2 = CharIndex('/', @pvc_nombre, @vti_pos + 1)
	IF @vti_pos2 = 0
	    SET @vti_pos2 = CharIndex(' ', @pvc_nombre, @vti_pos + 1)

    SET @vti_pos3 = CharIndex(' ', @pvc_nombre, @vti_pos2 + 1)

    IF @vti_pos3 = 0
        SET  @vvc_cad = Substring(@pvc_nombre, @vti_pos2 + 1, Len(@pvc_nombre))
    ELSE
	BEGIN
		SET @vti_long = @vti_pos3 - @vti_pos2
		IF @vti_long > 0
			SET @vti_long = @vti_pos3 - @vti_pos2 - 1

        SET @vvc_cad = Substring(@pvc_nombre, @vti_pos2 + 1, @vti_long)
	END

	SET @vvc_cad = Substring(@vvc_cad,1,20)

    RETURN @vvc_cad   
END
GO

GRANT EXECUTE ON fn_Primer_Nombre TO PUBLIC
GO
IF OBJECT_ID('dbo.fn_Segundo_Apellido') IS NOT NULL
    DROP FUNCTION dbo.fn_Segundo_Apellido
GO
CREATE FUNCTION dbo.fn_Segundo_Apellido
(
    @pvc_nombre varchar(100)
)
RETURNS char(20)
AS
BEGIN
DECLARE 
    @vvc_cad varchar(20),
    @vti_pos tinyint,
    @vti_pos2 tinyint,

	@vti_long tinyint
    
    SET @vti_pos = CharIndex('/', @pvc_nombre)
	IF @vti_pos = 0
		SET @vti_pos = CharIndex(' ', @pvc_nombre)

    SET @vti_pos2 = CharIndex('/', @pvc_nombre, @vti_pos + 1)
	IF @vti_pos2 = 0
	    SET @vti_pos2 = CharIndex(' ', @pvc_nombre, @vti_pos + 1)

	SET @vti_long = @vti_pos2 - @vti_pos
	IF @vti_long > 0
		SET @vti_long = @vti_pos2 - @vti_pos - 1

    SET @vvc_cad = Substring(@pvc_nombre, @vti_pos + 1, @vti_long)
	SET @vvc_cad = Substring(@vvc_cad,1,20)

    RETURN @vvc_cad   
END

GO

GRANT EXECUTE ON fn_Segundo_Apellido TO PUBLIC
GO

IF OBJECT_ID('dbo.fn_Segundo_Nombre') IS NOT NULL
    DROP FUNCTION dbo.fn_Segundo_Nombre
GO
CREATE FUNCTION dbo.fn_Segundo_Nombre
(
    @pvc_nombre varchar(100)
)
RETURNS char(20)
AS
BEGIN
DECLARE 
    @vvc_cad varchar(20),
    @vti_pos tinyint,
    @vti_pos2 tinyint,
    @vti_pos3 tinyint
    
    SET @vti_pos = CharIndex('/', @pvc_nombre)
	IF @vti_pos = 0
	    SET @vti_pos = CharIndex(' ', @pvc_nombre)

    SET @vti_pos2 = CharIndex('/', @pvc_nombre, @vti_pos + 1)
	IF @vti_pos2 = 0
	    SET @vti_pos2 = CharIndex(' ', @pvc_nombre, @vti_pos + 1)

    SET @vti_pos3 = CharIndex(' ', @pvc_nombre, @vti_pos2 + 1)

    IF @vti_pos3 = 0
        SET  @vvc_cad = ''
    ELSE
        SET @vvc_cad = Substring(@pvc_nombre, @vti_pos3 + 1, Len(@pvc_nombre))

	SET @vvc_cad = Substring(@vvc_cad,1,20)

    RETURN @vvc_cad   
END

GO

GRANT EXECUTE ON fn_Segundo_Nombre TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_fdt_embargos') IS NOT NULL
    DROP VIEW dbo.vw_fdt_embargos
GO
CREATE VIEW dbo.vw_fdt_embargos
AS
SELECT
    E.compania, D.nombre_cia, 
    D.registro_fiscal, 
    T.clave_unica cedula, E.trabajador, 
    ltrim(rtrim(dbo.fn_Primer_Apellido(T.nombre))) + ' ' + 
    ltrim(rtrim(dbo.fn_Segundo_Apellido(T.nombre))) As Apellidos,  
    ltrim(rtrim(dbo.fn_Primer_Nombre(T.nombre))) + ' ' +  
    ltrim(rtrim(dbo.fn_Segundo_Nombre(T.nombre))) As Nombres,  
    E.concepto, C.descripcion, E.secuencia, 
    E.fecha_alta, E.fecha_baja, E.situacion, E.consecutivo_oficina,
    E.oficina_origen, E.oficina_destino, E.clase_deposito,
    E.numero_expediente, E.codigo_juzgado, E.banco, E.cuenta,
    E.tipo_id_demandante, E.id_demandante, E.apellido_demandante, 
    E.nombre_demandante, E.agr_conceptos_base, E.concepto_base,
    base = CASE IsNull(E.concepto_base, 0) WHEN 0 THEN E.agr_conceptos_base ELSE Convert(varchar,E.concepto_base) END,
    E.quinta_parte, E.monto_total, E.saldo_actual, E.porcentaje, E.cuota_fija, E.ciudad_pago, E.porcentaje_aumento,
    E.valor_aumento, E.mes_aumento, E.anio_desde
FROM 
    fdt_embargos E, trabajadores T, conceptos C, companias D
WHERE
    E.compania = D.compania And
    E.trabajador = T.trabajador And
    E.concepto = C.concepto

GO
GRANT SELECT ON vw_fdt_embargos TO PUBLIC
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fdt_alta_ciudades_pago]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fdt_alta_ciudades_pago
GO
CREATE PROCEDURE dbo.sp_fdt_alta_ciudades_pago
(
    @pch_ciudad char(2),
    @pch_nombre varchar(100)
)
AS
--OCT-02-05: DCR, Pasada a SQL de Oracle
BEGIN

		IF EXISTS(SELECT 1 FROM fdt_ciudades_pago
		    			WHERE ciudad = @pch_ciudad)
				UPDATE fdt_ciudades_pago
				SET nombre = @pch_nombre
				WHERE ciudad = @pch_ciudad
    ELSE
		    INSERT INTO fdt_ciudades_pago (ciudad, nombre)
		    VALUES (@pch_ciudad, @pch_nombre)

END
GO
GRANT EXECUTE ON sp_fdt_alta_ciudades_pago TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fdt_alta_oficinas_embargos]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fdt_alta_oficinas_embargos
GO
CREATE PROCEDURE dbo.sp_fdt_alta_oficinas_embargos
(
    @pch_compania            char(4),
    @pch_codigo	           char(10),
    @pch_descripcion     varchar(50)
)
AS
BEGIN
    IF EXISTS ( SELECT 1 FROM fdt_embargos_oficinas
                WHERE compania = @pch_compania And
                      cod_oficina = @pch_codigo )
    BEGIN
		UPDATE fdt_embargos_oficinas
		SET descripcion_oficina = @pch_descripcion
		WHERE compania = @pch_compania And
	              cod_oficina = @pch_codigo    

	    IF @@ERROR <> 0 
	    BEGIN
	        RAISERROR 206800 'Error al modificar en la tabla [fdt_embargos_oficinas]'
			RETURN
		END
    END

--insertar un nuevo registro
    ELSE
	BEGIN
	    INSERT INTO fdt_embargos_oficinas
	    (compania, cod_oficina, descripcion_oficina)
	    VALUES
	    (@pch_compania, @pch_codigo, @pch_descripcion)

	    IF @@ERROR <> 0 
	    BEGIN
	        RAISERROR 206800 'Error al insertar en la tabla [fdt_embargos_oficinas]'
			RETURN
		END

	END
END

GO
GRANT EXECUTE ON dbo.sp_fdt_alta_oficinas_embargos TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fdt_baja_ciudades_pago]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fdt_baja_ciudades_pago
GO
CREATE PROCEDURE dbo.sp_fdt_baja_ciudades_pago
(
    @pch_ciudad char(2)
)
AS
BEGIN

		DELETE fdt_ciudades_pago
		WHERE ciudad = @pch_ciudad

END
GO
GRANT EXECUTE ON sp_fdt_baja_ciudades_pago TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fdt_baja_embargos]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fdt_baja_embargos
GO
CREATE PROCEDURE dbo.sp_fdt_baja_embargos
(
    @pch_compania    char(4),
    @pch_trabajador  char(10),
    @psi_concepto    smallint,
    @pti_secuencia   tinyint
)
AS
BEGIN
    UPDATE fdt_embargos
    SET situacion = 2, fecha_baja = getdate()
    WHERE compania = @pch_compania And
          trabajador = @pch_trabajador And
          concepto = @psi_concepto And
          secuencia = @pti_secuencia

    IF @@ERROR <> 0 
        RAISERROR 206800 'Error al actualizar la situacion de la tabla [MF_Embargos]'
END

GO

GRANT EXECUTE ON sp_fdt_baja_embargos TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fdt_baja_oficinas_embargos]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fdt_baja_oficinas_embargos
GO
CREATE PROCEDURE dbo.sp_fdt_baja_oficinas_embargos
(
    @pch_compania            char(4),
    @pch_codigo	           char(10),
    @pch_descripcion     varchar(50)
)
AS
BEGIN
    IF EXISTS ( SELECT 1 FROM fdt_embargos_oficinas
                WHERE compania = @pch_compania And
                      cod_oficina = @pch_codigo )
    BEGIN
		DELETE fdt_embargos_oficinas
		WHERE compania = @pch_compania And
	              cod_oficina = @pch_codigo    

	    IF @@ERROR <> 0 
	    BEGIN
	        RAISERROR 206800 'Error al modificar en la tabla [fdt_embargos_oficinas]'
			RETURN
		END
    END

END

GO
GRANT EXECUTE ON dbo.sp_fdt_baja_oficinas_embargos TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fdt_cierre_embargos_ns') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_cierre_embargos_ns
GO
CREATE PROCEDURE dbo.sp_fdt_cierre_embargos_ns
(  
    @pch_compania      char(4),  
    @psi_id_calendario smallint  
)  
/*********************************************************************/  
/*** Modulo:      Módulo Fiscal Colombiano - Embargos              ***/  
/*** Descripcion: Actualiza saldos y controla situacion            ***/  
/*** Autor:   Juan Carlos Leguizamon                           ***/  
/*** Fecha:   Junio 5 de 2002                                  ***/  
/*** Revisiones: Sep-22-06 Por si el mismo embargo queda en mas de un registro ***/  
/*********************************************************************/  
AS  
DECLARE  
    @vdt_fecha_pago    smalldatetime  
BEGIN  
    SELECT  
        @vdt_fecha_pago = fecha_pago  
    FROM  
        calendario_procesos  
    WHERE  
        id_calendario = @psi_id_calendario  
  
    SELECT tra = trabajador, con = concepto, sec = factor_02, imp = sum(importe)  
    INTO #embargos  
    FROM transacciones_ns a  
    WHERE compania = @pch_compania  
      AND id_calendario = @psi_id_calendario  
      AND EXISTS (SELECT 1 FROM fdt_embargos x  
                  WHERE x.compania = a.compania   
                    AND x.trabajador = a.trabajador  
                    AND x.secuencia = a.factor_02  
                    AND x.monto_total > 0  
                    AND x.situacion = 1)  
   GROUP BY trabajador, concepto, factor_02  
  
    UPDATE fdt_embargos  
    SET saldo_actual = saldo_actual - imp  
    FROM #embargos  
    WHERE trabajador = tra  
      AND concepto = con  
      AND secuencia = sec  
      AND compania = @pch_compania  
      AND monto_total > 0  
      AND situacion = 1  
  
    DROP TABLE #embargos  
  
    UPDATE fdt_embargos  
    SET saldo_actual = 0, situacion = 2, fecha_baja = @vdt_fecha_pago  
    WHERE compania = @pch_compania   
      AND monto_total > 0  
      AND situacion = 1  
      AND saldo_actual <= 0  
END  
GO
GRANT EXECUTE ON dbo.sp_fdt_cierre_embargos_ns TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_crea_embargo') IS NOT NULL
   DROP PROCEDURE dbo.sp_fdt_crea_embargo
GO
CREATE PROCEDURE dbo.sp_fdt_crea_embargo  
(  
    @pch_compania      char(4),  
    @pch_trabajador    char(10),  
    @psi_concepto      smallint,  
    @pti_secuencia     tinyint,  
    @pdt_fecha_embargo smalldatetime,  
    @pdc_oficina       decimal(6,0),  
    @pti_clase         tinyint,  
    @pvc_expediente    varchar(10),  
    @pdc_juzgado       decimal(12,0),  
    @pti_banco         tinyint,  
    @pdc_cuenta        decimal(12,0),  
    @pti_tipo_id_dem   tinyint,  
    @pdc_id_demandante decimal(11,0),  
    @pvc_apellidos     varchar(20),  
    @pvc_nombres       varchar(100),  
    @pch_agr_conceptos char(3),  
    @psi_cnc_base      smallint,  
    @pti_quinta_parte  tinyint,  
    @pdc_monto_total   decimal(14,2),  
    @pdc_porcentaje    decimal(5,2),  
    @pdc_cuota_fija    decimal(14,2),  
    @pdc_saldo_actual  decimal(14,2)
--agregado por DCRP Agosto 22/2003
    ,@pch_ofOrigen	char(4)
    ,@pch_ofDestino	char(4)
    ,@pch_ciudad_pago   char(2)  
    ,@pti_porcentaje_aum tinyint
    ,@pti_valor_aum	decimal(14,2)
    ,@pti_mes_aum   tinyint
    ,@pin_anio_desde	integer
)  
/*********************************************************************/  
/*** Modulo:      Módulo Fiscal ADAM V.3 - Embargos                ***/  
/*** Descripcion: Crea o Actualiza el embargo para el trabajador   ***/  
/*** Autor:   Juan Carlos Leguizamon                           ***/  
/*** Fecha:   Abril 22 de 2002                                 ***/  
/*** Motor:   SQL Server 7.0 Version interna: 1.00      ***/  
/*********************************************************************/  
AS  
BEGIN  
    IF NOT EXISTS(SELECT 1 FROM fdt_embargos  
                  WHERE compania = @pch_compania And   
                        trabajador = @pch_trabajador And  
                        concepto = @psi_concepto And  
                        secuencia = @pti_secuencia)  
    BEGIN  
        INSERT INTO fdt_embargos  
            (compania,  
             trabajador,  
             concepto,  
             secuencia,  
             fecha_alta,  
             situacion,  
             consecutivo_oficina,  
             oficina_origen,  
             oficina_destino,  
             clase_deposito,  
             numero_expediente,  
             codigo_juzgado,  
             banco,  
             cuenta,  
             tipo_id_demandante,  
             id_demandante,  
             apellido_demandante,  
             nombre_demandante,  
             agr_conceptos_base,  
             concepto_base,  
             quinta_parte,  
             monto_total,  
             saldo_actual,  
             porcentaje,  
             cuota_fija,
	         ciudad_pago,
	         porcentaje_aumento,
             valor_aumento,
             mes_aumento,
             anio_desde)  
        VALUES  
            (@pch_compania,  
             @pch_trabajador,  
             @psi_concepto,  
             @pti_secuencia,  
             @pdt_fecha_embargo,  
             1,  
             @pdc_oficina,  
             @pch_ofOrigen, --'0010',  
             @pch_ofDestino, --'0010',  
             @pti_clase,  
             @pvc_expediente,  
             @pdc_juzgado,  
             @pti_banco,  
             @pdc_cuenta,  
             @pti_tipo_id_dem,  
             @pdc_id_demandante,  
             @pvc_apellidos,  
             @pvc_nombres,  
             @pch_agr_conceptos,  
             @psi_cnc_base,  
             @pti_quinta_parte,  
             @pdc_monto_total,  
             @pdc_monto_total,  
             @pdc_porcentaje,  
             @pdc_cuota_fija,
	         @pch_ciudad_pago,
             @pti_porcentaje_aum,
	         @pti_valor_aum,
             @pti_mes_aum,
             @pin_anio_desde)  
    END  
    ELSE  
    BEGIN  
        UPDATE fdt_embargos  
        SET  fecha_alta = @pdt_fecha_embargo,  
             consecutivo_oficina = @pdc_oficina,  
             clase_deposito = @pti_clase,  
             numero_expediente = @pvc_expediente,  
             codigo_juzgado = @pdc_juzgado,  
             banco = @pti_banco,  
             cuenta = @pdc_cuenta,  
             tipo_id_demandante = @pti_tipo_id_dem,  
             id_demandante = @pdc_id_demandante,  
             apellido_demandante = @pvc_apellidos,  
             nombre_demandante = @pvc_nombres,  
             agr_conceptos_base = @pch_agr_conceptos,  
             concepto_base = @psi_cnc_base,  
             quinta_parte = @pti_quinta_parte,   
             monto_total = @pdc_monto_total,  
             porcentaje = @pdc_porcentaje,  
             cuota_fija = @pdc_cuota_fija,  
             saldo_actual = @pdc_saldo_actual,
	         oficina_origen = @pch_ofOrigen,  --agregado DCRP Agosto21/2003
             oficina_destino = @pch_ofDestino,
             ciudad_pago = @pch_ciudad_pago,
	         porcentaje_aumento = @pti_porcentaje_aum,
	         valor_aumento = @pti_valor_aum,
             mes_aumento = @pti_mes_aum,
             anio_desde = @pin_anio_desde
      WHERE  
            compania = @pch_compania And  
            trabajador = @pch_trabajador And  
            concepto = @psi_concepto And  
            secuencia = @pti_secuencia  
    END  

    UPDATE fdt_embargos SET cuenta = null WHERE cuenta = 0
END  
GO
GRANT EXECUTE ON dbo.sp_fdt_crea_embargo TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_incorpora_embargos_ni') IS NOT NULL
   DROP PROCEDURE dbo.sp_fdt_incorpora_embargos_ni
GO
CREATE PROCEDURE dbo.sp_fdt_incorpora_embargos_ni
(
    @pch_compania           	char(4)     	= NULL, 
    @pch_tipo_nomina        	char(2)     	= NULL,
    @psi_anio_acumular      	smallint    	= 0, 
    @pti_mes_acumular       	tinyint    	= 0,
    @psi_numero_liquidacion 	smallint 	= 0, 
    @pch_trabajador		char(10)    	= NULL,
    @pdt_fecha_liquidacion	smalldatetime	= NULL,
    @pch_usuario            	char(30)    	= NULL,
    @pdt_fecha_hoy		smalldatetime
)
/*********************************************************************/
/*** Modulo:      Modulo Fiscal Embargos                           ***/
/*** Descripcion: Incorpora embargos a la liquidación              ***/
/*** Autor:	  Juan Carlos Leguizamon                           ***/
/*** Fecha:	  Junio 14 de 2002                                 ***/
/*** Motor:	  SQL Server 7.0	Version interna: 1.00      ***/
/*********************************************************************/
AS
DECLARE 
    @cch_trabajador    char(10),
    @csi_concepto      smallint,
    @cti_secuencia     tinyint,
    @cch_agr_base      char(3),
    @csi_cnc_base smallint,
    @cti_quinta_parte  tinyint,
    @cdc_monto_total   decimal(14,2),
    @cdc_saldo_actual  decimal(14,2),
    @cdc_porcentaje    decimal(5,2),
    @cdc_cuota_fija    decimal(14,2),
    @vdc_factor_01     decimal(15,6),
    @vch_referencia    char(10),
    @vch_referencia2   char(10)

BEGIN
    /* Eliminar las transacciones ya generadas por este incorpora */
    DELETE
        liquidaciones_det
    WHERE
        compania = @pch_compania And
        tipo_nomina = @pch_tipo_nomina And
        anio_acumular = @psi_anio_acumular And
        mes_acumular = @pti_mes_acumular And
        numero_liquidacion = @psi_numero_liquidacion And
        origen_transaccion = 9 And
        (
         (trabajador = @pch_trabajador And IsNull(LTrim(RTrim(@pch_trabajador)), '') <> '') OR
         (IsNull(LTrim(RTrim(@pch_trabajador)), '') = '')
        )

    /* Recorrer los embargos activos */
    DECLARE cr_embargos CURSOR FOR
    SELECT
        e.trabajador, e.concepto, e.secuencia, e.agr_conceptos_base, 
        IsNull(e.concepto_base,0), IsNull(e.quinta_parte,0), 
        IsNull(e.monto_total,0), IsNull(e.saldo_actual,0),
        IsNull(e.porcentaje,0), IsNull(e.cuota_fija,0)
    FROM fdt_embargos e
    INNER JOIN trabajadores_grales tg ON e.compania = tg.compania And e.trabajador = tg.trabajador AND tg.sit_trabajador = 1
    INNER JOIN rel_conc_tipo_nomina rctn ON rctn.compania = e.compania AND rctn.concepto = e.concepto AND rctn.tipo_nomina = @pch_tipo_nomina
    INNER JOIN fdt_embargos_tipo_nom fetn ON fetn.compania = e.compania AND fetn.trabajador = e.trabajador AND fetn.concepto = e.concepto AND fetn.secuencia = e.secuencia AND fetn.tipo_nomina = @pch_tipo_nomina  
    WHERE
        e.compania = @pch_compania And
        e.situacion = 1 And
        (
         (LTrim(RTrim(tg.trabajador)) = LTrim(RTrim(@pch_trabajador)) And IsNull(LTrim(RTrim(@pch_trabajador)), '') <> '') OR
         (IsNull(LTrim(RTrim(@pch_trabajador)), '') = '' And 
          tg.trabajador in (SELECT trabajador FROM liquidaciones_enc 
                            WHERE compania = @pch_compania And
                                  numero_liquidacion = @psi_numero_liquidacion))
        )

    OPEN cr_embargos

    FETCH cr_embargos
    INTO @cch_trabajador, @csi_concepto, @cti_secuencia, @cch_agr_base, @csi_cnc_base,
         @cti_quinta_parte, @cdc_monto_total, @cdc_saldo_actual, @cdc_porcentaje, @cdc_cuota_fija

    WHILE @@FETCH_STATUS = 0 
    BEGIN
        IF (@cdc_monto_total + @cdc_saldo_actual > 0) OR (@cdc_monto_total = 0)
        BEGIN
            /* factor_01 */
            IF @cdc_monto_total + @cdc_saldo_actual > 0
	BEGIN
                IF @cdc_saldo_actual - @cdc_cuota_fija > 0
                    SET @vdc_factor_01 = @cdc_cuota_fija
                ELSE
                    SET @vdc_factor_01 = @cdc_saldo_actual
	END
	ELSE
                    SET @vdc_factor_01 = @cdc_cuota_fija


            /* referencias */                        
            IF @csi_cnc_base > 0
                SELECT @vch_referencia = Convert(varchar, @csi_cnc_base),
                       @vch_referencia2 = 'C'
            ELSE
                SELECT @vch_referencia = @cch_agr_base,
                       @vch_referencia2 = 'A'
            
        EXEC sp_alta_liquidaciones_det
            @pch_compania,
            @pch_tipo_nomina,
            @psi_anio_acumular,
            @pti_mes_acumular,
            @psi_numero_liquidacion,
            @csi_concepto,
            @cch_trabajador,
            @vch_referencia,    /* referencia */
            null,    		/* secuencia */
            @vch_referencia2,	/* referencia2 */
            @pdt_fecha_hoy,	/* fecha */
            @pdt_fecha_hoy,    	/* fecha2*/
            @cdc_porcentaje,	/* tiempo */
            @vdc_factor_01,     /* factor_01 */
            @cti_secuencia, 	/* factor_02 */
            @cti_quinta_parte,  /* factor_03 */
            0,                  /* importe_reportado */
            0,       		/* importe */
            null,    		/* turno_trn */
            null,    		/* puesto_trn */
            null,    		/* agrupacion_01_trn */
            null,    		/* dato_01_trn */
            null,    		/* agrupacion_02_trn */
            null,    		/* dato_02_trn */
            null,    		/* agrupacion_03_trn */
            null,    		/* dato_03_trn */
            null,    		/* agrupacion_04_trn */
            null,    		/* dato_04_trn */
            null,               /* coleccion_1 */
            null,               /* coleccion_2 */
            null,               /* coleccion_2 */
            9,    		/* origen_transaccion */
            @pch_usuario, 	/* usuario_registro */
            @pdt_fecha_hoy,	/* fecha_registro */
            null,    		/* usuario_proceso */
            null,		/* fecha_proceso */
            null,    		/* usuario_aplico */
            null,    		/* fecha_aplico */
            1    		/* sit_transaccion */

        END /* IF (@cdc_monto_total + @cdc_saldo_actual > 0) OR (@cdc_monto_total = 0) */

        FETCH cr_embargos
        INTO @cch_trabajador, @csi_concepto, @cti_secuencia, @cch_agr_base, @csi_cnc_base,
             @cti_quinta_parte, @cdc_monto_total, @cdc_saldo_actual, @cdc_porcentaje, @cdc_cuota_fija

    END /* WHILE @@FETCH_STATUS = 0 */

    CLOSE cr_embargos
    DEALLOCATE cr_embargos
END
GO
GRANT EXECUTE ON dbo.sp_fdt_incorpora_embargos_ni TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fdt_incorpora_embargos_ns') IS NOT NULL
   DROP PROCEDURE dbo.sp_fdt_incorpora_embargos_ns
GO
CREATE PROCEDURE dbo.sp_fdt_incorpora_embargos_ns  
(  
    @pch_compania        char(4),  
    @psi_id_calendario   smallint,  
    @pch_clase_nomina    char(2),  
    @pch_trabajador      char(10),  
    @pvc_usuario         varchar(30),  
    @pdt_fecha_hoy       smalldatetime  
)  
AS  
/*********************************************************************/  
/*** Modulo:      Modulo Fiscal ADAM v3 - Embargos                 ***/  
/*** Descripcion: Incorpora embargos a la nómina                   ***/  
/*** Autor:   Juan Carlos Leguizamon                               ***/  
/*** Fecha:   Abril 23 de 2002                                     ***/  
-- Revisiones:   
-- Sept.01/04.   
-- Sept.02/04. Incorporar el saldo actual en el factor_03 (implica   
-- variable para que la política halle si debe utilizar "quinta parte"  
-- Junio 29/06.  Tener en cuenta nueva tabla fdt_embargos_tipo_nom ***/  
/*********************************************************************/  
DECLARE   
    @cch_trabajador    char(10),  
    @csi_concepto      smallint,  
    @cti_secuencia     tinyint,  
    @cch_agr_base      char(3),  
    @csi_cnc_base      smallint,  
    @cti_quinta_parte  tinyint,  
    @cdc_monto_total   decimal(14,2),  
    @cdc_saldo_actual  decimal(14,2),  
    @cdc_porcentaje    decimal(5,2),  
    @cdc_cuota_fija    decimal(14,2),  
    @vdc_factor_01     decimal(15,6),  
    @vch_referencia    char(10),  
    @vch_referencia2   char(10),  
    @vch_tipo_nomina   char(2)  
BEGIN  
    IF EXISTS (SELECT 1 FROM cal_proc_cias WHERE compania = @pch_compania AND id_calendario = @psi_id_calendario AND sit_periodo = 2)  
    BEGIN  
        RAISERROR ('El periodo está cerrado', 16, 1)  
        RETURN  
    END  
  
    /* Hallar el Tipo de Nómina */  
    SELECT @vch_tipo_nomina = tipo_nomina FROM calendario_procesos  
    WHERE id_calendario = @psi_id_calendario  
  
    /* Eliminar las transacciones ya generadas por este incorpora */  
    DELETE  
        transacciones_ns  
    WHERE  
        compania = @pch_compania And  
        clase_nomina = @pch_clase_nomina And  
        id_calendario = @psi_id_calendario And  
        origen_transaccion = 9 And  
        (  
         (trabajador = @pch_trabajador And IsNull(LTrim(RTrim(@pch_trabajador)), '') <> '') OR  
         (IsNull(LTrim(RTrim(@pch_trabajador)), '') = '')  
        )  
  
    /* Recorrer los embargos activos */  
    DECLARE cr_embargos CURSOR FOR  
    SELECT  
        e.trabajador, e.concepto, e.secuencia, e.agr_conceptos_base,   
        IsNull(e.concepto_base,0), IsNull(e.quinta_parte,0),   
        IsNull(e.monto_total,0), IsNull(e.saldo_actual,0),  
        IsNull(e.porcentaje,0), IsNull(e.cuota_fija,0)  
    FROM fdt_embargos e  
    INNER JOIN trabajadores_grales tg ON e.compania = tg.compania And e.trabajador = tg.trabajador AND tg.sit_trabajador = 1  
    INNER JOIN rel_conc_tipo_nomina rctn ON rctn.compania = e.compania AND rctn.concepto = e.concepto AND rctn.tipo_nomina = @vch_tipo_nomina  
    INNER JOIN fdt_embargos_tipo_nom fetn ON fetn.compania = e.compania AND fetn.trabajador = e.trabajador AND fetn.concepto = e.concepto AND fetn.secuencia = e.secuencia AND fetn.tipo_nomina = @vch_tipo_nomina  
    WHERE  
        e.compania = @pch_compania And  
        tg.clase_nomina = @pch_clase_nomina And  
        e.situacion = 1 And  
        (  
         (e.trabajador = @pch_trabajador And IsNull(LTrim(RTrim(@pch_trabajador)), '') <> '') OR  
         (IsNull(LTrim(RTrim(@pch_trabajador)), '') = '')  
        )   
  
    OPEN cr_embargos  
  
    FETCH cr_embargos  
    INTO @cch_trabajador, @csi_concepto, @cti_secuencia, @cch_agr_base, @csi_cnc_base,  
         @cti_quinta_parte, @cdc_monto_total, @cdc_saldo_actual, @cdc_porcentaje, @cdc_cuota_fija  
  
    WHILE @@FETCH_STATUS = 0   
    BEGIN  
        IF (@cdc_monto_total + @cdc_saldo_actual > 0) OR (@cdc_monto_total = 0)  
        BEGIN  
            /* factor_01 */  
            IF @cdc_monto_total + @cdc_saldo_actual > 0  
     BEGIN  
                IF @cdc_saldo_actual - @cdc_cuota_fija > 0  
                    SET @vdc_factor_01 = @cdc_cuota_fija  
                ELSE  
                    SET @vdc_factor_01 = @cdc_saldo_actual  
     END  
     ELSE  
                    SET @vdc_factor_01 = @cdc_cuota_fija  
  
  
        /* referencias */                          
        IF @csi_cnc_base > 0  
            SELECT @vch_referencia = Convert(varchar, @csi_cnc_base),  
                   @vch_referencia2 = 'C'  
        ELSE  
            SELECT @vch_referencia = @cch_agr_base,  
                   @vch_referencia2 = 'A'  
  
        SET @vch_referencia = ISNULL(@vch_referencia, '')  
          
        EXEC sp_alta_transacciones_ns  
            @pch_compania,  
            @pch_clase_nomina,  
            @psi_id_calendario,  
            @csi_concepto,  
            @cch_trabajador,  
            @vch_referencia,   /* referencia */  
            NULL,      /* secuencia */  
            @vch_referencia2, /* referencia2 */  
            @pdt_fecha_hoy, /* fecha */  
            @pdt_fecha_hoy,     /* fecha2*/  
            @cdc_porcentaje, /* tiempo */  
            @vdc_factor_01,    /* factor_01 */  
            @cti_secuencia,  /* factor_02 */  
            @cti_quinta_parte,    /* factor_03 */  
            0,         /* importe_reportado */  
            0,         /* importe */  
            null,      /* turno_trn */  
            null,      /* puesto_trn */  
            null,      /* agrupacion_01_trn */  
            null,      /* dato_01_trn */  
            null,      /* agrupacion_02_trn */  
            null,      /* dato_02_trn */  
            null,      /* agrupacion_03_trn */  
            null,      /* dato_03_trn */  
            null,      /* agrupacion_04_trn */  
            null,      /* dato_04_trn */  
            9,      /* origen_transaccion */  
            @pvc_usuario,  /* usuario_registro */  
            @pdt_fecha_hoy, /* fecha_registro */  
            null,      /* usuario_proceso */  
            null,  /* fecha_proceso */  
            null,      /* usuario_cambio */  
            null,      /* fecha_cambio */  
            1,      /* sit_transaccion */  
            1          /* checa bajas del periodo */  
  
        END /* IF (@cdc_monto_total + @cdc_saldo_actual > 0) OR (@cdc_monto_total = 0) */  
  
        FETCH cr_embargos  
        INTO @cch_trabajador, @csi_concepto, @cti_secuencia, @cch_agr_base, @csi_cnc_base,  
             @cti_quinta_parte, @cdc_monto_total, @cdc_saldo_actual, @cdc_porcentaje, @cdc_cuota_fija  
  
    END /* WHILE @@FETCH_STATUS = 0 */  
  
    CLOSE cr_embargos  
    DEALLOCATE cr_embargos  
END  
GO
GRANT EXECUTE ON dbo.sp_fdt_incorpora_embargos_ns TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_reapertura_embargos_ns') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_reapertura_embargos_ns
GO
CREATE PROCEDURE dbo.sp_fdt_reapertura_embargos_ns
(  
    @pch_compania      char(4),  
    @psi_id_calendario smallint  
)  
/*********************************************************************/  
/*** Modulo:      Módulo Fiscal Colombiano - Embargos              ***/  
/*** Descripcion: Actualiza saldos y controla situacion            ***/  
/*** Autor:   Juan Carlos Leguizamon                           ***/  
/*** Fecha:   Junio 5 de 2002                                  ***/  
/*** Revisiones: Sep-22-06 Por si el mismo embargo queda en mas de un registro ***/  
/*********************************************************************/  
AS  
BEGIN  
    SELECT tra = trabajador, con = concepto, sec = factor_02, imp = sum(importe)  
    INTO #embargos  
    FROM transacciones_ns a  
    WHERE compania = @pch_compania  
      AND id_calendario = @psi_id_calendario  
      AND EXISTS (SELECT 1 FROM fdt_embargos x  
                  WHERE x.compania = a.compania   
                    AND x.trabajador = a.trabajador  
                    AND x.secuencia = a.factor_02  
                    AND x.monto_total > 0)  
   GROUP BY trabajador, concepto, factor_02  
  
    UPDATE fdt_embargos  
    SET saldo_actual = saldo_actual + imp  
    FROM #embargos  
    WHERE trabajador = tra  
      AND concepto = con  
      AND secuencia = sec  
      AND compania = @pch_compania  
      AND monto_total > 0  
  
    DROP TABLE #embargos  
  
    UPDATE fdt_embargos  
    SET situacion = 1, fecha_baja = NULL  
    WHERE compania = @pch_compania   
      AND monto_total > 0  
      AND situacion = 2  
      AND saldo_actual > 0  
END  
GO
GRANT EXECUTE ON dbo.sp_fdt_reapertura_embargos_ns TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_var_ailiq_refe') IS NOT NULL
DROP PROCEDURE dbo.sp_var_ailiq_refe
GO
CREATE PROCEDURE dbo.sp_var_ailiq_refe
    @bcalind bit,
    @pch_compania char(4),
    @pch_clase_nomina char(2),
    @psi_id_cal smallint,
    @pch_tipo_nomina char(2),
    @psi_anio smallint,
    @pti_periodo tinyint,
    @pdt_fec_termino smalldatetime,
    @pch_trabajador char(10),
    @psi_concepto smallint,
    @pch_referencia char(10),
    @psi_secuencia smallint, 
    @chsub_var1 varchar(10),
    @chsub_var2	varchar(10),
    @mvar_value	decimal(19,6) OUTPUT, 
    @chvar_value varchar(40) OUTPUT,
    @id_sesion smallint
AS 
/*****************************************************************/
/*** Modulo:      Módulo Fiscal Colombiano ADAM V.3 - Embargos ***/
/*** Descripcion: Halla el valor base en tiempo de cálculo     ***/
/*** Autor:	  Laura Guzman / 2001                          ***/
/*** Revision:    Juan Carlos Leguizamón                       ***/
/*** Fecha:	  Junio 5 2002                                 ***/
/*** Motor:	  SQL Server 7.0	Version interna: 1.00  ***/
/*****************************************************************/
BEGIN 
DECLARE 
    @vdc_valor decimal(19,6), 
    @vvc_clave varchar(10),
    @vvc_varname varchar(40), 
    @vti_status tinyint, 
    @vvc_valor varchar(40), 
    @vch_varclass char(2),
    @vti_flag tinyint,
    @vsi_anio_acumular smallint,
    @vti_mes_acumular tinyint,
    @vch_tipo_nomina char(2),
    @vsi_numero_liquidacion smallint

 
    SELECT @vdc_valor = 0, @mvar_value = 0, @chvar_value = NULL

    IF @pti_periodo > 0
        RETURN

    /*** Se obtiene la información necesaria para la consulta ***/
    SET @vvc_varname = "anio_acumular"
    EXEC sp_varname 
        @vvc_varname, 
        @vdc_valor 		OUTPUT,
	@vvc_valor 		OUTPUT,
	@vch_varclass 		OUTPUT,
	@vti_flag		OUTPUT,
	@vti_status 		OUTPUT,
	@id_sesion
    SET @vsi_anio_acumular = @vdc_valor

    SET @vvc_varname = "mes_acumular"
    EXEC sp_varname 
        @vvc_varname,
	@vdc_valor 		OUTPUT,
	@vvc_valor 		OUTPUT,
	@vch_varclass 		OUTPUT,
	@vti_flag		OUTPUT,
	@vti_status 		OUTPUT,
	@id_sesion
    SET @vti_mes_acumular = @vdc_valor

    SELECT @vvc_varname = "numero_liquidacion"
    EXEC sp_varname 
        @vvc_varname,
	@vdc_valor 		OUTPUT,
	@vvc_valor 		OUTPUT,
	@vch_varclass 		OUTPUT,
	@vti_flag		OUTPUT,
	@vti_status 		OUTPUT,
	@id_sesion
    SET @vsi_numero_liquidacion = @vdc_valor

    SET @vvc_varname = "tipo_nomina"
    EXEC sp_varname 
	@vvc_varname,
	@vdc_valor 		OUTPUT,
	@vvc_valor 		OUTPUT,
	@vch_varclass 		OUTPUT,
	@vti_flag		OUTPUT,
	@vti_status 		OUTPUT,
	@id_sesion
    SET @vch_tipo_nomina = @vvc_valor
        
    SELECT
        @vvc_clave = referencia2
    FROM
        liquidaciones_det
    WHERE
        compania = @pch_compania And
        tipo_nomina = @vch_tipo_nomina And
        anio_acumular = @vsi_anio_acumular And
        concepto = @psi_concepto And
        numero_liquidacion = @vsi_numero_liquidacion And
        trabajador = @pch_trabajador And
        referencia = @pch_referencia And
        secuencia = @psi_secuencia

    IF @vvc_clave = 'A'  -- La base es una agrupación de conceptos
    BEGIN               
        SELECT
            @vdc_valor = Sum(IsNull(Case when signo = '-' then -1*importe else importe end,0))
        FROM
            liquidaciones_det liq, rel_conceptos_agr rca
	WHERE
            liq.compania = rca.compania And liq.concepto = rca.concepto And
            liq.compania = @pch_compania And
            liq.tipo_nomina  = @pch_tipo_nomina And
            liq.anio_acumular = @vsi_anio_acumular And
            liq.numero_liquidacion = @vsi_numero_liquidacion And
            liq.trabajador = @pch_trabajador And
            rca.agr_conceptos = LTrim(RTrim(@pch_referencia))

    END
    ELSE -- La base es un concepto
    BEGIN
        SELECT
            @vdc_valor = Sum(IsNull(importe,0))
        FROM
            liquidaciones_det
	WHERE
            compania = @pch_compania And
            tipo_nomina  = @pch_tipo_nomina And
            anio_acumular = @vsi_anio_acumular And
            numero_liquidacion = @vsi_numero_liquidacion And
            trabajador = @pch_trabajador And
            concepto = LTrim(RTrim(@pch_referencia))
    END


    SELECT @mvar_value = IsNull(@vdc_valor,0)
    RETURN
END
GO
GRANT EXECUTE ON dbo.sp_var_ailiq_refe TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_var_aiper_refe') IS NOT NULL
DROP PROCEDURE dbo.sp_var_aiper_refe  
GO
CREATE PROCEDURE dbo.sp_var_aiper_refe  
    @bcalind            bit,
    @pch_compania       char(4),
    @pch_clase_nomina   char(2),
    @psi_id_cal         smallint,
    @pch_tipo_nomina    char(2),
    @psi_anio	        smallint,
    @pti_periodo        tinyint,
    @pdt_fec_termino	smalldatetime,
    @pch_trabajador     char(10),
    @psi_concepto       smallint,
    @pch_referencia     char(10),
    @psi_secuencia      smallint, 
    @chsub_var1	        varchar(10),
    @chsub_var2	        varchar(10),
    @mvar_value	        decimal(19,6) OUTPUT, 
    @chvar_value        varchar(40) OUTPUT,
    @id_sesion          smallint
AS 
/*****************************************************************/
/*** Modulo:      Módulo Fiscal Colombiano ADAM V.3 - Embargos ***/
/*** Descripcion: Halla el valor base en tiempo de cálculo     ***/
/*** Autor:	  Laura Guzman / 2001                          ***/
/*** Revision:    Juan Carlos Leguizamón                       ***/
/*** Fecha:	  Junio 5 2002                                 ***/
/*** Motor:	  SQL Server 7.0	Version interna: 1.00  ***/
/*****************************************************************/
BEGIN 
DECLARE 
    @vdc_valor    decimal(19,6), 
    @vvc_clave    varchar(10)
 
    SELECT @vdc_valor = 0, @mvar_value = 0, @chvar_value = NULL

    IF @pti_periodo = 0
        RETURN

    SELECT
        @vvc_clave = referencia2
    FROM
        transacciones_ns
    WHERE
        compania = @pch_compania And
        clase_nomina = @pch_clase_nomina And
        id_calendario = @psi_id_cal And
        concepto = @psi_concepto And
        trabajador = @pch_trabajador And
        referencia = @pch_referencia And
        secuencia = @psi_secuencia
        
        
    IF @vvc_clave = 'A'  -- La base es una agrupación de conceptos
    BEGIN               
        SELECT
            @vdc_valor = Sum(IsNull(Case when signo = '-' then -1*importe else importe end,0))
        FROM
            transacciones_ns tns, rel_conceptos_agr rca
	WHERE
            tns.compania = rca.compania And tns.concepto = rca.concepto And
            tns.compania = @pch_compania And
            tns.clase_nomina  = @pch_clase_nomina And
            tns.id_calendario = @psi_id_cal And
            tns.trabajador = @pch_trabajador And
            rca.agr_conceptos = LTrim(RTrim(@pch_referencia))

    END
    ELSE -- La base es un concepto
    BEGIN
        SELECT
            @vdc_valor = Sum(IsNull(importe,0))
        FROM
            transacciones_ns
	WHERE
            compania = @pch_compania And
            clase_nomina  = @pch_clase_nomina And
            id_calendario = @psi_id_cal And
            concepto = LTrim(RTrim(@pch_referencia)) And
            trabajador = @pch_trabajador 
    END

    SELECT @mvar_value = IsNull(@vdc_valor,0)
    RETURN
END
GO
GRANT EXECUTE ON dbo.sp_var_aiper_refe   TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fdt_alta_emb_tipo_nom') IS NOT NULL
   DROP PROCEDURE dbo.sp_fdt_alta_emb_tipo_nom
GO
CREATE PROCEDURE dbo.sp_fdt_alta_emb_tipo_nom  
(  
    @pch_compania      char(4),  
    @pch_trabajador    char(10),  
    @psi_concepto      smallint,  
    @pti_secuencia     tinyint,  
    @pch_tipo_nom	   char(2),
    @pti_alta          tinyint
)  
/*********************************************************************/  
/*** Modulo:      Módulo Fiscal ADAM V.3 - Embargos                ***/  
/*** Descripcion: Crea o Actualiza los tipos de nomina del embargo ***/  
/*** Autor:   Laura A. Guzmán                                      ***/  
/*** Fecha:   Junio 28 de 2006                                     ***/  
/*** Motor:   SQL Server 7.0 Version interna: 1.00                 ***/  
/*********************************************************************/  
AS  
BEGIN  
    DELETE FROM fdt_embargos_tipo_nom
    WHERE compania = @pch_compania And   
    trabajador = @pch_trabajador And  
    concepto = @psi_concepto And  
    secuencia = @pti_secuencia and
    tipo_nomina = @pch_tipo_nom

    IF @pti_alta = 1
        INSERT INTO fdt_embargos_tipo_nom
            (compania,  
             trabajador,  
             concepto,  
             secuencia,  
             tipo_nomina)  
        VALUES  
            (@pch_compania,  
             @pch_trabajador,  
             @psi_concepto,  
             @pti_secuencia,  
             @pch_tipo_nom)

END  
GO
GRANT EXECUTE ON dbo.sp_fdt_alta_emb_tipo_nom TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fdt_aum_embargos_ns') IS NOT NULL
   DROP PROCEDURE dbo.sp_fdt_aum_embargos_ns
GO
CREATE PROCEDURE dbo.sp_fdt_aum_embargos_ns
(
    @pch_compania      char(4),
    @psi_id_calendario smallint
)
/*********************************************************************/
/*** Modulo:      Módulo Fiscal Colombiano - Embargos              ***/
/*** Descripcion: aumenta cuota fija de embargos                   ***/
/*** Autor:	  Laura A. Guzman M                                    ***/
/*** Fecha:	  Junio 29 de 2006                                     ***/
/*** Motor:	  SQL Server 2000	Version interna: 1.00              ***/
/*********************************************************************/
AS


DECLARE
    @vch_tipo_nom    char(2),
    @vsi_anio        smallint,
    @vsi_periodo     smallint,
    @vsi_mes         smallint

BEGIN
    SELECT
        @vch_tipo_nom = tipo_nomina, @vsi_anio = anio, @vsi_periodo = periodo, @vsi_mes = mes_acumular
    FROM
        calendario_procesos
    WHERE
        id_calendario = @psi_id_calendario


    INSERT INTO fdt_hist_aum_emb (compania, 
                                  trabajador, 
                                  concepto, 
                                  secuencia, 
                                  id_calendario,
                                  cuota_anterior,
                                  cuota_nueva,
                                  porcentaje_aum,
                                  valor_aum,
                                  tipo_nomina,
                                  anio,
                                  periodo)
    SELECT @pch_compania, a.trabajador, a.concepto, a.secuencia, @psi_id_calendario, a.cuota_fija, a.cuota_fija + (a.cuota_fija * (convert(decimal(5,2),b.dato) / 100)),
    convert(decimal(5,2),b.dato), 0, @vch_tipo_nom, @vsi_anio, @vsi_periodo
    FROM fdt_embargos a, fdt_parametros b
    WHERE a.compania = b.compania
    AND b.secuencia = a.porcentaje_aumento
    AND a.compania = @pch_compania
    AND a.situacion = 1
    AND a.porcentaje_aumento = b.secuencia
    AND b.parametro = 'otros'
    AND ISNULL(a.porcentaje_aumento,0) > 0
    AND a.mes_aumento = @vsi_mes
    AND a.anio_desde >= @vsi_anio


    INSERT INTO fdt_hist_aum_emb (compania, 
                                  trabajador, 
                                  concepto, 
                                  secuencia, 
                                  id_calendario,
                                  cuota_anterior,
                                  cuota_nueva,
                                  porcentaje_aum,
                                  valor_aum,
                                  tipo_nomina,
                                  anio,
                                  periodo)
    SELECT @pch_compania, a.trabajador, a.concepto, a.secuencia, @psi_id_calendario, a.cuota_fija, a.cuota_fija + a.valor_aumento,
    0, a.valor_aumento, @vch_tipo_nom, @vsi_anio, @vsi_periodo
    FROM fdt_embargos a, fdt_parametros b
    WHERE a.compania = b.compania
    AND b.secuencia = a.porcentaje_aumento
    AND a.compania = @pch_compania
    AND a.situacion = 1
    AND a.porcentaje_aumento = b.secuencia
    AND b.parametro = 'otros'
    AND ISNULL(a.valor_aumento,0) > 0
    AND a.mes_aumento = @vsi_mes
    AND a.anio_desde >= @vsi_anio

    UPDATE
        fdt_embargos
    SET
        cuota_fija = cuota_nueva
    FROM
        fdt_hist_aum_emb a
    WHERE
        a.compania = fdt_embargos.compania And
        a.trabajador = fdt_embargos.trabajador And
        a.concepto = fdt_embargos.concepto And
        a.secuencia = fdt_embargos.secuencia And
        a.id_calendario = @psi_id_calendario And
        fdt_embargos.situacion = 1

END
GO
GRANT EXECUTE ON dbo.sp_fdt_aum_embargos_ns TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fdt_rea_aum_emb_ns') IS NOT NULL
   DROP PROCEDURE dbo.sp_fdt_rea_aum_emb_ns
GO
CREATE PROCEDURE dbo.sp_fdt_rea_aum_emb_ns
(
    @pch_compania      char(4),
    @psi_id_calendario smallint
)
/*********************************************************************/
/*** Modulo:      Módulo Fiscal Colombiano - Embargos              ***/
/*** Descripcion: aumenta cuota fija de embargos                   ***/
/*** Autor:	  Laura A. Guzman M                                    ***/
/*** Fecha:	  Junio 29 de 2006                                     ***/
/*** Motor:	  SQL Server 2000	Version interna: 1.00              ***/
/*********************************************************************/
AS
BEGIN
    UPDATE
        fdt_embargos
    SET
        cuota_fija = cuota_anterior
    FROM
        fdt_hist_aum_emb a
    WHERE
        a.compania = fdt_embargos.compania And
        a.trabajador = fdt_embargos.trabajador And
        a.concepto = fdt_embargos.concepto And
        a.secuencia = fdt_embargos.secuencia And
        fdt_embargos.compania = @pch_compania And
        a.id_calendario = @psi_id_calendario 

    DELETE
        fdt_hist_aum_emb
    WHERE
        compania = @pch_compania And
        id_calendario = @psi_id_calendario
    

END
GO
GRANT EXECUTE ON dbo.sp_fdt_rea_aum_emb_ns TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_cierre_embargos_ni') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_cierre_embargos_ni
GO
CREATE PROCEDURE dbo.sp_fdt_cierre_embargos_ni
(  
    @pch_compania char(4),  
    @pch_trabajador char(10),  
    @pch_tipo_nom char(2),  
    @psi_anio_acum smallint,  
    @pti_mes_acum tinyint,  
    @psi_num_liq smallint  
)  
/*****************************************************************/  
/*** Modulo:      Módulo Fiscal Colombiano - Embargos          ***/  
/*** Descripcion: Actualiza saldos y controla situacion en NI  ***/  
/*** Autor:       Juan Carlos Leguizamon                       ***/  
/*** Fecha:       Sep-22-06                                    ***/  
/*****************************************************************/  
AS  
DECLARE  
    @vdt_fecha_pago    smalldatetime  
BEGIN  
    SELECT @vdt_fecha_pago = fecha_liquidacion  
    FROM liquidaciones_enc  
    WHERE compania = @pch_compania  
      AND tipo_nomina = @pch_tipo_nom  
      AND anio_acumular = @psi_anio_acum  
      AND mes_acumular = @pti_mes_acum  
      AND numero_liquidacion = @psi_num_liq  
      AND trabajador = @pch_trabajador  
  
    SELECT con = concepto, sec = factor_02, imp = sum(importe)  
    INTO #embs  
    FROM liquidaciones_det a  
    WHERE compania = @pch_compania  
      AND tipo_nomina = @pch_tipo_nom  
      AND anio_acumular = @psi_anio_acum  
      AND mes_acumular = @pti_mes_acum  
      AND numero_liquidacion = @psi_num_liq  
      AND trabajador = @pch_trabajador  
      AND EXISTS (SELECT 1 FROM fdt_embargos x  
                  WHERE a.compania = x.compania AND a.trabajador = x.trabajador  
                    AND a.concepto = x.concepto AND x.monto_total > 0 and x.situacion = 1)  
    GROUP BY concepto, factor_02  
  
    UPDATE fdt_embargos  
    SET saldo_actual = saldo_actual - imp  
    FROM #embs  
    WHERE concepto = con   
      AND secuencia = sec  
      AND compania = @pch_compania  
      AND trabajador = @pch_trabajador  
      AND monto_total > 0  
      AND situacion = 1  
  
    DROP TABLE #embs  
  
    UPDATE  
        fdt_embargos  
    SET  
        saldo_actual = 0, situacion = 2, fecha_baja = @vdt_fecha_pago  
    WHERE  
        compania = @pch_compania And  
        monto_total > 0 And  
        situacion = 1 And  
        saldo_actual <= 0  
END  
GO
GRANT EXECUTE ON dbo.sp_fdt_cierre_embargos_ni TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_reapertura_embargos_ni') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_reapertura_embargos_ni
GO
CREATE PROCEDURE dbo.sp_fdt_reapertura_embargos_ni
(  
    @pch_compania char(4),  
    @pch_trabajador char(10),  
    @pch_tipo_nom char(2),  
    @psi_anio_acum smallint,  
    @pti_mes_acum tinyint,  
    @psi_num_liq smallint  
)  
/*****************************************************************/  
/*** Modulo:      Módulo Fiscal Colombiano - Embargos          ***/  
/*** Descripcion: Actualiza saldos y controla situacion en NI  ***/  
/*** Autor:       Juan Carlos Leguizamon                       ***/  
/*** Fecha:       Sep-22-06                                    ***/  
/*****************************************************************/  
AS  
BEGIN  
    SELECT con = concepto, sec = factor_02, imp = sum(importe)  
    INTO #embs  
    FROM liquidaciones_det a  
    WHERE compania = @pch_compania  
      AND tipo_nomina = @pch_tipo_nom  
      AND anio_acumular = @psi_anio_acum  
      AND mes_acumular = @pti_mes_acum  
      AND numero_liquidacion = @psi_num_liq  
      AND trabajador = @pch_trabajador  
      AND EXISTS (SELECT 1 FROM fdt_embargos x  
                  WHERE a.compania = x.compania AND a.trabajador = x.trabajador  
                    AND a.concepto = x.concepto AND x.monto_total > 0 and x.situacion = 1)  
    GROUP BY concepto, factor_02  
  
    UPDATE fdt_embargos  
    SET saldo_actual = saldo_actual + imp  
    FROM #embs  
    WHERE concepto = con   
      AND secuencia = sec  
      AND compania = @pch_compania  
      AND trabajador = @pch_trabajador  
      AND monto_total > 0  
  
    DROP TABLE #embs  
  
    UPDATE  
        fdt_embargos  
    SET  
        situacion = 1, fecha_baja = NULL  
    WHERE  
        compania = @pch_compania And  
        monto_total > 0 And  
        situacion = 2 And  
        saldo_actual > 0  
END  
GO
GRANT EXECUTE ON dbo.sp_fdt_reapertura_embargos_ni TO PUBLIC
GO
SET QUOTED_IDENTIFIER OFF
IF OBJECT_ID('dbo.sp_var_ofcemb') IS NOT NULL
    DROP PROCEDURE dbo.sp_var_ofcemb
GO
CREATE PROCEDURE dbo.sp_var_ofcemb
(
    @pbi_calind bit,  
    @pch_compania char(4),  
    @pch_clase_nomina char(2),  
    @psi_id_cal smallint,  
    @pch_tipo_nomina char(2),  
    @psi_anio smallint,  
    @pti_periodo tinyint,  
    @pdt_fec_termino smalldatetime,  
    @pch_trabajador char(10),  
    @psi_concepto smallint,  
    @pch_referencia char(10),  
    @psi_secuencia smallint,   
    @chsub_var1 varchar(10),  
    @chsub_var2 varchar(10),  
    @mvar_value decimal(19,6) OUTPUT,   
    @chvar_value varchar(40) OUTPUT,  
    @id_sesion smallint
)
AS   
/*****************************************************************/  
/*** Modulo:      Módulo Fiscal Colombiano ADAM V.3 - Embargos ***/  
/*** Descripcion: Obtiene el código de oficina de destino      ***/  
/*** Autor:       Juan Carlos Leguizamón                       ***/  
/*** Fecha:       Octubre 13 de 2006                           ***/  
/*****************************************************************/  
BEGIN   
DECLARE   
    @vch_ofc_destino char(4),
    @vti_secuencia tinyint,
    @SQLString nVARCHAR(500),
    @ParmDefinition nVARCHAR(500),
    @chtable VARCHAR(40),
    @SQLString1 VARCHAR(500)
  
    IF @pti_periodo = 0  
        RETURN  
    
--    SELECT @chtable = table_name FROM table_actual WHERE id_sesion = @id_sesion

    SELECT    
        @vti_secuencia = factor_02    
    FROM    
        transacciones_ns    
    WHERE    
        compania = @pch_compania And    
        clase_nomina = @pch_clase_nomina And    
        id_calendario = @psi_id_cal And    
        concepto = @psi_concepto And    
        trabajador = @pch_trabajador And    
        referencia = @pch_referencia And    
        secuencia = @psi_secuencia     

/*
    SET @SQLString1 =   
    " SELECT @secuencia = factor_02 FROM " + @chtable + 
    " WHERE compania = '" + @pch_compania + "'" +
    " AND id_calendario = " + RTrim(@psi_id_cal) + 
    " AND trabajador = '" + @pch_trabajador + "'" +
    " AND concepto = " + RTrim(@psi_concepto) +  
    " AND clase_nomina  = '" + @pch_clase_nomina + "'" +
    " AND referencia = '" + @pch_referencia + "'" +
    " AND secuencia = " + RTRIM(@psi_secuencia)
    
    SET @ParmDefinition = '@secuencia tinyint OUTPUT'  
    EXECUTE sp_executesql @SQLString, @ParmDefinition, @vti_secuencia OUTPUT
*/    
    SELECT @vch_ofc_destino = oficina_destino
    FROM fdt_embargos
    WHERE compania = @pch_compania
      AND trabajador = @pch_trabajador
      AND concepto = @psi_concepto
      AND secuencia = @vti_secuencia
  
    SET @chvar_value = IsNull(@vch_ofc_destino,'')  
    RETURN  
END  
GO
GRANT EXECUTE ON dbo.sp_var_ofcemb TO PUBLIC
GO

DELETE FROM defn_variables_ns WHERE variable = 'ofcemb'
GO
INSERT INTO defn_variables_ns 
(compania, variable, descripcion_var, titulo_superior, titulo_inferior, modulo, clasificacion, corporativa)
VALUES('0','ofcemb','Oficina Destino Embargos',NULL,NULL,'NS',7,0)
GO 
EXECUTE sp_companias_defn_var 'ofcemb'
GO
if object_id('var_clasificacion') is not null
   insert into var_Clasificacion values ('ofcemb', 'ofcemb', 1,1,0)
GO

PRINT 'Embargos... OK'
GO

IF OBJECT_ID('dbo.fco_traslados_eps') IS NOT NULL
    DROP TABLE dbo.fco_traslados_eps 
GO
CREATE TABLE dbo.fco_traslados_eps 
(compania		char(4)      NOT NULL,
trabajador		char(10) 	NOT NULL,
EPS_actual		char(10) 	NOT NULL,
EPS_nueva		char(10) 	NULL,
fecha_cambio    smalldatetime  	NULL,
estado          tinyint NOT NULL DEFAULT 0,
	CONSTRAINT pk_fco_traslados_eps PRIMARY KEY CLUSTERED(compania,trabajador, EPS_actual)
) ON [PRIMARY]

GO
GRANT ALL ON fco_traslados_eps TO PUBLIC
GO

IF OBJECT_ID('dbo.fco_traslados_fpo') IS NOT NULL
    DROP TABLE dbo.fco_traslados_fpo 
GO
CREATE TABLE dbo.fco_traslados_fpo
(compania		char(4)     	NOT NULL,
trabajador		char(10) 	NOT NULL,
FPO_actual		char(10) 	NOT NULL,
FPO_nueva		char(10) 	NULL,
fecha_cambio		smalldatetime  	NULL,
estado          tinyint NOT NULL DEFAULT 0,
	CONSTRAINT pk_fco_traslados_fpo PRIMARY KEY (compania,trabajador, fpo_actual)
) ON [PRIMARY]

GO
GRANT ALL ON fco_traslados_fpo TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_fco_eps_trabajador') IS NOT NULL
    DROP VIEW dbo.vw_fco_eps_trabajador
GO
Create View dbo.vw_fco_eps_trabajador
As
Select 
	r.compania, r.trabajador,
	d.dato, d.descripcion
From
	rel_trab_agr r,
	datos_agr_trab d
Where
	r.agrupacion = d.agrupacion And
	r.dato = d.dato And
	r.agrupacion = 
    (SELECT dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = r.compania AND x.parametro = 'autoliq' AND x.secuencia = 21)

GO
GRANT SELECT ON vw_fco_eps_trabajador TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_fpo_trabajador') IS NOT NULL
    DROP VIEW dbo.vw_fco_fpo_trabajador
GO
Create View dbo.vw_fco_fpo_trabajador
As
Select 
	r.compania, r.trabajador,
	d.dato, d.descripcion
From
	rel_trab_agr r,
	datos_agr_trab d
Where
	r.agrupacion = d.agrupacion And
	r.dato = d.dato And
	r.agrupacion = 
    (SELECT dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = r.compania AND x.parametro = 'autoliq' AND x.secuencia = 22)
GO
GRANT SELECT ON vw_fco_fpo_trabajador TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_alta_traslados_eps]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_alta_traslados_eps
GO
CREATE PROCEDURE dbo.sp_fco_alta_traslados_eps(
@i_compania		char(4),
@i_trabajador		char(10),
@i_EPS_actual		char(10),
@i_EPS_nueva		char(10),
@i_fecha_cambio		smalldatetime
)
AS
BEGIN
DECLARE
@i_llave_foranea	TINYINT
	BEGIN TRANSACTION
	INSERT INTO fco_traslados_eps 
    (compania, trabajador, EPS_actual, EPS_nueva, fecha_cambio, estado)
    VALUES 
    (@i_compania,@i_trabajador, @i_EPS_actual, @i_EPS_nueva, @i_fecha_cambio, 0)
	IF @@error <> 0
	  BEGIN
	    ROLLBACK TRANSACTION 
	    RAISERROR 206800 'Error al tratar de insertar en la tabla [fco_traslados_eps]'  
	    RETURN 
	  END
	ELSE
	BEGIN
  		COMMIT TRANSACTION 
	END
END
GO
GRANT EXECUTE ON sp_fco_alta_traslados_eps TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_alta_traslados_fpo]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_alta_traslados_fpo
GO
CREATE PROCEDURE dbo.sp_fco_alta_traslados_fpo(
@i_compania		char(4),
@i_trabajador		char(10),
@i_fpo_actual		char(10),
@i_fpo_nueva		char(10),
@i_fecha_cambio		smalldatetime
)
AS
BEGIN
	BEGIN TRANSACTION
	INSERT INTO fco_traslados_fpo 
    (compania, trabajador, FPO_actual, FPO_nueva, fecha_cambio, estado)
    VALUES 
	(@i_compania, @i_trabajador, @i_fpo_actual, @i_fpo_nueva, @i_fecha_cambio, 0)
	IF @@error <> 0
	  BEGIN
	    ROLLBACK TRANSACTION 
	    RAISERROR 206800 'Error al tratar de insertar en la tabla [fco_traslados_fpo]'  
	    RETURN 
	  END
	ELSE
	BEGIN
  		COMMIT TRANSACTION 
	END
END
GO
GRANT EXECUTE ON sp_fco_alta_traslados_fpo TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_baja_traslados_eps]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_baja_traslados_eps
GO
CREATE PROCEDURE dbo.sp_fco_baja_traslados_eps(
@i_compania		char(4),
@i_trabajador	char(10),
@pch_eps_actual char(10)
)
AS
BEGIN
	BEGIN TRANSACTION
	DELETE  fco_traslados_eps
		WHERE compania = @i_compania
		AND trabajador = @i_trabajador
        AND eps_actual = @pch_eps_actual
	IF @@error <> 0
	   BEGIN
		ROLLBACK TRANSACTION
		RETURN
	END
	COMMIT TRANSACTION 
END 
GO
GRANT EXECUTE ON sp_fco_baja_traslados_eps TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_baja_traslados_fpo]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_baja_traslados_fpo
GO
CREATE PROCEDURE dbo.sp_fco_baja_traslados_fpo(
@i_compania		char(4),
@i_trabajador		char(10),
@pch_fpo_actual char(10)
)
AS
BEGIN
	BEGIN TRANSACTION
	DELETE  fco_traslados_fpo
		WHERE compania = @i_compania
		AND trabajador = @i_trabajador
        AND fpo_Actual = @pch_fpo_actual
	IF @@error <> 0
	   BEGIN
		ROLLBACK TRANSACTION
		RETURN
	END
	COMMIT TRANSACTION 
END 
GO
GRANT EXECUTE ON sp_fco_baja_traslados_fpo TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_cambio_traslados_eps]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_cambio_traslados_eps
GO
CREATE PROCEDURE dbo.sp_fco_cambio_traslados_eps(
@i_compania		char(4),
@i_trabajador		char(10),
@i_EPS_actual		char(10),
@i_EPS_nueva		char(10),
@i_fecha_cambio		smalldatetime)
AS
BEGIN
	BEGIN TRANSACTION
	UPDATE fco_traslados_eps
	SET 	
    	EPS_nueva   = @i_EPS_nueva,
	    fecha_cambio  = @i_fecha_cambio,
        estado = 2
	WHERE compania = @i_compania
	AND trabajador = @i_trabajador
	AND EPS_actual = @i_EPS_actual
	
	IF @@error <> 0
	BEGIN
		ROLLBACK TRANSACTION
		RETURN
	END
	COMMIT TRANSACTION
END 

GO
GRANT EXECUTE ON sp_fco_cambio_traslados_eps TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_cambio_traslados_fpo]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_cambio_traslados_fpo
GO
CREATE PROCEDURE dbo.sp_fco_cambio_traslados_fpo(
@i_compania		char(4),
@i_trabajador		char(10),
@i_fpo_actual		char(10),
@i_fpo_nueva		char(10),
@i_fecha_cambio		smalldatetime)
AS
BEGIN
	BEGIN TRANSACTION
	UPDATE fco_traslados_fpo
	SET 	
	    fpo_nueva   = @i_fpo_nueva,
    	fecha_cambio  = @i_fecha_cambio,
        estado = 2
	WHERE compania = @i_compania
	AND trabajador = @i_trabajador
	AND fpo_actual = @i_fpo_actual
	IF @@error <> 0
	BEGIN
		ROLLBACK TRANSACTION
		RETURN
	END
	COMMIT TRANSACTION
END 
GO
GRANT EXECUTE ON sp_fco_cambio_traslados_fpo TO Public
GO

PRINT 'Traslados de Administradora... OK'
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_baja_tablas]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_baja_tablas
GO

GO
CREATE PROCEDURE dbo.sp_fco_baja_tablas
(
    @vvc_tabla    varchar(30)
)
AS
BEGIN
    EXECUTE ('DROP TABLE ' + @vvc_tabla)

    EXECUTE ("DELETE fco_ala_datos_adi WHERE tabla = '" + @vvc_tabla + "'")
END
GO
GRANT EXECUTE ON sp_fco_baja_tablas TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_cambio_iss]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_cambio_iss
GO

GO
CREATE PROCEDURE dbo.sp_fco_cambio_iss
(
	@CIA  		char(4),
	@TABLA  	varchar(30),
	@COD_TRAB	char(10),
	@C03  		char(1),
	@C09  		char(1),
	@C10  		char(1),
	@C11  		char(1),
	@C12  		char(1),
	@C13  		char(1),
	@C14  		char(1),
	@C15  		char(1),
	@C16  		char(1),
	@C17  		char(1),
	@C18  		char(1),
	@C19  		char(1),
	@C20  		char(1),
	@C21  		char(1),
	@C22  		numeric(2,0),
  @C23            numeric(2,0),
  @C24            numeric(2,0),
  @C26            numeric(9,0),
  @C28            numeric(9,0),
  @C29            numeric(9,0),
  @C31            numeric(6,4),
  @C32            numeric(9,0),
  @C36            numeric(9,0),
  @C38            numeric(9,0)
)
/******************************************************************************************/
/*** Nombre:      sp_cambio_mf_iss	                            			***/
/*** Modulo:      ADAM V3. (Fiscal Colombiano)                                          ***/
/*** Descripcion: permite al usuario corregir las leves inconsistencias que             ***/
/***    ocasionalmente puedan presentarse en el reporte ISS             		***/
/***              o en el medio magnético        					***/
/******************************************************************************************/
AS
DECLARE	@sql  VARCHAR(2000)

BEGIN
	SELECT @sql = "UPDATE " + @TABLA +
     	" SET" +
	" C03='" + IsNull(@C03,"C") + "'," +
     	" C09='" + IsNull(@C09,"") + "'," +
     	" C10='" + IsNull(@C10,"") + "'," +
     	" C11='" + IsNull(@C11,"") + "'," +
     	" C12='" + IsNull(@C12,"") + "'," +
     	" C13='" + IsNull(@C13,"") + "'," +
     	" C14='" + IsNull(@C14,"") + "'," +
     	" C15='" + IsNull(@C15,"") + "'," +
     	" C16='" + IsNull(@C16,"") + "'," +
     	" C17='" + IsNull(@C17,"") + "'," +
     	" C18='" + IsNull(@C18,"") + "'," +
     	" C19='" + IsNull(@C19,"") + "'," +
     	" C20='" + IsNull(@C20,"") + "'," +
     	" C21='" + IsNull(@C21,"") + "'," +
     	" C22=" + IsNull(Convert(varchar,@C22),"0") + "," +
     	" C23=" + IsNull(Convert(varchar,@C23),"0") + "," +
     	" C24=" + IsNull(Convert(varchar,@C24),"0") + "," +
     	" C26=" + IsNull(Convert(varchar,@C26),"0") + "," +
     	" C28=" + IsNull(Convert(varchar,@C28),"0") + "," +
     	" C29=" + IsNull(Convert(varchar,@C29),"0") + "," +
     	" C31=" + IsNull(Convert(varchar,@C31),"0") + "," +
     	" C32=" + IsNull(Convert(varchar,@C32),"0") + "," +
     	" C36=" + IsNull(Convert(varchar,@C36),"0") + "," +
     	" C38=" + IsNull(Convert(varchar,@C38),"0") + 
    	" WHERE CIA='" + @CIA + "'" +
    	" AND COD_TRAB='" + @COD_TRAB + "'"

	EXECUTE (@sql)

     	IF @@ERROR <> 0 RAISERROR 13000 "Error al Actualizar la Tabla"
END

GO
GRANT EXECUTE ON sp_fco_cambio_iss TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_cambio_pension]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_cambio_pension
GO

GO
CREATE PROCEDURE dbo.sp_fco_cambio_pension
(
	@CIA  		char(4),
	@TABLA  	varchar(30),
	@COD_TRAB	char(10),
	@C11A  		char(4),
	@C13A  		char(1),
	@C13B  		char(1),
	@C13C  		char(1),
	@C13D  		char(1),
	@C13E  		char(1),
	@C13F  		char(1),
	@C13G  		char(1),
	@C13H  		char(1),
	@C13I  		char(1),
	@C13J  		char(1),
	@C13K  		char(1),
	@C13L  		char(1),
  @C14A           numeric(2,0),
  @C15A           numeric(9,0),
  @C17A           numeric(9,0),
  @C18A           numeric(9,4),
  @C19A           numeric(9,0),
  @C20A           numeric(9,0),
  @C20B           numeric(9,0),
  @C22A           numeric(9,0),
  @C23A           numeric(9,0)
)
/******************************************************************************************/
/*** Nombre:      sp_cambio_mf_pension                                             	***/
/*** Modulo:      ADAM V3. (Fiscal Colombiano)                                          ***/
/*** Descripcion: permite al usuario corregir las leves inconsistencias que             ***/
/***    ocasionalmente puedan presentarse en el reporte ALA Pensiones          		***/
/***              o en el medio magnético        					***/
/******************************************************************************************/
AS
DECLARE	@sql  VARCHAR(3000)

BEGIN
	SELECT @sql = "UPDATE " + @TABLA +
     	" SET" +
	" C11A='" + IsNull(@C11A,"C") + "'," +
     	" C13A='" + IsNull(@C13A,"") + "'," +
     	" C13B='" + IsNull(@C13B,"") + "'," +
     	" C13C='" + IsNull(@C13C,"") + "'," +
     	" C13D='" + IsNull(@C13D,"") + "'," +
     	" C13E='" + IsNull(@C13E,"") + "'," +
     	" C13F='" + IsNull(@C13F,"") + "'," +
     	" C13G='" + IsNull(@C13G,"") + "'," +
     	" C13H='" + IsNull(@C13H,"") + "'," +
     	" C13I='" + IsNull(@C13I,"") + "'," +
     	" C13J='" + IsNull(@C13J,"") + "'," +
     	" C13K='" + IsNull(@C13K,"") + "'," +
     	" C13L='" + IsNull(@C13L,"") + "'," +
        " C14A=" + IsNull(Convert(varchar,@C14A), '0') + "," +
        " C15A=" + IsNull(Convert(varchar,@C15A), '0') + "," +
        " C17A=" + IsNull(Convert(varchar,@C17A), '0') + "," +
        " C18A=" + IsNull(Convert(varchar,@C18A), '0') + "," +
        " C19A=" + IsNull(Convert(varchar,@C19A), '0') + "," +
        " C20A=" + IsNull(Convert(varchar,@C20A), '0') + "," +
        " C20B=" + IsNull(Convert(varchar,@C20B), '0') + "," +
        " C22A=" + IsNull(Convert(varchar,@C22A), '0') + "," +
        " C23A=" + IsNull(Convert(varchar,@C23A), '0') + 
    	" WHERE CIA='" + @CIA + "'" +
    	" AND COD_TRAB='" + @COD_TRAB + "'"


	EXECUTE (@sql)

     	IF @@ERROR <> 0 RAISERROR 13000 "Error al Actualizar la Tabla"
END


GO
GRANT EXECUTE ON sp_fco_cambio_pension TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_cambio_riesgos]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_cambio_riesgos
GO

GO
CREATE PROCEDURE dbo.sp_fco_cambio_riesgos
(
	@CIA  		char(4),
	@TABLA  	varchar(30),
	@COD_TRAB	char(10),
	@C11A  		char(4),
	@C13A  		char(1),
	@C13B  		char(1),
	@C13C  		char(1),
	@C13D  		char(1),
	@C13E  		char(1),
	@C13F  		char(1),
	@C13G  		char(1),
	@C13H  		char(1),
	@C13I  		char(1),
	@C13J  		char(1),
	@C13K  		numeric(2,0),
  @C14A           numeric(2,0),
  @C15A           numeric(9,0),
  @C17A           numeric(9,0),
	@C28A  		numeric(9,0),
	@C28B  		numeric(9,0),
  @C29A           numeric(9,0),
  @C30A           varchar(5),
  @C30B           varchar(5)
)
/******************************************************************************************/
/*** Nombre:      sp_cambio_mf_riesgos                                                	***/
/*** Modulo:      ADAM V3. (Fiscal Colombiano)                                          ***/
/*** Descripcion: permite al usuario corregir las leves inconsistencias que             ***/
/***    ocasionalmente puedan presentarse en el reporte ALA ARP             		***/
/***              o en el medio magnético        					***/
/******************************************************************************************/
AS
DECLARE	@sql  VARCHAR(2000), 
    @vvc_sql2 varchar(2000)

BEGIN
	SET @sql = 
        "UPDATE " + @TABLA + " SET" +
	" C11A='" + IsNull(@C11A,"C") + "'," +
     	" C13A='" + IsNull(@C13A,"") + "'," +
     	" C13B='" + IsNull(@C13B,"") + "'," +
     	" C13C='" + IsNull(@C13C,"") + "'," +
     	" C13D='" + IsNull(@C13D,"") + "'," +
     	" C13E='" + IsNull(@C13E,"") + "'," +
     	" C13F='" + IsNull(@C13F,"") + "'," +
     	" C13G='" + IsNull(@C13G,"") + "'," +
     	" C13H='" + IsNull(@C13H,"") + "'," +
     	" C13I='" + IsNull(@C13I,"") + "'," +
     	" C13J='" + IsNull(@C13J,"") + "'," +
     	" C13K=" + IsNull(convert(varchar,@C13K),"0") + ","

	SET @vvc_sql2 =
     	" C14A=" + IsNull(convert(varchar,@C14A),"0") + "," +
     	" C15A=" + IsNull(convert(varchar,@C15A),"0") + "," +
     	" C17A=" + IsNull(convert(varchar,@C17A),"0") + "," +
     	" C28A=" + IsNull(convert(varchar,@C28A),"0") + "," +
     	" C28B=" + IsNull(convert(varchar,@C28B),"0") + "," +
     	" C29A=" + IsNull(convert(varchar,@C29A),"0") + "," +
     	" C30A='" + IsNull(@C30A,"") + "'," +
     	" C30B='" + IsNull(@C30B,"") + "'" +
    	" WHERE CIA='" + @CIA + "'" +
    	" AND COD_TRAB='" + @COD_TRAB + "'" +
    	" AND C17A <> 0"

	EXECUTE (@sql + @vvc_sql2)

     	IF @@ERROR <> 0 RAISERROR 13000 "Error al Actualizar la Tabla"
END


GO
GRANT EXECUTE ON sp_fco_cambio_riesgos TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_cambio_salud]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_cambio_salud
GO

GO
CREATE PROCEDURE dbo.sp_fco_cambio_salud
(
    @CIA  	char(4),
    @TABLA      varchar(30),
    @COD_TRAB   char(10),
    @C11A  	char(4),
    @C13A  	char(1),
    @C13B  	char(1),
    @C13C  	char(1),
    @C13D  	char(1),
    @C13E  	char(1),
    @C13F  	char(1),
    @C13G  	char(1),
    @C13H  	char(1),
    @C13I  	char(1),
    @C13J  	char(1),
    @C14A       numeric(2,0),
    @C15A       numeric(9,0),
    @C17A       numeric(9,0),
    @C24A       numeric(9,0),
    @C25A  	varchar(10),
    @C25B       numeric(9,0),
    @C26A  	varchar(10),
    @C26B       numeric(9,0),
    @C27A       numeric(9,0)
)
/******************************************************************************************/
/*** Nombre:      sp_cambio_mf_salud                                                ***/
/*** Modulo:      ADAM V3. (Fiscal Colombiano)                                          ***/
/*** Descripcion: permite al usuario corregir las leves inconsistencias que             ***/
/***    	  ocasionalmente puedan presentarse en el reporte ALA Salud             ***/
/***              o en el medio magnético        					***/
/******************************************************************************************/
AS
DECLARE	@sql  VARCHAR(3000)

BEGIN
	SELECT @sql = "UPDATE " + @TABLA +
     	" SET" +
	" C11A='" + IsNull(@C11A,'C') + "'," +
     	" C13A='" + IsNull(@C13A,"") + "'," +
     	" C13B='" + IsNull(@C13B,"") + "'," +
     	" C13C='" + IsNull(@C13C,"") + "'," +
     	" C13D='" + IsNull(@C13D,"") + "'," +
     	" C13E='" + IsNull(@C13E,"") + "'," +
     	" C13F='" + IsNull(@C13F,"") + "'," +
     	" C13G='" + IsNull(@C13G,"") + "'," +
     	" C13H='" + IsNull(@C13H,"") + "'," +
     	" C13I='" + IsNull(@C13I,"") + "'," +
     	" C13J='" + IsNull(@C13J,"") + "'," +
        " C14A=" + IsNull(Convert(varchar,@C14A),'0') + "," +
        " C15A=" + IsNull(Convert(varchar,@C15A),'0') + "," +
        " C17A=" + IsNull(Convert(varchar,@C17A),'0') + "," +
        " C24A=" + IsNull(Convert(varchar,@C24A),'0') + "," +
     	" C25A='" + IsNull(@C25A,"") + "'," +
        " C25B=" + IsNull(Convert(varchar,@C25B),'0') + "," +
     	" C26A='" + IsNull(@C26A,"") + "'," +
        " C26B=" + IsNull(Convert(varchar,@C26B),'0') + "," +
        " C27A=" + IsNull(Convert(varchar,@C27A),'0') +
    	" WHERE CIA='" + @CIA + "'" +
    	" AND COD_TRAB='" + @COD_TRAB + "'"

	EXECUTE (@sql)

     	IF @@ERROR <> 0 RAISERROR 13000 "Error al Actualizar la Tabla"
END


GO
GRANT EXECUTE ON sp_fco_cambio_salud TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_cambio_vw_iss]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_cambio_vw_iss
GO

GO
CREATE PROCEDURE dbo.sp_fco_cambio_vw_iss
(
	@CIA  		char(4),
	@TABLA  	varchar(30),
	@COD_TRAB	char(10),
	@C10A  		char(4),
	@C11A  		char(1),
	@C11B  		char(1),
	@C11C  		char(1),
	@C11D  		numeric(2,0),
	@C11E  		numeric(2,0),
  @C12A           numeric(2,0),
	@C13A  		numeric(12,0),
  @C14A           numeric(10,0),
  @C14B           numeric(10,0),
  @C14C           numeric(10,0)
)
/******************************************************************************************/
/*** Nombre:      sp_cambio_mf_iss	                            			***/
/*** Modulo:      ADAM V3. (Fiscal Colombiano)                                          ***/
/*** Descripcion: permite al usuario corregir las leves inconsistencias que             ***/
/***    ocasionalmente puedan presentarse en el reporte ISS             		***/
/***              o en el medio magnético        					***/
/***  Revision: Abril 5 de 2002                                                         ***/
/******************************************************************************************/
AS
DECLARE	@sql  VARCHAR(1500)

BEGIN
	SELECT @sql = "UPDATE " + @TABLA +
     	" SET" +
	" C10A='" + IsNull(RTrim(@C10A),"C") + "'," +
     	" C11A='" + IsNull(@C11A,"") + "'," +
     	" C11B='" + IsNull(@C11B,"") + "'," +
     	" C11C='" + IsNull(@C11C,"") + "'," +
     	" C11D=" + IsNull(Convert(char,@C11D),"0") + "," +
     	" C11E=" + IsNull(Convert(char,@C11E),"0") + "," +
     	" C12A=" + IsNull(CONVERT(CHAR,@C12A),"0") + "," + 
     	" C13A=" + IsNull(CONVERT(CHAR,@C13A),"0") + "," +
     	" C14A=" + IsNull(CONVERT(CHAR,@C14A),"0") + "," +
     	" C14B=" + IsNull(CONVERT(CHAR,@C14B),"0") + "," +
     	" C14C=" + IsNull(CONVERT(CHAR,@C14C),"0") +
    	" WHERE CIA='" + @CIA + "'" +
    	" AND COD_TRAB='" + @COD_TRAB + "'"
	EXECUTE (@sql)

     	IF @@ERROR <> 0 RAISERROR 13000 "Error al Actualizar la Tabla"
END


GO
GRANT EXECUTE ON sp_fco_cambio_vw_iss TO Public
GO
PRINT 'Mantenimiento de Tablas de Autoliquidación... OK'
GO
IF OBJECT_ID('dbo.sp_fco_proc_traslados_eps') IS NOT NULL
   DROP PROCEDURE dbo.sp_fco_proc_traslados_eps
GO
CREATE PROCEDURE dbo.sp_fco_proc_traslados_eps
(
    @pch_compania    char(4), 
    @psm_anio        smallint,
    @ptn_mes         tinyint
)
AS
DECLARE	@cch_trabajador char(10),
	@cch_actual     char(10),
	@cch_nueva      char(10)

DECLARE cr_traslados CURSOR FOR
SELECT	trabajador, EPS_actual, EPS_nueva
FROM	fco_traslados_eps
WHERE	compania = @pch_compania AND
trabajador In (SELECT trabajador FROM trabajadores_grales
               WHERE compania = @pch_compania And
               clase_nomina is not null And
               clase_nomina in 
                (SELECT clase_nomina 
                 FROM rel_usu_clase_nom 
                 WHERE usuario = system_user
                 )) AND
DatePart(Year, fecha_cambio) = @psm_anio AND
DatePart(Month, fecha_cambio) = @ptn_mes
BEGIN

	OPEN cr_traslados
	FETCH cr_traslados 
	INTO @cch_trabajador, @cch_actual, @cch_nueva

	WHILE @@FETCH_STATUS = 0 
            BEGIN

		UPDATE 	rel_trab_agr
		SET	dato = @cch_nueva
		WHERE	compania = @pch_compania
		AND	trabajador = @cch_trabajador
		AND	agrupacion = isnull((SELECT dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = rel_trab_agr.compania AND x.parametro = 'autoliq' AND x.secuencia = 21), 'EPS')

		FETCH cr_traslados INTO @cch_trabajador, @cch_actual, @cch_nueva
            END
	CLOSE cr_traslados
	DEALLOCATE cr_traslados
	
	UPDATE fco_traslados_eps
    SET estado = 1
	WHERE	compania = @pch_compania AND
  trabajador In (SELECT trabajador FROM trabajadores_grales
                 WHERE compania = @pch_compania And
                 clase_nomina is not null And
                 clase_nomina in 
                  (SELECT clase_nomina 
                   FROM rel_usu_clase_nom 
                   WHERE usuario = system_user
                   )) AND
		DatePart(Year, fecha_cambio) = @psm_anio AND
		DatePart(Month, fecha_cambio) = @ptn_mes

END

GO
GRANT EXECUTE ON sp_fco_proc_traslados_eps TO Public
GO
IF OBJECT_ID('dbo.sp_fco_proc_traslados_fpo') IS NOT NULL
   DROP PROCEDURE dbo.sp_fco_proc_traslados_fpo
GO
CREATE PROCEDURE dbo.sp_fco_proc_traslados_fpo
(
	@i_compania       char(4), 
	@i_anio		  int,
	@i_mes		  int
)
AS
DECLARE	@w_trabajador 	varchar(10),
	@w_nueva	varchar(10)

DECLARE cr_traslados CURSOR FOR
SELECT	trabajador, fpo_nueva
FROM	fco_traslados_fpo
WHERE	compania = @i_compania AND
trabajador In (SELECT trabajador FROM trabajadores_grales
               WHERE compania = @i_compania And
               clase_nomina is not null And
               clase_nomina in 
                (SELECT clase_nomina 
                 FROM rel_usu_clase_nom 
                 WHERE usuario = system_user
                 )) AND
DatePart(Year, fecha_cambio) = @i_anio AND
DatePart(Month, fecha_cambio) = @i_mes
BEGIN
	OPEN cr_traslados
	FETCH cr_traslados 
	INTO @w_trabajador, @w_nueva

	WHILE @@FETCH_STATUS = 0 
            BEGIN

		UPDATE 	REL_TRAB_AGR
		SET	dato = @w_nueva
		WHERE	compania = @i_compania
		AND	trabajador = @w_trabajador
		AND	agrupacion = isnull((SELECT dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = rel_trab_agr.compania AND x.parametro = 'autoliq' AND x.secuencia = 22), 'FPO')

		FETCH cr_traslados INTO @w_trabajador, @w_nueva
            END
	CLOSE cr_traslados
	DEALLOCATE cr_traslados

	UPDATE fco_traslados_fpo
    SET estado = 1
	WHERE	compania = @i_compania AND
                trabajador In (SELECT trabajador FROM trabajadores_grales
                               WHERE compania = @i_compania And
                               clase_nomina is not null And
                               clase_nomina in 
                                (SELECT clase_nomina 
                                 FROM rel_usu_clase_nom 
                                 WHERE usuario = system_user
                                 )) AND
		DatePart(Year, fecha_cambio) = @i_anio AND
		DatePart(Month, fecha_cambio) = @i_mes
END

GO
GRANT EXECUTE ON sp_fco_proc_traslados_fpo TO Public
GO
PRINT 'Ejecución de Traslados de Administradora... OK'
GO
IF OBJECT_ID('dbo.sp_fco_upd_var_trabajador') IS NOT NULL
   DROP PROCEDURE dbo.sp_fco_upd_var_trabajador
GO
CREATE PROCEDURE dbo.sp_fco_upd_var_trabajador
(
    @pch_compania   char(4),
    @psm_anio 	    smallint,
    @ptn_periodo    tinyint,
    @ptn_variable   tinyint,
    @psm_concepto   smallint,
    @ptn_use_tiempo tinyint,
    @ptn_act_proc   tinyint,
    @ptn_var_proc   tinyint
)
AS
DECLARE
    @cch_trabajador  char(10),
    @cdc_importe	    decimal(19,6),
    @cdc_tiempo      decimal(10,3)

    DECLARE cr_trab CURSOR FOR 
    SELECT 
        t.trabajador, a.importe, a.tiempo
    FROM   
        trabajadores_grales t, acum_concepto a
    WHERE  
		t.compania = a.compania And
		t.trabajador = a.trabajador And
		a.compania = @pch_compania And
		a.concepto = @psm_concepto And
		a.anio = @psm_anio And
		a.periodo = @ptn_periodo And
		t.sit_trabajador = 1
BEGIN

    OPEN cr_trab
    FETCH NEXT FROM cr_trab INTO @cch_trabajador, @cdc_importe, @cdc_tiempo

    WHILE @@FETCH_STATUS = 0        	       
    BEGIN
        IF @ptn_use_tiempo = 1
            SET @cdc_importe = @cdc_tiempo
                
        EXECUTE sp_actualiza_var_trabajador
            @pch_compania, @cch_trabajador, @ptn_variable, @cdc_importe

        IF @ptn_act_proc = 1 --And IsNull(@cdc_importe, 0) > 0 /* Ajuste JCL Jun.29/06. Panalpina segun indicacion de SCN */
            EXECUTE sp_actualiza_var_trabajador
                @pch_compania, @cch_trabajador, @ptn_var_proc, 2
            
        FETCH NEXT FROM cr_trab INTO @cch_trabajador, @cdc_importe, @cdc_tiempo
    END
    
    CLOSE cr_trab
    DEALLOCATE cr_trab
END


GO
GRANT EXECUTE ON sp_fco_upd_var_trabajador TO Public
GO
PRINT 'Actualizar variable de trabajador... OK'
GO
IF OBJECT_ID('dbo.vw_fdt_bancos_err') IS NOT NULL
    DROP VIEW dbo.vw_fdt_bancos_err
GO
CREATE VIEW dbo.vw_fdt_bancos_err
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos	        ***/
/*** Descripcion: Muestra los errores del banco 	                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Junio 8/2005                                          ***/
/********************************************************************/
SELECT a.id_rep, a.usuariow, a.banco, a.trabajador, a.numero_liquidacion,
a.cod_error, a.error,
SUBSTRING(REPLACE(LTRIM(RTRIM(b.nombre)),'/',' '),1,40) as nombre, 
b.clave_unica, c.descripcion
FROM fdt_bancos_err a, trabajadores b, fdt_bancos c
WHERE a.banco = c.banco
AND a.trabajador = b.trabajador
GO
GRANT SELECT ON vw_fdt_bancos_err TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fdt_bancos_rep') IS NOT NULL
    DROP VIEW dbo.vw_fdt_bancos_rep
GO
CREATE VIEW dbo.vw_fdt_bancos_rep
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos	        ***/
/*** Descripcion: Muestra informacion de la tabla de reporte	      ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 11/2005                                         ***/
/********************************************************************/
SELECT a.id_rep, a.usuariow, a.banco, a.fecha, a.responsable,
a.trabajador, a.importe, a.cuenta_dep, LTRIM(RTRIM(a.simbolo_moneda)) as simbolo_moneda,
SUBSTRING(REPLACE(LTRIM(RTRIM(b.nombre)),'/',' '),1,40) as nombre, 
b.clave_unica, c.descripcion
FROM fdt_bancos_rep a, trabajadores b, fdt_bancos c
WHERE a.banco = c.banco
AND a.trabajador = b.trabajador
GO
GRANT SELECT ON vw_fdt_bancos_rep TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_ri_liquidaciones') IS NOT NULL
    DROP VIEW dbo.vw_ri_liquidaciones
GO
CREATE VIEW dbo.vw_ri_liquidaciones
AS
SELECT 
    le.compania,
    le.numero_liquidacion, 
    le.trabajador, 
    SUBSTRING(REPLACE(t.nombre, '/', ' '),1,40) AS nombre, 
    le.tipo_nomina,
    le.fecha_liquidacion, 
    le.fecha_base,
    (SELECT importe FROM liquidaciones_det ld 
    WHERE ld.compania = le.compania 
    AND ld.tipo_nomina = le.tipo_nomina 
    AND ld.anio_acumular = le.anio_acumular
    AND ld.mes_acumular = le.mes_acumular
    AND ld.numero_liquidacion = le.numero_liquidacion
    AND ld.trabajador = le.trabajador 
    AND ld.concepto = (SELECT x.entero FROM parametros_rh x
		       WHERE x.compania = le.compania AND x.parametro_rh = 'Conc_Neto')) AS neto,
    CASE WHEN DATEDIFF(m, le.fecha_liquidacion, getdate()) > 1 THEN 0 ELSE 1 END AS reciente
FROM 
    liquidaciones_enc le, trabajadores t, trabajadores_grales tg
WHERE
    t.trabajador = tg.trabajador AND
    le.compania = tg.compania AND
    le.trabajador = tg.trabajador AND
    --le.tipo_nomina = 'LV' AND
-- CONDICIONES PARA VALIDAR LA SEGURIDAD
    -- AUTORIZACION A LA COMPANIA
    system_user IN (SELECT usuario FROM aut_companias x WHERE x.compania = le.compania) AND
    -- AUTORIZACION POR CLASE DE NOMINA
    system_user IN (SELECT usuario FROM rel_usu_clase_nom r1
                    WHERE r1.clase_nomina = tg.clase_nomina) AND                    
    -- AUTORIZACION POR AGRUPACIONES
    NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                  AND r2.compania = le.compania AND r2.trabajador = le.trabajador
                  AND u2.usuario = system_user)
GO
GRANT SELECT ON vw_ri_liquidaciones TO PUBLIC
GO

IF OBJECT_ID('dbo.fn_nombre_plano') IS NOT NULL
DROP FUNCTION dbo.fn_nombre_plano
GO
CREATE FUNCTION dbo.fn_nombre_plano
(
    @pvc_nombre varchar(100)
)
RETURNS char(100)
AS
BEGIN
DECLARE 
    @vvc_cad varchar(100)

	--Reemplazado la barra / por espacios
	SET @vvc_cad = REPLACE(@pvc_nombre, '/', ' ')

	--reemplando la ñ po n
	SET @vvc_cad = REPLACE(@vvc_cad, 'ñ', 'n')

	--reemplazando la tilde de las vocales
	SET @vvc_cad = REPLACE(@vvc_cad, 'á', 'a')
	SET @vvc_cad = REPLACE(@vvc_cad, 'é', 'e')
	SET @vvc_cad = REPLACE(@vvc_cad, 'í', 'i')
	SET @vvc_cad = REPLACE(@vvc_cad, 'ó', 'o')
	SET @vvc_cad = REPLACE(@vvc_cad, 'ú', 'u')

    RETURN @vvc_cad   
END
GO

GRANT EXECUTE ON fn_nombre_plano TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_del_bancos') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_del_bancos
GO
CREATE PROCEDURE dbo.sp_fdt_del_bancos
(
    @pch_compania char(4),
    @pti_banco tinyint
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia                                    ***/
/*** Descripcion: borra registros de las tablas fdt_bancos        ***/
/*** y fdt_bancos_cias_datos y fdt_bancos_cias  				          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 11 de 2005                                      ***/
/********************************************************************/
BEGIN
    IF EXISTS(SELECT 1 FROM fdt_bancos_cias
              WHERE banco = @pti_banco AND compania <> @pch_compania)
    BEGIN
        RAISERROR('Este Banco no se puede eliminar porque tiene relación con otras compañías',16,1)
        RETURN
    END
        
    DELETE FROM fdt_bancos_cias WHERE compania = @pch_compania AND banco = @pti_banco
    DELETE FROM fdt_bancos_cias_datos WHERE compania = @pch_compania AND banco = @pti_banco
    DELETE FROM fdt_bancos_ins_dep WHERE banco = @pti_banco
    DELETE FROM fdt_bancos WHERE banco = @pti_banco
    DELETE FROM fdt_rutas WHERE codigo = @pti_banco AND operacion = 'FCO1070'
END
GO
GRANT EXECUTE ON sp_fdt_del_bancos TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_del_bancos_proc') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_del_bancos_proc
GO
CREATE PROCEDURE dbo.sp_fdt_del_bancos_proc
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_banco   tinyint
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia                                    ***/
/*** Descripcion: borra registros de las tablas usadas en bancos  ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Abril 27 de 2005                                      ***/
/********************************************************************/

BEGIN

     DELETE FROM ri_procesar 
     WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario

     DELETE FROM ri_liq_procesar 
     WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario

     DELETE FROM fdt_bancos_mm
     WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario
     AND banco = @pti_banco

     DELETE FROM fdt_bancos_resultados 
     WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario
     AND banco = @pti_banco

     DELETE FROM fdt_bancos_rep
     WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario
     AND banco = @pti_banco

    DELETE FROM fdt_bancos_tmp
    WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario
    
    DELETE FROM fdt_bancos_err
    WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario

		--Nov-21-05: Para Finca, la parte de cheques
		IF OBJECT_ID('ri_cheques_det') IS NOT NULL
		BEGIN
				DELETE FROM ri_cheques_det
		    WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario
		END
END
GO
GRANT EXECUTE ON sp_fdt_del_bancos_proc TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_gen_medios_bancos') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_gen_medios_bancos
GO
CREATE PROCEDURE dbo.sp_fdt_gen_medios_bancos
(
    @psi_id_rep  smallint,
    @pvc_usuario varchar(30),
    @pti_banco   tinyint,
    @pdt_fecha   char(8) = NULL,
    @pvc_responsable varchar(30) = '',
    @pti_origen tinyint = 1, -- 1: de NS, 2: de NI
    @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/**********************************************************************/
/*** Modulo:      Módulo Fiscal ADAM V.3 - Medios Magneticos Bancos ***/
/*** Descripcion: Llama al procedimiento de generacion del archivo  ***/
/***              plano respectivo al banco recibido                ***/
/*** Autor:	  Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	  Marzo 14 de 2005. Version Oracle                      ***/
/**********************************************************************/
/*** Se hace la moficacion, para poder llamar el ***/
/*** sp de medios para interactiva. La unica condicion es que el  ***/
/*** medio sea igual en nombre al ns, con terminacion ni al final ***/
DECLARE
	@vvc_proc_genera	varchar(30),
	@vvc_ssql			varchar(2000),
	@vvc_banco			varchar(10),
    @vdc_len            decimal(7)
BEGIN
    --trayendo el nombre del procedimiento
    SET @vvc_proc_genera = ''
    SET @vdc_len = 0

    SELECT @vvc_proc_genera = proc_generacion
    FROM fdt_bancos
    WHERE banco = @pti_banco

	SET @vvc_proc_genera = LTRIM(RTRIM(ISNULL(@vvc_proc_genera,'')))
    SET @vdc_len = ISNULL(LEN(@vvc_proc_genera),0)  
  
	IF @vdc_len = 0
    BEGIN
		SET @vvc_banco = LTRIM(RTRIM(@pti_banco))
        RAISERROR ('No existe la funcion de generacion para el banco %s ', 16, 1, @vvc_banco)
        RETURN 
	END

	IF @pti_origen = 2 -- viene de interactiva
		SET @vvc_proc_genera = LTRIM(RTRIM(@vvc_proc_genera)) + '_ni'
               
    SET @vvc_ssql = 
        @vvc_proc_genera + ' ' +  RTRIM(@psi_id_rep) + ',' +
        '''' + @pvc_usuario + ''',' + RTRIM(@pti_banco) + ',' +
        '''' + @pdt_fecha + ''',' +
        '''' + @pvc_responsable + ''',' +
        RTRIM(@pti_filtra_cta)

    EXEC (@vvc_ssql)
END
GO
GRANT EXECUTE ON sp_fdt_gen_medios_bancos TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_fdt_tra_tipo_id') IS NOT NULL
    DROP VIEW dbo.vw_fdt_tra_tipo_id
GO
CREATE VIEW dbo.vw_fdt_tra_tipo_id
AS
SELECT b.banco, tg.compania, tg.trabajador, bti.tipo_id tipo_id
FROM trabajadores_grales tg
INNER JOIN fdt_bancos b ON 1 =1
LEFT JOIN rel_trab_agr rta ON tg.compania = rta.compania AND tg.trabajador = rta.trabajador
 AND rta.agrupacion = (SELECT agr_tipo_id FROM fdt_bancos_cias_datos x WHERE b.banco = x.banco AND x.compania = rta.compania)
LEFT JOIN vw_fdt_bancos_tipos_id bti ON bti.compania = tg.compania AND bti.banco = b.banco AND rta.dato = bti.dato_eq

GO
GRANT SELECT ON dbo.vw_fdt_tra_tipo_id TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fdt_tra_tipo_cta') IS NOT NULL
    DROP VIEW dbo.vw_fdt_tra_tipo_cta
GO
CREATE VIEW dbo.vw_fdt_tra_tipo_cta
AS
SELECT b.banco, tg.compania, tg.trabajador, btc.tipo_cta
FROM trabajadores_grales tg
INNER JOIN fdt_bancos b ON 1 =1
LEFT JOIN rel_trab_agr rta ON tg.compania = rta.compania AND tg.trabajador = rta.trabajador
 AND rta.agrupacion = (SELECT agr_tipo_cta FROM fdt_bancos_cias_datos x WHERE b.banco = x.banco AND x.compania = rta.compania)
LEFT JOIN vw_fdt_bancos_tipos_cta btc ON btc.compania = tg.compania AND btc.banco = b.banco AND rta.dato = btc.dato_eq

GO
GRANT SELECT ON dbo.vw_fdt_tra_tipo_cta TO PUBLIC
GO

PRINT 'Generación de Archivos para Bancos...OK'
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ACH_bogota') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ACH_bogota
GO
CREATE PROCEDURE sp_fco_gen_bco_ACH_bogota
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH del Banco de Bogota             ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 14/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL

      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

    --armamos la estructura del archivo plano. La cabeza
--Aqui queda el valor de cuenta, tipo cuenta de la ultima cia recorrida
    INSERT INTO
      fdt_bancos_mm (id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
      '1' +
      CONVERT(char(8), @vdt_fecha_hoy, 112) +
      REPLICATE('0', 24) +
      ISNULL(@vti_tipo_cta,0) +
      REPLICATE('0', 8) +
			REPLICATE('0', 9 - LEN(LTRIM(RTRIM(@vvc_cuenta_bco)))) + LTRIM(RTRIM(@vvc_cuenta_bco)) +
			LTRIM(RTRIM(nombre_cia)) + SPACE(40 - LEN(LTRIM(RTRIM(nombre_cia)))) +
			REPLICATE('0', 11 - LEN(LTRIM(RTRIM(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))))) + LTRIM(RTRIM(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
      '001' +
      '0001' +
      CONVERT(char(8), @pdt_fecha, 112) +
			REPLICATE('0', 3 - LEN(SUBSTRING(LTRIM(RTRIM(ISNULL(@vvc_cuenta_bco,'0'))), 1, 3))) + SUBSTRING(LTRIM(RTRIM(ISNULL(@vvc_cuenta_bco,'0'))), 1, 3) +
      'N' +
      REPLICATE(' ', 49) +
      REPLICATE(' ', 80)
    FROM
      companias
    WHERE
      compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)
  
  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2, 
    '2' +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'C')), 1, 1) +
		REPLICATE('0', 11 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 11))) + SUBSTRING(LTRIM(t.clave_unica), 1, 11) +
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(40 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) +
    '0' +
    RTRIM(LTRIM(tns.tipo_cuenta)) +
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) + SPACE(17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(ISNULL(tns.importe,0))))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(ISNULL(tns.importe,0))))) + 
    'A' +
    '000' +
	  RTRIM(LTRIM(ISNULL(tns.ins_dep,'0'))) +
    '0001' +
    REPLICATE(' ', 10) +
		'PAGO DE NOMINA' + SPACE(70 - LEN('PAGO DE NOMINA')) +
    '0' +
    REPLICATE('0', 10) +
    'N' +
    REPLICATE(' ', 48) +
    'N' +
    REPLICATE(' ', 8)
    FROM trabajadores t , fdt_bancos_tmp tns
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ACH_bogota TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ACH_gnbs') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ACH_gnbs
GO
CREATE PROCEDURE sp_fco_gen_bco_ACH_gnbs
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH del GNBSudameris                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Sept 15/2005                                         ***/
/********************************************************************/
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--Armando el mensaje
			IF @cch_tipo_nom = 'QN'
			BEGIN--QN
			  SELECT   
			    @vvc_mensaje =  
			  CASE @cnu_periodo  
			    WHEN 1 THEN '1A QUINC. ENE'   
			    WHEN 2 THEN '2A QUINC. ENE'  
			    WHEN 3 THEN '1A QUINC. FEB'  
			    WHEN 4 THEN '2A QUINC. FEB'  
			    WHEN 5 THEN '1A QUINC. MAR'  
			    WHEN 6 THEN '2A QUINC. MAR'  
			    WHEN 7 THEN '1A QUINC. ABR'  
			    WHEN 8 THEN '2A QUINC. ABR'  
			    WHEN 9 THEN '1A QUINC. MAY'  
			    WHEN 10 THEN '2A QUINC. MAY'  
			    WHEN 11 THEN '1A QUINC. JUN'  
			    WHEN 12 THEN '2A QUINC. JUN'  
			    WHEN 13 THEN '1A QUINC. JUL'  
			    WHEN 14 THEN '2A QUINC. JUL'  
			    WHEN 15 THEN '1A QUINC. AGO'  
			    WHEN 16 THEN '2A QUINC. AGO'  
			    WHEN 17 THEN '1A QUINC. SEP'  
			    WHEN 18 THEN '2A QUINC. SEP'  
			    WHEN 19 THEN '1A QUINC. OCT'  
			    WHEN 20 THEN '2A QUINC. OCT'  
			    WHEN 21 THEN '1A QUINC. NOV'  
			    WHEN 22 THEN '2A QUINC. NOV'  
			    WHEN 23 THEN '1A QUINC. DIC'  
			    WHEN 24 THEN '2A QUINC. DIC'  
			  END  
			  
			  SET @vvc_mensaje = 'NOMINA ' + LTRIM(RTRIM(@vvc_mensaje)) + '/' + LTRIM(RTRIM(@cnu_anio))
			END--QN
			ELSE
			  SET @vvc_mensaje = 'NOMINA ' + LTRIM(RTRIM(@cch_tipo_nom)) + ' Periodo ' + LTRIM(RTRIM(@cnu_periodo)) + '/' + LTRIM(RTRIM(@cnu_anio))

			UPDATE fdt_bancos_tmp
			SET mensaje = @vvc_mensaje
			FROM fdt_bancos_tmp c
			WHERE c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc, mensaje)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc, tn.mensaje
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc, tn.mensaje

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--Armamos la estructura que necesita el banco.
		--Esta estructura la personalizo asi el banco, puede que otro banco la personalice diferente
		--El orden de los campos es el mismo, solo cambia el tamaño.

		INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
		SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
		REPLICATE(' ', 16 - LEN (LTRIM(RTRIM(@vvc_cuenta_bco)))) + LTRIM(RTRIM(@vvc_cuenta_bco)) + --nro de cuenta a debitar
		REPLICATE(' ', 2 - LEN (LTRIM(RTRIM(@vti_tipo_cta)))) + LTRIM(RTRIM(@vti_tipo_cta)) + --tipo de cuenta
		SUBSTRING(LTRIM(RTRIM(tns.ins_dep)),1, 6) + SPACE(6 - LEN(LTRIM(RTRIM(tns.ins_dep)))) + --codigo del banco a acreditar
--		SUBSTRING(LTRIM(RTRIM(tns.cuenta_dep)), 1, LEN(LTRIM(RTRIM(tns.cuenta_dep))) - 1) + SPACE(16 - LEN(SUBSTRING(LTRIM(RTRIM(tns.cuenta_dep)), 1, LEN(LTRIM(RTRIM(tns.cuenta_dep))) - 1))) + --Nro de cuenta a acreditar
--		CASE RIGHT(LTRIM(RTRIM(tns.cuenta_dep)),1) WHEN 'D' THEN ' 1' WHEN 'S' THEN ' 2' ELSE ' 2' END + --tipo de cuenta a acreditar
		LTRIM(RTRIM(tns.cuenta_dep)) + SPACE (16 - LEN(LTRIM(RTRIM(tns.cuenta_dep)))) + --Nro de cuenta a acreditar
		REPLICATE(' ', 2 - LEN(LTRIM(RTRIM(tns.tipo_cuenta)))) + LTRIM(RTRIM(tns.tipo_cuenta)) + --tipo de cuenta a acreditar
		REPLICATE(' ', 12 - LEN (SUBSTRING(LTRIM(RTRIM(ISNULL(t.clave_unica,''))), 1, 12))) + SUBSTRING(LTRIM(RTRIM(ISNULL(t.clave_unica,''))), 1, 12) + --nro de identificacion del destinatario
		SUBSTRING(LTRIM(RTRIM(REPLACE(t.nombre, '/', ' '))),1, 34) + SPACE(35 - LEN(SUBSTRING(LTRIM(RTRIM(REPLACE(t.nombre, '/', ' '))),1, 34))) + --nombre del destinatario de pago
		REPLICATE(' ', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
		SUBSTRING(LTRIM(RTRIM(tns.mensaje)), 1, 80) + SPACE(80 - LEN(SUBSTRING(LTRIM(RTRIM(tns.mensaje)), 1, 80))) + --descripcion del pago
		SUBSTRING(LTRIM(RTRIM(ISNULL(t.e_mail,''))), 1, 80) + SPACE(80 - LEN(SUBSTRING(LTRIM(RTRIM(ISNULL(t.e_mail,''))), 1, 80))) --direccion de correo valida
		FROM fdt_bancos_tmp tns, trabajadores t
		WHERE tns.trabajador = t.trabajador 
		AND tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ACH_gnbs TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ACH_occi') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ACH_occi
GO
CREATE PROCEDURE sp_fco_gen_bco_ACH_occi
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH del Banco de Occidente          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Julio 14/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint,

@vvc_comprobante varchar(10),
@vvc_nombre_cia varchar(60)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

		--trayendo el nombre del cia:
		SET @vvc_nombre_cia = ''
		
		SELECT @vvc_nombre_cia = nombre_cia
		FROM companias
		WHERE compania = @cch_compania
      
		SET @vvc_comprobante =  '00' + LTRIM(RTRIM(@cnu_anio)) +
													  CASE LEN(LTRIM(RTRIM(@cnu_periodo))) WHEN 1 THEN '0'+LTRIM(RTRIM(@cnu_periodo)) 
																																 WHEN 2 THEN LTRIM(RTRIM(@cnu_periodo)) END

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, Abs(sec.secuencia)+1, 
    '2' + --constante
		REPLICATE('0', 4 - LEN(ABS(sec.secuencia))) + Abs(sec.secuencia) + --consecutivo
		REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') + --cuenta del banco
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(30 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) + --nombre del trabajador
		REPLICATE('0', 11 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 11))) + SUBSTRING(LTRIM(t.clave_unica), 1, 11) + --cedula
		REPLICATE('0', 4 - LEN(RTRIM(tns.ins_dep))) + RTRIM(tns.ins_dep) + --codigo del banco
    CONVERT(CHAR(8), @pdt_fecha, 112) + --fecha digitada en el front
		CASE LTRIM(RTRIM(tns.ins_dep)) WHEN '023' THEN '2' ELSE '3' END + --forma de pago
		REPLICATE('0', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 2, 16) + SPACE(16 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 2, 16))) + --cuenta deposito
		LTRIM(RTRIM(@vvc_comprobante)) + REPLICATE('0', 4 - LEN(ABS(sec.secuencia))) + Abs(sec.secuencia) + --comprobante
    SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 1) + --tipo de cuenta
    ('Nomina ' + LTRIM(RTRIM(@vvc_nombre_cia))) + SPACE(80- LEN(('Nomina ' + LTRIM(RTRIM(@vvc_nombre_cia)))))
    FROM trabajadores t , fdt_bancos_tmp tns, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

  --insertamos la cabeza
  INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1, 
  '10000' + --constante
  CONVERT(CHAR(8), @pdt_fecha, 112) + --fecha digitada en el front
  REPLICATE('0', 4 - LEN(LTRIM(RTRIM(@vsi_nro_trab)))) + LTRIM(RTRIM(@vsi_nro_trab)) + --total registros del detalle
	REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) + --valor total del detalle
	REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') + --cuenta del banco
  REPLICATE('0', 148)
  
  --insertamos el pie
  INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, Abs(@vsi_nro_trab)+2, 
  '39999' + --constante
  REPLICATE('0', 4 - LEN(LTRIM(RTRIM(@vsi_nro_trab)))) + LTRIM(RTRIM(@vsi_nro_trab)) + --total registros del detalle
	REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) + --valor total del detalle  
  REPLICATE('0', 172)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ACH_occi TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_avvillas') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_avvillas
GO
CREATE PROCEDURE sp_fco_gen_bco_avvillas
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por avvillas                            ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 17/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

		--utilizamos fijo la secuencia 1 del archivo de mm
		--registro de cabeza
		INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
		SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
		'01' +
		CONVERT(CHAR(8), @pdt_fecha, 112) +
		CONVERT(CHAR(8), @vdt_fecha_hoy, 108) +
		REPLICATE('0', 3 - LEN(SUBSTRING(ISNULL(@vvc_oficina_cta,'088'), 1, 3))) + SUBSTRING(ISNULL(@vvc_oficina_cta,'088'), 1, 3)+  --grabar 088
		'02' +
		'PAGO DE NOMINA' + SPACE(50 - LEN('PAGO DE NOMINA'))
        
  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, sec.secuencia+1,
    '02' + --tipo de registro
    '000023' + --pago de nomina
    '01' + --producto de origen
		REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') + --cuenta de la empresa
    '052' + --codigo de compensacion del bco destino
    '01' + --producto destino
		REPLICATE('0', 16 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16) + --cuenta destino
		REPLICATE('0', 9 - LEN(LTRIM(RTRIM(sec.secuencia)))) + LTRIM(RTRIM(sec.secuencia)) + --secuencia
		REPLICATE('0', 16 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) + --valor a transferir
    REPLICATE('0', 16) + --numero de factura
    REPLICATE('0', 16) + --numero de credito de libranza
    REPLICATE('0', 16) + --valor credito de libranza
    REPLICATE('0', 30) + --nombre del beneficiario
    REPLICATE('0', 11) + --nit del beneficiario
    REPLICATE('0', 6) + --numero de autorizacion
    REPLICATE('0', 2) + --codigo de respuesta
    REPLICATE('0', 20)  --filler
    FROM fdt_bancos_tmp tns, #tmp_sec_bco sec
    WHERE tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

		INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
		SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 999999,
		'03' + --tipo de registro
		REPLICATE('0', 9 - LEN(LTRIM(RTRIM(@vsi_nro_trab)))) + LTRIM(RTRIM(@vsi_nro_trab)) + 
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) --valor total del detalle  

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_avvillas TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_gen_bco_colmena') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_gen_bco_colmena
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_colmena
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por colmena                             ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
			FROM fdt_bancos_tmp c, inf_soc_trabajador a
			WHERE a.trabajador = c.trabajador
      AND a.indice_inf_soc = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario
			AND ISNULL(c.tipo_doc,'') = ''

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '32' ELSE '22' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    '6' +
 		RTRIM(LTRIM(ISNULL(tns.tipo_cuenta,'32'))) + --se deja fijo como ahorros para todos, ver si manejan corriente
		REPLICATE('0', 10 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) + '00' +  --Importe, parte entera
		REPLICATE(' ', 17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) +
    '000010579' +
		SUBSTRING(LTRIM(ISNULL(t.clave_unica,'')), 1, 15) + SPACE(15 - LEN(SUBSTRING(LTRIM(ISNULL(t.clave_unica,'')), 1, 15))) +
		UPPER(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 22)))) + SPACE(22 - LEN(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 22 ))))) + --Nombre del beneficiario
    'V ' +
		'PAGO DE NOMINA' + SPACE(80 - LEN('PAGO DE NOMINA'))
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_colmena TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_colombia') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_colombia
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_colombia
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por el Banco de Colombia                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
--NOV-24-05: DCR, Este sp puede servir para Bancolombia y Convai, solo que en la configuracion de bancos 
--a la institucion de deposito Bancolombia se debe colocar 005600078 y para Convai 005701100
--y si se desea utilizar como ACH los codigos serian los siguientes:
--  '005600065' -- SANTANDER              
--  '005895142' -- DAVIVIENDA              
--  '005701304' -- GRANAHORRAR              
--  '005600010' -- BOGOTA              
--  '005600023' -- POPULAR              
--  '005600104' -- TSB BANK - ANGLO              
--  '005600078' -- BANCOLOMBIA              
--  '005600094' -- CITIBANK              
--  '005600052' -- BANCAFE              
--  '005600230' -- OCCIDENTE              
--  '005600829' -- CAJA SOCIAL              
--  '005600133' -- GANADERO              
--  '005600191' -- COLPATRIA              
--  '006013677' -- AV VILLAS              
--  '005701100' -- CONAVI              
--  '005701809' -- COLMENA              
--  '000001036' -- MEGABANCO              
--  '005600340' -- SUPERIOR              
--  '999999999' -- COOMEVA              
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, NULL, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL

      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
			FROM fdt_bancos_tmp c, inf_soc_trabajador a
			WHERE a.trabajador = c.trabajador
      AND a.indice_inf_soc = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario
			AND ISNULL(c.tipo_doc,'') = ''

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '37' ELSE '27' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2, 
    '6' + --Tipo de registro
		REPLICATE('0', 15-LEN(SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 15))) + SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 15) + --Nit Beneficiario
		UPPER(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 18)))) + SPACE(18 - LEN(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 18 ))))) + --Nombre del beneficiario
    LTRIM(RTRIM(ISNULL(tns.ins_dep,''))) + --Banco cuenta del beneficiario
		REPLICATE('0', 17-LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) +--Numero de cuenta del beneficiario
    'S' + --Indicador Lugar de pago
		LTRIM(RTRIM(ISNULL(tns.tipo_cuenta,'37'))) + --se deja fijo como ahorros para todos, ver si manejan corriente
		REPLICATE('0', 10 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    'PAGONOMIN' + --Concepto
		SPACE(12) + --referencia
    ' ' --relleno
    FROM trabajadores t , fdt_bancos_tmp tns
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

    --armamos la estructura del archivo plano. La cabeza
    --Aqui queda el valor de cuenta, tipo cuenta de la ultima cia recorrida
    INSERT INTO
      fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
      '1' +  --Tipo de registro
			REPLICATE('0', 10 - LEN(SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,9))) + SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,9) + --Nit entidad que envia
			SUBSTRING(ISNULL(nombre_cia,''),1,16) + SPACE(16 - LEN(SUBSTRING(ISNULL(nombre_cia,''),1,16))) +  --Nombre entidad que envia
      '225' +  --Clase de transacciones contenidas
      'PAGO NOM  ' +  --Descripcion proposito transacciones
      CONVERT(CHAR(6), @pdt_fecha, 12) + --fecha transmision del lote
      'A' +  --Secuencia envio del lote
      CONVERT(CHAR(6), @pdt_fecha, 12) + --fecha aplicacion de transacciones
			REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +  --Numero de registros
      '000000000000' +  --Sumatoria debitos        
			REPLICATE('0', 12 - LEN(RTRIM(Floor(@vdc_total)))) + RTRIM(Floor(@vdc_total)) +  --Numero de registros
			REPLICATE('0', 11 - LEN(SUBSTRING(@vvc_cuenta_bco, 1, 11))) + SUBSTRING(@vvc_cuenta_bco, 1, 11) +
      CASE @vti_tipo_cta WHEN 2 THEN 'S' ELSE 'D' END
    FROM
      companias
    WHERE
      compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)      

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_colombia TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_colpatria') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_colpatria
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_colpatria
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por la multibanca Colpatria             ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Enero 16/2006                                         ***/
/********************************************************************/
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint,
@vvc_cta_bco_gen char(8), -- la cuenta del banco generador
@vvc_fecha_formato char(8),
@vsi_reg_enviados integer
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'
	SET @vvc_cta_bco_gen = '19'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, NULL, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL

      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN 'C' WHEN '02' THEN 'E' WHEN '04' THEN 'N' WHEN '05' THEN 'P' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
            AND a.trabajador = c.trabajador
            AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN 'C' WHEN 'T' THEN 'I' WHEN 'E' THEN 'E' WHEN 'N' THEN 'N' WHEN 'P' THEN 'P' END
			FROM fdt_bancos_tmp c, inf_soc_trabajador a
			WHERE a.trabajador = c.trabajador
            AND a.indice_inf_soc = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario
			--AND ISNULL(c.tipo_doc,'') = ''

            UPDATE fdt_bancos_tmp
            SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '2' ELSE '1' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
            AND a.trabajador = c.trabajador
            AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

		SET @vvc_fecha_formato = CONVERT(CHAR(8), @pdt_fecha, 112)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal, comienza en 2
		SELECT tns.trabajador, IDENTITY(smallint, 2, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, sec.secuencia,
		REPLICATE('0', 5 - LEN(LTRIM(RTRIM(sec.secuencia)))) + LTRIM(RTRIM(sec.secuencia)) + --numero secuencial de registro
		'02' + --tipo de registro
		CASE LTRIM(RTRIM(tns.ins_dep)) WHEN @vvc_cta_bco_gen THEN REPLICATE('0', 12 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 12))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 12) ELSE REPLICATE('0', 12) END + --numero de cuenta
		REPLICATE('0', 11-LEN(SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 11))) + SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 11) + --Nit Beneficiario
		UPPER(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 40)))) + SPACE(40 - LEN(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 40 ))))) + --Nombre del beneficiario
		CASE LTRIM(RTRIM(tns.ins_dep)) WHEN @vvc_cta_bco_gen THEN '902' ELSE '911' END + -- Codigo de transaccion
		'01' + --tipo de cargo a aplicar
		REPLICATE('0', 13 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) + '00' +  --valor neto pago
		SPACE(10) + --numero de factura
		REPLICATE('0', 6) + --numero de control de pago
		REPLICATE('0', 15) + --valor retencion en la fuente
		REPLICATE('0', 15) + --valor iva
		SUBSTRING(@vvc_fecha_formato, 7, 2) + SUBSTRING(@vvc_fecha_formato, 5, 2) + SUBSTRING(@vvc_fecha_formato, 1, 4) + --fecha del recibo de informacion DDMMAAAA
		REPLICATE('0', 10) + --numero nota debito
		REPLICATE('0', 15) + --valor nota debito
		REPLICATE('0', 8 - LEN(LTRIM(RTRIM(tns.ins_dep)))) + LTRIM(RTRIM(tns.ins_dep)) + --codigo de banco
		CASE LTRIM(RTRIM(tns.ins_dep)) WHEN @vvc_cta_bco_gen THEN REPLICATE('0', 17) ELSE REPLICATE('0', 17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) END + --numero de cuenta
		LTRIM(RTRIM(ISNULL(tns.tipo_cuenta,'2'))) + --clase de cuenta
		LTRIM(RTRIM(ISNULL(tns.tipo_doc,'C'))) + --tipo de documento
		SPACE(4) + --espacios en blanco
		'PAGO DE NOMINA' + SPACE(66) --adenda
    FROM trabajadores t, fdt_bancos_tmp tns, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

		SET @vsi_reg_enviados = @vsi_nro_trab + 2 --el total del detalle, mas la cabeza y el pie

    --armamos la estructura del archivo plano. La cabeza
    --Aqui queda el valor de cuenta, tipo cuenta de la ultima cia recorrida
    INSERT INTO
      fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
			'00001' + -- numero secuencia del registro
			'01' + -- tipo de registro
			SUBSTRING(@vvc_fecha_formato, 7, 2) + SUBSTRING(@vvc_fecha_formato, 5, 2) + SUBSTRING(@vvc_fecha_formato, 1, 4) + --fecha del recibo de informacion DDMMAAAA
			REPLICATE('0', 11 - LEN(SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,11))) + SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,11) + --Nit del cliente
			REPLICATE(' ', 10 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 10))) + SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 10) + --clave (la guardamos en registro fiscal)
			REPLICATE('0', 6 - LEN(LTRIM(RTRIM(@vsi_reg_enviados)))) + LTRIM(RTRIM(@vsi_reg_enviados)) +  --Numero de registros enviados
			REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4))) + SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4) + --Oficina de pago
			REPLICATE('0', 12 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_cuenta_bco)), 1, 12))) + SUBSTRING(LTRIM(RTRIM(@vvc_cuenta_bco)), 1, 12) + --numero de cuenta
			SPACE(142) --espacios en blanco
    FROM
      companias
    WHERE
      compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)      

    INSERT INTO
      fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, @vsi_reg_enviados,
			REPLICATE('0', 5 - LEN(LTRIM(RTRIM(@vsi_reg_enviados)))) + LTRIM(RTRIM(@vsi_reg_enviados)) + --numero secuencia de registro
			'03' + --tipo de registro
			REPLICATE('0', 6 - LEN(LTRIM(RTRIM(@vsi_reg_enviados)))) + LTRIM(RTRIM(@vsi_reg_enviados)) + --numero de registros enviados
			SPACE(187) --espacios en blanco

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_colpatria TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_conavi') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_conavi
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_conavi
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por conavi                              ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
			FROM fdt_bancos_tmp c, inf_soc_trabajador a
			WHERE a.trabajador = c.trabajador
      AND a.indice_inf_soc = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario
			AND ISNULL(c.tipo_doc,'') = ''

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '2' ELSE '1' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)
		SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta, '')
		SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    '1' +
		LTRIM(RTRIM(ISNULL(tns.ins_dep,''))) + -- Ej: 570110
		CONVERT(CHAR(4), SUBSTRING(RTRIM(ISNULL(tns.cuenta_dep,'0')), 1, 4)) +
		REPLICATE('0', 11 - LEN(SUBSTRING(RTRIM(ISNULL(tns.cuenta_dep,'0')), 5, 9))) + SUBSTRING(RTRIM(ISNULL(tns.cuenta_dep,'0')), 5, 9) +
		'      ' +
		LTRIM(RTRIM(ISNULL(tns.tipo_cuenta,'2'))) +
		REPLICATE('0', 17 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe))))   --Importe, parte entera
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  --la cabeza
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    '0' + '01' + 'NOE' +
		SPACE(4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 4))) + SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 4) + -- Ej: '5086'
		SPACE(13 - LEN(LTRIM(RTRIM(@vvc_registro_fiscal)))) + LTRIM(RTRIM(@vvc_registro_fiscal)) + --Ej: '5086000000166'
	  '0000000000001' +
		SPACE(6 - LEN(LTRIM(RTRIM(@vvc_oficina_cta)))) + LTRIM(RTRIM(@vvc_oficina_cta)) + --Ej: '570110'
		SPACE(15 - LEN(LTRIM(RTRIM(@vvc_cuenta_bco)))) + LTRIM(RTRIM(@vvc_cuenta_bco)) + -- Ej: Iria todo esto: '5045' + '00007680036'
		'      ' + 
		CASE ISNULL(@vti_tipo_cta,1) WHEN 1 THEN '1' ELSE '2' END + -- 1 SI ES CORRIENTE O 2 SI ES AHORROS
		REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +
		REPLICATE('0', 17 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) + 
		'Pago de Nomina' + SPACE(100 - LEN('Pago de Nomina'))

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_conavi TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_gen_bco_davivienda') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_gen_bco_davivienda
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_davivienda
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por davivienda                          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL

      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
			FROM fdt_bancos_tmp c, inf_soc_trabajador a
			WHERE a.trabajador = c.trabajador
      AND a.indice_inf_soc = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario
			AND ISNULL(c.tipo_doc,'') = ''

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN 'CA' ELSE 'CC' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario


SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

  --Ahora el detalle
	--*****  CONSTRUCCION DE LOS REGISTROS TIPO TR
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    'TR' +
		REPLICATE('0', 16 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 16))) + SUBSTRING(LTRIM(t.clave_unica), 1, 16) +
		REPLICATE('0', 16) +
		REPLICATE('0', 16 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16) +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_cuenta,'CA')), 1, 2) +
    '000051' +
		REPLICATE('0', 16 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    REPLICATE('0', 8) +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'02')), 1, 2) +
    '0' +
    '9999' +
    REPLICATE('0', 40) +
    REPLICATE('0', 18) +
    REPLICATE('0', 8) +
    REPLICATE('0', 4) +
    REPLICATE('0', 4) +
    REPLICATE('0', 7)
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  --la cabeza
	--***** CONSTRUCCION DEL REGISTRO TIPO RC
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    'RC' +
		REPLICATE('0', 16 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) + REPLACE(ISNULL(registro_fiscal,'0'),'-','') +
    'NOMI' +
    REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4))) +  SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4) +  
		REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') +
		CASE ISNULL(@vti_tipo_cta, 2) WHEN 2 THEN 'CA' ELSE 'CC' END +
    '000051' +
		REPLICATE('0', 16 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  --Importe, parte entera
		REPLICATE('0', 8 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +
    CONVERT(CHAR(8),GETDATE(), 112) +  
    SUBSTRING(CONVERT(CHAR(8),GETDATE(), 108), 1, 2) +  
    SUBSTRING(CONVERT(CHAR(8),GETDATE(), 108), 4, 2) +  
    SUBSTRING(CONVERT(CHAR(8),GETDATE(), 108), 7, 2) +  
    '0000' +
    '9999' +
    REPLICATE('0', 8) +
    REPLICATE('0', 6) +
    '00' +
    '01' +
    REPLICATE('0', 12) +
    REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4))) +  SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4) + 
    REPLICATE('0', 40)
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_davivienda TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ganadero') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ganadero
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_ganadero
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por davivienda                          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'01')), 1, 2) + -- TIPO ID BENEFICIARIO  
		REPLICATE('0', 15 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 15))) + SUBSTRING(LTRIM(t.clave_unica), 1, 15) +  -- Nº ID BENEFICIARIO  
    '0' + -- DIGITO CONTROL Nº ID BENEFICIARIO  
    '1' + -- FORMA PAGO  
    '0013' + -- BANCO RECEPTOR
    '0' + 
		REPLICATE('0', 3 - LEN(SUBSTRING(tns.cuenta_dep, 1, 3))) + SUBSTRING(tns.cuenta_dep, 1, 3) + -- OFICINA/PLAZA 
		REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(tns.tipo_cuenta), 1, 4))) + SUBSTRING(LTRIM(tns.tipo_cuenta), 1, 4) + -- TIPO CUENTA  
		REPLICATE('0', 6 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 4, 6)))  + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 4, 6) + -- CUENTA BBVA  
    '00' + -- TIPO CUENTA NACHA  
    REPLICATE('0', 17) + -- CUENTA NACHA
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(36 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) + -- NOMBRE BENEFICIARIO  
		REPLICATE('0', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    REPLICATE(' ', 36) + -- DIRECCION  
    REPLICATE(' ', 18) + -- TELEFONO  
    REPLICATE('0', 8) + --FECHA LIMITE DE PAGO  
		'PAGO DE NOMINA' + SPACE(40 - LEN('PAGO DE NOMINA')) -- CONCEPTO PAGO      
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ganadero TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_granahorrar') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_granahorrar
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_granahorrar
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por granahorrar                         ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario


SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  -- CONSTRUCCION DEL REGISTRO TIPO I 
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    'N0000000000' +
    CONVERT(CHAR(8), @pdt_fecha, 112) +
    '01' +
    ISNULL(@vvc_cuenta_bco,'0') +
		LTRIM(RTRIM(nombre_cia)) + SPACE(30 - LEN(LTRIM(RTRIM(nombre_cia)))) +
    '00' +
		REPLICATE('0', 9 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) + REPLACE(ISNULL(registro_fiscal,'0'),'-','') +
    REPLICATE(' ', 11) +
    '000001'    
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)
      
  -- CONSTRUCCION DE LOS REGISTROS TIPO II
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    'N32' +
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) + SPACE(17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) +
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(30 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) +
		REPLICATE('0', 11 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 11))) + SUBSTRING(LTRIM(t.clave_unica), 1, 11) +
		REPLICATE('0', 12 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    ' ' +
		REPLICATE('0', 6 - LEN(RTRIM(sec.secuencia))) + RTRIM(sec.secuencia)
    FROM fdt_bancos_tmp tns, trabajadores t, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  -- CONSTRUCCION DEL REGISTRO TIPO III   
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 3,
    'N9999999999' +
		REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +
		REPLICATE('0', 12 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  --Importe, parte entera
    REPLICATE(' ', 54) +
		REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab+2))) + RTRIM(@vsi_nro_trab+2)

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_granahorrar TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_lloyds') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_lloyds
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_lloyds
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por Lloyds                              ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05:DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 4,
    '6' +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_cuenta,'2')), 1, 1) +
    '2' +
    '2' +
    '010' +
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 25) + SPACE(25 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 25))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    '000000' +
		SUBSTRING(LTRIM(t.clave_unica), 1, 15) + SPACE(15 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 15))) +
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(22 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) +
    ' ' +
    REPLICATE('0', 11) +
		REPLICATE('0', 7 - LEN(RTRIM(sec.secuencia))) + RTRIM(sec.secuencia) +
    '02' +
		'PAGO DE NOMINA' + SPACE(72 - LEN('PAGO DE NOMINA'))
    FROM fdt_bancos_tmp tns, trabajadores t, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
          
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  --la cabeza
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 3,
    '6' +
    @vti_tipo_cta +
    '1' +
    '2' +
    '010' + 
		ISNULL(@vvc_cuenta_bco,'0') + SPACE(16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  --Importe, parte entera
    '000000' +
		REPLACE(ISNULL(registro_fiscal,'0'),'-','') + SPACE(15 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
		LTRIM(RTRIM(nombre_cia)) + SPACE(22 - LEN(LTRIM(RTRIM(nombre_cia)))) +
    ' ' +
    REPLICATE('0', 11) +
    '0000001' +
    '02' +
		'PAGO DE NOMINA' + SPACE(72 - LEN('PAGO DE NOMINA'))
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)

  -- Construcción de registro control de lote de transferencias
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    '5' +
		LTRIM(RTRIM(nombre_cia)) + SPACE(16 - LEN(LTRIM(RTRIM(nombre_cia)))) +
		REPLICATE('0', 10 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') +
    'NOMINA    ' +
		REPLACE(ISNULL(registro_fiscal,'0'),'-','') + SPACE(10 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
    'PANOMINA  ' +
    CONVERT(CHAR(8), @pdt_fecha, 112) +
    '0000001' +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
    '00' +
    '01' +
    REPLICATE(' ', 88)    
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)

  --Construcción de registro control de archivo
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    ' 005600104' +
		REPLACE(ISNULL(registro_fiscal,'0'),'-','') + SPACE(10 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
    CONVERT(CHAR(8), @pdt_fecha, 112) +
    '00' + --hora
    '00' + --minutos
    'A' +
		LTRIM(RTRIM(nombre_cia)) + SPACE(23 - LEN(LTRIM(RTRIM(nombre_cia)))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
    REPLICATE('0', 18) +
    REPLICATE(' ', 89)    
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_lloyds TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_santander') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_santander
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_santander
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH Santander                       ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasado a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL

      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario


SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
		SUBSTRING(LTRIM(t.clave_unica), 1, 15) + --Identificacion
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(22 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) + -- NOMBRE BENEFICIARIO  
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) + SPACE(17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + -- cuenta
		REPLICATE('0', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --valor
		'PAGO DE NOMINA' + SPACE(80 - LEN('PAGO DE NOMINA')) +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'01')), 1, 2) + --Codigo de identificacion del destinatario
		SUBSTRING(LTRIM(ISNULL(tns.tipo_cuenta,'1')), 1, 1) + -- Tipo de Cuenta  1. Ahorros, 2 Corriente   
		REPLICATE('0', 4 -LEN(SUBSTRING(LTRIM(tns.ins_dep),1, 4))) + SUBSTRING(LTRIM(tns.ins_dep),1, 4) + --codigo del banco
    '0001' +
    '1'    
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_santander TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ACH_bogota_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ACH_bogota_ni
GO
CREATE PROCEDURE sp_fco_gen_bco_ACH_bogota_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH para NI                         ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 17/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vdt_fecha_hoy smalldatetime,
@vch_agr_id    char(10),
@vch_agr_cta   char(10)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

	SELECT @vdt_fecha_hoy = getdate()
  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

    --armamos la estructura del archivo plano. La cabeza
--Aqui queda el valor de cuenta, tipo cuenta de la ultima cia recorrida
    INSERT INTO
      fdt_bancos_mm (id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
      '1' +
      CONVERT(char(8), @vdt_fecha_hoy, 112) +
      REPLICATE('0', 24) +
      ISNULL(@vti_tipo_cta,0) +
      REPLICATE('0', 8) +
			REPLICATE('0', 9 - LEN(LTRIM(RTRIM(@vvc_cuenta_bco)))) + LTRIM(RTRIM(@vvc_cuenta_bco)) +
			LTRIM(RTRIM(nombre_cia)) + SPACE(40 - LEN(LTRIM(RTRIM(nombre_cia)))) +
			REPLICATE('0', 11 - LEN(LTRIM(RTRIM(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))))) + LTRIM(RTRIM(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
      '001' +
      '0001' +
      CONVERT(char(8), @pdt_fecha, 112) +
			REPLICATE('0', 3 - LEN(SUBSTRING(LTRIM(RTRIM(ISNULL(@vvc_cuenta_bco,'0'))), 1, 3))) + SUBSTRING(LTRIM(RTRIM(ISNULL(@vvc_cuenta_bco,'0'))), 1, 3) +
      'N' +
      REPLICATE(' ', 49) +
      REPLICATE(' ', 80)
    FROM
      companias
    WHERE
      compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)
  
  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2, 
    '2' +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'C')), 1, 1) +
		REPLICATE('0', 11 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 11))) + SUBSTRING(LTRIM(t.clave_unica), 1, 11) +
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(40 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) +
    '0' +
    RTRIM(LTRIM(tns.tipo_cuenta)) +
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) + SPACE(17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(ISNULL(tns.importe,0))))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(ISNULL(tns.importe,0))))) + 
    'A' +
    '000' +
	  RTRIM(LTRIM(ISNULL(tns.ins_dep,'0'))) +
    '0001' +
    REPLICATE(' ', 10) +
		'PAGO DE NOMINA' + SPACE(70 - LEN('PAGO DE NOMINA')) +
    '0' +
    REPLICATE('0', 10) +
    'N' +
    REPLICATE(' ', 48) +
    'N' +
    REPLICATE(' ', 8)
    FROM trabajadores t , fdt_bancos_tmp tns
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ACH_bogota_ni TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ACH_gnbs_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ACH_gnbs_ni
GO
CREATE PROCEDURE sp_fco_gen_bco_ACH_gnbs_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH del GNBSudameris                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Sept 16/2005                                         ***/
/********************************************************************/
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  SET @vvc_mensaje = 'PAGO NOMINA INTERACTIVA'

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_liq_procesar
  SELECT @cch_compania = MAX(compania)
  FROM ri_liq_procesar
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  -- Trayendo al informacion del banco      
	SELECT 
	@vch_simb_mon = b.simbolo_moneda, 
	@vti_tipo_cta = b.tipo_cta, 
	@vvc_cuenta_bco = b.cuenta, 
	@vvc_oficina_cta = b.oficina_cta, 
	@vvc_registro_fiscal = b.registro_fiscal
	FROM fdt_bancos a, fdt_bancos_cias_datos b
	WHERE a.banco = b.banco AND
	b.compania = @cch_compania AND
	a.banco = @pti_banco

	SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
	SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--Armamos la estructura que necesita el banco.
		--Esta estructura la personalizo asi el banco, puede que otro banco la personalice diferente
		--El orden de los campos es el mismo, solo cambia el tamaño.

		INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
		SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
		REPLICATE(' ', 16 - LEN (LTRIM(RTRIM(@vvc_cuenta_bco)))) + LTRIM(RTRIM(@vvc_cuenta_bco)) + --nro de cuenta a debitar
		REPLICATE(' ', 2 - LEN (LTRIM(RTRIM(@vti_tipo_cta)))) + LTRIM(RTRIM(@vti_tipo_cta)) + --tipo de cuenta
		SUBSTRING(LTRIM(RTRIM(tns.ins_dep)),1, 6) + SPACE(6 - LEN(LTRIM(RTRIM(tns.ins_dep)))) + --codigo del banco a acreditar
--		SUBSTRING(LTRIM(RTRIM(tns.cuenta_dep)), 1, LEN(LTRIM(RTRIM(tns.cuenta_dep))) - 1) + SPACE(16 - LEN(SUBSTRING(LTRIM(RTRIM(tns.cuenta_dep)), 1, LEN(LTRIM(RTRIM(tns.cuenta_dep))) - 1))) + --Nro de cuenta a acreditar
--		CASE RIGHT(LTRIM(RTRIM(tns.cuenta_dep)),1) WHEN 'D' THEN ' 1' WHEN 'S' THEN ' 2' ELSE ' 2' END + --tipo de cuenta a acreditar
		LTRIM(RTRIM(tns.cuenta_dep)) + SPACE (16 - LEN(LTRIM(RTRIM(tns.cuenta_dep)))) + --Nro de cuenta a acreditar
		REPLICATE(' ', 2 - LEN(LTRIM(RTRIM(tns.tipo_cuenta)))) + LTRIM(RTRIM(tns.tipo_cuenta)) + --tipo de cuenta a acreditar		REPLICATE(' ', 12 - LEN (SUBSTRING(LTRIM(RTRIM(ISNULL(t.clave_unica,''))), 1, 12))) + SUBSTRING(LTRIM(RTRIM(ISNULL(t.clave_unica,''))), 1, 12) + --nro de identificacion del destinatario
		SUBSTRING(LTRIM(RTRIM(REPLACE(t.nombre, '/', ' '))),1, 34) + SPACE(35 - LEN(SUBSTRING(LTRIM(RTRIM(REPLACE(t.nombre, '/', ' '))),1, 34))) + --nombre del destinatario de pago
		REPLICATE(' ', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
		SUBSTRING(LTRIM(RTRIM(@vvc_mensaje)), 1, 80) + SPACE(80 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_mensaje)), 1, 80))) + --descripcion del pago
		SUBSTRING(LTRIM(RTRIM(ISNULL(t.e_mail,''))), 1, 80) + SPACE(80 - LEN(SUBSTRING(LTRIM(RTRIM(ISNULL(t.e_mail,''))), 1, 80))) --direccion de correo valida
		FROM fdt_bancos_tmp tns, trabajadores t
		WHERE tns.trabajador = t.trabajador 
		AND tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tns.tipo = 2
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ACH_gnbs_ni TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ACH_occi_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ACH_occi_ni
GO
CREATE PROCEDURE sp_fco_gen_bco_ACH_occi_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH para NI                         ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 17/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@vvc_comprobante varchar(10),
@vvc_nombre_cia varchar(60)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

		--trayendo el nombre del cia:
		SET @vvc_nombre_cia = ''
		
		SELECT @vvc_nombre_cia = nombre_cia
		FROM companias
		WHERE compania = @cch_compania
      
		SET @vvc_comprobante =  '00' + LTRIM(RTRIM(DATEPART(YEAR, @pdt_fecha))) +
													  CASE LEN(LTRIM(RTRIM(DATEPART(MONTH, @pdt_fecha)))) WHEN 1 THEN '0'+LTRIM(RTRIM(DATEPART(MONTH, @pdt_fecha))) 
																																 WHEN 2 THEN LTRIM(RTRIM(DATEPART(MONTH, @pdt_fecha))) END

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, Abs(sec.secuencia)+1, 
    '2' + --constante
		REPLICATE('0', 4 - LEN(ABS(sec.secuencia))) + Abs(sec.secuencia) + --consecutivo
		REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') + --cuenta del banco
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(30 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) + --nombre del trabajador
		REPLICATE('0', 11 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 11))) + SUBSTRING(LTRIM(t.clave_unica), 1, 11) + --cedula
		REPLICATE('0', 4 - LEN(RTRIM(tns.ins_dep))) + RTRIM(tns.ins_dep) + --codigo del banco
    CONVERT(CHAR(8), @pdt_fecha, 112) + --fecha digitada en el front
		CASE LTRIM(RTRIM(tns.ins_dep)) WHEN '023' THEN '2' ELSE '3' END + --forma de pago
		REPLICATE('0', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 2, 16) + SPACE(16 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 2, 16))) + --cuenta deposito
		LTRIM(RTRIM(@vvc_comprobante)) + REPLICATE('0', 4 - LEN(ABS(sec.secuencia))) + Abs(sec.secuencia) + --comprobante
    SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 1) + --tipo de cuenta
    ('Nomina ' + LTRIM(RTRIM(@vvc_nombre_cia))) + SPACE(80- LEN(('Nomina ' + LTRIM(RTRIM(@vvc_nombre_cia)))))
    FROM trabajadores t , fdt_bancos_tmp tns, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

  --insertamos la cabeza
  INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1, 
  '10000' + --constante
  CONVERT(CHAR(8), @pdt_fecha, 112) + --fecha digitada en el front
  REPLICATE('0', 4 - LEN(LTRIM(RTRIM(@vsi_nro_trab)))) + LTRIM(RTRIM(@vsi_nro_trab)) + --total registros del detalle
	REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) + --valor total del detalle
	REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') + --cuenta del banco
  REPLICATE('0', 148)
  
  --insertamos el pie
  INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, Abs(@vsi_nro_trab)+2, 
  '39999' + --constante
  REPLICATE('0', 4 - LEN(LTRIM(RTRIM(@vsi_nro_trab)))) + LTRIM(RTRIM(@vsi_nro_trab)) + --total registros del detalle
	REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) + --valor total del detalle  
  REPLICATE('0', 172)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco

END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ACH_occi_ni TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_avvillas_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_avvillas_ni
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_avvillas_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por avvillas para NI                    ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 18/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),
@vdt_fecha_hoy	smalldatetime
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_liq_procesar
  SELECT @cch_compania = MAX(compania)
  FROM ri_liq_procesar
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  -- Trayendo al informacion del banco      
	SELECT 
	@vch_simb_mon = b.simbolo_moneda, 
	@vti_tipo_cta = b.tipo_cta, 
	@vvc_cuenta_bco = b.cuenta, 
	@vvc_oficina_cta = b.oficina_cta, 
	@vvc_registro_fiscal = b.registro_fiscal
	FROM fdt_bancos a, fdt_bancos_cias_datos b
	WHERE a.banco = b.banco AND
	b.compania = @cch_compania AND
	a.banco = @pti_banco

	SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
	SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

		--utilizamos fijo la secuencia 1 del archivo de mm
		--registro de cabeza
		INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
		SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
		'01' +
		CONVERT(CHAR(8), @pdt_fecha, 112) +
		CONVERT(CHAR(8), @vdt_fecha_hoy, 108) +
		REPLICATE('0', 3 - LEN(SUBSTRING(ISNULL(@vvc_oficina_cta,'088'), 1, 3))) + SUBSTRING(ISNULL(@vvc_oficina_cta,'088'), 1, 3)+  --grabar 088
		'02' +
		'PAGO DE NOMINA' + SPACE(50 - LEN('PAGO DE NOMINA'))
        
  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, sec.secuencia+1,
    '02' + --tipo de registro
    '000023' + --pago de nomina
    '01' + --producto de origen
		REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') + --cuenta de la empresa
    '052' + --codigo de compensacion del bco destino
    '01' + --producto destino
		REPLICATE('0', 16 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16) + --cuenta destino
		REPLICATE('0', 9 - LEN(LTRIM(RTRIM(sec.secuencia)))) + LTRIM(RTRIM(sec.secuencia)) + --secuencia
		REPLICATE('0', 16 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) + --valor a transferir
    REPLICATE('0', 16) + --numero de factura
    REPLICATE('0', 16) + --numero de credito de libranza
    REPLICATE('0', 16) + --valor credito de libranza
    REPLICATE('0', 30) + --nombre del beneficiario
    REPLICATE('0', 11) + --nit del beneficiario
    REPLICATE('0', 6) + --numero de autorizacion
    REPLICATE('0', 2) + --codigo de respuesta
    REPLICATE('0', 20)  --filler
    FROM fdt_bancos_tmp tns, #tmp_sec_bco sec
    WHERE tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

		INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
		SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 999999,
		'03' + --tipo de registro
		REPLICATE('0', 9 - LEN(LTRIM(RTRIM(@vsi_nro_trab)))) + LTRIM(RTRIM(@vsi_nro_trab)) + 
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) --valor total del detalle  
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco

END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_avvillas_ni TO PUBLIC
GO
if object_id('dbo.sp_fco_gen_bco_colmena_ni') is not null
    drop procedure dbo.sp_fco_gen_bco_colmena_ni
go
CREATE PROCEDURE dbo.sp_fco_gen_bco_colmena_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por colmena para NI                     ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 21/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

				--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
				FROM fdt_bancos_tmp c, inf_soc_trabajador a
				WHERE a.trabajador = c.trabajador
	      AND a.indice_inf_soc = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
				AND ISNULL(c.tipo_doc,'') = ''
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '32' ELSE '22' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_liq_procesar
  SELECT @cch_compania = MAX(compania)
  FROM ri_liq_procesar
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  -- Trayendo al informacion del banco      
	SELECT 
	@vch_simb_mon = b.simbolo_moneda, 
	@vti_tipo_cta = b.tipo_cta, 
	@vvc_cuenta_bco = b.cuenta, 
	@vvc_oficina_cta = b.oficina_cta, 
	@vvc_registro_fiscal = b.registro_fiscal
	FROM fdt_bancos a, fdt_bancos_cias_datos b
	WHERE a.banco = b.banco AND
	b.compania = @cch_compania AND
	a.banco = @pti_banco

	SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
	SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    '6' +
 		RTRIM(LTRIM(ISNULL(tns.tipo_cuenta,'32'))) + --se deja fijo como ahorros para todos, ver si manejan corriente
		REPLICATE('0', 10 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  '00' + --Importe, parte entera
		REPLICATE(' ', 17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) +
    '000010579' +
		SUBSTRING(LTRIM(ISNULL(t.clave_unica,'')), 1, 15) + SPACE(15 - LEN(SUBSTRING(LTRIM(ISNULL(t.clave_unica,'')), 1, 15))) +
		UPPER(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 22)))) + SPACE(22 - LEN(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 22 ))))) + --Nombre del beneficiario
    'V ' +
		'PAGO DE NOMINA' + SPACE(80 - LEN('PAGO DE NOMINA'))
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

END
go
grant execute on dbo.sp_fco_gen_bco_colmena_ni to public
go
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_colombia_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_colombia_ni
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_colombia_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por bancolombia para NI                 ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 21/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
--NOV-24-05: DCR, Este sp puede servir para Bancolombia y Convai, solo que en la configuracion de bancos 
--a la institucion de deposito Bancolombia se debe colocar 005600078 y para Convai 005701100
--y si se desea utilizar como ACH los codigos serian los siguientes:
--  '005600065' -- SANTANDER              
--  '005895142' -- DAVIVIENDA              
--  '005701304' -- GRANAHORRAR              
--  '005600010' -- BOGOTA              
--  '005600023' -- POPULAR              
--  '005600104' -- TSB BANK - ANGLO              
--  '005600078' -- BANCOLOMBIA              
--  '005600094' -- CITIBANK              
--  '005600052' -- BANCAFE              
--  '005600230' -- OCCIDENTE              
--  '005600829' -- CAJA SOCIAL              
--  '005600133' -- GANADERO              
--  '005600191' -- COLPATRIA              
--  '006013677' -- AV VILLAS              
--  '005701100' -- CONAVI              
--  '005701809' -- COLMENA              
--  '000001036' -- MEGABANCO              
--  '005600340' -- SUPERIOR              
--  '999999999' -- COOMEVA              

DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, NULL, '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

				--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
				FROM fdt_bancos_tmp c, inf_soc_trabajador a
				WHERE a.trabajador = c.trabajador
				AND a.indice_inf_soc = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
				AND ISNULL(c.tipo_doc,'') = ''
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '37' ELSE '27' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2, 
    '6' + --Tipo de registro
		REPLICATE('0', 15-LEN(SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 15))) + SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 15) + --Nit Beneficiario
		UPPER(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 18)))) + SPACE(18 - LEN(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 18 ))))) + --Nombre del beneficiario
    LTRIM(RTRIM(ISNULL(tns.ins_dep,''))) + --Banco cuenta del beneficiario
		REPLICATE('0', 17-LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) +--Numero de cuenta del beneficiario
    'S' + --Indicador Lugar de pago
		LTRIM(RTRIM(ISNULL(tns.tipo_cuenta,'37'))) + --se deja fijo como ahorros para todos, ver si manejan corriente
		REPLICATE('0', 10 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    'PAGONOMIN' + --Concepto
		SPACE(12) + --referencia
    ' ' --relleno
    FROM trabajadores t , fdt_bancos_tmp tns
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

    --armamos la estructura del archivo plano. La cabeza
    --Aqui queda el valor de cuenta, tipo cuenta de la ultima cia recorrida
    INSERT INTO
      fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
      '1' +  --Tipo de registro
			REPLICATE('0', 10 - LEN(SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,9))) + SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,9) + --Nit entidad que envia
			SUBSTRING(ISNULL(nombre_cia,''),1,16) + SPACE(16 - LEN(SUBSTRING(ISNULL(nombre_cia,''),1,16))) +  --Nombre entidad que envia
      '225' +  --Clase de transacciones contenidas
      'P. NOMINA ' +  --Descripcion proposito transacciones
      CONVERT(CHAR(6), @pdt_fecha, 12) + --fecha transmision del lote
      'A' +  --Secuencia envio del lote
      CONVERT(CHAR(6), @pdt_fecha, 12) + --fecha aplicacion de transacciones
			REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +  --Numero de registros
      '000000000000' +  --Sumatoria debitos        
			REPLICATE('0', 12 - LEN(RTRIM(Floor(@vdc_total)))) + RTRIM(Floor(@vdc_total)) +  --Numero de registros
			REPLICATE('0', 11 - LEN(SUBSTRING(@vvc_cuenta_bco, 1, 11))) + SUBSTRING(@vvc_cuenta_bco, 1, 11) +
      CASE @vti_tipo_cta WHEN 2 THEN 'S' ELSE 'D' END
    FROM
      companias
    WHERE
      compania IN (SELECT DISTINCT compania FROM ri_liq_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)      
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_colombia_ni TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_colpatria_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_colpatria_ni
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_colpatria_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por la multibanca Colpatria para NI     ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Enero 16/2006                                         ***/
/********************************************************************/

DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@vvc_cta_bco_gen char(8), -- la cuenta del banco generador
@vvc_fecha_formato char(8),
@vsi_reg_enviados integer

     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'
	SET @vvc_cta_bco_gen = '19'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, NULL, NULL
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN 'C' WHEN '02' THEN 'E' WHEN '04' THEN 'N' WHEN '05' THEN 'P' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

				--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN 'C' WHEN 'T' THEN 'I' WHEN 'E' THEN 'E' WHEN 'N' THEN 'N' WHEN 'P' THEN 'P' END
				FROM fdt_bancos_tmp c, inf_soc_trabajador a
				WHERE a.trabajador = c.trabajador
				AND a.indice_inf_soc = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
				--AND ISNULL(c.tipo_doc,'') = ''
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '2' ELSE '1' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

	SET @vvc_fecha_formato = CONVERT(CHAR(8), @pdt_fecha, 112)
	
	--como se maneja un consecutivo, debemos hacer uso de una tabla temporal, comienza en 2
	SELECT tns.trabajador, IDENTITY(smallint, 2, 1) as secuencia
	INTO #tmp_sec_bco
	FROM fdt_bancos_tmp tns
	WHERE tns.id_rep = @psi_id_rep
	AND tns.usuariow = @pvc_usuario
	AND tns.tipo = 2      
	
	--Ahora el detalle
	INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
	SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, sec.secuencia,
	REPLICATE('0', 5 - LEN(LTRIM(RTRIM(sec.secuencia)))) + LTRIM(RTRIM(sec.secuencia)) + --numero secuencial de registro
	'02' + --tipo de registro
	CASE LTRIM(RTRIM(tns.ins_dep)) WHEN @vvc_cta_bco_gen THEN REPLICATE('0', 12 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 12))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 12) ELSE REPLICATE('0', 12) END + --numero de cuenta
	REPLICATE('0', 11-LEN(SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 11))) + SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 11) + --Nit Beneficiario
	UPPER(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 40)))) + SPACE(40 - LEN(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 40 ))))) + --Nombre del beneficiario
	CASE LTRIM(RTRIM(tns.ins_dep)) WHEN @vvc_cta_bco_gen THEN '902' ELSE '911' END + -- Codigo de transaccion
	'01' + --tipo de cargo a aplicar
	REPLICATE('0', 13 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) + '00' +  --valor neto pago
	SPACE(10) + --numero de factura
	REPLICATE('0', 6) + --numero de control de pago
	REPLICATE('0', 15) + --valor retencion en la fuente
	REPLICATE('0', 15) + --valor iva
	SUBSTRING(@vvc_fecha_formato, 7, 2) + SUBSTRING(@vvc_fecha_formato, 5, 2) + SUBSTRING(@vvc_fecha_formato, 1, 4) + --fecha del recibo de informacion DDMMAAAA
	REPLICATE('0', 10) + --numero nota debito
	REPLICATE('0', 15) + --valor nota debito
	REPLICATE('0', 8 - LEN(LTRIM(RTRIM(tns.ins_dep)))) + LTRIM(RTRIM(tns.ins_dep)) + --codigo de banco
	CASE LTRIM(RTRIM(tns.ins_dep)) WHEN @vvc_cta_bco_gen THEN REPLICATE('0', 17) ELSE REPLICATE('0', 17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) END + --numero de cuenta
	LTRIM(RTRIM(ISNULL(tns.tipo_cuenta,'2'))) + --clase de cuenta
	LTRIM(RTRIM(ISNULL(tns.tipo_doc,'C'))) + --tipo de documento
	SPACE(4) + --espacios en blanco
	'PAGO DE NOMINA' + SPACE(66) --adenda
	FROM trabajadores t, fdt_bancos_tmp tns, #tmp_sec_bco sec
	WHERE t.trabajador = tns.trabajador
	AND tns.trabajador = sec.trabajador
	AND tns.id_rep = @psi_id_rep
	AND tns.usuariow = @pvc_usuario
	AND tns.tipo = 2      
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

		SET @vsi_reg_enviados = @vsi_nro_trab + 2 --el total del detalle, mas la cabeza y el pie

    --armamos la estructura del archivo plano. La cabeza
    --Aqui queda el valor de cuenta, tipo cuenta de la ultima cia recorrida
    INSERT INTO
      fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
			'00001' + -- numero secuencia del registro
			'01' + -- tipo de registro
			SUBSTRING(@vvc_fecha_formato, 7, 2) + SUBSTRING(@vvc_fecha_formato, 5, 2) + SUBSTRING(@vvc_fecha_formato, 1, 4) + --fecha del recibo de informacion DDMMAAAA
			REPLICATE('0', 11 - LEN(SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,11))) + SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,11) + --Nit del cliente
			REPLICATE(' ', 10 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 10))) + SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 10) + --clave (la guardamos en registro fiscal)
			REPLICATE('0', 6 - LEN(LTRIM(RTRIM(@vsi_reg_enviados)))) + LTRIM(RTRIM(@vsi_reg_enviados)) +  --Numero de registros enviados
			REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4))) + SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4) + --Oficina de pago
			REPLICATE('0', 12 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_cuenta_bco)), 1, 12))) + SUBSTRING(LTRIM(RTRIM(@vvc_cuenta_bco)), 1, 12) + --numero de cuenta
			SPACE(142) --espacios en blanco
    FROM
      companias
    WHERE
      compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)      

    INSERT INTO
      fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, @vsi_reg_enviados,
			REPLICATE('0', 5 - LEN(LTRIM(RTRIM(@vsi_reg_enviados)))) + LTRIM(RTRIM(@vsi_reg_enviados)) + --numero secuencia de registro
			'03' + --tipo de registro
			REPLICATE('0', 6 - LEN(LTRIM(RTRIM(@vsi_reg_enviados)))) + LTRIM(RTRIM(@vsi_reg_enviados)) + --numero de registros enviados
			SPACE(187) --espacios en blanco
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco

END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_colpatria_ni TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_conavi_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_conavi_ni
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_conavi_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por conavi para NI                      ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

				--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
				FROM fdt_bancos_tmp c, inf_soc_trabajador a
				WHERE a.trabajador = c.trabajador
	      AND a.indice_inf_soc = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
				AND ISNULL(c.tipo_doc,'') = ''
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '2' ELSE '1' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_liq_procesar
  SELECT @cch_compania = MAX(compania)
  FROM ri_liq_procesar
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  -- Trayendo al informacion del banco      
	SELECT 
	@vch_simb_mon = b.simbolo_moneda, 
	@vti_tipo_cta = b.tipo_cta, 
	@vvc_cuenta_bco = b.cuenta, 
	@vvc_oficina_cta = b.oficina_cta, 
	@vvc_registro_fiscal = b.registro_fiscal
	FROM fdt_bancos a, fdt_bancos_cias_datos b
	WHERE a.banco = b.banco AND
	b.compania = @cch_compania AND
	a.banco = @pti_banco

	SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
	SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)
	SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta, '')
	SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    '1' +
		LTRIM(RTRIM(ISNULL(tns.ins_dep,''))) + -- Ej: 570110
		CONVERT(CHAR(4), SUBSTRING(RTRIM(ISNULL(tns.cuenta_dep,'0')), 1, 4)) +
		REPLICATE('0', 11 - LEN(SUBSTRING(RTRIM(ISNULL(tns.cuenta_dep,'0')), 5, 9))) + SUBSTRING(RTRIM(ISNULL(tns.cuenta_dep,'0')), 5, 9) +
		'      ' +
		LTRIM(RTRIM(ISNULL(tns.tipo_cuenta,'2'))) +
		REPLICATE('0', 17 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe))))   --Importe, parte entera
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  --la cabeza
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    '0' + '01' + 'NOE' +
		SPACE(4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 4))) + SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 4) + -- Ej: '5086'
		SPACE(13 - LEN(LTRIM(RTRIM(@vvc_registro_fiscal)))) + LTRIM(RTRIM(@vvc_registro_fiscal)) + --Ej: '5086000000166'
	  '0000000000001' +
		SPACE(6 - LEN(LTRIM(RTRIM(@vvc_oficina_cta)))) + LTRIM(RTRIM(@vvc_oficina_cta)) + --Ej: '570110'
		SPACE(15 - LEN(LTRIM(RTRIM(@vvc_cuenta_bco)))) + LTRIM(RTRIM(@vvc_cuenta_bco)) + -- Ej: Iria todo esto: '5045' + '00007680036'
		'      ' + 
		CASE @vti_tipo_cta WHEN 1 THEN '1' ELSE '2' END + -- 1 SI ES CORRIENTE O 2 SI ES AHORROS
		REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +
		REPLICATE('0', 17 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) + 
		'Pago de Nomina' + SPACE(100 - LEN('Pago de Nomina'))
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_conavi_ni TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_gen_bco_davivienda_ni') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_gen_bco_davivienda_ni
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_davivienda_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por davivienda para NI                  ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

				--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
				FROM fdt_bancos_tmp c, inf_soc_trabajador a
				WHERE a.trabajador = c.trabajador
	      AND a.indice_inf_soc = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
				AND ISNULL(c.tipo_doc,'') = ''
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN 'CA' ELSE 'CC' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_liq_procesar
  SELECT @cch_compania = MAX(compania)
  FROM ri_liq_procesar
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  -- Trayendo al informacion del banco      
	SELECT 
	@vch_simb_mon = b.simbolo_moneda, 
	@vti_tipo_cta = b.tipo_cta, 
	@vvc_cuenta_bco = b.cuenta, 
	@vvc_oficina_cta = b.oficina_cta, 
	@vvc_registro_fiscal = b.registro_fiscal
	FROM fdt_bancos a, fdt_bancos_cias_datos b
	WHERE a.banco = b.banco AND
	b.compania = @cch_compania AND
	a.banco = @pti_banco

	SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
	SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)
	SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'')

  --Ahora el detalle
	--*****  CONSTRUCCION DE LOS REGISTROS TIPO TR
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    'TR' +
		REPLICATE('0', 16 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 16))) + SUBSTRING(LTRIM(t.clave_unica), 1, 16) +
		REPLICATE('0', 16) +
		REPLICATE('0', 16 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16) +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_cuenta,'CA')), 1, 2) +
    '000051' +
		REPLICATE('0', 16 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    REPLICATE('0', 8) +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'02')), 1, 2) +
    '0' +
    '9999' +
    REPLICATE('0', 40) +
    REPLICATE('0', 18) +
    REPLICATE('0', 8) +
    REPLICATE('0', 4) +
    REPLICATE('0', 4) +
    REPLICATE('0', 7)    
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  --la cabeza
	--***** CONSTRUCCION DEL REGISTRO TIPO RC
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    'RC' +
		REPLICATE('0', 16 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) + REPLACE(ISNULL(registro_fiscal,'0'),'-','') +
    'NOMI' +
    REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4))) +  SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4) +  
		REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') +
		CASE ISNULL(@vti_tipo_cta, 2) WHEN 2 THEN 'CA' ELSE 'CC' END +
    '000051' +
		REPLICATE('0', 16 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) +
	 LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  --Importe, parte entera
		REPLICATE('0', 8 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +
    CONVERT(CHAR(8),GETDATE(), 112) +  
    SUBSTRING(CONVERT(CHAR(8),GETDATE(), 108), 1, 2) +  
    SUBSTRING(CONVERT(CHAR(8),GETDATE(), 108), 4, 2) +  
    SUBSTRING(CONVERT(CHAR(8),GETDATE(), 108), 7, 2) +  
    '0000' +
    '9999' +
    REPLICATE('0', 8) +
    REPLICATE('0', 6) +
    '00' +
    '01' +
    REPLICATE('0', 12) +
    REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4))) +  SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4) + 
    REPLICATE('0', 40)    
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_liq_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

END

GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_davivienda_ni TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ganadero_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ganadero_ni
GO
CREATE PROCEDURE sp_fco_gen_bco_ganadero_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ganadero para NI                    ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_liq_procesar
  SELECT @cch_compania = MAX(compania)
  FROM ri_liq_procesar
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  -- Trayendo al informacion del banco      
	SELECT 
	@vch_simb_mon = b.simbolo_moneda, 
	@vti_tipo_cta = b.tipo_cta, 
	@vvc_cuenta_bco = b.cuenta, 
	@vvc_oficina_cta = b.oficina_cta, 
	@vvc_registro_fiscal = b.registro_fiscal
	FROM fdt_bancos a, fdt_bancos_cias_datos b
	WHERE a.banco = b.banco AND
	b.compania = @cch_compania AND
	a.banco = @pti_banco

	SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
	SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'01')), 1, 2) + -- TIPO ID BENEFICIARIO  
		REPLICATE('0', 15 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 15))) + SUBSTRING(LTRIM(t.clave_unica), 1, 15) +  -- Nº ID BENEFICIARIO  
    '0' + -- DIGITO CONTROL Nº ID BENEFICIARIO  
    '1' + -- FORMA PAGO  
    '0013' + -- BANCO RECEPTOR
    '0' + 
		REPLICATE('0', 3 - LEN(SUBSTRING(tns.cuenta_dep, 1, 3))) + SUBSTRING(tns.cuenta_dep, 1, 3) + -- OFICINA/PLAZA 
		REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(tns.tipo_cuenta), 1, 4))) + SUBSTRING(LTRIM(tns.tipo_cuenta), 1, 4) + -- TIPO CUENTA  
		REPLICATE('0', 6 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 4, 6)))  + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 4, 6) + -- CUENTA BBVA  
    '00' + -- TIPO CUENTA NACHA  
    REPLICATE('0', 17) + -- CUENTA NACHA
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(36 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) + -- NOMBRE BENEFICIARIO  
		REPLICATE('0', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    REPLICATE(' ', 36) + -- DIRECCION  
    REPLICATE(' ', 18) + -- TELEFONO  
    REPLICATE('0', 8) + --FECHA LIMITE DE PAGO  
		'PAGO DE NOMINA' + SPACE(40 - LEN('PAGO DE NOMINA')) -- CONCEPTO PAGO      
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ganadero_ni TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_granahorrar_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_granahorrar_ni
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_granahorrar_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por granahorrar para NI                  ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_liq_procesar
  SELECT @cch_compania = MAX(compania)
  FROM ri_liq_procesar
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  -- Trayendo al informacion del banco      
	SELECT 
	@vch_simb_mon = b.simbolo_moneda, 
	@vti_tipo_cta = b.tipo_cta, 
	@vvc_cuenta_bco = b.cuenta, 
	@vvc_oficina_cta = b.oficina_cta, 
	@vvc_registro_fiscal = b.registro_fiscal
	FROM fdt_bancos a, fdt_bancos_cias_datos b
	WHERE a.banco = b.banco AND
	b.compania = @cch_compania AND
	a.banco = @pti_banco

	SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
	SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  -- CONSTRUCCION DEL REGISTRO TIPO I 
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    'N0000000000' +
    CONVERT(CHAR(8), @pdt_fecha, 112) +
    '01' +
    ISNULL(@vvc_cuenta_bco,'0') +
		LTRIM(RTRIM(nombre_cia)) + SPACE(30 - LEN(LTRIM(RTRIM(nombre_cia)))) +
    '00' +
		REPLICATE('0', 9 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) + REPLACE(ISNULL(registro_fiscal,'0'),'-','') +
    REPLICATE(' ', 11) +
    '000001'    
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_liq_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)
      
  -- CONSTRUCCION DE LOS REGISTROS TIPO II
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    'N32' +
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) + SPACE(17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) +
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(30 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) +
		REPLICATE('0', 11 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 11))) + SUBSTRING(LTRIM(t.clave_unica), 1, 11) +
		REPLICATE('0', 12 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    ' ' +
		REPLICATE('0', 6 - LEN(RTRIM(sec.secuencia))) + RTRIM(sec.secuencia)
    FROM fdt_bancos_tmp tns, trabajadores t, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  -- CONSTRUCCION DEL REGISTRO TIPO III   
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 3,
    'N9999999999' +
		REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +
		REPLICATE('0', 12 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  --Importe, parte entera
    REPLICATE(' ', 54) +
		REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab+2))) + RTRIM(@vsi_nro_trab+2)
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_granahorrar_ni TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_lloyds_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_lloyds_ni
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_lloyds_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por lloyds para NI                      ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05:DCR, Pasada a SQL de Oracle
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_liq_procesar
  SELECT @cch_compania = MAX(compania)
  FROM ri_liq_procesar
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  -- Trayendo al informacion del banco      
	SELECT 
	@vch_simb_mon = b.simbolo_moneda, 
	@vti_tipo_cta = b.tipo_cta, 
	@vvc_cuenta_bco = b.cuenta, 
	@vvc_oficina_cta = b.oficina_cta, 
	@vvc_registro_fiscal = b.registro_fiscal
	FROM fdt_bancos a, fdt_bancos_cias_datos b
	WHERE a.banco = b.banco AND
	b.compania = @cch_compania AND
	a.banco = @pti_banco

	SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
	SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 4,
    '6' +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_cuenta,'2')), 1, 1) +
    '2' +
    '2' +
    '010' +
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 25) + SPACE(25 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 25))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    '000000' +
		SUBSTRING(LTRIM(t.clave_unica), 1, 15) + SPACE(15 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 15))) +
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(22 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) +
    ' ' +
    REPLICATE('0', 11) +
		REPLICATE('0', 7 - LEN(RTRIM(sec.secuencia))) + RTRIM(sec.secuencia) +
    '02' +
		'PAGO DE NOMINA' + SPACE(72 - LEN('PAGO DE NOMINA'))
    FROM fdt_bancos_tmp tns, trabajadores t, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  --la cabeza
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 3,
    '6' +
    @vti_tipo_cta +
    '1' +
    '2' +
    '010' + 
		ISNULL(@vvc_cuenta_bco,'0') + SPACE(16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  --Importe, parte entera
    '000000' +
		REPLACE(ISNULL(registro_fiscal,'0'),'-','') + SPACE(15 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
		LTRIM(RTRIM(nombre_cia)) + SPACE(22 - LEN(LTRIM(RTRIM(nombre_cia)))) +
    ' ' +
    REPLICATE('0', 11) +
    '0000001' +
    '02' +
		'PAGO DE NOMINA' + SPACE(72 - LEN('PAGO DE NOMINA'))
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_liq_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)

  -- Construcción de registro control de lote de transferencias
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    '5' +
		LTRIM(RTRIM(nombre_cia)) + SPACE(16 - LEN(LTRIM(RTRIM(nombre_cia)))) +
		REPLICATE('0', 10 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') +
    'NOMINA    ' +
		REPLACE(ISNULL(registro_fiscal,'0'),'-','') + SPACE(10 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
    'PANOMINA  ' +
    CONVERT(CHAR(8), @pdt_fecha, 112) +
    '0000001' +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
    '00' +
    '01' +
    REPLICATE(' ', 88)    
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_liq_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)

  --Construcción de registro control de archivo
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    ' 005600104' +
		REPLACE(ISNULL(registro_fiscal,'0'),'-','') + SPACE(10 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
    CONVERT(CHAR(8), @pdt_fecha, 112) +
    '00' + --hora
    '00' + --minutos
    'A' +
		LTRIM(RTRIM(nombre_cia)) + SPACE(23 - LEN(LTRIM(RTRIM(nombre_cia)))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
    REPLICATE('0', 18) +
    REPLICATE(' ', 89)    
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_liq_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_lloyds_ni TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_santander_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_santander_ni
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_santander_ni
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por santander para NI                   ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasado a SQL de Oracle
DECLARE
@cch_compania  char(4),

@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'
    
-- Recorriendo el cursor de los registros a procesar.
	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT compania
	FROM ri_liq_procesar
	WHERE id_rep = @psi_id_rep
	AND usuariow = @pvc_usuario
	
	OPEN c_reg_procesa
	FETCH c_reg_procesa INTO @cch_compania
	
	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

      INSERT INTO fdt_bancos_tmp (id_rep, usuariow, compania, numero_liquidacion, trabajador, importe,cuenta_dep, 
      simbolo_mon, tipo, tipo_cuenta, tipo_doc)      
      SELECT @psi_id_rep, @pvc_usuario, ld.compania, ld.numero_liquidacion,
      ld.trabajador, ld.importe, '0', @vch_simb_mon, 1, '0', '0'
      FROM liquidaciones_det ld, ri_liq_procesar lp
      WHERE ld.compania = lp.compania
      AND ld.tipo_nomina = lp.tipo_nomina
      AND ld.numero_liquidacion = lp.numero_liquidacion
      AND ld.trabajador = lp.trabajador
      AND ld.compania = @cch_compania
      AND ld.concepto IN (@vnu_concepto1, @vnu_concepto2, @vnu_concepto3, @vnu_concepto4, @vnu_concepto5)
      AND ld.importe > 0
      AND ld.sit_transaccion = 2
      AND lp.id_rep = @psi_id_rep
      AND lp.usuariow = @pvc_usuario

      --actualizamos los que tienen cuenta de deposito
--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario;         
      
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania          
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario        

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania)
				FROM fdt_bancos_tmp c
				WHERE compania = @cch_compania
				AND id_rep = @psi_id_rep
				AND usuariow = @pvc_usuario
				AND c.ins_dep = '0'       
            
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
        BEGIN   
            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania
            AND id_rep = @psi_id_rep
            AND usuariow = @pvc_usuario
            AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                            WHERE a.institucion_deposito = b.ins_dep
                             AND a.compania = fdt_bancos_tmp.compania
                             AND a.trabajador = fdt_bancos_tmp.trabajador
                             AND b.banco = @pti_banco
                             AND fdt_bancos_tmp.compania = @cch_compania)
        END

	      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
				UPDATE fdt_bancos_tmp
				SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_id
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario
	
	      UPDATE fdt_bancos_tmp
	      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
				FROM fdt_bancos_tmp c, rel_trab_agr a
				WHERE a.compania = c.compania
	      AND a.trabajador = c.trabajador
	      AND a.agrupacion = @vch_agr_cta
				AND c.compania = @cch_compania 
				AND c.id_rep = @psi_id_rep
				AND c.usuariow = @pvc_usuario

   FETCH c_reg_procesa INTO @cch_compania
            
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
  INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
  tipo_cuenta, tipo_doc)
  SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
  tn.tipo_cuenta, tn.tipo_doc
  FROM fdt_bancos_tmp tn
  WHERE tn.id_rep = @psi_id_rep
  AND tn.usuariow = @pvc_usuario
  AND tn.tipo = 1
  GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_liq_procesar
  SELECT @cch_compania = MAX(compania)
  FROM ri_liq_procesar
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario

  -- Trayendo al informacion del banco      
	SELECT 
	@vch_simb_mon = b.simbolo_moneda, 
	@vti_tipo_cta = b.tipo_cta, 
	@vvc_cuenta_bco = b.cuenta, 
	@vvc_oficina_cta = b.oficina_cta, 
	@vvc_registro_fiscal = b.registro_fiscal
	FROM fdt_bancos a, fdt_bancos_cias_datos b
	WHERE a.banco = b.banco AND
	b.compania = @cch_compania AND
	a.banco = @pti_banco

	SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
	SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
		SUBSTRING(LTRIM(t.clave_unica), 1, 15) + --Identificacion
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(22 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) + -- NOMBRE BENEFICIARIO  
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) + SPACE(17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + -- cuenta
		REPLICATE('0', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --valor
		'PAGO DE NOMINA' + SPACE(80 - LEN('PAGO DE NOMINA')) +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'01')), 1, 2) + --Codigo de identificacion del destinatario
		SUBSTRING(LTRIM(ISNULL(tns.tipo_cuenta,'1')), 1, 1) + -- Tipo de Cuenta  1. Ahorros, 2 Corriente   
		REPLICATE('0', 4 -LEN(SUBSTRING(LTRIM(tns.ins_dep),1, 4))) + SUBSTRING(LTRIM(tns.ins_dep),1, 4) + --codigo del banco
    '0001' +
    '1'    
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
      
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2
  
  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_santander_ni TO PUBLIC
GO

PRINT 'Archivos de Bancos Colombianos... OK'
GO

IF OBJECT_ID('dbo.fco_ala_datos_adi') IS NOT NULL
    DROP TABLE dbo.fco_ala_datos_adi
GO
CREATE TABLE dbo.fco_ala_datos_adi
( 
    tabla varchar(30) NOT NULL,
    sgss tinyint NOT NULL,
    cod_adm varchar(10) NOT NULL,
    cod_suc varchar(10) NULL,
    item tinyint NOT NULL,
    referencia varchar(20) NULL,
    valor_1 decimal(12,2) NULL,
    valor_2 decimal(12,2) NULL,
    valor_3 decimal(12,2) NULL
)
GO
GRANT ALL ON fco_ala_datos_adi TO PUBLIC
GO
IF OBJECT_ID('dbo.fco_rel_sgss_da') IS NULL
CREATE TABLE dbo.fco_rel_sgss_da
(
   sgss	tinyint NOT NULL,
   ala_datos_adi varchar(20) NULL,
   secuencia  tinyint NOT NULL,
   CONSTRAINT pk_fco_rel_sgss_da PRIMARY KEY (sgss, secuencia)
)
GO
GRANT ALL ON fco_rel_sgss_da TO PUBLIC
GO
if (select count(*) from fco_rel_sgss_da) = 0 
    if object_id('dbo.mf_rel_sgss_da') is null
        print '¡¡¡¡¡¡Atención: No se pudo llenar la tabla fco_rel_sgss_da!!!!!!!'
    else
        insert into fco_rel_sgss_da select * from mf_rel_sgss_da
go
IF OBJECT_ID('dbo.fco_vw_iss_arp') IS NOT NULL
    DROP TABLE dbo.fco_vw_iss_arp
GO
CREATE TABLE dbo.fco_vw_iss_arp
(
    clave    smallint,
    sucursal char(10),
    valor    decimal(9,0)
)
GO
GRANT ALL ON fco_vw_iss_arp TO PUBLIC
GO

IF OBJECT_ID('dbo.FCO_ISS') IS NULL
    If Object_id('dbo.MF_ISS') IS NULL
        PRINT '¡¡¡¡¡Atención: No se pudo crear la tabla FCO_ISS porque no existe la versión MF respectiva!!!!!!'
    ELSE
        SELECT TOP 0 * INTO dbo.FCO_ISS FROM MF_ISS
GO
IF OBJECT_ID('dbo.FCO_VW_ISS') IS NULL
    If Object_id('dbo.VW_ISS') IS NULL
        PRINT '¡¡¡¡¡Atención: No se pudo crear la tabla FCO_VW_ISS porque no existe la versión MF respectiva!!!!!!'
    ELSE
        SELECT TOP 0 * INTO dbo.FCO_VW_ISS FROM VW_ISS
GO
IF OBJECT_ID('dbo.FCO_EPS') IS NULL
    If Object_id('dbo.MF_EPS') IS NULL
        PRINT '¡¡¡¡¡Atención: No se pudo crear la tabla FCO_EPS porque no existe la versión MF respectiva!!!!!!'
    ELSE
        SELECT TOP 0 * INTO dbo.FCO_EPS FROM MF_EPS
GO
IF OBJECT_ID('dbo.FCO_FPO') IS NULL
    If Object_id('dbo.MF_FPO') IS NULL
        PRINT '¡¡¡¡¡Atención: No se pudo crear la tabla FCO_FPO porque no existe la versión MF respectiva!!!!!!'
    ELSE
        SELECT TOP 0 * INTO dbo.FCO_FPO FROM MF_FPO
GO
IF OBJECT_ID('dbo.FCO_ARP') IS NULL
    If Object_id('dbo.MF_ARP') IS NULL
        PRINT '¡¡¡¡¡Atención: No se pudo crear la tabla FCO_ARP porque no existe la versión MF respectiva!!!!!!'
    ELSE
        SELECT TOP 0 * INTO dbo.FCO_ARP FROM MF_ARP
GO
IF OBJECT_ID('dbo.FCO_EPS_MM') IS NULL
    If Object_id('dbo.mm_eps') IS NULL
        PRINT '¡¡¡¡¡Atención: No se pudo crear la tabla FCO_EPS_MM porque no existe la versión MF respectiva!!!!!!'
    ELSE
        SELECT TOP 0 * INTO dbo.FCO_EPS_MM FROM mm_eps
GO
IF OBJECT_ID('dbo.FCO_FPO_MM') IS NULL
    If Object_id('dbo.mm_fpo') IS NULL
        PRINT '¡¡¡¡¡Atención: No se pudo crear la tabla FCO_FPO_MM porque no existe la versión MF respectiva!!!!!!'
    ELSE
        SELECT TOP 0 * INTO dbo.FCO_FPO_MM FROM mm_fpo
GO
IF OBJECT_ID('dbo.FCO_ARP_MM') IS NULL
    If Object_id('dbo.mm_arp') IS NULL
        PRINT '¡¡¡¡¡Atención: No se pudo crear la tabla FCO_ARP_MM porque no existe la versión MF respectiva!!!!!!'
    ELSE
        SELECT TOP 0 * INTO dbo.FCO_ARP_MM FROM mm_arp
GO
IF OBJECT_ID('dbo.FCO_ISS_MM') IS NULL
    If Object_id('dbo.mm_iss') IS NULL
        PRINT '¡¡¡¡¡Atención: No se pudo crear la tabla FCO_ISS_MM porque no existe la versión MF respectiva!!!!!!'
    ELSE
        SELECT TOP 0 * INTO dbo.FCO_ISS_MM FROM mm_iss
GO

PRINT 'Tablas de Autoliquidación... OK'
GO

IF OBJECT_ID('dbo.vw_fco_ala_datos_adi') IS NOT NULL
    DROP VIEW dbo.vw_fco_ala_datos_adi
GO
CREATE VIEW dbo.vw_fco_ala_datos_adi
(sgss, tabla, cod_adm, cod_suc, item, signo, causa, referencia, valor_1, valor_2, valor_3, secuencia)
AS
SELECT C.sgss, '0', '0', '0', B.item, A.descripcion, B.descripcion, '', 0, 0, 0, C.secuencia
FROM criterios_valores_col A, criterios_valores_col B, fco_rel_sgss_da C
WHERE A.campo = B.campo_rel And A.item = B.valor 
  And A.campo='ala_signo' And B.campo='ala_datos_adi' 
  And C.ala_datos_adi = B.item
UNION
SELECT C.sgss, C.tabla, C.cod_adm, C.cod_suc, C.item, A.descripcion, B.descripcion, IsNull(C.referencia, ''), IsNull(C.valor_1,0), IsNull(C.valor_2,0), IsNull(C.valor_3,0), 0
FROM criterios_valores_col A, criterios_valores_col B, fco_ala_datos_adi C
WHERE A.campo = B.campo_rel And A.item = B.valor And 
A.campo='ala_signo' And B.campo='ala_datos_adi' And 
C.item = B.item
GO
GRANT SELECT ON vw_fco_ala_datos_adi TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_hist_traslados_ctr') IS NOT NULL
    DROP VIEW dbo.vw_fco_hist_traslados_ctr
GO
CREATE VIEW dbo.vw_fco_hist_traslados_ctr
AS
SELECT compania, trabajador, dato, fecha_alta
FROM hist_agrupaciones h
WHERE agrupacion = 
    ISNULL((SELECT dato FROM vw_fdt_parametros x
     WHERE pais = 'COL' AND x.compania = h.compania
       AND x.parametro = 'autoliq' AND x.secuencia = 24), 'CENTROS_TR')
GO
GRANT ALL ON vw_fco_hist_traslados_ctr TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_hist_traslados_eps') IS NOT NULL
    DROP VIEW dbo.vw_fco_hist_traslados_eps
GO
CREATE VIEW dbo.vw_fco_hist_traslados_eps
AS
SELECT compania, trabajador, dato, fecha_alta
FROM hist_agrupaciones h
WHERE agrupacion = 
    ISNULL((SELECT dato FROM vw_fdt_parametros x
     WHERE pais = 'COL' AND x.compania = h.compania
       AND x.parametro = 'autoliq' AND x.secuencia = 21), 'EPS')
GO
GRANT ALL ON vw_fco_hist_traslados_eps TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_hist_traslados_fpo') IS NOT NULL
    DROP VIEW dbo.vw_fco_hist_traslados_fpo
GO
CREATE VIEW dbo.vw_fco_hist_traslados_fpo
AS
SELECT compania, trabajador, dato, fecha_alta
FROM hist_agrupaciones h
WHERE agrupacion = 
    ISNULL((SELECT dato FROM vw_fdt_parametros x
     WHERE pais = 'COL' AND x.compania = h.compania
       AND x.parametro = 'autoliq' AND x.secuencia = 22), 'FPO')
GO
GRANT ALL ON vw_fco_hist_traslados_fpo TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_iss_trabajador') IS NOT NULL
    DROP VIEW dbo.vw_fco_iss_trabajador
GO
CREATE VIEW dbo.vw_fco_iss_trabajador
AS
SELECT
    tg.compania, tg.trabajador,
    es_eps = 
    CASE WHEN eps.dato = 
    IsNull((SELECT dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = tg.compania AND x.parametro = 'otros' AND x.secuencia = 11), 'ISS') THEN 1 ELSE 0 END,
    es_afp =
    CASE WHEN afp.dato = 
    IsNull((SELECT dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = tg.compania AND x.parametro = 'otros' AND x.secuencia = 10), 'ISS') THEN 1 ELSE 0 END
FROM trabajadores_grales tg
INNER JOIN vw_fco_eps_trabajador eps ON eps.compania = tg.compania AND eps.trabajador = tg.trabajador
INNER JOIN vw_fco_fpo_trabajador afp ON afp.compania = tg.compania AND afp.trabajador = tg.trabajador
WHERE (eps.dato = 
        IsNull((SELECT dato FROM vw_fdt_parametros x
         WHERE x.pais = 'COL' AND x.compania = tg.compania AND x.parametro = 'otros' AND x.secuencia = 11), 'ISS')
      )
   OR (afp.dato = 
        IsNull((SELECT dato FROM vw_fdt_parametros x
         WHERE x.pais = 'COL' AND x.compania = tg.compania AND x.parametro = 'otros' AND x.secuencia = 10), 'ISS')
      )
GO
GRANT SELECT ON vw_fco_iss_trabajador TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_tid_trabajador') IS NOT NULL
    DROP VIEW dbo.vw_fco_tid_trabajador
GO
CREATE VIEW dbo.vw_fco_tid_trabajador
AS
/* por ahora queda con la definición que sirve para Grasco */
SELECT tg.compania, tg.trabajador, 
    tipo_id = CASE IsNull(rta.dato, 'CC') WHEN 'CC' THEN 'C' WHEN 'CE' THEN 'E' ELSE 'T' END
FROM trabajadores_grales tg
LEFT JOIN rel_trab_agr rta ON tg.compania = rta.compania AND tg.trabajador = rta.trabajador 
 AND rta.agrupacion = 
 ISNULL((SELECT x.dato FROM vw_fdt_parametros x 
         WHERE x.pais = 'COL' AND x.compania = tg.compania AND x.parametro = 'autoliq' AND x.secuencia = 29), 'TIPO_DOCU')
GO
GRANT SELECT ON dbo.vw_fco_tid_trabajador TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_fco_sueldos') IS NOT NULL
    DROP VIEW dbo.vw_fco_sueldos
GO
CREATE VIEW dbo.vw_fco_sueldos
AS  
SELECT compania, trabajador, fecha, salario  
FROM sueldos  
GO
GRANT SELECT ON dbo.vw_fco_sueldos TO PUBLIC
GO

PRINT 'Vistas de Autoliquidación... OK'
GO

IF OBJECT_ID('dbo.fn_fco_sueldo') IS NOT NULL
    DROP FUNCTION dbo.fn_fco_sueldo
GO
CREATE FUNCTION dbo.fn_fco_sueldo
(
    @pch_compania char(4),
    @pch_trabajador char(10),
    @psi_anio smallint,
    @pti_mes tinyint
)
RETURNS decimal(9,0)
AS
BEGIN
    DECLARE 
        @vdc_sueldo decimal(14,2),
        @vdt_ini_mes smalldatetime,
        @vdt_fin_mes smalldatetime,
        @vdc_minimo decimal(14,2)

    SET @vdt_ini_mes = Convert(smalldatetime, RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2) + '01')
    SET @vdt_fin_mes = DateAdd(d, -1, DateAdd(m, 1, @vdt_ini_mes))    

    SELECT TOP 1 @vdc_sueldo = salario
    FROM historico_sueldos
    WHERE compania = @pch_compania
      AND trabajador = @pch_trabajador
      AND fecha <= @vdt_fin_mes
    ORDER BY fecha DESC

    SELECT @vdc_minimo = real FROM parametros_rh WHERE compania = @pch_compania AND parametro_rh = 'Sal_Minimo'

    -- Esto lo había hecho Laura para Grasco y lo dejo porque debe servir de algo:/*LAG 20050202 */  
    IF @vdc_sueldo = @vdc_minimo
        SET @vdc_sueldo = Round((@vdc_sueldo + 1)/1000,0) * 1000 
    ELSE
        SET @vdc_sueldo = Round((@vdc_sueldo - 1)/1000,0) * 1000 
    
    RETURN ISNULL(@vdc_sueldo, 0)
END
GO
GRANT EXECUTE ON fn_fco_sueldo TO PUBLIC
GO

IF OBJECT_ID('dbo.fn_fco_parametro_agr') IS NOT NULL
    DROP FUNCTION dbo.fn_fco_parametro_agr
GO
CREATE FUNCTION dbo.fn_fco_parametro_agr
(
    @pch_compania char(4),
    @pvc_parametro varchar(10),
    @pti_secuencia tinyint
)
/*
    Autor JCL. Desarrollo FCO. Marzo 21 de 2006
    Esta función retorna unicamente agrupaciones de conceptos
*/
RETURNS char(3)
AS
BEGIN
    DECLARE @vch_agr char(3)

    SELECT @vch_agr = dato
    FROM vw_fdt_parametros
    WHERE pais = 'COL' 
      AND compania = @pch_compania 
      AND parametro = @pvc_parametro
      AND secuencia = @pti_secuencia

    RETURN @vch_agr

END
GO
GRANT EXECUTE ON dbo.fn_fco_parametro_agr TO PUBLIC
GO
IF OBJECT_ID('dbo.fn_fco_nro_trab_fpo') IS NOT NULL
    DROP FUNCTION dbo.fn_fco_nro_trab_fpo
GO
CREATE FUNCTION dbo.fn_fco_nro_trab_fpo
(  
    @pch_compania char(4),  
    @psi_anio smallint,  
    @pti_mes tinyint,  
    @pch_sucursal char(10)  
)  
RETURNS decimal(5,0)  
AS  
BEGIN  
DECLARE   
    @vdc_total decimal(5,0),  
    @vdt_fec_ini smalldatetime,  
    @vdt_fec_fin smalldatetime  
      
    SET @vdt_fec_ini = Convert(smalldatetime, RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2) + '01')
    SET @vdt_fec_fin = DateAdd(d, -1, DateAdd(m, 1, @vdt_fec_ini))

    SELECT  
        @vdc_total = count(*)   
    FROM  
        trabajadores_grales   
    WHERE  
        compania = @pch_compania And  
        clase_nomina <> 'NP' And  
        fecha_ingreso <= @vdt_fec_fin And  
        (fecha_baja is null or fecha_baja >= @vdt_fec_ini)  
       
  /*  SELECT  
        @vdc_total  = @vdc_total  + count(*)   
    FROM  
        trabajadores_grales  
    WHERE  
        compania = @pch_compania And  
        clase_nomina = 'NP' And  
        sit_trabajador = 1*/  
  
    RETURN @vdc_total     
END  
GO
GRANT EXECUTE ON dbo.fn_fco_nro_trab_fpo TO PUBLIC
GO
IF OBJECT_ID('dbo.fn_fco_nro_trab_arp') IS NOT NULL
    DROP FUNCTION dbo.fn_fco_nro_trab_arp 
GO
CREATE FUNCTION dbo.fn_fco_nro_trab_arp
(    
    @pch_compania char(4),    
    @psi_anio smallint,    
    @pti_mes tinyint,    
    @pch_sucursal char(10)    
)    
RETURNS decimal(5,0)    
AS    
BEGIN    
DECLARE     
    @vdc_total decimal(5,0),    
    @vdt_fec_ini smalldatetime,    
    @vdt_fec_fin smalldatetime,    
    @vti_por_suc tinyint    
        
    IF IsNull(RTrim(LTrim(@pch_sucursal)), '') = ''     
        SET @vti_por_suc = 0    
    ELSE    
        SET @vti_por_suc = 1    
    
    SET @vdt_fec_ini = Convert(smalldatetime, RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2) + '01')  
    SET @vdt_fec_fin = DateAdd(d, -1, DateAdd(m, 1, @vdt_fec_ini))  
  
    
    SELECT    
        @vdc_total = count(*)     
    FROM    
        trabajadores_grales     
    WHERE    
        compania = @pch_compania And    
        clase_nomina <> 'NP' And    
        fecha_ingreso <= @vdt_fec_fin And    
        (fecha_baja is null or fecha_baja >= @vdt_fec_ini)     
    
    RETURN @vdc_total       
END    

GO
GRANT EXECUTE ON dbo.fn_fco_nro_trab_arp TO PUBLIC
GO
IF OBJECT_ID('dbo.fn_fco_nro_trab_eps') IS NOT NULL
    DROP FUNCTION dbo.fn_fco_nro_trab_eps
GO
CREATE FUNCTION dbo.fn_fco_nro_trab_eps
(  
    @pch_compania char(4),  
    @psi_anio smallint,  
    @pti_mes tinyint,  
    @pch_sucursal char(10)  
)  
RETURNS decimal(5,0)  
AS  
BEGIN  
DECLARE   
    @vdc_total decimal(5,0),  
    @vdt_fec_ini smalldatetime,  
    @vdt_fec_fin smalldatetime,  
    @vti_por_suc tinyint  
      
    IF IsNull(RTrim(LTrim(@pch_sucursal)), '') = ''   
        SET @vti_por_suc = 0  
    ELSE  
        SET @vti_por_suc = 1  
  
    SET @vdt_fec_ini = Convert(smalldatetime, RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2) + '01')
    SET @vdt_fec_fin = DateAdd(d, -1, DateAdd(m, 1, @vdt_fec_ini))

  
    SELECT  
        @vdc_total = count(*)   
    FROM  
        trabajadores_grales   
    WHERE  
        compania = @pch_compania And  
        clase_nomina <> 'NP' And  
        fecha_ingreso <= @vdt_fec_fin And  
        (fecha_baja is null or fecha_baja >= @vdt_fec_ini)   
/*And  
        ((@vti_por_suc = 0) OR  
         (@vti_por_suc = 1 AND trabajador in  
            (SELECT a.trabajador FROM rel_trab_agr a, parametros_mf b  
             WHERE b.compania = @pch_compania  
               AND b.parametro = 'autoliq'  
               AND b.secuencia = 23)))       
    SELECT  
        @vdc_total  = @vdc_total  + count(*)   
    FROM  
        trabajadores_grales  
    WHERE  
        compania = @pch_compania And  
        clase_nomina = 'NP' And  
        sit_trabajador = 1*/  
  
    RETURN @vdc_total     
END  
GO
GRANT EXECUTE ON dbo.fn_fco_nro_trab_eps TO PUBLIC
GO

PRINT 'Funciones de Autoliquidación... OK'
GO

IF OBJECT_ID('dbo.sp_fco_crea_tablas_ala') IS NOT NULL 
   DROP PROCEDURE dbo.sp_fco_crea_tablas_ala
GO
CREATE PROCEDURE dbo.sp_fco_crea_tablas_ala
(
   @pch_compania char(4),
   @psi_id_calendario smallint
)
AS
BEGIN
   DECLARE 
      @vsi_anio smallint,
      @vti_mes tinyint,
      @vbi_sociedades bit,      
      @vsy_tabla sysname,
      @vch_sociedad char(10),
      @vch_tipo_nom char(2)
      
    SELECT @vsi_anio = anio, @vti_mes = mes_acumular, @vch_tipo_nom = tipo_nomina
    FROM calendario_procesos
    WHERE id_calendario = @psi_id_calendario
    
    -- SALUD
    SET @vsy_tabla = 'FCO_EPS_' + RTRIM(@pch_compania) + '_' + RTRIM(@vsi_anio) + '_' + RTRIM(@vti_mes)
    IF OBJECT_ID(@vsy_tabla) IS NULL
    BEGIN
     DELETE FCO_EPS
     EXECUTE ('SELECT * INTO ' + @vsy_tabla + ' FROM FCO_EPS')
     EXECUTE ('GRANT ALL ON ' + @vsy_tabla + ' TO PUBLIC')
    END
    
    -- PENSION
    SET @vsy_tabla = 'FCO_FPO_' + RTRIM(@pch_compania) + '_' + RTRIM(@vsi_anio) + '_' + RTRIM(@vti_mes)
    IF OBJECT_ID(@vsy_tabla) IS NULL
    BEGIN
     DELETE FCO_FPO
     EXECUTE ('SELECT * INTO ' + @vsy_tabla + ' FROM FCO_FPO')
     EXECUTE ('GRANT ALL ON ' + @vsy_tabla + ' TO PUBLIC')
    END
    
    -- RIESGOS
    SET @vsy_tabla = 'FCO_ARP_' + RTRIM(@pch_compania) + '_' + RTRIM(@vsi_anio) + '_' + RTRIM(@vti_mes)
    IF OBJECT_ID(@vsy_tabla) IS NULL
    BEGIN
     DELETE FCO_ARP
     EXECUTE ('SELECT * INTO ' + @vsy_tabla + ' FROM FCO_ARP')
     EXECUTE ('GRANT ALL ON ' + @vsy_tabla + ' TO PUBLIC')
    END
    
    -- ISS CONSOLIDADO
    IF EXISTS (SELECT 1 FROM reportes_ala WHERE maneja_ISS = 1 AND ISS_Integrado = 0)
    BEGIN
     SET @vsy_tabla = 'FCO_VW_ISS_' + RTRIM(@pch_compania) + '_' + RTRIM(@vsi_anio) + '_' + RTRIM(@vti_mes)
     IF OBJECT_ID(@vsy_tabla) IS NULL
     BEGIN
        DELETE FCO_VW_ISS
        EXECUTE ('SELECT * INTO ' + @vsy_tabla + ' FROM FCO_VW_ISS')
        EXECUTE ('GRANT ALL ON ' + @vsy_tabla + ' TO PUBLIC')
     END         
    END
    
    -- ISS INTEGRADO
    IF EXISTS (SELECT 1 FROM reportes_ala WHERE maneja_ISS = 1 AND ISS_Integrado = 1)
    BEGIN
     SET @vsy_tabla = 'FCO_ISS_' + RTRIM(@pch_compania) + '_' + RTRIM(@vsi_anio) + '_' + RTRIM(@vti_mes)
     IF OBJECT_ID(@vsy_tabla) IS NULL
     BEGIN
        DELETE FCO_ISS
        EXECUTE ('SELECT * INTO ' + @vsy_tabla + ' FROM FCO_ISS')
        EXECUTE ('GRANT ALL ON ' + @vsy_tabla + ' TO PUBLIC')
     END                  
    END      

END
GO
GRANT EXECUTE ON dbo.sp_fco_crea_tablas_ala TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_cambio_ala_datos_adi') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_cambio_ala_datos_adi
GO
CREATE PROCEDURE dbo.sp_fco_cambio_ala_datos_adi
(  
    @psy_tabla  sysname,  
    @pti_sgss   tinyint,  
    @pvc_cod_adm  varchar(10),  
    @pvc_cod_suc  varchar(10),  
    @pti_item  tinyint,  
    @pvc_referencia varchar(20),  
    @pdc_valor_1 decimal(12,2),  
    @pdc_valor_2  decimal(12,2),  
    @pdc_valor_3 decimal(12,2)  
)  
AS  
BEGIN  
   DECLARE @w_item tinyint  
   SET @w_item = IsNull(@pti_item, 0)  
  
   IF EXISTS(
        SELECT 1 FROM fco_ala_datos_adi  
        WHERE tabla = @psy_tabla 
          AND sgss = @pti_sgss 
          AND cod_adm = @pvc_cod_adm
          AND cod_suc = @pvc_cod_suc 
          AND item = @w_item)  
  
        UPDATE fco_ala_datos_adi  
        SET referencia = @pvc_referencia, 
            valor_1 = @pdc_valor_1,   
            valor_2 = @pdc_valor_2, 
            valor_3 = @pdc_valor_3  
        WHERE tabla = @psy_tabla 
          AND sgss = @pti_sgss 
          AND cod_adm = @pvc_cod_adm 
          AND cod_suc = @pvc_cod_suc 
          AND item = @w_item   
   ELSE  
     INSERT INTO fco_ala_datos_adi 
     VALUES 
    (@psy_tabla, @pti_sgss, @pvc_cod_adm, @pvc_cod_suc, @w_item, 
     @pvc_referencia, @pdc_valor_1, @pdc_valor_2, @pdc_valor_3)  
END  
GO
GRANT EXECUTE ON sp_fco_cambio_ala_datos_adi TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_crea_autolx_mm') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_crea_autolx_mm
GO
CREATE PROCEDURE dbo.sp_fco_crea_autolx_mm
(
   @pvc_compania varchar(4),
   @pvc_anio varchar(4),
   @pvc_mes varchar(2),
   @pvc_cod_suc varchar(10)
)
/**********************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano Version FCO - ADAM V.3   ***/
/*** Descripcion: Crea archivo plano para el ISS Formato SIGA       ***/
/*** Autor:       Juan Carlos Leguizamon                            ***/
/*** Fecha MF:    Julio 10 de 2001                                  ***/
/*** Fecha FCO:   Abril 01 de 2006                                  ***/
/**********************************************************************/
AS

/* VARIABLES ESTRUCTURA MEDIO MAGNETICO */
   DECLARE 	@T3C1_34 Char(226),
		@T3C35	 char(6),
		@T3C36	 char(6),
		@T3C37	 char(6),
		@T35C18	 Numeric(14,0),
		@T35C19	 Numeric(14,0),
		@T35C20	 Numeric(14,0),
		@T35C21	 Numeric(14,0)

/* VARIABLES AUXILIARES */
   /* Para armar sentencias dinamicamente */
   DECLARE	@sql 	VarChar(3000),
		@sql2	VarChar(3000)

   /* Para controlar puntos y rayas en el registro_fiscal */
   DECLARE 	@nit	Char(9),
   		@dv     Char(1)

   /* Para hallar el Ciclo de liquidacion */
   DECLARE	@periodo Char(6)

   /* Para hallar la forma de presentación */
   DECLARE	@forma_pres Char(1)

   /* Para recuperar datos del ISS */
   DECLARE	@codigo_ISS Char(3)

   /* Para manejar la sucursal */
   DECLARE 	@w_cod_SUC  varchar(3),
		@w_SUC_001  Char(3)

   /* Tabla donde estan los datos */
   DECLARE 	@tabla  varchar(30)
BEGIN

   /*** Establecer el Nombre de la Tabla ***/
  SET @tabla = 'FCO_VW_ISS_' + RTrim(@pvc_compania) + '_' + RTrim(@pvc_anio) + '_' + RTrim(@pvc_mes)

--   SET @codigo_ISS="ISS"
   DELETE fco_iss_mm

   /* Control del codigo de la sucursal */
   IF @pvc_cod_suc is null
      SET @w_cod_SUC = "''"
   ELSE
      SET @w_cod_SUC = SubString(LTrim(RTrim(@pvc_cod_suc)),1,3)

   SELECT @nit=registro_fiscal
   FROM vw_fco_companias
   WHERE compania = @pvc_compania 


   IF CharIndex('.', @nit)>0
   BEGIN
      SELECT @nit=SubString(registro_fiscal,1,3) + SubString(registro_fiscal,5,3) + SubString(registro_fiscal,9,3),
	     @dv =SubString(registro_fiscal, Len(RTrim(registro_fiscal)),1)
      FROM vw_fco_companias WHERE compania=@pvc_compania 
   END
   ELSE
   BEGIN
      SELECT @nit=SubString(registro_fiscal,1,9),
	     @dv =SubString(registro_fiscal, Len(RTrim(registro_fiscal)),1)
      FROM vw_fco_companias WHERE compania=@pvc_compania 
   END
   
   /* Periodo de Cotizacion (Ciclo de Liquidacion) */
   SET @periodo=LTrim(RTrim(@pvc_anio)) + Replicate('0',2-Len(LTrim(RTrim(@pvc_mes)))) + LTrim(RTrim(@pvc_mes))

   /* Forma de Presentación de la Autoliquidación de Aportes */
   SET @forma_pres = 'C'
   IF Len(@w_cod_SUC) > 0
   BEGIN
	SET @forma_pres='S';
	SET @w_SUC_001 = @w_cod_SUC + Space(3 - Len(@w_cod_SUC))
   END
   ELSE
   BEGIN
	SELECT @forma_pres = IsNull(forma_presentacion, 'U')
	FROM   vw_fco_companias
	WHERE  compania = @pvc_compania

        SET @w_SUC_001 = '001'
   END

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO 1                   *****/
   /***********************************************************************/

    INSERT INTO fco_iss_mm VALUES (16, '0005000' +
	'1' + Replicate('0',16) +
	Replicate('0',11-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) + @dv + @w_SUC_001 +
	Replicate('0',15) + Replicate('0',173) + Space(99))

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO 2                   *****/
   /***********************************************************************/

    INSERT INTO fco_iss_mm VALUES (17, '0005000' +
	'2' + '0000' + '000001' + '000' + '000' + 
	Replicate('0',11-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) + @dv + @w_SUC_001 +
	Replicate('0',15) + Replicate('0',36) + '001' + '001' + Replicate('0',14) +
	'N' + Replicate('0',150) + Space(65) + Space(4))


   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO 3.0                 *****/
   /***********************************************************************/
    SELECT @T3C1_34 =
	'0005000' +
	'3' + '0000' + '000001' + '000' + '001' +
	Replicate('0',11-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) + @dv + @w_SUC_001 +
	@periodo + '01' + '0' + '000000' + Replicate('0', 21)  + '00' +
	'N' + 
        Replicate('0',11-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) +
        @dv + @w_SUC_001 + 
	LTrim(RTrim(SubString(nombre_cia,1,35))) + Space(35-Len(LTrim(RTrim(SubString(nombre_cia,1,35))))) + 
	@periodo + '01' +
	LTrim(RTrim(SubString(domicilio,1,45))) + Space(45-Len(LTrim(RTrim(SubString(domicilio,1,45))))) + 
	Replicate('0',3-Len(LTrim(RTrim(SubString(LTrim(cod_ciudad),1,3))))) + LTrim(RTrim(SubString(LTrim(cod_ciudad),1,3))) +
	Replicate('0',2-Len(LTrim(RTrim(SubString(LTrim(cod_dpto),1,2))))) + LTrim(RTrim(SubString(LTrim(cod_dpto),1,2))) +
	Replicate('0',7-Len(LTrim(RTrim(SubString(LTrim(telefono),1,7))))) + LTrim(RTrim(SubString(LTrim(telefono),1,7))) +
	Replicate('0',14) + '0' + '1' + 
	Replicate('0',11-Len(LTrim(RTrim(SubString(LTrim(nro_patronal),1,11))))) + LTrim(RTrim(SubString(LTrim(nro_patronal),1,11))) +
	'000000'
   FROM vw_fco_companias
   WHERE compania = @pvc_compania 
	
   /* Numero de Afiliados al ISS en Pensiones */
   SET @sql=
   " SELECT Total = Count(*)" +
   " INTO ##tmp_Afiliados" +
   " FROM " +
   " (SELECT Distinct COD_TRAB FROM " + @tabla +
   " WHERE COD_FPO='ISS'" +
   Case Len(@w_cod_SUC) WHEN 0 THEN "" ELSE " AND COD_SUC='" + @w_cod_SUC + "'" END +
   " GROUP BY COD_TRAB" +
   " HAVING SUM(C14A)>0) Afiliados"

   EXECUTE (@sql)

   SELECT @T3C35 = Replicate('0',6-Len(RTrim(LTrim(Convert(Char,Total))))) + RTrim(LTrim(Convert(Char,Total))) From ##tmp_Afiliados
   DROP TABLE ##tmp_Afiliados

   /* Numero de Afiliados al ISS en Salud */
   SET @sql=
   " SELECT Total = Count(*)" +
   " INTO ##tmp_Afiliados" +
   " FROM " +
   " (SELECT Distinct COD_TRAB FROM " + @tabla +
   " WHERE COD_EPS='ISS'" +
   Case Len(@w_cod_SUC) WHEN 0 THEN "" ELSE " AND COD_SUC='" + @w_cod_SUC + "'" END +
   " GROUP BY COD_TRAB" +
   " HAVING SUM(C14C)>0) Afiliados"

   EXECUTE (@sql)

   SELECT @T3C36 = Replicate('0',6-Len(RTrim(LTrim(Convert(Char,Total))))) + RTrim(LTrim(Convert(Char,Total))) From ##tmp_Afiliados
   DROP TABLE ##tmp_Afiliados

   /* Numero de Renglones diligenciados */
   SET @sql=
   " SELECT Total = Count(*)" +
   " INTO ##tmp_Afiliados" +
   " FROM " +
   " (SELECT Distinct COD_TRAB FROM " + @tabla +
   Case Len(@w_cod_SUC) WHEN 0 THEN "" ELSE " WHERE COD_SUC='" + @w_cod_SUC + "'" END +
   " GROUP BY COD_TRAB" +
   " HAVING SUM(C14A+C14C)>0) Afiliados"

   EXECUTE (@sql)

   SELECT @T3C37 = Replicate('0',6-Len(RTrim(LTrim(Convert(Char,Total))))) + RTrim(LTrim(Convert(Char,Total))) From ##tmp_Afiliados
   DROP TABLE ##tmp_Afiliados


   INSERT INTO fco_iss_mm VALUES (18, @T3C1_34 + @T3C35 + @T3C36 + @T3C37 + 
	'2' + '2' + 'N' + Space(40) + Space(38) + ' ')


   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO 3.3                 *****/
   /***********************************************************************/

   SET @sql=
	"SELECT Identity(Int,1,1) AS Sec, " +
	"LTrim(RTrim(SubString(C10A,1,1))) + Space(1-Len(LTrim(RTrim(SubString(C10A,1,1))))) + " +
	"Replicate('0',11 - Len(LTrim(RTrim(Convert(Char(11),C10B))))) + LTrim(RTrim(Convert(Char(11),C10B))) +" +
	"'0'+" + 
	"RTrim(LTrim(Substring(RTrim(LTrim(SubString(C10C, 1, CharIndex('/', C10C)-1))) + ' ' + RTrim(LTrim(SubString(Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1)), 1, Case When CharIndex(' ', Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1)))>0 Then CharIndex(' ', Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1))) Else Len(Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1))) End))) + ' ' + Case When CharIndex(' ', Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1))) = 0 Then Space(15-Len('')) Else RTrim(LTrim(SubString(Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1)), CharIndex(' ', Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1))) + 1, Len(Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1))) - CharIndex(' ', Reverse(LTrim(RTrim(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1)))))))) End,1,25))) +" +
	"Space(25-Len(RTrim(Ltrim(Substring(RTrim(LTrim(SubString(C10C, 1, CharIndex('/', C10C)-1))) + ' ' + RTrim(LTrim(SubString(Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1)), 1, Case When CharIndex(' ', Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1)))>0 Then CharIndex(' ', Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1))) Else Len(Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1))) End))) + ' ' + Case When CharIndex(' ', Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1))) = 0 Then Space(15-Len('')) Else RTrim(LTrim(SubString(Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1)), CharIndex(' ', Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1))) + 1, Len(Reverse(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1))) - CharIndex(' ', Reverse(LTrim(RTrim(SubString(Reverse(C10C),1,CharIndex('/', Reverse(C10C))-1)))))))) End,1,25))))) + " +
	"Case When RTrim(LTrim(IsNull(C11A,''))) = '' Then Space(1) Else C11A End +" +
	"Case When RTrim(LTrim(IsNull(C11B,''))) = '' Then Space(1) Else C11B End +" +
	"Case When RTrim(LTrim(IsNull(C11C,''))) = '' Then Space(1) Else C11C End +" +
	"Replicate('0',2 - Len(LTrim(RTrim(Convert(Char(2),Floor(C11D)))))) + LTrim(RTrim(Convert(Char(2),Floor(C11D)))) +" +
	"Replicate('0',2 - Len(LTrim(RTrim(Convert(Char(2),Floor(C11E)))))) + LTrim(RTrim(Convert(Char(2),Floor(C11E)))) +" +	
	"Replicate('0',2 - Len(LTrim(RTrim(Convert(Char(2),Floor(C12A)))))) + LTrim(RTrim(Convert(Char(2),Floor(C12A)))) +" +
	"Replicate('0',12 - Len(LTrim(RTrim(Convert(Char(12),Floor(C13A)))))) + LTrim(RTrim(Convert(Char(12),Floor(C13A)))) +"
   SET @sql2 =
	"Replicate('0',10 - Len(LTrim(RTrim(Convert(Char(10),Floor(C14A)))))) + LTrim(RTrim(Convert(Char(10),Floor(C14A)))) +" +
	"Replicate('0',10 - Len(LTrim(RTrim(Convert(Char(10),Floor(C14B)))))) + LTrim(RTrim(Convert(Char(10),Floor(C14B)))) +" +
	"Replicate('0',10 - Len(LTrim(RTrim(Convert(Char(10),Floor(C14C)))))) + LTrim(RTrim(Convert(Char(10),Floor(C14C)))) Registros" +
	" INTO ##TMP_DETALLE_ISS" +
	" FROM " + @tabla +
	" WHERE CIA='" + @pvc_compania + "'" +
   	Case Len(@w_cod_SUC) WHEN 0 THEN "" ELSE " AND COD_SUC='" + @w_cod_SUC + "'" END +
	" AND (C13A+C14A+C14C)>0"

   EXECUTE (@sql + @sql2)

   INSERT INTO fco_iss_mm
   SELECT 19+Sec,
	'0005000' + '3' + '0000' + '000001' + '000' + '001' +
	Replicate('0',11-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) + @dv + @w_SUC_001 +
	@periodo + '01' + '3' +
	Replicate('0', 6- Len(RTrim(LTrim(Convert(Char(6),Sec))))) + RTrim(LTrim(Convert(Char(6),Sec))) + 
	Replicate('0',15) + Registros +
	Space(30) + Space(30) + Space(107) + ' '
   FROM ##TMP_DETALLE_ISS

   DROP TABLE ##TMP_DETALLE_ISS

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO 3.5                 *****/
   /***********************************************************************/
   /* Totales para los campos 18,19,20 y 21 */
   SELECT @sql = 
	" Select Coalesce(Floor(Sum(C13A)),0) As C13A, Coalesce(Floor(Sum(C14A)),0) As C14A, " +
	"  	 Coalesce(Floor(Sum(C14B)),0) As C14B, Coalesce(Floor(Sum(C14C)),0) As C14C" +
	" INTO ##TMP_TOTALES_ALA" +
	" From " + @tabla +
	" Where CIA='" + @pvc_compania + "'" +
	Case Len(@pvc_cod_suc) WHEN 0 THEN "" ELSE " AND COD_SUC='" + @pvc_cod_suc + "'" END
   EXECUTE (@sql)

   SELECT @T35C18 = C13A, @T35C19 = C14A, @T35C20 = C14B, @T35C21 = C14C
   FROM ##TMP_TOTALES_ALA

   DROP TABLE ##TMP_TOTALES_ALA

   INSERT INTO fco_iss_mm VALUES (999920, 
	'0005000' + '3' + '0000' + '000001' + '000' + '001' +
	Replicate('0',11-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) + @dv + @w_SUC_001 +
	@periodo + '01' + '5' + '000000' + Replicate('0',14) + '0' +
	Replicate('0', 12 - Len(LTrim(RTrim(Convert(Char,@T35C18))))) + LTrim(RTrim(Convert(Char,@T35C18))) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(Char,@T35C19))))) + LTrim(RTrim(Convert(Char,@T35C19))) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(Char,@T35C20))))) + LTrim(RTrim(Convert(Char,@T35C20))) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(Char,@T35C21))))) + LTrim(RTrim(Convert(Char,@T35C21))) +
	Space(21) + Space(21) +
	Replicate('0',12) + Replicate('0',10) + Replicate('0',10) + Replicate('0',10) +
	Space(131))

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO 7                   *****/
   /***********************************************************************/

   INSERT INTO fco_iss_mm VALUES (999921, 
	'0005000' + '7' + '0000' + '000001' + '000' + '000' +
	Replicate('0',11-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) + @dv + @w_SUC_001 +
	'000000' + '00' + '0' + '000000' + '000001' + @T3C37 +
	Replicate('0', 14 - Len(LTrim(RTrim(Convert(Char,@T35C18))))) + LTrim(RTrim(Convert(Char,@T35C18))) +
	Replicate('0', 14 - Len(LTrim(RTrim(Convert(Char,@T35C19))))) + LTrim(RTrim(Convert(Char,@T35C19))) +
	Replicate('0', 14 - Len(LTrim(RTrim(Convert(Char,@T35C20))))) + LTrim(RTrim(Convert(Char,@T35C20))) +
	Replicate('0', 14 - Len(LTrim(RTrim(Convert(Char,@T35C21))))) + LTrim(RTrim(Convert(Char,@T35C21))) +
	Replicate('0',14) + Replicate('0',14) + Replicate('0',14) + Replicate('0',14) + 
	Replicate('0',14) + Replicate('0',14) + Replicate('0',14) + Replicate('0',14) + 
	Replicate('0', 14 - Len(LTrim(RTrim(Convert(Char,Floor(@T35C21/12)))))) + LTrim(RTrim(Convert(Char,Floor(@T35C21/12)))) +
	Space(78))


   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO 8                   *****/
   /***********************************************************************/


   INSERT INTO fco_iss_mm VALUES (999922, 
	'0005000' + '8' + '0000' + '000000' + '000' + '000' +
	Replicate('0',11-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) + @dv + @w_SUC_001 +
	'000000' + '00' + '0' + '000000' + '000001' + @T3C37 +
	Replicate('0', 14 - Len(LTrim(RTrim(Convert(Char,@T35C18))))) + LTrim(RTrim(Convert(Char,@T35C18))) +
	Replicate('0', 14 - Len(LTrim(RTrim(Convert(Char,@T35C19))))) + LTrim(RTrim(Convert(Char,@T35C19))) +
	Replicate('0', 14 - Len(LTrim(RTrim(Convert(Char,@T35C20))))) + LTrim(RTrim(Convert(Char,@T35C20))) +
	Replicate('0', 14 - Len(LTrim(RTrim(Convert(Char,@T35C21))))) + LTrim(RTrim(Convert(Char,@T35C21))) +
	Replicate('0',14) + Replicate('0',14) + Replicate('0',14) + Replicate('0',14) + 
	Replicate('0',14) + Replicate('0',14) + Replicate('0',14) + Replicate('0',14) + 
	Replicate('0', 14 - Len(LTrim(RTrim(Convert(Char,Floor(@T35C21/12)))))) + LTrim(RTrim(Convert(Char,Floor(@T35C21/12)))) +
	Space(78))

END

GO
GRANT EXECUTE ON dbo.sp_fco_crea_autolx_mm TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_crea_iss_mm') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_crea_iss_mm
GO
CREATE PROCEDURE dbo.sp_fco_crea_iss_mm
(
   @pvc_compania	varchar(4),
   @pvc_anio	varchar(4),
   @pvc_mes	varchar(2),
   @pvc_cod_suc	varchar(10)
)

/**********************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano Version FCO - ADAM V.3   ***/
/*** Descripcion: Crea archivo plano para el ISS Formato SIGA       ***/
/*** Autor:       Juan Carlos Leguizamon                            ***/
/*** Fecha MF:    Junio 22 de 2001                                  ***/
/*** Fecha FCO:   Abril 01 de 2006                                  ***/
/**********************************************************************/
AS

/* VARIABLES ESTRUCTURA MEDIO MAGNETICO */
   DECLARE 	@CI01_06 char(58),
		@CI07_18 char(148),
		@CI19_30 char(113),
		@CI31	 char(5),
		@CI32	 char(5),
		@REN_31  char(116),
		@REN_32  char(116),
		@REN_33  char(116),
		@REN_34  char(116),
		@REN_35  char(116),
		@REN_36  char(116),
		@REN_37  char(116),
		@REN_38  char(116),
		@REN_39  char(116),
		@R31C4   numeric(10,0),
		@R31C8   numeric(10,0),
		@R31C9   numeric(10,0),
		@R31C13  numeric(10,0),
		@R35C4   numeric(10,0),
		@R35C8   numeric(10,0),
		@R35C9   numeric(10,0),
		@R31C10  numeric(10,0),
		@R31C11  numeric(10,0),
		@R31C12  numeric(10,0),
		@R35C13  numeric(10,0),
		@R36C4   numeric(10,0),
		@R36C8   numeric(10,0),
		@R36C9   numeric(10,0),
		@R36C13  numeric(10,0),
		@R37C4   numeric(10,0),
		@R37C8   numeric(10,0),
		@R37C9   numeric(10,0),
		@R37C13  numeric(10,0),
		@R38C4   numeric(10,0),
		@R38C8   numeric(10,0),
		@R38C9   numeric(10,0),
		@R38C13  numeric(10,0),
		@R39C4   numeric(10,0),
		@R39C8   numeric(10,0),
		@R39C9   numeric(10,0),
		@R39C13  numeric(10,0)

/* VARIABLES AUXILIARES */
   /* Para armar sentencias dinamicamente */
   DECLARE	@sql1 	varchar(3000),
		@sql2 	varchar(3000),
		@sql3 	varchar(3000)
   /* Para controlar puntos y rayas en el registro_fiscal */
   DECLARE 	@nit	char(9)
   /* Para hallar el periodo cotizado a salud (ste) */
   DECLARE	@per_ste char(6),
 		@pvc_mes_ste numeric(2,0)
   /* Para hallar la forma de presentación */
   DECLARE	@forma_pres char(1)
   /* Para recuperar datos del ISS */
   DECLARE	@codigo_ISS char(3)
   /* Para manejar la sucursal */
   DECLARE 	@w_cod_SUC  char(10),
		@w_control_SUC varchar(10)
   /* Tabla donde estan los datos */
   DECLARE 	@tabla  varchar(30)

   /* Variables para descontar incapacidades */
   DECLARE      @nro_aut_eg  char(10),
                @vlr_aut_eg  numeric(10,0),
                @nro_aut_lm  char(10),
                @vlr_aut_lm  numeric(10,0),
                @nro_meses   char(10),
                @vlr_mor_pe  numeric(10,0),
                @vlr_mor_fs  numeric(10,0),
                @vlr_mor_sa  numeric(10,0),
                @nro_rad_saf char(10),
                @vlr_saf_pe  numeric(10,0),
                @vlr_saf_fs  numeric(10,0),
                @vlr_saf_sa  numeric(10,0)

BEGIN

    /*** Establecer el Nombre de la Tabla ***/
    SET @tabla = 'FCO_ISS_' + RTrim(@pvc_compania) + '_' + LTrim(@pvc_anio) + '_' + LTrim(@pvc_mes)
    
   SET @codigo_ISS = 'ISS'
   DELETE fco_iss_mm

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO I                   *****/
   /***********************************************************************/


   SET @CI01_06 = '00000104INSTITUTO DE SEGUROS SOCIALES           8600138161'

   SELECT @nit=registro_fiscal
   FROM vw_fco_companias
   WHERE compania=@pvc_compania

   IF charIndex('.', @nit)>0
   BEGIN
      SELECT @nit=SubString(registro_fiscal,1,3) + SubString(registro_fiscal,5,3) + SubString(registro_fiscal,9,3)
      FROM vw_fco_companias WHERE compania=@pvc_compania 
   END
   ELSE
   BEGIN
      SELECT @nit=SubString(registro_fiscal,1,9)
      FROM vw_fco_companias WHERE compania=@pvc_compania 
   END

   /* Control del codigo de la sucursal */
   SET @w_control_SUC = IsNull(@pvc_cod_suc,'0')
   IF LEN(@w_control_SUC)=0
	SET @w_control_SUC='0'
   IF @w_control_SUC = '0'
   BEGIN
       SELECT @CI07_18 = 
	LTrim(RTrim(SubString(C.nombre_cia,1,40))) + Space(40-Len(LTrim(RTrim(SubString(C.nombre_cia,1,40))))) + 
	'N' + 
   	Replicate('0',9-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) +
   	SubString(C.registro_fiscal, Len(RTrim(C.registro_fiscal)),1) +
	SubString(C.clase_aportante,1,1) + Space(1-Len(SubString(C.clase_aportante,1,1))) + 
	LTrim(RTrim(SubString(C.domicilio,1,40))) + Space(40-Len(LTrim(RTrim(SubString(C.domicilio,1,40))))) + 
	LTrim(RTrim(SubString(M.nombre,1,15))) + Space(15-Len(LTrim(RTrim(SubString(M.nombre,1,15))))) + 
	Replicate('0',4-Len(LTrim(RTrim(SubString(LTrim(M.codigo),1,4))))) + LTrim(RTrim(SubString(LTrim(M.codigo),1,4))) +
	LTrim(RTrim(SubString(D.nombre,1,15))) + Space(15-Len(LTrim(RTrim(SubString(D.nombre,1,15))))) + 
	Replicate('0',2-Len(LTrim(RTrim(SubString(LTrim(D.codigo),1,2))))) + LTrim(RTrim(SubString(LTrim(D.codigo),1,2))) +
	LTrim(RTrim(SubString(C.telefono,1,10))) + Space(10-Len(LTrim(RTrim(SubString(C.telefono,1,10))))) + 
	LTrim(RTrim(SubString(C.fax,1,10))) + Space(10-Len(LTrim(RTrim(SubString(C.fax,1,10)))))
       FROM	
	vw_fco_companias C,
	fco_CIUDADES M,
	fco_DEPARTAMENTOS D
       WHERE 
	M.codigo   = C.cod_ciudad And
	D.codigo   = C.cod_dpto And
	M.cod_dpto = D.codigo And
	C.compania = @pvc_compania 
   END
   ELSE
   BEGIN
       SELECT @CI07_18 = 
	LTrim(RTrim(SubString(C.nombre_cia,1,40))) + Space(40-Len(LTrim(RTrim(SubString(C.nombre_cia,1,40))))) + 
	'N' + 
   	Replicate('0',9-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) +
   	SubString(C.registro_fiscal, Len(RTrim(C.registro_fiscal)),1) +
	SubString(C.clase_aportante,1,1) + Space(1-Len(SubString(C.clase_aportante,1,1))) + 
	LTrim(RTrim(SubString(RSP.direccion,1,40))) + Space(40-Len(LTrim(RTrim(SubString(RSP.direccion,1,40))))) + 
	LTrim(RTrim(SubString(M.nombre,1,15))) + Space(15-Len(LTrim(RTrim(SubString(M.nombre,1,15))))) + 
	Replicate('0',4-Len(LTrim(RTrim(SubString(LTrim(M.codigo),1,4))))) + LTrim(RTrim(SubString(LTrim(M.codigo),1,4))) +
	LTrim(RTrim(SubString(D.nombre,1,15))) + Space(15-Len(LTrim(RTrim(SubString(D.nombre,1,15))))) + 
	Replicate('0',2-Len(LTrim(RTrim(SubString(LTrim(D.codigo),1,2))))) + LTrim(RTrim(SubString(LTrim(D.codigo),1,2))) +
	LTrim(RTrim(SubString(RSP.telefono,1,10))) + Space(10-Len(LTrim(RTrim(SubString(RSP.telefono,1,10))))) + 
	LTrim(RTrim(SubString(RSP.fax,1,10))) + Space(10-Len(LTrim(RTrim(SubString(RSP.fax,1,10)))))
       FROM	
	vw_fco_companias C,
        fco_sucursales RSP, 
	fco_CIUDADES M,
	fco_DEPARTAMENTOS D
       WHERE 
         RSP.compania = C.compania And
	 M.codigo   = RSP.cod_ciudad And
	 D.codigo   = RSP.cod_dpto   And
	 M.cod_dpto = D.codigo 	   And
	 C.compania = @pvc_compania  And
         RSP.sucursal = @pvc_cod_suc
   END
   /* Calculo del periodo cotizado a Salud */
   SET @pvc_mes_ste = Convert(numeric, @pvc_mes) + 1
   SET @per_ste = @pvc_anio + Replicate('0',2-Len(Rtrim(LTrim(@pvc_mes_ste)))) + Rtrim(LTrim(@pvc_mes_ste))
   IF @pvc_mes_ste = 13 
	SET @per_ste = RTrim(LTrim(Convert(numeric,@pvc_anio) + 1)) + '01'

   /* Forma de Presentación de la Autoliquidación de Aportes */
   IF @w_control_SUC = '0'
   BEGIN
	SELECT @forma_pres = IsNull(forma_presentacion,'U')
	FROM   vw_fco_companias
	WHERE  compania = @pvc_compania

        SET @w_cod_SUC = ' '
   END
   ELSE
   BEGIN
	SET @forma_pres='S';
	SET @w_cod_SUC = @w_control_SUC
   END

    /* Numero de trabajadores */
   SET @sql1=
   " SELECT Total = Count(COD_TRAB)" +
   " INTO ##tmp_trabajadores" +
   " FROM " + @tabla +
   " WHERE COD_TRAB IN" +
   " (SELECT trabajador FROM trabajadores_grales" + 
   " WHERE compania = '" + @pvc_compania + "' AND sit_trabajador = 1" +
   Case @w_control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @w_control_SUC + "'" END + ")"

   EXECUTE (@sql1)

   SELECT @CI19_30 = LTrim(RTrim(@pvc_anio)) + Replicate('0',2-Len(LTrim(RTrim(@pvc_mes)))) + LTrim(RTrim(@pvc_mes)) +
		@per_ste + Space(40) + Space(5) + 
		' ' + Space(6) + Space(8) +
		Space(10) + Space(15) + @forma_pres + @w_cod_SUC +
		Replicate('0',5-Len(LTrim(RTrim(Convert(char, Total))))) + LTrim(RTrim(Convert(char, Total)))
   FROM ##tmp_trabajadores
   DROP TABLE ##tmp_trabajadores

   /* Numero de Afiliados al ISS en Pensiones */
   SET @sql1=
   " SELECT Total = Count(*)" +
   " INTO ##tmp_Afiliados" +
   " FROM " +
   " (SELECT Distinct COD_TRAB" +
   " FROM " + @tabla +
   " WHERE COD_FPO='" + @codigo_ISS + "'" +
   Case @w_control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @w_control_SUC + "'" END +
   " GROUP BY COD_TRAB" +
   " HAVING SUM(C32)>0) Afiliados"

   EXECUTE (@sql1)

   SELECT @CI31 = Replicate('0',5-Len(RTrim(LTrim(Convert(char,Total))))) + RTrim(LTrim(Convert(char,Total))) From ##tmp_Afiliados
   DROP TABLE ##tmp_Afiliados

   /* Numero de Afiliados al ISS en Salud */
   SET @sql1=
   " SELECT Total = Count(*)" +
   " INTO ##tmp_Afiliados" +
   " FROM " +
   " (SELECT Distinct COD_TRAB" +
   " FROM " + @tabla +
   " WHERE COD_EPS='" + @codigo_ISS + "'" +
   Case @w_control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @w_control_SUC + "'" END +
   " GROUP BY COD_TRAB" +
   " HAVING SUM(C38)>0) Afiliados"

   EXECUTE (@sql1)

   SELECT @CI32 = Replicate('0',5-Len(RTrim(LTrim(Convert(char,Total))))) + RTrim(LTrim(Convert(char,Total))) From ##tmp_Afiliados
   DROP TABLE ##tmp_Afiliados

   INSERT INTO fco_iss_mm VALUES (0, @CI01_06 + @CI07_18 + @CI19_30 + @CI31 + @CI32)

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO II                  *****/
   /***********************************************************************/

   SET @sql1 =
        " UPDATE " + @tabla +
        " SET C09 = IsNull(C09, ''), C10 = IsNull(C10, ''), C11 = IsNull(C11, '')," +
            " C12 = IsNull(C12, ''), C13 = IsNull(C13, ''), C14 = IsNull(C14, '')," +
            " C15 = IsNull(C15, ''), C16 = IsNull(C16, ''), C17 = IsNull(C17, '')," +
            " C18 = IsNull(C18, ''), C19 = IsNull(C19, ''), C20 = IsNull(C20, '')," +
            " C21 = IsNull(C21, '')"
   EXECUTE (@sql1)

   SET @sql1 =
        "SELECT Identity(Int,1,1) AS Sec, " +
	"'2' + LTrim(RTrim(SubString(C03,1,1))) + Space(1-Len(LTrim(RTrim(SubString(C03,1,1))))) + " +
	"Replicate('0',12 - Len(LTrim(RTrim(Convert(char(12),C04))))) + LTrim(RTrim(Convert(char(12),C04))) +" +
	"RTrim(LTrim(SubString(C05, 1, charIndex('/', C05)-1))) + Space(15-Len(RTrim(LTrim(SubString(C05, 1, charIndex('/', C05)-1))))) +" +
	"RTrim(LTrim(SubString(C05, charIndex('/', C05) + 1, charIndex('/', C05, charIndex('/', C05)+1) - charIndex('/', C05)-1))) + Space(15-Len(RTrim(LTrim(SubString(C05, charIndex('/', C05) + 1, charIndex('/', C05, charIndex('/', C05)+1) - charIndex('/', C05)-1))))) +" +
	"RTrim(LTrim(SubString(Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1)), 1, Case When charIndex(' ', Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1)))>0 Then charIndex(' ', Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1))) Else Len(Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1))) End))) + Space(15-Len(RTrim(LTrim(SubString(Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1)), 1, Case When charIndex(' ', Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1)))>0 Then charIndex(' ', Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1))) Else Len(Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1))) End))))) +" +
	"Case When charIndex(' ', Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1))) = 0 Then space(15-Len('')) Else RTrim(LTrim(SubString(Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1)), charIndex(' ', Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1))) + 1, Len(Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1))) - charIndex(' ', Reverse(LTrim(RTrim(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1)))))))) + Space(15-Len(RTrim(LTrim(SubString(Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1)), charIndex(' ', Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1))) + 1, Len(Reverse(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1))) - charIndex(' ', Reverse(LTrim(RTrim(SubString(Reverse(C05),1,charIndex('/', Reverse(C05))-1)))))))))) End +" +
	"Case When RTrim(LTrim(C09)) = '' Then ' ' Else C09 End +" +
	"Case When RTrim(LTrim(C10)) = '' Then ' ' Else C10 End +" +
	"Case When RTrim(LTrim(C11)) = '' Then ' ' Else C11 End +" +
	"Case When RTrim(LTrim(C12)) = '' Then ' ' Else C12 End +" +
	"Case When RTrim(LTrim(C13)) = '' Then ' ' Else C13 End +" +
	"Case When RTrim(LTrim(C14)) = '' Then ' ' Else C14 End +"
   SET @sql2 =
	"Case When RTrim(LTrim(C15)) = '' Then ' ' Else C15 End +" +
	"Case When RTrim(LTrim(C16)) = '' Then ' ' Else C16 End +" +
	"Case When RTrim(LTrim(C17)) = '' Then ' ' Else C17 End +" +
	"Case When RTrim(LTrim(C18)) = '' Then ' ' Else C18 End +" +
	"Case When RTrim(LTrim(C19)) = '' Then ' ' Else C19 End +" +
	"Case When RTrim(LTrim(C20)) = '' Then ' ' Else C20 End +" +
	"Case When RTrim(LTrim(C21)) = '' Then ' ' Else C21 End +" +
	"Replicate('0',2 - Len(LTrim(RTrim(Convert(char(2),Floor(C22)))))) + LTrim(RTrim(Convert(char(2),Floor(C22)))) +" +
	"Replicate('0',2 - Len(LTrim(RTrim(Convert(char(2),Floor(C23)))))) + LTrim(RTrim(Convert(char(2),Floor(C23)))) +" +	
	"Replicate('0',2 - Len(LTrim(RTrim(Convert(char(2),Floor(C24)))))) + LTrim(RTrim(Convert(char(2),Floor(C24)))) +" +
	"Replicate('0',2 - Len(LTrim(RTrim(Convert(char(2),Floor(C25)))))) + LTrim(RTrim(Convert(char(2),Floor(C25)))) +" +	
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C26)))))) + LTrim(RTrim(Convert(char(9),Floor(C26)))) +" +
	"Replicate('0',9) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C28)))))) + LTrim(RTrim(Convert(char(9),Floor(C28)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C29)))))) + LTrim(RTrim(Convert(char(9),Floor(C29)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C30)))))) + LTrim(RTrim(Convert(char(9),Floor(C30)))) +"
   SET @sql3=	
        "Replicate('0',6 - Len(LTrim(RTrim(Convert(char(6),C31))))) + LTrim(RTrim(Convert(char(6),C31))) +" +	
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C32)))))) + LTrim(RTrim(Convert(char(9),Floor(C32)))) +" +
	"Replicate('0',9) +" +
	"Replicate('0',9) +" +
	"Replicate('0',9) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C36)))))) + LTrim(RTrim(Convert(char(9),Floor(C36)))) +" +
	"Replicate('0',9) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C38)))))) + LTrim(RTrim(Convert(char(9),Floor(C38)))) +" +
	"RTrim(LTrim(SubString(C39,1,10))) + Space(10-Len(LTrim(RTrim(SubString(C39,1,10))))) + " +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C40)))))) + LTrim(RTrim(Convert(char(9),Floor(C40)))) +" +
	"RTrim(LTrim(SubString(C41,1,10))) + Space(10-Len(LTrim(RTrim(SubString(C41,1,10))))) + " +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C42)))))) + LTrim(RTrim(Convert(char(9),Floor(C42)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C43)))))) + LTrim(RTrim(Convert(char(9),Floor(C43)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C44)))))) + LTrim(RTrim(Convert(char(9),Floor(C44)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C45)))))) + LTrim(RTrim(Convert(char(9),Floor(C45)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C46)))))) + LTrim(RTrim(Convert(char(9),Floor(C46)))) +" +
	"RTrim(LTrim(SubString(C47,1,5))) + Space(5-Len(LTrim(RTrim(SubString(C47,1,5))))) + " +
	"RTrim(LTrim(SubString(C48,1,5))) + Space(5-Len(LTrim(RTrim(SubString(C48,1,5))))) Registro2" +
	" INTO ##TMP_DETALLE_ISS" +
	" FROM " + @tabla +
	" WHERE CIA='" + @pvc_compania + "'" +
   	Case @w_control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @w_control_SUC + "'" END +
	" AND (C32+C38)>0"

   EXECUTE (@sql1 + @sql2 + @sql3)

   INSERT INTO fco_iss_mm
   SELECT Sec, Replicate('0', 5- Len(RTrim(LTrim(Convert(char(5),Sec))))) + RTrim(LTrim(Convert(char(5),Sec))) + Registro2
   FROM ##TMP_DETALLE_ISS

   DROP TABLE ##TMP_DETALLE_ISS

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO III                 *****/
   /***********************************************************************/
   CREATE TABLE #TMP_TOTALES_INTEG
   (C4 numeric(10,0), C8 numeric(10,0), C9 numeric(10,0), C10 numeric(10,0),
    C11 numeric(10,0), C12 numeric(10,0), C13 numeric(10,0))
   SELECT @sql1 = " INSERT INTO #TMP_TOTALES_INTEG" +
 		 " Select IsNull(Floor(SUM(C32)),0), IsNull(Floor(SUM(C36)),0), " +
		 " IsNull(Floor(SUM(C38)),0), IsNull(Floor(SUM(C40)),0), " +
		 " IsNull(Floor(SUM(C42)),0), IsNull(Floor(SUM(C43)),0), " +
		 " IsNull(Floor(SUM(C46)),0) " +
		 " From " + @tabla +
		 " Where CIA='" + @pvc_compania + "'" +
	   	 Case @w_control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @w_control_SUC + "'" END
   EXECUTE (@sql1)

   SELECT @R31C4 = C4, @R31C8 = C8, @R31C9 = C9, @R31C10 = C10, @R31C11 = C11, @R31C12 = C12, @R31C13 = C13
   FROM #TMP_TOTALES_INTEG

   DROP TABLE #TMP_TOTALES_INTEG

   /*******	RENGLON 31	******/
   SET @REN_31 = '000313' + Replicate('0', 10) + 
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R31C4))))) + LTrim(RTrim(Convert(char(10), @R31C4))) +
	Replicate('0', 10) + Replicate('0', 10) + Replicate('0', 10) + 
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R31C8))))) + LTrim(RTrim(Convert(char(10), @R31C8))) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R31C9))))) + LTrim(RTrim(Convert(char(10), @R31C9))) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R31C10))))) + LTrim(RTrim(Convert(char(10), @R31C10))) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R31C11))))) + LTrim(RTrim(Convert(char(10), @R31C11))) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R31C12))))) + LTrim(RTrim(Convert(char(10), @R31C12))) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R31C13))))) + LTrim(RTrim(Convert(char(10), @R31C13)))

   INSERT INTO fco_iss_mm VALUES (999931, @REN_31)

   /*******	RENGLON 32	******/
   SET @nro_aut_eg = Space(10)
   SET @vlr_aut_eg = 0

   IF @w_control_SUC = '0' 
       SELECT @nro_aut_eg = IsNull(A.referencia, ' '), @vlr_aut_eg = IsNull(A.valor_2, 0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ISS'
         AND b.secuencia = 1
    ELSE
       SELECT @nro_aut_eg = IsNull(A.referencia, ' '), @vlr_aut_eg = IsNull(A.valor_2, 0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ISS'
         AND b.secuencia = 1
         AND cod_suc = @w_control_SUC

   SET @REN_32 = '000323' + @nro_aut_eg + Replicate('0',10) + Replicate('0',10) + 
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) + 
        Replicate('0',10 - Len(Convert(varchar, Floor(@vlr_aut_eg)))) + Convert(varchar,Floor(@vlr_aut_eg)) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) + Replicate('0',10)

   INSERT INTO fco_iss_mm VALUES (999932, @REN_32)

   /*******	RENGLON 33	******/
   SET @nro_aut_lm = Space(10)
   SET @vlr_aut_lm = 0

   IF @w_control_SUC = '0' 
       SELECT @nro_aut_lm = IsNull(A.referencia, ' '), @vlr_aut_lm = IsNull(A.valor_2, 0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ISS'
         AND b.secuencia = 2
    ELSE
       SELECT @nro_aut_lm = IsNull(A.referencia, ' '), @vlr_aut_lm = IsNull(A.valor_2, 0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ISS'
         AND b.secuencia = 2
         AND cod_suc = @w_control_SUC

   SET @REN_33 = '000333' + @nro_aut_lm + Replicate('0',10) + Replicate('0',10) + 
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) + 
        Replicate('0',10 - Len(Convert(varchar, Floor(@vlr_aut_lm)))) + Convert(varchar,Floor(@vlr_aut_lm)) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) + Replicate('0',10)

   INSERT INTO fco_iss_mm VALUES (999933, @REN_33)

   /*******	RENGLON 34	******/
   SET @REN_34 = '000343' + Replicate('0',10) + Replicate('0',10) + Replicate('0',10) + 
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) + Replicate('0',10) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) + Replicate('0',10)
   INSERT INTO fco_iss_mm VALUES (999934, @REN_34)

   /*******	RENGLON 35	******/
   SET @R35C4 = @R31C4
   SET @R35C8 = @R31C8
   SET @R35C9 = @R31C9 - @vlr_aut_eg - @vlr_aut_lm
   SET @R35C13 = @R31C13

   SET @REN_35 = '000353' + Replicate('0',10) + 
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R35C4))))) + LTrim(RTrim(Convert(char(10), @R35C4))) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R35C8))))) + LTrim(RTrim(Convert(char(10), @R35C8))) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R35C9))))) + LTrim(RTrim(Convert(char(10), @R35C9))) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R35C13))))) + LTrim(RTrim(Convert(char(10), @R35C13)))
	
   INSERT INTO fco_iss_mm VALUES (999935, @REN_35)

   /*******	RENGLON 36	******/
   SET @nro_meses = Space(10)
   SET @vlr_mor_pe = 0
   SET @vlr_mor_fs = 0
   SET @vlr_mor_sa = 0

   IF @w_control_SUC = '0' 
       SELECT @nro_meses = IsNull(A.referencia, ' '), @vlr_mor_pe = IsNull(A.valor_1, 0), @vlr_mor_sa = IsNull(A.valor_2,0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ISS'
         AND b.secuencia = 3
    ELSE
       SELECT @nro_meses = IsNull(A.referencia, ' '), @vlr_mor_pe = IsNull(A.valor_1,0), @vlr_mor_sa = IsNull(A.valor_2,0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ISS'
         AND b.secuencia = 3
         AND cod_suc = @w_control_SUC

   SET @R36C4 = @vlr_mor_pe
   SET @R36C8 = @vlr_mor_fs
   SET @R36C9 = @vlr_mor_sa
   SET @R36C13 = 0
   SET @REN_36 = '000363' + Replicate('0',10) + 
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R36C4))))) + LTrim(RTrim(Convert(char(10), @R36C4))) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R36C8))))) + LTrim(RTrim(Convert(char(10), @R36C8))) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R36C9))))) + LTrim(RTrim(Convert(char(10), @R36C9))) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R36C13))))) + LTrim(RTrim(Convert(char(10), @R36C13)))
   INSERT INTO fco_iss_mm VALUES (999936, @REN_36)

   /*******	RENGLON 37	******/
   SET @R37C4 = @R35C4 + @R36C4
   SET @R37C8 = @R35C8 + @R36C8
   SET @R37C9 = @R35C9 + @R36C9
   SET @R37C13 = @R35C13 + @R36C13
   SET @REN_37 = '000373' + @nro_meses + 
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R37C4))))) + LTrim(RTrim(Convert(char(10), @R37C4))) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R37C8))))) + LTrim(RTrim(Convert(char(10), @R37C8))) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R37C9))))) + LTrim(RTrim(Convert(char(10), @R37C9))) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R37C13))))) + LTrim(RTrim(Convert(char(10), @R37C13)))
   INSERT INTO fco_iss_mm VALUES (999937, @REN_37)

   /*******	RENGLON 38	******/
   SET @nro_rad_saf = Space(10)
   SET @vlr_saf_pe = 0
   SET @vlr_saf_fs = 0
   SET @vlr_saf_sa = 0

   IF @w_control_SUC = '0' 
       SELECT @nro_rad_saf = IsNull(A.referencia, ' '), @vlr_saf_pe = IsNull(A.valor_1,0), @vlr_saf_sa = IsNull(A.valor_2,0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ISS'
         AND b.secuencia = 4
    ELSE
       SELECT @nro_rad_saf = IsNull(A.referencia, ' '), @vlr_saf_pe = IsNull(A.valor_1,0), @vlr_saf_sa = IsNull(A.valor_2,0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ISS'
         AND b.secuencia = 4
         AND cod_suc = @w_control_SUC

   SET @R38C4 = @vlr_saf_pe
   SET @R38C8 = @vlr_saf_fs
   SET @R38C9 = @vlr_saf_sa
   SET @R38C13 = 0
   SET @REN_38 = '000383' + @nro_rad_saf +
        Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R38C4))))) + LTrim(RTrim(Convert(char(10), @R38C4))) +
        Replicate('0',10) + Replicate('0',10) + Replicate('0',10) + 
        Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R38C8))))) + LTrim(RTrim(Convert(char(10), @R38C8))) +
        Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R38C9))))) + LTrim(RTrim(Convert(char(10), @R38C9))) +
        Replicate('0',10) + Replicate('0',10) + Replicate('0',10) + Replicate('0',10)
   INSERT INTO fco_iss_mm VALUES (999938, @REN_38)

   /*******	RENGLON 39	******/
   SET @R39C4 = @R37C4 - @R38C4
   SET @R39C8 = @R37C8 - @R38C8
   SET @R39C9 = @R37C9 - @R38C9
   SET @R39C13 = @R37C13 - @R38C13
   SET @REN_39 = '000393' + Replicate('0',10) + 
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R39C4))))) + LTrim(RTrim(Convert(char(10), @R39C4))) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R39C8))))) + LTrim(RTrim(Convert(char(10), @R39C8))) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R39C9))))) + LTrim(RTrim(Convert(char(10), @R39C9))) +
	Replicate('0',10) + Replicate('0',10) + Replicate('0',10) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(char(10), @R39C13))))) + LTrim(RTrim(Convert(char(10), @R39C13))) + char(13)

   INSERT INTO fco_iss_mm VALUES (999939, @REN_39)


   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO IV                  *****/
   /***********************************************************************/

   INSERT INTO fco_iss_mm VALUES (999940, '999994')

END
GO
GRANT EXECUTE ON dbo.sp_fco_crea_iss_mm TO Public
GO
IF OBJECT_ID('dbo.sp_fco_crea_pension_mm') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_crea_pension_mm
GO
CREATE PROCEDURE dbo.sp_fco_crea_pension_mm
(
   @pvc_compania varchar(4),
   @pvc_anio varchar(4),
   @pvc_mes varchar(2),
   @pvc_cod_suc varchar(10),
   @pvc_fpo	varchar(10)
)
/**********************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano Version FCO - ADAM V.3   ***/
/*** Descripcion: Crea archivo plano para Pensión                   ***/
/*** Autor:       Juan Carlos Leguizamon                            ***/
/*** Fecha MF:    Junio 30 de 2001                                  ***/
/*** Fecha FCO:   Marzo 31 de 2006                                  ***/
/**********************************************************************/
AS
 /* VARIABLES ESTRUCTURA MEDIO MAGNETICO */
DECLARE
   @CI01_06	char(58),
   @CI07_18 	char(148),
   @CI19_27 	char(57),
   @CI28	char(5),

   @R31C4	Numeric(10,0),
   @R31C5	Numeric(10,0),
   @R31C6	Numeric(10,0),
   @R31C7	Numeric(10,0),
   @R31C8	Numeric(10,0),

   @R36C3	Numeric(10,0),
   @R36C7	Numeric(10,0),
   @R36C8	Numeric(10,0),

   @REN31	char(66),   
   @REN36	char(66),  
   @REN39	char(66)

   /* VARIABLES AUXILIARES (o de trabajo W) */

   /* Para armar sentencias dinamicamente */
   DECLARE @sql  varchar(3000),
    	   @sql2 varchar(3000),
	       @sql3 varchar(3000)

   /* Para hallar la forma de presentación y la sucursal */
   DECLARE @forma_pres	char(1),
   	   @cod_SUC	char(10),
	   @control_SUC varchar(10)

   /* Tabla donde estan los datos */
   DECLARE @tabla  varchar(30)

   /* Para controlar puntos y rayas en el registro_fiscal */
   DECLARE @nit	char(9)

BEGIN

  SET @tabla = 'FCO_FPO_' + RTrim(@pvc_compania) + '_' + RTrim(@pvc_anio) + '_' + RTrim(@pvc_mes)
   DELETE fco_fpo_mm

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO I                   *****/
   /***********************************************************************/

   SELECT @CI01_06 = '00000101' + 
	LTrim(RTrim(SubString(descripcion,1,40))) + Space(40-Len(LTrim(RTrim(SubString(descripcion,1,40))))) +
	Replicate('0', 9-Len(LTrim(RTrim(SubString(registro_fiscal,1,9))))) + LTrim(RTrim(SubString(registro_fiscal,1,9))) +
	LTrim(RTrim(SubString(digito_verificacion,1,1))) + Space(1 - Len(LTrim(RTrim(SubString(digito_verificacion,1,1)))))
   FROM vw_fco_administradoras
   WHERE compania = @pvc_compania AND tipo = 'AFP' AND codigo = @pvc_fpo

   SELECT @nit=registro_fiscal
   FROM vw_fco_companias
   WHERE compania=@pvc_compania 

   IF charIndex('.', @nit)>0
   BEGIN
      SELECT @nit=SubString(registro_fiscal,1,3) + SubString(registro_fiscal,5,3) + SubString(registro_fiscal,9,3)
      FROM vw_fco_companias  WHERE compania=@pvc_compania 
   END
   ELSE
   BEGIN
      SELECT @nit=SubString(registro_fiscal,1,9)
      FROM vw_fco_companias  WHERE compania=@pvc_compania 
   END

   /* Control del codigo de la sucursal */
   SET @control_SUC = IsNull(@pvc_cod_suc,'0')
   IF Len(@control_SUC)=0
	SET @control_SUC='0'

   IF @control_SUC = '0'
   BEGIN
       SELECT @CI07_18 = 
	LTrim(RTrim(SubString(C.nombre_cia,1,40))) + Space(40 - Len(LTrim(RTrim(SubString(C.nombre_cia,1,40))))) +
	'N' +
	Replicate('0', 9 - Len(@nit)) + @nit +
	SubString(C.registro_fiscal, Len(RTrim(C.registro_fiscal)),1) +
	SubString(C.clase_aportante,1,1) + Space(1 - Len(SubString(C.clase_aportante,1,1))) +
	LTrim(RTrim(SubString(C.domicilio,1,40))) + Space(40 - Len(LTrim(RTrim(SubString(C.domicilio,1,40))))) +
	LTrim(RTrim(SubString(M.nombre,1,15))) + Space(15 - Len(LTrim(RTrim(SubString(M.nombre,1,15))))) +
	Replicate('0', 4-Len(LTrim(RTrim(SubString(LTrim(M.codigo),1,4))))) + LTrim(RTrim(SubString(LTrim(M.codigo),1,4))) +
	LTrim(RTrim(SubString(D.nombre,1,15))) + Space(15 - Len(LTrim(RTrim(SubString(D.nombre,1,15))))) +
	Replicate('0', 2-Len(LTrim(RTrim(SubString(LTrim(D.codigo),1,2))))) + LTrim(RTrim(SubString(LTrim(D.codigo),1,2))) +
	LTrim(RTrim(SubString(C.telefono,1,10))) + Space(10 - Len(LTrim(RTrim(SubString(C.telefono,1,10))))) + 
	LTrim(RTrim(SubString(C.fax,1,10))) + Space(10 - Len(LTrim(RTrim(SubString(C.fax,1,10)))))
       FROM vw_fco_companias C,
	    fco_CIUDADES M,
            fco_DEPARTAMENTOS D
       WHERE 
	 M.codigo   = C.cod_ciudad And
	 D.codigo   = C.cod_dpto   And
	 M.cod_dpto = D.codigo 	   And
	 C.compania = @pvc_compania
   END
   ELSE
   BEGIN
       SELECT @CI07_18 = 
	LTrim(RTrim(SubString(C.nombre_cia,1,40))) + Space(40 - Len(LTrim(RTrim(SubString(C.nombre_cia,1,40))))) +
	'N' +
	Replicate('0', 9 - Len(@nit)) + @nit +
	SubString(C.registro_fiscal, Len(RTrim(C.registro_fiscal)),1) +
	SubString(C.clase_aportante,1,1) + Space(1 - Len(SubString(C.clase_aportante,1,1))) +
	LTrim(RTrim(SubString(RSP.direccion,1,40))) + Space(40 - Len(LTrim(RTrim(SubString(RSP.direccion,1,40))))) +
	LTrim(RTrim(SubString(M.nombre,1,15))) + Space(15 - Len(LTrim(RTrim(SubString(M.nombre,1,15))))) +
	Replicate('0', 4-Len(LTrim(RTrim(SubString(LTrim(M.codigo),1,4))))) + LTrim(RTrim(SubString(LTrim(M.codigo),1,4))) +
	LTrim(RTrim(SubString(D.nombre,1,15))) + Space(15 - Len(LTrim(RTrim(SubString(D.nombre,1,15))))) +
	Replicate('0', 2-Len(LTrim(RTrim(SubString(LTrim(D.codigo),1,2))))) + LTrim(RTrim(SubString(LTrim(D.codigo),1,2))) +
	LTrim(RTrim(SubString(RSP.telefono,1,10))) + Space(10 - Len(LTrim(RTrim(SubString(RSP.telefono,1,10))))) + 
	LTrim(RTrim(SubString(RSP.fax,1,10))) + Space(10 - Len(LTrim(RTrim(SubString(RSP.fax,1,10)))))
       FROM vw_fco_companias C,
            fco_sucursales RSP, 
	        fco_ciudades M,
            fco_departamentos D
       WHERE 
         RSP.compania = C.compania And
    	 M.codigo   = RSP.cod_ciudad And
	     D.codigo   = RSP.cod_dpto   And
    	 M.cod_dpto = D.codigo 	   And
	     C.compania = @pvc_compania  And
         RSP.sucursal = @pvc_cod_suc
   END

   /* Forma de Presentación de la Autoliquidación de Aportes */
   IF @control_SUC = '0'
   BEGIN
	SELECT @forma_pres = IsNull(forma_presentacion,'U')
	FROM   vw_fco_companias
	WHERE  compania = @pvc_compania

        SET @cod_SUC = ' '
   END
   ELSE
   BEGIN
	SET @forma_pres='S';
	SET @cod_SUC = @control_SUC
   END

    /* Numero de trabajadores */
   SET @sql=
   " SELECT Total = Count(COD_TRAB)" +
   " INTO ##tmp_trabajadores" +
   " FROM " + @tabla +
   " WHERE COD_TRAB IN" +
   " (SELECT trabajador FROM trabajadores_grales" + 
   " WHERE compania = '" + @pvc_compania + "' AND sit_trabajador = 1" +
   Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END + ")"
   EXECUTE (@sql)

   SELECT @CI19_27 =
	Replicate('0',4-Len(LTrim(RTrim(Convert(char,@pvc_anio))))) + LTrim(RTrim(Convert(char,@pvc_anio))) + 
	Replicate('0',2-Len(LTrim(RTrim(Convert(char,@pvc_mes))))) + LTrim(RTrim(Convert(char,@pvc_mes))) + 
	Space(1) + Space(6) + Space(8) +
	Space(10) + Space(10) + @forma_pres + @cod_SUC +
	Replicate('0',5-Len(RTrim(LTrim(Convert(char,Total))))) + RTrim(LTrim(Convert(char,Total)))
   FROM ##tmp_trabajadores
   DROP TABLE ##tmp_trabajadores
    
   /* Numero de Afiliados a este fondo */
   SET @sql=
   " SELECT Total = Count(*)" +
   " INTO ##tmp_Afiliados" +
   " FROM " +
   " (SELECT Distinct COD_TRAB" +
   " FROM " + @tabla +
   " WHERE COD_FPO='" + @pvc_fpo + "'" +
   Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END +
   " GROUP BY COD_TRAB" +
   " HAVING SUM(C19A)>0) Afiliados"
   EXECUTE (@sql)

   SELECT @CI28 = Replicate('0',5-Len(RTrim(LTrim(Convert(char,Total))))) + RTrim(LTrim(Convert(char,Total)))
   FROM ##tmp_Afiliados
   DROP TABLE ##tmp_Afiliados

   INSERT INTO fco_fpo_mm VALUES (0, @CI01_06 + @CI07_18 + @CI19_27 + @CI28)

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO II                  *****/
   /***********************************************************************/

   SET @sql =
	"SELECT Identity(Int,1,1) AS Sec, " +
	"'2' + LTrim(RTrim(SubString(C11A,1,1))) + Space(1-Len(LTrim(RTrim(SubString(C11A,1,1))))) + " +
	"Replicate('0',12 - Len(LTrim(RTrim(Convert(char(12),C11B))))) + LTrim(RTrim(Convert(char(12),C11B))) +" +
	"RTrim(LTrim(SubString(SubString(C12ABC, 1, charIndex('/', C12ABC)-1),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(C12ABC, 1, charIndex('/', C12ABC)-1),1,15))))) +" +
	"RTrim(LTrim(SubString(SubString(C12ABC, charIndex('/', C12ABC) + 1, charIndex('/', C12ABC, charIndex('/', C12ABC)+1) - charIndex('/', C12ABC)-1),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(C12ABC, charIndex('/', C12ABC) + 1, charIndex('/', C12ABC, charIndex('/', C12ABC)+1) - charIndex('/', C12ABC)-1),1,15))))) +" +
	"RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)), 1, Case When charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)))>0 Then charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) Else Len(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) End),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)), 1, Case When charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)))>0 Then charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) Else Len(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) End),1,15))))) +" +
	"Case When charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) = 0 Then space(15-Len('')) Else RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)), charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) + 1, Len(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) - charIndex(' ', Reverse(LTrim(RTrim(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)))))),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)), charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) + 1, Len(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) - charIndex(' ', Reverse(LTrim(RTrim(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)))))),1,15))))) End +" +
	"Case When RTrim(LTrim(IsNull(C13A,''))) = '' Then ' ' Else C13A End +" +
	"Case When RTrim(LTrim(IsNull(C13B,''))) = '' Then ' ' Else C13B End +" +
	"Case When RTrim(LTrim(IsNull(C13C,''))) = '' Then ' ' Else C13C End +" +
	"Case When RTrim(LTrim(IsNull(C13D,''))) = '' Then ' ' Else C13D End +"
   SET @sql2 =
	"Case When RTrim(LTrim(IsNull(C13E,''))) = '' Then ' ' Else C13E End +" +
	"Case When RTrim(LTrim(IsNull(C13F,''))) = '' Then ' ' Else C13F End +" +
	"Case When RTrim(LTrim(IsNull(C13G,''))) = '' Then ' ' Else C13G End +" +
	"Case When RTrim(LTrim(IsNull(C13H,''))) = '' Then ' ' Else C13H End +" +
	"Case When RTrim(LTrim(IsNull(C13I,''))) = '' Then ' ' Else C13I End +" +
	"Case When RTrim(LTrim(IsNull(C13J,''))) = '' Then ' ' Else C13J End +" +
	"Case When RTrim(LTrim(IsNull(C13K,''))) = '' Then ' ' Else C13K End +" +
	"Case When (C20A + C20B) = 0 Then ' ' Else 'X' End +" +
	"Replicate('0',2 - Len(LTrim(RTrim(Convert(char(2),Floor(C14A)))))) + LTrim(RTrim(Convert(char(2),Floor(C14A)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C15A)))))) + LTrim(RTrim(Convert(char(9),Floor(C15A)))) +" +
	"Replicate('0',9) +"
   SET @sql3 =
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C17A)))))) + LTrim(RTrim(Convert(char(9),Floor(C17A)))) +" +
	"Replicate('0',6 - Len(LTrim(RTrim(Convert(char(6),C18A))))) + LTrim(RTrim(Convert(char(6),C18A))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C19A)))))) + LTrim(RTrim(Convert(char(9),Floor(C19A)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C20A)))))) + LTrim(RTrim(Convert(char(9),Floor(C20A)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C20B)))))) + LTrim(RTrim(Convert(char(9),Floor(C20B)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C19A+C20A+C20B)))))) + LTrim(RTrim(Convert(char(9),Floor(C19A+C20A+C20B)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C22A)))))) + LTrim(RTrim(Convert(char(9),Floor(C22A)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C23A)))))) + LTrim(RTrim(Convert(char(9),Floor(C23A)))) As Registro2" +
	" INTO ##TMP_DETALLE_FPO" +
	" FROM " + @tabla +
	" WHERE CIA='" + @pvc_compania + "'" +
	" And COD_FPO='" + @pvc_fpo + "'" +
   	Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END +
	" AND C19A>0"
   EXECUTE (@sql + @sql2 + @sql3)

   INSERT INTO fco_fpo_mm
   SELECT Sec, Replicate('0', 5- Len(RTrim(LTrim(Convert(char(5),Sec))))) + RTrim(LTrim(Convert(char(5),Sec))) + Registro2
   FROM ##TMP_DETALLE_FPO

   DROP TABLE ##TMP_DETALLE_FPO

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO III                 *****/
   /***********************************************************************/

   /* Totales para los campos del Renglon 31 */
   SELECT @sql = 
	" Select IsNull(Floor(Sum(C19A)),0) As C19A, IsNull(Floor(Sum(C20A)),0) As C20A, " +
	"  	 IsNull(Floor(Sum(C20B)),0) As C20B, IsNull(Floor(Sum(C19A+C20A+C20B)),0) As C21A, " +
	"  	 IsNull(Floor(Sum(C22A)),0) As C22A" +
	" INTO ##TMP_TOTALES_F01" +
	" From " + @tabla +
	" Where CIA='" + @pvc_compania + "'" +
	" And COD_FPO='" + @pvc_fpo + "'" +
	Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END
   EXECUTE (@sql)

   SELECT @R31C4 = C19A, @R31C5 = C20A, @R31C6 = C20B, @R31C7 = C21A, @R31C8 = C22A
   FROM ##TMP_TOTALES_F01

   DROP TABLE ##TMP_TOTALES_F01

   /*******	RENGLON 31	******/
   SET @REN31 = '000313' + Replicate('0',10) +	Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C4))))) + LTrim(RTrim(Convert(char,@R31C4))) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C5))))) + LTrim(RTrim(Convert(char,@R31C5))) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C6))))) + LTrim(RTrim(Convert(char,@R31C6))) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C7))))) + LTrim(RTrim(Convert(char,@R31C7))) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C8))))) + LTrim(RTrim(Convert(char,@R31C8)))
   INSERT INTO fco_fpo_mm VALUES (999931, @REN31)


   /*******	RENGLON 36	******/
   SET @R36C3=0
   SET @R36C7=0
   SET @R36C8=0
   SET @REN36 = '000363' + 
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R36C3))))) + LTrim(RTrim(Convert(char,@R36C3))) +
	Replicate('0', 10) + Replicate('0', 10) + Replicate('0', 10) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R36C7))))) + LTrim(RTrim(Convert(char,@R36C7))) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R36C8))))) + LTrim(RTrim(Convert(char,@R36C8)))
   INSERT INTO fco_fpo_mm VALUES (999936, @REN36)


   /*******	RENGLON 39	******/
   SET @REN39 = '000393' + Replicate('0', 10) +
	Replicate('0', 10) + Replicate('0', 10) + Replicate('0', 10) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C7+@R36C7))))) + LTrim(RTrim(Convert(char,@R31C7+@R36C7))) +
	Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C8+@R36C8))))) + LTrim(RTrim(Convert(char,@R31C8+@R36C8)))


   INSERT INTO fco_fpo_mm VALUES (999939, @REN39)

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO IV                  *****/
   /***********************************************************************/
   INSERT INTO fco_fpo_mm VALUES (999940, '999994')

END
GO
GRANT EXECUTE ON dbo.sp_fco_crea_pension_mm TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_crea_riesgos_mm') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_crea_riesgos_mm
GO
CREATE PROCEDURE dbo.sp_fco_crea_riesgos_mm
(
   	@pvc_compania	varchar(4),
   	@pvc_anio		varchar(4),
   	@pvc_mes		varchar(2),
   	@pvc_suc		varchar(10)
)
/**********************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano Version FCO - ADAM V.3   ***/
/*** Descripcion: Crea archivo plano para Riesgos                   ***/
/*** Autor:       Juan Carlos Leguizamon                            ***/
/*** Fecha MF:    Julio 10 de 2001                                  ***/
/*** Fecha FCO:   Abril 01 de 2006                                  ***/
/**********************************************************************/
AS
   /* VARIABLES ESTRUCTURA MEDIO MAGNETICO */
DECLARE 	
   @CI01_06 Char(58),
   @CI07_18 Char(148),
   @CI19_27 Char(57),

   @REN_31  Char(26),
   @REN_32  Char(26),
   @REN_34  Char(26),
   @REN_35  Char(26),
   @REN_36  Char(26),
   @REN_37  Char(26),
   @REN_38  Char(26),
   @REN_39  Char(26),

   @C4_R31  Numeric(10,0),
   @C4_R32  Numeric(10,0),
   @C4_R35  Numeric(10,0),
   @C4_R37  Numeric(10,0),
   @C4_R39  Numeric(10,0)

   /* VARIABLES AUXILIARES */
   /* Para armar sentencias dinamicamente */
   DECLARE @sql  varChar(3000),
	   @sql2 varchar(3000),
	   @sql3 varchar(3000)

   /* Para controlar puntos y rayas en el registro_fiscal */
   DECLARE 	@nit	Char(9)
   /* Forma de Presentacion de la Autoliquidacion para ARP */
   DECLARE 	@fpres  Char(1)
   /* Sucursal */
   DECLARE	@cod_SUC Char(10),
	   	@control_SUC varchar(10)

   /* Tabla donde estan los datos */
   DECLARE @tabla  VarChar(30)

   /* Variables para descontar incapacidades, saldos a favor y pagar intereses por mora */
   DECLARE      @nro_aut_in  char(10),
                @vlr_aut_in  numeric(10,0),
                @vlr_otr_rp  numeric(10,0),
                @nro_meses   char(10),
                @vlr_mor_rp  numeric(10,0),
                @nro_rad_saf char(10),
                @vlr_saf_rp  numeric(10,0)

BEGIN

    SET @tabla = 'FCO_ARP_' + RTrim(@pvc_compania) + '_' + RTrim(@pvc_anio) + '_' + RTrim(@pvc_mes)
    DELETE fco_arp_mm

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO I                   *****/
   /***********************************************************************/

   SELECT @CI01_06 = '00000102' + 
	LTrim(RTrim(SubString(nombre_ARP,1,40))) + Space(40-Len(LTrim(RTrim(SubString(nombre_ARP,1,40))))) + 
        Replicate('0',9-Len(LTrim(RTrim(SubString(nit_ARP,1,9))))) + LTrim(RTrim(SubString(nit_ARP,1,9))) +
        SubString(nit_ARP,11,1)
   FROM vw_fco_companias
   WHERE compania = @pvc_compania 

   SELECT @nit=registro_fiscal
   FROM vw_fco_companias
   WHERE compania=@pvc_compania 

   IF CharIndex('.', @nit)>0
   BEGIN
      SELECT @nit=SubString(registro_fiscal,1,3) + SubString(registro_fiscal,5,3) + SubString(registro_fiscal,9,3)
      FROM vw_fco_companias WHERE compania=@pvc_compania 
   END
   ELSE
   BEGIN
      SELECT @nit=SubString(registro_fiscal,1,9)
      FROM vw_fco_companias WHERE compania=@pvc_compania 
   END

   /* Control del codigo de la sucursal */
   SET @control_SUC = IsNull(@pvc_suc,'0')
   IF Len(@control_SUC)=0
	SET @control_SUC='0'

   IF @control_SUC = '0'
   BEGIN
       SELECT @CI07_18 = LTrim(RTrim(SubString(C.nombre_cia,1,40))) + Space(40-Len(LTrim(RTrim(SubString(C.nombre_cia,1,40))))) + 
		'N' + 
        Replicate('0',9-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) +
        SubString(C.registro_fiscal, Len(RTrim(C.registro_fiscal)),1) +
		SubString(C.clase_aportante,1,1) + Space(1-Len(SubString(C.clase_aportante,1,1))) + 
		LTrim(RTrim(SubString(C.domicilio,1,40))) + Space(40-Len(LTrim(RTrim(SubString(C.domicilio,1,40))))) + 
		LTrim(RTrim(SubString(M.nombre,1,15))) + Space(15-Len(LTrim(RTrim(SubString(M.nombre,1,15))))) + 
		Replicate('0',4-Len(LTrim(RTrim(SubString(LTrim(M.codigo),1,4))))) + LTrim(RTrim(SubString(LTrim(M.codigo),1,4))) +
		LTrim(RTrim(SubString(D.nombre,1,15))) + Space(15-Len(LTrim(RTrim(SubString(D.nombre,1,15))))) + 
		Replicate('0',2-Len(LTrim(RTrim(SubString(LTrim(D.codigo),1,2))))) + LTrim(RTrim(SubString(LTrim(D.codigo),1,2))) +
		LTrim(RTrim(SubString(C.telefono,1,10))) + Space(10-Len(LTrim(RTrim(SubString(C.telefono,1,10))))) + 
		LTrim(RTrim(SubString(C.fax,1,10))) + Space(10-Len(LTrim(RTrim(SubString(C.fax,1,10)))))
       FROM vw_fco_companias C,
	    fco_CIUDADES M,
            fco_DEPARTAMENTOS D
       WHERE M.codigo   = C.cod_ciudad And
	 D.codigo   = C.cod_dpto   And
	 M.cod_dpto = D.codigo 	   And
	 C.compania = @pvc_compania
   END
   ELSE
   BEGIN
       SELECT @CI07_18 = LTrim(RTrim(SubString(C.nombre_cia,1,40))) + Space(40-Len(LTrim(RTrim(SubString(C.nombre_cia,1,40))))) + 
		'N' + 
   	        Replicate('0',9-Len(LTrim(RTrim(@nit)))) + LTrim(RTrim(@nit)) +
   	        SubString(C.registro_fiscal, Len(RTrim(C.registro_fiscal)),1) +
		SubString(C.clase_aportante,1,1) + Space(1-Len(SubString(C.clase_aportante,1,1))) + 
		LTrim(RTrim(SubString(RSP.direccion,1,40))) + Space(40-Len(LTrim(RTrim(SubString(RSP.direccion,1,40))))) + 
		LTrim(RTrim(SubString(M.nombre,1,15))) + Space(15-Len(LTrim(RTrim(SubString(M.nombre,1,15))))) + 
		Replicate('0',4-Len(LTrim(RTrim(SubString(LTrim(M.codigo),1,4))))) + LTrim(RTrim(SubString(LTrim(M.codigo),1,4))) +
		LTrim(RTrim(SubString(D.nombre,1,15))) + Space(15-Len(LTrim(RTrim(SubString(D.nombre,1,15))))) + 
		Replicate('0',2-Len(LTrim(RTrim(SubString(LTrim(D.codigo),1,2))))) + LTrim(RTrim(SubString(LTrim(D.codigo),1,2))) +
		LTrim(RTrim(SubString(RSP.telefono,1,10))) + Space(10-Len(LTrim(RTrim(SubString(RSP.telefono,1,10))))) + 
		LTrim(RTrim(SubString(RSP.fax,1,10))) + Space(10-Len(LTrim(RTrim(SubString(RSP.fax,1,10)))))
       FROM vw_fco_companias C,
            fco_sucursales RSP, 
	    fco_CIUDADES M,
            fco_DEPARTAMENTOS D
       WHERE 
         RSP.compania = C.compania And
	 M.codigo   = RSP.cod_ciudad And
	 D.codigo   = RSP.cod_dpto   And
	 M.cod_dpto = D.codigo 	   And
	 C.compania = @pvc_compania  And
         RSP.sucursal = @pvc_suc
   END

   /* Forma de Presentación de la Autoliquidación de Aportes */
   IF @control_SUC = '0'
   BEGIN
	SELECT @fpres = IsNull(forma_presentacion,'U')
	FROM   vw_fco_companias
	WHERE  compania = @pvc_compania

        SET @cod_SUC = ' '
   END
   ELSE
   BEGIN
	SET @fpres='S';
	SET @cod_SUC = @control_SUC
   END

    /* Numero de trabajadores */
   SET @sql=
   " SELECT Total = Count(COD_TRAB)" +
   " INTO ##tmp_trabajadores" +
   " FROM " + @tabla +
   " WHERE COD_TRAB IN" +
   " (SELECT trabajador FROM trabajadores_grales" + 
   " WHERE compania = '" + @pvc_compania + "' AND sit_trabajador = 1" +
   Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END + ")"

   EXECUTE (@sql)

   SELECT @CI19_27 = LTrim(RTrim(@pvc_anio)) + Replicate('0',2-Len(LTrim(RTrim(@pvc_mes)))) + LTrim(RTrim(@pvc_mes)) +
		Space(1) + Space(6) + Space(8) +
		Space(10) + Space(10) + @fpres + @cod_suc +
		Replicate('0',5-Len(LTrim(RTrim(Convert(Char,total))))) + LTrim(RTrim(Convert(Char, total)))
   FROM ##tmp_trabajadores
   DROP TABLE ##tmp_trabajadores

   INSERT INTO fco_arp_mm VALUES (0, @CI01_06 + @CI07_18 + @CI19_27)

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO II                  *****/
   /***********************************************************************/


   SET @sql="SELECT Identity(Int,1,1) Sec, " +
	"'2' + LTrim(RTrim(SubString(C11A,1,1))) + Space(1-Len(LTrim(RTrim(SubString(C11A,1,1))))) + " +
	"Replicate('0', 12 - Len(RTrim(LTrim(Convert(char(12),C11B))))) + RTrim(LTrim(Convert(char(12),C11B))) + " +
	"RTrim(LTrim(SubString(SubString(C12ABC, 1, CharIndex('/', C12ABC)-1),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(C12ABC, 1, CharIndex('/', C12ABC)-1),1,15))))) +" +
	"RTrim(LTrim(SubString(SubString(C12ABC, CharIndex('/', C12ABC) + 1, CharIndex('/', C12ABC, CharIndex('/', C12ABC)+1) - CharIndex('/', C12ABC)-1),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(C12ABC, CharIndex('/', C12ABC) + 1, CharIndex('/', C12ABC, CharIndex('/', C12ABC)+1) - CharIndex('/', C12ABC)-1),1,15))))) +" +
	"RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1)), 1, Case When CharIndex(' ', Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1)))>0 Then CharIndex(' ', Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1))) Else Len(Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1))) End),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1)), 1, Case When CharIndex(' ', Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1)))>0 Then CharIndex(' ', Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1))) Else Len(Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1))) End),1,15))))) +" +
	"Case When CharIndex(' ', Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1))) = 0 Then space(15-Len('')) Else RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1)), CharIndex(' ', Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1))) + 1, Len(Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1))) - CharIndex(' ', Reverse(LTrim(RTrim(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1)))))),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1)), CharIndex(' ', Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1))) + 1, Len(Reverse(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1))) - CharIndex(' ', Reverse(LTrim(RTrim(SubString(Reverse(C12ABC),1,CharIndex('/', Reverse(C12ABC))-1)))))),1,15))))) End +" +
	"Case When RTrim(LTrim(IsNull(C13A,''))) = '' Then Space(1) Else C13A End +" +
	"Case When RTrim(LTrim(IsNull(C13B,''))) = '' Then Space(1) Else C13B End +"
   SET @sql2=
	"Case When RTrim(LTrim(IsNull(C13C,''))) = '' Then Space(1) Else C13C End +" +
	"Case When RTrim(LTrim(IsNull(C13D,''))) = '' Then Space(1) Else C13D End +" +
	"Case When RTrim(LTrim(IsNull(C13E,''))) = '' Then Space(1) Else C13E End +" +
	"Case When RTrim(LTrim(IsNull(C13F,''))) = '' Then Space(1) Else C13F End +" +
	"Case When RTrim(LTrim(IsNull(C13G,''))) = '' Then Space(1) Else C13G End +" +
	"Case When RTrim(LTrim(IsNull(C13H,''))) = '' Then Space(1) Else C13H End +" +
	"Case When RTrim(LTrim(IsNull(C13I,''))) = '' Then Space(1) Else C13I End +" +
	"Case When RTrim(LTrim(IsNull(C13J,''))) = '' Then Space(1) Else C13J End +" +
	"Replicate('0',2 - Len(LTrim(RTrim(Convert(Char(2),Floor(C13K)))))) + LTrim(RTrim(Convert(Char(2),Floor(C13K)))) +" +
	"Replicate('0',2 - Len(LTrim(RTrim(Convert(Char(2),Floor(C14A)))))) + LTrim(RTrim(Convert(Char(2),Floor(C14A)))) +" +	
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(Char(9),Floor(C15A)))))) + LTrim(RTrim(Convert(Char(9),Floor(C15A)))) +" 
   SET @sql3=
	"Replicate('0',9) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(Char(9),Floor(C17A)))))) + LTrim(RTrim(Convert(Char(9),Floor(C17A)))) +" +
	"Replicate('0',9) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(Char(9),Floor(C28B)))))) + LTrim(RTrim(Convert(Char(9),Floor(C28B)))) +" +
	"Replicate('0',9 - Len(LTrim(RTrim(Convert(Char(9),Floor(C29A)))))) + LTrim(RTrim(Convert(Char(9),Floor(C29A)))) +" +
	"LTrim(RTrim(SubString(C30A,1,5))) + Space(5-Len(LTrim(RTrim(SubString(C30A,1,5))))) + " +
	"LTrim(RTrim(SubString(C30B,1,5))) + Space(5-Len(LTrim(RTrim(SubString(C30B,1,5))))) As Registro2" +
	" INTO ##TMP_DETALLE" +
	" FROM " + @tabla +
	" WHERE CIA='" + @pvc_compania + "'" +
   	Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END +
	" AND (C29A > 0 OR C13F = 'X' OR C13G = 'X' OR C13H = 'X' OR C13K > 0)"

   EXECUTE (@sql + @sql2 + @sql3)

   INSERT INTO fco_arp_mm 
   SELECT Sec, Replicate('0', 5- Len(RTrim(LTrim(Convert(Char(5),Sec))))) + RTrim(LTrim(Convert(Char(5),Sec))) + Registro2
   FROM ##TMP_DETALLE

   DROP TABLE ##TMP_DETALLE

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO III                 *****/
   /***********************************************************************/

   /* Totales para los campos 4 de los renglones 31 y 32*/
   SELECT @sql = 
	" Select IsNull(Floor(Sum(C29A)),0) As C29A, IsNull(Floor(Sum(C32B)),0) As C32B " +
	" INTO ##TMP_TOTALES_F02" +
	" From " + @tabla +
	" Where CIA='" + @pvc_compania + "'" +
   	Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END
   EXECUTE (@sql)

   SELECT @C4_R31 = C29A, @C4_R32 = 0 --C32B Se pone en comentario a raiz de pruebas con Grasco en Jun.09/06 - JCL
   FROM ##TMP_TOTALES_F02

   DROP TABLE ##TMP_TOTALES_F02

   /*******	RENGLON 31	******/
   SELECT @REN_31 = '000313' + Replicate('0', 10) + 
	Replicate('0', 10-Len(LTrim(RTrim(Convert(Char(10), @C4_R31))))) + LTrim(RTrim(Convert(Char(10), @C4_R31)))
   INSERT INTO fco_arp_mm VALUES (999931,@REN_31)

   /*******	RENGLON 32	******/
   SET @nro_aut_in = Space(10)
   SET @vlr_aut_in = 0

   IF @C4_R32 <= 0 
   BEGIN
       IF @control_SUC = '0' 
           SELECT @nro_aut_in = IsNull(A.referencia, ' '), @vlr_aut_in = IsNull(A.valor_1,0)
           FROM fco_ala_datos_adi A, fco_rel_sgss_da B
           WHERE A.sgss = B.sgss 
             AND A.item = B.ala_datos_adi
             AND A.tabla = @tabla
             AND A.cod_adm = 'ARP'
             AND b.secuencia = 1
        ELSE
           SELECT @nro_aut_in = IsNull(A.referencia, ' '), @vlr_aut_in = IsNull(A.valor_1,0)
           FROM fco_ala_datos_adi A, fco_rel_sgss_da B
           WHERE A.sgss = B.sgss 
             AND A.item = B.ala_datos_adi
             AND A.tabla = @tabla
             AND A.cod_adm = 'ARP'
             AND b.secuencia = 1
             AND cod_suc = @control_SUC

       SET @C4_R32 = @vlr_aut_in
   END

   SELECT @REN_32 = '000323' + @nro_aut_in + 
	Replicate('0', 10-Len(LTrim(RTrim(Convert(Char(10), @C4_R32))))) + LTrim(RTrim(Convert(Char(10), @C4_R32)))
   INSERT INTO fco_arp_mm VALUES (999932,@REN_32)

   /*******	RENGLON 34	******/
   SET @vlr_otr_rp = 0

   IF @control_SUC = '0' 
       SELECT @vlr_otr_rp = IsNull(A.valor_1,0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ARP'
         AND b.secuencia = 2
    ELSE
       SELECT @vlr_otr_rp = IsNull(A.valor_1,0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ARP'
         AND b.secuencia = 2
         AND cod_suc = @control_SUC

   SELECT @REN_34 = '000343' + Replicate('0', 10) + 
   Replicate('0', 10-Len(LTrim(RTrim(Convert(Char(10), @vlr_otr_rp))))) + LTrim(RTrim(Convert(Char(10), @vlr_otr_rp)))

   INSERT INTO fco_arp_mm VALUES (999934,@REN_34)

   /*******	RENGLON 35	******/
   SELECT @C4_R35 = @C4_R31 - @C4_R32 - @vlr_otr_rp
   SELECT @REN_35 = '000353' + Replicate('0', 10) + 
	Replicate('0', 10-Len(LTrim(RTrim(Convert(Char(10), @C4_R35))))) + LTrim(RTrim(Convert(Char(10), @C4_R35)))
   INSERT INTO fco_arp_mm VALUES (999935,@REN_35)

   /*******	RENGLON 36	******/
   SET @nro_meses = Space(10)
   SET @vlr_mor_rp = 0

   IF @control_SUC = '0' 
       SELECT @nro_meses = IsNull(A.referencia, ' '), @vlr_mor_rp = IsNull(A.valor_1,0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ARP'
         AND b.secuencia = 3
    ELSE
       SELECT @nro_meses = IsNull(A.referencia, ' '), @vlr_mor_rp = IsNull(A.valor_1,0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ARP'
         AND b.secuencia = 3
         AND cod_suc = @control_SUC

   SELECT @REN_36 = '000363' + Replicate('0', 10) + 
   Replicate('0', 10-Len(LTrim(RTrim(Convert(Char(10), @vlr_mor_rp))))) + LTrim(RTrim(Convert(Char(10), @vlr_mor_rp)))
   INSERT INTO fco_arp_mm VALUES (999936,@REN_36)

   /*******	RENGLON 37	******/
   SELECT @C4_R37 = @C4_R35 + @vlr_mor_rp
   SELECT @REN_37 = '000373' + 
        Replicate('0', 10-Len(LTrim(RTrim(@nro_meses)))) + LTrim(RTrim(@nro_meses)) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(Char(10), @C4_R37))))) + LTrim(RTrim(Convert(Char(10), @C4_R37)))
   INSERT INTO fco_arp_mm VALUES (999937,@REN_37)

   /*******	RENGLON 38	******/
   SET @nro_rad_saf = Space(10)
   SET @vlr_saf_rp = 0

   IF @control_SUC = '0' 
       SELECT @nro_rad_saf = IsNull(A.referencia, ' '), @vlr_saf_rp = IsNull(A.valor_1,0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ARP'
         AND b.secuencia = 4
    ELSE
       SELECT @nro_rad_saf = IsNull(A.referencia, ' '), @vlr_saf_rp = IsNull(A.valor_1,0)
       FROM fco_ala_datos_adi A, fco_rel_sgss_da B
       WHERE A.sgss = B.sgss 
         AND A.item = B.ala_datos_adi
         AND A.tabla = @tabla
         AND A.cod_adm = 'ARP'
         AND b.secuencia = 4
         AND cod_suc = @control_SUC

   SELECT @REN_38 = '000383' + @nro_rad_saf + 
   Replicate('0', 10-Len(LTrim(RTrim(Convert(Char(10), @vlr_saf_rp))))) + LTrim(RTrim(Convert(Char(10), @vlr_saf_rp)))

   INSERT INTO fco_arp_mm VALUES (999938,@REN_38)

   /*******	RENGLON 39	******/
   SELECT @C4_R39 = @C4_R37 - @vlr_saf_rp
   SELECT @REN_39 = '000393' + Replicate('0', 10) +
	Replicate('0', 10-Len(LTrim(RTrim(Convert(Char(10), @C4_R39))))) + LTrim(RTrim(Convert(Char(10), @C4_R39)))
   INSERT INTO fco_arp_mm VALUES (999939,@REN_39)

END
GO
GRANT EXECUTE ON dbo.sp_fco_crea_riesgos_mm TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_crea_salud_mm') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_crea_salud_mm
GO
CREATE PROCEDURE dbo.sp_fco_crea_salud_mm
(
    @pch_compania char(4),
    @pvc_anio varchar(4),
    @pvc_mes varchar(2),
    @pvc_cod_suc varchar(10),
    @pvc_eps varchar(10)
)
/**********************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano Version FCO - ADAM V.3   ***/
/*** Descripcion: Crea archivo plano para Salud                     ***/
/*** Autor:       Juan Carlos Leguizamon                            ***/
/*** Fecha MF:    Julio 03 de 2001                                  ***/
/*** Fecha FCO:   Marzo 31 de 2006                                  ***/
/**********************************************************************/
AS
BEGIN
    /* VARIABLES ESTRUCTURA MEDIO MAGNETICO */
    DECLARE
        @CI01_06 char(58),
        @CI07_18 char(148),
        @CI19_29 char(102),
        @CI30 char(5),
        @R31C3 numeric(10,0),
        @R31C4 numeric(10,0),
        @R31C5 numeric(10,0),
        @R31C6 numeric(10,0),
        @R31C7 numeric(10,0),
        @R32C4 numeric(10,0),
        @R33C4 numeric(10,0),
        @R35C4 numeric(10,0),
        @R35C7 numeric(10,0),
        @R36C4 numeric(10,0),
        @R36C7 numeric(10,0),
        @R37C4 numeric(10,0),
        @R37C7 numeric(10,0),
        @R38C4 numeric(10,0),
        @R38C7 numeric(10,0),
        @REN31 char(56),   
        @REN32 char(56),  
        @REN33 char(56),  
        @REN35 char(56),  
        @REN36 char(56),  
        @REN37 char(56),  
        @REN38 char(56),  
        @REN39 char(56)
    
    /* VARIABLES AUXILIARES */
    
    /* Para armar sentencias dinamicamente */
    DECLARE @sql  Varchar(3000),
    @sql2 Varchar(3000),
    @sql3 Varchar(3000)
    
    /* Para hallar el periodo cotizado a salud (ste) */
    DECLARE @per_ste char(6),
    @mes_ste numeric(2,0)
    
    /* Para hallar la forma de presentaci¾n y la sucursal */
    DECLARE @forma_pres	char(1),
    @cod_SUC	char(10),
    @control_SUC varchar(10)
    
    /* Tabla donde estan los datos */
    DECLARE @tabla  varchar(30)
    
    /* Para controlar puntos y rayas en el registro_fiscal */
    DECLARE @nit	char(9)
    
    /* Variables para descontar incapacidades, saldos a favor y pagar intereses por mora */
    DECLARE      @nro_aut_eg  char(10),
    @vlr_aut_eg  numeric(10,0),
    @nro_aut_lm  char(10),
    @vlr_aut_lm  numeric(10,0),
    @nro_meses   char(10),
    @vlr_mor_sa  numeric(10,0),
    @nro_rad_saf char(10),
    @vlr_saf_sa  numeric(10,0)
        
    SET @tabla = 'FCO_EPS_' + RTrim(@pch_compania) + '_' + LTrim(@pvc_anio) + '_' + LTrim(@pvc_mes)
    DELETE fco_eps_mm
    
    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO I                   *****/
    /***********************************************************************/
    
    SELECT @CI01_06 = 
    '00000103' + 
    LTrim(RTrim(SubString(descripcion,1,40))) + Space(40-Len(LTrim(RTrim(SubString(descripcion,1,40))))) +
    Replicate('0', 9-Len(LTrim(RTrim(SubString(registro_fiscal,1,9))))) + LTrim(RTrim(SubString(registro_fiscal,1,9))) +
    LTrim(RTrim(SubString(digito_verificacion,1,1))) + Space(1 - Len(LTrim(RTrim(SubString(digito_verificacion,1,1)))))
    FROM vw_fco_administradoras
    WHERE compania = @pch_compania AND tipo = 'EPS' AND codigo = @pvc_eps
    
    SELECT @nit = registro_fiscal FROM companias WHERE compania = @pch_compania
    
    IF charIndex('.', @nit)>0
        SELECT @nit = SubString(registro_fiscal,1,3) + SubString(registro_fiscal,5,3) + SubString(registro_fiscal,9,3)
        FROM vw_fco_companias  WHERE compania = @pch_compania
    ELSE
        SELECT @nit = SubString(registro_fiscal,1,9)
        FROM vw_fco_companias WHERE compania = @pch_compania
    
    /* Control del codigo de la sucursal */
    SET @control_SUC = IsNull(@pvc_cod_suc,'0')
    IF Len(@control_SUC)=0 SET @control_SUC='0'
    
    IF @control_SUC = '0'
        SELECT @CI07_18 = 
            LTrim(RTrim(SubString(C.nombre_cia,1,40))) + Space(40 - Len(LTrim(RTrim(SubString(C.nombre_cia,1,40))))) +
            'N' +
            Replicate('0', 9 - Len(@nit)) + @nit +
            SubString(C.registro_fiscal, Len(RTrim(C.registro_fiscal)),1) +
            SubString(C.clase_aportante,1,1) + Space(1 - Len(SubString(C.clase_aportante,1,1))) +
            LTrim(RTrim(SubString(C.domicilio,1,40))) + Space(40 - Len(LTrim(RTrim(SubString(C.domicilio,1,40))))) +
            LTrim(RTrim(SubString(M.nombre,1,15))) + Space(15 - Len(LTrim(RTrim(SubString(M.nombre,1,15))))) +
            Replicate('0', 4-Len(LTrim(RTrim(SubString(LTrim(M.codigo),1,4))))) + LTrim(RTrim(SubString(LTrim(M.codigo),1,4))) +
            LTrim(RTrim(SubString(D.nombre,1,15))) + Space(15 - Len(LTrim(RTrim(SubString(D.nombre,1,15))))) +
            Replicate('0', 2-Len(LTrim(RTrim(SubString(LTrim(D.codigo),1,2))))) + LTrim(RTrim(SubString(LTrim(D.codigo),1,2))) +
            LTrim(RTrim(SubString(C.telefono,1,10))) + Space(10 - Len(LTrim(RTrim(SubString(C.telefono,1,10))))) + 
            LTrim(RTrim(SubString(C.fax,1,10))) + Space(10 - Len(LTrim(RTrim(SubString(C.fax,1,10)))))
        FROM
            vw_fco_companias C,
            fco_ciudades M,
            fco_departamentos D
        WHERE  	
            M.codigo = C.cod_ciudad And
            D.codigo = C.cod_dpto And
            M.cod_dpto = D.codigo And
            C.compania = @pch_compania
    ELSE
        SELECT @CI07_18 = 
            LTrim(RTrim(SubString(C.nombre_cia,1,40))) + Space(40 - Len(LTrim(RTrim(SubString(C.nombre_cia,1,40))))) +
            'N' +
            Replicate('0', 9 - Len(@nit)) + @nit +
            SubString(C.registro_fiscal, Len(RTrim(C.registro_fiscal)),1) +
            SubString(C.clase_aportante,1,1) + Space(1 - Len(SubString(C.clase_aportante,1,1))) +
            LTrim(RTrim(SubString(RSP.direccion,1,40))) + Space(40 - Len(LTrim(RTrim(SubString(RSP.direccion,1,40))))) +
            LTrim(RTrim(SubString(M.nombre,1,15))) + Space(15 - Len(LTrim(RTrim(SubString(M.nombre,1,15))))) +
            Replicate('0', 4-Len(LTrim(RTrim(SubString(LTrim(M.codigo),1,4))))) + LTrim(RTrim(SubString(LTrim(M.codigo),1,4))) +
            LTrim(RTrim(SubString(D.nombre,1,15))) + Space(15 - Len(LTrim(RTrim(SubString(D.nombre,1,15))))) +
            Replicate('0', 2-Len(LTrim(RTrim(SubString(LTrim(D.codigo),1,2))))) + LTrim(RTrim(SubString(LTrim(D.codigo),1,2))) +
            LTrim(RTrim(SubString(RSP.telefono,1,10))) + Space(10 - Len(LTrim(RTrim(SubString(RSP.telefono,1,10))))) + 
            LTrim(RTrim(SubString(RSP.fax,1,10))) + Space(10 - Len(LTrim(RTrim(SubString(RSP.fax,1,10)))))
        FROM
            vw_fco_companias C,
            vw_fco_sucursales RSP, 
            fco_CIUDADES M,
            fco_DEPARTAMENTOS D
        WHERE  	
            RSP.compania = C.compania And
            M.codigo = RSP.cod_ciudad And
            D.codigo = RSP.cod_dpto And
            M.cod_dpto = D.codigo And
            C.compania = @pch_compania  And
            RSP.sucursal = @pvc_cod_suc
    
    /* Calculo del periodo cotizado a Salud */
    SET @mes_ste = Convert(numeric, @pvc_mes) + 1
    SET @per_ste = @pvc_anio + Replicate('0', 2-Len(Rtrim(LTrim(Convert(char,@mes_ste))))) + Rtrim(LTrim(Convert(char,@mes_ste)))
    IF @mes_ste = 13
    SET @per_ste = RTrim(LTrim(Convert(numeric, @pvc_anio) + 1)) + '01'
    
    /* Forma de Presentaci¾n de la Autoliquidaci¾n de Aportes */
    IF @control_SUC = '0'
    BEGIN
        SELECT @forma_pres = IsNull(forma_presentacion,'U')
        FROM vw_fco_companias
        WHERE compania = @pch_compania
        
        SET @cod_SUC = ' '
    END
    ELSE
    BEGIN
        SET @forma_pres = 'S';
        SET @cod_SUC = @control_SUC
    END
    
    /* Numero de trabajadores */
    SET @sql=
    " SELECT Total = Count(COD_TRAB)" +
    " INTO ##tmp_trabajadores" +
    " FROM " + @tabla +
    " WHERE COD_TRAB IN" +
    " (SELECT trabajador FROM trabajadores_grales" + 
    " WHERE compania = '" + @pch_compania + "' AND sit_trabajador = 1" +
    Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END + ")"
    
    EXECUTE (@sql)
    
    SELECT @CI19_29 =
    @per_ste + Space(40) + Space(5) +
    Space(1) + Space(6) + Space(8) +
    Space(10) + Space(10) + @forma_pres + @cod_SUC +
    Replicate('0',5-Len(RTrim(LTrim(Convert(char,Total))))) + RTrim(LTrim(Convert(char,Total)))
    FROM ##tmp_trabajadores
    DROP TABLE ##tmp_trabajadores
    
    /* Numero de Afiliados a esta EPS */
    SET @sql=
    " SELECT Total = Count(*)" +
    " INTO ##tmp_Afiliados" +
    " FROM " +
    " (SELECT Distinct COD_TRAB" +
    " FROM " + @tabla +
    " WHERE COD_EPS='" + @pvc_eps + "'" +
    Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END +
    " GROUP BY COD_TRAB" +
    " HAVING SUM(C24A)>0) Afiliados"
    
    EXECUTE (@sql)
    
    SELECT @CI30 = Replicate('0',5-Len(RTrim(LTrim(Convert(char,Total))))) + RTrim(LTrim(Convert(char,Total)))
    FROM ##tmp_Afiliados
    DROP TABLE ##tmp_Afiliados
    
    INSERT INTO fco_eps_mm VALUES (0, @CI01_06 + @CI07_18 + @CI19_29 + @CI30)
    
    
    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO II                  *****/
    /***********************************************************************/
    
    SET @sql =
    "SELECT Identity(Int,1,1) AS Sec, " +
    "'2' + LTrim(RTrim(SubString(C11A,1,1))) + Space(1-Len(LTrim(RTrim(SubString(C11A,1,1))))) + " +
    "Replicate('0',12 - Len(LTrim(RTrim(Convert(char(12),C11B))))) + LTrim(RTrim(Convert(char(12),C11B))) +" +
    "RTrim(LTrim(SubString(SubString(C12ABC, 1, charIndex('/', C12ABC)-1),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(C12ABC, 1, charIndex('/', C12ABC)-1),1,15))))) +" +
    "RTrim(LTrim(SubString(SubString(C12ABC, charIndex('/', C12ABC) + 1, charIndex('/', C12ABC, charIndex('/', C12ABC)+1) - charIndex('/', C12ABC)-1),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(C12ABC, charIndex('/', C12ABC) + 1, charIndex('/', C12ABC, charIndex('/', C12ABC)+1) - charIndex('/', C12ABC)-1),1,15))))) +" +
    "RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)), 1, Case When charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)))>0 Then charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) Else Len(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) End),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)), 1, Case When charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)))>0 Then charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) Else Len(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) End),1,15))))) +" +
    "Case When charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) = 0 Then space(15-Len('')) Else RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)), charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) + 1, Len(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) - charIndex(' ', Reverse(LTrim(RTrim(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)))))),1,15))) + Space(15-Len(RTrim(LTrim(SubString(SubString(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)), charIndex(' ', Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) + 1, Len(Reverse(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1))) - charIndex(' ', Reverse(LTrim(RTrim(SubString(Reverse(C12ABC),1,charIndex('/', Reverse(C12ABC))-1)))))),1,15))))) End +" +
    "Case When RTrim(LTrim(IsNull(C13A,''))) = '' Then Space(1) Else C13A End +" +
    "Case When RTrim(LTrim(IsNull(C13B,''))) = '' Then Space(1) Else C13B End +"
    SET @sql2 =
    "Case When RTrim(LTrim(IsNull(C13C,''))) = '' Then Space(1) Else C13C End +" +
    "Case When RTrim(LTrim(IsNull(C13D,''))) = '' Then Space(1) Else C13D End +" +
    "Case When RTrim(LTrim(IsNull(C13E,''))) = '' Then Space(1) Else C13E End +" +
    "Case When RTrim(LTrim(IsNull(C13F,''))) = '' Then Space(1) Else C13F End +" +
    "Case When RTrim(LTrim(IsNull(C13G,''))) = '' Then Space(1) Else C13G End +" +
    "Case When RTrim(LTrim(IsNull(C13H,''))) = '' Then Space(1) Else C13H End +" +
    "Case When RTrim(LTrim(IsNull(C13I,''))) = '' Then Space(1) Else C13I End +" +
    "Case When RTrim(LTrim(IsNull(C13J,''))) = '' Then Space(1) Else C13J End +" +
    "Replicate('0',2 - Len(LTrim(RTrim(Convert(char(2),Floor(C14A)))))) + LTrim(RTrim(Convert(char(2),Floor(C14A)))) +" +
    "Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C15A)))))) + LTrim(RTrim(Convert(char(9),Floor(C15A)))) +" +
    "Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C16A)))))) + LTrim(RTrim(Convert(char(9),Floor(C16A)))) +"
    SET @sql3 =
    "Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C17A)))))) + LTrim(RTrim(Convert(char(9),Floor(C17A)))) +" +
    "Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C24A)))))) + LTrim(RTrim(Convert(char(9),Floor(C24A)))) +" +
    "RTrim(LTrim(SubString(C25A,1,9))) + Space(9-Len(LTrim(RTrim(SubString(C25A,1,9))))) + " +
    "Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C25B)))))) + LTrim(RTrim(Convert(char(9),Floor(C25B)))) +" +
    "RTrim(LTrim(SubString(C26A,1,9))) + Space(9-Len(LTrim(RTrim(SubString(C26A,1,9))))) + " +
    "Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C26B)))))) + LTrim(RTrim(Convert(char(9),Floor(C26B)))) +" +
    "Replicate('0',9 - Len(LTrim(RTrim(Convert(char(9),Floor(C27A)))))) + LTrim(RTrim(Convert(char(9),Floor(C27A)))) As Registro2" +
    " INTO ##TMP_DETALLE_EPS" +
    " FROM " + @tabla +
    " WHERE CIA='" + @pch_compania + "'" +
    " And COD_EPS='" + @pvc_eps + "'" +
    Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END +
    " AND C24A>0"
    EXECUTE (@sql + @sql2 + @sql3)
    
    INSERT INTO fco_eps_mm
    SELECT Sec, Replicate('0', 5- Len(RTrim(LTrim(Convert(char(5),Sec))))) + RTrim(LTrim(Convert(char(5),Sec))) + Registro2
    FROM ##TMP_DETALLE_EPS
    
    DROP TABLE ##TMP_DETALLE_EPS
    
    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO III                 *****/
    /***********************************************************************/
    
    /* Totales para los campos del Renglon 31 */
    SELECT @sql = 
    " Select IsNull(Floor(Sum(C17A)),0) As C17A, IsNull(Floor(Sum(C24A)),0) As C24A, " +
    "  	 IsNull(Floor(Sum(C25B)),0) As C25B, IsNull(Floor(Sum(C26B)),0) As C26B, " +
    "  	 IsNull(Floor(Sum(C27A)),0) As C27A" +
    " INTO ##TMP_TOTALES_F03" +	" From " + @tabla +
    " Where CIA='" + @pch_compania + "'" +
    " And COD_EPS='" + @pvc_eps + "'" +
    Case @control_SUC WHEN '0' THEN "" ELSE " AND COD_SUC='" + @control_SUC + "'" END
    EXECUTE (@sql)
    
    SELECT @R31C3 = C17A, @R31C4 = C24A, @R31C5 = C25B, @R31C6 = C26B, @R31C7 = C27A
    FROM ##TMP_TOTALES_F03
    
    DROP TABLE ##TMP_TOTALES_F03
    
    /*******	RENGLON 31	******/
    SET @REN31 = '000313' + 
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C3))))) + LTrim(RTrim(Convert(char,@R31C3))) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C4))))) + LTrim(RTrim(Convert(char,@R31C4))) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C5))))) + LTrim(RTrim(Convert(char,@R31C5))) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C6))))) + LTrim(RTrim(Convert(char,@R31C6))) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R31C7))))) + LTrim(RTrim(Convert(char,@R31C7)))
    
    INSERT INTO fco_eps_mm VALUES (999931, @REN31)
    
    /*******	RENGLON 32	******/
    SET @nro_aut_eg = Space(10)
    SET @vlr_aut_eg = 0
    
    IF @control_SUC = '0' 
        SELECT @nro_aut_eg = IsNull(A.referencia, ' '), @vlr_aut_eg = IsNull(A.valor_1,0)
        FROM fco_ala_datos_adi A, fco_rel_sgss_da B
        WHERE A.sgss = B.sgss 
        AND A.item = B.ala_datos_adi
        AND A.tabla = @tabla
        AND A.cod_adm = @pvc_eps
        AND b.secuencia = 1
    ELSE
        SELECT @nro_aut_eg = IsNull(A.referencia, ' '), @vlr_aut_eg = IsNull(A.valor_1,0)
        FROM fco_ala_datos_adi A, fco_rel_sgss_da B
        WHERE A.sgss = B.sgss 
        AND A.item = B.ala_datos_adi
        AND A.tabla = @tabla
        AND A.cod_adm = @pvc_eps
        AND b.secuencia = 1
        AND cod_suc = @control_SUC
    
    SET @R32C4 = @R31C5
    IF @R32C4 <= 0 SET @R32C4 = @vlr_aut_eg
    SET @REN32 = '000323' + @nro_aut_eg +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R32C4))))) + LTrim(RTrim(Convert(char,@R32C4))) +
    Replicate('0', 10) + Replicate('0', 10) + Replicate('0', 10)
    
    INSERT INTO fco_eps_mm VALUES (999932, @REN32)
    
    /*******	RENGLON 33	******/
    SET @nro_aut_lm = Space(10)
    SET @vlr_aut_lm = 0
    
    IF @control_SUC = '0' 
    SELECT @nro_aut_lm = IsNull(A.referencia, ' '), @vlr_aut_lm = IsNull(A.valor_1,0)
    FROM fco_ala_datos_adi A, fco_rel_sgss_da B
    WHERE A.sgss = B.sgss 
    AND A.item = B.ala_datos_adi
    AND A.tabla = @tabla
    AND A.cod_adm = @pvc_eps
    AND b.secuencia = 2
    ELSE
    SELECT @nro_aut_lm = IsNull(A.referencia, ' '), @vlr_aut_lm = IsNull(A.valor_1,0)
    FROM fco_ala_datos_adi A, fco_rel_sgss_da B
    WHERE A.sgss = B.sgss 
    AND A.item = B.ala_datos_adi
    AND A.tabla = @tabla
    AND A.cod_adm = @pvc_eps
    AND b.secuencia = 2
    AND cod_suc = @control_SUC
    
    SET @R33C4 = @R31C6
    IF @R33C4 <= 0 SET @R33C4 = @vlr_aut_lm
    
    SET @REN33 = '000333' + @nro_aut_lm +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R33C4))))) + LTrim(RTrim(Convert(char,@R33C4))) +
    Replicate('0', 10) + Replicate('0', 10) + Replicate('0', 10)
    
    INSERT INTO fco_eps_mm VALUES (999933, @REN33)
    
    /*******	RENGLON 35	******/
    SET @R35C4=@R31C4-@R32C4-@R33C4
    SET @R35C7=@R31C7
    SET @REN35 = '000353' + Replicate('0', 10) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R35C4))))) + LTrim(RTrim(Convert(char,@R35C4))) +
    Replicate('0', 10) + Replicate('0', 10) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R35C7))))) + LTrim(RTrim(Convert(char,@R35C7)))
    
    INSERT INTO fco_eps_mm VALUES (999935, @REN35)
    
    /*******	RENGLON 36	******/
    SET @nro_meses = Space(10)
    SET @vlr_mor_sa = 0
    
    IF @control_SUC = '0' 
    SELECT @nro_meses = IsNull(A.referencia, ' '), @vlr_mor_sa = IsNull(A.valor_1,0)
    FROM fco_ala_datos_adi A, fco_rel_sgss_da B
    WHERE A.sgss = B.sgss 
    AND A.item = B.ala_datos_adi
    AND A.tabla = @tabla
    AND A.cod_adm = @pvc_eps
    AND b.secuencia = 3
    ELSE
    SELECT @nro_meses = IsNull(A.referencia, ' '), @vlr_mor_sa = IsNull(A.valor_1,0)
    FROM fco_ala_datos_adi A, fco_rel_sgss_da B
    WHERE A.sgss = B.sgss 
    AND A.item = B.ala_datos_adi
    AND A.tabla = @tabla
    AND A.cod_adm = @pvc_eps
    AND b.secuencia = 3
    AND cod_suc = @control_SUC
    
    SET @R36C4 = @vlr_mor_sa
    SET @R36C7 = 0
    SET @REN36 = '000363' + 
    Replicate('0', 10 - Len(LTrim(RTrim(@nro_meses)))) + LTrim(RTrim(@nro_meses)) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R36C4))))) + LTrim(RTrim(Convert(char,@R36C4))) +
    Replicate('0', 10) + Replicate('0', 10) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R36C7))))) + LTrim(RTrim(Convert(char,@R36C7)))
    
    INSERT INTO fco_eps_mm VALUES (999936, @REN36)
    
    /*******	RENGLON 37	******/
    SET @R37C4 = @R35C4 + @R36C4
    SET @R37C7 = @R35C7 + @R36C7
    SET @REN37 = '000373' + Replicate('0', 10) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R37C4))))) + LTrim(RTrim(Convert(char,@R37C4))) +
    Replicate('0', 10) + Replicate('0', 10) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R37C7))))) + LTrim(RTrim(Convert(char,@R37C7)))
    
    INSERT INTO fco_eps_mm VALUES (999937, @REN37)
    
    /*******	RENGLON 38	******/
    SET @nro_rad_saf = Space(10)
    SET @vlr_saf_sa = 0
    
    IF @control_SUC = '0' 
    SELECT @nro_rad_saf = IsNull(A.referencia, ' '), @vlr_saf_sa = IsNull(A.valor_1,0)
    FROM fco_ala_datos_adi A, fco_rel_sgss_da B
    WHERE A.sgss = B.sgss 
    AND A.item = B.ala_datos_adi
    AND A.tabla = @tabla
    AND A.cod_adm = @pvc_eps
    AND b.secuencia = 4
    ELSE
    SELECT @nro_rad_saf = IsNull(A.referencia, ' '), @vlr_saf_sa = IsNull(A.valor_1,0)
    FROM fco_ala_datos_adi A, fco_rel_sgss_da B
    WHERE A.sgss = B.sgss 
    AND A.item = B.ala_datos_adi
    AND A.tabla = @tabla
    AND A.cod_adm = @pvc_eps
    AND b.secuencia = 4
    AND cod_suc = @control_SUC
    
    SET @R38C4 = @vlr_saf_sa
    SET @R38C7 = 0
    SET @REN38 = '000383' + @nro_rad_saf +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R38C4))))) + LTrim(RTrim(Convert(char,@R38C4))) +
    Replicate('0', 10) + Replicate('0', 10) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R38C7))))) + LTrim(RTrim(Convert(char,@R38C7)))
    
    INSERT INTO fco_eps_mm VALUES (999938, @REN38)
    
    /*******	RENGLON 39	******/
    SET @REN39 = '000393' + Replicate('0', 10) +
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R37C4-@R38C4))))) + LTrim(RTrim(Convert(char,@R37C4-@R38C4))) +
    Replicate('0', 10) + Replicate('0', 10) + 
    Replicate('0', 10 - Len(LTrim(RTrim(Convert(char,@R37C7-@R38C7))))) + LTrim(RTrim(Convert(char,@R37C7-@R38C7)))
    
    
    INSERT INTO fco_eps_mm VALUES (999939, @REN39)
    
    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO IV                  *****/
    /***********************************************************************/
    INSERT INTO fco_eps_mm VALUES (999940, '999994')
    
END

GO
GRANT EXECUTE ON dbo.sp_fco_crea_salud_mm TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_crea_iss') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_crea_iss
GO
CREATE PROCEDURE dbo.sp_fco_crea_iss
(
    @pch_compania char(4),
    @psi_anio smallint,
    @pti_mes tinyint,
    @pvc_sucursal varchar(10),
    @pbi_generar_mm bit,
    @pbi_regenerar bit
)
/**********************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano Version FCO - ADAM V.3   ***/
/*** Descripcion: Crea tabla de autoliquidacion de aportes al ISS   ***/
/***              Metodologia SIGA - Formato Integrado              ***/
/*** Autor:       Juan Carlos Leguizamon                            ***/
/*** Fecha MF:    Junio 19 de 2001                                  ***/
/*** Fecha FCO:   Marzo 30 de 2006                                  ***/
/**********************************************************************/
AS
DECLARE    
    @vch_acum_imp char(15),
    @vch_acum_tie char(15),

    @vsy_tabla sysname,
    @vbi_existe bit,
    @vvc_sql varchar(8000),

    @vch_agr_02 char(3), /* IBC de Pension */
    @vch_agr_03 char(3), /* Aporte a Pension */
    @vch_agr_04 char(3), /* Fondo de Solidaridad Pensional */
    @vch_agr_05 char(3), /* Aporte a Salud */
    @vch_agr_08 char(3), /* Vacaciones */
    @vch_agr_09 char(3), /* Aporte a Riesgos Profesional */
    @vch_agr_10 char(3), /* Licencia de Maternidad */
    @vch_agr_11 char(3), /* Incapacidad por Enfermedad General */
    @vch_agr_12 char(3), /* Incapacidad por Accidente de Trabajo */
    @vch_agr_15 char(3), /* UPC (Aporte Unidad de Capitacion) */
    @vch_agr_16 char(3), /* IBC Salud */
    @vch_agr_17 char(3), /* IBC Riesgos Profesionales */
    @vch_agr_18 char(3), /* Licencia No Remunerada y Sanciones */
    @vch_agr_20 char(3), /* Ingresos o Aporte Sin Sueldo Basico */

    @vch_periodo char(6),

    @vvc_nro_aut varchar(10),
    @vdc_vlr_aut decimal(9,0),

    @vvc_cond_0 varchar(255), --WHERE
    @vvc_cond_1 varchar(255), --AND
    @vvc_cond_2 varchar(255), --AND
    @vvc_cond_3 varchar(255),  --AND

    @vch_var_PeT char(2), -- Variable Pensión Trabajador  
    @vch_var_PeE char(2), -- Variable Pensión Empleador  
    @vdc_tar_AFP decimal(6,5), -- Tarifa Pensión

    @vvc_iss_eps varchar(10), /* Código del ISS como EPS de los trabajadores en ADAM */
    @vvc_iss_afp varchar(10)  /* Código del ISS como AFP de los trabajadores en ADAM */
BEGIN
    /* Campos que interesan de la tabla Acumulados Mensuales (importe y tiempo) */
    SELECT @vch_acum_imp = 'acum_imp_mes_' + Right('00' + RTrim(@pti_mes), 2),
           @vch_acum_tie = 'acum_tie_mes_' + Right('00' + RTrim(@pti_mes), 2)

    /* Periodo de Cotizacion */
    SET @vch_periodo = RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2)
    
    /*** Recuperar Agrupaciones de Conceptos ***/
    SELECT @vch_agr_02 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 02),
           @vch_agr_03 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 03),
           @vch_agr_04 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 04),
           @vch_agr_05 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 05),
           @vch_agr_08 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 08),
           @vch_agr_09 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 09),
           @vch_agr_10 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 10),
           @vch_agr_11 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 11),
           @vch_agr_12 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 12),
           @vch_agr_15 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 15),
           @vch_agr_16 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 16),
           @vch_agr_17 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 17),
           @vch_agr_18 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 18),
           @vch_agr_20 = dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 20)

    /* Recueperar los códigos del ISS como EPS y AFP */
    SELECT @vvc_iss_eps = dato FROM vw_fdt_parametros x
    WHERE x.pais = 'COL' AND x.compania = @pch_compania AND x.parametro = 'otros' AND x.secuencia = 11

    SET @vvc_iss_eps = IsNull(@vvc_iss_eps, 'ISS')
    
    SELECT @vvc_iss_afp = dato FROM vw_fdt_parametros x
    WHERE x.pais = 'COL' AND x.compania = @pch_compania AND x.parametro = 'otros' AND x.secuencia = 10    

    SET @vvc_iss_afp = IsNull(@vvc_iss_afp, 'ISS')

    /*** Recuperar otros parámetros ***/
    SELECT @vch_var_PeT = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'autoliq' AND secuencia = 27  
    SELECT @vch_var_PeE = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'autoliq' AND secuencia = 28  
    SET @vdc_tar_AFP = ISNULL(dbo.fn_fco_var_nom(@pch_compania, @vch_var_PeT, 0) + dbo.fn_fco_var_nom(@pch_compania, @vch_var_PeE, 0), 0.155)  

    /*** Establecer el Nombre de la Tabla ***/
    SET @vsy_tabla = 'FCO_ISS_' + RTrim(@pch_compania) + '_' + RTrim(@psi_anio) + '_' + RTrim(@pti_mes)

    SET @vbi_existe = 0
    /*** Verificar Existencia de la Tabla ***/
    IF OBJECT_ID(@vsy_tabla) IS NOT NULL 
        SET @vbi_existe = 1 
    ELSE 
        SET @vbi_existe = 0  

    /*** Borrar datos de la tabla modelo ***/
    DELETE FCO_ISS
    
    IF @vbi_existe = 0
    BEGIN
        /*** Crear y dar permisos a la tabla de autoliquidacion ***/
        EXECUTE ('SELECT * INTO dbo.' + @vsy_tabla + ' FROM FCO_ISS')  
        /** La siguiente línea causa error cuando los usuarios no son dbowner **/
        /** sin embargo las tablas de autoliquidacion se crearan desde el cierre */
        /** por lo tanto está linea no debería ejecutarse nunca (solo en salida en vivo) */
        EXECUTE ('GRANT SELECT, UPDATE, DELETE, INSERT ON dbo.' + @vsy_tabla + ' TO PUBLIC')
    END
    
    EXEC ('SELECT COUNT(*) cuantos INTO ##tmpcuantosISS FROM ' + @vsy_tabla)
    IF (SELECT cuantos FROM ##tmpcuantosISS) = 0 SET @vbi_existe = 0  
    DROP TABLE ##tmpcuantosISS

    IF @pbi_regenerar = 1
    BEGIN
        IF LTrim(IsNull(@pvc_sucursal, '')) <> ''
            SELECT @vvc_cond_0 = " WHERE COD_SUC = '" + @pvc_sucursal + "'", -- DELETE e INSERT en depurada
                   @vvc_cond_1 = " AND SUC.dato = '" + @pvc_sucursal + "'", -- Insert General
                   @vvc_cond_2 = " AND COD_SUC = '" + @pvc_sucursal + "'", -- Novedades
                   @vvc_cond_3 = " AND sucursal = '" + @pvc_sucursal + "'"     -- Fantasmas
        ELSE
            SELECT @vvc_cond_0 = '', @vvc_cond_1 = '', @vvc_cond_2 = '', @vvc_cond_3 = ''
        
        EXECUTE ('DELETE FROM ' + @vsy_tabla + @vvc_cond_0)
    END
    ELSE
        SELECT @vvc_cond_0 = '', @vvc_cond_1 = '', @vvc_cond_2 = '', @vvc_cond_3 = ''

    IF @vbi_existe = 0 OR @pbi_regenerar = 1
    BEGIN
        /*** Insertar los valores No Depurados a la tabla FCO_ISS ***/
        SET @vvc_sql =
            " INSERT INTO FCO_ISS" +
            " SELECT am.compania, tg.trabajador," + 
            " CASE WHEN itr.es_eps = 1 THEN 'ISS' ELSE 'Otro' END, " +
            " CASE WHEN itr.es_afp = 1 THEN 'ISS' ELSE 'Otro' END, " +
            " suc.dato," +
            " tid.tipo_id C03, t.clave_unica C04, t.nombre C05," +
            " ' ' C09, ' ' C10, ' ' C11, ' ' C12, ' ' C13, ' ' C14,"+
            " C15 = CASE am.agr_conceptos WHEN '" + @vch_agr_20 + "' THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
            " C16 = CASE am.agr_conceptos WHEN '" + @vch_agr_18 + "' THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
            " C17 = CASE am.agr_conceptos WHEN '" + @vch_agr_11 + "' THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
            " C18 = CASE am.agr_conceptos WHEN '" + @vch_agr_10 + "' THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
            " C19 = CASE am.agr_conceptos WHEN '" + @vch_agr_08 + "' THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
            " ' ' C20, ' ' C21, 0 C22," +
            " C23 = CASE am.agr_conceptos WHEN '" + @vch_agr_02 + "' THEN " + @vch_acum_tie + " ELSE 0 END," +
            " C24 = Case When itr.es_eps = 1 Then CASE am.agr_conceptos WHEN '" + @vch_agr_16 + "' THEN " + @vch_acum_tie + " ELSE 0 END Else 0 End," +
            " C25 = 0," +
            " C26 = dbo.fn_fco_sueldo(tg.compania, tg.trabajador, " + RTrim(@psi_anio) + "," + RTrim(@pti_mes) + "), " +
            " C27 = 0," +
            " C28 = Case When itr.es_afp = 1 Then CASE am.agr_conceptos WHEN '" + @vch_agr_02 + "' THEN Round((" + @vch_acum_imp + "-1)/1000,0)*1000 ELSE 0 END Else 0 End," +
            " C29 = Case When itr.es_eps = 1 Then CASE am.agr_conceptos WHEN '" + @vch_agr_16 + "' THEN Round((" + @vch_acum_imp + "-1)/1000,0)*1000 ELSE 0 END Else 0 End," +
            " C30 = 0," +
            " C31 = Case When itr.es_afp = 1 Then " + RTrim(@vdc_tar_AFP) + " Else 0 End," +
            " C32 = Case When itr.es_afp = 1 Then CASE am.agr_conceptos WHEN '" + @vch_agr_03 + "' THEN Round((" + @vch_acum_imp + "-1)/100,0)*100 ELSE 0 END Else 0 End," +
            " 0 C33, 0 C34, 0 C35," +
            " C36 = Case When itr.es_afp = 1 Then CASE am.agr_conceptos WHEN '" + @vch_agr_04 + "' THEN Round((" + @vch_acum_imp + "-1)/100,0)*100 ELSE 0 END Else 0 End," +
            " 0 C37," +
            " C38 = Case When itr.es_eps = 1 Then CASE am.agr_conceptos WHEN '" + @vch_agr_05 + "' THEN Round((" + @vch_acum_imp + "-1)/100,0)*100 ELSE 0 END Else 0 End," + 
            " ' ' C39, 0 C40, ' ' C41, 0 C42," +
            " C43 = Case When itr.es_eps = 1 Then CASE am.agr_conceptos WHEN '" + @vch_agr_15 + "' THEN " + @vch_acum_imp + " ELSE 0 END Else 0 End," +
            " 0 C44, 0 C45, 0 C46, ' ' C47, ' ' C48" +
            " FROM trabajadores t" +
            " INNER JOIN trabajadores_grales tg ON tg.trabajador = t.trabajador" +
            " INNER JOIN vw_fco_iss_trabajador itr ON itr.compania = tg.compania AND itr.trabajador = tg.trabajador" +
            " INNER JOIN vw_fco_div_trabajador suc ON suc.compania = tg.compania AND suc.trabajador = tg.trabajador" +
            " INNER JOIN acumulados_mensuales am ON am.compania = tg.compania AND am.trabajador = tg.trabajador" +
            " INNER JOIN vw_fco_tid_trabajador tid ON tg.compania = tid.compania AND tg.trabajador = tid.trabajador" +
            " WHERE am.compania = '" + @pch_compania + "'" + 
              " AND am.anio = " + RTrim(@psi_anio) +
              " AND Convert(char(6), tg.fecha_ingreso, 112) <= '" + @vch_periodo + "'" + 
              " AND (tg.fecha_baja IS NULL OR Convert(char(6), tg.fecha_baja, 112) >= '" + @vch_periodo + "')" +
              " AND am.agr_conceptos IN ('" + @vch_agr_02 + "','" + @vch_agr_03 + "','" + @vch_agr_04 + "','" + @vch_agr_05 + "'," +
                                        "'" + @vch_agr_08 + "','" + @vch_agr_10 + "','" + @vch_agr_11 + "','" + @vch_agr_15 + "'," + 
                                        "'" + @vch_agr_16 + "','" + @vch_agr_18 + "','" + @vch_agr_20 + "')" + @vvc_cond_1
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla fco_iss', 16, 1)
        
        /* Inserta los valores (Depurados) a la tabla */
        SET @vvc_sql =  
        " INSERT INTO " + @vsy_tabla +
        " SELECT CIA, COD_TRAB, COD_EPS, COD_FPO, COD_SUC, C03, C04, C05," +
        " ' ' C09, ' ' C10, ' ' C11, ' ' C12, ' ' C13, ' ' C14, Max(C15)," +
        " Max(C16), Max(C17), Max(C18), Max(C19), ' ' C20, ' ' C21, 0 C22," +
        " Max(C23), Max(C24), 0 C25, Max(C26), 0 C27, Max(C28), Max(C29)," +
        " 0 C30, Max(C31), Max(C32), 0 C33, 0 C34, 0 C35, Max(C36)," +
        " 0 C37, Max(C38), ' ' C39, 0 C40, ' ' C41, 0 C42, Max(C43)," +
        " 0 C44, 0 C45, 0 C46, ' ' C47, ' ' C48" +
        " FROM FCO_ISS" + @vvc_cond_0 +
        " GROUP BY CIA, C05, C04, COD_TRAB, COD_EPS, COD_FPO, COD_SUC, C03"
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla depurada.', 16, 1)
        
        /*** INSERCION DE NOVEDADES ***/
        /* ING: INGRESO A LA COMPANIA */
        SET @vvc_sql =  
        " UPDATE " + @vsy_tabla +
        " SET C09 = 'X'" +
        " WHERE CIA = '" + @pch_compania + "' AND" +
        " EXISTS (SELECT 1 FROM trabajadores_grales" +
                " WHERE compania = cia" +
                  " AND trabajador = cod_trab" +
                  " AND Convert(Char(6), fecha_ingreso, 112) = '" + @vch_periodo + "')" +
        @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad ING', 16, 1)
        
        /* RET: RETIRO DE LA COMPANIA */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C10 = 'X'" +
        " WHERE CIA = '" + @pch_compania + "' AND" +
        " EXISTS (SELECT 1 FROM trabajadores_grales" +
                " WHERE compania = cia" +
                  " AND trabajador = cod_trab" +
                  " AND Convert(Char(6), fecha_baja, 112) = '" + @vch_periodo + "')" +
        @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad RET', 16, 1)
        
        /*** RETIROS EN EL MISMO PERIODO. CASO AVIDESA ***/
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C10 = 'X'" +
        " WHERE CIA = '" + @pch_compania + "' AND " +
        " EXISTS (SELECT 1 FROM historial_laboral" +
                " WHERE compania = cia" +
                  " AND trabajador = cod_trab" +
                  " AND codigo_incidencia = '0000000002'" +
                  " AND Convert(char(6), valor_03, 112) = '" + @vch_periodo + "')" +
        @vvc_cond_2        
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar retiros de personas que reingresaron en el periodo', 16, 1)
        
        /* TDA: INGRESO AL ISS EN PENSIONES */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C11 = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'" +
          " AND COD_FPO = 'ISS'" +
          " AND EXISTS (SELECT 1 FROM vw_fco_hist_traslados_fpo" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6), fecha_alta, 112) = '" + @vch_periodo +  "')" +
        @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad TDA (FPO)', 16, 1)
        
        /* TDA: INGRESO AL ISS EN SALUD */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C11 = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'"+
          " AND COD_EPS = 'ISS'" +
          " AND EXISTS (SELECT 1 FROM vw_fco_hist_traslados_eps" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6), fecha_alta, 112) = '" + @vch_periodo +  "')" +
                     @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad TDA (EPS)', 16, 1)
        
        /* TAA: RETIRO DEL ISS EN PENSIONES */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C12 = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'" +
          " AND COD_FPO = 'ISS'" +
          " AND EXISTS (SELECT 1 FROM fco_traslados_fpo" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6), fecha_cambio, 112) = '" + @vch_periodo + "')" +
        @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad TAA (FPO)', 16, 1)
        
        /* TAA: RETIRO DEL ISS EN SALUD */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C12 = 'X'" +
        " WHERE CIA ='" + @pch_compania + "'" +
          " AND COD_EPS = 'ISS'" +
          " AND EXISTS (SELECT 1 FROM fco_traslados_eps" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6), fecha_cambio, 112) = '" + @vch_periodo + "')" +
        @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad TAA (EPS)', 16, 1)
        
        /* VSP: CAMBIO DE SUELDO */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13 = 'X'" +
        " WHERE CIA ='" + @pch_compania + "'" +
          " AND C09 <> 'X'" +
          " AND EXISTS (SELECT 1 FROM historico_sueldos" +
                      " WHERE compania = CIA" +
                        " AND trabajador = COD_TRAB" +
                        " AND Convert(char(6), fecha, 112) = '" + @vch_periodo + "')" +
        @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad VSP', 16, 1)
        
        /* CODIGO NUEVA ADMINISTRADORA */
        /* EPS */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla + 
        " SET C47 = a.cod_super" +
        " FROM fco_administradoras a, fco_traslados_eps t" +
        " WHERE a.codigo = t.EPS_nueva" +
          " AND a.tipo = 'EPS'" +
          " AND t.EPS_actual = '" + @vvc_iss_eps + "'" +
          " AND CIA = T.compania" +
          " AND COD_TRAB = T.trabajador" +
          " AND CIA = '" + @pch_compania + "'" +
          " AND Convert(char(6), T.fecha_cambio, 112) = '" + @vch_periodo + "'" +
        @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar codigo nueva EPS', 16, 1)
        
        /* AFP */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla + 
        " SET C48 = A.cod_super" +
        " FROM fco_administradoras a, fco_traslados_fpo t" +
        " WHERE a.codigo = t.FPO_nueva" +
          " AND a.tipo = 'AFP'" +
          " AND t.FPO_actual = '" + @vvc_iss_afp + "'" +
          " AND CIA = t.compania" +
          " AND COD_TRAB = t.trabajador" +
          " AND CIA ='" + @pch_compania + "'" +
          " AND Convert(char(6), t.fecha_cambio, 112) = '" + @vch_periodo + "'" +
        @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar codigo nueva AFP', 16, 1)
        
        /* AUTORIZACIONES ENFERMEDAD GENERAL (NUMERO Y VALOR POR TRABAJADOR) */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C39 = numero, C40 = valor_total" +
        " FROM fco_autorizaciones c, fco_autorizaciones_det d" +
        " WHERE c.compania = d.compania AND c.autorizacion = d.autorizacion" +
          " AND cia = c.compania" +
          " AND cod_trab = d.trabajador" +
          " AND tipo_incapacidad = 0" +
          " AND cia = '" + @pch_compania + "'" +
          " AND periodo='" + @vch_periodo + "'" +
        @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar las autorizaciones de Incapacidades por EG', 16, 1)
        
        /* INSERCION DE LAS AUTORIZACIONES POR EG EN LA TABLA DEL PIE DE REPORTE */
        SELECT @vvc_nro_aut = Max(IsNull(numero, '')), @vdc_vlr_aut = Sum(IsNull(valor_total,0))
        FROM fco_autorizaciones
        WHERE compania = @pch_compania
          AND sucursal = @pvc_sucursal
          AND cod_entidad = @vvc_iss_eps
          AND periodo = @vch_periodo
          AND tipo_incapacidad = 0
        IF @vdc_vlr_aut > 0 
            EXECUTE sp_fco_cambio_ala_datos_adi @vsy_tabla, 4, @vvc_iss_eps, @pvc_sucursal, 0, @vvc_nro_aut, null, @vdc_vlr_aut, null
        
        /* AUTORIZACIONES LICENCIAS DE MATERNIDAD (NUMERO Y VALOR POR TRABAJADOR) */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C41 = numero, C42 = valor_total" +
        " FROM fco_autorizaciones c, fco_autorizaciones_det d" +
        " WHERE c.compania = d.compania AND c.autorizacion = d.autorizacion" +
          " AND cia = c.compania" +
          " AND cod_trab = d.trabajador" +
          " AND tipo_incapacidad = 1" +
          " AND cia = '" + @pch_compania + "'" +
          " AND periodo = '" + @vch_periodo + "'" +
        @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar las autorizaciones de licencias de maternidad', 16, 1)
        
        /* INSERCION DE LAS AUTORIZACIONES POR LM EN LA TABLA DEL PIE DE REPORTE */
        SELECT @vvc_nro_aut = Max(IsNull(numero,'')), @vdc_vlr_aut = Sum(IsNull(valor_total,0))
        FROM fco_autorizaciones
        WHERE compania = @pch_compania
          AND sucursal = @pvc_sucursal
          AND cod_entidad = @vvc_iss_eps
          AND periodo=@vch_periodo
          AND tipo_incapacidad = 1
        IF @vdc_vlr_aut > 0 
            EXECUTE sp_fco_cambio_ala_datos_adi @vsy_tabla, 4, @vvc_iss_eps, @pvc_sucursal, 1, @vvc_nro_aut, null, @vdc_vlr_aut, null

        /*** INCORPORACION DE APORTANTES FANTASMAS ***/
        IF OBJECT_ID('dbo.fco_fantasmas') IS NOT NULL
        BEGIN
            SET @vvc_sql = "INSERT INTO " + @vsy_tabla +
            " SELECT compania CIA, trabajador COD_TRAB, eps COD_EPS," +
            " afp COD_FPO, sucursal COD_SUC, Left(tipo_id, 1) C03, trabajador C04," +
            " Replace(IsNull(primer_apellido, '') + '/' + IsNull(segundo_apellido, '') + '/' + IsNull(primer_nombre, '') + ' ' + IsNull(segundo_nombre,  ''), '  ', ' ') C05," +
            " '' C09, '' C10, '' C11, '' C12, '' C13, '' C14," +
            " '' C15, '' C16, '' C17, '' C18, '' C19, '' C20, '' C21, 0 C22," +
            " Case When eps = 'ISS' Then dias_afp Else 0 End C23," + 
            " Case When eps = 'ISS' Then dias_eps Else 0 End C24, 0 C25," + 
            " salario C26, 0 C27," +
            " Case When afp = 'ISS' Then ibc_afp Else 0 End C28," +
            " Case When eps = 'ISS' Then ibc_eps Else 0 End C29," +
            " 0 C30, " + 
            " Case When afp = 'ISS' Then " + RTrim(@vdc_tar_AFP) + " Else 0 End C31," +
            " Case When afp = 'ISS' Then aporte_afp Else 0 End C32," +
            " 0 C33, 0 C34, 0 C35," + 
            " Case When afp = 'ISS' Then aporte_fsp_sol + aporte_fsp_sub Else 0 End C36," + 
            " 0 C37," + 
            " Case When eps = 'ISS' Then aporte_eps Else 0 End C38," +
            " '' C39, 0 C40, '' C41, 0 C42, 0 C43, 0 C44, 0 C45, 0 C46," +
            " '' C47, '' C48" +
            " FROM fco_fantasmas" +
            " WHERE compania ='" + @pch_compania + "'" +
              " AND (eps = '" + @vvc_iss_eps + "' OR afp = '" + @vvc_iss_afp + "')" +
              " AND RTrim(anio) + Right('00' + RTrim(mes), 2) >= " + RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2) +
            @vvc_cond_3
            EXECUTE (@vvc_sql)
            IF @@ERROR <> 0 RAISERROR ('Error al incorporar aportantes fantasmas en Salud y Pension', 16, 1)
        END
    END
    IF @pbi_generar_mm = 1
        EXECUTE sp_fco_crea_ISS_mm @pch_compania, @psi_anio, @pti_mes, @pvc_sucursal

END
GO
GRANT EXECUTE ON dbo.sp_fco_crea_iss TO PUBLIC
GO
SET QUOTED_IDENTIFIER OFF
IF OBJECT_ID('dbo.sp_fco_crea_pension') IS NOT NULL
    DROP PROCEDURE sp_fco_crea_pension
GO
CREATE PROCEDURE sp_fco_crea_pension
(        
    @pch_compania char(4),
    @psi_anio smallint,
    @pti_mes tinyint,
    @pvc_SUC varchar(10),
    @pvc_FPO varchar(10),
    @pbi_generar_mm bit,
    @pbi_regenerar bit
)        
/**********************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano Version FCO - ADAM V.3   ***/
/*** Descripcion: Crea tabla de autoliquidacion de aportes a Pensión***/
/*** Autor:       Juan Carlos Leguizamon                            ***/
/*** Fecha MF:    Julio 05 de 2001                                  ***/
/*** Fecha FCO:   Marzo 21 de 2006                                  ***/
/**********************************************************************/
AS        
DECLARE        
    @vch_acum_imp char(15),
    @vch_acum_tie char(15),
    
    @vch_periodo char(8),        
    @vch_per_ant char(8), /* JAS - 20041014 */    

    @vch_agr_02 char(5), /* IBC de Pension */
    @vch_agr_03 char(5), /* Cotizacion Obligatoria de Pension */
    @vch_agr_04 char(5), /* Fondo de Solidaridad Pensional */
    @vch_agr_08 char(5), /* Vacaciones */
    @vch_agr_10 char(5), /* Licencia de Maternidad */
    @vch_agr_11 char(5), /* Incapacidad Enfermedad General */
    @vch_agr_13 char(5), /* Cotizacion Voluntaria al FPO por parte del Empleado */
    @vch_agr_14 char(5), /* Cotizacion Voluntaria al FPO por parte del Patrono */
    @vch_agr_18 char(5), /* Licencia No Remunerada y Sanciones (Suspension temporal del contrato) */
    @vch_agr_19 char(5), /* Valor No Retenido por Aportes Voluntarios al FPO */
    @vch_agr_20 char(5), /* Ingresos o Aporte Sin Sueldo Basico (Variacion Temporal del Salario) */
        
    @vsy_tabla sysname,
    @vbi_existe bit,
    @vvc_sql varchar(3000),
            
    @vvc_cond_0 varchar(255), --WHERE        
    @vvc_cond_1 varchar(255), --AND        
    @vvc_cond_2 varchar(255), --AND        
    @vvc_cond_3 varchar(255), --AND        

    @vch_var_PeT char(2), -- Variable Pensión Trabajador  
    @vch_var_PeE char(2), -- Variable Pensión Empleador  
    @vdc_tar_AFP decimal(6,5) -- Tarifa Pensión  

BEGIN        
    /* Campos que interesan de la tabla Acumulados Mensuales (importe y tiempo) */
    SELECT @vch_acum_imp = 'acum_imp_mes_' + Right('00' + RTrim(@pti_mes), 2),
           @vch_acum_tie = 'acum_tie_mes_' + Right('00' + RTrim(@pti_mes), 2)
        
    /* Periodo de Cotizacion */        
    SET @vch_periodo = "'" + RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2) + "'"
    /* Período anterior, facilita busqueda de traslados */
    IF @pti_mes = 1
        SET @vch_per_ant = "'" + RTrim(@psi_anio - 1) + '12' + "'"
    ELSE
        SET @vch_per_ant = "'" + RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes - 1), 2) + "'"
    
    /*** Recuperar Agrupaciones de Conceptos ***/        
    SELECT @vch_agr_02 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 02) + "'",
           @vch_agr_03 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 03) + "'",
           @vch_agr_04 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 04) + "'",
           @vch_agr_08 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 08) + "'",
           @vch_agr_10 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 10) + "'",
           @vch_agr_11 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 11) + "'",
           @vch_agr_13 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 13) + "'",
           @vch_agr_14 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 14) + "'",
           @vch_agr_18 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 18) + "'",
           @vch_agr_19 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 19) + "'",
           @vch_agr_20 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 20) + "'"

    /*** Recuperar otros parámetros ***/
    SELECT @vch_var_PeT = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'autoliq' AND secuencia = 27  
    SELECT @vch_var_PeE = dato FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'autoliq' AND secuencia = 28  
    SET @vdc_tar_AFP = ISNULL(dbo.fn_fco_var_nom(@pch_compania, @vch_var_PeT, 0) + dbo.fn_fco_var_nom(@pch_compania, @vch_var_PeE, 0), 0.15)  
    
    /*** Establecer el Nombre de la Tabla ***/
    SET @vsy_tabla = 'FCO_FPO_' + RTrim(@pch_compania) + '_' + RTrim(@psi_anio) + '_' + RTrim(@pti_mes)
    
    SET @vbi_existe = 0
    /*** Verificar Existencia de la Tabla ***/
    IF OBJECT_ID(@vsy_tabla) IS NOT NULL 
        SET @vbi_existe = 1 
    ELSE 
        SET @vbi_existe = 0  
        
    /*** Borrar datos de la tabla modelo ***/        
    DELETE FCO_FPO
        
    IF @vbi_existe = 0        
    BEGIN        
        /*** Crear y dar permisos a la tabla de autoliquidacion ***/        
        EXECUTE ('SELECT * INTO dbo.' + @vsy_tabla + ' FROM FCO_FPO')                
        /** La siguiente línea causa error cuando los usuarios no son dbowner **/
        /** sin embargo las tablas de autoliquidacion se crearan desde el cierre */
        /** por lo tanto está linea no debería ejecutarse nunca (solo en salida en vivo) */
        EXECUTE ('GRANT SELECT, UPDATE, DELETE, INSERT ON dbo.' + @vsy_tabla + ' TO PUBLIC')        
    END
        
    EXEC ('SELECT COUNT(*) cuantos INTO ##tmpcuantosFPO FROM ' + @vsy_tabla)
    IF (SELECT cuantos FROM ##tmpcuantosFPO) = 0 SET @vbi_existe = 0    
    DROP TABLE ##tmpcuantosFPO

    IF @pbi_regenerar = 1        
    BEGIN        
        IF IsNull(LTrim(@pvc_SUC), '') <> ''
            SELECT @vvc_cond_0 = " WHERE COD_SUC = '" + @pvc_SUC + "' AND COD_FPO = '" + @pvc_FPO + "'", -- DELETE e INSERT en depurada
                   @vvc_cond_1 = " AND SUC.dato = '" + @pvc_SUC + "' AND FPO.dato = '" + @pvc_FPO + "'", -- Insert General
                   @vvc_cond_2 = " AND COD_SUC = '" + @pvc_SUC + "' AND COD_FPO = '" + @pvc_FPO + "'", -- Novedades
                   @vvc_cond_3 = " AND sucursal = '" + @pvc_SUC + "' AND AFP = '" + @pvc_FPO + "'" -- Fantasmas
        ELSE
            SELECT @vvc_cond_0 = " WHERE COD_FPO = '" + @pvc_FPO + "'", -- DELETE e INSERT en depurada        
                   @vvc_cond_1 = " AND FPO.dato = '" + @pvc_FPO + "'", -- Insert General        
                   @vvc_cond_2 = " AND COD_FPO = '" + @pvc_FPO + "'", -- Novedades        
                   @vvc_cond_3 = " AND AFP = '" + @pvc_FPO + "'" -- Fantasmas        

        EXECUTE ('DELETE FROM ' + @vsy_tabla + @vvc_cond_0)        
    END
    ELSE
        SELECT @vvc_cond_0 = '', @vvc_cond_1 = '', @vvc_cond_2 = '', @vvc_cond_3 = ''
        
    IF @vbi_existe = 0 OR @pbi_regenerar = 1        
    BEGIN                
        /* Insertar los valores No Depurados a la tabla modelo (FCO_FPO) */        
        SET @vvc_sql =
        " INSERT INTO FCO_FPO" +
        " SELECT am.compania, tg.trabajador, fpo.dato, suc.dato," + 
        " tid.tipo_id As C11A, t.clave_unica As C11B, t.nombre As C12ABC," +
        " ' ' As C13A, ' ' As C13B, ' ' As C13C, ' ' As C13D, ' ' As C13E, ' ' As C13F," +
        " C13G = CASE am.agr_conceptos WHEN " + @vch_agr_20 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13H = CASE am.agr_conceptos WHEN " + @vch_agr_18 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13I = CASE am.agr_conceptos WHEN " + @vch_agr_11 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13J = CASE am.agr_conceptos WHEN " + @vch_agr_10 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13K = CASE am.agr_conceptos WHEN " + @vch_agr_08 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " ' ' C13L," +
        " C14A = CASE am.agr_conceptos WHEN " + @vch_agr_02 + " THEN " + @vch_acum_tie + " ELSE 0 END," +
        " C15A = dbo.fn_fco_sueldo(tg.compania, tg.trabajador, " + RTrim(@psi_anio) + "," + RTrim(@pti_mes) + "), " +
        " C17A = CASE am.agr_conceptos WHEN " + @vch_agr_02 + " THEN Round((" + @vch_acum_imp + "-1)/1000,0)*1000 ELSE 0 END," +        
        " C18A = " + RTrim(@vdc_tar_AFP) + "," +
        " C19A = CASE am.agr_conceptos WHEN " + @vch_agr_03 + " THEN Round((" + @vch_acum_imp + "-1)/100,0)*100 ELSE 0 END," +
        " C20A = CASE am.agr_conceptos WHEN " + @vch_agr_13 + " THEN " + @vch_acum_imp + " ELSE 0 END," +
        " C20B = CASE am.agr_conceptos WHEN " + @vch_agr_14 + " THEN " + @vch_acum_imp + " ELSE 0 END," +
        " C22A = CASE am.agr_conceptos WHEN " + @vch_agr_04 + " THEN Round((" + @vch_acum_imp + "-1)/100,0)*100 ELSE 0 END," +
        " C23A = CASE am.agr_conceptos WHEN " + @vch_agr_19 + " THEN " + @vch_acum_imp + " ELSE 0 END" +
        " FROM trabajadores t" +
        " INNER JOIN trabajadores_grales tg ON tg.trabajador = t.trabajador"+
        " INNER JOIN vw_fco_fpo_trabajador fpo ON fpo.compania = tg.compania AND fpo.trabajador = tg.trabajador" +
        " INNER JOIN vw_fco_div_trabajador suc ON suc.compania = tg.compania AND suc.trabajador = tg.trabajador" +
        " INNER JOIN acumulados_mensuales am ON am.compania = tg.compania AND am.trabajador = tg.trabajador" +
        " INNER JOIN vw_fco_tid_trabajador tid ON tg.compania = tid.compania AND tg.trabajador = tid.trabajador" +
        " WHERE tg.compania = '" + @pch_compania + "'" +
          " AND am.anio =" + RTrim(@psi_anio) +
          " AND Convert(char(6), tg.fecha_ingreso, 112) <= " + @vch_periodo +
          " AND (tg.fecha_baja IS NULL OR Convert(char(6), tg.fecha_baja, 112) >= " + @vch_periodo + ")" +
          " AND am.agr_conceptos IN (" + @vch_agr_02 + "," + @vch_agr_03 + "," + @vch_agr_04 + "," + @vch_agr_08 + "," +
                                         @vch_agr_10 + "," + @vch_agr_11 + "," + @vch_agr_13 + "," + @vch_agr_14 + "," + 
                                         @vch_agr_18 + "," + @vch_agr_19 + "," + @vch_agr_20 + ")" + 
        @vvc_cond_1
        
        EXECUTE (@vvc_sql)        
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla MF_FPO', 16, 1)
        
        /* Inserta los valores (Depurados) a la tabla */        
        SET @vvc_sql = "INSERT INTO " + @vsy_tabla +
        " SELECT CIA, COD_TRAB, COD_FPO, COD_SUC, C11A, C11B, C12ABC," +
        " ' ' C13A, ' ' C13B, ' ' C13C, ' ' C13D, ' ' C13E, ' ' C13F, Max(C13G)," +
        " Max(C13H), Max(C13I), Max(C13J), Max(C13K), ' ' C13L, Max(C14A), Max(C15A)," +
        " Max(C17A), Max(C18A), Max(C19A), Max(C20A), Max(C20B), Max(C22A), Max(C23A)" +
        " FROM FCO_FPO" + @vvc_cond_0 +
        " GROUP BY CIA, C12ABC, C11B, COD_TRAB, COD_FPO, COD_SUC, C11A"
        
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla del periodo', 16, 1)
        
        /*** NOVEDADES ***/
        
        /* ING: INGRESO A LA COMPANIA */        
        SET @vvc_sql = "UPDATE " + @vsy_tabla +
         " SET C13A = 'X'" +
         " WHERE cia = '" + @pch_compania + "'" +
           " AND EXISTS (SELECT 1 FROM trabajadores_grales" +
                        " WHERE compania   = cia" +
                          " AND trabajador = cod_trab" +
                          " AND Convert(char(6),fecha_ingreso,112) = " + @vch_periodo + ")" + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad ING', 16, 1)
        
        /* RET: RETIRO DE LA COMPANIA */        
        SET @vvc_sql = "UPDATE " + @vsy_tabla +
        " SET C13B = 'X'" +
        " WHERE cia = '" + @pch_compania + "'" +        
          " AND EXISTS (SELECT 1 FROM trabajadores_grales" +        
                      " WHERE compania = cia" +
                      " AND trabajador = cod_trab" +
                      " AND Convert(char(6),fecha_baja,112) = " + @vch_periodo + ")" + @vvc_cond_2        
        EXECUTE (@vvc_sql)                
        
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad RET', 16, 1)
        
        /* RET: RETIRO DE LA COMPANIA EN PERIODOS ANTERIORES */
        /* Por si lo dieron de baja fuera de tiempo */
        SET @vvc_sql = "UPDATE " + @vsy_tabla +
        " SET C13B = 'X'" +
        " WHERE cia = '" + @pch_compania + "'" +
          " AND EXISTS (SELECT 1 FROM trabajadores_grales" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6),fecha_baja,112) < " + @vch_periodo + ") "  + 
          " AND C17A > 0 " + @vvc_cond_2
        EXECUTE (@vvc_sql)  
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad RET', 16, 1)

        /*** RET: RETIROS EN EL MISMO PERIODO. CASO AVIDESA ***/        
        SET @vvc_sql = "UPDATE " + @vsy_tabla +        
             " SET C13B = 'X'" +        
             " WHERE cia ='" + @pch_compania + "' AND "+        
             " EXISTS (SELECT 1 FROM historial_laboral" +        
                     " WHERE compania = cia AND " +        
                     " trabajador = cod_trab AND" +        
                     " codigo_incidencia = '0000000002' AND" +        
                     " Convert(char(6), valor_03, 112) = " + @vch_periodo + ")" + @vvc_cond_2        
        EXECUTE (@vvc_sql)        
        IF @@ERROR <> 0 RAISERROR ('Error al insertar retiros de personas que reingresaron en el periodo', 16, 1)        
        
        /* TDA: INGRESO A ESTE FONDO */        
        /* Colocar la novedad siempre y cuando se haya registrado el cambio en TRASLADOS_FPO */    
        /* en el mes anterior - JAS - 20041014 */    
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +        
        " SET C13C = 'X'" +        
        " WHERE cia = '" + @pch_compania + "'" + 
          " AND C13A <> 'X'" + 
          " AND EXISTS (SELECT 1 FROM vw_fco_hist_traslados_fpo" + 
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6),fecha_alta,112) = " + @vch_periodo + ")" +
          " AND EXISTS (SELECT 1 FROM fco_traslados_fpo " +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6), fecha_cambio, 112) = " + @vch_per_ant + ") " + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad TDA', 16, 1)
        
        /* TAA: RETIRO DE ESTE FONDO */        
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13D = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'" +
          " AND EXISTS (SELECT 1 FROM fco_traslados_fpo" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6),fecha_cambio,112) = " + @vch_periodo + ")" + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad TAA', 16, 1)
        
        /* VSP: VARIACION DEL SALARIO */
        SET @vvc_sql =
        " UPDATE " + @vsy_tabla +
        " SET C13E = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'" +
          " AND C13A <> 'X'" +
          " AND EXISTS (SELECT 1 FROM historico_sueldos" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6), fecha, 112) = " + @vch_periodo + ")" + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad VSP', 16, 1)
        
        /*** INCORPORACION DE APORTANTES FANTASMAS ***/        
        IF OBJECT_ID('dbo.fco_fantasmas') IS NOT NULL
        BEGIN
            SET @vvc_sql = 
            " INSERT INTO " + @vsy_tabla +
            " SELECT compania, trabajador, afp, sucursal, Left(tipo_id, 1), trabajador," +
            " Replace(IsNull(primer_apellido, '') + '/' + IsNull(segundo_apellido, '') + '/' + IsNull(primer_nombre, '') + ' ' + IsNull(segundo_nombre,  ''), '  ', ' ') C12ABC," +
            " '' C13A, '' C13B, '' C13C, '' C13D, '' C13E, '' C13F," +
            " '' C13G, '' C13H, '' C13I, '' C13J, '' C13K, '' C13L, dias_afp C14A," +
            " salario C15A, ibc_afp C17A, " + RTrim(@vdc_tar_AFP) + " C18A, aporte_afp C19A, 0 C20A, 0 C20B," +
            " aporte_FSP_sol + aporte_FSP_sub C22A, 0 C23A" +
            " FROM fco_fantasmas" +
            " WHERE compania ='" + @pch_compania + "'" +
              " AND IsNull(AFP, '') <> ''" +
              " AND (anio - 2000)*12 + mes >= " + RTrim((@psi_anio - 2000)*12 + @pti_mes) +
            @vvc_cond_3
            EXECUTE (@vvc_sql)        
            IF @@ERROR <> 0 RAISERROR ('Error al incorporar aportantes fantasmas', 16, 1)
        END
        
    END
    
    IF @pbi_generar_mm = 1        
        EXECUTE sp_fco_crea_pension_mm @pch_compania, @psi_anio, @pti_mes, @pvc_SUC, @pvc_FPO    
END        
GO
GRANT EXECUTE ON dbo.sp_fco_crea_pension TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_crea_riesgos') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_crea_riesgos
GO
CREATE PROCEDURE dbo.sp_fco_crea_riesgos
(                      
    @pch_compania varchar(4),
    @psi_anio smallint,
    @pti_mes tinyint,
    @pvc_suc varchar(10),
    @pbi_generar_mm bit,
    @pbi_regenerar bit
)                      
/**********************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano Version FCO - ADAM V.3   ***/
/*** Descripcion: Crea tabla de autoliquidacion de aportes a Riesgos***/
/*** Autor:       Juan Carlos Leguizamon                            ***/
/*** Fecha MF:    Julio 10 de 2001                                  ***/
/*** Fecha FCO:   Marzo 24 de 2006                                  ***/
/*** Ultima Revisión: JCL. Julio 5/06. Control de fechas de ingreso y baja ***/
/**********************************************************************/
AS
DECLARE
    @vch_acum_imp char(15),
    @vch_acum_tie char(15),
    
    @vch_periodo char(8),
    
    @vch_agr_08 char(5), /* Vacaciones */
    @vch_agr_09 char(5), /* Cotizacion Obligatoria Riesgos Profesionales */
    @vch_agr_10 char(5), /* Licencia de Maternidad */
    @vch_agr_11 char(5), /* Incapacidad Enfermedad General */
    @vch_agr_12 char(5), /* Incapacidad por Accidente de Trabajo */
    @vch_agr_17 char(5), /* IBC Riesgos Profesionales */
    @vch_agr_18 char(5), /* Licencia No Remunerada y Sanciones (Suspension temporal del contrato) */
    @vch_agr_20 char(5), /* Ingresos o Aporte Sin Sueldo Basico (Variacion Temporal del Salario) */
    
    @vsy_tabla sysname,
    @vbi_existe bit,
    @vvc_sql varchar(3000),
    
    @vvc_nro_aut varchar(10),
    @vdc_vlr_aut decimal(9,0),
    
    @vvc_cond_0 varchar(255), --WHERE
    @vvc_cond_1 varchar(255), --AND
    @vvc_cond_2 varchar(255), --AND
    @vvc_cond_3 varchar(255) --AND

BEGIN
    /* Campos que interesan de la tabla Acumulados Mensuales (importe y tiempo) */
    SELECT @vch_acum_imp = 'acum_imp_mes_' + Right('00' + RTrim(@pti_mes), 2),
           @vch_acum_tie = 'acum_tie_mes_' + Right('00' + RTrim(@pti_mes), 2)
    
    /* Período de acumulados */
    SET @vch_periodo = "'" + RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2) + "'"
        
    /*** Recuperar Agrupaciones de Conceptos ***/
    SELECT @vch_agr_08 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 08) + "'",
           @vch_agr_09 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 09) + "'",
           @vch_agr_10 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 10) + "'",
           @vch_agr_11 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 11) + "'",
           @vch_agr_12 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 12) + "'",
           @vch_agr_17 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 17) + "'",
           @vch_agr_18 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 18) + "'",
           @vch_agr_20 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 20) + "'"
    
    /*** Establecer el Nombre de la Tabla ***/
    SET @vsy_tabla = 'FCO_ARP_' + RTrim(@pch_compania) + '_' + RTrim(@psi_anio) + '_' + RTrim(@pti_mes)
    
    SET @vbi_existe = 0
    /*** Verificar Existencia de la Tabla ***/
    IF OBJECT_ID(@vsy_tabla) IS NOT NULL
        SET @vbi_existe = 1 
    ELSE 
        SET @vbi_existe = 0  
    
    /*** Borrar datos de la tabla modelo ***/
    DELETE FCO_ARP
    
    IF @vbi_existe = 0
    BEGIN
        /*** Crear y dar permisos a la tabla de autoliquidacion ***/
        EXECUTE ('SELECT * INTO dbo.' + @vsy_tabla + ' FROM FCO_ARP')  
        /** La siguiente línea causa error cuando los usuarios no son dbowner **/
        /** sin embargo las tablas de autoliquidacion se crearan desde el cierre */
        /** por lo tanto está linea no debería ejecutarse nunca (solo en salida en vivo) */
        EXECUTE ('GRANT SELECT, UPDATE, DELETE, INSERT ON dbo.' + @vsy_tabla + ' TO PUBLIC')
    END
    
    EXEC ('SELECT COUNT(*) cuantos INTO ##tmpcuantosARP FROM ' + @vsy_tabla)
    IF (SELECT cuantos FROM ##tmpcuantosARP) = 0 SET @vbi_existe = 0  
    DROP TABLE ##tmpcuantosARP

    IF @pbi_regenerar = 1
    BEGIN
        IF IsNull(LTrim(@pvc_SUC), '') <> ''
            SELECT @vvc_cond_0 = " WHERE COD_SUC = '" + @pvc_SUC + "'", -- DELETE e INSERT en depurada
                   @vvc_cond_1 = " AND SUC.dato = '" + @pvc_SUC + "'", -- Insert General
                   @vvc_cond_2 = " AND COD_SUC = '" + @pvc_SUC + "'", -- Novedades
                   @vvc_cond_3 = " AND SUC = '" + @pvc_SUC + "'" -- Fantasmas
        ELSE
            SELECT @vvc_cond_0 = '', @vvc_cond_1 = '', @vvc_cond_2 = '', @vvc_cond_3 = ''

        EXECUTE ('DELETE FROM ' + @vsy_tabla + @vvc_cond_0)
    END
    ELSE
        SELECT @vvc_cond_0 = '', @vvc_cond_1 = '', @vvc_cond_2 = '', @vvc_cond_3 = ''
        
    IF @vbi_existe = 0 OR @pbi_regenerar = 1                      
    BEGIN                          
        /* Insertar los valores No Depurados a la tabla modelo (FCO_ARP) */
        SET @vvc_sql =
        " INSERT INTO FCO_ARP" +
        " SELECT tg.compania, tg.trabajador, suc.dato, " +
        " tid.tipo_id As C11A, t.clave_unica As C11B, t.nombre As C12ABC," +
        " ' ' As C13A, ' ' As C13B, ' ' As C13C, ' ' As C13D," +
        " C13E = CASE am.agr_conceptos WHEN " + @vch_agr_20 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13F = CASE am.agr_conceptos WHEN " + @vch_agr_18 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13G = CASE am.agr_conceptos WHEN " + @vch_agr_11 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13H = CASE am.agr_conceptos WHEN " + @vch_agr_10 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13I = CASE am.agr_conceptos WHEN " + @vch_agr_08 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " ' ' As C13J," +
        " C13K = CASE am.agr_conceptos WHEN " + @vch_agr_12 + " THEN " + @vch_acum_tie + " ELSE 0 END," +
        " C14A = CASE am.agr_conceptos WHEN " + @vch_agr_17 + " THEN " + @vch_acum_tie + " ELSE 0 END," +
        " C15A = dbo.fn_fco_sueldo(tg.compania, tg.trabajador, " + RTrim(@psi_anio) + "," + RTrim(@pti_mes) + "), " +
        " C17A = CASE am.agr_conceptos WHEN " + @vch_agr_17 + " THEN Round((" + @vch_acum_imp + "-1)/1000,0)*1000 ELSE 0 END," +
        " dbo.fn_fco_tarifa_ARP(tg.compania, tg.trabajador) As C28A," +
        " dbo.fn_fco_centro_trabajo(tg.compania, tg.trabajador) As C28B," +
        " C29A = CASE am.agr_conceptos WHEN " + @vch_agr_09 + " THEN Round((" + @vch_acum_imp + "-1)/100,0)*100 ELSE 0 END," +
        " ' ' C30A, ' ' C30B," +
        " C32B = CASE am.agr_conceptos WHEN " + @vch_agr_12 + " THEN " + @vch_acum_imp + " ELSE 0 END" +
        " FROM trabajadores t" +
        " INNER JOIN trabajadores_grales tg ON t.trabajador = tg.trabajador"+                      
        " INNER JOIN vw_fco_div_trabajador suc ON suc.compania = tg.compania AND suc.trabajador = tg.trabajador" +
        " INNER JOIN acumulados_mensuales am ON am.compania = tg.compania AND am.trabajador = tg.trabajador" +
        " INNER JOIN vw_fco_tid_trabajador tid ON tg.compania = tid.compania AND tg.trabajador = tid.trabajador" +
        " WHERE tg.compania = '" + @pch_compania + "'" +
          " AND am.anio = " + RTrim(@psi_anio) +
          " AND Convert(char(6), tg.fecha_ingreso, 112) <= " + @vch_periodo +
          " AND (tg.fecha_baja IS NULL OR Convert(char(6), tg.fecha_baja, 112) >= " + @vch_periodo + ")" +
          " AND am.agr_conceptos IN (" + @vch_agr_08 + "," + @vch_agr_09 + "," + @vch_agr_10 + "," + @vch_agr_11 + "," + 
                                         @vch_agr_12 + "," + @vch_agr_17 + "," + @vch_agr_18 + "," + @vch_agr_20 + ")" + 
        @vvc_cond_1                      

        EXECUTE (@vvc_sql)                      
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla FCO_ARP', 16, 1)
    
        /* Inserta los valores (Depurados) a la tabla */                      
        SET @vvc_sql =
        " INSERT INTO " + @vsy_tabla +
        " SELECT CIA, COD_TRAB, COD_SUC, C11A, C11B, C12ABC," +
        " ' ' C13A, ' ' C13B, ' ' C13C, ' ' C13D, Max(C13E), Max(C13F), Max(C13G)," +
        " Max(C13H), Max(C13I), ' ' C13J, Max(C13K), Max(C14A), Max(C15A), Max(C17A)," +
        " 0 C28A, Max(C28B), Max(C29A), ' ' C30A, ' ' C30B, Max(C32B)" +
        " FROM FCO_ARP" + @vvc_cond_0 +
        " GROUP BY CIA, C12ABC, C11B, COD_TRAB, COD_SUC, C11A"
        EXECUTE (@vvc_sql)                      
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla del período', 16, 1)
        
        /*** NOVEDADES ***/                      
    
        /* ING: INGRESO A LA COMPANIA */                      
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13A = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'" +
          " AND EXISTS (SELECT 1 FROM trabajadores_grales" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +                      
                        " AND Convert(char(6),fecha_ingreso,112) = " + @vch_periodo + ")" + @vvc_cond_2                      
        EXECUTE (@vvc_sql)                        
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad ING', 16, 1)
        
        /* RET: RETIRO DE LA COMPANIA */                      
        SET @vvc_sql =
        " UPDATE "+@vsy_tabla +
        " SET C13B = 'X'" +
        " WHERE CIA = '"+@pch_compania+"'" +
        "   AND EXISTS (SELECT 1 FROM trabajadores_grales" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6),fecha_baja,112) = " + @vch_periodo + ")" +
        /* Anexar que el trabajador tenga valor reportado en ARP - JAS 20040316 */                
        " AND C17A > 0 " + @vvc_cond_2        
        EXECUTE (@vvc_sql)                        
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad RET', 16, 1)

        /* RET: RETIRO DE LA COMPANIA EN PERIODOS ANTERIORES */
        /* Por si lo dieron de baja fuera de tiempo */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13B = 'X'" +
        " WHERE cia = '" + @pch_compania + "'" +
          " AND EXISTS (SELECT 1 FROM trabajadores_grales" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6),fecha_baja,112) < " + @vch_periodo + ") "  + 
          " AND C17A > 0 " + @vvc_cond_2
        EXECUTE (@vvc_sql)  
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad RET', 16, 1)
    
        /*** RET: RETIROS EN EL MISMO PERIODO. CASO AVIDESA ***/                      
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +                      
        " SET C13B = 'X'" +                      
        " WHERE CIA ='" + @pch_compania + "'"+
        " AND EXISTS (SELECT 1 FROM historial_laboral" +
                    " WHERE compania = cia" +
                      " AND trabajador = cod_trab" +
                      " AND codigo_incidencia = '0000000002'" +
                      " AND Convert(char(6), valor_03, 112) = " + @vch_periodo + ")" + @vvc_cond_2                      
        EXECUTE (@vvc_sql)                      
        IF @@ERROR <> 0 RAISERROR ('Error al insertar retiros de personas que reingresaron en el periodo', 16, 1)
        
        /* VSP: VARIACION DEL SALARIO */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13C = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'" +
          " AND C13A <> 'X'" +
          " AND EXISTS (SELECT 1 FROM historico_sueldos" +
                      " WHERE compania   = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(Char(6),fecha,112) = " + @vch_periodo + ")" + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la novedad VSP', 16, 1)
    
        /* VCT - CAMBIO DE CENTRO DE TRABAJO - */                     
        /* Registrar la novedad siempre y cuando no sea un ingreso - JAS - 20041014 */      
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13J = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'" +
          " AND C13A <> 'X'" +
          " AND EXISTS (SELECT 1 FROM vw_fco_hist_traslados_ctr" +
                      " WHERE compania   = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6), fecha_alta, 112)= " + @vch_periodo + ")" + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la novedad VCT', 16, 1)
    
        /* CODIGO NUEVA ADMINISTRADORA */                      
        /* EPS */                      
        SET @vvc_sql =
        " UPDATE " + @vsy_tabla +
        " SET C30A = a.cod_super" +
        " FROM vw_fco_administradoras a, fco_traslados_eps t" +
        " WHERE a.codigo = t.EPS_nueva" +
          " AND a.tipo = 'EPS'" +
          " AND CIA = t.compania" +
          " AND COD_TRAB = t.trabajador" +
          " AND CIA ='" + @pch_compania + "'" +
          " AND Convert(char(6), t.fecha_cambio, 112) = " + @vch_periodo + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar codigo nueva EPS', 16, 1)
    
        /* AFP */                      
        SET @vvc_sql =
        " UPDATE " + @vsy_tabla +
        " SET C30B = a.cod_super" +
        " FROM vw_fco_administradoras a, fco_traslados_fpo t" +
        " WHERE a.codigo = t.FPO_nueva" +
          " AND a.tipo = 'AFP'" +
          " AND CIA = t.compania" +
          " AND COD_TRAB = t.trabajador" +
          " AND CIA ='" + @pch_compania + "'" +
          " AND Convert(char(6), t.fecha_cambio, 112) = " + @vch_periodo + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar codigo nueva AFP', 16, 1)
    
        /* INSERCION DE LAS AUTORIZACIONES POR EP y AT EN LA TABLA DEL PIE DE REPORTE */                      
        SELECT @vvc_nro_aut = Max(numero), @vdc_vlr_aut = Sum(valor_total)
        FROM fco_autorizaciones
        WHERE compania = @pch_compania
          AND sucursal = @pvc_suc
          AND tipo_entidad = 1
          AND periodo = SubString(@vch_periodo,2,6)

        IF IsNull(@vdc_vlr_aut , 0) > 0
            EXECUTE sp_fco_cambio_ala_datos_adi @vsy_tabla, 2, 'ARP', @pvc_suc, 2, @vvc_nro_aut, @vdc_vlr_aut, null, null
    
        /*** INCORPORACION DE APORTANTES FANTASMAS ***/
        IF OBJECT_ID('dbo.fco_fantasmas') IS NOT NULL
        BEGIN
            SET @vvc_sql =
            "INSERT INTO " + @vsy_tabla +
            " SELECT compania CIA, trabajador COD_TRAB," +
            " sucursal COD_SUC, Left(tipo_id, 1) C11A, trabajador C11B," +
            " Replace(IsNull(primer_apellido, '') + '/' + IsNull(segundo_apellido, '') + '/' + IsNull(primer_nombre, '') + ' ' + IsNull(segundo_nombre,  ''), '  ', ' ') C12ABC, "+
            " '' C13A, '' C13B, '' C13C, '' C13D, '' C13E, '' C13F," +
            " '' C13G, '' C13H, '' C13I, '' C13J, 0 C13K, dias_arp C14A," +
            " salario C15A, ibc_arp C17A, 0 C28A, 0 C28B, aporte_arp C29A," +
            " '' C30A, '' C30B, 0 C32B" +
            " FROM fco_fantasmas" +
            " WHERE compania ='" + @pch_compania + "'" +
            "   AND IsNull(dias_arp, 0) > 0 AND IsNull(aporte_arp, 0) > 0" +
            "   AND (anio - 2000) * 12 + mes >= " + RTrim((@psi_anio - 2000) * 12 + @pti_mes) +
            @vvc_cond_3
            EXECUTE (@vvc_sql)
            IF @@ERROR <> 0 RAISERROR ('Error al incorporar aportantes fantasmas', 16, 1)
        END        
    END                      

  /* Insertar en la tabla MF_ARP_TOTAL, el número de trabajadores - JAS 20040415 */        
/*
    declare @vdc_nro_trab smallint

   DELETE FROM dbo.MF_ARP_TOTAL WHERE compania = @pch_compania AND anio = @psi_anio and mes = @pti_mes              
              
   SET @vvc_sql = "INSERT INTO dbo.MF_ARP_TOTAL SELECT '" + @pch_compania + "', " + CONVERT(VARCHAR, @psi_anio) + ", " +               
              CONVERT(VARCHAR, @pti_mes) + ", COUNT(DISTINCT C12ABC) FROM " + @vsy_tabla + " GROUP BY C12ABC " +              
              "HAVING NOT (MAX(ISNULL(C13A, ' ')) <> 'X' AND MAX(ISNULL(C13B, ' ')) <> 'X' AND " +              
              "MAX(ISNULL(C13C, ' ')) <> 'X' AND MAX(ISNULL(C13D, ' ')) <> 'X' AND " +              
              "MAX(ISNULL(C13E, ' ')) <> 'X' AND MAX(ISNULL(C13F, ' ')) <> 'X' AND " +              
              "MAX(ISNULL(C13G, ' ')) <> 'X' AND MAX(ISNULL(C13H, ' ')) <> 'X' AND " +              
              "MAX(ISNULL(C13I, ' ')) <> 'X' AND MAX(ISNULL(C13J, ' ')) <> 'X' AND " +              
              "SUM(ISNULL(C14A, 0)) = 0 AND SUM(ISNULL(C17A, 0)) = 0 AND " +              
              "SUM(ISNULL(C29A, 0)) = 0 AND SUM(ISNULL(C13K, 0)) = 0)"              
   EXECUTE (@vvc_sql)              
  SELECT               
    @vdc_nro_trab = SUM(total)              
  FROM              
    dbo.MF_ARP_TOTAL               
  WHERE               
    compania = @pch_compania               
    AND anio = @psi_anio               
    AND mes = @pti_mes              
              
  DELETE FROM               
    dbo.MF_ARP_TOTAL               
  WHERE               
    compania = @pch_compania               
    AND anio = @psi_anio               
    AND mes = @pti_mes              
              
   SET @vvc_sql = "INSERT INTO dbo.MF_ARP_TOTAL VALUES ('" + @pch_compania + "', " + CONVERT(VARCHAR, @psi_anio) + ", " +               
              CONVERT(VARCHAR, @pti_mes) + ", " + CONVERT(VARCHAR, @vdc_nro_trab) + ")"              
   EXECUTE (@vvc_sql)              
*/    
    
    IF @pbi_generar_mm = 1
        EXEC sp_fco_crea_riesgos_mm @pch_compania, @psi_anio, @pti_mes, @pvc_suc                      
END
GO
GRANT EXECUTE ON dbo.sp_fco_crea_riesgos TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_crea_salud') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_crea_salud
GO
CREATE PROCEDURE dbo.sp_fco_crea_salud
(
    @pch_compania char(4),
    @psi_anio smallint,
    @pti_mes tinyint,
    @pvc_suc varchar(10),
    @pvc_EPS varchar(10),
    @pbi_generar_mm bit,
    @pbi_regenerar bit
)
/**********************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano Version FCO - ADAM V.3   ***/
/*** Descripcion: Crea tabla de autoliquidacion de aportes a Salud  ***/
/*** Autor:       Juan Carlos Leguizamon                            ***/
/*** Fecha MF:    Junio 29 de 2001                                  ***/
/*** Fecha FCO:   Marzo 21 de 2006                                  ***/
/**********************************************************************/
AS
DECLARE
    @vch_acum_imp char(15),
    @vch_acum_tie char(15),
    
    @vch_periodo char(8),
    @vch_per_ant char(8),

    @vch_agr_05 char(5), /* Cotización Obligatoria de Salud */
    @vch_agr_08 char(5), /* Vacaciones */
    @vch_agr_10 char(5), /* Licencia de Maternidad */
    @vch_agr_11 char(5), /* Incapacidad por Enfermedad General */
    @vch_agr_15 char(5), /* UPC Adicional (Aporte Unidad de Capitacion) */
    @vch_agr_16 char(5), /* IBC Salud */
    @vch_agr_18 char(5), /* Licencia No Remunerada y Sanciones (Suspension temporal del contrato) */
    @vch_agr_20 char(5), /* Ingresos o Aporte Sin Sueldo Basico (Variacion Temporal del Salario) */
    
    @vsy_tabla sysname,
    @vbi_existe bit,
    @vvc_sql varchar(3000),
    
    @vvc_cod_eps varchar(10),
    @vvc_cod_suc varchar(10),
    @vvc_nro_aut varchar(10),
    @vdc_vlr_aut decimal(9,0),
    
    @vvc_cond_0 varchar(255), --WHERE
    @vvc_cond_1 varchar(255), --AND
    @vvc_cond_2 varchar(255), --AND
    @vvc_cond_3 varchar(255)  --AND    
    
BEGIN
    /* Campos que interesan de la tabla Acumulados Mensuales (importe y tiempo) */
    SELECT @vch_acum_imp = 'acum_imp_mes_' + Right('00' + RTrim(@pti_mes), 2),
           @vch_acum_tie = 'acum_tie_mes_' + Right('00' + RTrim(@pti_mes), 2)

    /* Período de acumulados (anterior al de cotizacion) */
    SET @vch_periodo = "'" + RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2) + "'"
    /* Período anterior, facilita busqueda de traslados */
    IF @pti_mes = 1
        SET @vch_per_ant = "'" + RTrim(@psi_anio - 1) + '12' + "'" -- JCL FEB-05-07 FALTABA LA COMILLA
    ELSE
        SET @vch_per_ant = "'" + RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes - 1), 2) + "'"
        
    /*** Recuperar Agrupaciones de Conceptos ***/
    SELECT @vch_agr_05 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 05) + "'",
           @vch_agr_08 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 08) + "'",
           @vch_agr_10 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 10) + "'",
           @vch_agr_11 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 11) + "'",
           @vch_agr_15 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 15) + "'",
           @vch_agr_16 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 16) + "'",
           @vch_agr_18 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 18) + "'",
           @vch_agr_20 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 20) + "'"
    
    /*** Establecer el Nombre de la Tabla ***/
    SET @vsy_tabla = 'FCO_EPS_' + RTrim(@pch_compania) + '_' + RTrim(@psi_anio) + '_' + RTrim(@pti_mes)
    
    SET @vbi_existe = 0
    /*** Verificar Existencia de la Tabla ***/
    IF OBJECT_ID(@vsy_tabla) IS NOT NULL 
        SET @vbi_existe = 1 
    ELSE 
        SET @vbi_existe = 0  
    
    /*** Borrar datos de la tabla modelo ***/
    DELETE FCO_EPS
    
    IF @vbi_existe = 0
    BEGIN
        /*** Crear y dar permisos a la tabla de autoliquidacion ***/
        EXECUTE ('SELECT * INTO dbo.' + @vsy_tabla + ' FROM FCO_EPS')  
        /** La siguiente línea causa error cuando los usuarios no son dbowner **/
        /** sin embargo las tablas de autoliquidacion se crearan desde el cierre */
        /** por lo tanto está linea no debería ejecutarse nunca (solo en salida en vivo) */
        EXECUTE ('GRANT SELECT, UPDATE, DELETE, INSERT ON dbo.' + @vsy_tabla + ' TO PUBLIC')
    END
    
    EXEC ('SELECT COUNT(*) cuantos INTO ##tmpcuantosEPS FROM ' + @vsy_tabla)
    IF (SELECT cuantos FROM ##tmpcuantosEPS) = 0 SET @vbi_existe = 0  
    DROP TABLE ##tmpcuantosEPS

    IF @pbi_regenerar = 1
    BEGIN
        IF IsNull(LTrim(@pvc_suc), '') <> ''
            SELECT @vvc_cond_0 = " WHERE COD_SUC = '" + @pvc_suc + "' AND COD_EPS = '" + @pvc_EPS + "'", -- DELETE e INSERT en depurada
                   @vvc_cond_1 = " AND SUC.dato = '" + @pvc_suc + "' AND EPS.dato = '" + @pvc_EPS + "'", -- Insert General
                   @vvc_cond_2 = " AND COD_SUC = '" + @pvc_suc + "' AND COD_EPS = '" + @pvc_EPS + "'", -- Novedades
                   @vvc_cond_3 = " AND sucursal = '" + @pvc_suc + "' AND EPS = '" + @pvc_EPS + "'" -- Fantasmas
        ELSE
            SELECT @vvc_cond_0 = " WHERE COD_EPS = '" + @pvc_EPS + "'", -- DELETE e INSERT en depurada
                   @vvc_cond_1 = " AND EPS.dato = '" + @pvc_EPS + "'", -- Insert General
                   @vvc_cond_2 = " AND COD_EPS = '" + @pvc_EPS + "'", -- Novedades
                   @vvc_cond_3 = " AND EPS = '" + @pvc_EPS + "'" -- Fantasmas

        EXECUTE ('DELETE FROM ' + @vsy_tabla + @vvc_cond_0)
    END
    ELSE
        SELECT @vvc_cond_0 = '', @vvc_cond_1 = '', @vvc_cond_2 = '', @vvc_cond_3 = ''
        
    IF @vbi_existe = 0 OR @pbi_regenerar = 1           
    BEGIN    
        /* Insertar los valores No Depurados a la tabla modelo (FCO_EPS) */
        SET @vvc_sql = 
        " INSERT INTO FCO_EPS" +
        " SELECT tg.compania, tg.trabajador, eps.dato, suc.dato," +
        " tid.tipo_id As C11A, t.clave_unica As C11B, t.nombre As C12ABC," +
        " ' ' As C13A, ' ' As C13B, ' ' As C13C, ' ' As C13D, ' ' As C13E," +
        " C13F = CASE am.agr_conceptos WHEN " + @vch_agr_20 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13G = CASE am.agr_conceptos WHEN " + @vch_agr_18 + " THEN CASE " + @vch_acum_tie + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13H = CASE am.agr_conceptos WHEN " + @vch_agr_11 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13I = CASE am.agr_conceptos WHEN " + @vch_agr_10 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C13J = CASE am.agr_conceptos WHEN " + @vch_agr_08 + " THEN CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'X' END ELSE ' ' END," +
        " C14A = CASE am.agr_conceptos WHEN " + @vch_agr_16 + " THEN " + @vch_acum_tie + " ELSE 0 END," +
        " C15A = dbo.fn_fco_sueldo(tg.compania, tg.trabajador, " + RTrim(@psi_anio) + "," + RTrim(@pti_mes) + "), " +
        " 0 As C16A," +
        " C17A = CASE am.agr_conceptos WHEN " + @vch_agr_16 + " THEN Round((" + @vch_acum_imp + "-1)/1000,0)*1000 ELSE 0 END," +
        " C24A = CASE am.agr_conceptos WHEN " + @vch_agr_05 + " THEN Round((" + @vch_acum_imp + "-1)/100,0)*100 ELSE 0 END," +
        " ' ' As C25A, 0 As C25B, ' ' As C26A, 0 As C26B," +
        " C27A = CASE am.agr_conceptos WHEN " + @vch_agr_15 + " THEN " + @vch_acum_imp + " ELSE 0 END" +
        " FROM trabajadores t" +
        " INNER JOIN trabajadores_grales tg ON t.trabajador = tg.trabajador" +
        " INNER JOIN vw_fco_eps_trabajador eps ON tg.compania = eps.compania AND tg.trabajador = eps.trabajador" +
        " INNER JOIN vw_fco_div_trabajador suc ON tg.compania = suc.compania AND tg.trabajador = suc.trabajador" +
        " INNER JOIN acumulados_mensuales am ON am.compania  = tg.compania AND am.trabajador  = tg.trabajador" + 
        " INNER JOIN vw_fco_tid_trabajador tid ON tg.compania = tid.compania AND tg.trabajador = tid.trabajador" +
        " WHERE tg.compania = '" + @pch_compania + "'" +
          " AND am.anio = " + RTrim(@psi_anio) +
          " AND Convert(char(6), tg.fecha_ingreso, 112) <= " + @vch_periodo +
          " AND (tg.fecha_baja IS NULL OR Convert(char(6), tg.fecha_baja, 112) >= " + @vch_periodo + ")" +
          " AND am.agr_conceptos IN (" + @vch_agr_05 + "," + @vch_agr_08 + "," + @vch_agr_10 + "," + @vch_agr_11 + "," + 
                                         @vch_agr_15 + "," + @vch_agr_16 + "," + @vch_agr_18 + "," + @vch_agr_20 + ")" + 
        @vvc_cond_1
    
        EXECUTE (@vvc_sql)      
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla FCO_EPS', 16, 1)
        
        /* Insertar los valores (Depurados) a la tabla */
        SET @vvc_sql = 
        " INSERT INTO " + @vsy_tabla +
        " SELECT CIA, COD_TRAB, COD_EPS, COD_SUC, C11A, C11B, C12ABC," +
        " ' ' C13A, ' ' C13B, ' ' C13C, ' ' C13D, ' ' C13E, Max(C13F), Max(C13G)," +
        " Max(C13H), Max(C13I), Max(C13J), Max(C14A), Max(C15A), 0 C16A, Max(C17A)," +
        " Max(C24A), ' ' C25A, 0 C25B, ' ' C26A, 0 C26B, Max(C27A)" +
        " FROM FCO_EPS" + @vvc_cond_0 +
        " GROUP BY CIA, C12ABC, C11B, COD_TRAB, COD_EPS, COD_SUC, C11A"

        EXECUTE (@vvc_sql)  
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla del periodo', 16, 1)
    
        /*** NOVEDADES ***/
    
        /* ING: INGRESO A LA COMPANIA */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13A = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'" +
          " AND EXISTS (SELECT 1 FROM trabajadores_grales" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6), fecha_ingreso, 112)=" + @vch_periodo + ")" + @vvc_cond_2
        EXECUTE (@vvc_sql)  
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad ING', 16, 1)
    
        /* RET: RETIRO DE LA COMPANIA */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13B = 'X'" +
        " WHERE cia = '" + @pch_compania + "'" +
          " AND EXISTS (SELECT 1 FROM trabajadores_grales" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6), fecha_baja, 112) = " + @vch_periodo + ")" + @vvc_cond_2
        EXECUTE (@vvc_sql)  
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad RET', 16, 1)
    
        /* RET: RETIRO DE LA COMPANIA EN PERIODOS ANTERIORES */
        /* Por si lo dieron de baja fuera de tiempo */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13B = 'X'" +
        " WHERE cia = '" + @pch_compania + "'" +
          " AND EXISTS (SELECT 1 FROM trabajadores_grales" +
                      " WHERE compania = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6),fecha_baja,112) < " + @vch_periodo + ") "  + 
          " AND C17A > 0 " + @vvc_cond_2
        EXECUTE (@vvc_sql)  
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad RET', 16, 1)
    
        /*** RET: RETIROS EN EL MISMO PERIODO. CASO AVIDESA ***/
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13B = 'X'" +
        " WHERE cia ='" + @pch_compania + "'"+
        " AND EXISTS (SELECT 1 FROM historial_laboral" +
                    " WHERE compania = cia" +
                      " AND trabajador = cod_trab" +
                      " AND codigo_incidencia = '0000000002'" +
                      " AND Convert(char(6), valor_03, 112) = " + @vch_periodo + ")" + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar retiros de personas que reingresaron en el periodo', 16, 1)
            
        /* TDA: INGRESO A ESTA EPS */
        /* Colocar la novedad siempre y cuando se haya registrado el cambio en TRASLADOS_EPS */    
        /* en el mes anterior - JAS - 20041014 */    
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13C = 'X'" +
        " WHERE cia = '" + @pch_compania + "'" +
          " AND C13A <> 'X'" +
          " AND EXISTS (SELECT 1 FROM vw_fco_hist_traslados_eps" +
                      " WHERE compania   = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6), fecha_alta, 112) = " + @vch_periodo + ")" +
         " AND EXISTS (SELECT 1 FROM fco_traslados_eps " +
                     " WHERE compania = cia" +
                       " AND trabajador = cod_trab" +
                       " AND Convert(CHAR(6), fecha_cambio, 112) = " + @vch_per_ant + ") " +
         @vvc_cond_2
        EXECUTE (@vvc_sql)  
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad TDA', 16, 1)
    
        /* TAA: RETIRO DE ESTA EPS */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13D = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'" +
          " AND EXISTS (SELECT 1 FROM fco_traslados_eps" +
                      " WHERE compania   = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(char(6),fecha_cambio,112) = " + @vch_periodo + ")" + @vvc_cond_2
        EXECUTE (@vvc_sql)  
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad TAA', 16, 1)
        
        /* VSP: VARIACION DEL SALARIO */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C13E = 'X'" +
        " WHERE CIA = '" + @pch_compania + "'" +
          " AND C13A <> 'X'" +
          " AND EXISTS (SELECT 1 FROM historico_sueldos" +
                      " WHERE compania   = cia" +
                        " AND trabajador = cod_trab" +
                        " AND Convert(Char(6),fecha,112) = " + @vch_periodo + ")" + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la insertar la novedad VSP', 16, 1)
    
        /* AUTORIZACIONES ENFERMEDAD GENERAL (NUMERO Y VALOR POR TRABAJADOR) */
        SET @vvc_sql = 
        " UPDATE " + @vsy_tabla +
        " SET C25A = numero, C25B = valor_total" +
        " FROM FCO_autorizaciones C, FCO_autorizaciones_det D" +
        " WHERE C.compania = D.compania And C.autorizacion = D.autorizacion" +
          " AND cia = C.compania" +
          " AND cod_trab = D.trabajador" +
          " AND tipo_incapacidad = 0" +
          " AND cia = '" + @pch_compania + "'" +
          " AND periodo = " + @vch_periodo + @vvc_cond_2
        EXECUTE (@vvc_sql)  
        IF @@ERROR <> 0 RAISERROR ('Error al llenar las autorizaciones de Incapacidades por EG', 16, 1)
    
        /* INSERCION DE LAS AUTORIZACIONES POR EG EN LA TABLA DEL PIE DE REPORTE */
        DECLARE cr_autorizaciones CURSOR FOR
        SELECT cod_entidad, sucursal, Max(numero) NRO, Sum(valor_total) VLR
        FROM fco_autorizaciones
        WHERE compania = @pch_compania 
          AND periodo = SubString(@vch_periodo,2,6) 
          AND tipo_incapacidad = 0
        GROUP BY cod_entidad, sucursal
        HAVING Sum(valor_total) > 0
        
        OPEN cr_autorizaciones
        FETCH NEXT FROM cr_autorizaciones INTO @vvc_cod_eps, @vvc_cod_suc, @vvc_nro_aut, @vdc_vlr_aut      
        WHILE @@FETCH_STATUS = 0
        BEGIN
            EXEC sp_fco_cambio_ala_datos_adi @vsy_tabla, 3, @vvc_cod_eps, @vvc_cod_suc, 0, @vvc_nro_aut, @vdc_vlr_aut, null, null
            FETCH NEXT FROM cr_autorizaciones INTO @vvc_cod_eps, @vvc_cod_suc, @vvc_nro_aut, @vdc_vlr_aut
        END
        CLOSE cr_autorizaciones
        DEALLOCATE cr_autorizaciones
    
        /* AUTORIZACIONES POR LICENCIA DE MATERNIDAD (NUMERO Y VALOR POR TRABAJADOR) */
        SET @vvc_sql = " UPDATE " + @vsy_tabla +
        " SET C26A = numero, C26B = valor_total" +
        " FROM FCO_autorizaciones C, FCO_autorizaciones_det D" +
        " WHERE C.compania = D.compania And C.autorizacion = D.autorizacion" +
        " AND cia = C.compania" +
        " AND cod_trab = D.trabajador" +
        " AND tipo_incapacidad = 1" +
        " AND cia = '" + @pch_compania + "'" +
        " AND periodo=" + @vch_periodo + @vvc_cond_2
        EXECUTE (@vvc_sql)  
        IF @@ERROR <> 0 RAISERROR ('Error al llenar las autorizaciones de licencias de maternidad', 16, 1)
    
        /* INSERCION DE LAS AUTORIZACIONES POR LM EN LA TABLA DEL PIE DE REPORTE */
        DECLARE cr_autorizaciones CURSOR FOR
        SELECT cod_entidad, sucursal, Max(numero) NRO, Sum(valor_total) VLR
        FROM fco_autorizaciones
        WHERE compania = @pch_compania 
          AND periodo = SubString(@vch_periodo,2,6) 
          AND tipo_incapacidad = 1
        GROUP BY cod_entidad, sucursal
        HAVING Sum(valor_total) > 0
        
        OPEN cr_autorizaciones
        FETCH NEXT FROM cr_autorizaciones INTO @vvc_cod_eps, @vvc_cod_suc, @vvc_nro_aut, @vdc_vlr_aut      
        WHILE @@FETCH_STATUS = 0
        BEGIN
            EXECUTE sp_fco_cambio_ala_datos_adi @vsy_tabla, 3, @vvc_cod_eps, @vvc_cod_suc, 1, @vvc_nro_aut, @vdc_vlr_aut, null, null
            FETCH NEXT FROM cr_autorizaciones INTO @vvc_cod_eps, @vvc_cod_suc, @vvc_nro_aut, @vdc_vlr_aut
        END
        CLOSE cr_autorizaciones
        DEALLOCATE cr_autorizaciones
        
        /*** INCORPORACION DE APORTANTES FANTASMAS ***/
        IF OBJECT_ID('dbo.fco_fantasmas') IS NOT NULL
        BEGIN
            SET @vvc_sql = "INSERT INTO " + @vsy_tabla +
            " SELECT compania CIA, trabajador COD_TRAB," +
            " eps COD_EPS, sucursal COD_SUC, Left(tipo_id, 1) C11A, trabajador C11B," +
            " Replace(IsNull(primer_apellido, '') + '/' + IsNull(segundo_apellido, '') + '/' + IsNull(primer_nombre, '') + ' ' + IsNull(segundo_nombre,  ''), '  ', ' ') C12ABC, " +
            " '' C13A, '' C13B, '' C13C, '' C13D, '' C13E, '' C13F," +
            " '' C13G, '' C13H, '' C13I, '' C13J, dias_eps C14A, salario C15A," +
            " 0 C16A, ibc_eps C17A, aporte_eps C24A, '' C25A, 0 C25B, '' C26A, 0 C26B, 0 C27A" +
            " FROM fco_fantasmas" +
            " WHERE compania ='" + @pch_compania + "'" +
              " AND IsNull(eps, '') <> ''" + 
              " AND (anio - 2000)*12 + mes >=" + RTrim((@psi_anio - 2000)*12 + @pti_mes) +
            @vvc_cond_3
            EXECUTE (@vvc_sql)
            IF @@ERROR <> 0 RAISERROR ('Error al incorporar aportantes fantasmas', 16, 1)
        END       
    END
    
    IF @pbi_generar_mm = 1
        EXECUTE sp_fco_crea_salud_mm @pch_compania, @psi_anio, @pti_mes, @pvc_suc, @pvc_EPS
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_crea_salud TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_crea_vw_iss') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_crea_vw_iss
GO
CREATE PROCEDURE dbo.sp_fco_crea_vw_iss
(                            
    @pch_compania char(4),
    @psi_anio smallint,
    @pti_mes tinyint,
    @pvc_suc varchar(10),
    @pbi_generar_mm bit,
    @pbi_regenerar bit
)                            
/**********************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano Version FCO - ADAM V.3   ***/
/*** Descripcion: Crea tabla de autoliquidacion de aportes al ISS   ***/
/***              Metodologia GALA - Autol                          ***/
/*** Autor:       Juan Carlos Leguizamon                            ***/
/*** Fecha MF:    Julio 10 de 2001                                  ***/
/*** Fecha FCO:   Marzo 27 de 2006                                  ***/
/**********************************************************************/
AS                            
DECLARE                             
    @vch_acum_imp char(15),
    @vch_acum_tie char(15),
    
    @vch_periodo char(8),
    
    @vch_agr_02 char(5), /* IBC de Pension */
    @vch_agr_03 char(5), /* Cotizacion Obligatoria de Pension */
    @vch_agr_04 char(5), /* Fondo de Solidaridad Pensional */
    @vch_agr_05 char(5), /* Cotizacion Obligatoria de Salud */
    @vch_agr_08 char(5), /* Vacaciones */
    @vch_agr_09 char(5), /* Cotizacion Obligatoria a Riesgos Profesionales */
    @vch_agr_10 char(5), /* Licencia de Maternidad */
    @vch_agr_11 char(5), /* Incapacidad por Enfermedad General */
    @vch_agr_12 char(5), /* Incapacidad por Accidente de Trabajo */
    @vch_agr_16 char(5), /* IBC de Salud */
    @vch_agr_17 char(5), /* IBC Riesgos Profesionales */
    @vch_agr_17i char(5), /* IBC Riesgos Profesionales Caso Especial Grasco -Usar IBC De Salud- */    
    @vch_agr_18 char(5), /* Licencia No Remunerada y Sanciones */
    
    @vsy_tabla sysname,
    @vbi_existe bit,
    @vvc_sql varchar(3000),
    
    @vvc_cond_0 varchar(255), --WHERE
    @vvc_cond_1 varchar(255), --AND
    @vvc_cond_2 varchar(255), --AND
    @vvc_cond_3 varchar(255),  --AND
    
    @vbi_arp_iss bit,
    @vbi_iss_redondea bit,
    @vvc_control_suc varchar(10),
    @cdc_ap_riesgos decimal(9,0),
    
    @cch_sucursal char(10),
    @cvc_nro_aut varchar(10),
    @cdc_vlr_aut decimal(9,0),
    
    @vch_random char(4),
    @vdc_total_suc decimal(15,0),
    
    @vvc_iss_eps varchar(10), /* Código del ISS como EPS de los trabajadores en ADAM */
    @vvc_iss_afp varchar(10), /* Código del ISS como AFP de los trabajadores en ADAM */

    @vbi_vac_salud bit,
    @vbi_vac_todos bit,
    @vti_mes_ant tinyint,
    @vsi_anio_ant smallint

BEGIN                            
    /* Campos que interesan de la tabla Acumulados Mensuales (importe y tiempo) */
    SELECT @vch_acum_imp = 'acum_imp_mes_' + Right('00' + RTrim(@pti_mes), 2),
           @vch_acum_tie = 'acum_tie_mes_' + Right('00' + RTrim(@pti_mes), 2)
                            
    /* Período de acumulados */
    SET @vch_periodo = "'" + RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2) + "'"
    
    /* Control del codigo de la sucursal */
    SET @vvc_control_suc = IsNull(@pvc_suc, '0')
    IF Len(@vvc_control_suc) = 0 SET @vvc_control_suc = '0'
                            
    /*** Recuperar Agrupaciones de Conceptos ***/
    SELECT @vch_agr_02 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 02) + "'",
           @vch_agr_03 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 03) + "'",
           @vch_agr_04 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 04) + "'",
           @vch_agr_05 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 05) + "'",
           @vch_agr_08 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 08) + "'",
           @vch_agr_09 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 09) + "'",
           @vch_agr_10 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 10) + "'",
           @vch_agr_11 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 11) + "'",
           @vch_agr_12 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 12) + "'",
           @vch_agr_16 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 16) + "'",
           @vch_agr_17 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 17) + "'",
           @vch_agr_18 = "'" + dbo.fn_fco_parametro_agr(@pch_compania, 'autoliq', 18) + "'"
    
    /* Recueperar los códigos del ISS como EPS y AFP */
    SELECT @vvc_iss_eps = dato FROM vw_fdt_parametros x
    WHERE x.pais = 'COL' AND x.compania = @pch_compania AND x.parametro = 'otros' AND x.secuencia = 11
    
    SET @vvc_iss_eps = IsNull(@vvc_iss_eps, 'ISS')
    
    SELECT @vvc_iss_afp = dato FROM vw_fdt_parametros x
    WHERE x.pais = 'COL' AND x.compania = @pch_compania AND x.parametro = 'otros' AND x.secuencia = 10
    
    SET @vvc_iss_afp = IsNull(@vvc_iss_afp, 'ISS')
    
    /*** Saber si el ISS es la ARP de la compañia ***/
    SELECT @vbi_arp_iss = arp_iss, @vbi_iss_redondea = iss_redondea
    FROM fco_cias_datos_adi
    WHERE compania = @pch_compania
    
    SET @vbi_arp_iss = IsNull(@vbi_arp_iss, 0)

    IF @vbi_arp_iss = 1
        IF EXISTS (SELECT 1 FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'otros' AND secuencia = 12 AND dato = 'SI')
            -- Caso Especial para Grasco, se utiliza el IBC de Salud en lugar del de Riesgos
            SET @vch_agr_17i = @vch_agr_16
        ELSE
            SET @vch_agr_17i = @vch_agr_17

    -- Si el ISS no es la ARP averiguar si la empresa quiere reportar vacaciones y de que forma
    IF @vbi_arp_iss = 0
    BEGIN
        SELECT @vbi_vac_salud = 0, @vbi_vac_todos = 0

        IF EXISTS (SELECT 1 FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'otros' AND secuencia = 13 AND dato = 'SI')
            SELECT @vbi_vac_salud = 1, @vbi_vac_todos = 0

        IF EXISTS (SELECT 1 FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania AND parametro = 'otros' AND secuencia = 14 AND dato = 'SI')
            SELECT @vbi_vac_salud = 0, @vbi_vac_todos = 1    
    END

    /*** Establecer el Nombre de la Tabla de trabajo ***/
    SET @vsy_tabla = 'FCO_VW_ISS_' + RTrim(@pch_compania) + '_' + RTrim(@psi_anio) + '_' + RTrim(@pti_mes)
    
    SET @vbi_existe = 0
    /*** Verificar Existencia de la Tabla ***/
    IF OBJECT_ID(@vsy_tabla) IS NOT NULL
        SET @vbi_existe = 1
    ELSE
        SET @vbi_existe = 0
         
    /*** Borrar datos de la tabla modelo ***/                        
    DELETE FCO_VW_ISS                            
                            
    IF @vbi_existe = 0
    BEGIN
        /*** Crear y dar permisos a la tabla de autoliquidacion ***/
        EXECUTE ('SELECT * INTO dbo.' + @vsy_tabla + ' FROM FCO_VW_ISS')  
        /** La siguiente línea causa error cuando los usuarios no son dbowner **/
        /** sin embargo las tablas de autoliquidacion se crearan desde el cierre */
        /** por lo tanto está linea no debería ejecutarse nunca (solo en salida en vivo) */
        EXECUTE ('GRANT SELECT, UPDATE, DELETE, INSERT ON dbo.' + @vsy_tabla + ' TO PUBLIC')
    END
    
    EXEC ('SELECT COUNT(*) cuantos INTO ##tmpcuantosVWISS FROM ' + @vsy_tabla)
    IF (SELECT cuantos FROM ##tmpcuantosVWISS) = 0 SET @vbi_existe = 0  
    DROP TABLE ##tmpcuantosVWISS

    IF @pbi_regenerar = 1
    BEGIN                            
        IF @vvc_control_suc <> '0'                            
            SELECT @vvc_cond_0 = " WHERE COD_SUC = '" + @pvc_suc + "'", -- DELETE e INSERT en depurada
                   @vvc_cond_1 = " AND SUC.dato = '" + @pvc_suc + "'", -- Insert General
                   @vvc_cond_2 = " AND COD_SUC = '" + @pvc_suc + "'", -- Novedades
                   @vvc_cond_3 = " AND SUC = '" + @pvc_suc + "'" -- Fantasmas
        ELSE
            SELECT @vvc_cond_0 = '', @vvc_cond_1 = '', @vvc_cond_2 = '', @vvc_cond_3 = ''

        EXECUTE ('DELETE FROM ' + @vsy_tabla + @vvc_cond_0)                            
    END                            
    ELSE                            
        SELECT @vvc_cond_0 = '', @vvc_cond_1 = '', @vvc_cond_2 = '', @vvc_cond_3 = ''
                            
    IF @vbi_existe = 0 Or @pbi_regenerar = 1                            
    BEGIN                            
        /* Insertar los valores No Depurados a la tabla modelo (FCO_VW_ISS) */
        SET @vvc_sql =
            " INSERT INTO FCO_VW_ISS" +
            " SELECT am.compania, tg.trabajador," +
            " CASE WHEN itr.es_eps = 1 THEN 'ISS' ELSE 'Otro' END, " +
            " CASE WHEN itr.es_afp = 1 THEN 'ISS' ELSE 'Otro' END, suc.dato," +
            " tid.tipo_id As C10A, t.clave_unica As C10B, t.nombre As C10C," +
            " ' ' C11A, ' ' C11B, ' ' C11C, 0 C11D, 0 C11E,"+
            " C12A = IsNull(CASE am.agr_conceptos WHEN Case When itr.es_eps = 1 Then " + @vch_agr_16 + " Else " + @vch_agr_02 + " End THEN " + @vch_acum_tie + " ELSE 0 END,0)," +
            " C13A = IsNull(CASE am.agr_conceptos WHEN Case When itr.es_eps = 1 Then " + @vch_agr_16 + " Else " + @vch_agr_02 + " End THEN Round((" + @vch_acum_imp + "-1)/1000,0)*1000 ELSE 0 END,0)," +
            CASE WHEN @vbi_iss_redondea = 1 THEN
                " C14A = Case When itr.es_afp = 0 Then 0 Else IsNull(CASE am.agr_conceptos WHEN " + @vch_agr_03 + " THEN Round((" + @vch_acum_imp + "-1)/100,0)*100 ELSE 0 END,0) End," +
                " C14B = Case When itr.es_afp = 0 Then 0 Else IsNull(CASE am.agr_conceptos WHEN " + @vch_agr_04 + " THEN Round((" + @vch_acum_imp + "-1)/100,0)*100 ELSE 0 END,0) End," +
                " C14C = Case When itr.es_eps = 0 Then 0 Else IsNull(CASE am.agr_conceptos WHEN " + @vch_agr_05 + " THEN Round((" + @vch_acum_imp + "-1)/100,0)*100 ELSE 0 END,0) End,"
            ELSE
                " C14A = Case When itr.es_afp = 0 Then 0 Else IsNull(CASE am.agr_conceptos WHEN " + @vch_agr_03 + " THEN " + @vch_acum_imp + " ELSE 0 END,0) End," +
                " C14B = Case When itr.es_afp = 0 Then 0 Else IsNull(CASE am.agr_conceptos WHEN " + @vch_agr_04 + " THEN " + @vch_acum_imp + " ELSE 0 END,0) End," +
                " C14C = Case When itr.es_eps = 0 Then 0 Else IsNull(CASE am.agr_conceptos WHEN " + @vch_agr_05 + " THEN " + @vch_acum_imp + " ELSE 0 END,0) End,"
            END +
            " ' ' C25N, 0 C25C, ' ' C26N, 0 C26C" +
            " FROM trabajadores t" +
            " INNER JOIN trabajadores_grales tg ON t.trabajador = tg.trabajador" +
            " INNER JOIN vw_fco_iss_trabajador itr ON itr.compania = tg.compania AND itr.trabajador = tg.trabajador" +
            " INNER JOIN vw_fco_div_trabajador suc ON suc.compania = tg.compania AND suc.trabajador = tg.trabajador" +
            " INNER JOIN acumulados_mensuales am ON am.compania = tg.compania AND am.trabajador = tg.trabajador" +
            " INNER JOIN vw_fco_tid_trabajador tid ON tg.compania = tid.compania AND tg.trabajador = tid.trabajador" +
            " WHERE am.compania = '" + @pch_compania + "'" + 
              " AND am.anio = " + RTrim(@psi_anio) +
              " AND Convert(char(6), tg.fecha_ingreso, 112) <= " + @vch_periodo +
              " AND (tg.fecha_baja IS NULL OR Convert(char(6), tg.fecha_baja, 112) >= " + @vch_periodo + ")" +
              " AND am.agr_conceptos IN (" + @vch_agr_02 + "," + @vch_agr_03 + "," + @vch_agr_04 + "," + @vch_agr_05 + "," + @vch_agr_16 + ")" + 
            @vvc_cond_1
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla FCO_VW_ISS', 16, 1)
                                        
        IF @vbi_arp_iss = 1
        BEGIN                            
            /* Parte 2. No están afiliados ni en Salud ni en Pensión, pero el ISS es la ARP */
            SET @vvc_sql =
            " INSERT INTO FCO_VW_ISS" +
            " SELECT am.compania, tg.trabajador, 'Otro' COD_EPS, 'Otro' COD_FPO, suc.dato," +
            " tid.tipo_id As C10A, t.clave_unica As C10B, t.nombre As C10C, ' ' C11A, ' ' C11B, ' ' C11C, 0 C11D, 0 C11E,"+
            " C12A = IsNull(CASE am.agr_conceptos WHEN " + @vch_agr_17 + " THEN " + @vch_acum_tie + " ELSE 0 END,0)," +
            " C13A = IsNull(CASE am.agr_conceptos WHEN " + @vch_agr_17i + " THEN Round((" + @vch_acum_imp + "-1)/1000,0)*1000 ELSE 0 END,0)," +
            " C14A = 0, C14B = 0, C14C = 0, ' ' C25N, C25C = 0, ' ' C26N, C26C = 0" +
            " FROM trabajadores t" +
            " INNER JOIN trabajadores_grales tg ON t.trabajador = tg.trabajador" +
            " INNER JOIN vw_fco_div_trabajador suc ON suc.compania = tg.compania AND suc.trabajador = tg.trabajador" +
            " INNER JOIN acumulados_mensuales am ON am.compania = tg.compania AND am.trabajador = tg.trabajador" +
            " INNER JOIN vw_fco_tid_trabajador tid ON tg.compania = tid.compania AND tg.trabajador = tid.trabajador" +
            " WHERE am.compania = '" + @pch_compania + "'" +
              " AND am.anio = " + RTrim(@psi_anio) +
              " AND am.agr_conceptos IN (" + @vch_agr_17 + "," + @vch_agr_17i +") " + @vvc_cond_1 +
              " AND NOT EXISTS (SELECT 1 FROM vw_fco_iss_trabajador x WHERE x.compania = tg.compania AND x.trabajador = tg.trabajador)"
            EXECUTE (@vvc_sql)
            IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla FCO_VW_ISS (Solo ARP)', 16, 1)
        END /*IF @vbi_arp_iss = 1 */
                  
        /* Inserta los valores Depurados a la tabla del periodo */                            
        SELECT @vvc_sql =                              
        " INSERT INTO " + @vsy_tabla +                            
        " SELECT CIA, COD_TRAB, COD_EPS, COD_FPO, COD_SUC, C10A, C10B, C10C," +                            
        " MAX(C11A), MAX(C11B), MAX(C11C), MAX(C11D), MAX(C11E), MAX(C12A), MAX(C13A)," +                            
        " MAX(C14A), MAX(C14B), MAX(C14C), MAX(C25N), MAX(C25C), MAX(C26N), MAX(C26C)" +                            
        " FROM FCO_VW_ISS" + @vvc_cond_0 +                            
        " GROUP BY CIA, C10B, C10C, COD_TRAB, COD_EPS, COD_FPO, COD_SUC, C10A"                            
        EXECUTE (@vvc_sql)                            
        IF @@ERROR <> 0 RAISERROR ('Error al llenar la tabla del período', 16, 1)
                                           
        /******* I N S E R C I O N    D E   N O V E D A D E S *******/                                       
        SET @vvc_sql = 
            " UPDATE " + @vsy_tabla +                            
            " SET C11E = 0, C11C = ' '" +   /* JAS - 20040811 */                
            " WHERE CIA = '" + @pch_compania + "'" +  @vvc_cond_2                          
        EXECUTE (@vvc_sql)                          
        
        /* NOVEDAD I: INCAPACIDADES POR LICENCIA DE MATERNIDAD */
        SET @vvc_sql =
        " UPDATE " + @vsy_tabla +
        " SET C11B = CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'I' END," +
        " C11E = " + @vch_acum_tie +
        " FROM acumulados_mensuales am" +
        " WHERE CIA = am.compania " +
          " AND COD_TRAB = am.trabajador " +
          " AND COD_EPS = 'ISS' " +
          " AND CIA ='" + @pch_compania + "'" +
          " AND am.anio = " + RTrim(@psi_anio) + 
          " AND am.agr_conceptos = " + @vch_agr_10 + @vvc_cond_2                                            
        EXECUTE (@vvc_sql)                                    
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11B Licencia de Maternidad', 16, 1)
        
        /* NOVEDAD I: INCAPACIDADES POR LICENCIA DE MATERNIDAD COLUMNA C:RIESGOS*/
        IF @vbi_arp_iss = 1
        BEGIN
            SET @vvc_sql =
            " UPDATE " + @vsy_tabla +
            " SET C11C = CASE WHEN " + @vch_acum_imp + " <> 0 THEN 'I' ELSE C11C END," +
                " C11E = " + @vch_acum_tie +
            " FROM acumulados_mensuales am" +
            " WHERE CIA = am.compania" +
              " AND COD_TRAB = am.trabajador" +
              " AND COD_EPS <> 'ISS'" +
              " AND CIA = '" + @pch_compania + "'" +
              " AND am.anio = " + RTrim(@psi_anio) + 
              " AND am.agr_conceptos = " + @vch_agr_10  + @vvc_cond_2
        
            EXECUTE (@vvc_sql)
            IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11C Licencia de Maternidad', 16, 1)
        END
        
        /* NOVEDAD I: INCAPACIDADES POR ENFERMEDAD GENERAL */
        SET @vvc_sql =
        " UPDATE " + @vsy_tabla +
        " SET C11B = CASE WHEN " + @vch_acum_imp + " <> 0 THEN 'I' END," +
            " C11E = IsNull(C11E,0) + IsNull(" + @vch_acum_tie + ",0)" +
        " FROM acumulados_mensuales am" +
        " WHERE CIA = AM.compania" +
          " AND COD_TRAB = AM.trabajador" +
          " AND COD_EPS = 'ISS'" +
          " AND CIA = '" + @pch_compania + "'" +
          " AND AM.anio = "+ Convert(char,@psi_anio) + 
          " AND AM.agr_conceptos = " + @vch_agr_11  + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11B Incapacidad Salud', 16, 1)
        
        /* NOVEDAD I: INCAPACIDADES POR ENFERMEDAD GENERAL. COLUMNA C:RIESGOS */                            
        IF @vbi_arp_iss = 1
        BEGIN
            SET
            @vvc_sql =
            " UPDATE " + @vsy_tabla +
            " SET C11C = CASE WHEN " + @vch_acum_imp + " <> 0 THEN 'I' ELSE C11C END," +  /* JAS - 20040811 */
                " C11E = IsNull(C11E,0) + IsNull(" + @vch_acum_tie + ",0)" +
            " FROM acumulados_mensuales am" +
            " WHERE CIA = AM.compania" +
              " AND COD_TRAB = am.trabajador" +
              " AND COD_EPS <> 'ISS'" +
              " AND CIA = '" + @pch_compania + "'" +
              " AND am.anio = " + RTrim(@psi_anio) + 
              " AND am.agr_conceptos = " + @vch_agr_11  + @vvc_cond_2
            EXECUTE (@vvc_sql)
            IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11C Incapacidad Salud', 16, 1)            
        END
        
        /* NOVEDAD I: INCAPACIDADES POR ACCIDENTES DE TRABAJO */
        IF @vbi_arp_iss = 1
        BEGIN
            SET @vvc_sql =
            " UPDATE " + @vsy_tabla +
            " SET C11C = CASE WHEN " + @vch_acum_imp + " <> 0 THEN 'I' ELSE C11C END," +   /* JAS - 20040811 */
                " C11E = IsNull(C11E,0) + " + RTrim(@vch_acum_tie) +
            " FROM acumulados_mensuales am" +
            " WHERE CIA = am.compania" +
              " AND COD_TRAB = am.trabajador" +
              " AND CIA = '" + @pch_compania + "'" +
              " AND am.anio = " + RTrim(@psi_anio) +
              " AND am.agr_conceptos = " + @vch_agr_12
            EXECUTE (@vvc_sql)
            IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11C Incapacidad Riesgos', 16, 1)
        END
        
        /* NOVEDAD L: Licencia NO REMUNERADA Y SANCIONES. COLUMNA A: PENSION */
        SET @vvc_sql =
        " UPDATE " + @vsy_tabla +
        " SET C11A = CASE " + @vch_acum_imp + " WHEN 0 THEN ' ' ELSE 'L' END," +
            " C11E = IsNull(C11E,0) + " + Convert(char,@vch_acum_tie) +
        " FROM acumulados_mensuales am" +
        " WHERE CIA = am.compania" +
          " AND COD_TRAB = am.trabajador" +
          " AND COD_FPO = 'ISS'" +
          " AND CIA ='" + @pch_compania + "'" +
          " AND am.anio = " + RTrim(@psi_anio) + 
          " AND am.agr_conceptos =" + @vch_agr_18  + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11A Sanciones (Update)', 16, 1)
        
        /* NOVEDAD L: Licencia NO REMUNERADA Y SANCIONES  COLUMNA B: SALUD */                                    
        SET @vvc_sql =                             
        " UPDATE " + @vsy_tabla +                            
        " SET C11B = CASE " + @vch_acum_imp + "  WHEN 0 THEN ' ' ELSE 'L' END," +
            " C11E = IsNull(C11E,0) + " + Convert(char,@vch_acum_tie) +
        " FROM acumulados_mensuales am" +
        " WHERE CIA = am.compania" +
          " AND COD_TRAB = am.trabajador" +
          " AND COD_EPS = 'ISS'" +
          " AND COD_FPO <> 'ISS'" +
          " AND CIA = '" + @pch_compania + "'" +
          " AND am.ANIO = " + RTrim(@psi_anio) + 
          " AND am.agr_conceptos ="+ @vch_agr_18
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11B Sanciones', 16, 1)
        
        /* NOVEDAD L: Licencia NO REMUNERADA Y SANCIONES  COLUMNA C: RIESGOS */
        IF @vbi_arp_iss = 1
        BEGIN
            SET @vvc_sql =
            " UPDATE " + @vsy_tabla +
            " SET C11C = CASE WHEN " + @vch_acum_imp + " <> 0 THEN 'L' ELSE C11C END, " +  /* JAS - 20040811 */
                " C11E = IsNull(C11E,0) + " + @vch_acum_tie +
            " FROM acumulados_mensuales am" +
            " WHERE CIA = am.compania" +
              " AND COD_TRAB = am.trabajador" +
              " AND COD_EPS <> 'ISS'" +
              " AND COD_FPO <> 'ISS'" +
              " AND CIA ='" + @pch_compania + "'" +
              " AND am.ANIO = "+ Convert(char,@psi_anio) +
              " AND am.agr_conceptos ="+ @vch_agr_18 + @vvc_cond_2
            EXECUTE (@vvc_sql)
            IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11C Sanciones', 16, 1)
        END
        
        /* NOVEDAD V: VACACIONES */
        IF @vbi_arp_iss = 1
        BEGIN
            SET @vvc_sql =
            " UPDATE " + @vsy_tabla +
            " SET C11C = CASE WHEN " + @vch_acum_imp + " <> 0 THEN 'V' ELSE C11C END," +  /* JAS - 20040811 */
                " C11E = IsNull(C11E,0) + IsNull(" + @vch_acum_tie + ",0)" +
            " FROM acumulados_mensuales am" +
            " WHERE CIA = am.compania" +
              " AND COD_TRAB = am.trabajador" +
              " AND CIA = '" + @pch_compania + "'" +
              " AND am.anio = " + RTrim(@psi_anio) +
              " AND am.agr_conceptos = " + @vch_agr_08  + @vvc_cond_2
              EXECUTE (@vvc_sql)                            
              IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11C Vacaciones', 16, 1)
        END            
        ELSE                            
        BEGIN
            IF IsNull(@vbi_vac_salud, 0) = 1
            Begin
                SET @vvc_sql =
                " UPDATE " + @vsy_tabla +
                " SET C11C = CASE WHEN " + @vch_acum_imp + " <> 0 THEN 'V' ELSE C11C END," +  /* JAS - 20040811 */
                    " C11E = IsNull(C11E,0) + IsNull(" + @vch_acum_tie + ",0)" +
                " FROM acumulados_mensuales am" +
                " WHERE CIA = am.compania" +
                  " AND COD_TRAB = am.trabajador" +
                  " AND COD_EPS = 'ISS'" +
                  " AND CIA = '" + @pch_compania + "'" +
                  " AND am.ANIO = "+ RTrim(@psi_anio) + 
                  " AND am.agr_conceptos = " + @vch_agr_08  + @vvc_cond_2
                EXECUTE (@vvc_sql)
                IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11C Vacaciones', 16, 1)
            End
            IF IsNull(@vbi_vac_todos, 0) = 1 -- Esto corresponde al modelo DORIA
            Begin
                SET @vvc_sql =
                " UPDATE " + @vsy_tabla +
                " SET C11E = IsNull(C11E, 0) + IsNull(" + @vch_acum_imp + ",0), " +
                    " C11D = IsNull((SELECT Day(fecha_ini_per_vac) - 1 FROM programacion_vacaciones x" +
                                   " WHERE x.compania = am.compania and x.trabajador = am.trabajador " +
                                     " AND Year(x.fecha_ini_per_vac) = " + RTrim(@psi_anio) + 
                                     " AND Month(x.fecha_ini_per_vac) = " + RTrim(@pti_mes) + "),0) " +
                " FROM acumulados_mensuales am" +
                " WHERE CIA = am.compania" +
                  " AND COD_TRAB = am.trabajador" +
                  " AND CIA ='" + @pch_compania + "'" +
                  " AND am.anio = "+ RTrim(@psi_anio) +
                  " AND am.agr_conceptos = " + @vch_agr_08
                EXECUTE (@vvc_sql)
                
                IF @pti_mes = 1
                    SELECT @vti_mes_ant = 12, @vsi_anio_ant = @psi_anio - 1  
                ELSE  
                    SELECT @vti_mes_ant = @pti_mes - 1, @vsi_anio_ant = @psi_anio
                
                /* SI LA NOVEDAD DE VACACIONES VIENE DEL MES ANTERIOR - JAS - 20050721 */  
                SET @vvc_sql =
                " UPDATE " + @vsy_tabla +
                " SET C11D = IsNull((SELECT Day(fecha_ini_per_vac) - 1 FROM programacion_vacaciones " +
                                   " WHERE compania = am.compania and trabajador = am.trabajador " +
                                     " AND Year(fecha_ini_per_vac) = " + RTRIM(@vsi_anio_ant) +
                                     " AND Month(fecha_ini_per_vac) = " + RTRIM(@vti_mes_ant) +
                                     " AND Year(fecha_fin_per_vac) >= " + RTRIM(@vsi_anio_ant) +
                                     " AND Month(fecha_fin_per_vac) > " + RTRIM(@vti_mes_ant) + "), 0) " +
                " FROM acumulados_mensuales am" +
                " WHERE CIA = am.compania" +
                  " AND COD_TRAB = am.trabajador" +
                  " AND IsNull(C11E, 0) <> 0" +
                  " AND IsNull(C11D, 0) = 0" +
                  " AND CIA = '" + @pch_compania + "'" +
                  " AND am.anio = "+ RTrim(@psi_anio) + 
                  " AND am.agr_conceptos = " + @vch_agr_08                
                EXECUTE (@vvc_sql)              
                
                /* ACTUALIZAR EL NUMERO DE DIAS TRABAJADOS REAL - JAS - 20050721 */  
                SET @vvc_sql =               
                " UPDATE " + @vsy_tabla +
                " SET C12A = C12A - C11E, C11D = IsNull(C11D,0) " +
                " WHERE IsNull(C11E, 0) <> 0" +
                  " AND CIA ='" + @pch_compania + "'"              
                EXECUTE (@vvc_sql)              
                IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11C Vacaciones', 16, 1)                
            End
        END
                   
        /* NOVEDAD T: TRASLADO DEL ISS A OTRA EPS */                            
        SET
        @vvc_sql =
        " UPDATE " + @vsy_tabla +
        " SET C11B = 'T'" +
        " WHERE C13A <> 0" +
          " AND COD_EPS = 'ISS'" +
          " AND CIA = '" + @pch_compania + "'" +
          " AND EXISTS (SELECT 1 FROM fco_traslados_eps t" +
                      " WHERE t.compania = CIA" +
                        " AND t.trabajador = COD_TRAB" +
                        " AND Convert(char(6), t.fecha_cambio, 112) = " + @vch_periodo + ")" + @vvc_cond_2        
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11B Traslado EPS', 16, 1)
        
        /* NOVEDAD T: TRASLADO DEL ISS A OTRO FONDO DE PENSIONES */
        SELECT
            @vvc_sql =
            " UPDATE " + @vsy_tabla +
            " SET C11A = 'T'" +
            " WHERE C13A <> 0" +
              " AND COD_FPO = 'ISS'" +
              " AND CIA = '" + @pch_compania + "'" +
              " AND EXISTS (SELECT 1 FROM fco_traslados_fpo t" +
                          " WHERE t.compania = CIA" +
                            " AND t.trabajador = COD_TRAB" +
                            " AND Convert(char(6), t.fecha_cambio, 112) =" + @vch_periodo + ")"  + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11A Traslado FPO', 16, 1)
                                            
        /* RETIRO DE LA COMPANIA COLUMNA A: PENSION */
        SELECT
            @vvc_sql =
            " UPDATE " + @vsy_tabla +
            " SET C11A = 'R', C11D = DAY(tg.fecha_baja)" +
            " FROM trabajadores_grales tg" +
            " WHERE C13A <> 0" +
              " AND CIA = tg.compania" +
              " AND COD_TRAB = tg.trabajador" +
              " AND COD_FPO = 'ISS'" +
              " AND CIA = '" + @pch_compania + "'" +
              " AND Convert(char(6), tg.fecha_baja, 112) = " + @vch_periodo  + @vvc_cond_2
        EXECUTE (@vvc_sql)    
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11A Retiro CIA', 16, 1)
                                        
        /*** RET: RETIROS EN EL MISMO PERIODO. CASO AVIDESA ***/
        SELECT
            @vvc_sql =
            " UPDATE " + @vsy_tabla +
            " SET C11A = 'R', C11D = DAY(hl.valor_03)" +
            " FROM historial_laboral hl" +
            " WHERE C13A <> 0" +
              " AND CIA = hl.compania" +
              " AND COD_TRAB = hl.trabajador" +
              " AND COD_FPO = 'ISS'" +
              " AND CIA = '" + @pch_compania + "'" +
              " AND hl.codigo_incidencia = '0000000002'" +
              " AND Convert(char(6), hl.valor_03,112) = " + @vch_periodo + @vvc_cond_2
        EXECUTE (@vvc_sql)                            
        IF @@ERROR <> 0 RAISERROR ('Error al insertar retiros de personas que reingresaron en el periodo (Pension)', 16, 1)
                                            
        /* NOVEDAD R: RETIRO DE LA COMPANIA COLUMNA B: SALUD */
        SELECT
            @vvc_sql =
            " UPDATE " + @vsy_tabla +
            " SET C11B = 'R', C11D = DATEPART(DAY, tg.fecha_baja)" +
            " FROM trabajadores_grales tg" +
            " WHERE C13A <> 0" +
              " AND CIA = tg.compania" +
              " AND COD_TRAB = tg.trabajador" +
              " AND COD_EPS = 'ISS'" +
              " AND CIA = '" + @pch_compania + "'" +
              " AND Convert(char(6), tg.fecha_baja, 112) = " + @vch_periodo  + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11B Retiro CIA', 16, 1)
        
        /*** NOVEDAD R: RETIROS EN EL MISMO PERIODO. CASO AVIDESA ***/                            
        SELECT                             
            @vvc_sql =
            " UPDATE " + @vsy_tabla +
            " SET C11B = 'R', C11D = DAY(hl.valor_03)" +
            " FROM historial_laboral hl" +
            " WHERE C13A <> 0" +
              " AND CIA = hl.compania" +
              " AND COD_TRAB = hl.trabajador" +
              " AND COD_EPS = 'ISS'" +
              " AND CIA = '" + @pch_compania + "'" +
              " AND hl.codigo_incidenCIA = '0000000002'" +
              " AND Convert(char(6), hl.valor_03, 112) = " + @vch_periodo  + @vvc_cond_2
        EXECUTE (@vvc_sql)
        IF @@ERROR <> 0 RAISERROR ('Error al insertar retiros de personas que reingresaron en el periodo (Salud)', 16, 1)        
        
        /* NOVEDAD R: RETIRO DE LA COMPANIA COLUMNA C: RIESGOS */                            
        IF @vbi_arp_iss = 1                            
        BEGIN                            
            SELECT
                @vvc_sql =
                " UPDATE " + @vsy_tabla +
                " SET C11C = 'R', C11D = DATEPART(DAY, tg.fecha_baja)" +
                " FROM trabajadores_grales tg" +
                " WHERE C13A <> 0" +
                  " AND CIA = tg.compania" +
                  " AND COD_TRAB = tg.trabajador" +
                  " AND CIA = '" + @pch_compania + "'" +
                  " AND Convert(char(6), tg.fecha_baja, 112) = " + @vch_periodo  + @vvc_cond_2
            EXECUTE (@vvc_sql)                            
            IF @@ERROR <> 0 RAISERROR ('Error al insertar Novedad C11C Retiro CIA', 16, 1)
        END                            
                            
        /* INSERCION DE LAS AUTORIZACIONES POR EG EN LA TABLA DEL PIE DE REPORTE */                            
        DECLARE cr_autorizaciones_eg CURSOR FOR                     
        SELECT sucursal, Max(numero) NRO, Sum(valor_total) VLR
        FROM fco_autorizaciones
        WHERE compania = @pch_compania
          AND periodo = Substring(@vch_periodo,2,6)
          AND RTrim(cod_entidad) = @vvc_iss_eps
          AND tipo_incapacidad = 0
        GROUP BY sucursal
        HAVING Sum(valor_total) > 0
        
        OPEN cr_autorizaciones_eg                            
        FETCH NEXT FROM cr_autorizaciones_eg INTO @cch_sucursal, @cvc_nro_aut, @cdc_vlr_aut                            
        WHILE @@fetch_status = 0                                      
        BEGIN                  
            IF @vbi_existe = 0 OR (@pbi_regenerar = 1 AND Rtrim(@cch_sucursal) = RTrim(@pvc_suc))                            
                EXECUTE sp_fco_cambio_ala_datos_adi @vsy_tabla, 0, @vvc_iss_eps, @cch_sucursal, 0, @cvc_nro_aut, null, @cdc_vlr_aut, null
            
            FETCH NEXT FROM cr_autorizaciones_eg INTO @cch_sucursal, @cvc_nro_aut, @cdc_vlr_aut
        END
        CLOSE cr_autorizaciones_eg
        DEALLOCATE cr_autorizaciones_eg
        
        /* INSERCION DE LAS AUTORIZACIONES POR LM EN LA TABLA DEL PIE DE REPORTE */                            
        DECLARE cr_autorizaciones_lm CURSOR FOR                            
        SELECT                             
            sucursal, Max(numero) NRO, Sum(valor_total) VLR                            
        FROM                             
            fco_autorizaciones                            
        WHERE                             
            compania = @pch_compania And                            
            periodo = Substring(@vch_periodo,2,6) And                             
            RTrim(cod_entidad) = @vvc_iss_afp And                            
            tipo_incapacidad = 1                            
        GROUP BY                             
            sucursal                            
        HAVING Sum(valor_total) > 0                            
                            
        OPEN cr_autorizaciones_lm                      
        FETCH NEXT FROM cr_autorizaciones_lm INTO @cch_sucursal, @cvc_nro_aut, @cdc_vlr_aut                            
        WHILE @@fetch_status = 0                                      
        BEGIN                            
            IF @vbi_existe = 0 OR (@pbi_regenerar = 1 AND Rtrim(@cch_sucursal) = RTrim(@pvc_suc))
                EXECUTE sp_fco_cambio_ala_datos_adi @vsy_tabla, 0, @vvc_iss_afp, @cch_sucursal, 1, @cvc_nro_aut, null, @cdc_vlr_aut, null
            
            FETCH NEXT FROM cr_autorizaciones_lm INTO @cch_sucursal, @cvc_nro_aut, @cdc_vlr_aut
        END
        CLOSE cr_autorizaciones_lm
        DEALLOCATE cr_autorizaciones_lm
        
        /* INSERCION DE LOS APORTES A LA ARP EN LA TABLA DEL PIE DE REPORTE */                            
        IF @vbi_arp_iss = 1                            
        BEGIN                                    
            SET @vch_random = SubString(Convert(varchar, Convert(float, GetDate(), 109), 2),13,4)                            

            DELETE fco_vw_iss_arp WHERE clave = Convert(smallint, @vch_random)

            SET @vvc_sql =
            " INSERT INTO fco_vw_iss_arp (clave, sucursal, valor)" +
            " SELECT " + @vch_random + ", suc.dato, Sum(" + @vch_acum_imp + ")" +
            " FROM trabajadores t" +
            " INNER JOIN trabajadores_grales tg ON tg.trabajador = t.trabajador" +
            " INNER JOIN vw_div_trabajador suc ON tg.compania = suc.compania AND tg.trabajador = suc.trabajador" + 
            " INNER JOIN acumulados_mensuales am ON tg.compania = am.compania AND tg.trabajador = am.trabajador" +
            " WHERE am.compania ='" + @pch_compania + "'" +
              " AND am.anio = " + RTrim(@psi_anio) + 
              " AND am.agr_conceptos = " + @vch_agr_09 + @vvc_cond_1 +
            " GROUP BY suc.dato"
  
            EXECUTE (@vvc_sql)                            
            IF @@ERROR <> 0 RAISERROR ('Error al insertar los aportes a Riesgos Profesionales', 16, 1)

            IF IsNull(RTrim(LTrim(@pvc_suc)), '') = ''
            Begin
                SELECT @vdc_total_suc = Sum(IsNull(valor, 0))
                FROM fco_vw_iss_arp
                WHERE clave = Convert(smallint, @vch_random)
    
                EXECUTE sp_fco_cambio_ala_datos_adi @vsy_tabla, 0, 'ISS', @pvc_suc, 8, '', null, null, @vdc_total_suc
            End
            Else
            Begin                            
                DECLARE cr_aportes_riesgos CURSOR FOR
                SELECT sucursal, valor FROM fco_vw_iss_arp
                WHERE clave = Convert(smallint, @vch_random)
                
                OPEN cr_aportes_riesgos
                FETCH NEXT FROM cr_aportes_riesgos INTO @cch_sucursal, @cdc_ap_riesgos
                WHILE @@fetch_status = 0
                BEGIN
                    IF @vbi_existe = 0 OR (@pbi_regenerar = 1 AND Rtrim(@cch_sucursal) = RTrim(@pvc_suc))
                        EXECUTE sp_fco_cambio_ala_datos_adi @vsy_tabla, 0, 'ISS', @cch_sucursal, 8, '', null, null, @cdc_ap_riesgos
                    
                    FETCH NEXT FROM cr_aportes_riesgos INTO @cch_sucursal, @cdc_ap_riesgos
                END
                
                CLOSE cr_aportes_riesgos
                DEALLOCATE cr_aportes_riesgos
            End
            
            DELETE fco_vw_iss_arp WHERE clave = Convert(smallint, @vch_random)
        END
        
        /* INSERCION DE LAS INCAPACIDADES POR ARP EN LA TABLA DEL PIE DE REPORTE */                            
        IF @vbi_arp_iss = 1                            
        BEGIN                                    
            DELETE fco_vw_iss_arp WHERE clave = Convert(smallint, @vch_random)

            SET @vvc_sql =
            " INSERT INTO fco_vw_iss_arp " +
            " SELECT " + @vch_random + ", SUC.dato, Sum(" + @vch_acum_imp + ")" +
            " FROM trabajadores t" +
            " INNER JOIN trabajadores_grales tg ON t.trabajador = tg.trabajador" +
            " INNER JOIN vw_div_trabajador suc ON suc.compania = tg.compania AND suc.trabajador = tg.trabajador" +
            " INNER JOIN acumulados_mensuales am ON am.compania = tg.compania AND am.trabajador = tg.trabajador" +
            " WHERE am.compania ='" + @pch_compania + "'" +
              " AND am.anio = " + RTrim(@psi_anio) +
              " AND am.agr_conceptos = " + @vch_agr_12 + @vvc_cond_1 +
            " GROUP BY suc.dato"
            EXECUTE (@vvc_sql)
            IF @@ERROR <> 0 RAISERROR ('Error al insertar las incapacidades por Riesgos Profesionales', 16, 1)
            
            IF IsNull(RTrim(LTrim(@pvc_suc)), '') = ''
            Begin
                SELECT @vdc_total_suc = Sum(IsNull(valor, 0))
                FROM fco_vw_iss_arp
                WHERE clave = Convert(smallint, @vch_random)

                SET @vdc_total_suc = IsNull(@vdc_total_suc, 0)
    
                EXECUTE sp_fco_cambio_ala_datos_adi @vsy_tabla, 0, 'ISS', @pvc_suc, 0, '', null, null, @vdc_total_suc
            End
            Else
            Begin                            
                DECLARE cr_incapacidades_riesgos CURSOR FOR
                SELECT sucursal, valor FROM fco_vw_iss_arp
                WHERE clave = Convert(smallint, @vch_random)
                
                OPEN cr_incapacidades_riesgos
                FETCH NEXT FROM cr_incapacidades_riesgos INTO @cch_sucursal, @cdc_ap_riesgos
                WHILE @@fetch_status = 0
                BEGIN
                    IF @vbi_existe = 0 OR (@pbi_regenerar = 1 AND Rtrim(@cch_sucursal) = RTrim(@pvc_suc))
                        EXECUTE sp_fco_cambio_ala_datos_adi @vsy_tabla, 0, 'ISS', @cch_sucursal, 0, '', null, null, @cdc_ap_riesgos
                    
                    FETCH NEXT FROM cr_incapacidades_riesgos INTO @cch_sucursal, @cdc_ap_riesgos
                END
                CLOSE cr_incapacidades_riesgos
                DEALLOCATE cr_incapacidades_riesgos
            End
            
            DELETE fco_vw_iss_arp WHERE clave = Convert(smallint, @vch_random)
        END        
        
        SET @vvc_sql = 
            "DELETE FROM " + @vsy_tabla + 
            " WHERE C11A = ' ' AND C11B = ' ' AND C11C = ' ' AND C11D = 0 AND C11E = 0 AND C12A = 0 AND C13A = 0 AND C14A = 0 AND C14B = 0 " +                          
              " AND C14C = 0 AND C25N = ' ' AND C25C = 0 AND C26N = ' ' AND C26C = 0 "                          
        EXECUTE (@vvc_sql)                          
                            
        /*** INCORPORACION DE APORTANTES FANTASMAS ***/
        IF OBJECT_ID('dbo.fco_fantasmas') IS NOT NULL
        BEGIN
            SET @vvc_sql = 
            " INSERT INTO " + @vsy_tabla +
            " SELECT compania, trabajador, eps, afp, sucursal, Left(tipo_id, 1) C10A, trabajador C04," +
                " Replace(IsNull(primer_apellido, '') + '/' + IsNull(segundo_apellido, '') + '/' + IsNull(primer_nombre, '') + ' ' + IsNull(segundo_nombre,  ''), '  ', ' ') C10C," + 
                " '' C11A, '' C11B, '' C11C, 0 C11D, 0 C11E," +
                " C12A = Case When eps = '" + @vvc_iss_eps + "' Then dias_eps Else dias_afp End, " +
                " C13A = Case When eps = '" + @vvc_iss_eps + "' Then ibc_eps Else ibc_afp End, " + 
                " C14A = Case When afp = '" + @vvc_iss_afp + "' Then aporte_afp Else 0 End, " + 
                " C14B = Case When afp = '" + @vvc_iss_afp + "' Then aporte_fsp_sol + aporte_fsp_sub Else 0 End, " + 
                " C14C = Case When eps = '" + @vvc_iss_eps + "' Then aporte_eps Else 0 End, " + 
                " '' C25C, 0 C25C, '' C26N, 0 C26C" +
            " FROM fco_fantasmas" +
            " WHERE compania ='" + @pch_compania + "'" +
              " AND (eps = '" + @vvc_iss_eps + "' OR afp = '" + @vvc_iss_afp + "')" +
              " AND RTrim(anio) + Right('00' + RTrim(mes), 2) >= " + RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2)
            EXECUTE (@vvc_sql)
            IF @@ERROR <> 0 RAISERROR ('Error al incorporar aportantes fantasmas', 16, 1)
        END                                    

        /* REVISION JCL NOVIEMBRE 6 DE 2003. QUITAR LOS RETIRADOS DE HACE TIEMPO  */              
        /* SE COLOCO IsNull - JAS - 20041014 */              
        SET @vvc_sql = 
            " DELETE FROM " + @vsy_tabla + 
            " WHERE cod_trab IN (SELECT trabajador FROM trabajadores_grales" +
                               " WHERE compania = '" + @pch_compania + "'" + 
                                 " AND fecha_baja < '" + RTRIM(@psi_anio) +  RIGHT('00' + RTRIM(@pti_mes),2) + "01')"  +                    
              " AND IsNull(C11A, ' ') = ' ' AND IsNull(C11B, ' ') = ' ' AND IsNull(C11C, ' ') = ' ' AND IsNull(C11D, 0) = 0 " +              
              " AND IsNull(C11E, 0) = 0 AND IsNull(C12A, 0) = 0 AND IsNull(C13A, 0) = 0 AND IsNull(C14A, 0) = 0 " +              
              " AND IsNull(C14B, 0) = 0 AND IsNull(C14C, 0) = 0 AND IsNull(C25N, ' ') = ' ' AND IsNull(C25C, 0) = 0 " +              
              " AND IsNull(C26N, ' ') = ' ' AND IsNull(C26C, 0) = 0"
        EXECUTE (@vvc_sql)
    END /* IF @vbi_existe = 0 */                                                    
    
    IF @pbi_generar_mm = 1
        EXEC sp_fco_crea_autolx_mm @pch_compania, @psi_anio, @pti_mes, @pvc_suc
END                        
GO
GRANT EXECUTE ON dbo.sp_fco_crea_vw_iss TO PUBLIC
GO
PRINT 'Procedimientos de Autoliquidación... OK'
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes_mm]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes_mm
GO
CREATE TABLE fco_reportes_mm
(
	id_rep     smallint NOT NULL,
	usuariow	 varchar(30) NOT NULL,
	cod_rep  tinyint NOT NULL,
  sec_archivo smallint NOT NULL, --por si se manejan varios archivos. Es la sec configurada en la tabla ri_interfase_rutas
	secuencia  smallint NULL,
	registros  varchar(2000) NULL
)
GO
GRANT ALL ON fco_reportes_mm TO PUBLIC
GO

IF NOT EXISTS (SELECT 1 FROM sysindexes WHERE name = 'in_fco_reportes_mm01')
CREATE INDEX in_fco_reportes_mm01 ON fco_reportes_mm(id_rep, usuariow, cod_rep)
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes_proc]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes_proc
GO
CREATE TABLE dbo.fco_reportes_proc
( id_rep smallint NOT NULL,
  usuariow varchar(30) NOT NULL,
  cod_rep tinyint NOT NULL,  
  orden tinyint NOT NULL,
  valor varchar(20) NULL
)
ON [PRIMARY]
GO 
GRANT ALL ON fco_reportes_proc TO Public
GO

GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_gen_reportes_proc]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_reportes_proc
GO
CREATE PROCEDURE sp_fco_gen_reportes_proc
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_cod_rep tinyint,
  @pch_trab_dde char(10) = '',
  @pch_trab_hta char(10) = '',
  @pch_agr_1 char(10) = '',
  @pch_agr_2 char(10) = '',
  @pch_agr_3 char(10) = '',
  @pch_dato_dde char(10) = '',
  @pch_dato_hta char(10) = ''  
)
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: invoca los procedimientos de reportes de        ***/
/*** acuerdo a los parametros enviados de entrada                 ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                       ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Septiembre 25/2005							***/
AS
DECLARE
	@vvc_proc_genera	varchar(30),
  @vvc_inter	varchar(10),
  @cvc_valor varchar(20),
  @vnu_len   smallint,
  @vvc_ssql  varchar(2000)
    
BEGIN--1

	--trayendo el nombre del procedimiento
  SET @vvc_proc_genera = ''
  SET @vnu_len = 0

	SELECT @vvc_proc_genera = proc_generacion
	FROM fco_reportes
	WHERE cod_rep = @pti_cod_rep

	SET @vvc_proc_genera = LTRIM(RTRIM(ISNULL(@vvc_proc_genera,'')))
  SET @vnu_len = ISNULL(LEN(@vvc_proc_genera),0)

	IF @vnu_len = 0
	BEGIN
		SET @vvc_inter = LTRIM(RTRIM(@pti_cod_rep))
		RAISERROR ('Error de datos: No existe la funcion de generacion para el reporte: ', 16, 1, @vvc_inter)  
    RETURN
	END

  SET @vvc_ssql = 'EXECUTE ' + @vvc_proc_genera + ' ' +  RTRIM(@psi_id_rep) + ',' +
              '''' + @pvc_usuario + ''',' + RTRIM(@pti_cod_rep) + ',' +
							'''' + @pch_trab_dde + ''',' +
							'''' + @pch_trab_hta + ''',' +
							'''' + @pch_agr_1 + ''',' +
							'''' + @pch_agr_2 + ''',' +
							'''' + @pch_agr_3 + ''',' +
							'''' + @pch_dato_dde + ''',' +
							'''' + @pch_dato_hta + '''' 
  
  DECLARE cr_valores CURSOR FOR
  SELECT valor
  FROM fco_reportes_proc
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  AND cod_rep = @pti_cod_rep
  ORDER BY orden

 	OPEN cr_valores
	FETCH cr_valores INTO @cvc_valor

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--wh
  
        SET @vvc_ssql = @vvc_ssql + ',' + '''' + @cvc_valor + ''''
              
  	FETCH cr_valores INTO @cvc_valor;

	END--wh
	CLOSE cr_valores
	DEALLOCATE cr_valores

  SET @vvc_ssql =  @vvc_ssql
	EXEC (@vvc_ssql)
  
END--1
GO
GRANT EXECUTE ON sp_fco_gen_reportes_proc TO Public
go

GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_del_reportes_tablas]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_del_reportes_tablas
GO
CREATE PROCEDURE sp_fco_del_reportes_tablas
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(3),
  @pti_cod_rep tinyint
)
/********************************************************************/
/*** Fiscal de Colombia de Data Tecnologia                        ***/
/*** Descripcion: invoca los procedimientos de reportes de        ***/
/*** acuerdo a los parametros enviados de entrada                 ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                      ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Septiembre 25/2005							***/
AS
DECLARE
	@vvc_proc_genera	varchar(30),
  @vvc_inter	varchar(10),
  @vnu_len     smallint,
  @vvc_ssql  varchar(2000)
    
BEGIN

	--trayendo el nombre del procedimiento
  SET @vvc_proc_genera = ''
  SET @vnu_len = 0

	SELECT @vvc_proc_genera = proc_borrado
	FROM fco_reportes
	WHERE cod_rep = @pti_cod_rep

	SET @vvc_proc_genera = LTRIM(RTRIM(ISNULL(@vvc_proc_genera,'')))
  SET @vnu_len = ISNULL(LEN(@vvc_proc_genera),0)

	IF @vnu_len = 0
	BEGIN
		SET @vvc_inter = LTRIM(RTRIM(@pti_cod_rep))
		RAISERROR ('Error de datos: No existe la funcion de borrado de tablas para el reporte: %s ', 16, 1, @vvc_inter)  
    RETURN
	END

--si existe un procedimiento, entonces se ejecuta
	IF @vnu_len > 0
	BEGIN
	  SET @vvc_ssql = 'EXECUTE ' + @vvc_proc_genera + ' ' + RTRIM(@psi_id_rep) + ',' +
	              '''' + @pvc_usuario + ''',' + RTRIM(@pti_cod_rep)
	                            
		EXEC (@vvc_ssql)
	END

END
GO
GRANT EXECUTE ON sp_fco_del_reportes_tablas TO Public

go
IF OBJECT_ID('dbo.fco_parafiscales') IS NOT NULL
    DROP TABLE dbo.fco_parafiscales 
GO
CREATE TABLE dbo.fco_parafiscales
(
  id_rep      smallint NOT NULL,
  usuariow	  varchar(30) NOT NULL,
  cod_rep     tinyint NOT NULL,  
  compania    char(4) NOT NULL,
  sucursal    char(10) NULL,
  anio        smallint NULL,
  mes         tinyint NULL,
  trabajador  varchar(15) NULL,
  nombre      varchar(100) NULL,
  caja_cod    char(10) NULL,
  caja_nom    varchar(60) NULL,
  valor_base  decimal(19,6) NULL,
  valor_caja  decimal(19,6) NULL,
  valor_sena  decimal(19,6) NULL,
  valor_icbf  decimal(19,6) NULL,
  agr1        varchar(10) NULL,
  dato1       varchar(10) NULL,
  desc1	      varchar(40) NULL,
  agr2        varchar(10) NULL,
  dato2       varchar(10) NULL,
  desc2       varchar(40) NULL,
  agr3        varchar(10) NULL,
  dato3       varchar(10) NULL,
  desc3	      varchar(40) NULL,
  nombre_cia  varchar(60) NULL,
  registro_fiscal varchar(20) NULL
)
GO
GRANT ALL ON fco_parafiscales TO PUBLIC
GO

IF OBJECT_ID('dbo.fco_parafiscales_tmp') IS NOT NULL
    DROP TABLE dbo.fco_parafiscales_tmp 
GO
CREATE TABLE dbo.fco_parafiscales_tmp
(	
	id_rep   smallint NOT NULL,
	usuariow varchar(30) NOT NULL,
	trabajador char(10), 
	agr_caja char(10), 
	cod_caja char(10), 
	base decimal(19,6), 
	caja decimal(19,6), 
	sena decimal(19,6), 
	icbf decimal(19,6)
)
GO
GRANT ALL ON fco_parafiscales_tmp TO PUBLIC
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_rep_cajas_compensacion]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_rep_cajas_compensacion
GO
CREATE PROCEDURE dbo.sp_fco_rep_cajas_compensacion
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_cod_rep tinyint,
  @pch_trab_dde char(10) = '',
  @pch_trab_hta char(10) = '',
  @pch_agr_1 char(10) = '',
  @pch_agr_2 char(10) = '',
  @pch_agr_3 char(10) = '',
  @pch_dato_dde char(10) = '',
  @pch_dato_hta char(10) = '',--hasta aqui serian parametros fijos    
  @pch_compania char(4),
  @pch_sucursal char(10),
  @pnu_anio char(4),
  @pnu_mes  char(2)
)
/********************************************************************/
/*** Fiscal de Colombia de Data Tecnologia                        ***/
/*** Descripcion: Genera el reporte de cajas de compensacion      ***/
/*** Autor:	Juan Carlos Leguizamon                                ***/
/*** Adecuacion:	Diana Cecilia Rios Peinado                      ***/
/*** Fecha:	Mayo 14 de 2005                                       ***/
/********************************************************************/
--Despues de los parametros fijos, los parametros se reciben como varchar y dentro del sp se convierten
--al tipo de datos correspondiente
--OCT-03-05: Pasada a SQL de Oracle
AS
DECLARE
  @w_agr_trab_caja    char(10),
  @w_agr_conc_base    char(3),
  @w_agr_conc_caja    char(3),
  @w_agr_conc_sena    char(3),
  @w_agr_conc_icbf    char(3),
  @w_conc_base        smallint,
  @w_conc_caja        smallint,
  @w_conc_sena        smallint,
  @w_conc_icbf        smallint,
    
  @vch_compania char(4),
  @vnu_anio smallint,
  @vnu_mes tinyint,
  @vch_sucursal char(10),

  @vti_trab_dde tinyint,
  @vti_trab_hta tinyint,  

  @vch_fecha char(8),
  @vch_dias_fin char(2),
  @vdt_fec_fin smalldatetime
    
BEGIN
  -- Inicializar Variables
  SET @w_agr_trab_caja = ''
  SET @w_agr_conc_base = ''
  SET @w_agr_conc_caja = ''
  SET @w_agr_conc_sena = ''
  SET @w_agr_conc_icbf = ''
  SET @w_conc_base = -1
  SET @w_conc_caja = -1
  SET @w_conc_sena = -1
  SET @w_conc_icbf = -1

  SET @vch_compania = LTRIM(RTRIM(@pch_compania))
  SET @vnu_anio = CONVERT(smallint, @pnu_anio)
  SET @vnu_mes = CONVERT(tinyint, @pnu_mes)
  
  IF ISNULL(LTRIM(RTRIM(@pch_sucursal)), '0') = '0'
     SET @vch_sucursal = '001'
  ELSE
     SET @vch_sucursal = LTRIM(RTRIM(@pch_sucursal))

  --armando la fecha final
  SELECT @vch_dias_fin = LTRIM(RTRIM(dbo.fn_fco_ult_dia_mes(@vnu_anio, @vnu_mes)))
	SELECT @vch_dias_fin = CASE LEN(LTRIM(RTRIM(@vch_dias_fin))) WHEN 1 THEN '0' + LTRIM(RTRIM(@vch_dias_fin)) ELSE LTRIM(RTRIM(@vch_dias_fin)) END
  
  SET @vch_fecha = LTRIM(RTRIM(@vnu_anio)) + 
									 CASE LEN(LTRIM(RTRIM(@vnu_mes))) WHEN 1 THEN '0'+ LTRIM(RTRIM(@vnu_mes)) ELSE LTRIM(RTRIM(@vnu_mes)) END +
									 LTRIM(RTRIM(@vch_dias_fin))

	SET @vdt_fec_fin = @vch_fecha
  
  -- Recuperar parametros desde el MF
  SELECT @w_agr_trab_caja = dato
  FROM vw_fdt_parametros
  WHERE pais = 'COL' And compania = @vch_compania And parametro = 'parafiscal' And secuencia = 1

  SELECT @w_agr_conc_base = CASE tipo WHEN 0 THEN '-1' ELSE dato END, 
	@w_conc_base = CASE tipo WHEN 0 THEN dato ELSE -1 END
  FROM vw_fdt_parametros
  WHERE pais = 'COL' And compania = @vch_compania And parametro = 'parafiscal' And secuencia = 6

  SELECT @w_agr_conc_caja = CASE tipo WHEN 0 THEN '-1' ELSE dato END, 
	@w_conc_caja = CASE tipo WHEN 0 THEN dato ELSE -1 END
  FROM vw_fdt_parametros
  WHERE pais = 'COL' And compania = @vch_compania And parametro = 'parafiscal' And secuencia = 2

  SELECT @w_agr_conc_sena = CASE tipo WHEN 0 THEN '-1' ELSE dato END, 
	@w_conc_sena = CASE tipo WHEN 0 THEN dato ELSE -1 END
  FROM vw_fdt_parametros
  WHERE pais = 'COL' And compania = @vch_compania And parametro = 'parafiscal' And secuencia = 3

  SELECT @w_agr_conc_icbf = CASE tipo WHEN 0 THEN '-1' ELSE dato END, 
	@w_conc_icbf = CASE tipo WHEN 0 THEN dato ELSE -1 END
  FROM vw_fdt_parametros
  WHERE pais = 'COL' And compania = @vch_compania And  parametro = 'parafiscal' And secuencia = 4

  SET @vti_trab_dde = 0
  IF ISNULL(LTRIM(RTRIM(@pch_trab_dde)),'') = ''
      SET @vti_trab_dde = 1
  
  SET @vti_trab_hta = 0
  IF ISNULL(LTRIM(RTRIM(@pch_trab_hta)),'') = ''
      SET @vti_trab_hta = 1
  
  -- Borrar todos los datos actuales. 
  DELETE fco_parafiscales
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  AND cod_rep = @pti_cod_rep
  
  DELETE fco_parafiscales_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
    -- Insertar los nuevos datos
    --Base, si es agrupacion de concepto
    IF LTRIM(RTRIM(@w_agr_conc_base)) <> '-1'
		BEGIN--1
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, base)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.agr_conceptos = @w_agr_conc_base And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))

    END--1
               
    --Base, si es concepto
    IF @w_conc_base <> -1
		BEGIN--2
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, base)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.concepto = @w_conc_base And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--2

    --Caja, si es agrupacion de concepto
    IF LTRIM(RTRIM(@w_agr_conc_caja)) <> '-1'
		BEGIN--3
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, caja)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.agr_conceptos = @w_agr_conc_caja And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--3
               
    --Caja, si es concepto
    IF @w_conc_caja <> -1
		BEGIN--4
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, caja)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.concepto = @w_conc_caja And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--4

    --Sena, si es agrupacion de concepto
    IF LTRIM(RTRIM(@w_agr_conc_sena)) <> '-1'
		BEGIN--5
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, sena)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.agr_conceptos = @w_agr_conc_sena And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--5
               
    --Sena, si es concepto
    IF @w_conc_sena <> -1
		BEGIN--6
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, sena)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.concepto = @w_conc_sena And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--6
    
    --ICBF, si es agrupacion de concepto
    IF LTRIM(RTRIM(@w_agr_conc_icbf)) <> '-1'
		BEGIN--7
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, icbf)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.agr_conceptos = @w_agr_conc_icbf And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--7
                   
    --ICBF, si es concepto
    IF @w_conc_icbf <> -1
		BEGIN--8
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, icbf)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.concepto = @w_conc_icbf And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--8
                              
  -- NO PROCESAR LOS TRABAJADORES FUERA DEL RANGO DE DATOS DE LA AGR. 4
  IF ISNULL(LTRIM(RTRIM(@pch_dato_dde)),'') <> ''
	BEGIN
    DELETE fco_parafiscales_tmp
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND trabajador IN
      (SELECT trabajador FROM rel_trab_agr
      WHERE agrupacion = @pch_agr_1
      AND dato < @pch_dato_dde)
  END
    
  IF ISNULL(LTRIM(RTRIM(@pch_dato_hta)),'') <> ''
	BEGIN
    DELETE fco_parafiscales_tmp
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND trabajador IN
        (SELECT trabajador FROM rel_trab_agr
         WHERE agrupacion = @pch_agr_1
         AND dato > @pch_dato_hta)
  END
           
    INSERT INTO fco_parafiscales
    (id_rep, usuariow, cod_rep, compania, sucursal, anio, mes, trabajador, nombre, caja_cod, caja_nom,
    valor_base, valor_caja, valor_sena, valor_icbf)
    SELECT @psi_id_rep, @pvc_usuario, @pti_cod_rep, @vch_compania, @vch_sucursal, @vnu_anio, @vnu_mes, 
           SUBSTRING(LTRIM(RTRIM(T.clave_unica)),1,15), T.nombre, TMP.cod_caja, DAT.descripcion,
           sum(ISNULL(base,0)), sum(ISNULL(caja,0)), sum(ISNULL(sena,0)), sum(ISNULL(icbf,0))
    FROM  fco_parafiscales_tmp TMP, trabajadores T, datos_agr_trab DAT
    WHERE TMP.trabajador = T.trabajador And 
          TMP.agr_caja = DAT.agrupacion And TMP.cod_caja = DAT.dato
          And TMP.id_rep = @psi_id_rep
          And TMP.usuariow = @pvc_usuario
    GROUP BY 
          T.clave_unica, T.nombre, TMP.cod_caja, DAT.descripcion
    HAVING
          sum(ISNULL(base,0)) > 0;

    --actualizando el nombre de la cia y registro fiscal
    UPDATE fco_parafiscales
    SET nombre_cia = c.nombre_cia,
		registro_fiscal = c.registro_fiscal
		FROM fco_parafiscales rv, companias c
    WHERE rv.compania = c.compania 
		AND rv.id_rep = @psi_id_rep
    AND rv.usuariow = @pvc_usuario
    AND rv.compania = @vch_compania

  -- DATOS DE LAS AGRUPACIONES SELECCIONADAS POR EL USUARIO 
  IF ISNULL(LTRIM(RTRIM(@pch_agr_1)),'') <> '' 
	BEGIN--Ag1
    --Agrupacion 1 - agr1
    UPDATE fco_parafiscales
    SET agr1 = @pch_agr_1
		FROM fco_parafiscales rv
    WHERE rv.id_rep = @psi_id_rep 
      AND rv.usuariow = @pvc_usuario
      AND rv.cod_rep = @pti_cod_rep

    --Agrupacion 1 - dato1
	  UPDATE fco_parafiscales
	  SET dato1 = b.dato, desc1 = b.descripcion      
	  FROM hist_agrupaciones a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_1
	  AND a.fecha_alta = (select max(fecha_alta) from hist_agrupaciones h                        
	             where a.compania = h.compania AND
	                   a.agrupacion = h.agrupacion AND
	                   a.dato = h.dato AND                           
	                   a.trabajador = h.trabajador AND
	                   h.fecha_alta <= @vdt_fec_fin) AND                          
	  a.secuencia = (select max(secuencia) from hist_agrupaciones c                      
	                 where a.compania = c.compania AND
	                       a.agrupacion = c.agrupacion AND
	                       a.dato = c.dato AND
	                       a.trabajador = c.trabajador AND
	                       c.fecha_alta <= @vdt_fec_fin)                 
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep

		--ahora si, en la tabla de agrupaciones
	  UPDATE fco_parafiscales          
	  SET dato1 = b.dato, desc1 = b.descripcion          
	  FROM rel_trab_agr a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_1
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep
	  AND ISNULL(LTRIM(RTRIM(rv.dato1)),'') = ''  
  END--Ag1
    -- fin agrupacion 1

  IF ISNULL(LTRIM(RTRIM(@pch_agr_2)),'') <> '' 
	BEGIN --Ag2
    --Agrupacion 2 - agr2
    UPDATE fco_parafiscales
    SET agr2 = @pch_agr_2
		FROM fco_parafiscales rv
    WHERE rv.id_rep = @psi_id_rep 
      AND rv.usuariow = @pvc_usuario
      AND rv.cod_rep = @pti_cod_rep

	  UPDATE fco_parafiscales
	  SET dato2 = b.dato, desc2 = b.descripcion      
	  FROM hist_agrupaciones a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_2
	  AND a.fecha_alta = (select max(fecha_alta) from hist_agrupaciones h                        
	             where a.compania = h.compania AND
	                   a.agrupacion = h.agrupacion AND
	                   a.dato = h.dato AND                           
	                   a.trabajador = h.trabajador AND
	                   h.fecha_alta <= @vdt_fec_fin) AND                          
	  a.secuencia = (select max(secuencia) from hist_agrupaciones c                      
	                 where a.compania = c.compania AND
	                       a.agrupacion = c.agrupacion AND
	                       a.dato = c.dato AND
	                       a.trabajador = c.trabajador AND
	                       c.fecha_alta <= @vdt_fec_fin)                 
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep

		--ahora si, en la tabla de agrupaciones
	  UPDATE fco_parafiscales          
	  SET dato2 = b.dato, desc2 = b.descripcion          
	  FROM rel_trab_agr a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_2
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep
	  AND ISNULL(LTRIM(RTRIM(rv.dato2)),'') = ''    
  END--Ag2
    -- fin agrupacion 2

  IF ISNULL(LTRIM(RTRIM(@pch_agr_3)),'') <> ''
	BEGIN
    --Agrupacion 3 - agr3
    UPDATE fco_parafiscales
    SET agr3 = @pch_agr_3
		FROM fco_parafiscales rv
    WHERE rv.id_rep = @psi_id_rep 
      AND rv.usuariow = @pvc_usuario
      AND rv.cod_rep = @pti_cod_rep

    --Agrupacion 1 - dato1
	  UPDATE fco_parafiscales
	  SET dato3 = b.dato, desc3 = b.descripcion      
	  FROM hist_agrupaciones a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_3
	  AND a.fecha_alta = (select max(fecha_alta) from hist_agrupaciones h                        
	             where a.compania = h.compania AND
	                   a.agrupacion = h.agrupacion AND
	                   a.dato = h.dato AND                           
	                   a.trabajador = h.trabajador AND
	                   h.fecha_alta <= @vdt_fec_fin) AND                          
	  a.secuencia = (select max(secuencia) from hist_agrupaciones c                      
	                 where a.compania = c.compania AND
	                       a.agrupacion = c.agrupacion AND
	                       a.dato = c.dato AND
	                       a.trabajador = c.trabajador AND
	                       c.fecha_alta <= @vdt_fec_fin)                 
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep

		--ahora si, en la tabla de agrupaciones
	  UPDATE fco_parafiscales          
	  SET dato3 = b.dato, desc3 = b.descripcion          
	  FROM rel_trab_agr a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_3
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep
	  AND ISNULL(LTRIM(RTRIM(rv.dato3)),'') = ''  
  
  END
    -- fin agrupacion 3

END

GO
GRANT EXECUTE ON dbo.sp_fco_rep_cajas_compensacion TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_del_rep_cajas]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_del_rep_cajas
GO
CREATE PROCEDURE dbo.sp_fco_del_rep_cajas
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_cod_rep tinyint
)
/********************************************************************/
/*** Fiscal de Colombia de Data Tecnologia                        ***/
/*** Descripcion: limpia las tablas involucradas en la ejecucion  ***/
/*** del reporte de cajas                                         ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                      ***/
/********************************************************************/
--OCT-03-05: Pasada a SQL de Oracle
AS
BEGIN
     DELETE fco_reportes_proc
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep

     DELETE fco_parafiscales_tmp
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     
     DELETE fco_parafiscales
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep

     DELETE fco_reportes_mm
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep
     
END

GO
GRANT EXECUTE ON sp_fco_del_rep_cajas TO Public
GO
IF OBJECT_ID('dbo.fco_cir_cab') IS NOT NULL
    DROP TABLE dbo.fco_cir_cab 
GO
CREATE TABLE dbo.fco_cir_cab
(
  id_rep    smallint NOT NULL,
  usuariow	varchar(30) NOT NULL,
  cod_rep   tinyint NOT NULL,  
  compania  char(4) NOT NULL,
  sucursal  char(10) NOT NULL,
  anio 	    smallint NOT NULL,
  fecha_exp smalldatetime,
  nombre_cia       varchar(60),
  registro_fiscal  varchar(20),
  domicilio        varchar(40),
  municipio        varchar(60),
  departamento     varchar(60),
  sucursales       varchar(255),
  pagador_nombre   varchar(100),
  pagador_id       varchar(60),
  poner_carreta    tinyint,
  cod_admon        varchar(40),
  cod_depto        char(2), 
  cod_municipio    char(3), 
  telefono         varchar(25),
    Constraint PK_fco_cir_cab PRIMARY KEY (id_rep, usuariow, cod_rep, compania, sucursal, anio)
)

GO
GRANT ALL ON fco_cir_cab TO PUBLIC
GO

IF OBJECT_ID('dbo.fco_cir_det') IS NOT NULL
    DROP TABLE dbo.fco_cir_det 
GO
CREATE TABLE dbo.fco_cir_det
(
  id_rep      smallint NOT NULL,
  usuariow	  varchar(30) NOT NULL,
  cod_rep     tinyint NOT NULL,  
  compania    char(4) NOT NULL,
  sucursal    char(10) NOT NULL,
  anio 	      smallint NOT NULL,
  numero      smallint NOT NULL,
  trabajador  char(10),
  nombre      varchar(60),
  cedula      varchar(20),
  fecha_desde smalldatetime,
  fecha_hasta smalldatetime,
  campo_ng    decimal(19,6),
  campo_gr    decimal(19,6),
  secuencia   tinyint,
  valor_retencion  decimal(13,2),
  agr1        varchar(10) NULL,
  dato1       varchar(10) NULL,
  desc1	      varchar(40) NULL,
  agr2        varchar(10) NULL,
  dato2       varchar(10) NULL,
  desc2       varchar(40) NULL,
  agr3        varchar(10) NULL,
  dato3       varchar(10) NULL,
  desc3	      varchar(40) NULL  
)

GO
GRANT ALL ON fco_cir_det TO PUBLIC
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[vw_fco_rep_cir]') 
AND OBJECTPROPERTY(id, N'IsView') = 1)
    DROP VIEW dbo.vw_fco_rep_cir
GO
CREATE VIEW dbo.vw_fco_rep_cir
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Reporte de CIR                   ***/
/*** Descripcion: Vista que ve el reporte del CIR                 ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 15 de 2005                                       ***/
/********************************************************************/
--OCT-03-05: Pasada a SQL de ORA
SELECT a.id_rep, a.usuariow, a.cod_rep, a.compania, a.sucursal, a.anio,
a.fecha_exp, a.nombre_cia, a.registro_fiscal, a.domicilio, a.municipio, a.departamento,
a.sucursales, a.pagador_nombre, a.pagador_id, a.poner_carreta, a.cod_admon, a.cod_depto,
a.cod_municipio, a.telefono, b.numero, b.trabajador, b.nombre, b.cedula,
b.fecha_desde, b.fecha_hasta, b.campo_ng, b.campo_gr, b.secuencia, b.valor_retencion,
b.agr1, b.dato1, b.desc1, b.agr2, b.dato2, b.desc2, b.agr3, b.dato3, b.desc3
FROM fco_cir_cab a, fco_cir_det b
WHERE a.Id_Rep = b.Id_Rep
AND a.usuariow = b.usuariow
AND a.cod_rep = b.cod_rep
AND a.compania = b.compania
AND a.sucursal = b.sucursal

GO
GRANT SELECT ON vw_fco_rep_cir TO PUBLIC
go


IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_del_rep_cir') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_del_rep_cir
GO
CREATE PROCEDURE dbo.sp_fco_del_rep_cir
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_cod_rep tinyint
)
/********************************************************************/
/*** Fiscal de Colombia de Data Tecnologia                        ***/
/*** Descripcion: limpia las tablas involucradas en la ejecucion  ***/
/*** del reporte de ingresos y retenciones                        ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 15 de 2005                                      ***/
/********************************************************************/
--OCT-03-05: Pasada a SQL de ORA
AS
BEGIN
     DELETE fco_reportes_proc
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep
     
     DELETE fco_cir_cab
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep

     DELETE fco_cir_det
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep

     DELETE fco_reportes_mm
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep
     
END

GO
GRANT EXECUTE ON dbo.sp_fco_del_rep_cir TO PUBLIC
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_embargos_mm_paso0]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_embargos_mm_paso0
GO
CREATE TABLE dbo.fco_embargos_mm_paso0
( 
  id_rep      smallint NOT NULL,
  usuariow	  varchar(30) NOT NULL,
  cod_rep     tinyint NOT NULL,  
  registro VARCHAR(700)
)
GO
GRANT ALL ON fco_embargos_mm_paso0 TO Public
GO




IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_embargos_mm_paso]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_embargos_mm_paso
GO
CREATE TABLE fco_embargos_mm_paso
( 
  id_rep      smallint NOT NULL,
  usuariow	  varchar(30) NOT NULL,
  cod_rep     tinyint NOT NULL,  
  consecutivo INTEGER,
  registro VARCHAR(700)
)
GO
GRANT ALL ON fco_embargos_mm_paso0 TO Public
GO


IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_embargos_trans]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_embargos_trans
GO
CREATE TABLE dbo.fco_embargos_trans
(
  id_rep      smallint NOT NULL,
  usuariow	  varchar(30) NOT NULL,
  cod_rep     tinyint NOT NULL,  
  compania char(4) NOT NULL,
  anio smallint NOT NULL,
  mes tinyint NOT NULL,
  trabajador char(10) NOT NULL,
  concepto smallint NOT NULL,
  secuencia smallint NOT NULL,
  importe decimal(13,2) NOT NULL
)
GO
GRANT ALL ON fco_embargos_trans TO Public
GO


IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_del_rep_embargos_mm') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_del_rep_embargos_mm
GO
CREATE PROCEDURE dbo.sp_fco_del_rep_embargos_mm
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_cod_rep tinyint
)
/********************************************************************/
/*** Fiscal de Colombia de Data Tecnologia                        ***/
/*** Descripcion: limpia las tablas involucradas en la ejecucion  ***/
/*** del reporte de embargos                                         ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 15 de 2005                                      ***/
/********************************************************************/
--OCT-01-05: DCRP, Pasado a SQL de Oracle
AS
BEGIN
     DELETE fco_reportes_proc
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep
     
     DELETE fco_reportes_mm
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep

     DELETE fco_embargos_trans    
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep

    DELETE fco_embargos_mm_paso0
    WHERE id_rep = @psi_id_rep
      AND usuariow = @pvc_usuario
      AND cod_rep = @pti_cod_rep
    
    DELETE fco_embargos_mm_paso
    WHERE id_rep = @psi_id_rep
      AND usuariow = @pvc_usuario
      AND cod_rep = @pti_cod_rep
          
END
GO
GRANT EXECUTE ON dbo.sp_fco_del_rep_embargos_mm TO PUBLIC
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_crea_embargos_mm') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_crea_embargos_mm
GO
CREATE PROCEDURE sp_fco_crea_embargos_mm
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_cod_rep tinyint,
  @pch_trab_dde char(10) = '',
  @pch_trab_hta char(10) = '',
  @pch_agr_1 char(10) = '',
  @pch_agr_2 char(10) = '',
  @pch_agr_3 char(10) = '',
  @pch_dato_dde char(10) = '',
  @pch_dato_hta char(10) = '',--hasta aqui serian parametros fijos    
  @pch_compania   char(4),
  @psi_anio        char(5),
  @pti_mes         char(3),
  @pch_ciudad_pago char(2)
)
/**********************************************************************/
/*** Modulo:      Módulo Fiscal ADAM V.3                            ***/
/*** Descripcion: Medio Magnético Embargos                          ***/
-- REVISION GENERAL Juan Carlos Leguizamon
-- DIC. 06/04. PARA SURTIGAS
/**********************************************************************/
/*** Adecuacion: Diana Cecilia Rios Peinado                         ***/
/*** Mayo 15 de 2005                                                ***/
--OCT-01-05: DCRP, Pasado a SQL de Oracle
AS
DECLARE
	@vch_agr_embargos  CHAR(3),
	@csi_id_cal        INTEGER, --calendario_procesos.id_calendario%TYPE;
	@vvc_sql           VARCHAR(500),
	@vvc_tabla         VARCHAR(16),  
	@vsi_registros     INTEGER,
	@vdt_fecha_hoy	   SMALLDATETIME,
	@comilla				CHAR(1),

  @vch_compania    char(4),
  @vsi_anio        smallint,
  @vti_mes         tinyint,
  @vch_ciudad_pago char(2),
  
  @vti_trab_dde tinyint,
  @vti_trab_hta tinyint
    

BEGIN
	SET @comilla = ''''
	SET @vdt_fecha_hoy = getdate()

  SET @vch_compania = @pch_compania
  SET @vsi_anio = CONVERT(smallint, @psi_anio)  
  SET @vti_mes = CONVERT(tinyint, @pti_mes)
  SET @vch_ciudad_pago = LTRIM(RTRIM(@pch_ciudad_pago))
  
  /* Hallar la agrupación de embargos */
  SELECT @vch_agr_embargos = dato
  FROM vw_fdt_parametros
  WHERE 
    pais = 'COL'
    AND compania = @vch_compania
    AND parametro = 'otros'
    AND secuencia = 1
  
  /* ELIMINAR DATOS ACTUALES */    
  DELETE fco_embargos_trans    
  WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep
      
  DELETE fco_reportes_mm
  WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep

   SET @vti_trab_dde = 0
   IF ISNULL(LTRIM(RTRIM(@pch_trab_dde)),'') = ''
      SET @vti_trab_dde = 1
  
   SET @vti_trab_hta = 0
   IF ISNULL(LTRIM(RTRIM(@pch_trab_hta)),'') = ''
      SET @vti_trab_hta = 1
    
  DECLARE cr_id_calendario  CURSOR FOR
  SELECT    
    cp.id_calendario    
  FROM    
    calendario_procesos cp, 
    cal_proc_cias cpc    
  WHERE    
    cp.id_calendario = cpc.id_calendario 
    AND cpc.compania = @vch_compania 
    AND cp.anio = @vsi_anio 
    AND cp.mes_acumular = @vti_mes 
    AND cpc.sit_periodo = 2

  OPEN cr_trab_envio
  FETCH NEXT FROM cr_id_calendario INTO @csi_id_cal

  WHILE @@FETCH_STATUS = 0
  BEGIN--w1
  
    SET @vvc_sql = 'INSERT INTO fco_embargos_trans ' +
    ' SELECT ' +  @psi_id_rep + ', ' +
                  @comilla + @pvc_usuario + @comilla + ', ' + @pti_cod_rep + ', ' +
    ' tns.compania, ' + LTRIM(RTRIM(@vsi_anio)) + ',' + LTRIM(RTrim(@vti_mes)) + ',' +    
    ' tns.trabajador, tns.concepto, tns.factor_02, SUM(tns.importe)' +    
    ' FROM' +    
    ' trans_' + LTRIM(RTRIM(@vch_compania)) + '_' + LTRIM(RTRIM(@csi_id_cal)) + ' tns,' +    
    ' rel_conceptos_agr rca' +    
    ' WHERE' +    
    ' tns.compania = rca.compania And tns.concepto = rca.concepto And' +    
    ' rca.agr_conceptos = ' + @comilla + @vch_agr_embargos + @comilla + ' And' +    
    ' rca.signo = ' + @comilla + '+' + @comilla + ' And' +
    ' tns.compania = ' + @comilla + @vch_compania + @comilla + ' And' +    
    ' tns.id_calendario = ' + LTRIM(RTRIM(@csi_id_cal)) + ' And' +    
    ' tns.importe > 0' +
    ' AND ' +
    ' (( '+ RTRIM(@vti_trab_dde) + ' = 1) OR (tns.trabajador >= RTRIM(''' + @pch_trab_dde + ''') AND '+ RTRIM(@vti_trab_dde) + ' = 0)) AND' +
    ' (( '+ RTRIM(@vti_trab_hta) + ' = 1) OR (tns.trabajador <= RTRIM(''' + @pch_trab_hta + ''') AND '+ RTRIM(@vti_trab_hta) + ' = 0)) ' +
    ' GROUP BY' +    
    ' tns.compania, tns.trabajador, tns.concepto, tns.factor_02'

		EXECUTE (@vvc_sql)
		FETCH NEXT FROM cr_id_calendario INTO @csi_id_cal
	END--w1
  CLOSE cr_id_calendario
	DEALLOCATE cr_id_calendario

  /* INSERTAR REGISTROS DE LIQUIDACIONES */  
  INSERT INTO 
    fco_embargos_trans    
  SELECT    
    @psi_id_rep, @pvc_usuario, @pti_cod_rep, ld.compania, @vsi_anio, @vti_mes, ld.trabajador, ld.concepto, ld.factor_02, SUM(ld.importe)    
  FROM    
    liquidaciones_enc le, liquidaciones_det ld, rel_conceptos_agr rca    
  WHERE    
    le.compania = ld.compania 
    AND le.numero_liquidacion = ld.numero_liquidacion 
    AND ld.compania = rca.compania 
    AND ld.concepto = rca.concepto 
    AND rca.agr_conceptos = @vch_agr_embargos 
    AND rca.signo = '+' 
    AND ld.compania = @vch_compania 
    AND le.sit_liquidacion = 2 
    AND ld.sit_transaccion = 2 
    AND ld.anio_acumular = @vsi_anio 
    AND ld.mes_acumular = @vti_mes 
    AND ld.importe > 0   
    AND ((@vti_trab_dde = 1) OR (ld.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
       ((@vti_trab_hta = 1) OR (ld.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))      
  GROUP BY     
    ld.compania, ld.trabajador, ld.concepto, ld.factor_02

  -- NO PROCESAR LOS TRABAJADORES FUERA DEL RANGO DE DATOS DE LA AGR. 4
  IF ISNULL(LTRIM(RTRIM(@pch_dato_dde)),'') <> '' 
	BEGIN
    DELETE fco_embargos_trans
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep
    AND trabajador IN
      (SELECT trabajador FROM rel_trab_agr
      WHERE agrupacion = @pch_agr_1
      AND dato < @pch_dato_dde)
  END
    
  IF ISNULL(LTRIM(RTRIM(@pch_dato_hta)),'') <> ''
	BEGIN
    DELETE fco_embargos_trans
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep    
    AND trabajador IN
        (SELECT trabajador FROM rel_trab_agr
         WHERE agrupacion = @pch_agr_1
         AND dato > @pch_dato_hta)
  END
        
  /* GENERACION DEL REGISTRO DE DATOS */
  INSERT INTO fco_embargos_mm_paso0
  SELECT @psi_id_rep, @pvc_usuario, @pti_cod_rep,
    CONVERT(CHAR(8), @vdt_fecha_hoy, 112) +
		REPLICATE('0', 4 - LEN(LTRIM(RTRIM(ISNULL(a.oficina_origen, '10'))))) + LTRIM(RTRIM(ISNULL(a.oficina_origen, '10'))) +
		REPLICATE('0', 4 - LEN(LTRIM(RTRIM(ISNULL(a.oficina_destino, '10'))))) + LTRIM(RTRIM(ISNULL(a.oficina_destino, '10'))) +
    SUBSTRING(LTRIM(RTRIM(clase_deposito)), 1, 1) +    
		LTRIM(RTRIM(a.numero_expediente)) + SPACE(10 - LEN(LTRIM(RTRIM(a.numero_expediente)))) +
		REPLICATE('0', 12 - LEN(ISNULL(RTRIM(LTRIM(a.codigo_juzgado)), '0'))) + ISNULL(RTRIM(LTRIM(a.codigo_juzgado)), '0') +
		REPLICATE('0', 12 - LEN(ISNULL(RTRIM(LTRIM(a.cuenta)),'0'))) + ISNULL(RTRIM(LTRIM(a.cuenta)),'0') +
		REPLICATE('0', 13 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(SUM(b.importe))))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(SUM(b.importe))))) + '.00' +
    SUBSTRING(LTRIM(RTRIM(a.tipo_id_demandante)), 1, 1) +
		REPLICATE('0', 11 - LEN(ISNULL(RTRIM(LTRIM(a.id_demandante)),'0'))) + ISNULL(RTRIM(LTRIM(a.id_demandante)),'0') +
    '1' +
		REPLICATE('0', 11 - LEN(ISNULL(RTRIM(LTRIM(a.cedula)),'0'))) + ISNULL(RTRIM(LTRIM(a.cedula)),'0') +
		LTRIM(RTRIM(a.apellido_demandante)) + SPACE(20 - LEN(LTRIM(RTRIM(a.apellido_demandante)))) +
		LTRIM(RTRIM(a.nombre_demandante)) + SPACE(20 - LEN(LTRIM(RTRIM(a.nombre_demandante)))) +
		LTRIM(RTRIM(a.apellidos)) + SPACE(20 - LEN(LTRIM(RTRIM(a.apellidos)))) +
		LTRIM(RTRIM(a.nombres)) + SPACE(20 - LEN(LTRIM(RTRIM(a.nombres)))) registro
  FROM     
    vw_fdt_embargos a, fco_embargos_trans b    
  WHERE    
    a.compania = b.compania 
    AND a.trabajador = b.trabajador 
    AND a.concepto = b.concepto 
    AND a.secuencia = b.secuencia 
    AND b.compania = @vch_compania 
    AND b.anio = @vsi_anio 
    AND b.mes = @vti_mes 
    AND a.banco = 1  
    AND a.ciudad_pago = @vch_ciudad_pago
    AND b.id_rep = @psi_id_rep
    AND b.usuariow = @pvc_usuario
    AND b.cod_rep = @pti_cod_rep
  GROUP BY    
    a.oficina_origen, a.oficina_destino, a.clase_deposito, a.numero_expediente,    
    a.codigo_juzgado, a.cuenta, a.tipo_id_demandante, a.id_demandante,    
    a.cedula, a.apellido_demandante, a.nombre_demandante,    
    a.apellidos, a.nombres

  SELECT @psi_id_rep AS id_rep, @pvc_usuario AS usuario, @pti_cod_rep AS cod_rep,
  IDENTITY(int, 1, 1) AS secuencia, registro
	INTO #tmp_paso
  FROM fco_embargos_mm_paso0
  WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep

  INSERT INTO fco_embargos_mm_paso 
	SELECT * FROM #tmp_paso

	DROP TABLE #tmp_paso

  --se guarda con secuencia de archivo 1
  INSERT INTO 
    fco_reportes_mm    
  SELECT     
    @psi_id_rep, @pvc_usuario,  @pti_cod_rep, 1, 
    consecutivo + 2,
		REPLICATE('0', 6 - LEN(RTrim(consecutivo)))  + RTrim(consecutivo) + registro + CHAR(10) 
  FROM    
    fco_embargos_mm_paso
  WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep
    
  SELECT @vsi_registros = MAX(consecutivo)    
  FROM 
    fco_embargos_mm_paso
  WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep
    
  DELETE fco_embargos_mm_paso0
  WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep
  
  DELETE fco_embargos_mm_paso
  WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep
  
  INSERT INTO 
    fco_reportes_mm    
  SELECT  
    @psi_id_rep, @pvc_usuario,  @pti_cod_rep, 1,
    1,     
    REPLICATE(' ', 23) +
		REPLICATE('0', 10 - LEN(ISNULL(LTRIM(RTRIM(@vsi_registros)),'0'))) + ISNULL(LTRIM(RTRIM(@vsi_registros)),'0') +
    REPLICATE(' ', 40) +
    '5' +
    '00' + SUBSTRING(registro_fiscal, 1, 9) +    
    REPLICATE(' ', 12) +
		REPLICATE('0', 40 - LEN(LTRIM(RTRIM(nombre_cia)))) + LTRIM(RTRIM(nombre_cia)) +
    REPLICATE(' ', 51)
  FROM    
    vw_fco_companias    
  WHERE    
    compania = @vch_compania
          
END
GO
GRANT EXECUTE ON dbo.sp_fco_crea_embargos_mm TO PUBLIC
GO


IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_embargos_rep]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_embargos_rep
GO
CREATE TABLE dbo.fco_embargos_rep
(
  id_rep      smallint NOT NULL,
  usuariow	  varchar(30) NOT NULL,
  cod_rep     tinyint NOT NULL,  
  compania    char(4) NOT NULL,
  trabajador          char(10) NOT NULL,
  concepto            smallint NOT NULL,
  secuencia           smallint NOT NULL,
  apellido_demandante varchar(20) NULL,
  nombre_demandante   varchar(20) NULL,
  apellidos_trab      varchar(20) NULL,
  nombres_trab        varchar(20) NULL,
  agr_conceptos_base  char(3) NULL,
  concepto_base       smallint NULL,
  quinta_parte        smallint NULL,
  monto_total         decimal(14,2) NULL,
  saldo_actual        decimal(14,2) NULL,
  porcentaje          decimal(4,2) NULL,
  cuota_fija          decimal(14,2) NULL,
  nombre_cia          varchar(60) NULL,
  agr1        varchar(10) NULL,
  dato1       varchar(10) NULL,
  desc1	      varchar(40) NULL,
  agr2        varchar(10) NULL,
  dato2       varchar(10) NULL,
  desc2       varchar(40) NULL,
  agr3        varchar(10) NULL,
  dato3       varchar(10) NULL,
  desc3	      varchar(40) NULL,
  CONSTRAINT PK_fco_embargos_rep PRIMARY KEY 
  (id_rep, usuariow, cod_rep, compania, trabajador, concepto, secuencia) 
)
GO
GRANT ALL ON fco_embargos_rep TO Public
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_rep_embargos') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_rep_embargos
GO
CREATE PROCEDURE dbo.sp_fco_rep_embargos
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_cod_rep tinyint,
  @pch_trab_dde char(10) = '',
  @pch_trab_hta char(10) = '',
  @pch_agr_1 char(10) = '',
  @pch_agr_2 char(10) = '',
  @pch_agr_3 char(10) = '',
  @pch_dato_dde char(10) = '',
  @pch_dato_hta char(10) = '',--hasta aqui serian parametros fijos    
  @pch_compania char(4),
  @pdt_fecha    char(8),
  @pch_activos  char(2) --Vendria S o N
  
)
/********************************************************************/
/*** Fiscal de Colombia de Data Tecnologia                        ***/
/*** Descripcion: Genera el reporte de cajas de compensacion      ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Expl.:	Antes se ejecutaba una vista vw_fdt_embargos          ***/
/*** Fecha:	Mayo 15 de 2005                                       ***/
/********************************************************************/
--Despues de los parametros fijos, los parametros se reciben como varchar y dentro del sp se convierten
--al tipo de datos correspondiente
--OCT-01-05: DCRP, Pasado a SQL de Oracle
AS
DECLARE
  @vch_compania char(4),
  @vdt_fecha    smalldatetime,
  @vnu_situacion tinyint,
  
  @vti_trab_dde tinyint,
  @vti_trab_hta tinyint,
  @vti_fecha tinyint,
  @vti_sit tinyint
BEGIN

  SET @vch_compania = @pch_compania

  SET @vti_fecha = 1
  IF ISNULL(LTRIM(RTRIM(@pdt_fecha)),'') <> ''   --viene una fecha
	BEGIN
     SET @vti_fecha = 0
     SET @vdt_fecha = @pdt_fecha
  END
  
  SET @vti_sit = 1
  IF ISNULL(LTRIM(RTRIM(@pch_activos)),'') <> ''   --viene una situacion
	BEGIN
     SET @vti_sit = 0
     IF LTRIM(RTRIM(@pch_activos)) = 'S'
        SET @vnu_situacion = 1
     ELSE
        SET @vnu_situacion = 0
  END
  
  SET @vti_trab_dde = 0
  IF ISNULL(LTRIM(RTRIM(@pch_trab_dde)),'') = '' 
      SET @vti_trab_dde = 1
  
  SET @vti_trab_hta = 0
  IF ISNULL(LTRIM(RTRIM(@pch_trab_hta)),'') = ''
      SET @vti_trab_hta = 1

  --trayendo la informacion de embargos
  INSERT INTO fco_embargos_rep
  (id_rep, usuariow, cod_rep, compania, trabajador, concepto, secuencia, apellido_demandante,
  nombre_demandante, apellidos_trab, nombres_trab, agr_conceptos_base, concepto_base,
  quinta_parte, monto_total, saldo_actual, porcentaje, cuota_fija, nombre_cia)
  SELECT @psi_id_rep, @pvc_usuario, @pti_cod_rep, E.Compania, E.Trabajador, E.Concepto, E.Secuencia,
  E.Apellido_Demandante, E.Nombre_Demandante, 
  dbo.fn_Primer_Apellido(T.nombre) + ' ' + dbo.fn_Segundo_Apellido(T.nombre) As apellidos_trab,
  dbo.fn_Primer_Nombre(T.nombre) + ' ' +  dbo.fn_Segundo_Nombre(T.nombre) As nombres_trab,
  E.Agr_Conceptos_Base, E.Concepto_Base, E.Quinta_Parte, E.Monto_Total, E.Saldo_Actual, E.Porcentaje,
  E.Cuota_Fija, D.Nombre_Cia
  FROM fdt_embargos E, trabajadores T, conceptos C, companias D
  WHERE
    E.compania = D.compania And
    E.trabajador = T.trabajador And
    E.concepto = C.concepto And
    E.compania = @vch_compania
    And ((@vti_trab_dde = 1) OR (T.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
       ((@vti_trab_hta = 1) OR (T.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    And ((@vti_fecha = 1) OR (E.fecha_alta >= @vdt_fecha AND RTRIM(@vti_fecha) = 0)) 
    And ((@vti_sit = 1) OR (E.Situacion = @vnu_situacion AND RTRIM(@vti_sit) = 0));
    
  -- NO PROCESAR LOS TRABAJADORES FUERA DEL RANGO DE DATOS DE LA AGR. 4
  IF ISNULL(LTRIM(RTRIM(@pch_dato_dde)),'') <> ''
	BEGIN
    DELETE fco_embargos_rep
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep
    AND trabajador IN
      (SELECT trabajador FROM rel_trab_agr
      WHERE agrupacion = @pch_agr_1
      AND dato < @pch_dato_dde)
  END
    
  IF ISNULL(LTRIM(RTRIM(@pch_dato_hta)),'') <> ''
	BEGIN
    DELETE fco_embargos_rep
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND cod_rep = @pti_cod_rep    
    AND trabajador IN
        (SELECT trabajador FROM rel_trab_agr
         WHERE agrupacion = @pch_agr_1
         AND dato > @pch_dato_hta)
  END

  -- DATOS DE LAS AGRUPACIONES SELECCIONADAS POR EL USUARIO 
  IF ISNULL(LTRIM(RTRIM(@pch_agr_1)),'') <> '' 
	BEGIN--Ag1
    --Agrupacion 1 - agr1
    UPDATE fco_embargos_rep
    SET agr1 = @pch_agr_1
		FROM fco_embargos_rep rv
    WHERE rv.id_rep = @psi_id_rep 
      AND rv.usuariow = @pvc_usuario
      AND rv.cod_rep = @pti_cod_rep

    --Agrupacion 1 - dato1
	  UPDATE fco_embargos_rep
	  SET dato1 = b.dato, desc1 = b.descripcion      
	  FROM hist_agrupaciones a, datos_agr_trab b, fco_embargos_rep rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_1
	  AND a.fecha_alta = (select max(fecha_alta) from hist_agrupaciones h                        
	             where a.compania = h.compania AND
	                   a.agrupacion = h.agrupacion AND
	                   a.dato = h.dato AND                           
	                   a.trabajador = h.trabajador AND
	                   h.fecha_alta <= @vdt_fecha) AND                          
	  a.secuencia = (select max(secuencia) from hist_agrupaciones c                      
	                 where a.compania = c.compania AND
	                       a.agrupacion = c.agrupacion AND
	                       a.dato = c.dato AND
	                       a.trabajador = c.trabajador AND
	                       c.fecha_alta <= @vdt_fecha)                 
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep

		--ahora si, en la tabla de agrupaciones
	  UPDATE fco_embargos_rep          
	  SET dato1 = b.dato, desc1 = b.descripcion          
	  FROM rel_trab_agr a, datos_agr_trab b, fco_embargos_rep rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_1
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep
	  AND ISNULL(LTRIM(RTRIM(rv.dato1)),'') = ''  
  END--Ag1
    -- fin agrupacion 1

  IF ISNULL(LTRIM(RTRIM(@pch_agr_2)),'') <> '' 
	BEGIN --Ag2
    --Agrupacion 2 - agr2
    UPDATE fco_embargos_rep
    SET agr2 = @pch_agr_2
		FROM fco_embargos_rep rv
    WHERE rv.id_rep = @psi_id_rep 
      AND rv.usuariow = @pvc_usuario
      AND rv.cod_rep = @pti_cod_rep

	  UPDATE fco_embargos_rep
	  SET dato2 = b.dato, desc2 = b.descripcion      
	  FROM hist_agrupaciones a, datos_agr_trab b, fco_embargos_rep rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_2
	  AND a.fecha_alta = (select max(fecha_alta) from hist_agrupaciones h                        
	             where a.compania = h.compania AND
	                   a.agrupacion = h.agrupacion AND
	                   a.dato = h.dato AND                           
	                   a.trabajador = h.trabajador AND
	                   h.fecha_alta <= @vdt_fecha) AND                          
	  a.secuencia = (select max(secuencia) from hist_agrupaciones c                      
	                 where a.compania = c.compania AND
	                       a.agrupacion = c.agrupacion AND
	                       a.dato = c.dato AND
	                       a.trabajador = c.trabajador AND
	                       c.fecha_alta <= @vdt_fecha)                 
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep

		--ahora si, en la tabla de agrupaciones
	  UPDATE fco_embargos_rep          
	  SET dato2 = b.dato, desc2 = b.descripcion          
	  FROM rel_trab_agr a, datos_agr_trab b, fco_embargos_rep rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_2
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep
	  AND ISNULL(LTRIM(RTRIM(rv.dato2)),'') = ''    
  END--Ag2
    -- fin agrupacion 2

  IF ISNULL(LTRIM(RTRIM(@pch_agr_3)),'') <> ''
	BEGIN
    --Agrupacion 3 - agr3
    UPDATE fco_embargos_rep
    SET agr3 = @pch_agr_3
		FROM fco_embargos_rep rv
    WHERE rv.id_rep = @psi_id_rep 
      AND rv.usuariow = @pvc_usuario
      AND rv.cod_rep = @pti_cod_rep

    --Agrupacion 1 - dato1
	  UPDATE fco_embargos_rep
	  SET dato3 = b.dato, desc3 = b.descripcion      
	  FROM hist_agrupaciones a, datos_agr_trab b, fco_embargos_rep rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_3
	  AND a.fecha_alta = (select max(fecha_alta) from hist_agrupaciones h                        
	             where a.compania = h.compania AND
	                   a.agrupacion = h.agrupacion AND
	                   a.dato = h.dato AND                           
	                   a.trabajador = h.trabajador AND
	                   h.fecha_alta <= @vdt_fecha) AND                          
	  a.secuencia = (select max(secuencia) from hist_agrupaciones c                      
	                 where a.compania = c.compania AND
	                       a.agrupacion = c.agrupacion AND
	                       a.dato = c.dato AND
	                       a.trabajador = c.trabajador AND
	                       c.fecha_alta <= @vdt_fecha)                 
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep

		--ahora si, en la tabla de agrupaciones
	  UPDATE fco_embargos_rep          
	  SET dato3 = b.dato, desc3 = b.descripcion          
	  FROM rel_trab_agr a, datos_agr_trab b, fco_embargos_rep rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_3
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep
	  AND ISNULL(LTRIM(RTRIM(rv.dato3)),'') = ''  
  
  END
    -- fin agrupacion 3
  
END
GO
GRANT EXECUTE ON dbo.sp_fco_rep_embargos TO PUBLIC
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_del_rep_embargos') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_del_rep_embargos
GO
CREATE PROCEDURE dbo.sp_fco_del_rep_embargos
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_cod_rep tinyint
)
/********************************************************************/
/*** Fiscal de Colombia de Data Tecnologia                        ***/
/*** Descripcion: limpia las tablas involucradas en la ejecucion  ***/
/*** del reporte de embargos                                      ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 15 de 2005                                       ***/
/********************************************************************/
--OCT-01-05: DCRP, Pasado a SQL de Oracle
AS
BEGIN
     DELETE fco_reportes_proc
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep
     
     DELETE fco_embargos_rep
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep

     DELETE fco_reportes_mm
     WHERE id_rep = @psi_id_rep
     AND usuariow = @pvc_usuario
     AND cod_rep = @pti_cod_rep
          
END
GO
GRANT EXECUTE ON dbo.sp_fco_del_rep_embargos TO PUBLIC
GO

PRINT 'Generación de Reportes Varios...OK'
GO


if (select count(*) from fco_sucursales) = 0
    insert into fco_sucursales
    (compania, sucursal, descripcion, direccion, cod_ciudad, cod_dpto, telefono, fax, clase_nomina, 
    nombre_retenedor, cedula_retenedor, agencias, codigo_iss, autoliquida)
    select compania, sucursal, descripcion, direccion, cod_ciudad, cod_dpto, telefono, fax, clase_nomina, 
    nombre_retenedor, cedula_retenedor, agencias, codigo_iss, 1
    from mf_sucursales
PRINT 'Datos de Sucursales...OK'




-- Ausentismos
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'tipo_ausentismo')
BEGIN
insert into criterios_valores_col values ('tipo_ausentismo', 0, 'Enfermedad General', 'concepto', 300, NULL);
insert into criterios_valores_col values ('tipo_ausentismo', 1, 'Licencia de Maternidad', 'concepto', 320, NULL);
insert into criterios_valores_col values ('tipo_ausentismo', 2, 'Enfermedad Profesional', 'concepto', 340, NULL);
insert into criterios_valores_col values ('tipo_ausentismo', 3, 'Accidente de Trabajo', 'concepto', 330, NULL);
insert into criterios_valores_col values ('tipo_ausentismo', 4, 'Prorroga', 'concepto', 310, NULL);
insert into criterios_valores_col values ('tipo_ausentismo', 5, 'Sancion o suspension', 'concepto', 210, NULL);
insert into criterios_valores_col values ('tipo_ausentismo', 6, 'Licencia No Remunerada', 'concepto', 220, NULL);
END

-- Autorizaciones de Incapacidades y Licencias de Maternidad
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'aut_entidad')
BEGIN
insert into criterios_valores_col values ('aut_entidad', 0, 'EPS', null, null, NULL);
insert into criterios_valores_col values ('aut_entidad', 1, 'ARP', null, null, NULL);
END
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'tipo_licencia')
BEGIN
insert into criterios_valores_col values ('tipo_licencia', 0, 'Enfermedad General', 'aut_entidad', 0, NULL);
insert into criterios_valores_col values ('tipo_licencia', 1, 'Licencia de Maternidad', 'aut_entidad', 0, NULL);
insert into criterios_valores_col values ('tipo_licencia', 2, 'Accidente de Trabajo', 'aut_entidad', 1, NULL);
insert into criterios_valores_col values ('tipo_licencia', 3, 'Enfermedad Profesional', 'aut_entidad', 1, NULL);
END

-- Datos adicionales de los reportes de autoliquidacion
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'ala_signo')
BEGIN
insert into criterios_valores_col values ('ala_signo', 0, '-1',null, null, NULL);
insert into criterios_valores_col values ('ala_signo', 1, '+1',null, null, NULL);
END
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'ala_datos_adi')
BEGIN
insert into criterios_valores_col values ('ala_datos_adi', 0, 'Incapacidades E.G.', 'ala_signo', 0, NULL);
insert into criterios_valores_col values ('ala_datos_adi', 1, 'Licencias de Maternidad', 'ala_signo', 0, NULL);
insert into criterios_valores_col values ('ala_datos_adi', 2, 'Incapacidades R.P.', 'ala_signo', 0, NULL);
insert into criterios_valores_col values ('ala_datos_adi', 3, 'Intereses de Mora', 'ala_signo', 1, NULL);
insert into criterios_valores_col values ('ala_datos_adi', 4, 'Nota Debito', 'ala_signo', 1, NULL);
insert into criterios_valores_col values ('ala_datos_adi', 5, 'Nota Credito', 'ala_signo', 0, NULL);
insert into criterios_valores_col values ('ala_datos_adi', 6, 'Saldo a Favor', 'ala_signo', 0, NULL);
insert into criterios_valores_col values ('ala_datos_adi', 7, 'Cotizaciones pagadas a otros riesgos', 'ala_signo', 0, NULL);
insert into criterios_valores_col values ('ala_datos_adi', 8, 'Cotización', 'ala_signo', 1, NULL);
END

-- Sistemas Generales de Seguridad Social
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'sgss')
BEGIN
insert into criterios_valores_col values ('sgss',0,'ISS Consolidado',NULL, NULL, NULL);
insert into criterios_valores_col values ('sgss',1,'Pensiones',NULL, NULL, NULL);
insert into criterios_valores_col values ('sgss',2,'Riesgos Profesionales',NULL, NULL, NULL);
insert into criterios_valores_col values ('sgss',3,'Salud',NULL, NULL, NULL);
insert into criterios_valores_col values ('sgss',4,'ISS Integrado',NULL, NULL, NULL);
END

-- Tipos de parametros del modulo fiscal
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'tipo_dato')
BEGIN
insert into criterios_valores_col values ('tipo_dato',0,'Concepto',NULL, NULL, NULL);
insert into criterios_valores_col values ('tipo_dato',1,'Agrupacion de trabajadores',NULL, NULL, NULL);
insert into criterios_valores_col values ('tipo_dato',2,'Agrupacion de conceptos',NULL, NULL, NULL);
insert into criterios_valores_col values ('tipo_dato',3,'Variable',NULL, NULL, NULL);
insert into criterios_valores_col values ('tipo_dato',4,'Valor',NULL, NULL, NULL);
insert into criterios_valores_col values ('tipo_dato',5,'Agrupacion de conceptos unicamente',NULL, NULL, NULL);
insert into criterios_valores_col values ('tipo_dato',6,'Tipo de Nomina',NULL, NULL, NULL);
END

-- Embargos
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'clase_deposito')
BEGIN
insert into criterios_valores_col values ('clase_deposito', 1, 'Depósito Judicial', null, null, NULL);
insert into criterios_valores_col values ('clase_deposito', 2, 'Entes Coactivos', null, null, NULL);
insert into criterios_valores_col values ('clase_deposito', 3, 'Excarcelación (Caución)', null, null, NULL);
insert into criterios_valores_col values ('clase_deposito', 4, 'Remate de bienes', null, null, NULL);
insert into criterios_valores_col values ('clase_deposito', 5, 'Prestaciones sociales', null, null, NULL);
insert into criterios_valores_col values ('clase_deposito', 6, 'Cuotas Alimentarias', null, null, NULL);
END
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'emb_bancos')
BEGIN
    INSERT INTO criterios_valores_col (campo, item, descripcion) VALUES ('emb_bancos', 0, 'Pago en Cheque')
    INSERT INTO criterios_valores_col (campo, item, descripcion) VALUES ('emb_bancos', 1, 'Banco Agrario')
END

-- Origen del pago de la cuota
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'origen_pago')
BEGIN
insert into criterios_valores_col values ('origen_pago', 1, 'Normal', null, null, NULL);
insert into criterios_valores_col values ('origen_pago', 2, 'Extra', null, null, NULL);
insert into criterios_valores_col values ('origen_pago', 3, 'Por Fuera de Nomina', null, null, NULL);
END

-- Tipo de abono preprogramado
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'tipo_pre')
BEGIN
insert into criterios_valores_col values ('tipo_pre', 1, 'Proxima vez', null, null, NULL);
insert into criterios_valores_col values ('tipo_pre', 2, 'Cada vez', null, null, NULL);
insert into criterios_valores_col values ('tipo_pre', 3, 'Periodo específico', null, null, NULL);
END

-- Situacion del abono preprogramado
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'situacion_pre')
BEGIN
insert into criterios_valores_col values ('situacion_pre', 1, 'Activo', null, null, NULL);
insert into criterios_valores_col values ('situacion_pre', 2, 'Aplicado', null, null, NULL);
END

-- insertando los tipos de calculo del IBC para ausentismos
IF NOT EXISTS(SELECT 1 FROM criterios_valores_col WHERE campo = 'calculo_ibc')
BEGIN
insert into criterios_valores_col values ('calculo_ibc', 1, 'Salario Basico', null, null, NULL);
insert into criterios_valores_col values ('calculo_ibc', 2, 'IBC', null, null, NULL);
insert into criterios_valores_col values ('calculo_ibc', 3, 'Prorroga', null, null, NULL);
insert into criterios_valores_col values ('calculo_ibc', 4, 'Ultimos 12 meses', null, null, NULL);
END


PRINT '*** Fin de Script ***'
--PRINT 'Hora Actual: ' + RTrim(GETDATE())
GO
