import React, { useEffect, useState } from "react"; import styles from "./Transactions.module.css"; import { useParams } from "react-router-dom"; import { ColorRing } from "react-loader-spinner"; import { getMyTransactions, confirmTransaction, declineTransaction, getTransactionsFromCafe, } from "../helpers/transactionHelpers"; import { getTables } from "../helpers/tableHelper"; import TableCanvas from "../components/TableCanvas"; import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc'; import timezone from 'dayjs/plugin/timezone'; export default function Transactions({ shop, shopId, propsShopId, sendParam, deviceType }) { const { shopIdentifier, tableId } = useParams(); if (sendParam) sendParam({ shopIdentifier, tableId }); dayjs.extend(utc); dayjs.extend(timezone); const [tables, setTables] = useState([]); const [selectedTable, setSelectedTable] = useState(null); const [transactions, setTransactions] = useState([]); const [myTransactions, setMyTransactions] = useState([]); const [isPaymentLoading, setIsPaymentLoading] = useState(false); useEffect(() => { const fetchTransactions = async () => { try { let response; response = await getTransactionsFromCafe(shopId || propsShopId, 5, false); console.log(response) if(response) { setTransactions(response); return; } } catch (error) { console.error("Error fetching transactions:", error); } try { let response; response = await getMyTransactions(shopId || propsShopId, 5); console.log(response) const combinedTransactions = []; response.forEach(cafe => { const { cafeId, name: cafeName, transactions } = cafe; transactions.forEach(transaction => { const newTransaction = { ...transaction, cafeId, cafeName, DetailedTransactions: transaction.detailedTransactions // Rename here }; delete newTransaction.detailedTransactions; // Remove the old key combinedTransactions.push(newTransaction); }); }); // combinedTransactions now contains all transactions with cafe info and renamed key console.log(combinedTransactions) // combinedTransactions now contains all transactions with cafe info setTransactions(combinedTransactions); } catch (error) { console.error("Error fetching transactions:", error); } }; fetchTransactions(); }, [shopId || propsShopId]); useEffect(() => { const fetchData = async () => { try { const fetchedTables = await getTables(shopId || propsShopId); setTables(fetchedTables); } catch (error) { console.error("Error fetching tables:", error); } }; fetchData(); }, [shopId || propsShopId]); const calculateTotalPrice = (detailedTransactions) => { return detailedTransactions.reduce((total, dt) => { return total + dt.qty * (dt.promoPrice ? dt.promoPrice : dt.price); }, 0); }; const calculateAllTransactionsTotal = (transactions) => { return transactions.reduce((grandTotal, transaction) => { return grandTotal + calculateTotalPrice(transaction.DetailedTransactions); }, 0); }; const handleConfirm = async (transactionId) => { setIsPaymentLoading(true); try { const c = await confirmTransaction(transactionId); if (c) { // Update the confirmed status locally setTransactions((prevTransactions) => prevTransactions.map((transaction) => transaction.transactionId === transactionId ? { ...transaction, confirmed: 1 } // Set to confirmed : transaction ) ); } } catch (error) { console.error("Error processing payment:", error); } finally { setIsPaymentLoading(false); } }; const handleDecline = async (transactionId) => { setIsPaymentLoading(true); try { const c = await declineTransaction(transactionId); if (c) { // Update the confirmed status locally setTransactions((prevTransactions) => prevTransactions.map((transaction) => transaction.transactionId === transactionId ? { ...transaction, confirmed: -1 } // Set to confirmed : transaction ) ); } } catch (error) { console.error("Error processing payment:", error); } finally { setIsPaymentLoading(false); } }; return (

Daftar transaksi Rp {calculateAllTransactionsTotal(transactions)}

{/* */}
{transactions && transactions.map((transaction) => (
setSelectedTable(transaction.Table || { tableId: 0 }) } >
{transaction.confirmed === 1 ? ( ) : transaction.confirmed === -1 || transaction.confirmed === -2 ? (
) : transaction.confirmed === 2 ? ( ) : transaction.confirmed === 3 ? ( "Transaction success" ) : ( )}

{transaction.confirmed === 1 ? ( "Silahkan cek pembayaran" ) : transaction.confirmed === -1 ? ( "Dibatalkan oleh kasir" ) : transaction.confirmed === -2 ? ( "Dibatalkan oleh pelanggan" ) : transaction.confirmed === 2 ? ( "Sedang diproses" ) : transaction.confirmed === 3 ? ( "Transaction success" ) : ( "Silahkan cek ketersediaan" )}

Transaction ID: {transaction.transactionId}

Payment Type: {transaction.payment_type}

{dayjs.utc(transaction.createdAt).tz(shop.timezone).format('YYYY-MM-DD HH:mm:ss')}

{transaction.paymentClaimed && transaction.confirmed < 2 && (

payment claimed

)}
    {transaction.DetailedTransactions.map((detail) => (
  • {detail.Item.name} - {detail.qty < 1 ? 'tidak tersedia' : `${detail.qty} x Rp ${detail.promoPrice ? detail.promoPrice : detail.price}`}
  • ))}

{transaction.serving_type === "pickup" ? "Self pickup" : `Serve to ${transaction.Table ? transaction.Table.tableNo : "N/A" }`}

{transaction.notes && ( <>
Note :