5 Commits

Author SHA1 Message Date
stern f2afe92991 Add deploy.yaml
Despliegue Automatizado Universal / get-context (push) Successful in 1s
Despliegue Automatizado Universal / build (push) Successful in 1m54s
Despliegue Automatizado Universal / deploy (push) Successful in 36s
2026-07-02 03:08:12 -06:00
IO edc56138d5 added new icons 2026-06-05 15:38:48 -05:00
IO 97f2a8851d added new icons 2026-06-05 15:33:00 -05:00
IO 1bdde40409 fixed Axel 2026-06-04 17:40:21 -05:00
IO 286075da19 edded reporte and pull axel 2026-06-03 19:55:29 -05:00
11 changed files with 124 additions and 23 deletions
+85
View File
@@ -0,0 +1,85 @@
name: Despliegue Automatizado Universal
on:
push:
branches:
- develop
- master
jobs:
get-context:
runs-on: host
outputs:
node_version: ${{ steps.setup.outputs.version }}
target_app: ${{ steps.setup.outputs.app }}
steps:
- name: Resolver Aplicación desde apps.conf
id: setup
run: |
# 1. Obtener el nombre del repositorio actual en Gitea (ej: front-Censo)
REPO_NAME="${{ github.event.repository.name }}"
# 2. Determinar si buscamos un entorno -dev (develop) o producción (master)
if [ "${{ github.ref_name }}" = "develop" ]; then
SUFFIX="-dev"
else
SUFFIX=""
fi
echo "Buscando qué sección de apps.conf tiene REPO=$REPO_NAME y termina en '$SUFFIX'..."
# 3. Buscar en /etc/apps.conf el bloque que contenga REPO=nombre_del_repo
TARGET_APP=$(awk -v repo="REPO=$REPO_NAME" -v suf="$SUFFIX" '
/^\[/ { gsub(/[\[\]]/, "", $0); current_box=$0; next }
$0 == repo {
if ((suf == "-dev" && current_box ~ /-dev$/) || (suf == "" && current_box !~ /-dev$/)) {
print current_box;
exit
}
}
' /etc/apps.conf)
if [ -z "$TARGET_APP" ]; then
echo "ERROR: No se encontró ninguna sección en /etc/apps.conf para el repositorio $REPO_NAME con el sufijo correcto."
exit 1
fi
# 4. Leer la versión de Node del bloque encontrado
VERSION=$(awk -v app="$TARGET_APP" '
$0=="["app"]" { found=1; next }
/^\[/ && found { exit }
found && /^NODE=/ { split($0, a, "="); print a[2]; exit }
' /etc/apps.conf)
MAJOR_VERSION=$(echo "$VERSION" | tr -d '[:space:]' | grep -oE '[0-9]+' | head -n1)
echo "-> ID de Aplicación encontrado: $TARGET_APP"
echo "-> Versión Mayor de Node resuelta: $MAJOR_VERSION"
echo "app=${TARGET_APP}" >> $GITHUB_OUTPUT
echo "version=${MAJOR_VERSION}" >> $GITHUB_OUTPUT
build:
needs: get-context
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configurar Node.js dinámicamente
uses: actions/setup-node@v4
with:
node-version: ${{ needs.get-context.outputs.node_version }}
- run: npm ci
- run: npm run build
deploy:
needs: [get-context, build]
runs-on: host
steps:
- name: Ejecutar Despliegue en Servidor Físico
run: |
TARGET_APP="${{ needs.get-context.outputs.target_app }}"
BRANCH_NAME="${{ github.ref_name }}"
sudo -u deploy /home/deploy/scripts/deploy-front.sh "$TARGET_APP" "$BRANCH_NAME"
+7 -2
View File
@@ -175,7 +175,7 @@ export default function PorServicio() {
const colors = ["black", "red", "blue", "orange", "purple", "green"]; const colors = ["black", "red", "blue", "orange", "purple", "green"];
return ( return (
<div style={{ display: "flex", flexDirection: "column", gap: "30px" }}> <div style={{ display: "flex", flexDirection: "column", gap: "5px", overflow: "auto" }}>
<PeriodoPicker <PeriodoPicker
onChange={(p1, p2) => { onChange={(p1, p2) => {
@@ -196,6 +196,9 @@ export default function PorServicio() {
gap: "20px", gap: "20px",
flexWrap: "wrap", flexWrap: "wrap",
padding: "10px 0", padding: "10px 0",
position: "absolute",
top: "34px",
right: "0",
}} }}
> >
<button <button
@@ -215,7 +218,7 @@ export default function PorServicio() {
fontWeight: "bold", fontWeight: "bold",
}} }}
> >
Exportar a Excel Excel
</button> </button>
{data.map((servicio) => ( {data.map((servicio) => (
@@ -226,6 +229,7 @@ export default function PorServicio() {
alignItems: "center", alignItems: "center",
gap: "5px", gap: "5px",
whiteSpace: "nowrap", whiteSpace: "nowrap",
fontSize:"9px"
}} }}
> >
<input <input
@@ -262,6 +266,7 @@ export default function PorServicio() {
gap: "30px", gap: "30px",
alignItems: "flex-start", alignItems: "flex-start",
flexWrap: "wrap", flexWrap: "wrap",
overflow: "auto"
}} }}
> >
{/* COLUMNA IZQUIERDA: TABLA */} {/* COLUMNA IZQUIERDA: TABLA */}
+8 -17
View File
@@ -7,12 +7,16 @@ import PorServicios from "@/app/Components/Reportes/porServicio";
import PorRecibos from "@/app/Components/Reportes/porRecibo"; import PorRecibos from "@/app/Components/Reportes/porRecibo";
import MonthYearPicker from "@/app/Components/MonthYearPicker/MonthYearPicker"; import MonthYearPicker from "@/app/Components/MonthYearPicker/MonthYearPicker";
import PeriodoPicker from "@/app/Components/PeriodoPicker/periodoPicker"; import PeriodoPicker from "@/app/Components/PeriodoPicker/periodoPicker";
import { useRouter } from "next/navigation";
import PorServicio from "../Reportes-graficas/page";
export default function ReportesClient({ export default function ReportesClient({
defaultKey, defaultKey,
}: { }: {
defaultKey?: string; defaultKey?: string;
}) { }) {
const router = useRouter();
const [desde, setDesde] = useState<string | null>(null); const [desde, setDesde] = useState<string | null>(null);
const [hasta, setHasta] = useState<string | null>(null); const [hasta, setHasta] = useState<string | null>(null);
const [periodo1, setPeriodo1] = useState<any>(null); const [periodo1, setPeriodo1] = useState<any>(null);
@@ -43,26 +47,13 @@ export default function ReportesClient({
{ {
key: "Por Servicio", key: "Por Servicio",
label: "Por Servicio", label: "Por Servicio",
content: ( content: null,
<div style={{ maxHeight: "400px", width: "100%", overflow: "visible" }}>
<PeriodoPicker
onChange={(p1, p2) => {
setPeriodo1(p1);
setPeriodo2(p2);
}}
/>
{periodo1 && periodo2 && (
<PorServicios
key={`${periodo1?.id_periodo}-${periodo2?.id_periodo}`}
periodo1={periodo1}
periodo2={periodo2}
/>
)}
</div>
),
} }
]} ]}
/> />
{defaultKey == "Por Servicio" &&
<PorServicio/>
}
</section> </section>
); );
} }
+1
View File
@@ -8,6 +8,7 @@ interface ToggleOption {
key: string; key: string;
label: string; label: string;
content: ReactNode | (() => ReactNode); content: ReactNode | (() => ReactNode);
onClick?: () => void;
} }
interface ToggleProps { interface ToggleProps {
+1 -1
View File
@@ -109,7 +109,7 @@ footer p {
height: 600px; height: 600px;
min-height: 520px; min-height: 520px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
overflow: auto; overflow: hidden;
background-color: #f9f9f9; background-color: #f9f9f9;
z-index: 0; z-index: 0;
animation: fadeInUp 1s ease forwards; animation: fadeInUp 1s ease forwards;
+1 -1
View File
@@ -17,7 +17,7 @@ export const metadata: Metadata = {
authors: [{ name: "FES Acatlán" }], authors: [{ name: "FES Acatlán" }],
creator: "Lino,Carlos,Axel", creator: "Lino,Carlos,Axel",
icons: { icons: {
icon: "/icon.svg", icon: [{ url: "/icon.ico" }, { url: "/icon.png" }, { url: "/icon.svg" }],
}, },
}; };
+18
View File
@@ -696,6 +696,7 @@
"version": "2.5.6", "version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz",
"integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
"dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
@@ -735,6 +736,7 @@
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -755,6 +757,7 @@
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -775,6 +778,7 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -795,6 +799,7 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -815,6 +820,7 @@
"cpu": [ "cpu": [
"arm" "arm"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -835,6 +841,7 @@
"cpu": [ "cpu": [
"arm" "arm"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -855,6 +862,7 @@
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -875,6 +883,7 @@
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -895,6 +904,7 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -915,6 +925,7 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -935,6 +946,7 @@
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -955,6 +967,7 @@
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -975,6 +988,7 @@
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2635,6 +2649,7 @@
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"engines": { "engines": {
@@ -2677,6 +2692,7 @@
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
@@ -3190,6 +3206,7 @@
"version": "7.1.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
"integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true "optional": true
}, },
@@ -3290,6 +3307,7 @@
"version": "4.0.4", "version": "4.0.4",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"engines": { "engines": {
+1
View File
@@ -87,3 +87,4 @@ export const config = {
"/ActivosMantenimiento", "/ActivosMantenimiento",
], ],
}; };
//IO
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB