modifiche a required di dataRitiro e dataConsegna
This commit is contained in:
parent
1f11e497b2
commit
5be48695d1
4 changed files with 61 additions and 43 deletions
|
|
@ -51,14 +51,10 @@ type ConsegnaFormState = {
|
|||
chiaveConsegna: string;
|
||||
};
|
||||
|
||||
function todayIso(): string {
|
||||
return new Date().toISOString().slice(0, 10);
|
||||
}
|
||||
|
||||
const emptyForm = (): ConsegnaFormState => ({
|
||||
clienteId: "",
|
||||
dataRitiro: todayIso(),
|
||||
dataConsegna: todayIso(),
|
||||
dataRitiro: "",
|
||||
dataConsegna: "",
|
||||
stato: "in deposito",
|
||||
chiaveConsegna: "",
|
||||
});
|
||||
|
|
@ -66,14 +62,15 @@ const emptyForm = (): ConsegnaFormState => ({
|
|||
function toFormState(consegna: Consegna): ConsegnaFormState {
|
||||
return {
|
||||
clienteId: String(consegna.clienteId),
|
||||
dataRitiro: consegna.dataRitiro,
|
||||
dataConsegna: consegna.dataConsegna,
|
||||
dataRitiro: consegna.dataRitiro ?? "",
|
||||
dataConsegna: consegna.dataConsegna ?? "",
|
||||
stato: consegna.stato,
|
||||
chiaveConsegna: consegna.chiaveConsegna,
|
||||
};
|
||||
}
|
||||
|
||||
function formatDate(value: string): string {
|
||||
function formatDate(value: string | null): string {
|
||||
if (!value) return "—";
|
||||
const [y, m, d] = value.split("-");
|
||||
return `${d}/${m}/${y}`;
|
||||
}
|
||||
|
|
@ -306,6 +303,9 @@ export default function ConsegnePage() {
|
|||
/>
|
||||
</FormField>
|
||||
</div>
|
||||
<p className="text-xs text-muted-foreground -mt-2">
|
||||
Almeno una delle due date è obbligatoria.
|
||||
</p>
|
||||
<FormField id="stato" label="Stato" error={fieldErrors.stato}>
|
||||
<Select
|
||||
value={form.stato}
|
||||
|
|
|
|||
|
|
@ -30,8 +30,8 @@ export type StatoConsegna =
|
|||
|
||||
export interface Consegna {
|
||||
id: number;
|
||||
dataRitiro: string;
|
||||
dataConsegna: string;
|
||||
dataRitiro: string | null;
|
||||
dataConsegna: string | null;
|
||||
stato: StatoConsegna;
|
||||
chiaveConsegna: string;
|
||||
clienteId: number;
|
||||
|
|
@ -61,8 +61,8 @@ export interface UtenteAdminFormInput {
|
|||
}
|
||||
|
||||
export interface VerificaConsegna {
|
||||
dataRitiro: string;
|
||||
dataConsegna: string;
|
||||
dataRitiro: string | null;
|
||||
dataConsegna: string | null;
|
||||
stato: StatoConsegna;
|
||||
clienteNome: string;
|
||||
clienteCognome: string;
|
||||
|
|
|
|||
|
|
@ -16,13 +16,18 @@ export type StatoConsegna =
|
|||
(typeof CONSEGNA_CONSTRAINTS.stato.allowedValues)[number];
|
||||
|
||||
export interface ConsegnaInput {
|
||||
dataRitiro: string;
|
||||
dataConsegna: string;
|
||||
dataRitiro: string | null;
|
||||
dataConsegna: string | null;
|
||||
stato: StatoConsegna;
|
||||
chiaveConsegna: string;
|
||||
clienteId: number;
|
||||
}
|
||||
|
||||
function normalizeOptionalDate(value: unknown): string | null {
|
||||
const str = normalizeString(value);
|
||||
return str || null;
|
||||
}
|
||||
|
||||
function todayAtMidnight(): Date {
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
|
|
@ -43,10 +48,31 @@ function validateDateNotRetroactive(
|
|||
}
|
||||
}
|
||||
|
||||
function validateOptionalDateField(
|
||||
errors: FieldErrors,
|
||||
field: string,
|
||||
value: string | null,
|
||||
label: string
|
||||
): void {
|
||||
if (!value) return;
|
||||
validateDate(errors, field, value, label);
|
||||
validateDateNotRetroactive(errors, field, value, label);
|
||||
}
|
||||
|
||||
function validateAtLeastOneDate(
|
||||
errors: FieldErrors,
|
||||
dataRitiro: string | null,
|
||||
dataConsegna: string | null
|
||||
): void {
|
||||
if (!dataRitiro && !dataConsegna) {
|
||||
errors._form = "Inserire almeno una data di ritiro o di consegna";
|
||||
}
|
||||
}
|
||||
|
||||
export function normalizeConsegnaInput(raw: Record<string, unknown>): ConsegnaInput {
|
||||
return {
|
||||
dataRitiro: normalizeString(raw.dataRitiro),
|
||||
dataConsegna: normalizeString(raw.dataConsegna),
|
||||
dataRitiro: normalizeOptionalDate(raw.dataRitiro),
|
||||
dataConsegna: normalizeOptionalDate(raw.dataConsegna),
|
||||
stato: normalizeString(raw.stato || "in deposito") as StatoConsegna,
|
||||
chiaveConsegna: normalizeString(raw.chiaveConsegna).toUpperCase(),
|
||||
clienteId: normalizePositiveInt(raw.clienteId),
|
||||
|
|
@ -60,20 +86,17 @@ function validateConsegnaFields(
|
|||
options: { requireAll: boolean }
|
||||
): void {
|
||||
if (options.requireAll || "dataRitiro" in raw) {
|
||||
validateRequired(errors, "dataRitiro", data.dataRitiro, "Data ritiro obbligatoria");
|
||||
validateDate(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
||||
validateDateNotRetroactive(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
||||
validateOptionalDateField(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
||||
}
|
||||
|
||||
if (options.requireAll || "dataConsegna" in raw) {
|
||||
validateRequired(
|
||||
errors,
|
||||
"dataConsegna",
|
||||
data.dataConsegna,
|
||||
"Data consegna obbligatoria"
|
||||
);
|
||||
validateDate(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
||||
validateDateNotRetroactive(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
||||
validateOptionalDateField(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
||||
}
|
||||
|
||||
if (options.requireAll) {
|
||||
validateAtLeastOneDate(errors, data.dataRitiro, data.dataConsegna);
|
||||
} else if ("dataRitiro" in raw && "dataConsegna" in raw) {
|
||||
validateAtLeastOneDate(errors, data.dataRitiro, data.dataConsegna);
|
||||
}
|
||||
|
||||
if (options.requireAll || "stato" in raw) {
|
||||
|
|
@ -124,22 +147,17 @@ export function validateConsegnaUpdate(
|
|||
const data: Partial<ConsegnaInput> = {};
|
||||
|
||||
if ("dataRitiro" in raw) {
|
||||
data.dataRitiro = normalizeString(raw.dataRitiro);
|
||||
validateRequired(errors, "dataRitiro", data.dataRitiro, "Data ritiro obbligatoria");
|
||||
validateDate(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
||||
validateDateNotRetroactive(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
||||
data.dataRitiro = normalizeOptionalDate(raw.dataRitiro);
|
||||
validateOptionalDateField(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
||||
}
|
||||
|
||||
if ("dataConsegna" in raw) {
|
||||
data.dataConsegna = normalizeString(raw.dataConsegna);
|
||||
validateRequired(
|
||||
errors,
|
||||
"dataConsegna",
|
||||
data.dataConsegna,
|
||||
"Data consegna obbligatoria"
|
||||
);
|
||||
validateDate(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
||||
validateDateNotRetroactive(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
||||
data.dataConsegna = normalizeOptionalDate(raw.dataConsegna);
|
||||
validateOptionalDateField(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
||||
}
|
||||
|
||||
if ("dataRitiro" in raw && "dataConsegna" in raw) {
|
||||
validateAtLeastOneDate(errors, data.dataRitiro ?? null, data.dataConsegna ?? null);
|
||||
}
|
||||
|
||||
if ("stato" in raw) {
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ export const CLIENTE_CONSTRAINTS = {
|
|||
} as const;
|
||||
|
||||
export const CONSEGNA_CONSTRAINTS = {
|
||||
dataconsegna: { required: true },
|
||||
dataritiro: { required: true },
|
||||
dataRitiro: { required: false },
|
||||
dataConsegna: { required: false },
|
||||
stato: {
|
||||
allowedValues: ["da ritirare", "in consegna", "in giacenza", "in deposito"],
|
||||
required: true,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue