summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2025-08-12 08:59:48 +0000
committerIT Fixcomart <it@fixcomart.co.id>2025-08-12 08:59:48 +0000
commitc33f96ba48e112d3beb3c4b63522a9c1e1840051 (patch)
treed6cffaca2497b77a6f82c22acda95a1bac99f62c /src/lib
parent4e5422a800b0cb3eaa4436693f10298434f11621 (diff)
parent286f4bd39d54a13e21a3c163f92ad4138739ab1d (diff)
Merged in cr-tempo-val (pull request #435)
Cr tempo val
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/pengajuan-tempo/component/PengajuanTempo.jsx250
1 files changed, 161 insertions, 89 deletions
diff --git a/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx b/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx
index d59bfd75..ae3d97fd 100644
--- a/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx
+++ b/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx
@@ -38,7 +38,7 @@ const PengajuanTempo = () => {
const [bigData, setBigData] = useState();
const [idTempo, setIdTempo] = useState(0);
const { form, errors, validate, updateForm } = usePengajuanTempoStore();
- const { control, watch, setValue } = useForm();
+ const { control, watch, setValue, setError } = useForm();
const auth = useAuth();
const router = useRouter();
const [BannerTempo, setBannerTempo] = useState();
@@ -426,111 +426,185 @@ const PengajuanTempo = () => {
}
};
- const handleDaftarTempo = async () => {
- for (const error of stepDivsError) {
- if (error.length > 0) {
- return;
+const handleDaftarTempo = async () => {
+const phones = [
+ { key: 'mobile', label: 'No. HP Perusahaan', value: form.mobile?.trim() },
+ {
+ key: 'direkturMobile',
+ label: 'No. HP Direktur',
+ value: formKontakPerson.direkturMobile?.trim(),
+ },
+ {
+ key: 'purchasingMobile',
+ label: 'No. HP Purchasing',
+ value: formKontakPerson.purchasingMobile?.trim(),
+ },
+ {
+ key: 'financeMobile',
+ label: 'No. HP Finance',
+ value: formKontakPerson.financeMobile?.trim(),
+ },
+ {
+ key: 'PICBarangMobile',
+ label: 'No. HP PIC Barang',
+ value: formPengiriman.PICBarangMobile?.trim(),
+ },
+ {
+ key: 'invoicePicMobile',
+ label: 'No. HP PIC Invoice',
+ value: formPengiriman.invoicePicMobile?.trim(),
+ },
+].filter((p) => p.value);
+
+
+ const seen = new Map();
+ let firstErrorField = null;
+
+ // Reset error manual
+ phones.forEach((p) => setError(p.key, { type: 'manual', message: '' }));
+
+ for (const phone of phones) {
+ if (!seen.has(phone.value)) {
+ seen.set(phone.value, phone);
+ } else {
+ const first = seen.get(phone.value);
+
+ // Tampilkan toast
+ toast.error(`${phone.label} tidak boleh sama dengan ${first.label}`);
+
+ // Error merah di bawah input
+ setError(phone.key, {
+ type: 'manual',
+ message: `${phone.label} tidak boleh sama dengan ${first.label}`,
+ });
+
+ // Pasangan pertama yang duplikat
+ setError(first.key, {
+ type: 'manual',
+ message: `${first.label} tidak boleh sama dengan ${phone.label}`,
+ });
+
+ if (!firstErrorField) {
+ firstErrorField = phone.key;
}
}
+ }
+
+ if (firstErrorField) {
+ setTimeout(() => {
+ const el = document.querySelector(`[name="${firstErrorField}"]`);
+ if (el) {
+ el.scrollIntoView({ behavior: 'smooth', block: 'center' });
+ el.focus();
+ }
+ }, 100);
+ return;
+ }
- // Filter hanya dokumen dengan `format` yang tidak undefined
- const formattedDokumen = Object.entries(formDokumen)
- .filter(([_, doc]) => doc.format !== undefined) // Hanya dokumen dengan `format` tidak undefined
- .map(([key, doc]) => ({
- documentName: key,
- details: {
- name: doc.name,
- format: doc.format,
- base64: doc.base64,
- },
- }));
+ for (const error of stepDivsError) {
+ if (error.length > 0) {
+ return;
+ }
+ }
+
+ const formattedDokumen = Object.entries(formDokumen)
+ .filter(([_, doc]) => doc.format !== undefined)
+ .map(([key, doc]) => ({
+ documentName: key,
+ details: {
+ name: doc.name,
+ format: doc.format,
+ base64: doc.base64,
+ },
+ }));
- const toastId = toast.loading('Mengirimkan formulir pengajuan tempo...');
- setIsLoading(true);
- try {
- let address4;
- let address3;
- const address = await createPengajuanTempoApi({
- id: 0,
+ const toastId = toast.loading('Mengirimkan formulir pengajuan tempo...');
+ setIsLoading(true);
+
+ try {
+ let address4;
+ let address3;
+ const address = await createPengajuanTempoApi({
+ id: 0,
+ partner_id: auth.partnerId,
+ user_id: auth.parentId ? auth.parentId : auth.partnerId,
+ tempo_request: false,
+ ...form,
+ });
+
+ if (address.id) {
+ const address2 = await createPengajuanTempoApi({
+ id: address.id,
partner_id: auth.partnerId,
- user_id: auth.parentId ? auth.parentId : auth.partnerId,
+ user_id: address.userId,
tempo_request: false,
- ...form,
+ ...formKontakPerson,
});
- if (address.id) {
- const address2 = await createPengajuanTempoApi({
- id: address.id,
+
+ if (address2.id) {
+ address3 = await createPengajuanTempoApi({
+ id: address2.id,
partner_id: auth.partnerId,
- user_id: address.userId,
+ user_id: address2.userId,
tempo_request: false,
- ...formKontakPerson,
- });
- if (address2.id) {
- address3 = await createPengajuanTempoApi({
- id: address2.id,
- partner_id: auth.partnerId,
- user_id: address2.userId,
- tempo_request: false,
- ...formPengiriman,
- formDokumenProsedur: formPengiriman.dokumenProsedur
+ ...formPengiriman,
+ formDokumenProsedur: formPengiriman.dokumenProsedur
? JSON.stringify(formPengiriman.dokumenProsedur)
: false,
+ });
+
+ if (address3.id && formattedDokumen.length > 0) {
+ address4 = await createPengajuanTempoApi({
+ id: address3.id,
+ partner_id: auth.partnerId,
+ user_id: address3.userId,
+ tempo_request: true,
+ formDocs: JSON.stringify(formattedDokumen),
+ });
+ } else {
+ address4 = await createPengajuanTempoApi({
+ id: address3.id,
+ partner_id: auth.partnerId,
+ user_id: address3.userId,
+ tempo_request: true,
});
- if (address3.id && formattedDokumen.length > 0) {
- // Kirim dokumen yang sudah difilter
- address4 = await createPengajuanTempoApi({
- id: address3.id,
- partner_id: auth.partnerId,
- user_id: address3.userId,
- tempo_request: true,
- formDocs: JSON.stringify(formattedDokumen),
- });
- } else {
- address4 = await createPengajuanTempoApi({
- id: address3.id,
- partner_id: auth.partnerId,
- user_id: address3.userId,
- tempo_request: true,
- });
- }
}
}
+ }
- if (address4?.id) {
- toast.success('Pengajuan tempo berhasil dilakukan');
- const toastId = toast.loading('Mengubah status akun...');
- const isUpdated = await editAuthTempo();
- if (isUpdated?.user) {
- const update = await setAuth(isUpdated.user);
- if (update) {
- toast.dismiss(toastId);
- setIsLoading(false);
- toast.success('Berhasil mengubah status akun', { duration: 1000 });
- router.push('/pengajuan-tempo/finish');
- } else {
- toast.dismiss(toastId);
- setIsLoading(false);
- toast.success('Pengajuan tempo berhasil dilakukan');
- toast.error('Gagal mengubah status akun', { duration: 1000 });
- router.push('/pengajuan-tempo');
- }
- removeFromLocalStorage();
- return;
+ if (address4?.id) {
+ toast.success('Pengajuan tempo berhasil dilakukan');
+ const toastId2 = toast.loading('Mengubah status akun...');
+ const isUpdated = await editAuthTempo();
+ if (isUpdated?.user) {
+ const update = await setAuth(isUpdated.user);
+ if (update) {
+ toast.dismiss(toastId2);
+ setIsLoading(false);
+ toast.success('Berhasil mengubah status akun', { duration: 1000 });
+ router.push('/pengajuan-tempo/finish');
+ } else {
+ toast.dismiss(toastId2);
+ setIsLoading(false);
+ toast.success('Pengajuan tempo berhasil dilakukan');
+ toast.error('Gagal mengubah status akun', { duration: 1000 });
+ router.push('/pengajuan-tempo');
}
- } else {
- toast.dismiss(toastId);
- setIsLoading(false);
-
- toast.error('Terjadi kesalahan dalam pengiriman formulir');
+ removeFromLocalStorage();
+ return;
}
- } catch (error) {
+ } else {
toast.dismiss(toastId);
setIsLoading(false);
-
toast.error('Terjadi kesalahan dalam pengiriman formulir');
- console.error(error);
}
- };
+ } catch (error) {
+ toast.dismiss(toastId);
+ setIsLoading(false);
+ toast.error('Terjadi kesalahan dalam pengiriman formulir');
+ console.error(error);
+ }
+};
const removeFromLocalStorage = () => {
for (const key of stepLabels) {
@@ -660,10 +734,8 @@ const PengajuanTempo = () => {
isDisabled={!isCheckedTNC || isLoading}
onClick={handleDaftarTempo}
>
- {isLoading
- ? 'Loading...'
- : 'Daftar Tempo'}
- {!isLoading && <ChevronRightIcon className='w-5' />}
+ {isLoading ? 'Loading...' : 'Daftar Tempo'}
+ {!isLoading && <ChevronRightIcon className='w-5' />}
</Button>
</div>
)}