From cf1ca71d507118c2a97f868435cfd7ad529d965c Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 2 Jan 2025 08:53:54 +0700 Subject: update merchant --- src/lib/form/components/AccountSwitch.jsx | 60 +++ src/lib/form/components/Merchant.jsx | 620 +++++++++++++++++++++--------- src/pages/daftar-merchant.jsx | 16 +- 3 files changed, 516 insertions(+), 180 deletions(-) create mode 100644 src/lib/form/components/AccountSwitch.jsx (limited to 'src') diff --git a/src/lib/form/components/AccountSwitch.jsx b/src/lib/form/components/AccountSwitch.jsx new file mode 100644 index 00000000..b9bf34b1 --- /dev/null +++ b/src/lib/form/components/AccountSwitch.jsx @@ -0,0 +1,60 @@ +import Link from 'next/link'; +import Image from '~/components/ui/image'; +import whatsappUrl from '@/core/utils/whatsappUrl'; +import { useEffect, useState } from 'react'; +import odooApi from '@/core/api/odooApi'; +import useDevice from '@/core/hooks/useDevice'; +import useAuth from '@/core/hooks/useAuth'; +import axios from 'axios'; +import { toast } from 'react-hot-toast'; +import { ChevronRightIcon, ChevronLeftIcon } from '@heroicons/react/24/outline'; + +const FinishTempo = ({ query }) => { + const [data, setData] = useState(); + const [transactionData, setTransactionData] = useState(); + const { isDesktop, isMobile } = useDevice(); + const auth = useAuth(); + + return ( +
+
+

+ Form Merchant Kamu Gagal Dilakukan +

+
+ Registrasi Tempo + +
+ Terima kasih atas minat anda untuk mendaftar merchant, namun sayangnya + akun anda bukan merupakan akun bisnis. Segera ubah akun anda menjadi + Bisnis untuk menggunakan fitur ini +
+ + Ubah Akun + + +
+ ); +}; + +export default FinishTempo; diff --git a/src/lib/form/components/Merchant.jsx b/src/lib/form/components/Merchant.jsx index 50ec1aba..adb34671 100644 --- a/src/lib/form/components/Merchant.jsx +++ b/src/lib/form/components/Merchant.jsx @@ -68,17 +68,22 @@ const CreateMerchant = () => { const [cities, setCities] = useState([]); const [districts, setDistricts] = useState([]); const [fileNames, setFileNames] = useState({}); + const [DeatailFile, setDetailFile] = useState({}); const [subDistricts, setSubDistricts] = useState([]); const [zips, setZips] = useState([]); const [isExample, setIsExample] = useState(false); const [BannerMerchant, setBannerMerchant] = useState(); + const [isPkp, setIsPkp] = useState(false); const recaptchaRef = useRef(null); const router = useRouter(); useEffect(() => { const getBanner = async () => { - const get = await odooApi('GET', '/api/v1/banner?type=banner-form-merchant'); + const get = await odooApi( + 'GET', + '/api/v1/banner?type=banner-form-merchant' + ); // setBannerMerchant(get[0].image); setBannerMerchant( 'https://erp.indoteknik.com/api/image/x_banner.banner/x_banner_image/431' @@ -98,6 +103,9 @@ const CreateMerchant = () => { const dataProfile = await addressApi({ id: auth.parentId ? auth.parentId : auth.partnerId, }); + if (dataProfile.companyType == 'pkp') { + setIsPkp(true); + } setValue('company', dataProfile?.name); setValue('address', dataProfile?.alamatBisnis); setValue('state', parseInt(dataProfile.stateId.id)); @@ -233,28 +241,39 @@ const CreateMerchant = () => { } }, [watchsubDistrict, subDistricts]); const onSubmitHandler = async (values) => { - const dokumenKtpDirut = document.getElementById('dokumenKtpDirut').files[0]; - const kartuNama = document.getElementById('kartuNama').files[0]; - const sppkp = document.getElementById('sppkp').files[0]; - const npwp = document.getElementById('npwp').files[0]; - const suratPernyataan = document.getElementById('suratPernyataan').files[0]; - const fotoKantor = document.getElementById('fotoKantor').files[0]; - if (!npwp) { + const npwp = DeatailFile.npwp; + const sppkp = DeatailFile.sppkp; + const dokumenKtpDirut = DeatailFile.dokumenKtpDirut; + const kartuNama = DeatailFile.kartuNama; + const suratPernyataan = DeatailFile.suratPernyataan; + const fotoKantor = DeatailFile.fotoKantor; + const dataProduk = DeatailFile.dataProduk; + const pricelist = DeatailFile.pricelist; + if (!npwp && isPkp) { toast.error('NPWP wajib di tambahkan'); return; } - if (!suratPernyataan) { - toast.error('Surat Pernyataan Nomor Rekening wajib di tambahkan'); + if (!sppkp && isPkp) { + toast.error('SPPKP wajib di tambahkan'); + return; + } + if (!dokumenKtpDirut && !isPkp) { + toast.error('KTP Dirut/Direktur wajib di tambahkan'); return; } if (!fotoKantor) { toast.error('Foto Gudang / Kantor Bagian Depan wajib di tambahkan'); return; } + if (!pricelist) { + toast.error('Pricelist wajib di tambahkan'); + return; + } const toastId = toast.loading('Mengirimkan formulir merchant...'); const data = { ...values, name_merchant: 'Form Merchant - ' + values.company, + pic_merchant: values.PICName, partner_id: auth.partnerId, address: values.address, state: values.state, @@ -270,6 +289,7 @@ const CreateMerchant = () => { email_finance: values.emailFinance, phone: values.phone, mobile: values.mobile, + harga_tayang: values.hargaTayang, description: 'Nama Perusahaan : ' + values.company + @@ -285,16 +305,14 @@ const CreateMerchant = () => { values.email + ' \r\n No Hp : ' + values.mobile, - file_dokumenKtpDirut: dokumenKtpDirut - ? await getFileBase64(dokumenKtpDirut) - : '', - file_kartuNama: kartuNama ? await getFileBase64(kartuNama) : '', - file_npwp: npwp ? await getFileBase64(npwp) : '', - file_sppkp: sppkp ? await getFileBase64(sppkp) : '', - file_suratPernyataan: suratPernyataan - ? await getFileBase64(suratPernyataan) - : '', - file_fotoKantor: fotoKantor ? await getFileBase64(fotoKantor) : '', + file_dokumenKtpDirut: dokumenKtpDirut ? dokumenKtpDirut : '', + file_kartuNama: kartuNama ? kartuNama : '', + file_npwp: npwp ? npwp : '', + file_sppkp: sppkp ? sppkp : '', + file_suratPernyataan: suratPernyataan ? suratPernyataan : '', + file_fotoKantor: fotoKantor ? fotoKantor : '', + file_dataProduk: dataProduk ? dataProduk : '', + file_pricelist: pricelist ? pricelist : '', }; // const formData = new FormData(); // formData.append('npwp', values.npwp[0]); @@ -319,20 +337,40 @@ const CreateMerchant = () => { } // Tetap di bagian atas, tidak boleh ada kondisi sebelum hook - const handleFileChange = (event) => { + const handleFileChange = async (event) => { + let fileBase64 = ''; const file = event.target.files[0]; - if (file.size > 1000000) { - toast.error('Maksimal ukuran file adalah 1MB'); - event.target.value = ''; - return; + + if (file.size > 500000) { + try { + const toastId = toast.loading('mencoba mengompresi file...'); + // Compress image file + const options = { + maxSizeMB: 0.5, // Target size in MB + maxWidthOrHeight: 1920, // Adjust as needed + useWebWorker: true, + }; + const compressedFile = await imageCompression(file, options); + toast.success('berhasil mengompresi file', { duration: 4000 }); + // Convert compressed file to Base64 + fileBase64 = await getFileBase64(compressedFile); + } catch (error) { + toast.error('Gagal mengompresi file', { duration: 4000 }); + } + } else { + // Convert file to Base64 + fileBase64 = await getFileBase64(file); } const fieldName = event.target.name; // Nama input file + setDetailFile((prev) => ({ + ...prev, + [fieldName]: file ? fileBase64 : '', // Tambahkan atau perbarui file di state + })); setFileNames((prev) => ({ ...prev, [fieldName]: file ? file.name : '', // Tambahkan atau perbarui file di state })); }; - return ( <> { +
+
+ + + isi detail perusahaan sesuai dengan nama yang terdaftar{' '} + +
+
+ +
+ {errors.PICName?.message} +
+
+