summaryrefslogtreecommitdiff
path: root/src/lib/transaction/components/Transaction.jsx
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2025-07-31 11:02:58 +0000
committerIT Fixcomart <it@fixcomart.co.id>2025-07-31 11:02:58 +0000
commit4cf94e241af5f95f567aac952dd990852026d23f (patch)
tree5c519ac632391b34e1cc2bb31d011be37bb2d779 /src/lib/transaction/components/Transaction.jsx
parentdc31efb2fec4c7b79917324d922ae820c4b5bb50 (diff)
parent04961a55929017f77ee6801d2b7ada4c05689821 (diff)
Merged in cr/repeat-order (pull request #430)
Cr/repeat order
Diffstat (limited to 'src/lib/transaction/components/Transaction.jsx')
-rw-r--r--src/lib/transaction/components/Transaction.jsx615
1 files changed, 557 insertions, 58 deletions
diff --git a/src/lib/transaction/components/Transaction.jsx b/src/lib/transaction/components/Transaction.jsx
index 8b3a8dd0..2c1a6208 100644
--- a/src/lib/transaction/components/Transaction.jsx
+++ b/src/lib/transaction/components/Transaction.jsx
@@ -17,6 +17,7 @@ import getFileBase64 from '@/core/utils/getFileBase64';
import currencyFormat from '@/core/utils/currencyFormat';
import VariantGroupCard from '@/lib/variant/components/VariantGroupCard';
import {
+ EllipsisVerticalIcon,
ChevronDownIcon,
ChevronRightIcon,
ChevronUpIcon,
@@ -40,6 +41,10 @@ import rejectProductApi from '../api/rejectProductApi';
import { useRouter } from 'next/router';
import { gtagPurchase } from '@/core/utils/googleTag';
import { deleteItemCart } from '@/core/utils/cart';
+import {
+ downloadInvoice,
+ downloadTaxInvoice,
+} from '@/lib/invoice/utils/invoices';
import axios from 'axios';
import InformationSection from '../../treckingAwb/component/InformationSection';
import { Button } from '@chakra-ui/react';
@@ -51,18 +56,39 @@ const Transaction = ({ id }) => {
const [reason, setReason] = useState('');
const auth = useAuth();
const { transaction } = useTransaction({ id });
+ console.log('transaction', transaction);
const statusApprovalWeb = transaction.data?.approvalStep;
const [isLoading, setIsLoading] = useState(false);
const { queryAirwayBill } = useAirwayBill({ orderId: id });
const [airwayBillPopup, setAirwayBillPopup] = useState(null);
-
+ const [isOpen, setIsOpen] = useState(false);
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 [copied, setCopied] = useState(false);
+ const [toOthers, setToOthers] = useState(null);
+ const [totalAmount, setTotalAmount] = useState(0);
+ const [totalDiscountAmount, setTotalDiscountAmount] = useState(0);
+
+ useEffect(() => {
+ if (transaction?.data?.products) {
+ let calculateTotalAmount = 0;
+ let calculateTotalDiscountAmount = 0;
+ transaction.data.products.forEach((product) => {
+ calculateTotalAmount += product.price.price * product.quantity;
+ calculateTotalDiscountAmount +=
+ (product.price.price - product.price.priceDiscount) *
+ product.quantity;
+ });
+ setTotalAmount(calculateTotalAmount);
+ setTotalDiscountAmount(calculateTotalDiscountAmount);
+ }
+ }, [transaction.data, transaction.isLoading]);
+ console.log('totalAmount', totalAmount);
+ console.log('totalDiscountAmount', totalDiscountAmount);
const submitUploadPo = async () => {
const file = poFile.current.files[0];
const name = poNumber.current.value;
@@ -283,6 +309,34 @@ const Transaction = ({ id }) => {
}
};
+ const handleCopyClick = (waybillNumber) => {
+ const textToCopy = waybillNumber;
+ navigator.clipboard.writeText(textToCopy);
+ setCopied(true);
+ toast.success('No Resi Berhasil di Copy');
+ setTimeout(() => setCopied(false), 2000); // Reset copied state after 2 seconds
+ };
+
+ const formatDate = (dateString) => {
+ const months = [
+ 'Januari',
+ 'Februari',
+ 'Maret',
+ 'April',
+ 'Mei',
+ 'Juni',
+ 'Juli',
+ 'Agustus',
+ 'September',
+ 'Oktober',
+ 'November',
+ 'Desember',
+ ];
+
+ const [day, month, year] = dateString.split('/');
+ return `${day} ${months[parseInt(month, 10) - 1]} ${year}`;
+ };
+
return (
transaction.data?.name && (
<>
@@ -392,18 +446,118 @@ const Transaction = ({ id }) => {
</button>
</div>
</BottomPopup>
+
+ <BottomPopup
+ title='Lainnya'
+ active={toOthers}
+ close={() => setToOthers(null)}
+ >
+ <div className='flex flex-col gap-y-4 mt-2'>
+ <button
+ className='text-left disabled:opacity-60'
+ disabled={!toOthers?.purchaseOrderFile}
+ onClick={() => {
+ downloadPurchaseOrder(toOthers);
+ setToOthers(null);
+ }}
+ >
+ Download PO
+ </button>
+ <button
+ className='text-left disabled:opacity-60'
+ disabled={toOthers?.status != 'draft'}
+ onClick={() => {
+ downloadQuotation(toOthers);
+ setToOthers(null);
+ }}
+ >
+ Download Quotation
+ </button>
+ <button
+ className='text-left disabled:opacity-60'
+ disabled={toOthers?.status != 'waiting'}
+ onClick={() => {
+ setToCancel(toOthers);
+ setToOthers(null);
+ }}
+ >
+ Batalkan Transaksi
+ </button>
+ </div>
+ </BottomPopup>
+
<Manifest idAWB={idAWB} closePopup={closePopup}></Manifest>
<MobileView>
- <div className='p-4'>
- {auth?.feature?.soApproval && (
+ <div className='px-4'>
+ <div className='flex flex-row w-full justify-between items-center py-2 px-3 mb-4 text-sm border border-yellow-500 text-yellow-800 rounded-lg bg-yellow-50 gap-2'>
+ <div class='flex items-center w-full ' role='alert'>
+ <svg
+ class='flex-shrink-0 inline w-4 h-4 mr-2'
+ aria-hidden='true'
+ fill='currentColor'
+ viewBox='0 0 20 20'
+ >
+ <path d='M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5ZM9.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM12 15H8a1 1 0 0 1 0-2h1v-3H8a1 1 0 0 1 0-2h2a1 1 0 0 1 1 1v4h1a1 1 0 0 1 0 2Z' />
+ </svg>
+ <div className='text-justify flex flex-col gap-1'>
+ <span className='text-black text-xs text-start'>
+ Pesanan anda mungkin mengalami keterlambatan tiba
+ </span>
+ </div>
+ </div>
+ <span
+ className='text-red-500 text-xs hover:cursor-pointer text-nowrap z-50'
+ onClick={() => setIdAWB(transaction?.data?.pickings[0]?.id)}
+ >
+ Lihat Detail
+ </span>
+ </div>
+ </div>
+ {auth?.feature?.soApproval && (
+ <div className='p-4'>
<StepApproval
layer={statusApprovalWeb}
status={transaction?.data?.status}
className='ml-auto'
/>
- )}
+ </div>
+ )}
+
+ <div className='flex flex-row justify-between items-center gap-2 px-4'>
+ <div className='flex flex-col justify-start items-start gap-2'>
+ <div className='font-medium'>Status Transaksi</div>
+ <TransactionStatusBadge status={transaction.data?.status} />
+ </div>
+ <div>
+ <EllipsisVerticalIcon
+ className='w-5 h-5'
+ onClick={() => setToOthers(transaction?.data)}
+ />
+ </div>
</div>
+
+ {transaction.data?.invoices?.length === 0 ? (
+ <h1 className=''></h1>
+ ) : (
+ transaction.data?.invoices?.map((invoice, index) => (
+ <div
+ className='flex flex-row justify-between items-center gap-2 p-4'
+ key={index}
+ >
+ <div className=''>{invoice?.name}</div>
+ <span
+ className='text-red-500'
+ onClick={() => downloadInvoice(invoice)}
+ >
+ Download
+ </span>
+ </div>
+ ))
+ )}
+
+ <Divider />
+
<div className='flex flex-col gap-y-4 p-4'>
<DescriptionRow label='Status Transaksi'>
<div className='flex justify-end'>
@@ -416,53 +570,123 @@ const Transaction = ({ id }) => {
</div>
</DescriptionRow>
<DescriptionRow label='No Transaksi'>
- {transaction.data?.name}
+ <p className='font-semibold'>{transaction.data?.name}</p>
+ </DescriptionRow>
+ <DescriptionRow label='Tanggal Transaksi'>
+ {transaction.data?.dateOrder
+ ? formatDate(transaction.data?.dateOrder)
+ : '-'}
+ </DescriptionRow>
+ <DescriptionRow label='Purchase Order'>
+ {transaction.data?.purchaseOrderName || '-'}
</DescriptionRow>
<DescriptionRow label='Ketentuan Pembayaran'>
- {transaction.data?.paymentTerm}
+ {transaction.data?.paymentTerm || '-'}
</DescriptionRow>
<DescriptionRow label='Nama Sales'>
{transaction.data?.sales}
</DescriptionRow>
- <DescriptionRow label='Waktu Transaksi'>
- {transaction.data?.dateOrder}
- </DescriptionRow>
</div>
<Divider />
<div className='p-4'>
- <div className='font-medium'>Pengiriman</div>
- <div className='flex flex-col gap-y-3 mt-4'>
- {transaction?.data?.pickings?.map((airway) => (
- <button
- className='shadow rounded-md p-3 text-gray_r-12 font-normal flex justify-between items-center text-left'
- key={airway?.id}
- onClick={() => setIdAWB(airway?.id)}
- >
- <div>
- <p className='text-sm text-gray_r-11'>{airway?.name}</p>
- <span className='mt-2 font-medium'>
- No Resi : {airway?.trackingNumber || '-'}{' '}
- </span>
- {/*biteship*/}
- {/*<p className='mt-1 font-medium'>{airway?.name}</p>*/}
+ <div className='flex flex-row justify-between items-center'>
+ <div className='font-medium'>Info Pengiriman</div>
+ <span
+ className='text-red-500'
+ onClick={() => setIdAWB(transaction?.data?.pickings[0]?.id)}
+ >
+ Lihat Detail
+ </span>
+ </div>
+ <hr className='mt-4 mb-4 border border-gray-100' />
+ <div className='flex flex-col gap-y-4'>
+ <DescriptionRow label='Dokumen Pengiriman'>
+ <p className='text-red-500 font-semibold text-start'>
+ {transaction.data?.pickings?.length == 0
+ ? 'Belum ada pengiriman'
+ : transaction?.data?.pickings[0].name}
+ </p>
+ </DescriptionRow>
+ <DescriptionRow label='Kurir'>
+ <p className='text-start'>
+ {transaction?.data?.pickings[0]?.carrierName ? (
+ <p className=' text-nowrap'>
+ {transaction?.data?.pickings[0]?.carrierName}
+ </p>
+ ) : (
+ '-'
+ )}
+ </p>
+ </DescriptionRow>
+ <DescriptionRow label='Jenis Service'>
+ <p className='text-start'>
+ {transaction?.data?.pickings[0]?.serviceType &&
+ transaction?.data?.pickings[0]?.carrierName
+ ? transaction?.data?.pickings[0]?.serviceType
+ : '-'}
+ </p>
+ </DescriptionRow>
+ <DescriptionRow label='Nomor Resi'>
+ <div className='flex flex-row gap-1 text-start'>
+ {transaction?.data?.pickings[0]?.trackingNumber || '-'}
+ {transaction?.data?.pickings[0]?.trackingNumber && (
+ <button
+ className={`${
+ copied ? 'text-gray-400' : 'text-red-600 '
+ }`}
+ onClick={() =>
+ handleCopyClick(
+ transaction?.data?.pickings[0]?.trackingNumber
+ )
+ }
+ >
+ <svg
+ aria-hidden='true'
+ fill='none'
+ stroke='currentColor'
+ stroke-width='1.5'
+ viewBox='0 0 24 24'
+ className='w-5 h-6'
+ >
+ <path
+ d='M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75'
+ stroke-linecap='round'
+ stroke-linejoin='round'
+ ></path>
+ </svg>
+ </button>
+ )}
+ </div>
+ </DescriptionRow>
+ <DescriptionRow label='Estimasi Tiba'>
+ <p className='text-start'>
+ {transaction?.data?.pickings[0]?.eta
+ ? transaction?.data?.pickings[0]?.eta
+ : '-'}
+ </p>
+ </DescriptionRow>
+ <DescriptionRow label='Alamat Pengiriman'>
+ <div className='flex flex-col justify-start items-start'>
+ <div className='text-start text-nowrap truncate w-full'>
+ {transaction?.data?.address?.customer?.name}
</div>
- <div className='flex gap-x-2'>
- <div className='text-sm text-gray-600 badge-green leading-[1.5] mt-1 text-center'>
- {airway?.delivered ? 'Pesanan Tiba' : 'Sedang Dikirim'}
- </div>
- <ChevronRightIcon className='w-5 stroke-2' />
+ <div className='text-start'>
+ {transaction?.data?.address?.customer?.phone
+ ? transaction?.data?.address?.customer?.phone
+ : '-'}
</div>
- </button>
- ))}
+ <div className='text-start'>
+ {transaction?.data?.address?.customer?.alamatBisnis}
+ </div>
+ </div>
+ </DescriptionRow>
</div>
- {transaction?.data?.pickings == 0 && (
- <div className='badge-red text-sm px-2'>Belum ada pengiriman</div>
- )}
+
</div>
- <Divider />
+ {/* <Divider />
<div className='p-4'>
<p className='font-medium'>Invoice</p>
@@ -491,11 +715,11 @@ const Transaction = ({ id }) => {
<div className='badge-red text-sm px-2'>Belum ada invoice</div>
)}
</div>
- </div>
+ </div> */}
<Divider />
- {!auth?.feature.soApproval && (
+ {/* {!auth?.feature.soApproval && (
<div className='p-4 flex flex-col gap-y-4'>
<DescriptionRow label='Purchase Order'>
{transaction.data?.purchaseOrderName || '-'}
@@ -523,11 +747,59 @@ const Transaction = ({ id }) => {
</div>
)}
- <Divider />
+ <Divider /> */}
<div className='font-medium p-4'>Detail Produk</div>
{transaction?.data?.products.length > 0 ? (
- <div>{memoizeVariantGroupCard}</div>
+ <div className='p-4 pt-0 flex flex-col gap-y-3'>
+ <VariantGroupCard variants={transaction.data?.products} buyMore />
+ <div className='font-medium'>Rincian Pembayaran</div>
+ <div className='flex justify-between mt-1'>
+ <p className='text-gray_r-12/70'>Metode Pembayaran</p>
+ <p>
+ {transaction.data?.paymentType
+ ? transaction.data?.paymentType
+ ?.replace(/_/g, ' ')
+ .replace(/\b\w/g, (char) => char.toUpperCase())
+ : '-'}
+ </p>
+ </div>
+ <div className='flex justify-between mt-1'>
+ <p className='text-gray_r-12/70'>Berat Barang</p>
+ <p>{transaction.data?.pickings[0]?.weightTotal + ' Kg'}</p>
+ </div>
+ <hr className='mt-1 border border-gray-100' />
+ <div className='flex justify-between mt-1'>
+ <p className='text-gray_r-12/70'>Total Belanja</p>
+ <p>{currencyFormat(totalAmount)}</p>
+ </div>
+ <div className='flex justify-between mt-1'>
+ <p className='text-gray_r-12/70'>Diskon Belanja</p>
+ <p>{'- ' + currencyFormat(totalDiscountAmount)}</p>
+ </div>
+ <div className='flex justify-between mt-1'>
+ <p className='text-gray_r-12/70'>Subtotal</p>
+ <p>{currencyFormat(transaction.data?.amountUntaxed)}</p>
+ </div>
+ <div className='flex justify-between mt-1'>
+ <p className='text-gray_r-12/70'>
+ PPN {((PPN - 1) * 100).toFixed(0)}%
+ </p>
+ <p>{currencyFormat(transaction.data?.amountTax)}</p>
+ </div>
+ <div className='flex justify-between mt-1'>
+ <p className='text-gray_r-12/70'>Biaya Pengiriman</p>
+ <p>{currencyFormat(transaction.data?.deliveryAmount)}</p>
+ </div>
+ <div className='flex justify-between mt-1 font-medium'>
+ <p className='text-gray_r-12/70'>Asuransi Pengiriman</p>
+ <p>-</p>
+ </div>
+ <div className='flex justify-between mt-1 font-medium'>
+ <p>Grand Total</p>
+ <p>{currencyFormat(transaction.data?.amountTotal)}</p>
+ </div>
+ </div>
) : (
<div className='badge-red text-sm px-2 ml-4'>
Semua produk telah di reject
@@ -541,13 +813,13 @@ const Transaction = ({ id }) => {
</div>
)}
- <Divider />
+ {/* <Divider /> */}
- <SectionAddress address={transaction.data?.address} />
+ {/* <SectionAddress address={transaction.data?.address} /> */}
- <Divider />
+ {/* <Divider /> */}
- <div className='p-4 pt-0'>
+ {/* <div className='p-4 pt-0'>
{transaction.data?.status == 'draft' &&
auth?.feature.soApproval && (
<div className='flex gap-x-2'>
@@ -604,7 +876,7 @@ const Transaction = ({ id }) => {
Batalkan Transaksi
</button>
)}
- </div>
+ </div> */}
</MobileView>
<DesktopView>
@@ -646,7 +918,7 @@ const Transaction = ({ id }) => {
</span>
<TransactionStatusBadge status={transaction?.data?.status} />
</div>
- <div className='flex gap-x-4'>
+ {/* <div className='flex gap-x-4'>
<button
type='button'
className='btn-solid-red px-3 py-2 mr-auto'
@@ -709,19 +981,15 @@ const Transaction = ({ id }) => {
Batalkan Transaksi
</button>
)}
- </div>
+ </div> */}
- <div className='grid grid-cols-2 gap-x-6 mt-6'>
- <div className='grid grid-cols-2 gap-y-4'>
+ <div className='grid grid-cols-2 gap-x-6 mt-4'>
+ <div className='grid grid-cols-[35%_65%] gap-y-4'>
<div>Nama Sales</div>
<div>: {transaction?.data?.sales}</div>
<div>Tanggal Transaksi</div>
<div>: {transaction?.data?.dateOrder}</div>
- </div>
- <div className='grid grid-cols-2 gap-y-4'>
- <div>Ketentuan Pembayaran</div>
- <div>: {transaction?.data?.paymentTerm}</div>
{!auth?.feature?.soApproval ? (
<>
@@ -754,6 +1022,193 @@ const Transaction = ({ id }) => {
</>
)}
</div>
+ <div className='grid grid-cols-[35%_65%] gap-y-4'>
+ <div>Payment Term</div>
+ <div>: {transaction?.data?.paymentTerm}</div>
+
+ <div>Dokumen Pengiriman</div>
+ <div>
+ :{' '}
+ {transaction.data?.pickings?.length === 0
+ ? 'Belum ada pengiriman'
+ : transaction?.data?.pickings[0].name}
+ </div>
+
+ <div>Invoice Pembelian</div>
+ <div>
+ :{' '}
+ {transaction.data?.invoices?.length === 0
+ ? 'Belum ada invoice'
+ : transaction.data?.invoices?.map((invoice, index) => (
+ <Link
+ href={`/my/invoices/${invoice.id}`}
+ className='contents'
+ key={index}
+ >
+ {invoice?.name}
+ {/* <div className='shadow rounded-md p-4 text-gray_r-12 font-normal flex justify-between'>
+ <div>
+ <p className='mb-1'>{invoice?.name}</p>
+ <div className='flex items-center gap-x-1'>
+ {invoice.amountResidual > 0 ? (
+ <div className='badge-red'>Belum Lunas</div>
+ ) : (
+ <div className='badge-green'>Lunas</div>
+ )}
+ <p className='text-caption-2 text-gray_r-11'>
+ {currencyFormat(invoice.amountTotal)}
+ </p>
+ </div>
+ </div>
+ <ChevronRightIcon className='w-5 stroke-2' />
+ </div> */}
+ </Link>
+ ))}
+ </div>
+ </div>
+ </div>
+ <hr className='mt-4 mb-4 border border-gray-100' />
+ {/* <div className='grid grid-cols-2 gap-x-6'> */}
+ <div className='flex flex-row justify-between items-start w-full h-fit '>
+ <div className='flex flex-col w-1/2 justify-start items-start'>
+ <span className='text-h-sm font-medium mb-2'>
+ Alamat Pengiriman
+ </span>
+ <div className='grid grid-cols-[34%_2%_64%] gap-y-4'>
+ <div>Nama Penerima</div>
+ <div>: </div>
+ <div>{transaction?.data?.address?.customer?.name}</div>
+
+ <div>No. Telepon</div>
+ <div>: </div>
+ <div>
+ {transaction?.data?.address?.customer?.phone
+ ? transaction?.data?.address?.customer?.phone
+ : '-'}
+ </div>
+
+ <div>Email</div>
+ <div>: </div>
+ <div>
+ {transaction?.data?.address?.customer?.email
+ ? transaction?.data?.address?.customer?.email
+ : '-'}
+ </div>
+
+ <div>Alamat Pengiriman</div>
+ <div>: </div>
+ <div className='text-indent-[2px]'>
+ {transaction?.data?.address?.customer?.alamatBisnis}
+ </div>
+ </div>
+ </div>
+ <div className='flex flex-col w-1/2 justify-start items-start'>
+ <span className='text-h-sm font-medium mb-2'>
+ Info Pengiriman
+ </span>
+ <div className='grid grid-cols-[34%_2%_64%] gap-y-4 w-full'>
+ <div>Nomor Resi</div>
+ <div>: </div>
+ <div className='flex flex-row gap-1 '>
+ {transaction?.data?.pickings[0]?.trackingNumber || '-'}
+ {transaction?.data?.pickings[0]?.trackingNumber && (
+ <button
+ className={`${
+ copied ? 'text-gray-400' : 'text-red-600 '
+ }`}
+ onClick={() =>
+ handleCopyClick(
+ transaction?.data?.pickings[0]?.trackingNumber
+ )
+ }
+ >
+ <svg
+ aria-hidden='true'
+ fill='none'
+ stroke='currentColor'
+ stroke-width='1.5'
+ viewBox='0 0 24 24'
+ className='w-5 h-6'
+ >
+ <path
+ d='M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75'
+ stroke-linecap='round'
+ stroke-linejoin='round'
+ ></path>
+ </svg>
+ </button>
+ )}
+ </div>
+
+ <div>Kurir</div>
+ <div>: </div>
+ {transaction?.data?.pickings[0]?.carrierName ? (
+ <div className='flex flex-row w-full gap-1 items-center justify-start '>
+ <p className=' text-nowrap'>
+ {transaction?.data?.pickings[0]?.carrierName}
+ </p>
+ <span
+ className='text-red-500 text-sm font-semibold hover:cursor-pointer'
+ onClick={() =>
+ setIdAWB(transaction?.data?.pickings[0]?.id)
+ }
+ >
+ Lacak Pengiriman
+ </span>
+ </div>
+ ) : (
+ '-'
+ )}
+
+ <div>Jenis Service</div>
+ <div>: </div>
+ <div>
+ {' '}
+ {transaction?.data?.pickings[0]?.serviceType &&
+ transaction?.data?.pickings[0]?.carrierName
+ ? transaction?.data?.pickings[0]?.serviceType
+ : '-'}
+ </div>
+
+ <div>Tanggal Kirim</div>
+ <div>: </div>
+ <div>
+ {transaction?.data?.pickings[0]?.date
+ ? formatDate(transaction?.data?.pickings[0]?.date)
+ : '-'}
+ </div>
+
+ <div>Estimasi Tiba</div>
+ <div>: </div>
+ <div className='text-red-500'>
+ {transaction?.data?.pickings[0]?.eta
+ ? transaction?.data?.pickings[0]?.eta
+ : '-'}
+ </div>
+ {transaction?.data?.pickings[0] && (
+ <div className='w-full bagian-informasi col-span-3'>
+ <div
+ class='flex items-center w-fit py-2 px-3 mb-4 text-sm border border-yellow-500 text-yellow-800 rounded-lg bg-yellow-50'
+ role='alert'
+ >
+ <svg
+ class='flex-shrink-0 inline w-4 h-4 mr-2'
+ aria-hidden='true'
+ fill='currentColor'
+ viewBox='0 0 20 20'
+ >
+ <path d='M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5ZM9.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM12 15H8a1 1 0 0 1 0-2h1v-3H8a1 1 0 0 1 0-2h2a1 1 0 0 1 1 1v4h1a1 1 0 0 1 0 2Z' />
+ </svg>
+ <div className='text-justify flex flex-col gap-1'>
+ <span className='text-black text-xs'>
+ Pesanan anda mungkin mengalami keterlambatan tiba
+ </span>
+ </div>
+ </div>
+ </div>
+ )}
+ </div>
+ </div>
</div>
<div className='flex gap-x-3'>
@@ -1045,7 +1500,49 @@ const Transaction = ({ id }) => {
)}
{transaction?.data?.products?.length > 0 && (
- <div className='flex justify-end mt-4'>
+ // <div className='flex justify-end mt-4'>
+ // <div className='w-1/4 grid grid-cols-2 gap-y-3 text-gray_r-12/80'>
+ // <div className='text-right'>Subtotal</div>
+ // <div className='text-right font-medium'>
+ // {currencyFormat(transaction.data?.amountUntaxed)}
+ // </div>
+
+ // <div className='text-right'>
+ // PPN {((PPN - 1) * 100).toFixed(0)}%
+ // </div>
+ // <div className='text-right font-medium'>
+ // {currencyFormat(transaction.data?.amountTax)}
+ // </div>
+
+ // <div className='text-right whitespace-nowrap'>
+ // Biaya Pengiriman
+ // </div>
+ // <div className='text-right font-medium'>
+ // {currencyFormat(transaction.data?.deliveryAmount)}
+ // </div>
+
+ // <div className='text-right'>Grand Total</div>
+ // <div className='text-right font-medium text-gray_r-12'>
+ // {currencyFormat(transaction.data?.amountTotal)}
+ // </div>
+ // </div>
+ // </div>
+
+ <div className='flex justify-end mt-4 flex-col items-end'>
+ <div className='w-1/4 grid grid-cols-2 gap-y-3 text-gray_r-12/80'>
+ <div className='text-right'>Total Belanja</div>
+ <div className='text-right font-medium'>
+ {currencyFormat(totalAmount)}
+ </div>
+
+ <div className='text-right'>Total Diskon</div>
+ <div className='text-right font-medium'>
+ {'- ' + currencyFormat(totalDiscountAmount)}
+ </div>
+ </div>
+
+ <hr className='w-full border border-gray-100 mt-4 mb-4 self-stretch' />
+
<div className='w-1/4 grid grid-cols-2 gap-y-3 text-gray_r-12/80'>
<div className='text-right'>Subtotal</div>
<div className='text-right font-medium'>
@@ -1059,15 +1556,17 @@ const Transaction = ({ id }) => {
{currencyFormat(transaction.data?.amountTax)}
</div>
- <div className='text-right whitespace-nowrap'>
- Biaya Pengiriman
- </div>
+ <div className='text-right'>Biaya Pengiriman</div>
<div className='text-right font-medium'>
{currencyFormat(transaction.data?.deliveryAmount)}
</div>
+ </div>
+ <hr className='w-full border border-gray-100 mt-4 mb-4 self-stretch' />
+
+ <div className='w-1/4 grid grid-cols-2 gap-y-3 font-semibold'>
<div className='text-right'>Grand Total</div>
- <div className='text-right font-medium text-gray_r-12'>
+ <div className='text-right'>
{currencyFormat(transaction.data?.amountTotal)}
</div>
</div>