import Spinner from '@/core/components/elements/Spinner/Spinner'; import useInvoice from '../hooks/useInvoice'; import { downloadInvoice, downloadTaxInvoice } from '../utils/invoices'; import Divider from '@/core/components/elements/Divider/Divider'; import VariantGroupCard from '@/lib/variant/components/VariantGroupCard'; import currencyFormat from '@/core/utils/currencyFormat'; import MobileView from '@/core/components/views/MobileView'; import DesktopView from '@/core/components/views/DesktopView'; import Menu from '@/lib/auth/components/Menu'; import Link from '@/core/components/elements/Link/Link'; import Image from '@/core/components/elements/Image/Image'; import { createSlug } from '@/core/utils/slug'; import { useEffect, useState } from 'react'; const Invoice = ({ id }) => { const PPN = process.env.NEXT_PUBLIC_PPN; const { invoice } = useInvoice({ id }); const [totalAmount, setTotalAmount] = useState(0); const [totalDiscountAmount, setTotalDiscountAmount] = useState(0); const amountBeforePPN = invoice.data?.amountTotal / PPN; const taxAmount = invoice.data?.amountTotal - amountBeforePPN; useEffect(() => { if (invoice?.data?.products) { let calculateTotalAmount = 0; let calculateTotalDiscountAmount = 0; invoice.data.products.forEach((product) => { calculateTotalAmount += product.price.price * product.quantity; calculateTotalDiscountAmount += (product.price.price - product.price.priceDiscount) * product.quantity; }); setTotalAmount(calculateTotalAmount); setTotalDiscountAmount(calculateTotalDiscountAmount); } }, [invoice]); if (invoice.isLoading) { return (
); } const address = invoice.data?.customer; let fullAddress = []; if (address?.street) fullAddress.push(address.street); if (address?.subDistrict?.name) fullAddress.push(address.subDistrict.name); if (address?.district?.name) fullAddress.push(address.district.name); if (address?.city?.name) fullAddress.push(address.city.name); fullAddress = fullAddress.join(', '); return ( invoice.data?.name && ( <>
{invoice.data?.name} {invoice.data?.amountResidual > 0 ? ( Belum Lunas ) : ( Lunas )} {invoice.data?.purchaseOrderName || '-'} {invoice.data?.paymentTerm} {invoice.data?.amountResidual > 0 && invoice.invoiceDate != invoice.invoiceDateDue && ( {invoice.data?.invoiceDateDue} )} {invoice.data?.sales} {invoice.data?.invoiceDate}

Invoice

Faktur Pajak

Detail Penagihan
{address?.name} {address?.email || '-'} {address?.mobile || '-'} {fullAddress}
Detail Produk

Total Belanja

{currencyFormat(invoice.data?.amountTotal)}

Invoice & Faktur Pajak

{invoice?.data?.name} {invoice?.data?.amountResidual > 0 ? (
Belum Lunas
) : (
Lunas
)}
Tanggal Invoice
: {invoice?.data?.invoiceDate}
Purchase Order
: {invoice?.data?.purchaseOrderName || '-'}
Ketentuan Pembayaran
: {invoice?.data?.paymentTerm}
Nama Sales
: {invoice?.data?.sales}
Faktur Pajak
:{' '} {invoice.data?.efaktur ? ( ) : ( '-' )}
Rincian Pembelian
{/* */} {invoice?.data?.products?.map((product) => ( {/* */} ))}
Nama Produk Jumlah HargaDiskonSubtotal
{product?.name}
{product?.parent?.name}
{product?.code}{' '} {product?.attributes.length > 0 ? `| ${product?.attributes.join(', ')}` : ''}
{product.quantity} {currencyFormat( product.price.priceDiscount - taxAmount )} {product.price.discountPercentage > 0 ? `${product.price.discountPercentage}%` : ''} {currencyFormat( product.price.priceDiscount * product.quantity - taxAmount )}
Subtotal
{currencyFormat( totalAmount - totalDiscountAmount - taxAmount )}
{/*
Total Diskon
{currencyFormat(totalDiscountAmount)}
*/}
PPN {((PPN - 1) * 100).toFixed(0)}%
{currencyFormat( invoice.data?.amountTotal - invoice.data?.amountTotal / PPN )}
Grand Total
{currencyFormat(invoice.data?.amountTotal)}
) ); }; const DescriptionRow = ({ children, label }) => (
{label} {children}
); export default Invoice;