Files
front-AT/app/Components/Impressions/impressions.tsx
T

136 lines
3.2 KiB
TypeScript
Raw Normal View History

2025-09-17 16:47:19 -06:00
"use client";
2025-09-03 20:41:25 -04:00
2025-09-22 11:57:52 -06:00
import Cookies from "js-cookie";
2025-09-02 19:50:17 -04:00
import { useState } from "react";
2025-09-29 22:48:06 -06:00
import { useRouter } from "next/navigation";
2025-09-19 17:20:05 -06:00
import { PostImpressions } from "@/app/lib/postImpressions";
2025-10-01 15:29:23 -06:00
import toast from "react-hot-toast";
2026-02-11 15:09:45 -05:00
import Swal from "sweetalert2";
2025-09-19 17:20:05 -06:00
interface CostOption {
value: number;
}
interface ImpressionsProps {
costs: CostOption[];
2025-09-22 12:15:32 -04:00
numAcount: number | null;
2026-01-23 12:35:35 -06:00
id_servicio: number;
}
2025-09-19 17:20:05 -06:00
2026-01-23 12:35:35 -06:00
function Impressions({ costs, numAcount, id_servicio }: ImpressionsProps) {
2025-09-17 16:47:19 -06:00
const [pages, setPages] = useState("");
const [cost, setCost] = useState("");
const router = useRouter();
const handleLogout = () => {
Cookies.remove("token");
Cookies.remove("session");
router.push("/Login");
};
const handlePayment = async () => {
2025-09-22 12:15:32 -04:00
if (!numAcount) {
2025-10-01 15:29:23 -06:00
toast.error("busca de nuevo al estudiante");
return;
2025-09-17 16:47:19 -06:00
}
if (!pages) {
2025-10-01 15:29:23 -06:00
toast.error("Ingresa el numero de hojas a imprimir");
return;
2025-09-17 16:47:19 -06:00
}
2025-09-17 19:42:13 -06:00
if (!cost) {
2025-10-01 15:29:23 -06:00
toast.error("Selecciona un costo");
return;
2025-09-17 16:47:19 -06:00
}
2025-09-19 17:20:05 -06:00
const result = await PostImpressions({
2025-09-22 11:57:52 -06:00
id_cuenta: numAcount,
numero_hojas: parseInt(pages),
2025-09-19 17:20:05 -06:00
monto: parseInt(cost) * parseInt(pages),
2026-01-23 12:35:35 -06:00
id_servicio,
2025-09-19 17:20:05 -06:00
});
2026-01-28 17:04:29 -06:00
if (result?.error) {
if (result.message === "Token inválido") {
handleLogout();
} else {
toast.error(result.message);
2025-09-22 11:57:52 -06:00
}
2025-09-17 16:47:19 -06:00
return;
}
2025-09-19 17:20:05 -06:00
setPages("");
2025-09-22 11:57:52 -06:00
setCost("");
2025-10-01 15:29:23 -06:00
toast.success("Impresion cobrada correctamente");
2026-02-11 15:09:45 -05:00
Swal.fire({
title: "Cobro exitoso!",
icon: "success",
draggable: true
});
2025-10-03 17:29:53 -06:00
router.refresh();
2025-09-17 16:47:19 -06:00
};
return (
<form
onSubmit={(e) => {
e.preventDefault();
handlePayment();
}}
>
<div className="gap">
<div className="groupInput">
<label className="label">Costo:</label>
<select value={cost} onChange={(e) => setCost(e.target.value)}>
2025-09-24 17:51:54 -06:00
<option value="">Selecciona el costo</option>
2025-09-17 16:47:19 -06:00
{costs.map((c) => (
<option key={c.value} value={c.value}>
${c.value}
</option>
))}
</select>
</div>
<div className="groupInput">
<label className="label">Hojas:</label>
<input
type="text"
value={pages}
onChange={(e) => {
const value = e.target.value;
if (/^\d*$/.test(value)) {
setPages(value);
}
}}
placeholder="Numero de hojas a imprimir..."
inputMode="numeric"
pattern="[0-9]*"
/>
</div>
2026-01-23 12:35:35 -06:00
<div
className="groupInput"
style={{ height: "35px", flexWrap: "nowrap" }}
>
2025-09-29 15:37:56 -06:00
<label className="label">Total:</label>
<label
style={{ width: "100%", minWidth: "200px", maxWidth: "500px" }}
>
{pages && cost && `$${parseInt(cost) * parseInt(pages)}.00`}
2025-09-22 11:57:52 -06:00
</label>
2025-09-17 16:47:19 -06:00
</div>
<div className="containerButton">
<button className="button buttonCharge" type="submit">
Cobrar
</button>
</div>
</div>
</form>
);
2025-09-02 19:50:17 -04:00
}
2025-09-17 16:47:19 -06:00
export default Impressions;
//IO