summaryrefslogtreecommitdiff
path: root/src-migrate
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-10-22 11:24:43 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-10-22 11:24:43 +0700
commitd6ede238658d90315a5dc5b864f20037e8a776f6 (patch)
tree4854a5f81d74a16fc631de409249f3e056d324ef /src-migrate
parent3a0f3c6ed7ef886d3205d51937b1ecbb035b1a87 (diff)
<iman> update & add section dokumen
Diffstat (limited to 'src-migrate')
-rw-r--r--src-migrate/modules/register/stores/usePengajuanTempoStore.ts89
-rw-r--r--src-migrate/types/tempo.ts13
-rw-r--r--src-migrate/validations/tempo.ts47
3 files changed, 149 insertions, 0 deletions
diff --git a/src-migrate/modules/register/stores/usePengajuanTempoStore.ts b/src-migrate/modules/register/stores/usePengajuanTempoStore.ts
index 08053e42..9c97b8a0 100644
--- a/src-migrate/modules/register/stores/usePengajuanTempoStore.ts
+++ b/src-migrate/modules/register/stores/usePengajuanTempoStore.ts
@@ -4,12 +4,14 @@ import {
TempoPropsKontakPerson,
TempoPropsPengiriman,
TempoPropsSupplier,
+ TempoPropsDokumen,
} from '~/types/tempo';
import {
TempoSchema,
TempoSchemaKontakPerson,
TempoSchemaPengiriman,
TempoSchemaSupplier,
+ TempoSchemaDokumen,
} from '~/validations/tempo';
import { boolean, ZodError } from 'zod';
@@ -262,6 +264,93 @@ export const usePengajuanTempoStorePengiriman = create<
},
}),
}));
+type StateDokumen = {
+ formDokumen: TempoPropsDokumen;
+ errorsDokumen: {
+ [key in keyof TempoPropsDokumen]?: string;
+ };
+};
+type ActionDokumen = {
+ updateFormDokumen: (
+ name: string,
+ fileName: string,
+ fileFormat: string,
+ value: string
+ ) => void;
+
+ validateDokumen: () => void;
+ resetFormDokumen: () => void;
+ getJumlahDokumenDiisi: () => void;
+};
+export const usePengajuanTempoStoreDokumen = create<
+ StateDokumen & ActionDokumen
+>((set, get) => ({
+ formDokumen: {
+ dokumenNib: { name: '', format: '', base64: '' },
+ dokumenNpwp: { name: '', format: '', base64: '' },
+ dokumenSppkp: { name: '', format: '', base64: '' },
+ dokumenAktaPerubahan: { name: '', format: '', base64: '' },
+ dokumenKtpDirut: { name: '', format: '', base64: '' },
+ dokumenAktaPendirian: { name: '', format: '', base64: '' },
+ dokumenLaporanKeuangan: { name: '', format: '', base64: '' },
+ dokumenFotoKantor: { name: '', format: '', base64: '' },
+ dokumenTempatBekerja: { name: '', format: '', base64: '' },
+ },
+
+ // Memperbarui dokumen dengan name, format, dan base64
+ updateFormDokumen: (name, fileName, fileFormat, value) =>
+ set((state) => ({
+ formDokumen: {
+ ...state.formDokumen,
+ [name]: {
+ name: fileName,
+ format: fileFormat,
+ base64: value,
+ },
+ },
+ })),
+
+ errorsDokumen: {},
+ validateDokumen: () => {
+ try {
+ TempoSchemaDokumen.parse(get().formDokumen);
+ set({ errorsDokumen: {} });
+ } catch (error) {
+ if (error instanceof ZodError) {
+ const errorsDokumen: StateDokumen['errorsDokumen'] = {};
+ error.errors.forEach(
+ (e) =>
+ (errorsDokumen[e.path[0] as keyof TempoPropsDokumen] = e.message)
+ );
+ set({ errorsDokumen });
+ }
+ }
+ },
+
+ getJumlahDokumenDiisi: () => {
+ const formDokumen = get().formDokumen;
+ // Menghitung jumlah field yang base64 tidak kosong
+ const jumlahTerisi = Object.values(formDokumen).filter(
+ (dokumen) => dokumen.base64 !== ''
+ ).length;
+ return jumlahTerisi;
+ },
+
+ resetFormDokumen: () =>
+ set({
+ formDokumen: {
+ dokumenNib: { name: '', format: '', base64: '' },
+ dokumenNpwp: { name: '', format: '', base64: '' },
+ dokumenSppkp: { name: '', format: '', base64: '' },
+ dokumenAktaPerubahan: { name: '', format: '', base64: '' },
+ dokumenKtpDirut: { name: '', format: '', base64: '' },
+ dokumenAktaPendirian: { name: '', format: '', base64: '' },
+ dokumenLaporanKeuangan: { name: '', format: '', base64: '' },
+ dokumenFotoKantor: { name: '', format: '', base64: '' },
+ dokumenTempatBekerja: { name: '', format: '', base64: '' },
+ },
+ }),
+}));
type StateSupplier = {
formSupplier: TempoPropsSupplier[];
diff --git a/src-migrate/types/tempo.ts b/src-migrate/types/tempo.ts
index 17c4c906..d928d9c3 100644
--- a/src-migrate/types/tempo.ts
+++ b/src-migrate/types/tempo.ts
@@ -3,6 +3,7 @@ import {
TempoSchemaKontakPerson,
TempoSchemaPengiriman,
TempoSchemaSupplier,
+ TempoSchemaDokumen,
} from '~/validations/tempo';
import { OdooApiRes } from './odoo';
import { z } from 'zod';
@@ -68,6 +69,17 @@ export type tempoPropsSupplier = {
durasiTempo: string;
creditLimit: string;
};
+export type tempoPropsDokumen = {
+ dokumenNib: { name: string; format: string; base64: string };
+ dokumenNpwp: { name: string; format: string; base64: string };
+ dokumenSppkp: { name: string; format: string; base64: string };
+ dokumenAktaPerubahan: { name: string; format: string; base64: string };
+ dokumenKtpDirut: { name: string; format: string; base64: string };
+ dokumenAktaPendirian: { name: string; format: string; base64: string };
+ dokumenLaporanKeuangan: { name: string; format: string; base64: string };
+ dokumenFotoKantor: { name: string; format: string; base64: string };
+ dokumenTempatBekerja: { name: string; format: string; base64: string };
+};
export type TempoApiProps = OdooApiRes<TempoProps>;
@@ -75,6 +87,7 @@ export type TempoProps = z.infer<typeof TempoSchema>;
export type TempoPropsKontakPerson = z.infer<typeof TempoSchemaKontakPerson>;
export type TempoPropsPengiriman = z.infer<typeof TempoSchemaPengiriman>;
export type TempoPropsSupplier = z.infer<typeof TempoSchemaSupplier>;
+export type TempoPropsDokumen = z.infer<typeof TempoSchemaDokumen>;
export type TempoResApiProps = {
Tempo: boolean;
diff --git a/src-migrate/validations/tempo.ts b/src-migrate/validations/tempo.ts
index 86bcf6d1..ccef8d83 100644
--- a/src-migrate/validations/tempo.ts
+++ b/src-migrate/validations/tempo.ts
@@ -107,3 +107,50 @@ export const TempoSchemaSupplier = z.object({
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().min(1, { message: 'Format file harus diisi' }),
+ base64: z.string().min(1, { message: 'Dokumen harus diisi' }),
+ }),
+ dokumenNpwp: z.object({
+ name: z.string().min(1, { message: 'Nama file harus diisi' }),
+ format: z.string().min(1, { message: 'Format file harus diisi' }),
+ base64: z.string().min(1, { message: 'Dokumen harus diisi' }),
+ }),
+ dokumenSppkp: 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().min(1, { message: 'Format file harus diisi' }),
+ base64: z.string().min(1, { message: 'Dokumen harus diisi' }),
+ }),
+ dokumenTempatBekerja: z.object({
+ name: z.string().min(1, { message: 'Nama file harus diisi' }),
+ format: z.string().min(1, { message: 'Format file harus diisi' }),
+ base64: z.string().min(1, { message: 'Dokumen harus diisi' }),
+ }),
+});