import { useRouter } from "next/router"; import AppBar from "@/components/layouts/AppBar"; import Layout from "@/components/layouts/Layout"; import WithAuth from "@/components/auth/WithAuth"; import { useCallback, useEffect, useRef, useState } from "react"; import { useAuth } from "@/core/utils/auth"; import apiOdoo from "@/core/utils/apiOdoo"; import currencyFormat from "@/core/utils/currencyFormat"; import { EllipsisVerticalIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline"; import Link from "@/components/elements/Link"; import Pagination from "@/components/elements/Pagination"; import Alert from "@/components/elements/Alert"; import TransactionStatusBadge from "@/components/transactions/TransactionStatusBadge"; import { toast } from "react-hot-toast"; import useConfirmAlert from "@/lib/elements/hooks/useConfirmAlert"; import useBottomPopup from "@/lib/elements/hooks/useBottomPopup"; export default function Transactions() { const [ auth ] = useAuth(); const router = useRouter(); const { q, page = 1 } = router.query; const [ transactions, setTransactions ] = useState([]); const [ pageCount, setPageCount ] = useState(0); const [ isLoading, setIsLoading ] = useState(true); const searchQueryRef = useRef(); const loadTransactions = useCallback(async () => { if (auth) { const limit = 10; let offset = (page - 1) * 10; let queryParams = [`limit=${limit}`, `offset=${offset}`]; if (q) queryParams.push(`name=${q}`); queryParams = queryParams.join('&'); queryParams = queryParams ? '?' + queryParams : ''; const dataTransactions = await apiOdoo('GET', `/api/v1/partner/${auth.partner_id}/sale_order${queryParams}`); setTransactions(dataTransactions); setPageCount(Math.ceil(dataTransactions?.sale_order_total / limit)); setIsLoading(false); }; }, [ auth, q, page ]); useEffect(() => { loadTransactions(); }, [ loadTransactions ]); const actionSearch = (e) => { e.preventDefault(); let queryParams = []; if (searchQueryRef.current.value) queryParams.push(`q=${searchQueryRef.current.value}`); queryParams = queryParams.join('&'); queryParams = queryParams ? `?${queryParams}` : ''; router.push(`/my/transactions${queryParams}`); }; const downloadPurchaseOrder = (data) => { const url = `${process.env.ODOO_HOST}/api/v1/partner/${auth.partner_id}/sale_order/${data.id}/download_po/${data.token}`; window.open(url, 'download'); closePopup(); }; const downloadQuotation = (data) => { const url = `${process.env.ODOO_HOST}/api/v1/partner/${auth.partner_id}/sale_order/${data.id}/download/${data.token}`; window.open(url, 'download'); closePopup(); }; const childrenPopup = (data) => (
); const { closePopup, openPopup, BottomPopup } = useBottomPopup({ title: 'Lainnya', children: childrenPopup }); const submitCancelTransaction = async (data) => { const isCancelled = await apiOdoo('POST', `/api/v1/partner/${auth.partner_id}/sale_order/${data.id}/cancel`); if (isCancelled) { toast.success('Berhasil batalkan transaksi'); loadTransactions(); } } const { openConfirmAlert, ConfirmAlert } = useConfirmAlert({ title: 'Batalkan Transaksi', caption: 'Apakah anda yakin untuk membatalkan transaksi?', closeText: 'Tidak', submitText: 'Ya, Batalkan', onSubmit: submitCancelTransaction }); return (
{ transactions?.sale_order_total === 0 && !isLoading && ( Transaksi tidak ditemukan ) } { transactions?.sale_orders?.map((transaction, index) => (
No. Transaksi

{ transaction.name }

openPopup(transaction)} />
No. Purchase Order

{ transaction.purchase_order_name || '-' }

Total Invoice

{ transaction.invoice_count } Invoice

Sales

{ transaction.sales }

Total Harga

{ currencyFormat(transaction.amount_total) }

)) }
{ ConfirmAlert } { BottomPopup }
); };