104 lines
3.2 KiB
JavaScript
104 lines
3.2 KiB
JavaScript
import { z } from "zod";
|
|
|
|
const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
|
|
const ALLOWED_TYPES = [
|
|
"application/pdf",
|
|
"application/doc",
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
"image/png",
|
|
"image/jpg",
|
|
"image/jpeg",
|
|
"application/vnd.ms-excel",
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
];
|
|
|
|
|
|
export const newCollection = z.object({
|
|
title: z.string().trim().min(1, { message: "Title is required" }),
|
|
projectId: z.string().trim().min(1, { message: "Project is required" }),
|
|
invoiceDate: z.string().min(1, { message: "Date is required" }),
|
|
description: z.string().trim().optional(),
|
|
clientSubmitedDate: z.string().min(1, { message: "Date is required" }),
|
|
billedToId: z.string().min(1, { message: "Date is required" }),
|
|
exceptedPaymentDate: z.string().min(1, { message: "Date is required" }),
|
|
invoiceNumber: z
|
|
.string()
|
|
.trim()
|
|
.min(1, { message: "Invoice is required" })
|
|
.max(17, { message: "Invalid Number" }),
|
|
eInvoiceNumber: z
|
|
.string()
|
|
.trim()
|
|
.min(1, { message: "E-Invoice No is required" }),
|
|
taxAmount: z.coerce
|
|
.number({
|
|
invalid_type_error: "Amount is required and must be a number",
|
|
})
|
|
.min(1, "Amount must be Enter")
|
|
.refine((val) => /^\d+(\.\d{1,2})?$/.test(val.toString()), {
|
|
message: "Amount must have at most 2 decimal places",
|
|
}),
|
|
basicAmount: z.coerce
|
|
.number({
|
|
invalid_type_error: "Amount is required and must be a number",
|
|
})
|
|
.min(1, "Amount must be Enter")
|
|
.refine((val) => /^\d+(\.\d{1,2})?$/.test(val.toString()), {
|
|
message: "Amount must have at most 2 decimal places",
|
|
}),
|
|
attachments: z
|
|
.array(
|
|
z.object({
|
|
fileName: z.string().min(1, { message: "Filename is required" }),
|
|
base64Data: z.string().nullable(),
|
|
contentType: z.string().refine((val) => ALLOWED_TYPES.includes(val), {
|
|
message: "Only PDF, PNG, JPG, or JPEG files are allowed",
|
|
}),
|
|
documentId: z.string().optional(),
|
|
fileSize: z.number().max(MAX_FILE_SIZE, {
|
|
message: "File size must be less than or equal to 5MB",
|
|
}),
|
|
description: z.string().optional(),
|
|
isActive: z.boolean().default(true),
|
|
})
|
|
)
|
|
.nonempty({ message: "At least one file attachment is required" }),
|
|
});
|
|
|
|
export const defaultCollection = {
|
|
projectId: "",
|
|
invoiceNumber: " ",
|
|
eInvoiceNumber: "",
|
|
title: "",
|
|
clientSubmitedDate: null,
|
|
invoiceDate: null,
|
|
exceptedPaymentDate: null,
|
|
taxAmount: "",
|
|
basicAmount: "",
|
|
description: "",
|
|
billedToId:"",
|
|
attachments: [],
|
|
};
|
|
|
|
export const paymentSchema = z.object({
|
|
paymentReceivedDate: z.string().min(1, { message: "Date is required" }),
|
|
transactionId: z.string().min(1, "Transaction ID is required"),
|
|
amount: z.number().min(1, "Amount must be greater than zero"),
|
|
comment:z.string().min(1,{message:"Comment required"}),
|
|
paymentAdjustmentHeadId:z.string().min(1,{message:"Payment Type required"})
|
|
});
|
|
|
|
// Default Value
|
|
export const defaultPayment = {
|
|
paymentReceivedDate: null,
|
|
transactionId: "",
|
|
amount: 0,
|
|
comment:"",
|
|
paymentAdjustmentHeadId:""
|
|
};
|
|
|
|
|
|
export const CommentSchema = z.object({
|
|
comment:z.string().min(1,{message:"Comment required"})
|
|
})
|