Validace čísla účtu, stylování dialogu
This commit is contained in:
parent
d0cf7d1e8e
commit
b2c8b312c3
@ -19,8 +19,58 @@ export default function Header() {
|
||||
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 = () => {
|
||||
// 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?.setBankAccountHolderName(nameRef.current?.value);
|
||||
closeModal();
|
||||
@ -37,14 +87,14 @@ export default function Header() {
|
||||
</NavDropdown>
|
||||
</Nav>
|
||||
</Navbar.Collapse>
|
||||
<Modal show={modalOpen} onHide={closeModal}>
|
||||
<Modal show={modalOpen} onHide={closeModal} size="lg">
|
||||
<Modal.Header closeButton>
|
||||
<Modal.Title>Bankovní účet</Modal.Title>
|
||||
</Modal.Header>
|
||||
<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>
|
||||
Číslo účtu: <input ref={bankAccountRef} type="text" placeholder="123456-1234567890/1234" /> <br />
|
||||
Název příjemce (nepovinné): <input ref={nameRef} type="text" placeholder="Jan Novák" />
|
||||
<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 className="mb-3" ref={bankAccountRef} type="text" placeholder="123456-1234567890/1234" defaultValue={bank?.bankAccount} /> <br />
|
||||
Název příjemce (jméno majitele účtu): <input ref={nameRef} type="text" placeholder="Jan Novák" defaultValue={bank?.holderName} />
|
||||
</Modal.Body>
|
||||
<Modal.Footer>
|
||||
<Button variant="secondary" onClick={closeModal}>
|
||||
|
Loading…
x
Reference in New Issue
Block a user