+ if (!numAccount) {
+ setError("Error busca denuevo al estudiante");
+ return;
+ }
-
-
-
-
+ if (!pages) {
+ setError("Ingresa el numero de hojas a imprimir");
+ return;
+ }
-
-
- {
- const value = e.target.value;
- if (/^\d*$/.test(value)) {
- setPages(value);
- }
- }}
- placeholder='Numero de hojas a imprimir...'
- inputMode='numeric'
- pattern='[0-9]*'
- />
-
+ if(!cost){
+ setError("Selecciona un costo")
+ return;
+ }
-
-
-
+ const token = Cookies.get("token");
+ if (!token) {
+ handleLogout();
+ return;
+ }
-
-
+ try {
+ await axios.post(
+ `${envConfig.apiUrl}/impressions`,
+ {
+ numAccount: numAccount,
+ pages: parseInt(pages),
+ cost: parseInt(cost) * parseInt(pages),
+ },
+ {
+ headers: {
+ Authorization: `Bearer ${token}`,
+ },
+ }
+ );
- {error &&
-
- {error}
-
- }
- {alert &&
-
- {alert}
-
- }
-
+ setAlert("Cobro realizado correctamente");
+ setPages("");
+ } catch (error: any) {
+ const errorMessage =
+ error.response?.data?.error || "No se encontró el estudiante";
+
+ if (errorMessage === "Token inválido") {
+ handleLogout();
+ }
+
+ setError(errorMessage);
+ }
+ };
+
+ return (
+
+ );
}
-export default Impressions
-//IO
\ No newline at end of file
+export default Impressions;
+//IO
diff --git a/app/Components/Receipt/Receipt.tsx b/app/Components/Receipt/Receipt.tsx
index 606f4db..817af7c 100644
--- a/app/Components/Receipt/Receipt.tsx
+++ b/app/Components/Receipt/Receipt.tsx
@@ -1,6 +1,7 @@
'use client'
import { useEffect, useState } from "react";
import "./Receipt.css"
+import { PostReceipt } from "@/app/lib/receipt";
function Receipt() {
const [folio, setFolio] = useState('');
@@ -46,11 +47,15 @@ function Receipt() {
}, [error]);
//fadeOut alert and error//
+ const handleSaveReceipt = ( )=>{
+ //PostReceipt(data{folio,amount,date})
+ }
+
return (
- >
- )
+ const [numAccount, setNumAccount] = useState("");
+ const router = useRouter();
+
+ const handleSubmit = (e: React.FormEvent) => {
+ e.preventDefault();
+ if (numAccount) {
+ router.push(`/Impresiones?numAccount=${numAccount}`);
+ }
+ };
+
+ return (
+ <>
+
+ >
+ );
}
-export default SearchUser
\ No newline at end of file
+export default SearchUser;
diff --git a/app/lib/getStudent.ts b/app/lib/getStudent.ts
new file mode 100644
index 0000000..172bcff
--- /dev/null
+++ b/app/lib/getStudent.ts
@@ -0,0 +1,15 @@
+import axios from "axios";
+import { envConfig } from "./config";
+
+export async function GetStudent(numAccount: number) {
+ try {
+ const response = await axios.get(`${envConfig.apiUrl}/student/${numAccount}`);
+ return response.data;
+ } catch (error: any) {
+ const msg =
+ error.response?.data?.message ||
+ error.message ||
+ "Error desconocido al obtener estudiante";
+ return { error: msg };
+ }
+}
diff --git a/app/lib/receipt.ts b/app/lib/receipt.ts
new file mode 100644
index 0000000..6385567
--- /dev/null
+++ b/app/lib/receipt.ts
@@ -0,0 +1,18 @@
+import axios from "axios";
+import { envConfig } from "./config";
+
+export async function PostReceipt(usuario: string, password: string) {
+ try {
+ const response = await axios.post(`${envConfig.apiUrl}/operations`, {
+ usuario,
+ password,
+ });
+ return response.data;
+ } catch (error: any) {
+ const msg =
+ error.response?.data?.message ||
+ error.message ||
+ "Error desconocido en el guardado del Recibo";
+ return { error: msg };
+ }
+}
diff --git a/package-lock.json b/package-lock.json
index 5128bf1..b03311e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,12 +9,14 @@
"version": "0.1.0",
"dependencies": {
"axios": "^1.11.0",
+ "js-cookie": "^3.0.5",
"next": "^15.5.3",
"react": "19.1.0",
"react-dom": "19.1.0",
"react-icons": "^5.5.0"
},
"devDependencies": {
+ "@types/js-cookie": "^3.0.6",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
@@ -592,6 +594,13 @@
"tslib": "^2.8.0"
}
},
+ "node_modules/@types/js-cookie": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz",
+ "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/node": {
"version": "20.19.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.11.tgz",
@@ -960,6 +969,15 @@
"license": "MIT",
"optional": true
},
+ "node_modules/js-cookie": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
+ "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
diff --git a/package.json b/package.json
index 45a3de1..4c53cc4 100644
--- a/package.json
+++ b/package.json
@@ -10,12 +10,14 @@
},
"dependencies": {
"axios": "^1.11.0",
+ "js-cookie": "^3.0.5",
"next": "^15.5.3",
"react": "19.1.0",
"react-dom": "19.1.0",
"react-icons": "^5.5.0"
},
"devDependencies": {
+ "@types/js-cookie": "^3.0.6",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",