From e12765964e2e9c834205634533cb9fb3300fbb4c Mon Sep 17 00:00:00 2001
From: Rafi Zadanly <zadanlyr@gmail.com>
Date: Mon, 29 May 2023 14:41:38 +0700
Subject: Add gtag event conversion on checkout

---
 src/lib/checkout/components/Checkout.jsx | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 088b641b..525a641b 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -233,12 +233,26 @@ const Checkout = () => {
       return
     }
 
-    for (const product of products) deleteItemCart({ productId: product.id })
-    const payment = await axios.post(
-      `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/midtrans-payment?transactionId=${isCheckouted.id}`
-    )
-    setIsLoading(false)
-    window.location.href = payment.data.redirectUrl
+    const midtrans = async () => {
+      for (const product of products) deleteItemCart({ productId: product.id })
+      const payment = await axios.post(
+        `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/midtrans-payment?transactionId=${isCheckouted.id}`
+      )
+      setIsLoading(false)
+      window.location.href = payment.data.redirectUrl
+    }
+
+    gtag('event', 'conversion', {
+      send_to: 'AW-954540379/nDymCL3BhaQYENvClMcD',
+      value:
+        totalAmount -
+        totalDiscountAmount +
+        taxTotal +
+        Math.round(parseInt(biayaKirim * 1.1) / 1000) * 1000,
+      currency: 'IDR',
+      transaction_id: isCheckouted.id,
+      event_callback: midtrans
+    })
   }
   const taxTotal = (totalAmount - totalDiscountAmount) * 0.11
 
-- 
cgit v1.2.3


From a235f77530f0f51b3637b4b1096552fe3058ed69 Mon Sep 17 00:00:00 2001
From: Rafi Zadanly <zadanlyr@gmail.com>
Date: Fri, 16 Jun 2023 10:10:25 +0700
Subject: Add gtag begin_checkout and purchase event

---
 src/lib/checkout/components/Checkout.jsx | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 525a641b..07d9acb6 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -22,8 +22,8 @@ import DesktopView from '@/core/components/views/DesktopView'
 import ExpedisiList from '../api/ExpedisiList'
 import whatsappUrl from '@/core/utils/whatsappUrl'
 import { createSlug } from '@/core/utils/slug'
-import { Button, Modal } from 'flowbite-react'
 import BottomPopup from '@/core/components/elements/Popup/BottomPopup'
+import { gtagPurchase } from '@/core/utils/googleTag'
 
 const SELF_PICKUP_ID = 32
 
@@ -233,6 +233,8 @@ const Checkout = () => {
       return
     }
 
+    gtagPurchase(products, biayaKirim, isCheckouted.name)
+
     const midtrans = async () => {
       for (const product of products) deleteItemCart({ productId: product.id })
       const payment = await axios.post(
-- 
cgit v1.2.3


From 502ea2700003e8959f3d81c8978126da0d3b9828 Mon Sep 17 00:00:00 2001
From: "HATEC\\SPVDEV001" <tri.susilo@altama.co.id>
Date: Mon, 10 Jul 2023 10:31:42 +0700
Subject: button voucher

---
 src/lib/checkout/components/Checkout.jsx | 10 ++++++++++
 1 file changed, 10 insertions(+)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 07d9acb6..6cb735fe 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -578,6 +578,16 @@ const Checkout = () => {
                   )}
                 </div>
               </div>
+
+              <hr className='my-4 border-gray_r-6' />
+
+              <button
+                className='w-full btn-yellow mt-4 mb-4'
+                onClick={checkout}
+              >
+                <span className='text-sm'>{'Hemat belanja dengan promo >'}</span>
+              </button>
+
               <p className='text-caption-2 text-gray_r-11 leading-5'>
                 Dengan melakukan pembelian melalui website Indoteknik, saya menyetujui{' '}
                 <Link href='/syarat-ketentuan' className='inline font-normal'>
-- 
cgit v1.2.3


From bdb8aa884317fdca72a20989f73764fdde06f42e Mon Sep 17 00:00:00 2001
From: "HATEC\\SPVDEV001" <tri.susilo@altama.co.id>
Date: Mon, 10 Jul 2023 16:56:58 +0700
Subject: layouting

---
 src/lib/checkout/components/Checkout.jsx | 134 +++++++++++++++++++++++++++++--
 1 file changed, 128 insertions(+), 6 deletions(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 6cb735fe..629ec5bc 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -24,6 +24,7 @@ import whatsappUrl from '@/core/utils/whatsappUrl'
 import { createSlug } from '@/core/utils/slug'
 import BottomPopup from '@/core/components/elements/Popup/BottomPopup'
 import { gtagPurchase } from '@/core/utils/googleTag'
+import getVoucher from '../api/getVoucher'
 
 const SELF_PICKUP_ID = 32
 
@@ -81,7 +82,13 @@ const Checkout = () => {
   const [selectedExpedisiService, setselectedExpedisiService] = useState(null)
   const [etd, setEtd] = useState(null)
   const [etdFix, setEtdFix] = useState(null)
+  const [bottomPopup, SetBottomPopup] = useState(null)
+  const [listVouchers, SetListVoucher] = useState(null)
 
+  const voucher = async () => {
+    let dataVoucher = await getVoucher()
+    SetListVoucher(dataVoucher)
+  }
   useEffect(() => {
     const loadExpedisi = async () => {
       let dataExpedisi = await ExpedisiList()
@@ -93,8 +100,11 @@ const Checkout = () => {
       setExpedisi(dataExpedisi)
     }
     loadExpedisi()
+    voucher()
   }, [])
 
+  console.log('ini voucher', listVouchers)
+
   useEffect(() => {
     const loadProducts = async () => {
       let variantIds = ''
@@ -260,6 +270,95 @@ const Checkout = () => {
 
   return (
     <>
+      <BottomPopup active={bottomPopup} close={() => SetBottomPopup(false)} title='Gunakan Promo'>
+        <div className='row'>
+          <div className='flex justify-between items-center'>
+            <div className='flex w-[70%]'>
+              <input
+                type='text'
+                id='companyName'
+                name='companyName'
+                className='form-input w-full rounded-md'
+                placeholder=''
+                autoCapitalize='true'
+              />
+            </div>
+            <div className='flex'>
+              <button className='btn-solid-red flex-1 md:flex-none rounded-md' type='button'>
+                Terapkan
+              </button>
+            </div>
+          </div>
+
+          <hr className='mt-14 my-4 border-gray_r-10' />
+          <div className=''>
+            <h3 className='font-semibold mb-4'>Promo yang tersedia</h3>
+            {listVouchers?.map((item) => (
+              <div
+                key={item.id}
+                className={`border border-solid mb-5 w-full hover:cursor-pointer  p-4 `}
+              >
+                <div className={`flex gap-x-3`}>
+                  <div className=''>
+                    <Image src={item.image} alt={item.name} className={`object-cover`} />
+                  </div>
+                  <div className='w-full'>
+                    <div className='flex justify-between mb-1 items-center'>
+                      <div className=''>
+                        <h3 className='font-semibold'>{item.name}</h3>
+                        <div className='mt-1'>
+                          <span className='text-caption-1'>{item.description} </span>
+                        </div>
+                      </div>
+                      <div className=''>
+                        <button
+                          className='btn-solid-red flex-1 md:flex-none rounded-md'
+                          type='button'
+                        >
+                          Pakai
+                        </button>
+                      </div>
+                    </div>
+                    <hr className='mt-1 my-4 border-gray_r-8' />
+                    <p className='text-justify'>
+                      Kode Voucher :{' '}
+                      <span className='text-red-500 font-semibold'>{item.code}</span>
+                    </p>
+                  </div>
+                </div>
+                <div className='mt-3'>
+                  <p className='text-justify '>
+                    Voucher ini dapat anda gunakan untuk pengguna pertama{' '}
+                  </p>
+                  <hr className='mt-2 my-4 border-gray_r-8' />
+                  <div className='flex items-center'>
+                    <svg
+                      aria-hidden='true'
+                      fill='none'
+                      stroke='currentColor'
+                      stroke-width='1.5'
+                      viewBox='0 0 24 24'
+                      className='w-5 text-black'
+                    >
+                      <path
+                        d='M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z'
+                        stroke-linecap='round'
+                        stroke-linejoin='round'
+                      ></path>
+                    </svg>
+                    <span className='text-left ml-3 text-sm'>
+                      Berakhir dalam <span>{item.endTime}</span> lagi !{' '}
+                      <Link href='#' className='inline font-normal'>
+                        Lihat Detail
+                      </Link>
+                    </span>
+                  </div>
+                </div>
+              </div>
+            ))}
+          </div>
+        </div>
+      </BottomPopup>
       <MobileView>
         <div className='p-4'>
           <Alert type='info' className='text-caption-2 flex gap-x-3'>
@@ -353,6 +452,22 @@ const Checkout = () => {
               )}
             </div>
           </div>
+
+          <hr className='my-4 border-gray_r-6' />
+
+          <div className='mt-4 mb-4'>
+            <button
+              type='button'
+              onClick={() => SetBottomPopup(true)}
+              className='text-gray-900 flex items-center justify-center rounded-lg bg-white border font-medium border-gray-300  hover:bg-gray-100 py-2.5 h-[50px] w-[100%]'
+            >
+              <span className='text-left text-gray_r-9'>%</span>
+              <span className='text-left ml-3 text-sm text-gray_r-9'>
+                Hemat belanja dengan promo
+              </span>
+              <span className='text-left ml-5 text-gray_r-9'>{'>'}</span>
+            </button>
+          </div>
           {/* <p className='text-caption-2 text-gray_r-10 mb-2'>*) Belum termasuk biaya pengiriman</p> */}
           <p className='text-caption-2 text-gray_r-10 leading-5'>
             Dengan melakukan pembelian melalui website Indoteknik, saya menyetujui{' '}
@@ -581,12 +696,19 @@ const Checkout = () => {
 
               <hr className='my-4 border-gray_r-6' />
 
-              <button
-                className='w-full btn-yellow mt-4 mb-4'
-                onClick={checkout}
-              >
-                <span className='text-sm'>{'Hemat belanja dengan promo >'}</span>
-              </button>
+              <div className='mt-4 mb-4'>
+                <button
+                  type='button'
+                  onClick={() => SetBottomPopup(true)}
+                  className='text-gray-900 flex items-center justify-center rounded-lg bg-white border font-medium border-gray-300  hover:bg-gray-100 py-2.5 h-[50px] w-[100%]'
+                >
+                  <span className='text-left text-gray_r-9'>%</span>
+                  <span className='text-left ml-3 text-sm text-gray_r-9'>
+                    Hemat belanja dengan promo
+                  </span>
+                  <span className='text-left ml-5 text-gray_r-9'>{'>'}</span>
+                </button>
+              </div>
 
               <p className='text-caption-2 text-gray_r-11 leading-5'>
                 Dengan melakukan pembelian melalui website Indoteknik, saya menyetujui{' '}
-- 
cgit v1.2.3


From dc334fa49ad13959b6a0d572fd56a4cde38176fa Mon Sep 17 00:00:00 2001
From: "HATEC\\SPVDEV001" <tri.susilo@altama.co.id>
Date: Tue, 11 Jul 2023 15:29:03 +0700
Subject: get voucher

---
 src/lib/checkout/components/Checkout.jsx | 230 ++++++++++++++++++++++---------
 1 file changed, 163 insertions(+), 67 deletions(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 629ec5bc..dcc00eb8 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -24,7 +24,7 @@ import whatsappUrl from '@/core/utils/whatsappUrl'
 import { createSlug } from '@/core/utils/slug'
 import BottomPopup from '@/core/components/elements/Popup/BottomPopup'
 import { gtagPurchase } from '@/core/utils/googleTag'
-import getVoucher from '../api/getVoucher'
+import { findVoucher, getVoucher } from '../api/getVoucher'
 
 const SELF_PICKUP_ID = 32
 
@@ -84,11 +84,22 @@ const Checkout = () => {
   const [etdFix, setEtdFix] = useState(null)
   const [bottomPopup, SetBottomPopup] = useState(null)
   const [listVouchers, SetListVoucher] = useState(null)
+  const [activeVoucher, SetActiveVoucher] = useState(null)
+  const [discountVoucher, SetDiscountVoucher] = useState(null)
+  const [codeVoucher, SetCodeVoucher] = useState(null)
 
   const voucher = async () => {
     let dataVoucher = await getVoucher()
     SetListVoucher(dataVoucher)
   }
+  const VoucherCode = async (code) => {
+    let dataVoucher = await findVoucher(code)
+    if (!dataVoucher) return
+
+    let addNewLine = dataVoucher[0]
+    SetListVoucher((prevList) => [addNewLine, ...prevList])
+    SetActiveVoucher(addNewLine.code)
+  }
   useEffect(() => {
     const loadExpedisi = async () => {
       let dataExpedisi = await ExpedisiList()
@@ -103,7 +114,27 @@ const Checkout = () => {
     voucher()
   }, [])
 
-  console.log('ini voucher', listVouchers)
+  useEffect(() => {
+    if (!listVouchers) return
+    if (!activeVoucher) return
+
+    let dataVoucherIndex = listVouchers.findIndex((vocuher) => vocuher.code == activeVoucher)
+    let dataActiveVocuher = listVouchers[dataVoucherIndex]
+    let countDiscount = 0
+
+    if (dataActiveVocuher.discountType === 'percentage') {
+      countDiscount = (totalAmount - totalDiscountAmount) * 0.1
+      if (
+        dataActiveVocuher.maxDiscountAmount > 0 &&
+        countDiscount > dataActiveVocuher.maxDiscountAmount
+      ) {
+        countDiscount = dataActiveVocuher.maxDiscountAmount
+      }
+    } else {
+      countDiscount = dataActiveVocuher.discountAmount
+    }
+    SetDiscountVoucher(countDiscount)
+  }, [activeVoucher, listVouchers])
 
   useEffect(() => {
     const loadProducts = async () => {
@@ -266,92 +297,137 @@ const Checkout = () => {
       event_callback: midtrans
     })
   }
+
+  const handlingActivateCode = async () => {
+    VoucherCode(codeVoucher)
+  }
   const taxTotal = (totalAmount - totalDiscountAmount) * 0.11
 
   return (
     <>
-      <BottomPopup active={bottomPopup} close={() => SetBottomPopup(false)} title='Gunakan Promo'>
+      <BottomPopup
+        className='!w-[40%]'
+        active={bottomPopup}
+        close={() => SetBottomPopup(false)}
+        title='Gunakan Promo'
+      >
         <div className='row'>
           <div className='flex justify-between items-center'>
             <div className='flex w-[70%]'>
               <input
                 type='text'
-                id='companyName'
-                name='companyName'
+                id='uniqCode'
+                name='uniqCode'
                 className='form-input w-full rounded-md'
-                placeholder=''
+                placeholder='Kode Voucher'
                 autoCapitalize='true'
+                onChange={(e) => SetCodeVoucher(e.target.value)}
               />
             </div>
             <div className='flex'>
-              <button className='btn-solid-red flex-1 md:flex-none rounded-md' type='button'>
+              <button
+                className='btn-solid-red flex-1 md:flex-none rounded-md'
+                type='button'
+                onClick={() => handlingActivateCode()}
+              >
                 Terapkan
               </button>
             </div>
           </div>
+          {codeVoucher && activeVoucher == codeVoucher ? (
+            <div className='mt-2'>
+              <span className='text-caption-1 mt-2 text-green-600'>
+                Voucher berhasil ditambahkan{' '}
+              </span>
+            </div>
+          ) : (
+            <div className='mt-2'>
+              <span className='text-caption-1 mt-2 text-green-600'>
+                Kode voucher salah / sudah tidak berlaku lagi. Coba voucher lainnya, ya.
+              </span>
+            </div>
+          )}
 
           <hr className='mt-14 my-4 border-gray_r-10' />
           <div className=''>
             <h3 className='font-semibold mb-4'>Promo yang tersedia</h3>
             {listVouchers?.map((item) => (
-              <div
-                key={item.id}
-                className={`border border-solid mb-5 w-full hover:cursor-pointer  p-4 `}
-              >
-                <div className={`flex gap-x-3`}>
-                  <div className=''>
-                    <Image src={item.image} alt={item.name} className={`object-cover`} />
-                  </div>
-                  <div className='w-full'>
-                    <div className='flex justify-between mb-1 items-center'>
-                      <div className=''>
-                        <h3 className='font-semibold'>{item.name}</h3>
-                        <div className='mt-1'>
-                          <span className='text-caption-1'>{item.description} </span>
+              <div key={item.id} className='relative'>
+                {totalAmount - totalDiscountAmount < item.minPurchaseAmount && (
+                  <div className='absolute w-full h-full bg-gray_r-3/40 top-0 left-0' />
+                )}
+
+                <div className={`border border-solid mb-5 w-full hover:cursor-pointer  p-4 `}>
+                  <div className={`flex gap-x-3`}>
+                    <div className=''>
+                      <Image src={item.image} alt={item.name} className={`object-cover`} />
+                    </div>
+                    <div className='w-full'>
+                      <div className='flex justify-between mb-1 items-center'>
+                        <div className=''>
+                          <h3 className='font-semibold'>{item.name}</h3>
+                          <div className='mt-1'>
+                            <span className='text-sm line-clamp-2 '>{item.description} </span>
+                          </div>
+                        </div>
+                        <div className='flex justify-end'>
+                          <button
+                            className='btn-solid-red w-[102px]  md:flex-none rounded-md'
+                            type='button'
+                            onClick={() => SetActiveVoucher(item.code)}
+                            disabled={activeVoucher === item.code}
+                          >
+                            {activeVoucher === item.code ? 'Terpakai' : 'Pakai'}
+                          </button>
                         </div>
                       </div>
-                      <div className=''>
-                        <button
-                          className='btn-solid-red flex-1 md:flex-none rounded-md'
-                          type='button'
-                        >
-                          Pakai
-                        </button>
+                      <hr className='mt-3 my-4 border-gray_r-8' />
+                      <div className='flex justify-between items-center'>
+                        <p className='text-justify text-sm'>
+                          Kode Voucher :{' '}
+                          <span className='text-red-500 font-semibold'>{item.code}</span>
+                        </p>
+                        <p className='text-sm'>
+                          {activeVoucher === item.code && (
+                            <span className='text-caption-1 text-green-600'>
+                              Voucher digunakan{' '}
+                            </span>
+                          )}
+                        </p>
                       </div>
                     </div>
-                    <hr className='mt-1 my-4 border-gray_r-8' />
-                    <p className='text-justify'>
-                      Kode Voucher :{' '}
-                      <span className='text-red-500 font-semibold'>{item.code}</span>
-                    </p>
                   </div>
-                </div>
-                <div className='mt-3'>
-                  <p className='text-justify '>
-                    Voucher ini dapat anda gunakan untuk pengguna pertama{' '}
-                  </p>
-                  <hr className='mt-2 my-4 border-gray_r-8' />
-                  <div className='flex items-center'>
-                    <svg
-                      aria-hidden='true'
-                      fill='none'
-                      stroke='currentColor'
-                      stroke-width='1.5'
-                      viewBox='0 0 24 24'
-                      className='w-5 text-black'
-                    >
-                      <path
-                        d='M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z'
-                        stroke-linecap='round'
-                        stroke-linejoin='round'
-                      ></path>
-                    </svg>
-                    <span className='text-left ml-3 text-sm'>
-                      Berakhir dalam <span>{item.endTime}</span> lagi !{' '}
-                      <Link href='#' className='inline font-normal'>
-                        Lihat Detail
-                      </Link>
-                    </span>
+                  <div className='mt-3'>
+                    <p className='text-justify text-sm '>
+                      {totalAmount - totalDiscountAmount < item.minPurchaseAmount
+                        ? 'Tambah ' +
+                          currencyFormat(
+                            item.minPurchaseAmount - (totalAmount - totalDiscountAmount)
+                          ) +
+                          ' untuk pakai promo ini'
+                        : 'Voucher ini dapat anda gunakan untuk pengguna pertama'}
+                    </p>
+                    <hr className='mt-2 my-4 border-gray_r-8' />
+                    <div className='flex items-center'>
+                      <svg
+                        aria-hidden='true'
+                        fill='none'
+                        stroke='currentColor'
+                        stroke-width='1.5'
+                        viewBox='0 0 24 24'
+                        className='w-5 text-black'
+                      >
+                        <path
+                          d='M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z'
+                          stroke-linecap='round'
+                          stroke-linejoin='round'
+                        ></path>
+                      </svg>
+                      <span className='text-left ml-3 text-sm '>
+                        Berakhir dalam <span className='text-red-600'>{item.remainingTime}</span>{' '}
+                        lagi{' '}
+                      </span>
+                    </div>
                   </div>
                 </div>
               </div>
@@ -462,9 +538,18 @@ const Checkout = () => {
               className='text-gray-900 flex items-center justify-center rounded-lg bg-white border font-medium border-gray-300  hover:bg-gray-100 py-2.5 h-[50px] w-[100%]'
             >
               <span className='text-left text-gray_r-9'>%</span>
-              <span className='text-left ml-3 text-sm text-gray_r-9'>
-                Hemat belanja dengan promo
-              </span>
+              {activeVoucher ? (
+                <div>
+                  <span className='text-left ml-3 text-sm text-black font-semibold'>
+                    Kamu dapat potogan {discountVoucher}
+                  </span>
+                  <span className='text-green-500 text-caption-1'>Voucher berhasil digunakan</span>
+                </div>
+              ) : (
+                <span className='text-left ml-3 text-sm text-gray_r-9'>
+                  Hemat belanja dengan promo
+                </span>
+              )}
               <span className='text-left ml-5 text-gray_r-9'>{'>'}</span>
             </button>
           </div>
@@ -700,12 +785,23 @@ const Checkout = () => {
                 <button
                   type='button'
                   onClick={() => SetBottomPopup(true)}
-                  className='text-gray-900 flex items-center justify-center rounded-lg bg-white border font-medium border-gray-300  hover:bg-gray-100 py-2.5 h-[50px] w-[100%]'
+                  className='text-gray-900 p-2 flex items-center justify-between  rounded-lg bg-white border font-medium border-gray-300  hover:bg-gray-100 py-2.5 h-[50px] w-[100%]'
                 >
                   <span className='text-left text-gray_r-9'>%</span>
-                  <span className='text-left ml-3 text-sm text-gray_r-9'>
-                    Hemat belanja dengan promo
-                  </span>
+                  {activeVoucher ? (
+                    <div className='row'>
+                      <div className='text-left text-sm text-black font-semibold'>
+                        Hemat {currencyFormat(discountVoucher)}
+                      </div>
+                      <div className='text-left mt-1 text-green-600 text-xs'>
+                        Voucher berhasil digunakan
+                      </div>
+                    </div>
+                  ) : (
+                    <span className='text-left text-sm text-gray_r-9'>
+                      Hemat belanja dengan promo
+                    </span>
+                  )}
                   <span className='text-left ml-5 text-gray_r-9'>{'>'}</span>
                 </button>
               </div>
-- 
cgit v1.2.3


From b3855694c2723168d1c7ad949d892649fff220b8 Mon Sep 17 00:00:00 2001
From: "HATEC\\SPVDEV001" <tri.susilo@altama.co.id>
Date: Tue, 11 Jul 2023 17:05:43 +0700
Subject: find voucher

---
 src/lib/checkout/components/Checkout.jsx | 40 ++++++++++++++++++++++++++++----
 1 file changed, 35 insertions(+), 5 deletions(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index dcc00eb8..f19b6054 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -87,6 +87,8 @@ const Checkout = () => {
   const [activeVoucher, SetActiveVoucher] = useState(null)
   const [discountVoucher, SetDiscountVoucher] = useState(null)
   const [codeVoucher, SetCodeVoucher] = useState(null)
+  const [findCodeVoucher, SetFindVoucher] = useState(null)
+  const [selisihHargaCode, SetSelisihHargaCode] = useState(null)
 
   const voucher = async () => {
     let dataVoucher = await getVoucher()
@@ -94,9 +96,21 @@ const Checkout = () => {
   }
   const VoucherCode = async (code) => {
     let dataVoucher = await findVoucher(code)
-    if (!dataVoucher) return
+    if (dataVoucher.length <= 0) {
+      SetFindVoucher(1)
+      return
+    }
 
     let addNewLine = dataVoucher[0]
+    if (totalAmount - totalDiscountAmount < addNewLine.minPurchaseAmount) {
+      SetSelisihHargaCode(
+        currencyFormat(addNewLine.minPurchaseAmount - (totalAmount - totalDiscountAmount))
+      )
+      SetFindVoucher(2)
+      return
+    } else {
+      SetFindVoucher(3)
+    }
     SetListVoucher((prevList) => [addNewLine, ...prevList])
     SetActiveVoucher(addNewLine.code)
   }
@@ -301,6 +315,14 @@ const Checkout = () => {
   const handlingActivateCode = async () => {
     VoucherCode(codeVoucher)
   }
+
+  const handleUseVoucher = async (code) => {
+    SetActiveVoucher(code)
+    SetFindVoucher(null)
+    // document.getElementById('uniqCode').val('')
+  }
+  
+  console.log('ini find voucher', findCodeVoucher)
   const taxTotal = (totalAmount - totalDiscountAmount) * 0.11
 
   return (
@@ -334,19 +356,27 @@ const Checkout = () => {
               </button>
             </div>
           </div>
-          {codeVoucher && activeVoucher == codeVoucher ? (
+          {findCodeVoucher === 3 && activeVoucher === codeVoucher && (
             <div className='mt-2'>
               <span className='text-caption-1 mt-2 text-green-600'>
                 Voucher berhasil ditambahkan{' '}
               </span>
             </div>
-          ) : (
+          )}
+          {findCodeVoucher === 1 && (
             <div className='mt-2'>
-              <span className='text-caption-1 mt-2 text-green-600'>
+              <span className='text-caption-1 mt-2 text-red-600'>
                 Kode voucher salah / sudah tidak berlaku lagi. Coba voucher lainnya, ya.
               </span>
             </div>
           )}
+          {findCodeVoucher === 2 && (
+            <div className='mt-2'>
+              <span className='text-caption-1 mt-2 text-red-600'>
+                {'Tambah ' + selisihHargaCode + ' untuk pakai promo ini'}
+              </span>
+            </div>
+          )}
 
           <hr className='mt-14 my-4 border-gray_r-10' />
           <div className=''>
@@ -374,7 +404,7 @@ const Checkout = () => {
                           <button
                             className='btn-solid-red w-[102px]  md:flex-none rounded-md'
                             type='button'
-                            onClick={() => SetActiveVoucher(item.code)}
+                            onClick={() => handleUseVoucher(item.code)}
                             disabled={activeVoucher === item.code}
                           >
                             {activeVoucher === item.code ? 'Terpakai' : 'Pakai'}
-- 
cgit v1.2.3


From 578456cacf1ec5106854277222a6f7a9f4790bd5 Mon Sep 17 00:00:00 2001
From: "HATEC\\SPVDEV001" <tri.susilo@altama.co.id>
Date: Wed, 12 Jul 2023 10:48:19 +0700
Subject: checout mobile

---
 src/lib/checkout/components/Checkout.jsx | 113 ++++++++++++++++++++++---------
 1 file changed, 82 insertions(+), 31 deletions(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index f19b6054..1763ae5b 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -85,10 +85,11 @@ const Checkout = () => {
   const [bottomPopup, SetBottomPopup] = useState(null)
   const [listVouchers, SetListVoucher] = useState(null)
   const [activeVoucher, SetActiveVoucher] = useState(null)
-  const [discountVoucher, SetDiscountVoucher] = useState(null)
+  const [discountVoucher, SetDiscountVoucher] = useState(0)
   const [codeVoucher, SetCodeVoucher] = useState(null)
   const [findCodeVoucher, SetFindVoucher] = useState(null)
   const [selisihHargaCode, SetSelisihHargaCode] = useState(null)
+  const [buttonTerapkan, SetButtonTerapkan] = useState(false)
 
   const voucher = async () => {
     let dataVoucher = await getVoucher()
@@ -102,6 +103,8 @@ const Checkout = () => {
     }
 
     let addNewLine = dataVoucher[0]
+    let checkList = listVouchers.findIndex((voucher) => voucher.code == addNewLine.code)
+    if(checkList > 0) return
     if (totalAmount - totalDiscountAmount < addNewLine.minPurchaseAmount) {
       SetSelisihHargaCode(
         currencyFormat(addNewLine.minPurchaseAmount - (totalAmount - totalDiscountAmount))
@@ -110,6 +113,7 @@ const Checkout = () => {
       return
     } else {
       SetFindVoucher(3)
+      SetButtonTerapkan(true)
     }
     SetListVoucher((prevList) => [addNewLine, ...prevList])
     SetActiveVoucher(addNewLine.code)
@@ -132,7 +136,7 @@ const Checkout = () => {
     if (!listVouchers) return
     if (!activeVoucher) return
 
-    let dataVoucherIndex = listVouchers.findIndex((vocuher) => vocuher.code == activeVoucher)
+    let dataVoucherIndex = listVouchers.findIndex((voucher) => voucher.code == activeVoucher)
     let dataActiveVocuher = listVouchers[dataVoucherIndex]
     let countDiscount = 0
 
@@ -277,6 +281,7 @@ const Checkout = () => {
       delivery_amount: biayaKirim,
       carrier_id: selectedCarrierId,
       delivery_service_type: selectedExpedisiService,
+      voucher: activeVoucher,
       type: 'sale_order'
     }
     if (poNumber.current.value) data.po_number = poNumber.current.value
@@ -319,16 +324,21 @@ const Checkout = () => {
   const handleUseVoucher = async (code) => {
     SetActiveVoucher(code)
     SetFindVoucher(null)
-    // document.getElementById('uniqCode').val('')
+    document.getElementById('uniqCode').value = ''
+    SetButtonTerapkan(false)
   }
-  
-  console.log('ini find voucher', findCodeVoucher)
-  const taxTotal = (totalAmount - totalDiscountAmount) * 0.11
+
+  const onChangeCodeVoucher = async (e) => {
+    SetCodeVoucher(e.target.value)
+    SetButtonTerapkan(false)
+  }
+
+  const taxTotal = (totalAmount - totalDiscountAmount - discountVoucher) * 0.11
 
   return (
     <>
       <BottomPopup
-        className='!w-[40%]'
+        className='w-full md:!w-[40%] !min-h-[350px]'
         active={bottomPopup}
         close={() => SetBottomPopup(false)}
         title='Gunakan Promo'
@@ -343,7 +353,7 @@ const Checkout = () => {
                 className='form-input w-full rounded-md'
                 placeholder='Kode Voucher'
                 autoCapitalize='true'
-                onChange={(e) => SetCodeVoucher(e.target.value)}
+                onChange={(e) => onChangeCodeVoucher(e)}
               />
             </div>
             <div className='flex'>
@@ -351,6 +361,7 @@ const Checkout = () => {
                 className='btn-solid-red flex-1 md:flex-none rounded-md'
                 type='button'
                 onClick={() => handlingActivateCode()}
+                disabled={buttonTerapkan}
               >
                 Terapkan
               </button>
@@ -380,7 +391,16 @@ const Checkout = () => {
 
           <hr className='mt-14 my-4 border-gray_r-10' />
           <div className=''>
-            <h3 className='font-semibold mb-4'>Promo yang tersedia</h3>
+            {!listVouchers ? (
+              <div className='flex items-center justify-center mt-4 mb-4'>
+                <div className='text-center'>
+                  <h1 className='font-bold mb-4'>Tidak ada voucher tersedia</h1>
+                  <p className='text-gray-500'>Maaf, saat ini tidak ada voucher yang tersedia.</p>
+                </div>
+              </div>
+            ) : (
+              <h3 className='font-semibold mb-4'>Promo yang tersedia</h3>
+            )}
             {listVouchers?.map((item) => (
               <div key={item.id} className='relative'>
                 {totalAmount - totalDiscountAmount < item.minPurchaseAmount && (
@@ -389,7 +409,7 @@ const Checkout = () => {
 
                 <div className={`border border-solid mb-5 w-full hover:cursor-pointer  p-4 `}>
                   <div className={`flex gap-x-3`}>
-                    <div className=''>
+                    <div className='hidden md:w-auto md:block'>
                       <Image src={item.image} alt={item.name} className={`object-cover`} />
                     </div>
                     <div className='w-full'>
@@ -528,9 +548,15 @@ const Checkout = () => {
               <div>{currencyFormat(totalAmount)}</div>
             </div>
             <div className='flex gap-x-2 justify-between'>
-              <div className='text-gray_r-11'>Total Diskon</div>
+              <div className='text-gray_r-11'>Diskon Produk</div>
               <div className='text-danger-500'>- {currencyFormat(totalDiscountAmount)}</div>
             </div>
+            {activeVoucher && (
+              <div className='flex gap-x-2 justify-between'>
+                <div className='text-gray_r-11'>Diskon Voucher</div>
+                <div className='text-danger-500'>- {currencyFormat(discountVoucher)}</div>
+              </div>
+            )}
             <div className='flex gap-x-2 justify-between'>
               <div className='text-gray_r-11'>Subtotal</div>
               <div>{currencyFormat(totalAmount - totalDiscountAmount)}</div>
@@ -552,7 +578,8 @@ const Checkout = () => {
             <div className='font-semibold text-gray_r-12'>
               {currencyFormat(
                 totalAmount -
-                  totalDiscountAmount +
+                  totalDiscountAmount -
+                  discountVoucher +
                   taxTotal +
                   Math.round(parseInt(biayaKirim * 1.1) / 1000) * 1000
               )}
@@ -565,22 +592,33 @@ const Checkout = () => {
             <button
               type='button'
               onClick={() => SetBottomPopup(true)}
-              className='text-gray-900 flex items-center justify-center rounded-lg bg-white border font-medium border-gray-300  hover:bg-gray-100 py-2.5 h-[50px] w-[100%]'
+              className='text-gray-900 p-4 flex items-center justify-between  rounded-lg bg-white border font-medium border-gray-300  hover:bg-gray-100 py-2.5 h-[50px] w-[100%]'
             >
-              <span className='text-left text-gray_r-9'>%</span>
-              {activeVoucher ? (
-                <div>
-                  <span className='text-left ml-3 text-sm text-black font-semibold'>
-                    Kamu dapat potogan {discountVoucher}
-                  </span>
-                  <span className='text-green-500 text-caption-1'>Voucher berhasil digunakan</span>
-                </div>
-              ) : (
-                <span className='text-left ml-3 text-sm text-gray_r-9'>
-                  Hemat belanja dengan promo
+              <div className='flex items-center justify-between gap-x-3'>
+                <span className='text-left text-gray_r-9'>
+                  <Image
+                    src={'/images/DISKONICON.svg'}
+                    alt={''}
+                    className='object-contain object-center h-6 w-full rounded-md'
+                  />
                 </span>
-              )}
-              <span className='text-left ml-5 text-gray_r-9'>{'>'}</span>
+                {activeVoucher ? (
+                  <div className=''>
+                    <div className='text-left text-sm text-black font-semibold'>
+                      Potongan Senilai {currencyFormat(discountVoucher)}
+                    </div>
+                    <div className='text-left mt-1 text-green-600 text-xs'>
+                      Voucher berhasil digunakan
+                    </div>
+                  </div>
+                ) : (
+                  <span className='text-left text-sm text-gray_r-9'>
+                    Hemat belanja dengan promo
+                  </span>
+                )}
+              </div>
+
+              <span className='text-left ml-1 text-gray_r-9'>{'>'}</span>
             </button>
           </div>
           {/* <p className='text-caption-2 text-gray_r-10 mb-2'>*) Belum termasuk biaya pengiriman</p> */}
@@ -778,9 +816,15 @@ const Checkout = () => {
                   <div className='text-gray_r-11'>Total Diskon</div>
                   <div className='text-danger-500'>- {currencyFormat(totalDiscountAmount)}</div>
                 </div>
+                {activeVoucher && (
+                  <div className='flex gap-x-2 justify-between'>
+                    <div className='text-gray_r-11'>Diskon Voucher</div>
+                    <div className='text-danger-500'>- {currencyFormat(discountVoucher)}</div>
+                  </div>
+                )}
                 <div className='flex gap-x-2 justify-between'>
                   <div className='text-gray_r-11'>Subtotal</div>
-                  <div>{currencyFormat(totalAmount - totalDiscountAmount)}</div>
+                  <div>{currencyFormat(totalAmount - totalDiscountAmount - discountVoucher)}</div>
                 </div>
                 <div className='flex gap-x-2 justify-between'>
                   <div className='text-gray_r-11'>PPN 11%</div>
@@ -802,7 +846,8 @@ const Checkout = () => {
                 <div className='font-semibold text-gray_r-12'>
                   {currencyFormat(
                     totalAmount -
-                      totalDiscountAmount +
+                      totalDiscountAmount -
+                      discountVoucher +
                       taxTotal +
                       Math.round(parseInt(biayaKirim * 1.1) / 1000) * 1000
                   )}
@@ -815,9 +860,15 @@ const Checkout = () => {
                 <button
                   type='button'
                   onClick={() => SetBottomPopup(true)}
-                  className='text-gray-900 p-2 flex items-center justify-between  rounded-lg bg-white border font-medium border-gray-300  hover:bg-gray-100 py-2.5 h-[50px] w-[100%]'
+                  className='text-gray-900 p-3 flex items-center justify-between  rounded-lg bg-white border font-medium border-gray-300  hover:bg-gray-100 py-2.5 h-[50px] w-[100%]'
                 >
-                  <span className='text-left text-gray_r-9'>%</span>
+                  <span className='text-left text-gray_r-9'>
+                    <Image
+                      src={'/images/DISKONICON.svg'}
+                      alt={''}
+                      className='object-contain object-center h-6 w-full rounded-md'
+                    />
+                  </span>
                   {activeVoucher ? (
                     <div className='row'>
                       <div className='text-left text-sm text-black font-semibold'>
@@ -832,7 +883,7 @@ const Checkout = () => {
                       Hemat belanja dengan promo
                     </span>
                   )}
-                  <span className='text-left ml-5 text-gray_r-9'>{'>'}</span>
+                  <span className='text-left ml-1 text-gray_r-9'>{'>'}</span>
                 </button>
               </div>
 
-- 
cgit v1.2.3


From c2be9e77d22840eb33142ea2e694c3278613c4ef Mon Sep 17 00:00:00 2001
From: "HATEC\\SPVDEV001" <tri.susilo@altama.co.id>
Date: Wed, 12 Jul 2023 11:49:53 +0700
Subject: checkout

---
 src/lib/checkout/components/Checkout.jsx | 80 ++++++++++++++++++--------------
 1 file changed, 46 insertions(+), 34 deletions(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 1763ae5b..6990b420 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -104,7 +104,7 @@ const Checkout = () => {
 
     let addNewLine = dataVoucher[0]
     let checkList = listVouchers.findIndex((voucher) => voucher.code == addNewLine.code)
-    if(checkList > 0) return
+    if (checkList > 0) return
     if (totalAmount - totalDiscountAmount < addNewLine.minPurchaseAmount) {
       SetSelisihHargaCode(
         currencyFormat(addNewLine.minPurchaseAmount - (totalAmount - totalDiscountAmount))
@@ -132,25 +132,34 @@ const Checkout = () => {
     voucher()
   }, [])
 
-  useEffect(() => {
-    if (!listVouchers) return
-    if (!activeVoucher) return
+  const hitungDiscountVoucher = (code) => {
+    let dataVoucherIndex = listVouchers.findIndex((voucher) => voucher.code == code)
+    let dataActiveVoucher = listVouchers[dataVoucherIndex]
 
-    let dataVoucherIndex = listVouchers.findIndex((voucher) => voucher.code == activeVoucher)
-    let dataActiveVocuher = listVouchers[dataVoucherIndex]
+    console.log('ini data active', dataActiveVoucher, code, dataVoucherIndex)
     let countDiscount = 0
 
-    if (dataActiveVocuher.discountType === 'percentage') {
+    if (dataActiveVoucher.discountType === 'percentage') {
       countDiscount = (totalAmount - totalDiscountAmount) * 0.1
       if (
-        dataActiveVocuher.maxDiscountAmount > 0 &&
-        countDiscount > dataActiveVocuher.maxDiscountAmount
+        dataActiveVoucher.maxDiscountAmount > 0 &&
+        countDiscount > dataActiveVoucher.maxDiscountAmount
       ) {
-        countDiscount = dataActiveVocuher.maxDiscountAmount
+        countDiscount = dataActiveVoucher.maxDiscountAmount
       }
     } else {
-      countDiscount = dataActiveVocuher.discountAmount
+      countDiscount = dataActiveVoucher.discountAmount
     }
+
+    return countDiscount
+  }
+
+  useEffect(() => {
+    if (!listVouchers) return
+    if (!activeVoucher) return
+
+    const countDiscount = hitungDiscountVoucher(activeVoucher)
+
     SetDiscountVoucher(countDiscount)
   }, [activeVoucher, listVouchers])
 
@@ -417,7 +426,7 @@ const Checkout = () => {
                         <div className=''>
                           <h3 className='font-semibold'>{item.name}</h3>
                           <div className='mt-1'>
-                            <span className='text-sm line-clamp-2 '>{item.description} </span>
+                            <span className='text-sm line-clamp-3'>{item.description} </span>
                           </div>
                         </div>
                         <div className='flex justify-end'>
@@ -455,7 +464,8 @@ const Checkout = () => {
                             item.minPurchaseAmount - (totalAmount - totalDiscountAmount)
                           ) +
                           ' untuk pakai promo ini'
-                        : 'Voucher ini dapat anda gunakan untuk pengguna pertama'}
+                        : 'Potensi potongan sebesar ' +
+                          currencyFormat(hitungDiscountVoucher(item.code))}
                     </p>
                     <hr className='mt-2 my-4 border-gray_r-8' />
                     <div className='flex items-center'>
@@ -559,7 +569,7 @@ const Checkout = () => {
             )}
             <div className='flex gap-x-2 justify-between'>
               <div className='text-gray_r-11'>Subtotal</div>
-              <div>{currencyFormat(totalAmount - totalDiscountAmount)}</div>
+              <div>{currencyFormat(totalAmount - totalDiscountAmount - discountVoucher)}</div>
             </div>
             <div className='flex gap-x-2 justify-between'>
               <div className='text-gray_r-11'>PPN 11%</div>
@@ -862,27 +872,29 @@ const Checkout = () => {
                   onClick={() => SetBottomPopup(true)}
                   className='text-gray-900 p-3 flex items-center justify-between  rounded-lg bg-white border font-medium border-gray-300  hover:bg-gray-100 py-2.5 h-[50px] w-[100%]'
                 >
-                  <span className='text-left text-gray_r-9'>
-                    <Image
-                      src={'/images/DISKONICON.svg'}
-                      alt={''}
-                      className='object-contain object-center h-6 w-full rounded-md'
-                    />
-                  </span>
-                  {activeVoucher ? (
-                    <div className='row'>
-                      <div className='text-left text-sm text-black font-semibold'>
-                        Hemat {currencyFormat(discountVoucher)}
-                      </div>
-                      <div className='text-left mt-1 text-green-600 text-xs'>
-                        Voucher berhasil digunakan
-                      </div>
-                    </div>
-                  ) : (
-                    <span className='text-left text-sm text-gray_r-9'>
-                      Hemat belanja dengan promo
+                  <div className='flex items-center justify-between gap-x-3'>
+                    <span className='text-left text-gray_r-9'>
+                      <Image
+                        src={'/images/DISKONICON.svg'}
+                        alt={''}
+                        className='object-contain object-center h-6 w-full rounded-md'
+                      />
                     </span>
-                  )}
+                    {activeVoucher ? (
+                      <div className=''>
+                        <div className='text-left text-sm text-black font-semibold'>
+                          Hemat {currencyFormat(discountVoucher)}
+                        </div>
+                        <div className='text-left mt-1 text-green-600 text-xs'>
+                          Voucher berhasil digunakan
+                        </div>
+                      </div>
+                    ) : (
+                      <span className='text-left text-sm text-gray_r-9'>
+                        Hemat belanja dengan promo
+                      </span>
+                    )}
+                  </div>
                   <span className='text-left ml-1 text-gray_r-9'>{'>'}</span>
                 </button>
               </div>
-- 
cgit v1.2.3


From 3f890e6d482cefba37014e021cb4c2b8d5de2a9d Mon Sep 17 00:00:00 2001
From: "HATEC\\SPVDEV001" <tri.susilo@altama.co.id>
Date: Wed, 12 Jul 2023 14:31:07 +0700
Subject: cr

---
 src/lib/checkout/components/Checkout.jsx | 34 ++++++++++++++++----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 6990b420..27cdda76 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -17,6 +17,7 @@ import { useRouter } from 'next/router'
 import VariantGroupCard from '@/lib/variant/components/VariantGroupCard'
 import axios from 'axios'
 import Image from '@/core/components/elements/Image/Image'
+import imageNext from 'next/image'
 import MobileView from '@/core/components/views/MobileView'
 import DesktopView from '@/core/components/views/DesktopView'
 import ExpedisiList from '../api/ExpedisiList'
@@ -136,15 +137,11 @@ const Checkout = () => {
     let dataVoucherIndex = listVouchers.findIndex((voucher) => voucher.code == code)
     let dataActiveVoucher = listVouchers[dataVoucherIndex]
 
-    console.log('ini data active', dataActiveVoucher, code, dataVoucherIndex)
     let countDiscount = 0
 
     if (dataActiveVoucher.discountType === 'percentage') {
-      countDiscount = (totalAmount - totalDiscountAmount) * 0.1
-      if (
-        dataActiveVoucher.maxDiscountAmount > 0 &&
-        countDiscount > dataActiveVoucher.maxDiscountAmount
-      ) {
+      countDiscount = (totalAmount - totalDiscountAmount) * (dataActiveVoucher.discountAmount/100)
+      if (dataActiveVoucher.maxDiscountAmount > 0 && countDiscount > dataActiveVoucher.maxDiscountAmount) {
         countDiscount = dataActiveVoucher.maxDiscountAmount
       }
     } else {
@@ -331,10 +328,14 @@ const Checkout = () => {
   }
 
   const handleUseVoucher = async (code) => {
-    SetActiveVoucher(code)
-    SetFindVoucher(null)
-    document.getElementById('uniqCode').value = ''
-    SetButtonTerapkan(false)
+    if(code === activeVoucher){
+      SetActiveVoucher(null)
+    }else{
+      SetActiveVoucher(code)
+      SetFindVoucher(null)
+      document.getElementById('uniqCode').value = ''
+      SetButtonTerapkan(false)
+    }
   }
 
   const onChangeCodeVoucher = async (e) => {
@@ -354,7 +355,7 @@ const Checkout = () => {
       >
         <div className='row'>
           <div className='flex justify-between items-center'>
-            <div className='flex w-[70%]'>
+            <div className='flex md:w-[70%]'>
               <input
                 type='text'
                 id='uniqCode'
@@ -398,7 +399,7 @@ const Checkout = () => {
             </div>
           )}
 
-          <hr className='mt-14 my-4 border-gray_r-10' />
+          <hr className='mt-10 my-4 border-gray_r-10' />
           <div className=''>
             {!listVouchers ? (
               <div className='flex items-center justify-center mt-4 mb-4'>
@@ -418,7 +419,7 @@ const Checkout = () => {
 
                 <div className={`border border-solid mb-5 w-full hover:cursor-pointer  p-4 `}>
                   <div className={`flex gap-x-3`}>
-                    <div className='hidden md:w-auto md:block'>
+                    <div className='hidden md:w-[250px] md:block md:h-[150px]'>
                       <Image src={item.image} alt={item.name} className={`object-cover`} />
                     </div>
                     <div className='w-full'>
@@ -434,9 +435,8 @@ const Checkout = () => {
                             className='btn-solid-red w-[102px]  md:flex-none rounded-md'
                             type='button'
                             onClick={() => handleUseVoucher(item.code)}
-                            disabled={activeVoucher === item.code}
                           >
-                            {activeVoucher === item.code ? 'Terpakai' : 'Pakai'}
+                            {activeVoucher === item.code ? 'Batal' : 'Pakai'}
                           </button>
                         </div>
                       </div>
@@ -609,7 +609,7 @@ const Checkout = () => {
                   <Image
                     src={'/images/DISKONICON.svg'}
                     alt={''}
-                    className='object-contain object-center h-6 w-full rounded-md'
+                    className='object-contain object-center h-6 rounded-md'
                   />
                 </span>
                 {activeVoucher ? (
@@ -823,7 +823,7 @@ const Checkout = () => {
                   <div>{currencyFormat(totalAmount)}</div>
                 </div>
                 <div className='flex gap-x-2 justify-between'>
-                  <div className='text-gray_r-11'>Total Diskon</div>
+                  <div className='text-gray_r-11'>Diskon Produk</div>
                   <div className='text-danger-500'>- {currencyFormat(totalDiscountAmount)}</div>
                 </div>
                 {activeVoucher && (
-- 
cgit v1.2.3


From b886fcf2dbc9114bc2e2347e3d4bf5299ed43d3b Mon Sep 17 00:00:00 2001
From: "HATEC\\SPVDEV001" <tri.susilo@altama.co.id>
Date: Fri, 14 Jul 2023 09:26:08 +0700
Subject: toggle on off

---
 src/lib/checkout/components/Checkout.jsx | 62 +++++++++++++++++++++-----------
 1 file changed, 41 insertions(+), 21 deletions(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 27cdda76..78d61770 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -105,7 +105,7 @@ const Checkout = () => {
 
     let addNewLine = dataVoucher[0]
     let checkList = listVouchers.findIndex((voucher) => voucher.code == addNewLine.code)
-    if (checkList > 0) return
+    if (checkList >= 0) return
     if (totalAmount - totalDiscountAmount < addNewLine.minPurchaseAmount) {
       SetSelisihHargaCode(
         currencyFormat(addNewLine.minPurchaseAmount - (totalAmount - totalDiscountAmount))
@@ -140,8 +140,11 @@ const Checkout = () => {
     let countDiscount = 0
 
     if (dataActiveVoucher.discountType === 'percentage') {
-      countDiscount = (totalAmount - totalDiscountAmount) * (dataActiveVoucher.discountAmount/100)
-      if (dataActiveVoucher.maxDiscountAmount > 0 && countDiscount > dataActiveVoucher.maxDiscountAmount) {
+      countDiscount = (totalAmount - totalDiscountAmount) * (dataActiveVoucher.discountAmount / 100)
+      if (
+        dataActiveVoucher.maxDiscountAmount > 0 &&
+        countDiscount > dataActiveVoucher.maxDiscountAmount
+      ) {
         countDiscount = dataActiveVoucher.maxDiscountAmount
       }
     } else {
@@ -327,10 +330,17 @@ const Checkout = () => {
     VoucherCode(codeVoucher)
   }
 
-  const handleUseVoucher = async (code) => {
-    if(code === activeVoucher){
-      SetActiveVoucher(null)
-    }else{
+  const handleUseVoucher = async (code, isCheck) => {
+    if (isCheck) {
+      if (code === activeVoucher) {
+        SetActiveVoucher(null)
+      } else {
+        SetActiveVoucher(code)
+        SetFindVoucher(null)
+        document.getElementById('uniqCode').value = ''
+        SetButtonTerapkan(false)
+      }
+    } else {
       SetActiveVoucher(code)
       SetFindVoucher(null)
       document.getElementById('uniqCode').value = ''
@@ -343,6 +353,13 @@ const Checkout = () => {
     SetButtonTerapkan(false)
   }
 
+  const [isChecked, setIsChecked] = useState(false)
+
+  const ToggleSwitch = (code) => {
+    setIsChecked(!isChecked)
+    handleUseVoucher(code, !isChecked)
+  }
+
   const taxTotal = (totalAmount - totalDiscountAmount - discountVoucher) * 0.11
 
   return (
@@ -409,21 +426,21 @@ const Checkout = () => {
                 </div>
               </div>
             ) : (
-              <h3 className='font-semibold mb-4'>Promo yang tersedia</h3>
+              <h3 className='font-semibold mb-4'>Promo Khusus Untuk {auth.name}</h3>
             )}
             {listVouchers?.map((item) => (
               <div key={item.id} className='relative'>
                 {totalAmount - totalDiscountAmount < item.minPurchaseAmount && (
-                  <div className='absolute w-full h-full bg-gray_r-3/40 top-0 left-0' />
+                  <div className='absolute w-full h-full bg-gray_r-3/40 top-0 left-0 z-50' />
                 )}
 
                 <div className={`border border-solid mb-5 w-full hover:cursor-pointer  p-4 `}>
                   <div className={`flex gap-x-3`}>
-                    <div className='hidden md:w-[250px] md:block md:h-[150px]'>
+                    <div className='hidden md:w-[250px] md:block'>
                       <Image src={item.image} alt={item.name} className={`object-cover`} />
                     </div>
                     <div className='w-full'>
-                      <div className='flex justify-between mb-1 items-center'>
+                      <div className='flex justify-between gap-x-2 mb-1 items-center'>
                         <div className=''>
                           <h3 className='font-semibold'>{item.name}</h3>
                           <div className='mt-1'>
@@ -431,24 +448,27 @@ const Checkout = () => {
                           </div>
                         </div>
                         <div className='flex justify-end'>
-                          <button
-                            className='btn-solid-red w-[102px]  md:flex-none rounded-md'
-                            type='button'
-                            onClick={() => handleUseVoucher(item.code)}
-                          >
-                            {activeVoucher === item.code ? 'Batal' : 'Pakai'}
-                          </button>
+                          <label class='relative inline-flex items-center cursor-pointer'>
+                            <input
+                              type='checkbox'
+                              value=''
+                              class='sr-only peer'
+                              checked={activeVoucher === item.code ? true : false}
+                              onChange={() => ToggleSwitch(item.code)}
+                            />
+                            <div class="w-11 h-6 bg-gray-200 rounded-full peer dark:bg-gray-700 peer-focus:ring-4 peer-focus:ring-green-300 dark:peer-focus:ring-green-800 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-green-600"></div>
+                          </label>
                         </div>
                       </div>
                       <hr className='mt-3 my-4 border-gray_r-8' />
                       <div className='flex justify-between items-center'>
-                        <p className='text-justify text-sm'>
+                        <p className='text-justify text-sm md:text-xs'>
                           Kode Voucher :{' '}
                           <span className='text-red-500 font-semibold'>{item.code}</span>
                         </p>
-                        <p className='text-sm'>
+                        <p className='text-sm md:text-xs'>
                           {activeVoucher === item.code && (
-                            <span className='text-caption-1 text-green-600'>
+                            <span className=' text-green-600'>
                               Voucher digunakan{' '}
                             </span>
                           )}
-- 
cgit v1.2.3


From e3679ab4a7c58f6b8b9ac661b3adaa8d2dc0b0f2 Mon Sep 17 00:00:00 2001
From: "HATEC\\SPVDEV001" <tri.susilo@altama.co.id>
Date: Fri, 14 Jul 2023 13:24:57 +0700
Subject: bug fixing button lanjut pembayaran

---
 src/lib/checkout/components/Checkout.jsx | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 78d61770..098d1e66 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -261,6 +261,9 @@ const Checkout = () => {
   useEffect(() => {
     if (selectedExpedisi) {
       let serviceType = selectedExpedisi.split(',')
+      if(serviceType[0] === 0){
+        setSelectedExpedisi(0)
+      }
       setselectedCarrier(serviceType[0])
       setselectedCarrierId(serviceType[1])
       setListServiceExpedisi([])
@@ -411,7 +414,7 @@ const Checkout = () => {
           {findCodeVoucher === 2 && (
             <div className='mt-2'>
               <span className='text-caption-1 mt-2 text-red-600'>
-                {'Tambah ' + selisihHargaCode + ' untuk pakai promo ini'}
+                Tambah <span className='text-red-600'>{selisihHargaCode}</span> untuk pakai promo ini
               </span>
             </div>
           )}
-- 
cgit v1.2.3


From e39d3b0082e83ad08044918f0b6d8e977223100d Mon Sep 17 00:00:00 2001
From: "HATEC\\SPVDEV001" <tri.susilo@altama.co.id>
Date: Mon, 17 Jul 2023 16:30:17 +0700
Subject: feedback UAT

---
 src/lib/checkout/components/Checkout.jsx | 73 +++++++++++++++++++++++---------
 1 file changed, 53 insertions(+), 20 deletions(-)

(limited to 'src/lib/checkout/components/Checkout.jsx')

diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 098d1e66..0c7a35fa 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -91,6 +91,9 @@ const Checkout = () => {
   const [findCodeVoucher, SetFindVoucher] = useState(null)
   const [selisihHargaCode, SetSelisihHargaCode] = useState(null)
   const [buttonTerapkan, SetButtonTerapkan] = useState(false)
+  const [checkoutValidation, setCheckoutValidation] = useState(false)
+
+  const expedisiValidation = useRef(null)
 
   const voucher = async () => {
     let dataVoucher = await getVoucher()
@@ -212,6 +215,7 @@ const Checkout = () => {
   }, [products])
 
   useEffect(() => {
+    setCheckoutValidation(false)
     const loadServiceRajaOngkir = async () => {
       const body = {
         origin: 2127,
@@ -261,7 +265,7 @@ const Checkout = () => {
   useEffect(() => {
     if (selectedExpedisi) {
       let serviceType = selectedExpedisi.split(',')
-      if(serviceType[0] === 0){
+      if (serviceType[0] === 0) {
         setSelectedExpedisi(0)
       }
       setselectedCarrier(serviceType[0])
@@ -281,6 +285,21 @@ const Checkout = () => {
       toast.error('Maksimal ukuran file adalah 5MB', { position: 'bottom-center' })
       return
     }
+    if (selectedExpedisi === 0) {
+      setCheckoutValidation(true)
+      if (expedisiValidation.current) {
+        const position = expedisiValidation.current.getBoundingClientRect()
+        window.scrollTo({
+          top: position.top - 300 + window.pageYOffset,
+          behavior: 'smooth'
+        })
+      }
+      return
+    }
+    if (selectedCarrier != 1 && biayaKirim == 0) {
+      toast.error('Maaf, layanan tidak tersedia. Mohon pilih expedisi lain.')
+      return
+    }
     setIsLoading(true)
     const productOrder = products.map((product) => ({
       product_id: product.id,
@@ -337,6 +356,7 @@ const Checkout = () => {
     if (isCheck) {
       if (code === activeVoucher) {
         SetActiveVoucher(null)
+        SetDiscountVoucher(0)
       } else {
         SetActiveVoucher(code)
         SetFindVoucher(null)
@@ -414,7 +434,8 @@ const Checkout = () => {
           {findCodeVoucher === 2 && (
             <div className='mt-2'>
               <span className='text-caption-1 mt-2 text-red-600'>
-                Tambah <span className='text-red-600'>{selisihHargaCode}</span> untuk pakai promo ini
+                Tambah <span className='text-red-600'>{selisihHargaCode}</span> untuk pakai promo
+                ini
               </span>
             </div>
           )}
@@ -471,9 +492,7 @@ const Checkout = () => {
                         </p>
                         <p className='text-sm md:text-xs'>
                           {activeVoucher === item.code && (
-                            <span className=' text-green-600'>
-                              Voucher digunakan{' '}
-                            </span>
+                            <span className=' text-green-600'>Voucher digunakan </span>
                           )}
                         </p>
                       </div>
@@ -556,6 +575,8 @@ const Checkout = () => {
           listExpedisi={listExpedisi}
           setSelectedExpedisi={setSelectedExpedisi}
           checkWeigth={checkWeigth}
+          checkoutValidation={checkoutValidation}
+          expedisiValidation={expedisiValidation}
         />
         <Divider />
         <SectionListService
@@ -693,9 +714,7 @@ const Checkout = () => {
           <button
             className='flex-1 btn-yellow'
             onClick={checkout}
-            disabled={
-              isLoading || !products || products?.length == 0 || priceCheck || selectedExpedisi == 0
-            }
+            disabled={isLoading || !products || products?.length == 0 || priceCheck}
           >
             {isLoading ? 'Loading...' : 'Lanjut Pembayaran'}
           </button>
@@ -738,6 +757,8 @@ const Checkout = () => {
               listExpedisi={listExpedisi}
               setSelectedExpedisi={setSelectedExpedisi}
               checkWeigth={checkWeigth}
+              checkoutValidation={checkoutValidation}
+              expedisiValidation={expedisiValidation}
             />
             <Divider />
             <SectionListService
@@ -958,14 +979,7 @@ const Checkout = () => {
               <button
                 className='w-full btn-yellow mt-4'
                 onClick={checkout}
-                disabled={
-                  isLoading ||
-                  !products ||
-                  products?.length == 0 ||
-                  priceCheck ||
-                  selectedCarrier == 0 ||
-                  (selectedCarrier != 1 && biayaKirim == 0)
-                }
+                disabled={isLoading || !products || products?.length == 0 || priceCheck}
               >
                 {isLoading ? 'Loading...' : 'Lanjut Pembayaran'}
               </button>
@@ -1028,13 +1042,24 @@ const SectionValidation = ({ address }) =>
     </BottomPopup>
   )
 
-const SectionExpedisi = ({ address, listExpedisi, setSelectedExpedisi, checkWeigth }) =>
+const SectionExpedisi = ({
+  address,
+  listExpedisi,
+  setSelectedExpedisi,
+  checkWeigth,
+  checkoutValidation,
+  expedisiValidation
+}) =>
   address?.rajaongkirCityId > 0 && (
-    <div className='p-4'>
+    <div className='p-4' ref={expedisiValidation}>
       <div className='flex justify-between items-center'>
         <div className='font-medium'>Pilih Expedisi : </div>
-        <div>
-          <select className='form-input' onChange={(e) => setSelectedExpedisi(e.target.value)}>
+        <div className='w-[250px]'>
+          <select
+            className={`form-input ${checkoutValidation ? 'border-red-500 shake' : ''}`}
+            onChange={(e) => setSelectedExpedisi(e.target.value)}
+            required
+          >
             <option value='0,0'>Pengiriman</option>
             <option value='1,32'>SELF PICKUP</option>
             {checkWeigth != true &&
@@ -1049,7 +1074,15 @@ const SectionExpedisi = ({ address, listExpedisi, setSelectedExpedisi, checkWeig
                 </option>
               ))}
           </select>
+          {checkoutValidation && (
+            <span className='text-sm text-red-500'>* Silahkan pilih expedisi</span>
+          )}
         </div>
+        <style jsx>{`
+          .shake {
+            animation: shake 0.4s ease-in-out;
+          }
+        `}</style>
       </div>
       {checkWeigth == true && (
         <p className='mt-4 text-gray_r-11 leading-6'>
-- 
cgit v1.2.3

