code cleanup and translations

This commit is contained in:
swtmply
2023-03-18 02:45:00 +08:00
parent fa05d0b401
commit 88ee4f13e1
6 changed files with 81 additions and 19 deletions

View File

@@ -236,7 +236,7 @@ const CardPaymentModalComponent = ({
className="ipayfield"
disabled={!amount || !payer || !jobid}
>
Proceed to Payment
{t("job_payments.buttons.proceedtopayment")}
</Button>
{context?.balance && (
<DataLabel

View File

@@ -1,5 +1,6 @@
import { Button, Modal } from "antd";
import React from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { toggleModalVisible } from "../../redux/modals/modals.actions";
@@ -22,6 +23,7 @@ function CardPaymentModalContainer({
bodyshop,
}) {
const { context, visible } = cardPaymentModal;
const { t } = useTranslation();
const handleCancel = () => {
toggleModalVisible();
@@ -38,7 +40,7 @@ function CardPaymentModalContainer({
onCancel={handleCancel}
footer={[
<Button key="back" onClick={handleCancel}>
Go Back
{t("job_payments.buttons.goback")}
</Button>,
]}
width="60%"

View File

@@ -5,17 +5,26 @@ import {
INSERT_PAYMENT_RESPONSE,
QUERY_PAYMENT_RESPONSE_BY_PAYMENT_ID,
} from "../../graphql/payment_response.queries";
import { Button, Descriptions, InputNumber, Modal } from "antd";
import { Button, Descriptions, InputNumber, Modal, notification } from "antd";
import moment from "moment";
import axios from "axios";
import { INSERT_NEW_PAYMENT } from "../../graphql/payments.queries";
import { useTranslation } from "react-i18next";
const { confirm } = Modal;
const openNotificationWithIcon = (type, t) => {
notification[type]({
message: t("job_payments.notifications.error.title"),
description: t("job_payments.notifications.error.description"),
});
};
const PaymentExpandedRowComponent = ({ record }) => {
const [refundAmount, setRefundAmount] = useState(0);
const [insertPayment] = useMutation(INSERT_NEW_PAYMENT);
const [insertPaymentResponse] = useMutation(INSERT_PAYMENT_RESPONSE);
const { t } = useTranslation();
const { loading, error, data } = useQuery(
QUERY_PAYMENT_RESPONSE_BY_PAYMENT_ID,
@@ -28,11 +37,14 @@ const PaymentExpandedRowComponent = ({ record }) => {
}
);
const { data: refundable_amount } = useQuery(GET_REFUNDABLE_AMOUNT_BY_JOBID, {
variables: {
jobid: record.jobid,
},
});
const { data: refundable_amount, refetch } = useQuery(
GET_REFUNDABLE_AMOUNT_BY_JOBID,
{
variables: {
jobid: record.jobid,
},
}
);
const insertPayments = async (payment_response, refund_response) => {
await insertPayment({
@@ -88,7 +100,15 @@ const PaymentExpandedRowComponent = ({ record }) => {
paymentid: payment_response.ext_paymentid,
});
if (refundResponse.data.status < 0) {
openNotificationWithIcon("error", t);
return;
}
insertPayments(payment_response, refundResponse);
// refetch refundable amount
refetch();
},
onCancel() {},
});
@@ -100,34 +120,38 @@ const PaymentExpandedRowComponent = ({ record }) => {
const payment_response = data.payment_response[0];
const max_refundable_amount =
refundable_amount.payment_response_aggregate.aggregate.sum.amount;
refundable_amount?.payment_response_aggregate.aggregate.sum.amount;
return (
<div>
<Descriptions
title="Payment Details"
title={t("job_payments.titles.descriptions")}
contentStyle={{ fontWeight: "600" }}
column={4}
>
<Descriptions.Item label="Payer">{record.payer}</Descriptions.Item>
<Descriptions.Item label="Payer Name">
<Descriptions.Item label={t("job_payments.titles.payer")}>
{record.payer}
</Descriptions.Item>
<Descriptions.Item label={t("job_payments.titles.payername")}>
{payment_response?.response?.nameOnCard ?? ""}
</Descriptions.Item>
<Descriptions.Item label="Amount">{record.amount}</Descriptions.Item>
<Descriptions.Item label="Date of Payment">
<Descriptions.Item label={t("job_payments.titles.amount")}>
{record.amount}
</Descriptions.Item>
<Descriptions.Item label={t("job_payments.titles.dateOfPayment")}>
{moment(record.created_at).format("YYYY-MM-DD HH:mm:ss")}
</Descriptions.Item>
<Descriptions.Item label="Transaction ID">
<Descriptions.Item label={t("job_payments.titles.transactionid")}>
{record.transactionid}
</Descriptions.Item>
<Descriptions.Item label="Payment Reference ID">
<Descriptions.Item label={t("job_payments.titles.paymentid")}>
{payment_response?.response?.paymentreferenceid ?? ""}
</Descriptions.Item>
<Descriptions.Item label="Payment Type">
<Descriptions.Item label={t("job_payments.titles.paymenttype")}>
{record.type}
</Descriptions.Item>
{payment_response && (
<Descriptions.Item label="Refund Amount">
<Descriptions.Item label={t("job_payments.titles.refundamount")}>
<InputNumber
onChange={setRefundAmount}
max={max_refundable_amount}
@@ -135,7 +159,7 @@ const PaymentExpandedRowComponent = ({ record }) => {
/>
<Button onClick={() => showConfirm(payment_response)}>
Refund Payment
{t("job_payments.buttons.refundpayment")}
</Button>
</Descriptions.Item>
)}

View File

@@ -956,6 +956,30 @@
"priorsuccesfulexport": "This record has previously been exported successfully. Please make sure it has already been deleted in the target system."
}
},
"job_payments": {
"buttons": {
"refundpayment": "Refund Payment",
"proceedtopayment": "Proceed to Payment",
"goback": "Go Back"
},
"titles": {
"descriptions": "Payment Details",
"payer": "Payer",
"payername": "Payer Name",
"amount": "Amount",
"dateOfPayment": "Date of Payment",
"transactionid": "Transaction ID",
"paymentid": "Payment Reference ID",
"paymenttype": "Payment Type",
"refundamount": "Refund Amount"
},
"notifications": {
"error": {
"title": "Error placing refund",
"description": "Please try again. Make sure the refund amount does not exceeds the payment amount."
}
}
},
"general": {
"actions": {
"add": "Add",

View File

@@ -244,6 +244,12 @@ app.post(
intellipay.generate_payment_url
);
app.post(
"/intellipay/postback",
// fb.validateFirebaseIdToken,
intellipay.postback
);
var ioevent = require("./server/ioevent/ioevent");
app.post("/ioevent", ioevent.default);
app.post("/newlog", (req, res) => {

View File

@@ -104,3 +104,9 @@ exports.generate_payment_url = async (req, res) => {
res.json({ error });
}
};
exports.postback = async (req, res) => {
console.log("postback as", req.body);
res.send({ message: "postback" });
};