1- Se agregó la tabla variable @CuentasObjetivo para procesar las cuentas objetivo provenientes del XML de simulación.
DECLARE @CuentasObjetivo TABLE
(
id int identity(1,1),
NumeroDeCuenta nvarchar(50),
FechaInicial date,
FechaFinal date,
DescripcionObjetivo nvarchar(100),
MontoAhorrar money
)
SET @lo = (SELECT COUNT(CO.id) FROM @CuentasObjetivo CO) + 1
INSERT INTO @CuentasObjetivo
SELECT Tab.Col.value('@NumeroDeCuenta','nvarchar(50)'),
@fechaIteracion,
Tab.Col.value('@FechaFinal','date'),
Tab.Col.value('@DescripcionObjetivo','nvarchar(100)'),
Tab.Col.value('@MontoAhorrar','money')
FROM @temp.nodes('FechaOperacion/CO') Tab(Col)
SET @hi = (SELECT COUNT(CO.id) FROM @CuentasObjetivo CO)
BEGIN TRY
IF @@TRANCOUNT = 0
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION AgregarCuentasObjetivo
SET @InicioTran = 1
END
WHILE @lo <= @hi
BEGIN
-- Se inserta cada cuenta objetivo leida desde el archivo xml para la fecha de operacion actual
INSERT INTO CuentaObjetivo (idCuenta, Saldo, Fecha_Inicio, Fecha_Final, Fecha_Proximo_Credito, Monto_Ahorro, Numero_Cuenta, Descripcion, Activo)
SELECT CA.id, 0, CO.FechaInicial, CO.FechaFinal, DATEADD(MONTH,1,CO.FechaInicial), CO.MontoAhorrar, CO.NumeroDeCuenta, CO.DescripcionObjetivo, 1
FROM @CuentasObjetivo CO
INNER JOIN Cuenta_Ahorro CA ON CA.Numero_Cuenta = CO.NumeroDeCuenta
WHERE CO.id = @lo
SET @lo = @lo + 1
END
IF @InicioTran = 1
BEGIN
COMMIT TRANSACTION AgregarCuentasObjetivo
SET @InicioTran = 0
END
END TRY
BEGIN CATCH
IF @InicioTran = 1
BEGIN
ROLLBACK TRANSACTION AgregarCuentasObjetivo
SELECT 'Hubo un error al agregar las cuentas objetivo'
Return -100006
END
END CATCH
3- Revisando detenidamente los archivos XML se descubrió que hay casos en los que las cuentas de ahorro se repetían, por ello se corrigió un problema de validación donde se permitía el ingreso de cuentas repetidas al realizar la lectura de cuentas de ahorro desde el archivo XML, ahora en caso de que haya un repetido se ignora la lectura y se indica el suceso durante la simulación.
IF NOT EXISTS (SELECT CA.id FROM @Cuentas C, Cuenta_Ahorro CA
WHERE C.id = @lo and CA.Numero_Cuenta = C.Numero_Cuenta)BEGIN
-- Código de inserción de cuentas de ahorroEND
ELSE
BEGIN
SELECT 'Esta repetido' as Descripcion, CA.id, CA.Numero_Cuenta
FROM @Cuentas C,Cuenta_Ahorro CA
WHERE C.id = @lo and CA.Numero_Cuenta = C.Numero_Cuenta
END
4- La misma validación de repetidos se realizó para el ingreso de beneficiarios nuevos, para ello se revisa que la c cédula no se haya ingresado previamente. De la misma forma se hizo encierra el código de ingreso de beneficiarios nuevos en una condición IF que verifica que no se ingresen cédulas repetidas, de lo contrario se ignora y se indica durante la simulación.
IF (SELECT COUNT(BE.Documento_Identificacion)
FROM @BeneficiariosNuevos BE
WHERE BE.Documento_Identificacion = (SELECT B.Documento_Identificacion
FROM @BeneficiariosNuevos B
WHERE B.id = @lo)) <=1
BEGIN
-- Código de ingreso del beneficiario nuevo
END
ELSE
BEGIN
SELECT 'Caso de beneficiario nuevo repetido'
END
Horas de trabajo: 1:45 h
No hay comentarios:
Publicar un comentario