summaryrefslogtreecommitdiff
path: root/src-migrate/validations
diff options
context:
space:
mode:
Diffstat (limited to 'src-migrate/validations')
-rw-r--r--src-migrate/validations/auth.ts129
-rw-r--r--src-migrate/validations/tempo.ts181
2 files changed, 290 insertions, 20 deletions
diff --git a/src-migrate/validations/auth.ts b/src-migrate/validations/auth.ts
index 3abdfb57..6cdd930b 100644
--- a/src-migrate/validations/auth.ts
+++ b/src-migrate/validations/auth.ts
@@ -1,8 +1,77 @@
import { z } from 'zod';
-
+const forbiddenWords = [
+ 'anjing',
+ 'babi',
+ 'monyet',
+ 'bangsat',
+ ' tai ',
+ 'kontol',
+ 'memek',
+ ' bol ',
+ 'pantat',
+ 'jembut',
+ 'mencret',
+ 'ngehe',
+ 'ngewe',
+ 'ngentot',
+ 'ngews',
+ 'jembudh',
+ 'jembud',
+ 'b4b1',
+ 'b4bi',
+ 'bab1',
+ 'mati',
+ 'perkosa',
+ 'bunuh',
+ 'membunuh',
+ 't41',
+ 't4i',
+ 'ta1',
+ 'anjay',
+ 'anjir',
+ 'anying',
+ 'tokay',
+ 'peler',
+ 'meki',
+ 'tetek',
+ 'teteq',
+ 'tobrut',
+ 'toket',
+ 'pentil',
+ 'pantek',
+ 'bangke',
+ 'kampret',
+ 'sialan',
+ 'beol',
+ 'bego',
+ 'goblok',
+ 'tolol',
+ 'jancok',
+ 'jablay',
+ 'jalang',
+ 'lonte',
+ 'jancuk',
+ 'pelacur',
+ 'pelakor',
+];
export const registerSchema = z
.object({
- name: z.string().min(1, { message: 'Nama harus diisi' }),
+ name: z
+ .string()
+ .min(1, { message: 'Nama harus diisi' })
+ .refine(
+ (value) => {
+ const lowerValue = value.toLowerCase();
+ const hasForbiddenWord = forbiddenWords.some((word) =>
+ lowerValue.includes(word)
+ );
+ const isStandaloneTai = /\b(tai)\b/.test(lowerValue);
+ const isStandaloneBol = /\b(bol)\b/.test(lowerValue);
+
+ return !hasForbiddenWord && !isStandaloneTai && !isStandaloneBol;
+ },
+ { message: 'Nama mengandung kata yang tidak diperbolehkan' }
+ ),
email: z
.string()
.min(1, { message: 'Email harus diisi' })
@@ -11,13 +80,14 @@ export const registerSchema = z
phone: z
.string()
.min(1, { message: 'Nomor telepon harus diisi' })
- .refine((val) => /^\d{10,12}$/.test(val), {
+ .refine((val) => /^\d{9,13}$/.test(val), {
message: 'Format nomor telepon tidak valid, contoh: 081234567890',
}),
type_acc: z.string().optional(),
nama_wajib_pajak: z.string().optional(),
alamat_bisnis: z.string().optional(),
alamat_wajib_pajak: z.string().optional(),
+ parent_id: z.string().optional(),
is_pkp: z.string(),
is_terdaftar: z.string(),
sppkp_document: z.string().optional(),
@@ -27,25 +97,42 @@ export const registerSchema = z
business_name: z.string().optional(),
company_type_id: z.string().optional(),
isChekBox: z.string().optional(),
- npwp: z.string().optional().refine((val) => !val || /^\d{15,16}$/.test(val), {
- message: 'Format NPWP tidak valid, NPWP harus terdiri dari 15-16 digit angka.',
- }),
+ npwp: z
+ .string()
+ .optional()
+ .refine((val) => !val || /^\d{15,16}$/.test(val), {
+ message:
+ 'Format NPWP tidak valid, NPWP harus terdiri dari 15-16 digit angka.',
+ }),
sppkp: z.string().optional(),
})
.superRefine((data, ctx) => {
if (data.type_acc === 'business') {
if (data.is_terdaftar === 'false') {
if (data.is_pkp === 'true') {
- const requiredFields: { field: keyof typeof data; message: string }[] = [
+ const requiredFields: {
+ field: keyof typeof data;
+ message: string;
+ }[] = [
{ field: 'business_name', message: 'Nama perusahaan harus diisi' },
- { field: 'alamat_bisnis', message: 'Alamat perusahaan harus diisi' },
+ {
+ field: 'alamat_bisnis',
+ message: 'Alamat perusahaan harus diisi',
+ },
// { field: 'alamat_wajib_pajak', message: 'Alamat wajib pajak harus diisi' },
{ field: 'company_type_id', message: 'Badan usaha wajib dipilih' },
{ field: 'industry_id', message: 'Jenis usaha harus dipilih' },
{ field: 'sppkp_document', message: 'Document harus diisi' },
{ field: 'npwp_document', message: 'Document harus diisi' },
- { field: 'npwp', message: 'Format NPWP tidak valid, NPWP harus terdiri dari 15-16 digit angka.' },
- { field: 'nama_wajib_pajak', message: 'Nama wajib pajak harus diisi' },
+ {
+ field: 'npwp',
+ message:
+ 'Format NPWP tidak valid, NPWP harus terdiri dari 15-16 digit angka.',
+ },
+ {
+ field: 'nama_wajib_pajak',
+ message: 'Nama wajib pajak harus diisi',
+ },
];
requiredFields.forEach(({ field, message }) => {
@@ -57,15 +144,19 @@ export const registerSchema = z
});
}
});
-
- if (!data.email_partner || !z.string().email().safeParse(data.email_partner).success) {
+
+ if (
+ !data.email_partner ||
+ !z.string().email().safeParse(data.email_partner).success
+ ) {
ctx.addIssue({
code: 'custom',
path: ['email_partner'],
- message: 'Email partner harus diisi dengan format example@mail.com',
+ message:
+ 'Email partner harus diisi dengan format example@mail.com',
});
}
- if(data.isChekBox === 'false'){
+ if (data.isChekBox === 'false') {
if (!data.alamat_wajib_pajak) {
ctx.addIssue({
code: 'custom',
@@ -74,7 +165,6 @@ export const registerSchema = z
});
}
}
-
} else {
if (!data.business_name) {
ctx.addIssue({
@@ -110,12 +200,12 @@ export const registerSchema = z
ctx.addIssue({
code: 'custom',
path: ['npwp'],
- message: 'Format NPWP tidak valid, NPWP harus terdiri dari 15-16 digit angka.',
+ message:
+ 'Format NPWP tidak valid, NPWP harus terdiri dari 15-16 digit angka.',
});
}
-
}
- }else{
+ } else {
if (data.is_pkp === 'true') {
if (!data.business_name) {
ctx.addIssue({
@@ -141,7 +231,6 @@ export const registerSchema = z
// path: ['business_name'],
// message: 'Nama perusahaan harus diisi',
// });
- }else{
-
+ } else {
}
});
diff --git a/src-migrate/validations/tempo.ts b/src-migrate/validations/tempo.ts
new file mode 100644
index 00000000..f019275c
--- /dev/null
+++ b/src-migrate/validations/tempo.ts
@@ -0,0 +1,181 @@
+import { z } from 'zod';
+
+export const TempoSchema = z.object({
+ name: z.string().min(1, { message: 'Nama harus diisi' }),
+ street: z.string().min(1, { message: 'Alamat harus diisi' }),
+ industryId: z.string().min(1, { message: 'Jenis usaha harus dipilih' }),
+ zip: z.string().min(1, { message: 'Kode pos harus diisi' }),
+ state: z.string().min(1, { message: 'Provinsi harus dipilih' }),
+ city: z.string().min(1, { message: 'Kota harus dipilih' }),
+ district: z.string().min(1, { message: 'Kecamatan harus dipilih' }),
+ subDistrict: z.string().min(1, { message: 'Kelurahan harus dipilih' }),
+ mobile: z
+ .string()
+ .min(1, { message: 'Nomor telepon harus diisi' })
+ .refine((val) => /^\d{10,12}$/.test(val), {
+ message: 'Format nomor telepon tidak valid, contoh: 081234567890',
+ }),
+ bankName: z.string().min(1, { message: 'Nama bank harus diisi' }),
+ accountName: z.string().min(1, { message: 'Nama rekening harus diisi' }),
+ accountNumber: z
+ .string()
+ .min(1, { message: 'Nomor rekening harus diisi' })
+ .refine((val) => /^\d+$/.test(val), {
+ message: 'Nomor rekening hanya boleh mengandung angka',
+ }),
+ estimasi: z.string().optional(),
+ website: z.string().optional(),
+ tempoDuration: z.string().min(1, { message: 'Durasi tempo harus dipilih' }),
+ bersedia: z.string().min(1, { message: 'Harus dipilih' }),
+ portal: z.string().min(1, { message: 'Harus dipilih' }),
+ categoryProduk: z
+ .string()
+ .min(1, { message: 'Category produk harus dipilih' }),
+});
+
+export const TempoSchemaKontakPerson = z.object({
+ direkturName: z.string().min(1, { message: 'Nama harus diisi' }),
+ direkturTittle: z.string().min(1, { message: 'Tittle harus dipilih' }),
+ financeName: z.string().min(1, { message: 'Nama harus diisi' }),
+ direkturMobile: z.string().optional(),
+ financeMobile: z
+ .string()
+ .min(1, { message: 'Nomor telepon harus diisi' })
+ .refine((val) => /^\d{10,12}$/.test(val), {
+ message: 'Format nomor telepon tidak valid, contoh: 081234567890',
+ }),
+ purchasingTittle: z.string().min(1, { message: 'Tittle harus dipilih' }),
+ financeTittle: z.string().min(1, { message: 'Tittle harus dipilih' }),
+ purchasingMobile: z
+ .string()
+ .min(1, { message: 'Nomor telepon harus diisi' })
+ .refine((val) => /^\d{10,12}$/.test(val), {
+ message: 'Format nomor telepon tidak valid, contoh: 081234567890',
+ }),
+ direkturEmail: z
+ .string()
+ .min(1, { message: 'Email harus diisi' })
+ .email({ message: 'Email harus menggunakan format example@mail.com' }),
+ purchasingEmail: z
+ .string()
+ .min(1, { message: 'Email harus diisi' })
+ .email({ message: 'Email harus menggunakan format example@mail.com' }),
+ financeEmail: z
+ .string()
+ .min(1, { message: 'Email harus diisi' })
+ .email({ message: 'Email harus menggunakan format example@mail.com' }),
+ purchasingName: z.string().min(1, { message: 'Nama harus diisi' }),
+});
+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()
+ .min(1, { message: 'Kelurahan harus dipilih' }),
+ zipPengiriman: z.string().min(1, { message: 'Kode pos harus diisi' }),
+ 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()
+ .min(1, { message: 'Kelurahan invoice harus dipilih' }),
+ zipInvoice: z.string().min(1, { message: 'Kode pos harus diisi' }),
+ isSameAddrees: z.string(),
+ isSameAddreesStreet: z.string(),
+ tukarInvoiceInput: z.string().optional(),
+ tukarInvoiceInputPembayaran: z.string().optional(),
+ dokumenPengiriman: z.string().optional(),
+ dokumenPengirimanInput: z.string().optional(),
+ dokumenKirimInput: z.string().optional(),
+ dokumenPengirimanInvoiceInput: 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' }),
+});
+export const TempoSchemaDokumen = z.object({
+ dokumenNib: z.object({
+ name: z.string().min(1, { message: 'Nama file harus diisi' }),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenNpwp: z.object({
+ name: z.string().min(1, { message: 'Nama file harus diisi' }),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenSppkp: z.object({
+ name: z.string().min(1, { message: 'Nama file harus diisi' }),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenSiup: z.object({
+ name: z.string().optional(),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenTdp: z.object({
+ name: z.string().optional(),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenSkdp: z.object({
+ name: z.string().optional(),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenSkt: z.object({
+ name: z.string().optional(),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenAktaPerubahan: z.object({
+ name: z.string().optional(),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenKtpDirut: z.object({
+ name: z.string().optional(),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenAktaPendirian: z.object({
+ name: z.string().optional(),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenLaporanKeuangan: z.object({
+ name: z.string().optional(),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenFotoKantor: z.object({
+ name: z.string().min(1, { message: 'Nama file harus diisi' }),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+ dokumenTempatBekerja: z.object({
+ name: z.string().min(1, { message: 'Nama file harus diisi' }),
+ format: z.string().optional(),
+ base64: z.string().optional(),
+ }),
+});