made add parent company details and upload supporting documents

This commit is contained in:
2025-11-13 17:48:09 +05:30
parent 72f9e26ca6
commit 3ac0a591df
10 changed files with 342 additions and 149 deletions

View File

@@ -1,6 +1,6 @@
import { z } from "zod";
// Allowed document types (must match your DocumentType master table IDs)
// REQUIRED_DOC_TYPES (use your mapping)
export const REQUIRED_DOC_TYPES = {
GST: 1,
PAN: 2,
@@ -8,6 +8,44 @@ export const REQUIRED_DOC_TYPES = {
AADHAAR: 4,
};
export const parentCompanySchema = z.object({
companyName: z.string().min(1, "Parent company name is required"),
address1: z.string().min(1, "Address1 is required"),
address2: z.string().optional(),
// Parent companies DO NOT need this
hostRefNumber: z.string().optional(),
cityXid: z.number().min(1, "City is required"),
stateXid: z.number().min(1, "State is required"),
countryXid: z.number().min(1, "Country is required"),
pinCode: z.string().min(4, "Pincode/Zipcode is required"),
logoPath: z.string().optional(),
// Parent companies do NOT need this
isSubsidairy: z.boolean().optional(),
registrationNumber: z.string().min(1, "Registration number is required"),
panNumber: z.string().min(1, "PAN number is required"),
gstNumber: z.string().optional(),
formationDate: z.string().refine((val) => !isNaN(Date.parse(val)), {
message: "Formation date must be a valid date",
}),
companyType: z.string().min(1, "Company type is required"),
websiteUrl: z.string().url().optional(),
instagramUrl: z.string().url().optional(),
facebookUrl: z.string().url().optional(),
linkedinUrl: z.string().url().optional(),
twitterUrl: z.string().url().optional(),
currencyXid: z.number().min(1, "Currency is required"),
});
export const hostCompanyDetailsSchema = z.object({
companyName: z.string().min(1, "Company name is required"),
address1: z.string().min(1, "Address1 is required"),
@@ -26,20 +64,23 @@ export const hostCompanyDetailsSchema = z.object({
message: "Formation date must be a valid date",
}),
companyType: z.string().min(1, "Company type is required"),
websiteUrl: z.url().optional(),
instagramUrl: z.url().optional(),
facebookUrl: z.url().optional(),
linkedinUrl: z.url().optional(),
twitterUrl: z.url().optional(),
websiteUrl: z.string().url().optional(),
instagramUrl: z.string().url().optional(),
facebookUrl: z.string().url().optional(),
linkedinUrl: z.string().url().optional(),
twitterUrl: z.string().url().optional(),
currencyXid: z.number().min(1, "Currency is required"),
// Parent company nested when this is subsidiary
parentCompany: parentCompanySchema.optional(),
});
// Validation for documents with file data (base64)
// Documents schema: added optional owner
export const hostDocumentsSchema = z.array(
z.object({
documentTypeXid: z.number(),
documentName: z.string(),
fileData: z.string().min(1, "File data is required"), // base64 encoded file
contentType: z.string().optional(), // e.g., "application/pdf", "image/png"
fieldName: z.string(), // metadata must include the fieldName so we can map files
owner: z.enum(['host', 'parent']).optional(), // optional, default to host
})
);