Sesión #7

De 2pm hasta 7pm


Se corrigió el problema de la SP, estaba a la hora de leer los datos de usuario y movimiento del xml

Se logró realizar la carga masiva de los datos proporcionados por los compañeros y están listos para continuar con el desarrollo

 INSERT INTO usuario (id, username, password)
        SELECT
            usuario.value('@Id', 'int') AS id,
            usuario.value('@Nombre', 'varchar(64)') AS username,
            usuario.value('@Pass', 'varchar(64)') AS password
        FROM @DatosXML.nodes('/Datos/Usuarios/usuario') AS Tbl(usuario);

        INSERT INTO movimiento (idEmpleado, idTipoMovimiento, fecha, monto, nuevoSaldo, idPostByUser, postInIp, postTime)
        SELECT
            (SELECT id FROM empleado WHERE valorDocumento = movimiento.value('@ValorDocId', 'int')) AS idEmpleado,
            (SELECT id FROM tipoMovimiento WHERE nombre = movimiento.value('@IdTipoMovimiento', 'varchar(64)')) AS idTipoMovimiento,
            movimiento.value('@Fecha', 'datetime') AS fecha,
            movimiento.value('@Monto', 'int') AS monto,
            0 AS nuevoSaldo,
            (SELECT id FROM usuario WHERE username = movimiento.value('@PostByUser', 'varchar(64)')) AS idPostByUser,
            movimiento.value('@PostInIP', 'varchar(64)') AS postInIp,
            movimiento.value('@PostTime', 'datetime') AS postTime
        FROM @DatosXML.nodes('/Datos/Movimientos/movimiento') AS Tbl(movimiento);


Se crearon SP para manejar el inicio de sesión y la inserción de empleados

CREATE PROCEDURE ValidarCredenciales
    @username VARCHAR(64),
    @password VARCHAR(64)
AS
BEGIN
    SET NOCOUNT ON;

    IF EXISTS (SELECT 1 FROM usuario WHERE username = @username AND password = @password)
    BEGIN
        SELECT 'Usuario válido' AS Estado;
    END
    ELSE
    BEGIN
        SELECT 'Usuario inválido' AS Estado;
       
    END
END
GO

CREATE PROCEDURE InsertarEmpleado
    @IdPuesto VARCHAR(50),
    @ValorDocumentoIdentidad NVARCHAR(50),
    @Nombre VARCHAR(50),
    @FechaContratacion DATE,
    @SaldoVacaciones INT,
    @EsActivo BIT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO empleado (IdPuesto, ValorDocumentoIdentidad, Nombre, FechaContratacion, SaldoVacaciones, EsActivo)
    VALUES (@IdPuesto, @ValorDocumentoIdentidad, @Nombre, @FechaContratacion, @SaldoVacaciones, @EsActivo);
END

GO

Todavía no están terminados, solo se crearon para probar datos, posteriormente se les incluirá un manejo de errores.


Por el lado del servidor, se agregaron las rutas para acceder a los SP con los datos enviados de la página web

@app.route('/validar', methods=['GET'])
def validar_credenciales():
   
    username = request.args.get('username')
    password = request.args.get('password')

    resultado = ejecutar_stored_procedure('ValidarCredenciales', f"'{username}', '{password}'")

    if resultado[0][0] == 'Usuario válido':
        print('Usuario válido')
        return redirect(url_for('pagina_exitosa'))
    else:
        return redirect(url_for('pagina_error'))
   

@app.route('/exitoso', methods=['GET'])
def pagina_exitosa():
    return redirect('\..\Paginaweb\index.html')

@app.route('/error', methods=['GET'])
def pagina_error():
    return redirect('/error.html')

@app.route('/insertar', methods=['POST'])
def insertar_empleado():
    idPuesto = 1
    ValorDocumentoIdentidad = 1111
    nombre = "Nombre"
    FechaContratacion = "2021-01-01"
    SaldoVacaiones = 0
    EsActivo = 1

    ejecutar_stored_procedure('InsertarEmpleado', f"{idPuesto}, {ValorDocumentoIdentidad}, '{nombre}', '{FechaContratacion}', {SaldoVacaiones}, {EsActivo}")
    return jsonify({'mensaje': 'Empleado insertado correctamente'})








Comentarios