use CUENTAS_COBRAR -- SECCION DE PROCEDURES GO CREATE PROCEDURE global.CancelarFactura @Consecutivo nvarchar(40), @SaldoNuevo decimal(18,2), @NoRecibo int AS BEGIN update global.Factura set Saldo = @SaldoNuevo where Consecutivo = @Consecutivo if(@SaldoNuevo = 0) BEGIN update global.Factura set Estado = 'CANCELADA' where Consecutivo = @Consecutivo END insert into global.PagoContieneFactura values(@Consecutivo, @NoRecibo) END GO GO CREATE PROCEDURE global.CrearNotaCredito @ConsecutivoFac nvarchar(40), @TipoDocumentoFac nvarchar(255) AS BEGIN declare @Consecutivo nvarchar(40), @NoIdentificacionCliente nvarchar(30), @IdMoneda int, @IdTipoDocumento int, @FechaEmision date, @FechaVencimiento date, @ConsecutivoNotaCredito nvarchar(40), @NombreReceptor nvarchar(255), @SubTotal decimal(18,2), @TotalFactura decimal(18,2), @DiasCredito int, @CantidadNC int -- Obtener todos los datos necesarios de la factura select @Consecutivo = Consecutivo, @NoIdentificacionCliente = NoIdentificacionCliente, @IdMoneda = IdMoneda, @FechaEmision = FechaEmision, @FechaVencimiento = FechaVencimiento, @NombreReceptor = NombreReceptor, @SubTotal = SubTotal, @TotalFactura = TotalFactura, @DiasCredito = DiasCredito from global.Factura where Consecutivo = @ConsecutivoFac -- Obtener el tipo de documento select @IdTipoDocumento = IdTipoDocumento from catalogo.TipoDocumento where Descripcion = @TipoDocumentoFac -- Actualizar el total y subtotal (dejarlos en negativo) set @TotalFactura = @TotalFactura * -1 set @SubTotal = @TotalFactura -- Actualizar el estado de la factura update global.Factura set Estado = 'ANULADA' where Consecutivo = @ConsecutivoFac -- Generar un consecutivo a la nota de creedito -- Verificar la cantidad de notas de crédito select @CantidadNC = count(IdTipoDocumento) from global.Factura where IdTipoDocumento = 3 group by IdTipoDocumento if (@CantidadNC = 0) BEGIN set @ConsecutivoNotaCredito = '00100001030000000001' END else BEGIN select top (1) @ConsecutivoNotaCredito = Consecutivo from global.Factura where IdTipoDocumento = 3 order by FechaEmision desc declare @ConsecutivoTemp int, @HeaderFactura nvarchar(10), @NumeracionConsecutivo nvarchar(10), @FechaActual datetime = GETDATE() set @HeaderFactura = '0010000103' set @ConsecutivoTemp = CAST(SUBSTRING(@ConsecutivoNotaCredito,11,10) AS INT) set @ConsecutivoTemp = @ConsecutivoTemp + 1 set @NumeracionConsecutivo = CONCAT(REPLICATE('0', 10 - Len(@ConsecutivoTemp)), @ConsecutivoTemp) set @ConsecutivoNotaCredito = CONCAT(@HeaderFactura, @NumeracionConsecutivo) END -- Insetar la nota de credito con los datos de la factura indicada y con el numero de consecutivo generado. insert into global.Factura values(@ConsecutivoNotaCredito, @NoIdentificacionCliente, @IdMoneda, @IdTipoDocumento, @FechaActual, DATEADD(day, 30, @FechaActual), @Consecutivo, @NombreReceptor, @SubTotal, 0, @TotalFactura, @DiasCredito, 0, 'CANCELADA') END GO -- SECCION DE TRIGGERS GO CREATE TRIGGER agregar_descripciones_RolDeUsuario ON global.RolDeUsuario INSTEAD OF INSERT AS Begin Declare @descripcion nvarchar(255) Declare @idRol int Declare @idUsuario varchar(20) select @descripcion = descripcion from catalogo.Rol r join inserted i on i.IdRol = r.IdRol where i.IdRol = r.IdRol select @idRol = IdRol from inserted select @idUsuario = IdUsuario from inserted insert into RolDeUsuario ( IdUsuario, IdRol, DescripcionDeRol) values (@idUsuario, @idRol, @descripcion) End GO