diff options
| author | HATEC\SPVDEV001 <tri.susilo@altama.co.id> | 2023-04-13 09:03:15 +0700 |
|---|---|---|
| committer | HATEC\SPVDEV001 <tri.susilo@altama.co.id> | 2023-04-13 09:03:15 +0700 |
| commit | 043cb69422f14a6c761e60ca2f6feeb8623676b7 (patch) | |
| tree | 92f269170f389c6002d91a6ee8ed7448bcf983b5 /src | |
| parent | e347f3f7685598a8acbb174c375652aef7939068 (diff) | |
pembayaran tempo dan form kunjungan sales
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/form/api/createLeadsApi.js | 8 | ||||
| -rw-r--r-- | src/lib/form/components/CreatePembayaranTempo.jsx (renamed from src/core/components/form/CreatePembayaranTempo.jsx) | 20 | ||||
| -rw-r--r-- | src/lib/form/components/KunjunganSales.jsx | 188 | ||||
| -rw-r--r-- | src/pages/my/kunjungan-sales.jsx | 17 | ||||
| -rw-r--r-- | src/pages/pembayaran-tempo.jsx | 5 |
5 files changed, 227 insertions, 11 deletions
diff --git a/src/lib/form/api/createLeadsApi.js b/src/lib/form/api/createLeadsApi.js new file mode 100644 index 00000000..5665de2c --- /dev/null +++ b/src/lib/form/api/createLeadsApi.js @@ -0,0 +1,8 @@ +import odooApi from '@/core/api/odooApi' + +const createLeadsApi = async ({ data }) => { + const leads = await odooApi('POST', '/api/v1/lead', data) + return leads +} + +export default createLeadsApi diff --git a/src/core/components/form/CreatePembayaranTempo.jsx b/src/lib/form/components/CreatePembayaranTempo.jsx index 88e4aec9..63a013aa 100644 --- a/src/core/components/form/CreatePembayaranTempo.jsx +++ b/src/lib/form/components/CreatePembayaranTempo.jsx @@ -1,4 +1,5 @@ import HookFormSelect from '@/core/components/elements/Select/HookFormSelect' +import getFileBase64 from '@/core/utils/getFileBase64' import { yupResolver } from '@hookform/resolvers/yup' import React, { useRef } from 'react' import ReCAPTCHA from 'react-google-recaptcha' @@ -17,6 +18,7 @@ const CreatePembayaranTempo = () => { }) const recaptchaRef = useRef(null) + const npwp = useRef(null) const onSubmitHandler = async (values) => { const recaptchaValue = recaptchaRef.current.getValue() @@ -25,14 +27,18 @@ const CreatePembayaranTempo = () => { return } const data = { - ...values + ...values, + name : 'Pengajuan Pembayaran Tempo - ' + values.name, + file_npwp : values.npwp.length > 0 ? await getFileBase64(values.npwp) : '' } - const address = await createAddressApi({ data }) - if (address?.id) { - toast.success('Berhasil menambahkan alamat') - router.back() - } + console.log('ini adalah data', data) + + // const address = await createLeadsApi({ data }) + // if (address?.id) { + // toast.success('Berhasil menambahkan alamat') + // router.back() + // } } return ( <div className='container mx-auto p-4 md:p-0 my-0 md:my-10'> @@ -66,7 +72,7 @@ const CreatePembayaranTempo = () => { <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> <div> <label className='form-label mb-2'>Nomor Pokok Wajib Pajak (NPWP) *</label> - <input {...register('npwp')} type='file' className='form-input' /> + <input {...register('npwp')} type='file' className='form-input'/> <div className='text-caption-2 text-danger-500 mt-1'>{errors.npwp?.message}</div> </div> </div> diff --git a/src/lib/form/components/KunjunganSales.jsx b/src/lib/form/components/KunjunganSales.jsx new file mode 100644 index 00000000..b96fddb5 --- /dev/null +++ b/src/lib/form/components/KunjunganSales.jsx @@ -0,0 +1,188 @@ +import HookFormSelect from '@/core/components/elements/Select/HookFormSelect' +import cityApi from '@/lib/address/api/cityApi' +import { yupResolver } from '@hookform/resolvers/yup' +import React, { useEffect, useRef, useState } from 'react' +import ReCAPTCHA from 'react-google-recaptcha' +import { Controller, useForm } from 'react-hook-form' +import { toast } from 'react-hot-toast' +import * as Yup from 'yup' + +const CreateKunjunganSales = () => { + const { + register, + handleSubmit, + formState: { errors }, + control + } = useForm({ + resolver: yupResolver(validationSchema), + defaultValues + }) + const [cities, setCities] = useState([]) + const [company_unit, setCompany_unit] = useState([]) + + const recaptchaRef = useRef(null) + + useEffect(() => { + const loadCities = async () => { + let dataCities = await cityApi() + dataCities = dataCities.map((city) => ({ value: city.id, label: city.name })) + setCities(dataCities) + } + loadCities() + }, []) + + const onSubmitHandler = async (values) => { + const recaptchaValue = recaptchaRef.current.getValue() + if (!recaptchaValue) { + toast.error('Catcha harus diisi') + return + } + const data = { + ...values + } + + const address = await createAddressApi({ data }) + if (address?.id) { + toast.success('Berhasil menambahkan alamat') + router.back() + } + } + return ( + <div className='container mx-auto p-4 md:p-0 my-0 md:my-10'> + <h1 className='text-h-sm md:text-title-sm font-semibold mb-6'>Kunjungan Sales</h1> + <div className='w-full p-4 bg-white border border-gray_r-6 rounded'> + <div + class='flex items-center bg-blue-100 border border-blue-400 text-blue-500 font-bold px-4 py-3 mb-4' + role='alert' + > + <p> + Hubungi kami untuk mendapatkan kunjungan sales kami dan dapatkan berbagai kelebihannya + dengan menjadi pelanggan korporat kami. + </p> + </div> + <form onSubmit={handleSubmit(onSubmitHandler)}> + <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> + <div> + <label className='form-label mb-2'>Nama Perusahan *</label> + <input + {...register('company')} + placeholder='PT.Indoteknik' + type='text' + className='form-input' + /> + <div className='text-caption-2 text-danger-500 mt-1'>{errors.company?.message}</div> + </div> + </div> + <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> + <div> + <label className='form-label mb-2'>No. Telp *</label> + <input + {...register('phone')} + placeholder='021-XXXX' + type='text' + className='form-input' + /> + <div className='text-caption-2 text-danger-500 mt-1'>{errors.phone?.message}</div> + </div> + </div> + <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> + <div> + <label className='form-label mb-2'>Alamat*</label> + <input + {...register('address')} + placeholder='jl. Bandengan no.31 ' + type='text' + className='form-input' + /> + <div className='text-caption-2 text-danger-500 mt-1'>{errors.address?.message}</div> + </div> + </div> + <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> + <div> + <label className='form-label mb-2'>Kota*</label> + <Controller + name='city' + control={control} + render={(props) => <HookFormSelect {...props} options={cities} />} + /> + <div className='text-caption-2 text-danger-500 mt-1'>{errors.city?.message}</div> + </div> + </div> + <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> + <div> + <label className='form-label mb-2'>Unit Perusahaan</label> + <Controller + name='company_unit' + control={control} + render={(props) => <HookFormSelect {...props} options={company_unit} />} + /> + <div className='text-caption-2 text-danger-500 mt-1'>{errors.company_unit?.message}</div> + </div> + </div> + <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> + <div> + <label className='form-label mb-2'>No HP *</label> + <input + {...register('email')} + placeholder='628XXXXXXX' + type='text' + className='form-input' + /> + <div className='text-caption-2 text-danger-500 mt-1'>{errors.email?.message}</div> + </div> + </div> + <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> + <div> + <label className='form-label mb-2'>Alamat Email *</label> + <input + {...register('email')} + placeholder='contoh@email.com' + type='email' + className='form-input' + /> + <div className='text-caption-2 text-danger-500 mt-1'>{errors.email?.message}</div> + </div> + </div> + <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> + <div> + <label className='form-label mb-2'>Keterangan</label> + <textarea + {...register('description')} + type='text' + className='form-input' + /> + <div className='text-caption-2 text-danger-500 mt-1'>{errors.description?.message}</div> + </div> + </div> + <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> + <div> + <ReCAPTCHA ref={recaptchaRef} sitekey={process.env.NEXT_PUBLIC_RECAPTCHA_GOOGLE} /> + </div> + </div> + <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'> + <div> + <button type='submit' className='btn-yellow w-full md:w-fit mt-6 ml-0 md:ml-auto'> + Simpan + </button> + </div> + </div> + </form> + </div> + </div> + ) +} +const validationSchema = Yup.object().shape({ + name: Yup.string().min(3, 'Minimal 3 karakter').required('Harus di-isi'), + email: Yup.string().email('Format harus seperti contoh@email.com').required('Harus di-isi'), + npwp: Yup.string().required('Harus di-isi') +}) +const defaultValues = { + name: '', + email: '', + npwp: '', + siup: '', + tdp: '', + nib: '' +} + +export default CreateKunjunganSales diff --git a/src/pages/my/kunjungan-sales.jsx b/src/pages/my/kunjungan-sales.jsx new file mode 100644 index 00000000..d84bccfa --- /dev/null +++ b/src/pages/my/kunjungan-sales.jsx @@ -0,0 +1,17 @@ +import Seo from '@/core/components/Seo' +import BasicLayout from '@/core/components/layouts/BasicLayout' +import CreatePembayaranTempo from '@/lib/form/components/CreatePembayaranTempo' +import CreateKunjunganSales from '@/lib/form/KunjunganSales' + +export default function pembayaran_tempo() { + + return ( + <> + <Seo title='Kunjungan Sales- Indoteknik.com' /> + + <BasicLayout> + <CreateKunjunganSales></CreateKunjunganSales> + </BasicLayout> + </> + ) +} diff --git a/src/pages/pembayaran-tempo.jsx b/src/pages/pembayaran-tempo.jsx index 3b46fb49..b0df9b41 100644 --- a/src/pages/pembayaran-tempo.jsx +++ b/src/pages/pembayaran-tempo.jsx @@ -1,9 +1,6 @@ import Seo from '@/core/components/Seo' -import SimpleFooter from '@/core/components/elements/Footer/SimpleFooter' -import HookFormSelect from '@/core/components/elements/Select/HookFormSelect' import BasicLayout from '@/core/components/layouts/BasicLayout' -import CreatePembayaranTempo from '@/core/components/form/CreatePembayaranTempo' -import { Controller } from 'react-hook-form' +import CreatePembayaranTempo from '@/lib/form/components/CreatePembayaranTempo' export default function pembayaran_tempo() { |
