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;
|
chiaveConsegna: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
function todayIso(): string {
|
|
||||||
return new Date().toISOString().slice(0, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
const emptyForm = (): ConsegnaFormState => ({
|
const emptyForm = (): ConsegnaFormState => ({
|
||||||
clienteId: "",
|
clienteId: "",
|
||||||
dataRitiro: todayIso(),
|
dataRitiro: "",
|
||||||
dataConsegna: todayIso(),
|
dataConsegna: "",
|
||||||
stato: "in deposito",
|
stato: "in deposito",
|
||||||
chiaveConsegna: "",
|
chiaveConsegna: "",
|
||||||
});
|
});
|
||||||
|
|
@ -66,14 +62,15 @@ const emptyForm = (): ConsegnaFormState => ({
|
||||||
function toFormState(consegna: Consegna): ConsegnaFormState {
|
function toFormState(consegna: Consegna): ConsegnaFormState {
|
||||||
return {
|
return {
|
||||||
clienteId: String(consegna.clienteId),
|
clienteId: String(consegna.clienteId),
|
||||||
dataRitiro: consegna.dataRitiro,
|
dataRitiro: consegna.dataRitiro ?? "",
|
||||||
dataConsegna: consegna.dataConsegna,
|
dataConsegna: consegna.dataConsegna ?? "",
|
||||||
stato: consegna.stato,
|
stato: consegna.stato,
|
||||||
chiaveConsegna: consegna.chiaveConsegna,
|
chiaveConsegna: consegna.chiaveConsegna,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatDate(value: string): string {
|
function formatDate(value: string | null): string {
|
||||||
|
if (!value) return "—";
|
||||||
const [y, m, d] = value.split("-");
|
const [y, m, d] = value.split("-");
|
||||||
return `${d}/${m}/${y}`;
|
return `${d}/${m}/${y}`;
|
||||||
}
|
}
|
||||||
|
|
@ -306,6 +303,9 @@ export default function ConsegnePage() {
|
||||||
/>
|
/>
|
||||||
</FormField>
|
</FormField>
|
||||||
</div>
|
</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}>
|
<FormField id="stato" label="Stato" error={fieldErrors.stato}>
|
||||||
<Select
|
<Select
|
||||||
value={form.stato}
|
value={form.stato}
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@ export type StatoConsegna =
|
||||||
|
|
||||||
export interface Consegna {
|
export interface Consegna {
|
||||||
id: number;
|
id: number;
|
||||||
dataRitiro: string;
|
dataRitiro: string | null;
|
||||||
dataConsegna: string;
|
dataConsegna: string | null;
|
||||||
stato: StatoConsegna;
|
stato: StatoConsegna;
|
||||||
chiaveConsegna: string;
|
chiaveConsegna: string;
|
||||||
clienteId: number;
|
clienteId: number;
|
||||||
|
|
@ -61,8 +61,8 @@ export interface UtenteAdminFormInput {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface VerificaConsegna {
|
export interface VerificaConsegna {
|
||||||
dataRitiro: string;
|
dataRitiro: string | null;
|
||||||
dataConsegna: string;
|
dataConsegna: string | null;
|
||||||
stato: StatoConsegna;
|
stato: StatoConsegna;
|
||||||
clienteNome: string;
|
clienteNome: string;
|
||||||
clienteCognome: string;
|
clienteCognome: string;
|
||||||
|
|
|
||||||
|
|
@ -16,13 +16,18 @@ export type StatoConsegna =
|
||||||
(typeof CONSEGNA_CONSTRAINTS.stato.allowedValues)[number];
|
(typeof CONSEGNA_CONSTRAINTS.stato.allowedValues)[number];
|
||||||
|
|
||||||
export interface ConsegnaInput {
|
export interface ConsegnaInput {
|
||||||
dataRitiro: string;
|
dataRitiro: string | null;
|
||||||
dataConsegna: string;
|
dataConsegna: string | null;
|
||||||
stato: StatoConsegna;
|
stato: StatoConsegna;
|
||||||
chiaveConsegna: string;
|
chiaveConsegna: string;
|
||||||
clienteId: number;
|
clienteId: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeOptionalDate(value: unknown): string | null {
|
||||||
|
const str = normalizeString(value);
|
||||||
|
return str || null;
|
||||||
|
}
|
||||||
|
|
||||||
function todayAtMidnight(): Date {
|
function todayAtMidnight(): Date {
|
||||||
const today = new Date();
|
const today = new Date();
|
||||||
today.setHours(0, 0, 0, 0);
|
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 {
|
export function normalizeConsegnaInput(raw: Record<string, unknown>): ConsegnaInput {
|
||||||
return {
|
return {
|
||||||
dataRitiro: normalizeString(raw.dataRitiro),
|
dataRitiro: normalizeOptionalDate(raw.dataRitiro),
|
||||||
dataConsegna: normalizeString(raw.dataConsegna),
|
dataConsegna: normalizeOptionalDate(raw.dataConsegna),
|
||||||
stato: normalizeString(raw.stato || "in deposito") as StatoConsegna,
|
stato: normalizeString(raw.stato || "in deposito") as StatoConsegna,
|
||||||
chiaveConsegna: normalizeString(raw.chiaveConsegna).toUpperCase(),
|
chiaveConsegna: normalizeString(raw.chiaveConsegna).toUpperCase(),
|
||||||
clienteId: normalizePositiveInt(raw.clienteId),
|
clienteId: normalizePositiveInt(raw.clienteId),
|
||||||
|
|
@ -60,20 +86,17 @@ function validateConsegnaFields(
|
||||||
options: { requireAll: boolean }
|
options: { requireAll: boolean }
|
||||||
): void {
|
): void {
|
||||||
if (options.requireAll || "dataRitiro" in raw) {
|
if (options.requireAll || "dataRitiro" in raw) {
|
||||||
validateRequired(errors, "dataRitiro", data.dataRitiro, "Data ritiro obbligatoria");
|
validateOptionalDateField(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
||||||
validateDate(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
|
||||||
validateDateNotRetroactive(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.requireAll || "dataConsegna" in raw) {
|
if (options.requireAll || "dataConsegna" in raw) {
|
||||||
validateRequired(
|
validateOptionalDateField(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
||||||
errors,
|
}
|
||||||
"dataConsegna",
|
|
||||||
data.dataConsegna,
|
if (options.requireAll) {
|
||||||
"Data consegna obbligatoria"
|
validateAtLeastOneDate(errors, data.dataRitiro, data.dataConsegna);
|
||||||
);
|
} else if ("dataRitiro" in raw && "dataConsegna" in raw) {
|
||||||
validateDate(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
validateAtLeastOneDate(errors, data.dataRitiro, data.dataConsegna);
|
||||||
validateDateNotRetroactive(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.requireAll || "stato" in raw) {
|
if (options.requireAll || "stato" in raw) {
|
||||||
|
|
@ -124,22 +147,17 @@ export function validateConsegnaUpdate(
|
||||||
const data: Partial<ConsegnaInput> = {};
|
const data: Partial<ConsegnaInput> = {};
|
||||||
|
|
||||||
if ("dataRitiro" in raw) {
|
if ("dataRitiro" in raw) {
|
||||||
data.dataRitiro = normalizeString(raw.dataRitiro);
|
data.dataRitiro = normalizeOptionalDate(raw.dataRitiro);
|
||||||
validateRequired(errors, "dataRitiro", data.dataRitiro, "Data ritiro obbligatoria");
|
validateOptionalDateField(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
||||||
validateDate(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
|
||||||
validateDateNotRetroactive(errors, "dataRitiro", data.dataRitiro, "Data ritiro");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("dataConsegna" in raw) {
|
if ("dataConsegna" in raw) {
|
||||||
data.dataConsegna = normalizeString(raw.dataConsegna);
|
data.dataConsegna = normalizeOptionalDate(raw.dataConsegna);
|
||||||
validateRequired(
|
validateOptionalDateField(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
||||||
errors,
|
}
|
||||||
"dataConsegna",
|
|
||||||
data.dataConsegna,
|
if ("dataRitiro" in raw && "dataConsegna" in raw) {
|
||||||
"Data consegna obbligatoria"
|
validateAtLeastOneDate(errors, data.dataRitiro ?? null, data.dataConsegna ?? null);
|
||||||
);
|
|
||||||
validateDate(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
|
||||||
validateDateNotRetroactive(errors, "dataConsegna", data.dataConsegna, "Data consegna");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("stato" in raw) {
|
if ("stato" in raw) {
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@ export const CLIENTE_CONSTRAINTS = {
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const CONSEGNA_CONSTRAINTS = {
|
export const CONSEGNA_CONSTRAINTS = {
|
||||||
dataconsegna: { required: true },
|
dataRitiro: { required: false },
|
||||||
dataritiro: { required: true },
|
dataConsegna: { required: false },
|
||||||
stato: {
|
stato: {
|
||||||
allowedValues: ["da ritirare", "in consegna", "in giacenza", "in deposito"],
|
allowedValues: ["da ritirare", "in consegna", "in giacenza", "in deposito"],
|
||||||
required: true,
|
required: true,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue