Files
Regisflow/client/src/lib/validation.ts
T
michaelschal 42b249e5b0 Improve form validation and guide users to fill out all the required fields
Updates form validation logic to allow zero quantity and adds quantity placeholder.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 91318273-c764-4fd4-be04-bdc12c38af32
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0715008c-7244-40f4-befc-26c014852236/36c2c7b9-873e-432e-9d49-6ced2f07df49.jpg
2025-07-09 18:28:20 +00:00

63 lines
2.1 KiB
TypeScript

export function validateEAN13(code: string): boolean {
if (!code || code.length !== 13) return false;
if (!/^\d{13}$/.test(code)) return false;
// Calculate checksum
let sum = 0;
for (let i = 0; i < 12; i++) {
const digit = parseInt(code[i]);
sum += i % 2 === 0 ? digit : digit * 3;
}
const checksum = (10 - (sum % 10)) % 10;
return checksum === parseInt(code[12]);
}
export function validateRequiredFields(formData: any): string[] {
const requiredFields = [
{ key: 'vendeur', label: 'Vendeur' },
{ key: 'typeArticle', label: 'Type d\'article' },
{ key: 'categorie', label: 'Catégorie' },
{ key: 'quantite', label: 'Quantité' },
{ key: 'gencode', label: 'Gencode' },
{ key: 'nom', label: 'Nom' },
{ key: 'prenom', label: 'Prénom' },
{ key: 'dateNaissance', label: 'Date de naissance' },
{ key: 'typeIdentite', label: 'Type de pièce d\'identité' },
{ key: 'numeroIdentite', label: 'Numéro de pièce d\'identité' },
{ key: 'autoriteDelivrance', label: 'Autorité de délivrance' },
{ key: 'dateDelivrance', label: 'Date de délivrance' }
];
return requiredFields
.filter(field => {
const value = formData[field.key];
// Pour la quantité, accepter 0 comme valeur valide
if (field.key === 'quantite') {
return value === '' || value === null || value === undefined;
}
// Pour les autres champs, vérifier si vide ou juste des espaces
return !value || value.toString().trim() === '';
})
.map(field => field.label);
}
export const ARTICLE_CATEGORY_MAPPING = {
"Pétard à mèche": ["F3"],
"Batterie": ["F3"],
"Batterie nécessitant un support externe": ["F3"],
"Combinaison": ["F3"],
"Combinaison nécessitant un support externe": ["F3"],
"Pétard aérien": ["F2", "F3"],
"Pétard à composition flash": ["F3"],
"Fusée": ["F2", "F3"],
"Chandelle romaine": ["F2", "F3"],
"Chandelle monocoup": ["F2", "F3"]
} as const;
export const IDENTITY_TYPES = [
{ value: "CNI", label: "Carte Nationale d'Identité" },
{ value: "Passeport", label: "Passeport" },
{ value: "Permis de conduire", label: "Permis de conduire" }
] as const;