import { Card, Input, Space, Table } from "antd"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { Link } from "react-router-dom"; import { createStructuredSelector } from "reselect"; import { logImEXEvent } from "../../firebase/firebase.utils"; import { selectBodyshop } from "../../redux/user/user.selectors"; import CurrencyFormatter from "../../utils/CurrencyFormatter"; import { DateFormatter, DateTimeFormatter } from "../../utils/DateFormatter"; import { exportPageLimit } from "../../utils/config"; import { alphaSort, dateSort } from "../../utils/sorters"; import useLocalStorage from "../../utils/useLocalStorage"; import ExportLogsCountDisplay from "../export-logs-count-display/export-logs-count-display.component"; import OwnerNameDisplay, { OwnerNameDisplayFunction } from "../owner-name-display/owner-name-display.component"; import PaymentExportButton from "../payment-export-button/payment-export-button.component"; import PaymentMarkSelectedExported from "../payment-mark-selected-exported/payment-mark-selected-exported.component"; import PaymentsExportAllButton from "../payments-export-all-button/payments-export-all-button.component"; import QboAuthorizeComponent from "../qbo-authorize/qbo-authorize.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop }); const mapDispatchToProps = () => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) }); export default connect(mapStateToProps, mapDispatchToProps)(AccountingPayablesTableComponent); export function AccountingPayablesTableComponent({ bodyshop, loading, payments, refetch }) { const { t } = useTranslation(); const [selectedPayments, setSelectedPayments] = useState([]); const [transInProgress, setTransInProgress] = useState(false); const [state, setState] = useLocalStorage("accounting-payments-table-state", { sortedInfo: {}, search: "" }); const handleTableChange = (pagination, filters, sorter) => { setState({ ...state, filteredInfo: filters, sortedInfo: sorter }); }; const columns = [ { title: t("jobs.fields.ro_number"), dataIndex: "ro_number", key: "ro_number", sorter: (a, b) => alphaSort(a.job.ro_number, b.job.ro_number), sortOrder: state.sortedInfo.columnKey === "ro_number" && state.sortedInfo.order, render: (text, record) => {record.job.ro_number} }, { title: t("payments.fields.date"), dataIndex: "date", key: "date", sorter: (a, b) => dateSort(a.date, b.date), sortOrder: state.sortedInfo.columnKey === "date" && state.sortedInfo.order, render: (text, record) => {record.date} }, { title: t("jobs.fields.owner"), dataIndex: "owner", key: "owner", ellipsis: true, sorter: (a, b) => alphaSort(OwnerNameDisplayFunction(a.job), OwnerNameDisplayFunction(b.job)), sortOrder: state.sortedInfo.columnKey === "owner" && state.sortedInfo.order, render: (text, record) => { return record.job.owner ? ( ) : ( ); } }, { title: t("payments.fields.amount"), dataIndex: "amount", key: "amount", sorter: (a, b) => a.amount - b.amount, sortOrder: state.sortedInfo.columnKey === "amount" && state.sortedInfo.order, render: (text, record) => {record.amount} }, { title: t("payments.fields.type"), dataIndex: "type", key: "type", sorter: (a, b) => a.type.localeCompare(b.type), sortOrder: state.sortedInfo.columnKey === "type" && state.sortedInfo.order, filters: bodyshop.md_payment_types.map((s) => { return { text: s, value: [s] }; }), onFilter: (value, record) => value.includes(record.type) }, { title: t("payments.fields.memo"), dataIndex: "memo", key: "memo" }, { title: t("payments.fields.transactionid"), dataIndex: "transactionid", key: "transactionid" }, { title: t("payments.fields.created_at"), dataIndex: "created_at", key: "created_at", sorter: (a, b) => dateSort(a.created_at, b.created_at), sortOrder: state.sortedInfo.columnKey === "created_at" && state.sortedInfo.order, render: (text, record) => {record.created_at} }, //{ // title: t("payments.fields.exportedat"), // dataIndex: "exportedat", // key: "exportedat", // render: (text, record) => ( // {record.exportedat} // ), //}, { title: t("exportlogs.labels.attempts"), dataIndex: "attempts", key: "attempts", render: (text, record) => }, { title: t("general.labels.actions"), dataIndex: "actions", key: "actions", render: (text, record) => ( ) } ]; const handleSearch = (e) => { setState({ ...state, search: e.target.value }); logImEXEvent("account_payments_table_search"); }; const dataSource = state.search ? payments.filter( (v) => (v.paymentnum || "").toLowerCase().includes(state.search.toLowerCase()) || ((v.job && v.job.ro_number) || "").toLowerCase().includes(state.search.toLowerCase()) || ((v.job && v.job.ownr_fn) || "").toLowerCase().includes(state.search.toLowerCase()) || ((v.job && v.job.ownr_ln) || "").toLowerCase().includes(state.search.toLowerCase()) || ((v.job && v.job.ownr_co_nm) || "").toLowerCase().includes(state.search.toLowerCase()) ) : payments; return ( {bodyshop.accountingconfig && bodyshop.accountingconfig.qbo && } } > setSelectedPayments(selectedRows.map((i) => i.id)), onSelect: (record, selected, selectedRows) => { setSelectedPayments(selectedRows.map((i) => i.id)); }, getCheckboxProps: (record) => ({ disabled: record.exported }), selectedRowKeys: selectedPayments, type: "checkbox" }} /> ); }