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 | |
| parent | 4e5422a800b0cb3eaa4436693f10298434f11621 (diff) | |
| parent | 286f4bd39d54a13e21a3c163f92ad4138739ab1d (diff) | |
Merged in cr-tempo-val (pull request #435)
Cr tempo val
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/pengajuan-tempo/component/PengajuanTempo.jsx | 250 |
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> )} |
