Validace čísla účtu, stylování dialogu

This commit is contained in:
Martin Berka 2023-06-16 20:02:56 +02:00
parent d0cf7d1e8e
commit b2c8b312c3

View File

@ -19,8 +19,58 @@ export default function Header() {
setModalOpen(false); setModalOpen(false);
} }
const isValidInteger = (str) => {
str = str.trim();
if (!str) {
return false;
}
str = str.replace(/^0+/, "") || "0";
const n = Math.floor(Number(str));
return n !== Infinity && String(n) === str && n >= 0;
}
const save = () => { const save = () => {
// TODO validace na modulo 11 if (bankAccountRef.current?.value) {
try {
// Validace kódu banky
if (bankAccountRef.current?.value.indexOf('/') < 0) {
throw Error("Číslo účtu neobsahuje lomítko/kód banky")
}
const split = bankAccountRef.current?.value.split("/");
if (split[1].length !== 4) {
throw Error("Kód banky musí být 4 číslice")
}
if (!isValidInteger(split[1])) {
throw Error("Kód banky není číslo")
}
// Validace čísla a předčíslí
let cislo = split[0];
if (cislo.indexOf('-') > 0) {
cislo = cislo.replace('-', '');
}
if (!isValidInteger(cislo)) {
throw Error("Předčíslí nebo číslo účtu neobsahuje pouze číslice")
}
if (cislo.length < 16) {
cislo = cislo.padStart(16, '0');
}
let sum = 0;
for (var i = 0; i < cislo.length; i++) {
const char = cislo.charAt(i);
const order = (cislo.length - 1) - i;
const weight = (2 ** order) % 11;
sum += Number.parseInt(char) * weight
}
if (sum % 11 != 0) {
throw Error("Číslo účtu je neplatné")
}
} catch (e) {
alert(e.message)
return
}
}
bank?.setBankAccountNumber(bankAccountRef.current?.value); bank?.setBankAccountNumber(bankAccountRef.current?.value);
bank?.setBankAccountHolderName(nameRef.current?.value); bank?.setBankAccountHolderName(nameRef.current?.value);
closeModal(); closeModal();
@ -37,14 +87,14 @@ export default function Header() {
</NavDropdown> </NavDropdown>
</Nav> </Nav>
</Navbar.Collapse> </Navbar.Collapse>
<Modal show={modalOpen} onHide={closeModal}> <Modal show={modalOpen} onHide={closeModal} size="lg">
<Modal.Header closeButton> <Modal.Header closeButton>
<Modal.Title>Bankovní účet</Modal.Title> <Modal.Title>Bankovní účet</Modal.Title>
</Modal.Header> </Modal.Header>
<Modal.Body> <Modal.Body>
<p>Nastavením čísla účtu umožníte automatické generování QR kódů pro úhradu za vámi provedené objednávky v rámci Pizza day.<br />Pokud vaše číslo účtu neobsahuje předčíslí, je možné ho zcela vynechat.<br /><br />Poznámka: Číslo účtu není aktuálně nijak validováno. Ověřte si jeho správnost.</p> <p>Nastavením čísla účtu umožníte automatické generování QR kódů pro úhradu za vámi provedené objednávky v rámci Pizza day.<br />Pokud vaše číslo účtu neobsahuje předčíslí, je možné ho zcela vynechat.<br /><br />Číslo účtu není ukládáno na serveru, posílá se na něj pouze za účelem vygenerování QR kódů.</p>
Číslo účtu: <input ref={bankAccountRef} type="text" placeholder="123456-1234567890/1234" /> <br /> Číslo účtu: <input className="mb-3" ref={bankAccountRef} type="text" placeholder="123456-1234567890/1234" defaultValue={bank?.bankAccount} /> <br />
Název příjemce (nepovinné): <input ref={nameRef} type="text" placeholder="Jan Novák" /> Název příjemce (jméno majitele účtu): <input ref={nameRef} type="text" placeholder="Jan Novák" defaultValue={bank?.holderName} />
</Modal.Body> </Modal.Body>
<Modal.Footer> <Modal.Footer>
<Button variant="secondary" onClick={closeModal}> <Button variant="secondary" onClick={closeModal}>