From dc204e9cdbcf7faf81dba825db608be2c918589d Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Tue, 9 Jul 2024 16:31:30 +0700
Subject: <iman? add button reject & logic

---
 src/lib/transaction/components/Transaction.jsx | 92 +++++++++++++++++++++++++-
 1 file changed, 90 insertions(+), 2 deletions(-)

(limited to 'src/lib/transaction/components/Transaction.jsx')

diff --git a/src/lib/transaction/components/Transaction.jsx b/src/lib/transaction/components/Transaction.jsx
index 9b11f5bb..03c94ded 100644
--- a/src/lib/transaction/components/Transaction.jsx
+++ b/src/lib/transaction/components/Transaction.jsx
@@ -33,13 +33,17 @@ import useAuth from '@/core/hooks/useAuth';
 import StepApproval from './stepper';
 import aprpoveApi from '../api/approveApi';
 import rejectApi from '../api/rejectApi';
+import rejectProductApi from '../api/rejectProductApi';
+import { useRouter } from 'next/router';
 
 const Transaction = ({ id }) => {
+  const router = useRouter()
+  const [isModalOpen, setIsModalOpen] = useState(false);
+  const [selectedProduct, setSelectedProduct] = useState(null);
+  const [reason, setReason] = useState('');
   const auth = useAuth();
   const { transaction } = useTransaction({ id });
-  
   const statusApprovalWeb = transaction.data?.approvalStep
-
   const { queryAirwayBill } = useAirwayBill({ orderId: id });
   const [airwayBillPopup, setAirwayBillPopup] = useState(null);
 
@@ -151,6 +155,38 @@ const Transaction = ({ id }) => {
     setIdAWB(null);
   };
 
+  const openModal = (product) => {
+    setSelectedProduct(product);
+    setIsModalOpen(true);
+  };
+
+  const closeModal = () => {
+    setIsModalOpen(false);
+    setSelectedProduct(null);
+    setReason('');
+  };
+
+  const handleRejectProduct = async () => {
+    try{
+      if (!reason.trim()) {
+        toast.error('Masukkan alasan terlebih dahulu');
+        return;
+      }else{
+        let idSo = transaction?.data.id
+        let idProduct = selectedProduct?.id
+        await rejectProductApi({ idSo, idProduct, reason}); 
+        closeModal();
+        toast.success("Produk berhasil di reaject")
+        setTimeout(() => {
+          window.location.reload();
+        }, 1500); 
+      }
+    }catch(error){
+      toast.error('Gagal reject produk. Silakan coba lagi.');
+    }
+  };
+
+
   return (
     transaction.data?.name && (
       <>
@@ -566,6 +602,7 @@ const Transaction = ({ id }) => {
                     <th>Jumlah</th>
                     <th>Harga</th>
                     <th>Subtotal</th>
+                    <th></th>
                   </tr>
                 </thead>
                 <tbody>
@@ -620,10 +657,61 @@ const Transaction = ({ id }) => {
                         <div>{currencyFormat(product.price.priceDiscount)}</div>
                       </td>
                       <td>{currencyFormat(product.price.subtotal)}</td>
+                      {/* {auth?.feature.soApproval && (auth.webRole == 2 || auth.webRole == 3) && (transaction.data.isReaject == false) && ( */}
+                      {auth?.feature.soApproval && (auth.webRole == 2 || auth.webRole == 3) && (router.asPath.includes("/my/quotations/"))  && (
+                        <td>
+                          <button
+                            className="bg-red-500 text-white py-1 px-3 rounded"
+                            onClick={() => openModal(product)}
+                          >
+                            Reject
+                          </button>
+                        </td>
+                      )}
+                      {/* {transaction.data.isReaject && (
+                        <td>
+                          <button
+                            className="bg-gray-400 text-white py-1 px-3 rounded"
+                            onClick={() => openModal(product)}
+                            disabled
+                          >
+                            Direject
+                          </button>
+                        </td>
+                      )} */}
                     </tr>
                   ))}
                 </tbody>
               </table>
+              {isModalOpen && (
+                <div className='fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center'>
+                  <div className='bg-white p-4 rounded w-96
+                     ease-in-out opacity-100
+                    transform transition-transform duration-300  scale-100'>
+                    <h2 className='text-lg mb-2'>Berikan Alasan</h2>
+                    <textarea
+                      value={reason}
+                      onChange={(e) => setReason(e.target.value)}
+                      className='w-full p-2 border rounded'
+                      rows='4'
+                    ></textarea>
+                    <div className='mt-4 flex justify-end'>
+                      <button
+                        className='bg-gray-300 text-black py-1 px-3 rounded mr-2'
+                        onClick={closeModal}
+                      >
+                        Batal
+                      </button>
+                      <button
+                        className='bg-red-500 text-white py-1 px-3 rounded'
+                        onClick={handleRejectProduct}
+                      >
+                        Reject
+                      </button>
+                    </div>
+                  </div>
+                </div>
+              )}
 
               <div className='flex justify-end mt-4'>
                 <div className='w-1/4 grid grid-cols-2 gap-y-3 text-gray_r-12/80'>
-- 
cgit v1.2.3

