new format to reporte
This commit is contained in:
@@ -57,8 +57,9 @@ export default function Pregunta1() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.get<RawEntry[]>(
|
.post<RawEntry[]>(
|
||||||
`${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/tipoEquipos_tipoUso`,
|
`${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/tipoEquipos_tipoUso`,
|
||||||
|
["EN DESUSO", "EN USO"],
|
||||||
{ headers: { Authorization: `Bearer ${token}` } }
|
{ headers: { Authorization: `Bearer ${token}` } }
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
@@ -161,10 +162,13 @@ export default function Pregunta1() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={style["contenedor-pregunta"]}>
|
<div className={style["contenedor-pregunta"]}>
|
||||||
<div className={style["contenedor-censo"]}>Censo de equipos de cómputo</div>
|
<div className={style["contenedor-censo"]}>
|
||||||
|
Censo de equipos de cómputo
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className={style["pregunta-cuadro"]}>
|
<div className={style["pregunta-cuadro"]}>
|
||||||
Número de equipos de cómputo por cada categoría y perfil de usuario.<ToggleButton/>
|
Número de equipos de cómputo por cada categoría y perfil de usuario.
|
||||||
|
<ToggleButton />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={style["contenedor-tablas"]}>
|
<div className={style["contenedor-tablas"]}>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import { useState, useEffect } from "react";
|
|||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import styles from "./pregunta2.module.scss";
|
import styles from "./pregunta2.module.scss";
|
||||||
import Cookies from "js-cookie";
|
import Cookies from "js-cookie";
|
||||||
import style from "styled-jsx/style";
|
|
||||||
import ToggleButton from "../Toggle/ToggleButton";
|
import ToggleButton from "../Toggle/ToggleButton";
|
||||||
type OsEntry = {
|
type OsEntry = {
|
||||||
os: string;
|
os: string;
|
||||||
@@ -60,11 +59,15 @@ export default function Pregunta2() {
|
|||||||
// ✔ GET AXIOS PROFESIONAL
|
// ✔ GET AXIOS PROFESIONAL
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const token = Cookies.get("token");
|
const token = Cookies.get("token");
|
||||||
const headers = {Authorization: `Bearer ${token}`};
|
const headers = { Authorization: `Bearer ${token}` };
|
||||||
axios
|
axios
|
||||||
.get(`${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/tipoEquipos_sistemasOperativos`,{headers})
|
.post(
|
||||||
|
`${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/tipoEquipos_sistemasOperativos`,
|
||||||
|
["EN DESUSO", "EN USO"],
|
||||||
|
{ headers }
|
||||||
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const json = res.data;
|
const json = res.data;
|
||||||
|
|
||||||
const formatted: PlatformData = {
|
const formatted: PlatformData = {
|
||||||
"pc-desktop": transformPlatform(json[0]),
|
"pc-desktop": transformPlatform(json[0]),
|
||||||
@@ -85,13 +88,15 @@ export default function Pregunta2() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container_P1}>
|
<div className={styles.container_P1}>
|
||||||
<div className={styles["contenedor-censo_p1"]}>Censo de equipos de cómputo - Sitema Operativo</div>
|
<div className={styles["contenedor-censo_p1"]}>
|
||||||
|
Censo de equipos de cómputo - Sitema Operativo
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className={styles["pregunta-cuadro_p1"]}>
|
<div className={styles["pregunta-cuadro_p1"]}>
|
||||||
Número de equipos de cómputo por cada categoría y perfil de usuario.<ToggleButton/>
|
Número de equipos de cómputo por cada categoría y perfil de usuario.
|
||||||
|
<ToggleButton />
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.scanView_P1}>
|
<div className={styles.scanView_P1}>
|
||||||
|
|
||||||
<div className={styles["main-content_P1"]}>
|
<div className={styles["main-content_P1"]}>
|
||||||
{/* Tabs */}
|
{/* Tabs */}
|
||||||
<div className={styles.tabs_P1}>
|
<div className={styles.tabs_P1}>
|
||||||
|
|||||||
@@ -35,7 +35,10 @@ const PLATFORM_LABELS: Record<PlatformKey, string> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Mapeo de "uso" del JSON a campos en ProcessorEntry
|
// Mapeo de "uso" del JSON a campos en ProcessorEntry
|
||||||
const USO_TO_FIELD: Record<string, keyof Omit<ProcessorEntry, "tipo" | "total" | "isTotal">> = {
|
const USO_TO_FIELD: Record<
|
||||||
|
string,
|
||||||
|
keyof Omit<ProcessorEntry, "tipo" | "total" | "isTotal">
|
||||||
|
> = {
|
||||||
ALUMNO: "alumnos",
|
ALUMNO: "alumnos",
|
||||||
PROFESOR: "profesores",
|
PROFESOR: "profesores",
|
||||||
"TÉCNICO ACADEMICO": "tecnicos",
|
"TÉCNICO ACADEMICO": "tecnicos",
|
||||||
@@ -44,7 +47,9 @@ const USO_TO_FIELD: Record<string, keyof Omit<ProcessorEntry, "tipo" | "total" |
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Transforma un array plano del tipo [{procesador, uso, total}] en ProcessorEntry[]
|
// Transforma un array plano del tipo [{procesador, uso, total}] en ProcessorEntry[]
|
||||||
function transformProcessorData(rawArray: { procesador: string; uso: string; total: string }[]): ProcessorEntry[] {
|
function transformProcessorData(
|
||||||
|
rawArray: { procesador: string; uso: string; total: string }[]
|
||||||
|
): ProcessorEntry[] {
|
||||||
const map = new Map<string, ProcessorEntry>();
|
const map = new Map<string, ProcessorEntry>();
|
||||||
|
|
||||||
for (const item of rawArray) {
|
for (const item of rawArray) {
|
||||||
@@ -85,12 +90,24 @@ function transformProcessorData(rawArray: { procesador: string; uso: string; tot
|
|||||||
// Calculamos los totales generales
|
// Calculamos los totales generales
|
||||||
const grandTotal: ProcessorEntry = {
|
const grandTotal: ProcessorEntry = {
|
||||||
tipo: "Total",
|
tipo: "Total",
|
||||||
alumnos: rows.reduce((sum, r) => sum + parseInt(r.alumnos || "0"), 0).toString(),
|
alumnos: rows
|
||||||
profesores: rows.reduce((sum, r) => sum + parseInt(r.profesores || "0"), 0).toString(),
|
.reduce((sum, r) => sum + parseInt(r.alumnos || "0"), 0)
|
||||||
tecnicos: rows.reduce((sum, r) => sum + parseInt(r.tecnicos || "0"), 0).toString(),
|
.toString(),
|
||||||
investigadores: rows.reduce((sum, r) => sum + parseInt(r.investigadores || "0"), 0).toString(),
|
profesores: rows
|
||||||
administrativos: rows.reduce((sum, r) => sum + parseInt(r.administrativos || "0"), 0).toString(),
|
.reduce((sum, r) => sum + parseInt(r.profesores || "0"), 0)
|
||||||
total: rows.reduce((sum, r) => sum + parseInt(r.total || "0"), 0).toString(),
|
.toString(),
|
||||||
|
tecnicos: rows
|
||||||
|
.reduce((sum, r) => sum + parseInt(r.tecnicos || "0"), 0)
|
||||||
|
.toString(),
|
||||||
|
investigadores: rows
|
||||||
|
.reduce((sum, r) => sum + parseInt(r.investigadores || "0"), 0)
|
||||||
|
.toString(),
|
||||||
|
administrativos: rows
|
||||||
|
.reduce((sum, r) => sum + parseInt(r.administrativos || "0"), 0)
|
||||||
|
.toString(),
|
||||||
|
total: rows
|
||||||
|
.reduce((sum, r) => sum + parseInt(r.total || "0"), 0)
|
||||||
|
.toString(),
|
||||||
isTotal: true,
|
isTotal: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -112,7 +129,11 @@ export default function Pregunta3_2() {
|
|||||||
|
|
||||||
const headers = { Authorization: `Bearer ${token}` };
|
const headers = { Authorization: `Bearer ${token}` };
|
||||||
axios
|
axios
|
||||||
.get(`${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/tipoEquipos_procesador`, { headers })
|
.post(
|
||||||
|
`${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/tipoEquipos_procesador`,
|
||||||
|
["EN DESUSO", "EN USO"],
|
||||||
|
{ headers }
|
||||||
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const json = res.data; // array de 5 arreglos
|
const json = res.data; // array de 5 arreglos
|
||||||
|
|
||||||
@@ -134,28 +155,34 @@ export default function Pregunta3_2() {
|
|||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
if (loading) return <div className={styles.scanView_P3}>Cargando datos...</div>;
|
if (loading)
|
||||||
|
return <div className={styles.scanView_P3}>Cargando datos...</div>;
|
||||||
|
|
||||||
if (!data) return <div className={styles.scanView_P3}>Error al cargar los datos.</div>;
|
if (!data)
|
||||||
|
return <div className={styles.scanView_P3}>Error al cargar los datos.</div>;
|
||||||
|
|
||||||
const currentData = data[activeTab];
|
const currentData = data[activeTab];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container_P3}>
|
<div className={styles.container_P3}>
|
||||||
<div className={styles["contenedor-censo_P3"]}>Censo de equipos de cómputo - Plataforma y tipo procesador</div>
|
<div className={styles["contenedor-censo_P3"]}>
|
||||||
|
Censo de equipos de cómputo - Plataforma y tipo procesador
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className={styles["pregunta-cuadro_P3"]}>
|
<div className={styles["pregunta-cuadro_P3"]}>
|
||||||
Cantidad de población beneficiada por plataforma y tipo de procesador.<ToggleButton/>
|
Cantidad de población beneficiada por plataforma y tipo de procesador.
|
||||||
|
<ToggleButton />
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.scanView_P3}>
|
<div className={styles.scanView_P3}>
|
||||||
|
|
||||||
<div className={styles.mainContent_P3}>
|
<div className={styles.mainContent_P3}>
|
||||||
{/* Pestañas verticales */}
|
{/* Pestañas verticales */}
|
||||||
<div className={styles.tabs_P3}>
|
<div className={styles.tabs_P3}>
|
||||||
{Object.entries(PLATFORM_LABELS).map(([key, label]) => (
|
{Object.entries(PLATFORM_LABELS).map(([key, label]) => (
|
||||||
<button
|
<button
|
||||||
key={key}
|
key={key}
|
||||||
className={`${styles.tab_P3} ${activeTab === key ? styles.active_P3 : ""}`}
|
className={`${styles.tab_P3} ${
|
||||||
|
activeTab === key ? styles.active_P3 : ""
|
||||||
|
}`}
|
||||||
onClick={() => setActiveTab(key as PlatformKey)}
|
onClick={() => setActiveTab(key as PlatformKey)}
|
||||||
aria-selected={activeTab === key}
|
aria-selected={activeTab === key}
|
||||||
>
|
>
|
||||||
@@ -173,7 +200,10 @@ export default function Pregunta3_2() {
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th rowSpan={2} className={styles.headerProcesador}>
|
<th rowSpan={2} className={styles.headerProcesador}>
|
||||||
{activeTab.includes("apple") ? "Plataforma Apple" : "Plataforma PC"} <br />
|
{activeTab.includes("apple")
|
||||||
|
? "Plataforma Apple"
|
||||||
|
: "Plataforma PC"}{" "}
|
||||||
|
<br />
|
||||||
Tipo de procesador
|
Tipo de procesador
|
||||||
</th>
|
</th>
|
||||||
<th colSpan={5} className={styles.headerPoblacion}>
|
<th colSpan={5} className={styles.headerPoblacion}>
|
||||||
@@ -186,7 +216,9 @@ export default function Pregunta3_2() {
|
|||||||
<tr>
|
<tr>
|
||||||
<th className={styles.subHeader}>Alumnos</th>
|
<th className={styles.subHeader}>Alumnos</th>
|
||||||
<th className={styles.subHeader}>Profesores</th>
|
<th className={styles.subHeader}>Profesores</th>
|
||||||
<th className={styles.subHeader}>Técnicos Académicos</th>
|
<th className={styles.subHeader}>
|
||||||
|
Técnicos Académicos
|
||||||
|
</th>
|
||||||
<th className={styles.subHeader}>Investigadores</th>
|
<th className={styles.subHeader}>Investigadores</th>
|
||||||
<th className={styles.subHeader}>Administrativos</th>
|
<th className={styles.subHeader}>Administrativos</th>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -195,7 +227,11 @@ export default function Pregunta3_2() {
|
|||||||
{currentData.map((item, index) => (
|
{currentData.map((item, index) => (
|
||||||
<tr
|
<tr
|
||||||
key={index}
|
key={index}
|
||||||
className={item.isTotal ? styles.totalRow_P3 : styles.dataRow_P3}
|
className={
|
||||||
|
item.isTotal
|
||||||
|
? styles.totalRow_P3
|
||||||
|
: styles.dataRow_P3
|
||||||
|
}
|
||||||
>
|
>
|
||||||
<td className={styles.processor_P3}>{item.tipo}</td>
|
<td className={styles.processor_P3}>{item.tipo}</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -255,4 +291,4 @@ export default function Pregunta3_2() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,7 @@ export default function Pregunta7() {
|
|||||||
{ nombre: "Impresión", valores: ["0.00", "0.00", "0.00", "0.00"] },
|
{ nombre: "Impresión", valores: ["0.00", "0.00", "0.00", "0.00"] },
|
||||||
{
|
{
|
||||||
nombre: "Digitalización",
|
nombre: "Digitalización",
|
||||||
valores: ["0.00", "0.00", "0.00", "0.00"
|
valores: ["0.00", "0.00", "0.00", "0.00"],
|
||||||
],
|
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -70,12 +69,7 @@ export default function Pregunta7() {
|
|||||||
|
|
||||||
const pct = (v: number) => ((v / total) * 100).toFixed(2);
|
const pct = (v: number) => ((v / total) * 100).toFixed(2);
|
||||||
|
|
||||||
return [
|
return [pct(menores2), pct(entre2_3), pct(entre4_5), pct(mayores6)];
|
||||||
pct(menores2),
|
|
||||||
pct(entre2_3),
|
|
||||||
pct(entre4_5),
|
|
||||||
pct(mayores6),
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// ------------------------------
|
// ------------------------------
|
||||||
@@ -85,8 +79,9 @@ export default function Pregunta7() {
|
|||||||
const token = Cookies.get("token");
|
const token = Cookies.get("token");
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.get<RespuestaAntiguedad>(
|
.post<RespuestaAntiguedad>(
|
||||||
`${api_url}/equipos/reporte/contar_perifericos_antiguedad`,
|
`${api_url}/equipos/reporte/contar_perifericos_antiguedad`,
|
||||||
|
["EN DESUSO", "EN USO"],
|
||||||
{
|
{
|
||||||
headers: { Authorization: `Bearer ${token}` },
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
}
|
}
|
||||||
@@ -116,7 +111,8 @@ export default function Pregunta7() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="pregunta-cuadro">
|
<div className="pregunta-cuadro">
|
||||||
Antigüedad que tienen los equipos periféricos del área universitaria.<ToggleButton/>
|
Antigüedad que tienen los equipos periféricos del área universitaria.
|
||||||
|
<ToggleButton />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="tabla-contenedor">
|
<div className="tabla-contenedor">
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import ToggleButton from "../Toggle/ToggleButton";
|
|||||||
type AntiguedadItem = {
|
type AntiguedadItem = {
|
||||||
antiguedad: string | null;
|
antiguedad: string | null;
|
||||||
total: string;
|
total: string;
|
||||||
porcentaje: string;
|
porcentaje: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
type ApiResponse = {
|
type ApiResponse = {
|
||||||
@@ -21,16 +21,24 @@ type ApiResponse = {
|
|||||||
|
|
||||||
export default function Pregunta9() {
|
export default function Pregunta9() {
|
||||||
const [datos, setDatos] = useState([
|
const [datos, setDatos] = useState([
|
||||||
{ nombre: "Computadoras de Escritorio", valores: ["0.00", "0.00", "0.00", "0.00","0.00"] },
|
{
|
||||||
{ nombre: "Computadoras Portátiles", valores: ["0.00", "0.00", "0.00", "0.00","0.00"] },
|
nombre: "Computadoras de Escritorio",
|
||||||
{ nombre: "Alto Rendimiento", valores: ["0.00", "0.00", "0.00", "0.00","0.00"] },
|
valores: ["0.00", "0.00", "0.00", "0.00", "0.00"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nombre: "Computadoras Portátiles",
|
||||||
|
valores: ["0.00", "0.00", "0.00", "0.00", "0.00"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nombre: "Alto Rendimiento",
|
||||||
|
valores: ["0.00", "0.00", "0.00", "0.00", "0.00"],
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
|
|
||||||
// Transforma los datos del backend al formato de 4 columnas con % calculados
|
// Transforma los datos del backend al formato de 4 columnas con % calculados
|
||||||
const transformarDatos = (items: AntiguedadItem[]): string[] => {
|
const transformarDatos = (items: AntiguedadItem[]): string[] => {
|
||||||
|
|
||||||
let menores2 = 0;
|
let menores2 = 0;
|
||||||
let entre2_3 = 0;
|
let entre2_3 = 0;
|
||||||
let entre4_6 = 0;
|
let entre4_6 = 0;
|
||||||
@@ -54,20 +62,28 @@ export default function Pregunta9() {
|
|||||||
case "ENTRE 6 Y MAYORES":
|
case "ENTRE 6 Y MAYORES":
|
||||||
mayores6 += total;
|
mayores6 += total;
|
||||||
break;
|
break;
|
||||||
// Cualquier otro valor (aunque no debería haber) lo meteríamos en mayores6
|
// Cualquier otro valor (aunque no debería haber) lo meteríamos en mayores6
|
||||||
default:notfound += total; break;
|
default:
|
||||||
|
notfound += total;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const totalEquipo = menores2 + mayores6+ entre2_3 + entre4_6 + notfound;
|
const totalEquipo = menores2 + mayores6 + entre2_3 + entre4_6 + notfound;
|
||||||
|
|
||||||
if (totalEquipo === 0) {
|
if (totalEquipo === 0) {
|
||||||
return ["0.00", "0.00", "0.00", "0.00","0.00"];
|
return ["0.00", "0.00", "0.00", "0.00", "0.00"];
|
||||||
}
|
}
|
||||||
|
|
||||||
const pct = (valor: number) => ((valor / totalEquipo) * 100).toFixed(2);
|
const pct = (valor: number) => ((valor / totalEquipo) * 100).toFixed(2);
|
||||||
|
|
||||||
return [pct(menores2), pct(entre2_3), pct(entre4_6), pct(mayores6),pct(notfound)];
|
return [
|
||||||
|
pct(menores2),
|
||||||
|
pct(entre2_3),
|
||||||
|
pct(entre4_6),
|
||||||
|
pct(mayores6),
|
||||||
|
pct(notfound),
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -79,9 +95,13 @@ export default function Pregunta9() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.get<ApiResponse>(`${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/tipoEquipos_antiguedad`, {
|
.post<ApiResponse>(
|
||||||
headers: { Authorization: `Bearer ${token}` },
|
`${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/tipoEquipos_antiguedad`,
|
||||||
})
|
["EN DESUSO", "EN USO"],
|
||||||
|
{
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
}
|
||||||
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const { escritorios, portatiles, altoRendimiento } = res.data;
|
const { escritorios, portatiles, altoRendimiento } = res.data;
|
||||||
|
|
||||||
@@ -117,7 +137,9 @@ export default function Pregunta9() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="contenedor-pregunta">
|
<div className="contenedor-pregunta">
|
||||||
<div className="contenedor-censo">Censo de equipos de cómputo - Generales</div>
|
<div className="contenedor-censo">
|
||||||
|
Censo de equipos de cómputo - Generales
|
||||||
|
</div>
|
||||||
{/* Pregunta intro (servidores) */}
|
{/* Pregunta intro (servidores) */}
|
||||||
{/* <div className="pregunta-cuadro" style={{ marginTop: "30px" }}>
|
{/* <div className="pregunta-cuadro" style={{ marginTop: "30px" }}>
|
||||||
Indique cuantos servidores son utilizados en ambientes productivos y si en ellos se almacenan datos personales.
|
Indique cuantos servidores son utilizados en ambientes productivos y si en ellos se almacenan datos personales.
|
||||||
@@ -127,7 +149,8 @@ export default function Pregunta9() {
|
|||||||
|
|
||||||
{/* Pregunta 9: Antigüedad */}
|
{/* Pregunta 9: Antigüedad */}
|
||||||
<div className="pregunta-cuadro">
|
<div className="pregunta-cuadro">
|
||||||
Antigüedad que tienen los equipos de cómputo del área universitaria.<ToggleButton/>
|
Antigüedad que tienen los equipos de cómputo del área universitaria.
|
||||||
|
<ToggleButton />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="tabla-contenedor">
|
<div className="tabla-contenedor">
|
||||||
@@ -162,7 +185,11 @@ export default function Pregunta9() {
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
))}
|
))}
|
||||||
<td className={`total-celda ${total > 100.1 ? "total-error" : ""}`}>
|
<td
|
||||||
|
className={`total-celda ${
|
||||||
|
total > 100.1 ? "total-error" : ""
|
||||||
|
}`}
|
||||||
|
>
|
||||||
{total.toFixed(2)}%
|
{total.toFixed(2)}%
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -172,8 +199,7 @@ export default function Pregunta9() {
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Pregunta10/>
|
<Pregunta10 />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,9 +24,13 @@ export default function Pregunta10() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.get<number[]>(`${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/garantia`, {
|
.post<number[]>(
|
||||||
headers: { Authorization: `Bearer ${token}` },
|
`${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/garantia`,
|
||||||
})
|
["EN DESUSO", "EN USO"],
|
||||||
|
{
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
}
|
||||||
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const [escritorio, portatil, altoRendimiento] = res.data;
|
const [escritorio, portatil, altoRendimiento] = res.data;
|
||||||
|
|
||||||
@@ -46,17 +50,14 @@ export default function Pregunta10() {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return (
|
return <div className="pregunta-cuadro">Cargando datos de garantía...</div>;
|
||||||
<div className="pregunta-cuadro">
|
|
||||||
Cargando datos de garantía...
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="pregunta-cuadro">
|
<div className="pregunta-cuadro">
|
||||||
Equipos de cómputo que tienen garantía de proveedoro.<ToggleButton/>
|
Equipos de cómputo que tienen garantía de proveedoro.
|
||||||
|
<ToggleButton />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="tabla-contenedor">
|
<div className="tabla-contenedor">
|
||||||
@@ -72,20 +73,12 @@ export default function Pregunta10() {
|
|||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div className="input-contenedor input-sp">
|
<div className="input-contenedor input-sp">
|
||||||
<input
|
<input type="number" value={garantia.escritorio} readOnly />
|
||||||
type="number"
|
|
||||||
value={garantia.escritorio}
|
|
||||||
readOnly
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div className="input-contenedor input-sp">
|
<div className="input-contenedor input-sp">
|
||||||
<input
|
<input type="number" value={garantia.portatil} readOnly />
|
||||||
type="number"
|
|
||||||
value={garantia.portatil}
|
|
||||||
readOnly
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -103,4 +96,4 @@ export default function Pregunta10() {
|
|||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,9 +41,13 @@ export default function Pregunta1EP() {
|
|||||||
const headers = { Authorization: `Bearer ${token}` };
|
const headers = { Authorization: `Bearer ${token}` };
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.get(`${api_url}/equipos/reporte/equipos_impesion_group/impresoras`, {
|
.post(
|
||||||
headers,
|
`${api_url}/equipos/reporte/equipos_impesion_group/impresoras`,
|
||||||
})
|
["EN DESUSO", "EN USO"],
|
||||||
|
{
|
||||||
|
headers,
|
||||||
|
}
|
||||||
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
|
|
||||||
@@ -121,7 +125,10 @@ export default function Pregunta1EP() {
|
|||||||
Censo de equipos periféricos - Equipo de Impresion
|
Censo de equipos periféricos - Equipo de Impresion
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="pregunta-cuadro">Equipos de impresión.<ToggleButton/></div>
|
<div className="pregunta-cuadro">
|
||||||
|
Equipos de impresión.
|
||||||
|
<ToggleButton />
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className={style.grid}>
|
<div className={style.grid}>
|
||||||
{/* Columna 1 */}
|
{/* Columna 1 */}
|
||||||
|
|||||||
@@ -31,9 +31,13 @@ export default function Pregunta2EP() {
|
|||||||
const headers = { Authorization: `Bearer ${token}` };
|
const headers = { Authorization: `Bearer ${token}` };
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.get(`${api_url}/equipos/reporte/contar_periferico_tipoUso/impresoras`, {
|
.post(
|
||||||
headers,
|
`${api_url}/equipos/reporte/contar_periferico_tipoUso/impresoras`,
|
||||||
})
|
["EN DESUSO", "EN USO"],
|
||||||
|
{
|
||||||
|
headers,
|
||||||
|
}
|
||||||
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
|
|
||||||
@@ -98,7 +102,8 @@ export default function Pregunta2EP() {
|
|||||||
return (
|
return (
|
||||||
<div className={styles.container_P2}>
|
<div className={styles.container_P2}>
|
||||||
<div className="pregunta-cuadro">
|
<div className="pregunta-cuadro">
|
||||||
Equipos de impresión de acuerdo con la población universitaria.<ToggleButton/>
|
Equipos de impresión de acuerdo con la población universitaria.
|
||||||
|
<ToggleButton />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={styles.row_P2}>
|
<div className={styles.row_P2}>
|
||||||
|
|||||||
@@ -26,9 +26,13 @@ export default function Pregunta4EP() {
|
|||||||
const token = Cookies.get("token");
|
const token = Cookies.get("token");
|
||||||
const headers = { Authorization: `Bearer ${token}` };
|
const headers = { Authorization: `Bearer ${token}` };
|
||||||
axios
|
axios
|
||||||
.get(`${api_url}/equipos/reporte/equipos_impesion_group/dijitales`, {
|
.post(
|
||||||
headers,
|
`${api_url}/equipos/reporte/equipos_impesion_group/dijitales`,
|
||||||
})
|
["EN DESUSO", "EN USO"],
|
||||||
|
{
|
||||||
|
headers,
|
||||||
|
}
|
||||||
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
|
|
||||||
@@ -77,7 +81,8 @@ export default function Pregunta4EP() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="pregunta-cuadro">
|
<div className="pregunta-cuadro">
|
||||||
Número de equipos de digitalización.<ToggleButton/>
|
Número de equipos de digitalización.
|
||||||
|
<ToggleButton />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="grid">
|
<div className="grid">
|
||||||
|
|||||||
@@ -32,9 +32,13 @@ export default function Pregunta5EP() {
|
|||||||
const headers = { Authorization: `Bearer ${token}` };
|
const headers = { Authorization: `Bearer ${token}` };
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.get(`${api_url}/equipos/reporte/contar_periferico_tipoUso/dijtales`, {
|
.post(
|
||||||
headers,
|
`${api_url}/equipos/reporte/contar_periferico_tipoUso/dijtales`,
|
||||||
})
|
["EN DESUSO", "EN USO"],
|
||||||
|
{
|
||||||
|
headers,
|
||||||
|
}
|
||||||
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
|
|
||||||
@@ -99,7 +103,8 @@ export default function Pregunta5EP() {
|
|||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="pregunta-cuadro">
|
<div className="pregunta-cuadro">
|
||||||
Número de equipos de digitalización de acuerdo con la población
|
Número de equipos de digitalización de acuerdo con la población
|
||||||
universitaria.<ToggleButton/>
|
universitaria.
|
||||||
|
<ToggleButton />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={styles.row_P2}>
|
<div className={styles.row_P2}>
|
||||||
|
|||||||
@@ -25,7 +25,11 @@ export default function Pregunta7EP() {
|
|||||||
const headers = { Authorization: `Bearer ${token}` };
|
const headers = { Authorization: `Bearer ${token}` };
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.get(`${api_url}/equipos/reporte/contar_laboratorio`, { headers })
|
.post(
|
||||||
|
`${api_url}/equipos/reporte/contar_laboratorio`,
|
||||||
|
["EN DESUSO", "EN USO"],
|
||||||
|
{ headers }
|
||||||
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const formato: Dato[] = res.data.map((item: any) => ({
|
const formato: Dato[] = res.data.map((item: any) => ({
|
||||||
nombre: item.laboratorio || "SIN NOMBRE",
|
nombre: item.laboratorio || "SIN NOMBRE",
|
||||||
@@ -75,15 +79,20 @@ export default function Pregunta7EP() {
|
|||||||
const startItem = (currentPage - 1) * recordsPerPage + 1;
|
const startItem = (currentPage - 1) * recordsPerPage + 1;
|
||||||
const endItem = Math.min(startItem + recordsPerPage - 1, sortedData.length);
|
const endItem = Math.min(startItem + recordsPerPage - 1, sortedData.length);
|
||||||
const totalLaboratorios = data.reduce(
|
const totalLaboratorios = data.reduce(
|
||||||
(sum, item) => sum + (item.nombre != "NO_APLICA" ? Number(item.cantidad):0),
|
(sum, item) =>
|
||||||
|
sum + (item.nombre != "NO_APLICA" ? Number(item.cantidad) : 0),
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="container">
|
<div className="container">
|
||||||
|
<div className="contenedor-censo">
|
||||||
<div className="contenedor-censo">Censo de equipos de cómputo - Laboratorio</div>
|
Censo de equipos de cómputo - Laboratorio
|
||||||
<div className="pregunta-cuadro">Numero de laboratorios.<ToggleButton/></div>
|
</div>
|
||||||
|
<div className="pregunta-cuadro">
|
||||||
|
Numero de laboratorios.
|
||||||
|
<ToggleButton />
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className="controls">
|
<div className="controls">
|
||||||
<div className="show-records">
|
<div className="show-records">
|
||||||
|
|||||||
@@ -25,7 +25,11 @@ export default function Pregunta8() {
|
|||||||
const headers = { Authorization: `Bearer ${token}` };
|
const headers = { Authorization: `Bearer ${token}` };
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.get(`${api_url}/equipos/reporte/contar_proyecto`, { headers })
|
.post(
|
||||||
|
`${api_url}/equipos/reporte/contar_proyecto`,
|
||||||
|
["EN DESUSO", "EN USO"],
|
||||||
|
{ headers }
|
||||||
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const formato: Dato[] = res.data.map((item: any) => ({
|
const formato: Dato[] = res.data.map((item: any) => ({
|
||||||
nombre: item.proyecto || "SIN PROYECTO",
|
nombre: item.proyecto || "SIN PROYECTO",
|
||||||
@@ -75,15 +79,20 @@ export default function Pregunta8() {
|
|||||||
const startItem = (currentPage - 1) * recordsPerPage + 1;
|
const startItem = (currentPage - 1) * recordsPerPage + 1;
|
||||||
const endItem = Math.min(startItem + recordsPerPage - 1, sortedData.length);
|
const endItem = Math.min(startItem + recordsPerPage - 1, sortedData.length);
|
||||||
const totalLaboratorios = data.reduce(
|
const totalLaboratorios = data.reduce(
|
||||||
(sum, item) => sum + (item.nombre != "NO_APLICA" ? Number(item.cantidad):0),
|
(sum, item) =>
|
||||||
|
sum + (item.nombre != "NO_APLICA" ? Number(item.cantidad) : 0),
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="container">
|
<div className="container">
|
||||||
|
<div className="contenedor-censo">
|
||||||
<div className="contenedor-censo">Censo de equipos de cómputo - Proyectos</div>
|
Censo de equipos de cómputo - Proyectos
|
||||||
<div className="pregunta-cuadro">Numero de proyectos.<ToggleButton/></div>
|
</div>
|
||||||
|
<div className="pregunta-cuadro">
|
||||||
|
Numero de proyectos.
|
||||||
|
<ToggleButton />
|
||||||
|
</div>
|
||||||
<div className="controls">
|
<div className="controls">
|
||||||
<div className="show-records">
|
<div className="show-records">
|
||||||
Mostrar
|
Mostrar
|
||||||
|
|||||||
Reference in New Issue
Block a user