handle proforma to base , Tax, amount condition
This commit is contained in:
parent
8dfc8e4336
commit
258bd82b54
@ -136,6 +136,8 @@ const ManagePurchase = ({ onClose, purchaseId }) => {
|
|||||||
},
|
},
|
||||||
[purchaseId, generatePatchOps, updatePurchase, CreateInvoice]
|
[purchaseId, generatePatchOps, updatePurchase, CreateInvoice]
|
||||||
);
|
);
|
||||||
|
console.log(formState.errors)
|
||||||
|
console.log(formState.formData)
|
||||||
return (
|
return (
|
||||||
<div className="bs-stepper horizontically mt-2 b-secondry shadow-none border-0">
|
<div className="bs-stepper horizontically mt-2 b-secondry shadow-none border-0">
|
||||||
{/* --- Steps Header --- */}
|
{/* --- Steps Header --- */}
|
||||||
|
|||||||
@ -202,7 +202,7 @@ const PurchasePartyDetails = () => {
|
|||||||
{...register("proformaInvoiceAmount")}
|
{...register("proformaInvoiceAmount")}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{errors?.proformaInvoiceAmountt && (
|
{errors?.proformaInvoiceAmount && (
|
||||||
<div className="danger-text">
|
<div className="danger-text">
|
||||||
{errors.proformaInvoiceAmount.message}
|
{errors.proformaInvoiceAmount.message}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -24,52 +24,124 @@ export const AttachmentSchema = z.object({
|
|||||||
documentId: z.string().nullable().default(null),
|
documentId: z.string().nullable().default(null),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const PurchaseSchema = z.object({
|
export const PurchaseSchema = z
|
||||||
title: z.string().min(1, { message: "Title is required" }),
|
.object({
|
||||||
projectId: z.string().min(1, { message: "Project is required" }),
|
title: z.string().min(1, { message: "Title is required" }),
|
||||||
organizationId: z.string().min(1, { message: "Organization is required" }),
|
projectId: z.string().min(1, { message: "Project is required" }),
|
||||||
billingAddress: z.string().min(1, { message: "Address is required" }),
|
organizationId: z.string().min(1, { message: "Organization is required" }),
|
||||||
shippingAddress: z.string().min(1, { message: "Address is required" }),
|
billingAddress: z.string().min(1, { message: "Address is required" }),
|
||||||
|
shippingAddress: z.string().min(1, { message: "Address is required" }),
|
||||||
|
|
||||||
purchaseOrderNumber: z.string().nullable(),
|
purchaseOrderNumber: z.string().nullable(),
|
||||||
purchaseOrderDate: z.coerce.date().nullable(),
|
purchaseOrderDate: z.coerce.date().nullable(),
|
||||||
|
|
||||||
supplierId: z.string().min(1, { message: "Supplier is required" }),
|
supplierId: z.string().min(1, { message: "Supplier is required" }),
|
||||||
|
|
||||||
proformaInvoiceNumber: z.string().nullable(),
|
proformaInvoiceNumber: z.string().nullable(),
|
||||||
proformaInvoiceDate: z.coerce.date().nullable(),
|
proformaInvoiceDate: z.coerce.date().nullable(),
|
||||||
proformaInvoiceAmount: z.coerce.number().optional(),
|
proformaInvoiceAmount: z.coerce.number().optional(),
|
||||||
|
|
||||||
invoiceNumber: z.string().nullable(),
|
invoiceNumber: z.string().nullable(),
|
||||||
invoiceDate: z.coerce.date().nullable(),
|
invoiceDate: z.coerce.date().nullable(),
|
||||||
eWayBillNumber: z.string().nullable(),
|
eWayBillNumber: z.string().nullable(),
|
||||||
eWayBillDate: z.coerce.date().nullable(),
|
eWayBillDate: z.coerce.date().nullable(),
|
||||||
invoiceReferenceNumber: z.string().nullable(),
|
invoiceReferenceNumber: z.string().nullable(),
|
||||||
acknowledgmentDate: z.coerce.date().nullable(),
|
acknowledgmentDate: z.coerce.date().nullable(),
|
||||||
acknowledgmentNumber: z.string().nullable(),
|
acknowledgmentNumber: z.string().nullable(),
|
||||||
|
baseAmount: z
|
||||||
|
.number()
|
||||||
|
.or(z.nan()) // allow NaN
|
||||||
|
.transform((val) => (Number.isNaN(val) ? null : val)),
|
||||||
|
|
||||||
baseAmount: z
|
taxAmount: z
|
||||||
.number()
|
.number()
|
||||||
.or(z.nan()) // allow NaN
|
.or(z.nan()) // allow NaN
|
||||||
.transform((val) => (Number.isNaN(val) ? null : val)),
|
.transform((val) => (Number.isNaN(val) ? null : val)),
|
||||||
|
totalAmount: z
|
||||||
|
.number()
|
||||||
|
.or(z.nan()) // allow NaN
|
||||||
|
.transform((val) => (Number.isNaN(val) ? null : val)),
|
||||||
|
paymentDueDate: z.coerce.date().nullable(),
|
||||||
|
transportCharges: z
|
||||||
|
.number()
|
||||||
|
.or(z.nan()) // allow NaN
|
||||||
|
.transform((val) => (Number.isNaN(val) ? null : val)),
|
||||||
|
description: z.string(),
|
||||||
|
invoiceAttachmentTypeId: z.string().nullable(),
|
||||||
|
attachments: z.array(AttachmentSchema),
|
||||||
|
})
|
||||||
|
.superRefine((data, ctx) => {
|
||||||
|
const hasNumber = !!data.proformaInvoiceNumber;
|
||||||
|
const hasAmount =
|
||||||
|
data.proformaInvoiceAmount !== null && data.proformaInvoiceAmount > 0;
|
||||||
|
const hasDate = !!data.proformaInvoiceDate;
|
||||||
|
|
||||||
taxAmount: z
|
// If any one field is filled → all must be valid
|
||||||
.number()
|
const anyField = hasNumber || hasAmount || hasDate;
|
||||||
.or(z.nan()) // allow NaN
|
|
||||||
.transform((val) => (Number.isNaN(val) ? null : val)),
|
if (anyField) {
|
||||||
totalAmount: z
|
// Number required
|
||||||
.number()
|
if (!hasNumber) {
|
||||||
.or(z.nan()) // allow NaN
|
ctx.addIssue({
|
||||||
.transform((val) => (Number.isNaN(val) ? null : val)),
|
code: z.ZodIssueCode.custom,
|
||||||
paymentDueDate: z.coerce.date().nullable(),
|
message: "Proforma Invoice Number is required.",
|
||||||
transportCharges: z
|
path: ["proformaInvoiceNumber"],
|
||||||
.number()
|
});
|
||||||
.or(z.nan()) // allow NaN
|
}
|
||||||
.transform((val) => (Number.isNaN(val) ? null : val)),
|
|
||||||
description: z.string(),
|
// Amount required
|
||||||
invoiceAttachmentTypeId: z.string().nullable(),
|
if (!hasAmount) {
|
||||||
attachments: z.array(AttachmentSchema),
|
ctx.addIssue({
|
||||||
});
|
code: z.ZodIssueCode.custom,
|
||||||
|
message: "Proforma Amount must be greater than 0.",
|
||||||
|
path: ["proformaInvoiceAmount"],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Date required
|
||||||
|
if (!hasDate) {
|
||||||
|
ctx.addIssue({
|
||||||
|
code: z.ZodIssueCode.custom,
|
||||||
|
message: "Proforma Invoice Date is required.",
|
||||||
|
path: ["proformaInvoiceDate"],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!anyField) {
|
||||||
|
if (data.baseAmount === null || data.baseAmount === 0) {
|
||||||
|
ctx.addIssue({
|
||||||
|
code: z.ZodIssueCode.custom,
|
||||||
|
message: "Base amount is required.",
|
||||||
|
path: ["baseAmount"],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (data.taxAmount === null || data.taxAmount === 0) {
|
||||||
|
ctx.addIssue({
|
||||||
|
code: z.ZodIssueCode.custom,
|
||||||
|
message: "Tax amount is required.",
|
||||||
|
path: ["taxAmount"],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.totalAmount === null || data.totalAmount === 0) {
|
||||||
|
ctx.addIssue({
|
||||||
|
code: z.ZodIssueCode.custom,
|
||||||
|
message: "Total amount is required.",
|
||||||
|
path: ["totalAmount"],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.transportCharges === null || data.transportCharges === 0) {
|
||||||
|
ctx.addIssue({
|
||||||
|
code: z.ZodIssueCode.custom,
|
||||||
|
message: "Transport charges are required.",
|
||||||
|
path: ["transportCharges"],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
export const defaultPurchaseValue = {
|
export const defaultPurchaseValue = {
|
||||||
title: "",
|
title: "",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user