Avance 10
Avances:
- Se realizaron las verificaciones en Log In en caso de que se ingrese un usuario que no existe o una contraseña incorrecta. Para alertar al cliente, se utilizó un mensaje de alerta en forma de barra que se puede cerrar, el código que se utilizó como guía se puede encontrar en la primera referencia.
- Se corrigieron detalles minimos en la pantalla de inicio: se agregaron columnas a la tabla de cuentas para tener más información.
- Se corrigió un error cuando la cuenta no tiene beneficiarios.
- Se agregaron las alertas para cuando la suma del porcentaje no da 100, cuando hay menos, o más de 3 beneficiarios y cuando no hay beneficiarios del todo, esto con el mismo estilo que en el Log In (referencia 1)
- Se acomodaron las columnas de los beneficiarios para ver la información completa (Id, nombre, información personal y porcentaje)
- En la base de datos se agregaron dos columnas en la tabla Beneficiario, activo y fecha de desactivación, esto al leer las indicaciones del proyecto en la parte de eliminar un beneficiario de la cuenta
- En el archivo .sql para leer el xml con los datos, se cambio la asignación del texto xml
- Al editar la información de un beneficiario, se agregó una advertencia en caso de que el id de ese beneficiario no esté asociado a la cuenta actual que se está consultando
- Se finalizó la función de añadir un beneficiario por medio de la identificación de la persona, también si esta persona no existe, se redirige a otra página de manera que se ingresen todos los datos de la Persona para agregarla a la base de datos y luego como beneficiario
- Para la opción de eliminar un beneficiario, se agregó una advertencia en caso de que el id no este asociado a la cuenta y se finalizó esta opción
- Se crearon archivos para: Editar beneficiarios (Editar.asp), Verificar si la persona existe y decidir si la persona existe o no (Agregar.asp), añadir un beneficiario desde la identificación de una persona existente (AgregarNuevo.asp), añadir un beneficiario desde cero con todos los datos de la persona (NuevaP.asp), eliminar un beneficiario por su id (Eliminar.asp)
- Cada parte de la pagina se realizo de manera que luego de realizar una acción se vuelva a cargar la pagina para mostrar los resultados (ya sean advertencias u otras ediciones)
- Se creo un archivo .sql para probar todos los métodos antes de realizarlos desde la pagina web (texto del archivo al final del avance)
- Se agregaron try catch para cuando se digitan tipos de datos incorrectos.
Horas trabajadas: Se trabajaron en promedio 16 horas durante la semana del 13-19 de setiembre
Problemas encontrados:
- El unico problema al que no se le encontró solución aun despues de investigar, fue al tiempo de carga de la pagina (se concluyó que era debido a la conexion con la base de datos). Al poner una condición if en el archivo de Log In antes de crear la conexion con la base de datos, demostró que la conexion es lo que demora la carga de la pagina.
- Al entrar en una cuenta sin beneficiarios se presentaba un error en una de las lineas de codigo y no permitia cargar el resto de la pagina, para solucionar esto se coloco una condicion if de manera que si no existian beneficiarios no interactuara con la base de datos para pedir la informacion
- En la base de datos la tabla de beneficiarios no otorga informacion acerca de la persona, por lo que se probaron varios join en SQL Server para mostrar la informacion deseada, recuperando informacion de la tabla Persona por medio de las FK en la tabla de beneficiario
- Para realizar la parte de eliminacion de un beneficiario se leyeron las indicaciones dadas por el profesor y se notó que se realizaba de manera logica con una fecha de desactivacion. Por esta razon se agregaron las columnas activo (de tipo bit) y FechaDesactivacion (de tipo date). Ademas se realizaron las modificaciones necesarias en el archivo que lee el xml para que cada beneficiario este activo. Al investigar, SQL Server no tiene True y False, pero un tipo de dato que funciona de manera similar es el bit, por esta razon se utilizó este tipo de dato en la columna Activo, representando el True con un 1 y el False con un 0.
- Desde que se creo el archivo para leer el xml, la variable que contenia el xml era asignada copiando y pegando todo el texto de manera manual, sin embargo al consultar con un compañero se encontró una manera de abrir el archivo desde un path (Codigo al final). Esta forma fue presentada por el profesor durante una clase
- Al probar la funcion de editar beneficiario y poner un id que no era de la cuenta actual, se notó que la edicion se permitia y se cambiaba el dato seleccionado de ese beneficiario a pesar de no estar asociado a la cuenta. Por esta razon se realizó una condicion de manera que antes de procesar el codigo sql primero se realizara una comprobacion de que el id ingresado era parte de los beneficiarios asociados a la cuenta. Esta misma validacion se utilizo en la opcion de eliminar beneficiario
- Durante el proceso de procesar informacion ingresada en un form en el archivo anterior, se generaron problemas al captar los datos. Se encontró que se debia a que los nombres y id de los inputs del form estaban mal referenciados en el Request.Form()
- Se queria que al agregar un beneficiario y la persona no existiera, se redireccionara a otra pagina para ingresar los datos faltantes, es decir, que los datos ya ingresados anteriormente se auto-completaran en el form para la nueva persona. Esto generaba errores, ya que al utilizar el metodo de asp Request.Form() era como si no recuperara los datos y los inputs del nuevo form no se llenaban automaticamente. La solucion encontrada luego de probar varias opciones fue utilizar Response.Write(Request.Form()) en la carateristica value de los inputs del form
#Como problema personal, se olvidó agregar avances en el blog de manera diaria, por lo que el avance al final fue largo y tedioso de completar
Moraleja:
- Luego de anteriores investigaciones varios problemas (de los anteriores), se pudieron resolver sin necesidad de consultar paginas web o buscar ejemplos. Cada esfuerzo tiene su recompensa
- Aun que se avance relativamente poco cada dia, el proyecto cada vez tomaba mas forma. Es importante tener paciencia y no querer que todo salga a la primera
Referencias (temas que se investigaron):
- Mensajes de alerta: https://www.w3schools.com/howto/howto_js_alert.asp
- codigo ejemplo: <div class="alert">
<span class="closebtn" onclick="this.parentElement.style.display='none';">×</span>
This is an alert box.
</div> - Mejorar la carga de una pagina web: https://www.claranet.es/blog/por-que-mi-pagina-web-va-lenta-causas
- Extraer datos de la base de datos, ejecutar comandos, etc: https://www.w3schools.com/asp/default.asp (apartados: ASP CLASSIC, ASP REFERENCE, ADO TUTORIAL, ADO OBJECT)
- Detalles sobre los form: https://www.w3schools.com/jsref/dom_obj_form.asp
- Enviar un formulario sin boton: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_form_submit
- codigo utilizado: <script>document.getElementById("myForm").submit();</script>
- True y false en sql: https://docs.microsoft.com/en-us/sql/t-sql/data-types/bit-transact-sql?view=sql-server-ver15
- https://stackoverflow.com/questions/472558/is-try-catch-like-error-handling-possible-in-asp-classic
-Abrir el archivo xml desde un path
SET @myxml = (
SELECT *
FROM OPENROWSET(BULK 'Path', SINGLE_BLOB)
AS myxml
);
-Archivo .sql con las pruebas de los comandos antes de agregarlos a la pagina. Estos comandos se utilizaron para ver las cuentas, beneficiarios, editar las columnas, agregar beneficiarios, personas y para eliminar registros
SELECT * FROM dbo.Beneficiario WHERE Activo=1 ORDER BY IdCuenta
SELECT * FROM dbo.Beneficiario ORDER BY IdCuenta
SELECT COUNT(*) FROM dbo.Beneficiario WHERE IdCuenta=61
SELECT * FROM dbo.CuentaAhorro
SELECT B.Id, P.Nombre, P.ValorDocumentoIdentidad, P.FechaNacimiento, P.telefono1, P.telefono2, Pa.Nombre, B.Porcentaje
FROM dbo.Persona P FULL OUTER JOIN dbo.Beneficiario B ON P.Id=B.IdPersona
FULL OUTER JOIN dbo.Parentezco Pa ON B.ParentezcoId=Pa.Id where B.IdCuenta=61
SELECT * FROM dbo.Beneficiario ORDER BY IdCuenta
UPDATE dbo.Beneficiario SET Porcentaje=25 WHERE Id=5
UPDATE dbo.Beneficiario SET Activo=0 WHERE Id=0 UPDATE dbo.Beneficiario SET FechaDesactivacion=GETDATE() WHERE Id=0
INSERT INTO dbo.Beneficiario(IdCuenta, IdPersona, ParentezcoId, Porcentaje)
VALUES(8, 13, 8, 20)
SELECT * FROM dbo.Beneficiario ORDER BY IdCuenta
SELECT SUM(porcentaje) FROM dbo.Beneficiario WHERE IdCuenta=61 AND Activo=1
SELECT nombre FROM dbo.Persona A WHERE A.Id = (SELECT IdPersona FROM dbo.Beneficiario WHERE Id=4)
SELECT * FROM dbo.Beneficiario A WHERE A.IdCuenta = 100 AND Activo=1
SELECT B.Id, B.IdCuenta, P.Nombre, P.ValorDocumentoIdentidad, B.Porcentaje
FROM dbo.Beneficiario B INNER JOIN dbo.Persona P ON B.IdPersona=P.Id WHERE B.IdCuenta=2 AND B.Activo=1
Select * from dbo.Usuario
Select * from Persona
select * from CuentaAhorro
select * from Beneficiario
SELECT T.Nombre, C.NumeroCuenta, C.FechaCreacion, C.Saldo FROM CuentaAhorro C
INNER JOIN TipoCuentaAhorro T ON C.TipoCuentaId = T.Id
SELECT * FROM CuentaAhorro
SELECT IdCuenta FROM Usuarios_Ver U WHERE U.IdUser=1
UPDATE Beneficiario SET ParentezcoId=(SELECT Id FROM Parentezco WHERE Nombre='Amigo') WHERE Id=2
UPDATE Beneficiario SET Porcentaje=15 WHERE Id=2
UPDATE Beneficiario SET Activo=0 WHERE Id=2
UPDATE Persona SET Nombre='David' WHERE Id=(SELECT IdPersona FROM Beneficiario WHERE Id=2)
UPDATE Persona SET FechaNacimiento='2020-11-25' WHERE Id=(SELECT IdPersona FROM Beneficiario WHERE Id=2)
UPDATE Persona SET telefono1=24336585 WHERE Id=(SELECT IdPersona FROM Beneficiario WHERE Id=2)
UPDATE Persona SET telefono2=25489676 WHERE Id=(SELECT IdPersona FROM Beneficiario WHERE Id=2)
UPDATE Persona SET ValorDocumentoIdentidad=12738546 WHERE Id=(SELECT IdPersona FROM Beneficiario WHERE Id=2)
SELECT B.Id, P.Nombre, P.ValorDocumentoIdentidad, P.FechaNacimiento, P.telefono1, P.telefono2, Pa.Nombre, B.Porcentaje
FROM dbo.Persona P INNER JOIN dbo.Beneficiario B ON P.Id=B.IdPersona
INNER JOIN dbo.Parentezco Pa ON B.ParentezcoId=Pa.Id
INSERT INTO Beneficiario(IdCuenta, IdPersona, ParentezcoId, Porcentaje, Activo) VALUES (11, 50, 1, 25, 1)
SELECT * FROM Beneficiario ORDER BY IdCuenta
SELECT * FROM Persona
SELECT Id FROM Persona WHERE ValorDocumentoIdentidad=128965553
INSERT INTO Beneficiario(IdCuenta, IdPersona, ParentezcoId, Porcentaje, Activo)
VALUES (58, 50, (SELECT Id FROM Parentezco WHERE Nombre='Madre'), 50, 1)
INSERT INTO dbo.Persona(TipoDocuIdentidad, Nombre, ValorDocumentoIdentidad, FechaNacimiento, Email, telefono1, telefono2)
VALUES(1, )
SELECT * FROM Persona WHERE ValorDocumentoIdentidad=128965553
SELECT * FROM Beneficiario WHERE Id=45
Comments
Post a Comment