IO-2261 Add Delete function, Correct Payment edit, add Totals to Bills handler

This commit is contained in:
Allan Carr
2023-05-05 13:10:07 -07:00
parent 49a61e1564
commit a3557bbc86
6 changed files with 64 additions and 4 deletions

View File

@@ -6,7 +6,7 @@ import { useTranslation } from "react-i18next";
import { DELETE_BILL } from "../../graphql/bills.queries"; import { DELETE_BILL } from "../../graphql/bills.queries";
import RbacWrapper from "../rbac-wrapper/rbac-wrapper.component"; import RbacWrapper from "../rbac-wrapper/rbac-wrapper.component";
export default function BillDeleteButton({ bill }) { export default function BillDeleteButton({ bill, callback }) {
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const { t } = useTranslation(); const { t } = useTranslation();
const [deleteBill] = useMutation(DELETE_BILL); const [deleteBill] = useMutation(DELETE_BILL);
@@ -36,6 +36,8 @@ export default function BillDeleteButton({ bill }) {
if (!!!result.errors) { if (!!!result.errors) {
notification["success"]({ message: t("bills.successes.deleted") }); notification["success"]({ message: t("bills.successes.deleted") });
if (callback && typeof callback === "function") callback(bill.id);
} else { } else {
//Check if it's an fkey violation. //Check if it's an fkey violation.
const error = JSON.stringify(result.errors); const error = JSON.stringify(result.errors);

View File

@@ -1,4 +1,5 @@
import { EditFilled, SyncOutlined } from "@ant-design/icons"; import { EditFilled, SyncOutlined } from "@ant-design/icons";
import { useApolloClient } from "@apollo/client";
import { Button, Card, Input, Space, Table, Typography } from "antd"; import { Button, Card, Input, Space, Table, Typography } from "antd";
import axios from "axios"; import axios from "axios";
import queryString from "query-string"; import queryString from "query-string";
@@ -7,6 +8,7 @@ import { useTranslation } from "react-i18next";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Link, useHistory, useLocation } from "react-router-dom"; import { Link, useHistory, useLocation } from "react-router-dom";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { QUERY_PAYMENT_BY_ID } from "../../graphql/payments.queries";
import { setModalContext } from "../../redux/modals/modals.actions"; import { setModalContext } from "../../redux/modals/modals.actions";
import { selectBodyshop } from "../../redux/user/user.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors";
import CurrencyFormatter from "../../utils/CurrencyFormatter"; import CurrencyFormatter from "../../utils/CurrencyFormatter";
@@ -43,6 +45,7 @@ export function PaymentsListPaginated({
const [openSearchResults, setOpenSearchResults] = useState([]); const [openSearchResults, setOpenSearchResults] = useState([]);
const [searchLoading, setSearchLoading] = useState(false); const [searchLoading, setSearchLoading] = useState(false);
const { page, sortcolumn, sortorder } = search; const { page, sortcolumn, sortorder } = search;
const client = useApolloClient();
const history = useHistory(); const history = useHistory();
const [state, setState] = useState({ const [state, setState] = useState({
sortedInfo: {}, sortedInfo: {},
@@ -154,10 +157,20 @@ export function PaymentsListPaginated({
<Space> <Space>
<Button <Button
disabled={record.exportedat} disabled={record.exportedat}
onClick={() => { onClick={async () => {
let apolloResults;
if (search.search) {
const { data } = await client.query({
query: QUERY_PAYMENT_BY_ID,
variables: {
paymentId: record.id,
},
});
apolloResults = data.payments_by_pk;
}
setPaymentContext({ setPaymentContext({
actions: { refetch: refetch }, actions: { refetch: refetch },
context: record, context: apolloResults ? record : apolloResults,
}); });
}} }}
> >

View File

@@ -114,3 +114,37 @@ export const QUERY_JOB_PAYMENT_TOTALS = gql`
} }
} }
`; `;
export const QUERY_PAYMENT_BY_ID = gql`query QUERY_PAYMENT_BY_ID($paymentId: uuid!) {
payments_by_pk(id: $paymentId) {
id
created_at
jobid
paymentnum
date
job {
id
ro_number
ownerid
ownr_co_nm
ownr_fn
ownr_ln
owner {
id
ownr_co_nm
ownr_fn
ownr_ln
}
}
transactionid
memo
type
amount
stripeid
exportedat
stripeid
payer
}
}
`

View File

@@ -177,7 +177,15 @@ export function BillsListPage({
// {t("bills.actions.return")} // {t("bills.actions.return")}
// </Button> // </Button>
} }
<BillDeleteButton bill={record} /> <BillDeleteButton
bill={record}
callback={(deletedBillid) => {
//Filter out the state and set it again.
setOpenSearchResults((currentResults) =>
currentResults.filter((bill) => bill.id !== deletedBillid)
);
}}
/>
{record.isinhouse && ( {record.isinhouse && (
<PrintWrapperComponent <PrintWrapperComponent
templateObject={{ templateObject={{

View File

@@ -210,6 +210,7 @@ async function OpenSearchUpdateHandler(req, res) {
id id
date date
exported exported
exported_at
invoice_number invoice_number
is_credit_memo is_credit_memo
total total

View File

@@ -131,8 +131,10 @@ async function OpenSearchUpdateHandler(req, res) {
"id", "id",
"date", "date",
"exported", "exported",
"exported_at",
"invoice_number", "invoice_number",
"is_credit_memo", "is_credit_memo",
"total"
]), ]),
...bill.bills_by_pk, ...bill.bills_by_pk,
bodyshopid: bill.bills_by_pk.job.shopid, bodyshopid: bill.bills_by_pk.job.shopid,