summaryrefslogtreecommitdiff
path: root/src-migrate/validations
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-08-11 16:32:03 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-08-11 16:32:03 +0700
commitfc837f851c89614f392e5a17cd6a2ceda3f706f3 (patch)
treebb8c893c86a0d3b35689c349eb9cb9f5d8d455a0 /src-migrate/validations
parent7ec561888b3123a8d9a0b062727c562c9dbec2db (diff)
<miqdad> more vals in confirm page
Diffstat (limited to 'src-migrate/validations')
-rw-r--r--src-migrate/validations/tempo.ts124
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
+ // });