SET ANSI_NULLS ON; GO SET QUOTED_IDENTIFIER ON; GO -- Verificar y eliminar el procedimiento almacenado si existe IF OBJECT_ID('[dbo].[paWcfSeInsTerceros]', 'P') IS NOT NULL BEGIN PRINT 'Eliminando procedimiento almacenado existente...'; DROP PROCEDURE [dbo].[paWcfSeInsTerceros]; PRINT 'Procedimiento almacenado eliminado.'; END; GO -- Verificar y eliminar el tipo de tabla si existe IF EXISTS (SELECT * FROM sys.types WHERE is_table_type = 1 AND name = 'dataTypeTerceros') BEGIN PRINT 'Eliminando tipo de tabla existente...'; DROP TYPE [dbo].[dataTypeTerceros]; PRINT 'Tipo de tabla eliminado.'; END; GO PRINT 'Creando nuevo tipo de Tabla dataTypeTerceros' CREATE TYPE [dbo].[dataTypeTerceros] AS TABLE ( [IdTercero] [varchar](16) NULL, [RazonSocial] [varchar](250) NULL, [Codigo] [varchar](16) NULL, [TipoId] [char](1) NULL, [Dv] [char](1) NULL, [NomCial] [varchar](250) NULL, [SiglaRaz] [varchar](50) NULL, [Direccion] [varchar](250) NULL, [IdLocal] [varchar](8) NULL, [Telefono] [varchar](20) NULL, [Fax] [varchar](20) NULL, [TelMovil] [varchar](20) NULL, [SitioWeb] [varchar](100) NULL, [e_mail] [varchar](100) NULL, [EsCliente] [bit] NULL, [EsVendedor] [bit] NULL, [EsConductor] [bit] NULL, [EsPropietario] [bit] NULL, [EsProveedor] [bit] NULL, [EsEmpleado] [bit] NULL, [EsOperario] [bit] NULL, [EsAccnista] [bit] NULL, [EsCiaAseg] [bit] NULL, [EsCliePres] [bit] NULL, [IdSector] [varchar](8) NULL, [IdProf] [varchar](4) NULL, [IdRegimen] [varchar](4) NULL, [TipEnte] [char](1) NULL, [IdLugarCed] [varchar](8) NULL, [FecExpCed] [smalldatetime] NULL, [Observacion] [varchar](250) NULL, [IniStgNom] [int] NULL, [IdEstado] [varchar](4) NULL, [Inactivo] [bit] NULL, [FechaAdd] [smalldatetime] NULL, [FechaUpdate] [smalldatetime] NULL, [IdUsuario] [varchar](11) NULL, [ImgFoto] [varchar](30) NULL, [ImgFirma] [varchar](30) NULL, [ImagenDoc1] [varchar](50) NULL, [ImagenDoc2] [varchar](50) NULL, [ImagenDoc3] [varchar](50) NULL, [FechaNac] [smalldatetime] NULL, [IdEstOper] [varchar](4) NULL, [IdLocUbic] [varchar](8) NULL, [DescUbicac] [varchar](150) NULL, [CdGrupoTerc] [varchar](4) NULL, [RegimenFE] [bit] NULL, [PN_RUT] [bit] NULL DEFAULT ((0)), [RecPublicos] [bit] NULL DEFAULT((0)), [CargoPublico] [varchar](50) NULL, [FecInicioCP] [smalldatetime] NULL, [FecFinalCp] [smalldatetime] NULL, [PersonaPub] [bit] NULL DEFAULT((0)), [CargoPersPub] [varchar](50) NULL, [FecInicioPP] [smalldatetime] NULL, [FecFinalPP] [smalldatetime] NULL, [VrIngresos] [money] NULL DEFAULT((0)), [VrOtroIng] [money] NULL DEFAULT ((0)), [VrGastos] [money] NULL DEFAULT ((0)), [VrActivos] [money] NULL DEFAULT ((0)), [VrPasivos] [money] NULL DEFAULT ((0)), [VrPatrimonio] [money] NULL DEFAULT ((0)), [ConcOtrosIng] [varchar](250) NULL, [OperActVirtual] [bit] NULL DEFAULT((0)), [TipoOperVirtual] [varchar](150) NULL, [LavadoActivos] [bit] NULL DEFAULT ((0)), [RL_Nombre] [varchar](150) NULL, [RL_Identificacion] [varchar](16) NULL, [RL_Direccion] [varchar](250) NULL, [RL_CodCiudad] [varchar](8) NULL, [RL_Telefono] [varchar](20) NULL, [RL_Email] [varchar](150) NULL ); PRINT'Tipo de tabla creado'; GO PRINT 'Creando el procedimiento paWcfSeInsTerceros' GO CREATE PROCEDURE [dbo].[paWcfSeInsTerceros] @Terceros [dbo].[dataTypeTerceros] READONLY, @operacion [varchar](1) WITH EXECUTE AS CALLER AS BEGIN TRAN BEGIN TRY --UPDATE SI-EXISTE RECORDS IF(@operacion = 'u') BEGIN UPDATE Terceros SET IdTercero = t2.IdTercero, RazonSocial = t2.RazonSocial, Codigo = t2.Codigo, TipoId = t2.TipoId, Dv = t2.Dv, NomCial = t2.NomCial, SiglaRaz = t2.SiglaRaz, Direccion = t2.Direccion, IdLocal = t2.IdLocal, Telefono = t2.Telefono, Fax = t2.Fax, TelMovil = t2.TelMovil, SitioWeb = t2.SitioWeb, e_mail = t2.e_mail, EsCliente = t2.EsCliente, EsVendedor = t2.EsVendedor, EsConductor = t2.EsConductor, EsPropietario = t2.EsPropietario, EsProveedor = t2.EsProveedor, EsEmpleado = t2.EsEmpleado, EsOperario = t2.EsOperario, EsAccnista = t2.EsAccnista, EsCiaAseg = t2.EsCiaAseg, EsCliePres = t2.EsCliePres, IdSector = t2.IdSector, IdProf = t2.IdProf, IdRegimen = t2.IdRegimen, TipEnte = t2.TipEnte, IdLugarCed = t2.IdLugarCed, FecExpCed = t2.FecExpCed, Observacion = t2.Observacion, IniStgNom = t2.IniStgNom, IdEstado = t2.IdEstado, Inactivo = t2.Inactivo, FechaAdd = t2.FechaAdd, FechaUpdate = t2.FechaUpdate, IdUsuario = t2.IdUsuario, ImgFoto = t2.ImgFoto, ImgFirma = t2.ImgFirma, ImagenDoc1 = t2.ImagenDoc1, ImagenDoc2 = t2.ImagenDoc2, ImagenDoc3 = t2.ImagenDoc3, FechaNac = t2.FechaNac,IdEstOper = t2.IdEstOper, IdLocUbic = t2.IdLocUbic, DescUbicac = t2.DescUbicac, CdGrupoTerc = t2.CdGrupoTerc, RegimenFE = t2.RegimenFE, RecPublicos = ISNULL(t2.RecPublicos,0),CargoPublico = t2.CargoPublicO, FecInicioCP = t2.FecInicioCP, FecFinalCp = t2.FecFinalCp, PersonaPub = ISNULL(t2.PersonaPub, 0), CargoPersPub = t2.CargoPersPub, FecInicioPP = t2.FecInicioPP, FecFinalPP = t2.FecFinalPP, VrIngresos = ISNULL(t2.VrIngresos,0),VrOtroIng = ISNULL(t2.VrOtroIng,0), VrGastos = ISNULL(t2.VrGastos,0), VrActivos = ISNULL(t2.VrActivos, 0), VrPasivos = ISNULL(t2.VrPasivos,0), VrPatrimonio = ISNULL(t2.VrPatrimonio,0), ConcOtrosIng = t2.ConcOtrosIng,OperActVirtual = ISNULL(t2.OperActVirtual,0), TipoOperVirtual = t2.TipoOperVirtual,LavadoActivos = ISNULL(t2.LavadoActivos,0), RL_Nombre = t2.RL_Nombre, RL_Identificacion = t2.RL_Identificacion, RL_Direccion = t2.RL_Direccion, RL_CodCiudad = t2.RL_CodCiudad, RL_Telefono = t2.RL_Telefono, RL_Email = t2.RL_Email FROM Terceros t1 JOIN @Terceros t2 ON t1.IdTercero = t2.IdTercero END --INSERT NO-EXISTE RECORDS IF(@operacion = 'i') BEGIN INSERT INTO Terceros( IdTercero,RazonSocial,Codigo,TipoId,Dv,NomCial,SiglaRaz,Direccion,IdLocal,Telefono, Fax,TelMovil,SitioWeb,e_mail,EsCliente,EsVendedor,EsConductor,EsPropietario,EsProveedor, EsEmpleado,EsOperario,EsAccnista,EsCiaAseg,EsCliePres,IdSector,IdProf,IdRegimen,TipEnte, IdLugarCed,FecExpCed,Observacion,IniStgNom,IdEstado,Inactivo,FechaAdd,FechaUpdate,IdUsuario, ImgFoto,ImgFirma,ImagenDoc1,ImagenDoc2,ImagenDoc3,FechaNac,IdEstOper,IdLocUbic,DescUbicac, CdGrupoTerc, RegimenFE, PN_RUT,RecPublicos,CargoPublico,FecInicioCP,FecFinalCp,PersonaPub, CargoPersPub,FecInicioPP,FecFinalPP,VrIngresos, VrOtroIng,VrGastos,VrActivos,VrPasivos,VrPatrimonio,ConcOtrosIng,OperActVirtual,TipoOperVirtual, LavadoActivos,RL_Nombre,RL_Identificacion,RL_Direccion,RL_CodCiudad,RL_Telefono,RL_Email ) SELECT IdTercero,RazonSocial,Codigo,TipoId,Dv,NomCial,SiglaRaz,Direccion,IdLocal,Telefono, Fax,TelMovil,SitioWeb,e_mail,EsCliente,EsVendedor,EsConductor,EsPropietario,EsProveedor, EsEmpleado,EsOperario,EsAccnista,EsCiaAseg,EsCliePres,IdSector,IdProf,IdRegimen,TipEnte, IdLugarCed,FecExpCed,Observacion,IniStgNom,IdEstado,Inactivo,FechaAdd,FechaUpdate,IdUsuario, ImgFoto,ImgFirma,ImagenDoc1,ImagenDoc2,ImagenDoc3,FechaNac,IdEstOper,IdLocUbic,DescUbicac, CdGrupoTerc,RegimenFE, PN_RUT,RecPublicos,CargoPublico,FecInicioCP,FecFinalCp,PersonaPub, CargoPersPub,FecInicioPP,FecFinalPP,VrIngresos,VrOtroIng,VrGastos,VrActivos,VrPasivos, VrPatrimonio,ConcOtrosIng,OperActVirtual,TipoOperVirtual,LavadoActivos,RL_Nombre, RL_Identificacion,RL_Direccion,RL_CodCiudad,RL_Telefono,RL_Email FROM @Terceros WHERE IdTercero NOT IN(SELECT IdTercero FROM Terceros) END PRINT 'Procedimiento paWcfSeInsTerceros creado.' --DELETE RECORDS IF(@operacion = 'd') BEGIN DECLARE @id varchar(16) SELECT @id = IdTercero FROM @Terceros DELETE FROM Terceros WHERE IdTercero = @id END SELECT '1' COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT; SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(); RAISERROR( @ErrorMessage, -- Message text. @ErrorSeverity, -- Severity. @ErrorState -- State. ); END CATCH GO IF EXISTS (SELECT * FROM sys.types WHERE is_table_type = 1 AND name = 'dataTypeTercDocumentos') BEGIN PRINT 'Eliminando tipo de tabla existente...'; DROP TYPE [dbo].[dataTypeTercDocumentos]; PRINT 'Tipo de tabla eliminado.'; END; GO PRINT 'Creando tipo de tabla DocumentosType...' GO --Creacion del tipo de tabla DocumentosType CREATE TYPE dbo.dataTypeTercDocumentos AS TABLE ( IdTercero VARCHAR(16), Documento VARCHAR(500), CodDoc VARCHAR(4), Item INT, Inactivo BIT ); GO PRINT 'DocumentosType creada.' GO PRINT 'Creando el sp [paWcfSeInsTercDocumentos]...' GO CREATE PROCEDURE [dbo].[paWcfSeInsTercDocumentos] @TercDocumentos dbo.dataTypeTercDocumentos READONLY AS BEGIN SET NOCOUNT ON; DECLARE @filasAfectadas INT = 0; UPDATE T--Actualizo los documentos que ya existen SET Documento = D.Documento, CodDoc = D.CodDoc, Item = D.Item, Inactivo = D.Inactivo FROM TercDocumentos T INNER JOIN @TercDocumentos D ON T.IdTercero = D.IdTercero AND T.Item = D.Item; SET @filasAfectadas += @@ROWCOUNT; INSERT INTO TercDocumentos (IdTercero, Documento, CodDoc, Item, Inactivo)--Iserto los nuevos SELECT IdTercero, Documento, CodDoc, Item, Inactivo FROM @TercDocumentos D WHERE NOT EXISTS ( SELECT 1 FROM TercDocumentos T WHERE T.IdTercero = D.IdTercero AND T.Item = D.Item ) SET @filasAfectadas += @@ROWCOUNT; IF(@filasAfectadas = 0) BEGIN SELECT 'No se isertó nada nuevo' AS Mensaje END ELSE BEGIN SELECT '1' AS Mensaje; END END GO PRINT 'Sp [paWcfSeInsTercDocumentos] creado' GO --Para Insertar los nuevos permisos para Terceros GO PRINT 'Agregando los roles FCL Y REP en Sys_Roles' GO IF NOT EXISTS(SELECT 1 FROM Sys_Roles Where IdObj = 'FRMTERTES' AND IdRole = 'REP') BEGIN INSERT INTO Sys_Roles(IdObj,IdRole,Funcion) VALUES ('FRMTERTES','REP','Modificar Información de Representante') END IF NOT EXISTS(SELECT 1 FROM Sys_Roles WHERE IdObj = 'FRMTERTES' AND IdRole = 'FCL') BEGIN INSERT INTO Sys_Roles(IdObj,IdRole,Funcion) VALUES ('FRMTERTES','FCL','Modificar Información Fiscal y/o Financiera') END GO PRINT 'Roles agregados' GO --Se actualiza Sys_Relaciones para que se valide TercAccionistas antes de elminar un tercero PRINT 'Actualizando para que TercAccionistas valide antes de eliminar' GO IF EXISTS (SELECT 1 FROM Sys_Relaciones WHERE IdTabla = 'Terceros' AND TablaForanea = 'TercAccionistas' AND NoValidar = 1) BEGIN UPDATE Sys_Relaciones SET NoValidar = 0 WHERE IdTabla = 'Terceros' AND TablaForanea = 'TercAccionistas'; PRINT 'Campo NoValidar actualizado exitosamente.'; END ELSE BEGIN PRINT 'No se encontró ninguna relación que necesite actualización.'; END GO PRINT 'Actualización terminada' GO --Se actualiza la llave de TercDocumentos, ya que no hay donde eliminar primero los registros ligados a terceros PRINT ' Actualizando FK de TercDocumentos para eliminar en casacada' GO IF EXISTS ( SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_TercDocumentos_Terceros' AND parent_object_id = OBJECT_ID('TercDocumentos') ) BEGIN PRINT 'Eliminando la restricción FK_TercDocumentos_Terceros...'; ALTER TABLE TercDocumentos DROP CONSTRAINT FK_TercDocumentos_Terceros; END GO PRINT 'Creando la restricción FK_TercDocumentos_Terceros con ON DELETE CASCADE...'; GO ALTER TABLE TercDocumentos ADD CONSTRAINT FK_TercDocumentos_Terceros FOREIGN KEY (IdTercero) REFERENCES Terceros(IdTercero) ON DELETE CASCADE; GO PRINT 'Actualización terminada' GO --TERCEROS ACCIONISTAS --Creando el sp para listar terceros Accionistas --LISTAR PRINT 'Creando el sp [paListTercAccionistas]...' GO CREATE PROCEDURE [dbo].[paListTercAccionistas] @UltimoId VARCHAR(16), @Operacion VARCHAR(16), @IdTercero VARCHAR(16) AS BEGIN SET NOCOUNT ON; -- Verificar si hay datos en TercAccionistas IF EXISTS (SELECT 1 FROM TercAccionistas) BEGIN -- Operación: Paginación ('p') IF @Operacion = 'p' BEGIN IF @UltimoId IS NOT NULL BEGIN SELECT --TOP 20 por si se necesita hacer paginacion TC.IdTercero, TC.RazonSocial, TA.Id, TA.NitAccionista, TA.NomAccionista, TA.Participacion FROM TercAccionistas AS TA INNER JOIN Terceros AS TC ON TC.IdTercero = TA.IdTercero WHERE TC.IdTercero > @UltimoId -- Compara lexicográficamente//por defecto se le envia 0, pero se deja por si se necesita hacer paginacion ORDER BY TC.IdTercero; -- Asegurar el orden END ELSE BEGIN RAISERROR ('El parámetro @UltimoId no puede ser NULL para la operación "p".', 16, 1); END END -- Operación: Listar por ID ('l') ELSE IF @Operacion = 'l' BEGIN IF @IdTercero IS NOT NULL BEGIN SELECT T.IdTercero, T.RazonSocial, TC.NitAccionista, TC.NomAccionista, TC.Participacion FROM Terceros AS T INNER JOIN TercAccionistas AS TC ON T.IdTercero = TC.IdTercero WHERE T.IdTercero = @IdTercero; END ELSE BEGIN RAISERROR ('El parámetro @UltimoId no puede ser NULL para la operación "p".', 16, 1); END END -- Operación no válida ELSE BEGIN RAISERROR ('Operación no válida. Use "p" para paginación o "l" para listar por ID.',16,1); END END ELSE BEGIN -- No hay datos en TercAccionistas, retornar DataTable vacío SELECT CAST(NULL AS VARCHAR(16)) AS IdTercero, CAST(NULL AS NVARCHAR(255)) AS RazonSocial, CAST(NULL AS VARCHAR(16)) AS NitAccionista, CAST(NULL AS NVARCHAR(255)) AS NomAccionista, CAST(NULL AS DECIMAL(18, 2)) AS Participacion WHERE 1 = 0; -- No devuelve filas, solo la estructura END END; GO PRINT 'Actualizacion terminada' GO -- Verificar y eliminar el tipo de tabla si existe IF EXISTS (SELECT * FROM sys.types WHERE is_table_type = 1 AND name = 'dataTypeTercAccionistas') BEGIN PRINT 'Eliminando tipo de tabla existente...'; DROP TYPE [dbo].[dataTypeTercAccionistas]; PRINT 'Tipo de tabla eliminado.'; END; GO PRINT 'Creando el tipo de tabla de [dataTypeTercAccionistas]' GO --Creando el tipo de tabla [dataTypeTercAccionistas] CREATE TYPE dbo.dataTypeTercAccionistas AS TABLE ( IdTercero VARCHAR(16), NitAccionista VARCHAR(16), NomAccionista VARCHAR(150), Participacion DECIMAL(14,4) ); GO PRINT '[dataTypeTercAccionistas] Creado' GO --EDITAR GUARDAR --Creando el procedimiento apra crear o actualizar TercAccionistas PRINT 'Creando el sp [paWcfSeInsTercAccionistas]' GO CREATE PROCEDURE [dbo].[paWcfSeInsTercAccionistas] @TercAccionistas dbo.dataTypeTercAccionistas READONLY AS BEGIN SET NOCOUNT ON; DECLARE @filasAfectadas INT = 0; UPDATE T --Se actualizan los registros que ya existen SET T.NitAccionista = D.NitAccionista, T.NomAccionista = D.NomAccionista, T.Participacion = D.Participacion FROM TercAccionistas AS T INNER JOIN @TercAccionistas AS D ON T.IdTercero = D.IdTercero AND T.NitAccionista = D.NitAccionista; SET @filasAfectadas += @@ROWCOUNT; INSERT INTO TercAccionistas(IdTercero,NitAccionista,NomAccionista,Participacion) SELECT D.IdTercero, D.NitAccionista, D.NomAccionista, D.Participacion FROM @TercAccionistas AS D WHERE NOT EXISTS( SELECT 1 FROM TercAccionistas AS T WHERE T.IdTercero = D.IdTercero AND T.NitAccionista = D.NitAccionista ) SET @filasAfectadas += @@ROWCOUNT; IF (@filasAfectadas = 0) BEGIN SELECT 'No se insertó nada nuevo' AS Mensaje; END ELSE BEGIN SELECT '1' AS Mensaje; END END PRINT'[paWcfSeInsTercAccionistas] creado' GO PRINT 'Creando el sp paDeleteTercAccionistas ' GO --ELIMINAR CREATE PROCEDURE paDeleteTercAccionistas @TercAccionistas dbo.dataTypeTercAccionistas READONLY AS BEGIN SET NOCOUNT ON; DECLARE @FilasAfectadas INT = 0; DELETE T FROM TercAccionistas AS T INNER JOIN @TercAccionistas AS D ON D.IdTercero = T.IdTercero AND D.NitAccionista = T.NitAccionista SET @FilasAfectadas = @@ROWCOUNT IF(@FilasAfectadas = 0) BEGIN SELECT 'Registro no eliminado' AS Mensaje END ELSE BEGIN SELECT '1' AS Mensaje END END GO PRINT 'SP paDeleteTercAccionistas creado '