const BillPreview = (props) => { const { saleNumber, setSaleNumber} = props const [loading, setLoading] = useState(false) const [total, setTotal] = useState({}) const [data, setData] = useState() const user_lang = commonFunc.getCookies('user_lang') || 'vi'; const config = { token: _token_encode, lang: user_lang }; const containerRef = useRef(null); const qrRef = useRef(); const [tenderCash, setTenderCash]=useState() //// const handleGetDataToPrint = async () => { try { setLoading(true) const url =`/api/POS/print-bill/${saleNumber}` const resultObj = await commonApi.APIGETByURL(url, config) if (resultObj.status == 200){ let dataTmp = resultObj?.data //dataTmp['carts'] = JSON.parse(dataTmp['carts']) setData(dataTmp) calculateSums (dataTmp?.carts) setTenderCash( dataTmp?.transaction_tenders?.find(tender => tender.tender_code === 'C')) if (window.QRCode) { // Tạo mã QR const qrCode = new window.QRCode(qrRef.current, { text: dataTmp?.id.toString()+'-'+dataTmp?.branch_no, width: 50, height: 50, }); return () => { qrCode.clear(); // Dọn dẹp mã QR khi component unmount }; } else { console.error("QRCode library is not loaded."); } } //console.log(dataInit ) } catch (e) { console.log("ERROR get-POS/print-bill" ) }finally{ setLoading(false) } }; useEffect(()=>{ handleGetDataToPrint() document.getElementById('master_footer').style.display = 'none'; if (containerRef.current) { containerRef.current.focus(); } },[]) const handleClose=()=>{ document.getElementById('master_footer').style.display = ''; setSaleNumber(null) } function calculateSums(arr) { let totalAmount = 0; let totalExtension = 0; let totalQty =0; arr.forEach(promotion => { promotion?.items_apply.forEach(item => { totalAmount += item.qty * item.price; totalExtension += item.extension; totalQty+=item.qty }); }); const total = { totalAmount: totalAmount, totalExtension, totalQty:totalQty }; setTotal(total) } const titles = { vi: { shop: "CỬA HÀNG", receipt: "PHIẾU THANH TOÁN", customer: "Khách hàng:", productList: "Danh sách sản phẩm:", quantity: "SL", price: "Giá bán (Đã VAT)", totalAmount: "Thành tiền", paymentMethod: "Phương thức thanh toán:", total: "Tổng tiền:", remain:"Cần thanh toán", discount:"Đã giảm", cashGiven: "Khách đưa:", change: "Tiền thừa:", vatNote: "Lưu ý: HĐ VAT chỉ xuất trong ngày !", qrNote: `Để tra cứu hóa đơn, xin vui lòng truy cập vào ${data?.page} hoặc scan QR Code trên bill`, thankYou: "Cảm ơn quý khách! Hẹn gặp lại" }, en: { shop: "SHOP", receipt: "RECEIPT", customer: "Customer:", productList: "Product List:", quantity: "Qty", price: "Selling Price (Incl. VAT)", totalAmount: "Total Amount", paymentMethod: "Payment Method:", total: "Total:", remain:"Total after discount", discount:"Discount", cashGiven: "Cash Given:", change: "Change:", vatNote: "Note: VAT invoices can only be issued on the same day!", qrNote: `To look up invoices, please visit ${data?.page} or scan the QR Code on the bill`, thankYou: "Thank you! See you again" } }; const currentTitles = titles[user_lang]; const handleKeyDown = (event) => { if (event.key === 'Enter' || event.key === 'Escape') { handleClose(); } } return (
handleKeyDown(e)} style={{ width: '100%', maxWidth: '100mm', height: '100%', fontFamily: 'Arial', padding: '5px', margin: '0 auto' }}>
{data?.branch_info?.branch_code} - {data?.branch_info?.store_name_e}
{currentTitles.receipt} {data?.id}: {commonFunc.formatDate(new Date(data?.sale_date), 'DD/MM/YYYY HH:mm')}
{data?.customer &&
{currentTitles.customer} {data?.customer?.given_name} {data?.customer?.family_name}
{data?.customer?.mobile} {data?.customer?.email && {data.customer.email} }
}
{currentTitles.productList}
{currentTitles.quantity} {currentTitles.price} {currentTitles.totalAmount}
{data?.carts?.map((cart, index) => (
{cart?.name_en}
{cart.items_apply.map((item, idx) => (
{item.item_code}: {item?.description_en[0]}
{commonFunc.formatNumber(item.qty)} (VAT {parseInt(item?.product_info?.product?.Rate)} %) {commonFunc.formatNumber(item?.price)} {commonFunc.formatNumber(item?.promotion_price - item?.discount_value)} {commonFunc.formatNumber(item?.extension )}
))}
))}
{currentTitles.total} {commonFunc.formatNumber(total?.totalAmount)}
{currentTitles.discount} {commonFunc.formatNumber(total?.totalAmount-total?.totalExtension)}
{currentTitles.remain} {commonFunc.formatNumber(total?.totalExtension)}
{currentTitles.paymentMethod} {data?.transaction_tenders?.map((tender, index) => (
{tender?.tender_desc} {commonFunc.formatNumber(tender?.contribution)}
))}
{tenderCash && tenderCash?.collected > tenderCash?.contribution && <>
{currentTitles.cashGiven}: {commonFunc.formatNumber(tenderCash?.collected)}
{currentTitles.change}: {commonFunc.formatNumber(tenderCash?.collected - tenderCash?.contribution)}
}
{currentTitles.vatNote}
{currentTitles.qrNote}
{currentTitles.thankYou}
); };