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>
        main h2{
            text-align: center;
            background-color: #ebe5e5ff;
            margin: 30px 10vw 0px 10vw;
            padding: 5px 0;
        }
        main h3{
            margin-top: 0;
        }
        main p{
            text-align: center;
            padding: 3px;
            margin: 0 10vw;
        }
        .correcto{background-color: #dce9d5ff;}
        .error{background-color: #e9b8b8ff;}
        main pre{
            margin-left: 10vw;
        }
    </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 07 PDO</h2>
        <h2>Gonzalo Junquera Lorenzo</h2>
    </nav>
    <main>
       <?php
       /**
        * @author: Gonzalo Junquera Lorenzo
        * @since: 13/11/2025
        * 7. Página web que toma datos (código y descripción) de un fichero xml y los añade a la tabla Departamento de nuestra base de datos. (IMPORTAR). El fichero importado se encuentra en el directorio .../tmp/ del servidor.
        */
        // importamos el archivo con los datos de conexión
        require_once '../conf/confDBPDO.php';

        // Antes de empezar hay que comprobar si el archivo existe
        if (!file_exists('../tmp/datos.json')) {
            echo '<h2>El archivo JSON NO existe</h2>';
            echo '<p>Ejecuta el ejercicio 8 antes que éste</p>';

        // si existe el archivo continuamos
        }else {
            // recuperamos el archivo de la carpeta tmp
            $json = file_get_contents('../tmp/datos.json');

            // lo convertimos a un array
            $aDepartamentos = json_decode($json,true);

            try {
                $miDB = new PDO(DSN,USERNAME,PASSWORD);

                
                echo '<h3>Vacío la tabla antes de cargar el JSON</h3>';
                // vacio la tabla antes de volver a cargar los registros del JSON
                $vaciarTabla = $miDB->prepare('TRUNCATE TABLE T02_Departamento');
                $vaciarTabla->execute();

                $miDB->beginTransaction();
                
                $sql = 'insert into T02_Departamento values (:codigo,:descripcion,:fAlta,:volumen,:fBaja)';

                // Esta línea esta para probar a que de error al importar al a bbdd
                // $sql = 'insert into T02_Departamento values (:codigo,:descripcion,:fAlta,:volumen,null)';
                
                $consulta = $miDB->prepare($sql);

                foreach ($aDepartamentos as $registro) {
                    $consulta->bindParam(":codigo",$registro['CodDepartamento']);
                    $consulta->bindParam(":descripcion",$registro['DescDepartamento']);

                    // La bbdd necesita pasarle un objeto fecha, lo creamos y lo formateamos correctamente para la bbdd
                    $oFechaCreacion = new DateTime($registro['FechaCreacionDepartamento']);
                    $oFechaCreacion = $oFechaCreacion->format('Y-m-d H:i:s');
                    $consulta->bindParam(":fAlta",$oFechaCreacion);

                    $consulta->bindParam(":volumen",$registro['VolumenDeNegocio']);

                    // Si no hay fecha devolvemos null para la base de datos
                    if ($registro['FechaBajaDepartamento'] === 'null') {
                        $ofechaBaja = null;

                    // Si existe fecha la creamos y la formateamos antes de pasarla a la BBDD
                    } else {
                        $ofechaBaja = new DateTime($registro['FechaBajaDepartamento']);
                        $ofechaBaja = $ofechaBaja->format('Y-m-d H:i:s');
                    }
                    $consulta->bindParam(":fBaja",$ofechaBaja);

                    $consulta -> execute();
                }

                $miDB->commit();
                echo '<p class="correcto">Datos importados correctamente del JSON a la BBDD</p>';

            } catch (PDOException $miExceptionPDO) {
                $miDB->rollBack();
                echo '<p class="error">Transacción fallida. No se ha importado ningún registro a la BBDD.';
                // temporalmente ponemos estos errores para que se muestren en pantalla
                $aErrores['CodDepartamentoGuardar']= 'Error: '.$miExceptionPDO->getMessage().'con código de error: '.$miExceptionPDO->getCode();
                $entradaOK = false;
            } finally {
                unset($miDB);
            }
        }

        echo '<h2>Datos actuales en la BBDD </h2>';
        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) {
            $miDB->rollBack();
            echo "<br>Transacción fallida. No se ha importado ningún registro a la BBDD.";
            // temporalmente ponemos estos errores para que se muestren en pantalla
            $aErrores['CodDepartamentoGuardar']= 'Error: '.$miExceptionPDO->getMessage().'con código de error: '.$miExceptionPDO->getCode();
            $entradaOK = false;
        } finally {
            unset($miDB);
        }

        if (file_exists('../tmp/datos.json')) {
            echo '<h2>Datos en el JSON a importar</h2>';
            echo '<pre>';
            highlight_file('../tmp/datos.json');
            echo '</pre>';
        }
       ?>
    </main>
</body>
</html>