import { CheckIcon, ClockIcon, EllipsisVerticalIcon, MagnifyingGlassIcon, } from '@heroicons/react/24/outline'; import { Skeleton } from '@chakra-ui/react'; import { div, toQuery } from 'lodash-contrib'; import _ from 'lodash'; import { useRouter } from 'next/router'; import { useState, useEffect } from 'react'; import useInvoices from '../../invoice/hooks/useInvoices'; import Spinner from '@/core/components/elements/Spinner/Spinner'; import Alert from '@/core/components/elements/Alert/Alert'; import Pagination from '@/core/components/elements/Pagination/Pagination'; import Link from '@/core/components/elements/Link/Link'; import currencyFormat from '@/core/utils/currencyFormat'; import BottomPopup from '@/core/components/elements/Popup/BottomPopup'; import { downloadInvoice, downloadTaxInvoice, } from '../../invoice/utils/invoices'; import MobileView from '@/core/components/views/MobileView'; import DesktopView from '@/core/components/views/DesktopView'; import Menu from '@/lib/auth/components/Menu'; import odooApi from '@/core/api/odooApi'; import { getAuth } from '@/core/utils/auth'; import ProgressBar from '@ramonak/react-progress-bar'; import FooterBanner from '~/modules/footer-banner'; import Image from '~/components/ui/image'; import useDevice from '@/core/hooks/useDevice'; const Tempo = () => { const auth = getAuth(); const router = useRouter(); const { q = '', page = 1, limit = 15 } = router.query; const { isDesktop, isMobile } = useDevice(); const [pageNew, setPageNew] = useState(page); const [limitNew, setLimitNew] = useState(limit); const query = { name: q, offset: (pageNew - 1) * limitNew, limit: limitNew, }; const { invoices } = useInvoices({ query }); const [isLoading, setIsLoading] = useState(true); const [tempo, setTempo] = useState([]); const [inputQuery, setInputQuery] = useState(q); const [toOthers, setToOthers] = useState(null); const pageCount = Math.ceil(invoices?.data?.invoiceTotal / limitNew); let pageQuery = _.omit(query, ['limitNew', 'offset']); pageQuery = _.pickBy(pageQuery, _.identity); pageQuery = toQuery(pageQuery); const handleSubmit = (e) => { e.preventDefault(); router.push(`/my/tempo?q=${inputQuery}`); }; useEffect(() => { const loadTempo = async () => { setIsLoading(true); const dataTempo = await odooApi( 'GET', `/api/v1/check/${auth.partnerId}/tempo` ); setTempo(dataTempo); setIsLoading(false); }; loadTempo(); }, []); const limitTempo = Math.round( parseInt(tempo.amountDue + tempo.remainingLimit) ); const amountDue = Math.round(parseInt(tempo.amountDue)); const getLabel = () => { if (Math.round((amountDue / limitTempo) * 100) >= 100) return 'Limit Tempo mencapai batas'; if (Math.round((amountDue / limitTempo) * 100) >= 50) return 'Hampir Habis'; return ''; }; const startItem = 1 + (pageNew - 1) * limitNew; const endItem = Math.min(limitNew * pageNew, invoices?.data?.invoiceTotal); const getDueDate = (invoice) => { const [day, month, year] = invoice.split('/'); const dueDate = new Date(year, month - 1, day); // Konversi ke objek Date return dueDate; }; const formatTanggal = (tanggalInput) => { const [day, month, year] = tanggalInput.split('/'); const date = new Date(year, month - 1, day); const formattedDate = new Intl.DateTimeFormat('id-ID', { day: '2-digit', month: 'short', year: 'numeric', }).format(date); return formattedDate; }; return ( <>

Pembayaran Tempo

Status Detail Tempo Pembayaran Anda adalah{' '} {tempo.paymentTerm ? tempo.paymentTerm : 'Review'}

Kredit Limit Terpakai

{amountDue ? currencyFormat(amountDue) : '-'}

Sisa Kredit Limit

{limitTempo && amountDue ? currencyFormat( Math.round(parseInt(limitTempo - amountDue)) ) : '-'}

Kredit Limit

{limitTempo ? currencyFormat(limitTempo) : '-'}
{getLabel()}
{auth && auth?.tempoProgres == 'review' && !tempo.paymentTerm ? (
Registrasi Tempo
) : (
setInputQuery(e.target.value)} />
{!invoices.isLoading && (

Menampilkan {startItem}-{endItem} dari{' '} {invoices?.data?.invoiceTotal}

)}
{invoices.isLoading && ( )} {!invoices.isLoading && (!invoices?.data?.invoices || invoices?.data?.invoices?.length == 0) && ( )} {invoices.data?.invoices?.map((invoice) => ( ))}
No. Invoice No. Transaksi Salesperson Tanggal Jatuh Tempo Status Total
Tidak ada Invoice
{invoice.name} {invoice.salesOrder || '-'} {invoice.sales} {invoice.invoiceDate} {invoice.invoiceDateDue} {invoice.amountResidual > 0 ? ( new Date() > getDueDate(invoice.invoiceDateDue) ? (
Jatuh Tempo
) : (
Belum Jatuh Tempo
) ) : (
Lunas
)}
{currencyFormat(invoice.amountTotal)}
)}

Status Detail Tempo Pembayaran Anda adalah{' '} {tempo.paymentTerm ? tempo.paymentTerm : 'Review'}

Kredit Limit Terpakai

{amountDue ? currencyFormat(amountDue) : '-'}

Sisa Kredit Limit

{limitTempo && amountDue ? currencyFormat( Math.round(parseInt(limitTempo - amountDue)) ) : '-'}

Kredit Limit

{limitTempo ? currencyFormat(limitTempo) : '-'}
{getLabel()}
{auth && !auth?.tempoProgres == 'review' && tempo.paymentTerm && (
setInputQuery(e.target.value)} />
)} {invoices.isLoading && (
)} {auth && auth?.tempoProgres == 'review' && !tempo.paymentTerm ? ( // // Tidak ada invoice //
Registrasi Tempo
) : ( invoices.data?.invoices?.map((invoice, index) => (
No. Transaksi

{invoice.salesOrder}

{invoice.amountResidual > 0 ? ( new Date() > getDueDate(invoice.invoiceDateDue) ? (
Jatuh Tempo
) : (
Belum Lunas
) ) : (
Lunas
)} {/* setToOthers(invoice)} /> */}

{formatTanggal(invoice.invoiceDate)}

Jatuh Tempo: {formatTanggal(invoice.invoiceDateDue)}


No. Invoice

{invoice.name || '-'}

Total Belanja

{currencyFormat(invoice.amountTotal)}

{/* {invoice.efaktur ? (
Faktur Pajak
) : (
Faktur Pajak
)} */}
)) )} setToOthers(null)} >
); }; export default Tempo;