diff options
| author | IT Fixcomart <it@fixcomart.co.id> | 2025-08-12 08:59:48 +0000 |
|---|---|---|
| committer | IT Fixcomart <it@fixcomart.co.id> | 2025-08-12 08:59:48 +0000 |
| commit | c33f96ba48e112d3beb3c4b63522a9c1e1840051 (patch) | |
| tree | d6cffaca2497b77a6f82c22acda95a1bac99f62c /src-migrate/validations | |
| parent | 4e5422a800b0cb3eaa4436693f10298434f11621 (diff) | |
| parent | 286f4bd39d54a13e21a3c163f92ad4138739ab1d (diff) | |
Merged in cr-tempo-val (pull request #435)
Cr tempo val
Diffstat (limited to 'src-migrate/validations')
| -rw-r--r-- | src-migrate/validations/tempo.ts | 128 |
1 files changed, 59 insertions, 69 deletions
diff --git a/src-migrate/validations/tempo.ts b/src-migrate/validations/tempo.ts index 46ac1ef1..b2239d8c 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', + 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' }), @@ -43,7 +44,7 @@ export const TempoSchemaKontakPerson = z .string() .min(1, { message: 'Nomor telepon harus diisi' }) .refine((val) => /^\d{10,12}$/.test(val), { - message: 'Format nomor telepon tidak valid, contoh: 081234567890', + message: 'Format nomor telepon tidak valid, contoh: 081234567890 atau 021234567890', }), purchasingTittle: z.string().min(1, { message: 'Tittle harus dipilih' }), financeTittle: z.string().min(1, { message: 'Tittle harus dipilih' }), @@ -51,7 +52,7 @@ export const TempoSchemaKontakPerson = z .string() .min(1, { message: 'Nomor telepon harus diisi' }) .refine((val) => /^\d{10,12}$/.test(val), { - message: 'Format nomor telepon tidak valid, contoh: 081234567890', + message: 'Format nomor telepon tidak valid, contoh: 081234567890 atau 021234567890', }), direkturEmail: z .string() @@ -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', - }), - 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', - }), - 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', - }), - 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', 'PICBarangMobile'], + }); |
