diff options
| author | Miqdad <ahmadmiqdad27@gmail.com> | 2025-08-11 16:32:03 +0700 |
|---|---|---|
| committer | Miqdad <ahmadmiqdad27@gmail.com> | 2025-08-11 16:32:03 +0700 |
| commit | fc837f851c89614f392e5a17cd6a2ceda3f706f3 (patch) | |
| tree | bb8c893c86a0d3b35689c349eb9cb9f5d8d455a0 /src-migrate/validations | |
| parent | 7ec561888b3123a8d9a0b062727c562c9dbec2db (diff) | |
<miqdad> more vals in confirm page
Diffstat (limited to 'src-migrate/validations')
| -rw-r--r-- | src-migrate/validations/tempo.ts | 124 |
1 files changed, 57 insertions, 67 deletions
diff --git a/src-migrate/validations/tempo.ts b/src-migrate/validations/tempo.ts index f0623b6a..38380d5a 100644 --- a/src-migrate/validations/tempo.ts +++ b/src-migrate/validations/tempo.ts @@ -13,7 +13,8 @@ export const TempoSchema = z.object({ .string() .min(1, { message: 'Nomor telepon harus diisi' }) .refine((val) => /^\d{10,12}$/.test(val), { - message: 'Format nomor telepon tidak valid, contoh: 081234567890 atau 021234567890', + message: + 'Format nomor telepon tidak valid, contoh: 081234567890 atau 021234567890', }), bankName: z.string().min(1, { message: 'Nama bank harus diisi' }), accountName: z.string().min(1, { message: 'Nama rekening harus diisi' }), @@ -69,8 +70,8 @@ export const TempoSchemaKontakPerson = z }) .refine( (data) => - !data.financeEmail || // Jika financeEmail kosong, tidak perlu validasi - data.financeEmail !== data.purchasingEmail, // Validasi jika financeEmail ada + !data.financeEmail || + data.financeEmail !== data.purchasingEmail, { message: 'Email Finance tidak boleh sama dengan Email Purchasing', path: ['financeEmail'], @@ -86,70 +87,37 @@ export const TempoSchemaKontakPerson = z 'Email Direktur tidak boleh sama dengan Email Finance atau Purchasing', path: ['direkturEmail'], } - ); -export const TempoSchemaPengiriman = z.object({ - PICTittle: z.string().min(1, { message: 'Tittle harus dipilih' }), - PICName: z.string().min(1, { message: 'Nama harus diisi' }), - streetPengiriman: z.string().min(1, { message: 'Alamat harus diisi' }), - statePengiriman: z.string().min(1, { message: 'Provinsi harus dipilih' }), - cityPengiriman: z.string().min(1, { message: 'Kota harus dipilih' }), - districtPengiriman: z.string().min(1, { message: 'Kecamatan harus dipilih' }), - subDistrictPengiriman: z.string().optional(), - zipPengiriman: z.string().min(1, { message: 'Kode pos harus diisi' }), - PICBarangMobile: z - .string() - .min(1, { message: 'Nomor telepon harus diisi' }) - .refine((val) => /^\d{10,12}$/.test(val), { - message: 'Format nomor telepon tidak valid, contoh: 081234567890 atau 021234567890', - }), - invoicePicMobile: z - .string() - .min(1, { message: 'Nomor telepon harus diisi' }) - .refine((val) => /^\d{10,12}$/.test(val), { - message: 'Format nomor telepon tidak valid, contoh: 081234567890 atau 021234567890', - }), - invoicePicTittle: z.string().min(1, { message: 'Tittle harus dipilih' }), - invoicePic: z.string().min(1, { message: 'Nama pic invoice harus diisi' }), - streetInvoice: z.string().min(1, { message: 'Alamat invoice harus diisi' }), - stateInvoice: z - .string() - .min(1, { message: 'Provinsi invoice harus dipilih' }), - cityInvoice: z.string().min(1, { message: 'Kota invoice harus dipilih' }), - districtInvoice: z - .string() - .min(1, { message: 'Kecamatan invoice harus dipilih' }), - subDistrictInvoice: z.string().optional(), - zipInvoice: z.string().min(1, { message: 'Kode pos harus diisi' }), - isSameAddrees: z.string(), - isSameAddreesStreet: z.string(), - tukarInvoiceInput: z - .string() - .min(1, { message: 'Jadwal Penukaran Invoice Harus Diisi' }), - tukarInvoiceInputPembayaran: z - .string() - .min(1, { message: 'Jadwal Pembayaran Harus Diisi' }), - dokumenPengiriman: z.string().optional(), - dokumenPengirimanInput: z.string().optional(), - dokumenKirimInput: z.string().optional(), - dokumenPengirimanInvoiceInput: z.string().optional(), - dokumenProsedur: z.object({ - name: z.string().optional(), - format: z.string().optional(), - base64: z.string().optional(), - }), -}); -export const TempoSchemaSupplier = z.object({ - supplier: z.string().min(1, { message: 'Nama supplier harus diisi' }), - pic: z.string().min(1, { message: 'Nama PIC harus diisi' }), - telepon: z - .string() - .min(1, { message: 'Nomor telepon harus diisi' }) - .refine((val) => /^\d{10,12}$/.test(val), { - message: 'Format nomor telepon tidak valid, contoh: 081234567890 atau 021234567890', - }), - durasiTempo: z.string().min(1, { message: 'Durasi tempo harus diisi' }), - creditLimit: z.string().min(1, { message: 'Limit Kredit harus diisi' }), -}); + ) + .superRefine((data, ctx) => { + const phones = [ + { key: 'direkturMobile', label: 'No. HP Direktur', value: data.direkturMobile }, + { key: 'purchasingMobile', label: 'No. HP Purchasing', value: data.purchasingMobile }, + { key: 'financeMobile', label: 'No. HP Finance', value: data.financeMobile }, + ]; + + const seen = new Map<string, { key: string; label: string }>(); + + for (const phone of phones) { + if (!phone.value) continue; + + if (!seen.has(phone.value)) { + seen.set(phone.value, { key: phone.key, label: phone.label }); + } else { + const first = seen.get(phone.value)!; + ctx.addIssue({ + code: 'custom', + path: [phone.key], + message: `${phone.label} tidak boleh sama dengan ${first.label}`, + }); + ctx.addIssue({ + code: 'custom', + path: [first.key], + message: `${first.label} tidak boleh sama dengan ${phone.label}`, + }); + } + } + }); + export const TempoSchemaDokumen = z.object({ dokumenNib: z.object({ name: z.string().min(1, { message: 'Nama file harus diisi' }), @@ -217,3 +185,25 @@ export const TempoSchemaDokumen = z.object({ base64: z.string().optional(), }), }); + +export const TempoSchemaPengiriman = z + .object({ + PICBarangMobile: z + .string() + .min(1, { message: 'Nomor telepon harus diisi' }) + .refine((val) => /^\d{10,12}$/.test(val), { + message: + 'Format nomor telepon tidak valid, contoh: 081234567890 atau 021234567890', + }), + invoicePicMobile: z + .string() + .min(1, { message: 'Nomor telepon harus diisi' }) + .refine((val) => /^\d{10,12}$/.test(val), { + message: + 'Format nomor telepon tidak valid, contoh: 081234567890 atau 021234567890', + }), + }); + // .refine((data) => data.PICBarangMobile !== data.invoicePicMobile, { + // message: 'Nomor HP PIC Barang tidak boleh sama dengan Nomor HP PIC Invoice', + // path: ['invoicePicMobile'], // error akan tampil di bawah field invoicePicMobile + // }); |
