From faf6403595602d78b502acfacc721923addbf4a8 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 3 Mar 2025 16:38:10 +0700 Subject: update code --- src/lib/transaction/components/Transactions.jsx | 487 ++++++++++++++++-------- 1 file changed, 337 insertions(+), 150 deletions(-) (limited to 'src') diff --git a/src/lib/transaction/components/Transactions.jsx b/src/lib/transaction/components/Transactions.jsx index a8685105..64ae9393 100644 --- a/src/lib/transaction/components/Transactions.jsx +++ b/src/lib/transaction/components/Transactions.jsx @@ -31,11 +31,30 @@ import getSite from '../api/listSiteApi'; import transactionsApi from '../api/transactionsApi'; import { motion } from 'framer-motion'; import Image from '@/core/components/elements/Image/Image'; +import { upsertUserCart } from '~/services/cart'; +import { useProductCartContext } from '@/contexts/ProductCartContext'; +import { Swiper, SwiperSlide } from 'swiper/react'; +import 'swiper/css'; const Transactions = ({ context = '' }) => { const auth = useAuth(); const router = useRouter(); - const { q = '', page = 1, site = null, limit = 15 } = router.query; - + const { + q = '', + page = 1, + site = null, + limit = 15, + status = 'all', + } = router.query; + const { + productCart, + setRefreshCart, + setProductCart, + refreshCart, + isLoading, + setIsloading, + } = useProductCartContext(); + console.log('context', context); + console.log('router.query', router.query); const [inputQuery, setInputQuery] = useState(q); const [toOthers, setToOthers] = useState(null); const [toCancel, setToCancel] = useState(null); @@ -44,16 +63,32 @@ const Transactions = ({ context = '' }) => { const [siteFilter, setSiteFilter] = useState(site); const [pageNew, setPageNew] = useState(page); const [limitNew, setLimitNew] = useState(limit); + // const [status, setStatus] = useState('idle'); + const [statusNew, setStatusNew] = useState(status); + const [contextNew, setcontextNew] = useState(router.query.context || context); const query = { name: q, offset: (pageNew - 1) * limitNew, - context, + context: contextNew, limit: limitNew, + status: statusNew, site: siteFilter || (auth?.webRole === null && auth?.site ? auth.site : null), }; + + const statuses = [ + { id: 'all', label: 'Semua' }, + { id: 'quotation', label: 'Pending Quotation' }, + { id: 'diterima', label: 'Pesanan Diterima' }, + { id: 'diproses', label: 'Pesanan Diproses' }, + { id: 'dikirim', label: 'Pesanan Dikirim' }, + { id: 'selesai', label: 'Pesanan Selesai' }, + { id: 'cancel', label: 'Pesanan Dibatalkan' }, + ]; + + console.log('query', query); const { transactions } = useTransactions({ query }); - console.log('transactions', transactions); + // console.log('transactions', transactions); const fetchSite = async () => { const site = await getSite(); setListSites(site.sites); @@ -229,6 +264,67 @@ const Transactions = ({ context = '' }) => { useEffect(() => { fetchSite(); }, []); + + const handleBuyBack = async (products) => { + // if (status === 'success') return; + + try { + // setStatus('loading'); + + const results = await Promise.all( + products.map((product) => + upsertUserCart({ + userId: auth.id, + type: 'product', + id: product.id, + qty: product.quantity, + selected: true, + source: 'buy', // Tetap gunakan 'buy' agar bisa masuk ke halaman pembelian + qtyAppend: false, + }) + ) + ); + + // console.log(`Produk berhasil dimasukkan ke dalam cart`, results); + + // ✅ Panggil setRefreshCart(true) setiap kali satu produk berhasil ditambahkan + + setRefreshCart(true); + + // setStatus('idle'); + toast.success('Semua produk berhasil ditambahkan ke keranjang belanja'); + // Tampilkan notifikasi + // toast({ + // title: 'Tambah ke keranjang', + // description: 'Semua produk berhasil ditambahkan ke keranjang belanja', + // status: 'success', + // duration: 3000, + // isClosable: true, + // position: 'top', + // }); + + // Redirect ke halaman checkout + router.push('/shop/checkout?source=buy'); + } catch (error) { + console.error('Gagal menambahkan produk ke keranjang:', error); + // setStatus('error'); + } + }; + + const handleStatusChange = (status) => { + setStatusNew(status); + + if (['quotation', 'cancel', 'diterima', ''].includes(status)) { + setcontextNew('quotation'); + } else { + setcontextNew(''); + } + + if (status === 'all') { + router.push('/my/transactions'); + } + }; + return ( <> @@ -445,66 +541,126 @@ const Transactions = ({ context = '' }) => { )} -
-
- {listSites?.length > 0 ? ( - - ) : ( -
- )} + +
+
+
+
+ {listSites?.length > 0 ? ( + + ) : ( +
+ )} -
- setInputQuery(e.target.value)} - /> - +
+
+
+

+ Menampilkan {startItem}- + {endItem + ? endItem + : transactions?.data?.saleOrderTotal + ? transactions?.data?.saleOrderTotal + : limitNew}{' '} + dari{' '} + {transactions?.data?.saleOrderTotal + ? transactions?.data?.saleOrderTotal + : limitNew} +

+ { - setLimitNew(Number(e.target.value)); - setPageNew(1); - }} - className='border p-2' - > - - - - + + + + +
-
+
{!transactions.isLoading && - (!transactions?.data?.saleOrders || - transactions?.data?.saleOrders?.length == 0) && ( + transactions?.data?.saleOrders?.length == 0 && (

Tidak Ada Transaksi @@ -512,107 +668,138 @@ const Transactions = ({ context = '' }) => {

)} - {transactions && transactions.data?.saleOrders?.length > 0 && ( -
- {transactions.data.saleOrders.map((saleOrder, index) => ( -
- {/* */} -
-
- -

{saleOrder.name}

-

- Salesperson:{' '} - { + {transactions.isLoading && ( +

+ +
+ )} + + {!transactions.isLoading && + transactions && + transactions.data?.saleOrders?.length > 0 && ( +
+ {transactions.data.saleOrders.map((saleOrder, index) => ( +
+ +
+
+ +

{saleOrder.name}

+

+ Salesperson:{' '} + { + + {saleOrder.sales} + + } +

+
+
+ Tanggal Pesanan:{' '} - {saleOrder.sales} + {saleOrder.dateOrder.split(' ')[0] || '-'} - } -

-
-
- Tanggal Pesanan:{' '} - - {saleOrder.dateOrder.split(' ')[0] || '-'} - -
-
-
-
-
-
-
- {saleOrder.products[0]?.name}
-
-

- Nomor PO: - - {saleOrder.purchaseOrderName || '-'} - -

-

- {saleOrder.products[0]?.parent?.name} -

-

- {saleOrder.products[0]?.quantity} x{' '} - {currencyFormat( - saleOrder.products[0]?.price?.priceDiscount - )} -

-
- {saleOrder.products?.length > 1 && ( -
- {saleOrder.products - .slice(1) - .map((product, index) => ( - {product?.name} - ))} - - Lihat semua produk - +
+
+
+
+
+
+ {saleOrder.products[0]?.name} +
+
+

+ + Nomor PO: + + + {saleOrder.purchaseOrderName || '-'} + +

+

+ {saleOrder.products[0]?.parent?.name} +

+

+ {saleOrder.products[0]?.quantity} x{' '} + {currencyFormat( + saleOrder.products[0]?.price + ?.priceDiscount + )} +

+
+ {saleOrder.products?.length > 1 && ( +
+ {saleOrder.products + .slice(1, 6) + .map((product, index) => ( + {product?.name} + ))} + + Lihat semua produk + +
+ )}
- )} +
+
+
+ + Pesanan dibuat oleh: + +

+ {saleOrder.address.customer?.name || '-'} +

+
+
+
+
+
+

Total Harga

+

+ {currencyFormat(saleOrder.amountTotal)} +

+
+
+
-
- - pesanan dibuat oleh: - -

- {saleOrder.address.customer?.name || '-'} -

-
-
-
-
Total harga
+
- {/* */} -
- ))} -
- )} + ))} +
+ )}
- + {/*
@@ -670,7 +857,7 @@ const Transactions = ({ context = '' }) => { ))} -
No. Transaksi
+ */}