import Spinner from '@/core/components/elements/Spinner/Spinner' import useTransaction from '../hooks/useTransaction' import TransactionStatusBadge from './TransactionStatusBadge' import Divider from '@/core/components/elements/Divider/Divider' import { useMemo, useRef, useState } from 'react' import { downloadPurchaseOrder, downloadQuotation } from '../utils/transactions' import BottomPopup from '@/core/components/elements/Popup/BottomPopup' import uploadPoApi from '../api/uploadPoApi' import { toast } from 'react-hot-toast' import getFileBase64 from '@/core/utils/getFileBase64' import currencyFormat from '@/core/utils/currencyFormat' import VariantGroupCard from '@/lib/variant/components/VariantGroupCard' import { ChevronDownIcon, ChevronRightIcon, ChevronUpIcon } from '@heroicons/react/24/outline' import Link from '@/core/components/elements/Link/Link' import checkoutPoApi from '../api/checkoutPoApi' import cancelTransactionApi from '../api/cancelTransactionApi' import MobileView from '@/core/components/views/MobileView' import DesktopView from '@/core/components/views/DesktopView' import Menu from '@/lib/auth/components/Menu' import Image from '@/core/components/elements/Image/Image' import { createSlug } from '@/core/utils/slug' import toTitleCase from '@/core/utils/toTitleCase' import useAirwayBill from '../hooks/useAirwayBill' import Manifest from '@/lib/treckingAwb/component/Manifest' const Transaction = ({ id }) => { const { transaction } = useTransaction({ id }) const { queryAirwayBill } = useAirwayBill({ orderId: id }) const [airwayBillPopup, setAirwayBillPopup] = useState(null) const poNumber = useRef(null) const poFile = useRef(null) const [uploadPo, setUploadPo] = useState(false) const [idAWB, setIdAWB] = useState(null) const openUploadPo = () => setUploadPo(true) const closeUploadPo = () => setUploadPo(false) const submitUploadPo = async () => { const file = poFile.current.files[0] const name = poNumber.current.value if (typeof file === 'undefined' || !name) { toast.error('Nomor dan Dokumen PO harus diisi') return } if (file.size > 5000000) { toast.error('Maksimal ukuran file adalah 5MB') return } const data = { name, file: await getFileBase64(file) } const isUploaded = await uploadPoApi({ id, data }) if (isUploaded) { toast.success('Berhasil upload PO') transaction.refetch() closeUploadPo() return } toast.error('Terjadi kesalahan internal, coba lagi nanti atau hubungi kami') } const [cancelTransaction, setCancelTransaction] = useState(false) const openCancelTransaction = () => setCancelTransaction(true) const closeCancelTransaction = () => setCancelTransaction(false) const submitCancelTransaction = async () => { const isCancelled = await cancelTransactionApi({ transaction: transaction.data }) if (isCancelled) { toast.success('Berhasil batalkan transaksi') transaction.refetch() } closeCancelTransaction() } const checkout = async () => { if (!transaction.data?.purchaseOrderFile) { toast.error('Mohon upload dokumen PO anda sebelum melanjutkan pesanan') return } await checkoutPoApi({ id }) toast.success('Berhasil melanjutkan pesanan') transaction.refetch() } const memoizeVariantGroupCard = useMemo( () => (

Subtotal

{currencyFormat(transaction.data?.amountUntaxed)}

PPN 11%

{currencyFormat(transaction.data?.amountTax)}

Biaya Pengiriman

{currencyFormat(transaction.data?.deliveryAmount)}

Grand Total

{currencyFormat(transaction.data?.amountTotal)}

), [transaction.data] ) if (transaction.isLoading) { return (
) } const closePopup = () => { setIdAWB(null) } return ( transaction.data?.name && ( <>
Apakah anda yakin membatalkan transaksi{' '} {transaction.data?.name}?
{transaction.data?.name} {transaction.data?.paymentTerm} {transaction.data?.sales} {transaction.data?.dateOrder}
Pengiriman
{transaction?.data?.pickings?.map((airway) => ( ))}
{transaction?.data?.pickings == 0 && (
Belum ada pengiriman
)}
{transaction.data?.purchaseOrderName || '-'}

Dokumen PO

Detail Produk
{memoizeVariantGroupCard}

Invoice

{transaction.data?.invoices?.map((invoice, index) => (

{invoice?.name}

{invoice.amountResidual > 0 ? (
Belum Lunas
) : (
Lunas
)}

{currencyFormat(invoice.amountTotal)}

))} {transaction.data?.invoices?.length === 0 && (
Belum ada invoice
)}
{transaction.data?.status == 'draft' && ( )} {transaction.data?.status != 'draft' && ( )}

Detail Transaksi

{transaction?.data?.name}
{transaction.data?.status == 'draft' && ( )} {transaction.data?.status != 'draft' && ( )}
Nama Sales
: {transaction?.data?.sales}
Tanggal Transaksi
: {transaction?.data?.dateOrder}
Ketentuan Pembayaran
: {transaction?.data?.paymentTerm}
Purchase Order
: {transaction?.data?.purchaseOrderName}{' '}
Informasi Pelanggan
Detail Pelanggan
Pengiriman
{transaction?.data?.pickings?.map((airway) => ( ))}
{transaction?.data?.pickings.length == 0 && (
Belum ada pengiriman
)}
Rincian Pembelian
{transaction?.data?.products?.map((product) => ( ))}
Nama Produk Diskon Jumlah Harga Subtotal
{product?.name}
{product?.parent?.name}
{product?.code}{' '} {product?.attributes.length > 0 ? `| ${product?.attributes.join(', ')}` : ''}
{product.price.discountPercentage > 0 ? `${product.price.discountPercentage}%` : ''} {product.quantity} {product.price.discountPercentage > 0 && (
{currencyFormat(product.price.price)}
)}
{currencyFormat(product.price.priceDiscount)}
{currencyFormat(product.price.subtotal)}
Subtotal
{currencyFormat(transaction.data?.amountUntaxed)}
PPN 11%
{currencyFormat(transaction.data?.amountTax)}
Biaya Pengiriman
{currencyFormat(transaction.data?.deliveryAmount)}
Grand Total
{currencyFormat(transaction.data?.amountTotal)}
Invoice
{transaction.data?.invoices?.map((invoice, index) => (

{invoice?.name}

{invoice.amountResidual > 0 ? (
Belum Lunas
) : (
Lunas
)}

{currencyFormat(invoice.amountTotal)}

))}
{transaction.data?.invoices?.length === 0 && (
Belum ada invoice
)}
{/* {queryAirwayBill.data?.airways?.map((airway) => ( setAirwayBillPopup(null)} >
No Pengiriman
{airway?.deliveryOrder?.name}
Kurir
{airway?.deliveryOrder?.carrier}
No Resi
{airway?.waybillNumber}
Status Pengiriman
    {airway?.manifests?.map((manifest, index) => (
  1. {manifest.description}

  2. ))} {(!airway?.manifests || airway?.manifests?.length == 0) && (
    Belum ada pengiriman
    )}
))} */} ) ) } const SectionAddress = ({ address }) => { const [section, setSection] = useState({ customer: false, invoice: false, shipping: false }) const toggleSection = (name) => { setSection({ ...section, [name]: !section[name] }) } return ( <> toggleSection('customer')} /> {section.customer && } {/* toggleSection('shipping')} /> {section.shipping && } toggleSection('invoice')} /> {section.invoice && } */} ) } const SectionButton = ({ label, active, toggle }) => ( ) const SectionContent = ({ address }) => { let fullAddress = [] if (address?.street) fullAddress.push(address.street) if (address?.subDistrict?.name) fullAddress.push(toTitleCase(address.subDistrict.name)) if (address?.district?.name) fullAddress.push(toTitleCase(address.district.name)) if (address?.city?.name) fullAddress.push(toTitleCase(address.city.name)) fullAddress = fullAddress.join(', ') return (
{address.name} {address.email || '-'} {address.mobile || '-'} {fullAddress}
) } const DescriptionRow = ({ children, label }) => (
{label} {children}
) export default Transaction