CURSO 2025/2026 -- DAW 2 -- I.E.S. LOS SAUCES
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <link rel="icon" type="image/png" href="../webroot/media/favicon/favicon-32x32.png">
    <link rel="stylesheet" href="../webroot/css/estilos.css">
    <title>Gonzalo Junquera Lorenzo</title>
    <style>
        .obligatorio {
            background-color: lightgoldenrodyellow;
        }
        main{
            width:600px;
            height: 400px;
            margin: auto;
            background-color: #eeeeee;
            border: 2px solid lightgray;
            border-radius: 20px;
            margin-top: 20px;
            padding: 10px;
        }
        main h2{
            font-family: 'Times New Roman', Times, serif;
            text-align: center;
            margin: 10px;
            font-size: 1.5rem;
            font-weight: bold;
            color: #335d7fff;
        }
        main p{margin:10px 20px;}
        form *{
            margin-top: 10px; 
        }
        label{
            font-family: 'Times New Roman', Times, serif;
            display: inline-block;
            width: 240px;
            margin-left: 20px;
            font-size: 1.2rem;
            text-align: right;
        }
        /* label[for="T02_CodDepartamento"]{width: 70px;}
        label[for="T02_DescDepartamento"]{width: 240px;}
        label[for="T02_VolumenDeNegocio"]{width: 170px;} */
        .aviso{
            font-size: 0.75rem;
            margin-left: 20px;
        }
        input{
            padding: 5px 10px;
            margin-top: 20px;
            margin-right: 5px;
            font-size: 1.2rem;
            border-radius: 5px;
            font-family: 'Times New Roman', Times, serif;
            border: 0px solid grey;
        }
        #T02_CodDepartamento{width: 70px;}
        #T02_DescDepartamento{width: 200px;}
        #T02_FechaCreacionDepartamento{width: 100px;}
        #T02_VolumenDeNegocio{width: 100px;}
        input[readonly]{
            background-color: #d3d3d3ff;
            color: #6e6e6eff;
        }
        input[type="date"]{width: 190px;}
        input[type="checkbox"]{
            width: 20px;
            height: 18px;
        }
        input[type="submit"], button, .cancelar{
            padding: 10px 25px;
            font-size: 1.2rem;
            margin: 30px 90px;
            border-radius: 20px;
            background-color: #4988bbff;
            color: white;
            font-family: 'Times New Roman', Times, serif;
            border: 0px solid #252525ff;
            text-decoration: none;
        }
        .error{
            font-family: 'Times New Roman', Times, serif;
            color: red;
            font-size: 0.9rem;
        }
    </style>
</head>
<body>
    <div id="aviso">CURSO 2025/2026 -- DAW 2 -- I.E.S. LOS SAUCES</div>
    <nav>
        <div><a href="../indexProyectoTema4.php">Volver</a></div>
        <h2> <a href="../indexProyectoTema4.php">Tema 4</a> - Ejercicio 03 PDO</h2>
        <h2>Gonzalo Junquera Lorenzo</h2>
    </nav>
    <main>
       <?php
       /**
        * @author: Gonzalo Junquera Lorenzo
        * @since: 09/11/2025
        * 3. Formulario para añadir un departamento a la tabla Departamento con validación de entrada y control de errores.
        */
        include_once "../core/231018libreriaValidacion.php";
        // importamos el archivo con los datos de conexión
        require_once '../conf/confDBPDO.php';
       
        $entradaOK = true; //Variable que nos indica que todo va bien
        $aErrores = [  //Array donde recogemos los mensajes de error
            'T02_CodDepartamento' => '', 
            'T02_DescDepartamento' => '',
            'T02_FechaCreacionDepartamento' => '',
            'T02_VolumenDeNegocio' => '',
            'T02_FechaBajaDepartamento' => ''
        ];
        $aRespuestas=[ //Array donde recogeremos la respuestas correctas (si $entradaOK)
            'T02_CodDepartamento' => '', 
            'T02_DescDepartamento' => '',
            'T02_FechaCreacionDepartamento' => '',
            'T02_VolumenDeNegocio' => '',
            'T02_FechaBajaDepartamento' => ''
        ]; 
        
        //Para cada campo del formulario: Validar entrada y actuar en consecuencia
        if (isset($_REQUEST["enviar"])) {//Código que se ejecuta cuando se envía el formulario

            // Validamos los datos del formulario
            $aErrores['T02_CodDepartamento']= validacionFormularios::comprobarAlfabetico($_REQUEST['T02_CodDepartamento'],3,0,1,);
            $aErrores['T02_DescDepartamento']= validacionFormularios::comprobarAlfabetico($_REQUEST['T02_DescDepartamento'],255,0,1);

            // Reemplazar la coma por un punto para estandarizar el formato numérico
            $volumenNegocioPunto = str_replace(',', '.', $_REQUEST['T02_VolumenDeNegocio']);
            $aErrores['T02_VolumenDeNegocio']= validacionFormularios::comprobarFloat($volumenNegocioPunto);
            
            foreach($aErrores as $campo => $valor){
                if(!empty($valor)){ // Comprobar si el valor es válido
                    $entradaOK = false;
                } 
            }

            // Validación de la parte de la bbdd, comprobar si existe el código en ella
            if (empty($aErrores['T02_CodDepartamento'])) {
                
                try {
                    $miDB = new PDO(DSN,USERNAME,PASSWORD);
                    $sql = <<<sql
                        select * from T02_Departamento 
                        where T02_CodDepartamento=?
                    sql;
                    
                    $consulta = $miDB->prepare($sql);
                    $consulta->bindParam(1,$_REQUEST['T02_CodDepartamento']);
                    $consulta->execute();
                    
                    $registro = $consulta->fetch();
                    if ($registro!=false) {// si no devuelve nada que no compruebe el código
                        // Comprobamos si existe el T02_CodDepartamento en la BBDD
                        if($registro[0]==$_REQUEST['T02_CodDepartamento']){
                            $aErrores['T02_CodDepartamento']='El código ya existe un la BBDD';
                            $entradaOK = false;
                        } // si existe guardamos un error para mostrarlo en el formulario
                    }
                    
                } catch (PDOException $miExceptionPDO) {
                    // temporalmente ponemos estos errores para que se muestren en pantalla
                    $aErrores['T02_CodDepartamento']= 'Error: '.$miExceptionPDO->getMessage().'con código de error: '.$miExceptionPDO->getCode();
                    $entradaOK = false;
                } finally {
                    unset($miDB);
                }
            }
            
        } else {//Código que se ejecuta antes de rellenar el formulario
            $entradaOK = false;
        }


        //Tratamiento del formulario
        if($entradaOK){ //Cargar la variable $aRespuestas y tratamiento de datos OK
            
            // Recuperar los valores del formulario
            $aRespuestas['T02_CodDepartamento'] = $_REQUEST['T02_CodDepartamento'];
            $aRespuestas['T02_DescDepartamento'] = "Departamento de ".$_REQUEST['T02_DescDepartamento'];
            $aRespuestas['T02_VolumenDeNegocio'] = str_replace(',', '.', $_REQUEST['T02_VolumenDeNegocio']);
            
            try {
                    $miDB = new PDO(DSN,USERNAME,PASSWORD);
                    $sql = <<<sql
                        insert into T02_Departamento 
                        values (?,?,now(),?,null)
                    sql;

                    // conexion a la BBDD e insertar un registro.
                    $consulta = $miDB->prepare($sql);
                    $consulta->bindParam(1,$aRespuestas['T02_CodDepartamento']);
                    $consulta->bindParam(2,$aRespuestas['T02_DescDepartamento']);
                    $consulta->bindParam(3,$aRespuestas['T02_VolumenDeNegocio']);
                    
                    if($consulta->execute()){
                        echo 'Nuevo departamento creado con éxito';
                    } else {
                        echo 'Error al crear el departamento';
                    }
                    
                    
                } catch (PDOException $miExceptionPDO) {
                    // temporalmente ponemos estos errores para que se muestren en pantalla
                    $aErrores['T02_CodDepartamento']= 'Error: '.$miExceptionPDO->getMessage().'con código de error: '.$miExceptionPDO->getCode();
                    $entradaOK = false;
                } finally {
                    unset($miDB);
                }

            // Botón para volver a recargar el formulario inicial
            echo '<a href="' . $_SERVER['PHP_SELF'] . '"><button>Volver</button></a>';
            
        } else { //Mostrar el formulario hasta que lo rellenemos correctamente
            //Mostrar formulario
            //Mostrar los datos tecleados correctamente en intentos anteriores
            //Mostrar mensajes de error (si los hay y el formulario no se muestra por primera vez)
            $oFechaActual = new DateTime();
            ?>
                <h2>Nuevo departamento</h2>
                <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> 
                    <label for="T02_CodDepartamento">Código:</label>
                    <input 
                        type="text" id="T02_CodDepartamento" class="obligatorio" name="T02_CodDepartamento" 
                        value="<?php echo $_REQUEST['T02_CodDepartamento']??'' ?>"
                        style="text-transform: uppercase;" 
                        oninput="this.value = this.value.toUpperCase()"
                    >
                    <span class="error"><?php echo $aErrores['T02_CodDepartamento'] ?></span>
                    <br>
                    <label for="T02_DescDepartamento">Descripción: Departamento de </label>
                    <input type="text" id="T02_DescDepartamento" name="T02_DescDepartamento" class="obligatorio" value="<?php echo $_REQUEST['T02_DescDepartamento']??'' ?>">
                    <span class="error"><?php echo $aErrores['T02_DescDepartamento'] ?></span>
                    <br>
                    <label for="T02_FechaCreacionDepartamento">Fecha de alta:</label>
                    <input type="text" id="T02_FechaCreacionDepartamento" name="T02_FechaCreacionDepartamento" value="<?php echo $oFechaActual->format("d/m/Y") ?>" readonly>
                    <br>
                    <label for="T02_VolumenDeNegocio">Volumen de negocio:</label>
                    <input type="text" id="T02_VolumenDeNegocio" name="T02_VolumenDeNegocio" value="<?php echo $_REQUEST['T02_VolumenDeNegocio']??'' ?>">€
                    <span class="error"><?php echo $aErrores['T02_VolumenDeNegocio'] ?></span>
                    <br>
                    <input type="submit" value="Aceptar" name="enviar">
                    <a href="../indexProyectoTema4.php" class="cancelar">Cancelar</a>
                </form>

            <?php
            
        }
       ?>
    </main>
    <?php 
        try {
            $miDB = new PDO(DSN,USERNAME,PASSWORD);
            $sql = "select * from T02_Departamento";
            
            $consulta = $miDB->prepare($sql);
            $consulta->execute();

            echo '<table>';
            echo '<tr>';
            echo '<th>Código▼</th>';
            echo '<th>Departamento</th>';
            echo '<th>Fecha de Creacion</th>';
            echo '<th>Volumen de Negocio</th>';
            echo '<th>Fecha de Baja</th>';
            echo '</tr>';

            while ($registro = $consulta->fetch()) {
                echo '<tr>';
                echo '<td>'.$registro['T02_CodDepartamento'].'</td>';
                echo '<td>'.$registro["T02_DescDepartamento"].'</td>';
                // construimos la fecha a partir de la que hay en la bbdd y luego mostramos sólo dia mes y año
                $oFecha = new DateTime($registro["T02_FechaCreacionDepartamento"]);
                echo '<td>'.$oFecha->format('d/m/Y').'</td>';
                // formateamos el float para que se vea en €
                echo '<td>'.number_format($registro["T02_VolumenDeNegocio"],2,',','.').' €</td>';
                if (is_null($registro["T02_FechaBajaDepartamento"])) {
                    echo '<td></td>';
                } else {
                    $oFecha = new DateTime($registro["T02_FechaBajaDepartamento"]);
                    echo '<td>'.$oFecha->format('d/m/Y').'</td>';
                }
                echo '</tr>';
            }
            echo '</table>';

        } catch (PDOException $miExceptionPDO) {
            echo 'Error: '.$miExceptionPDO->getMessage();
            echo '<br>';
            echo 'Código de error: '.$miExceptionPDO->getCode();
        } finally {
            unset($miDB);
        }
    ?>
</body>
</html>