Merged in release/2025-03-28 (pull request #2218)

IO-3176 IntelliPay Payment Method Mapping
This commit is contained in:
Dave Richer
2025-03-19 18:19:45 +00:00
5 changed files with 11432 additions and 11316 deletions

View File

@@ -1,11 +1,10 @@
import { Alert, Form, Switch } from "antd"; import { Alert, Form, Select, Switch } from "antd";
import React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component";
import {connect} from "react-redux"; import { connect } from "react-redux";
import {createStructuredSelector} from "reselect"; import { createStructuredSelector } from "reselect";
import {selectBodyshop} from "../../redux/user/user.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop bodyshop: selectBodyshop
@@ -16,17 +15,17 @@ const mapDispatchToProps = () => ({
export default connect(mapStateToProps, mapDispatchToProps)(ShopInfoIntellipay); export default connect(mapStateToProps, mapDispatchToProps)(ShopInfoIntellipay);
// noinspection JSUnusedLocalSymbols // noinspection JSUnusedLocalSymbols
export function ShopInfoIntellipay({bodyshop, form}) { export function ShopInfoIntellipay({ bodyshop, form }) {
const {t} = useTranslation(); const { t } = useTranslation();
return ( return (
<> <>
<Form.Item dependencies={[["intellipay_config", "enable_cash_discount"]]}> <Form.Item dependencies={[["intellipay_config", "enable_cash_discount"]]}>
{() => { {() => {
const {intellipay_config} = form.getFieldsValue(); const { intellipay_config } = form.getFieldsValue();
if (intellipay_config?.enable_cash_discount) if (intellipay_config?.enable_cash_discount)
return <Alert message={t("bodyshop.labels.intellipay_cash_discount")}/>; return <Alert message={t("bodyshop.labels.intellipay_cash_discount")} />;
}} }}
</Form.Item> </Form.Item>
@@ -36,7 +35,93 @@ export function ShopInfoIntellipay({bodyshop, form}) {
valuePropName="checked" valuePropName="checked"
name={["intellipay_config", "enable_cash_discount"]} name={["intellipay_config", "enable_cash_discount"]}
> >
<Switch/> <Switch />
</Form.Item>
</LayoutFormRow>
<LayoutFormRow header={t("bodyshop.fields.intellipay_config.payment_type")}>
<Form.Item
label={t("bodyshop.fields.intellipay_config.payment_map.visa")}
name={["intellipay_config", "payment_map", "visa"]}
>
<Select showSearch>
{bodyshop.md_payment_types.map((item, idx) => (
<Select.Option key={idx} value={item}>
{item}
</Select.Option>
))}
</Select>
</Form.Item>
<Form.Item
label={t("bodyshop.fields.intellipay_config.payment_map.mast")}
name={["intellipay_config", "payment_map", "mast"]}
>
<Select showSearch>
{bodyshop.md_payment_types.map((item, idx) => (
<Select.Option key={idx} value={item}>
{item}
</Select.Option>
))}
</Select>
</Form.Item>
<Form.Item
label={t("bodyshop.fields.intellipay_config.payment_map.amex")}
name={["intellipay_config", "payment_map", "amex"]}
>
<Select showSearch>
{bodyshop.md_payment_types.map((item, idx) => (
<Select.Option key={idx} value={item}>
{item}
</Select.Option>
))}
</Select>
</Form.Item>
<Form.Item
label={t("bodyshop.fields.intellipay_config.payment_map.disc")}
name={["intellipay_config", "payment_map", "disc"]}
>
<Select showSearch>
{bodyshop.md_payment_types.map((item, idx) => (
<Select.Option key={idx} value={item}>
{item}
</Select.Option>
))}
</Select>
</Form.Item>
<Form.Item
label={t("bodyshop.fields.intellipay_config.payment_map.dnrs")}
name={["intellipay_config", "payment_map", "dnrs"]}
>
<Select showSearch>
{bodyshop.md_payment_types.map((item, idx) => (
<Select.Option key={idx} value={item}>
{item}
</Select.Option>
))}
</Select>
</Form.Item>
<Form.Item
label={t("bodyshop.fields.intellipay_config.payment_map.jcb")}
name={["intellipay_config", "payment_map", "jcb"]}
>
<Select showSearch>
{bodyshop.md_payment_types.map((item, idx) => (
<Select.Option key={idx} value={item}>
{item}
</Select.Option>
))}
</Select>
</Form.Item>
<Form.Item
label={t("bodyshop.fields.intellipay_config.payment_map.intr")}
name={["intellipay_config", "payment_map", "intr"]}
>
<Select showSearch>
{bodyshop.md_payment_types.map((item, idx) => (
<Select.Option key={idx} value={item}>
{item}
</Select.Option>
))}
</Select>
</Form.Item> </Form.Item>
</LayoutFormRow> </LayoutFormRow>
</> </>

View File

@@ -334,7 +334,17 @@
}, },
"intellipay_config": { "intellipay_config": {
"cash_discount_percentage": "Cash Discount %", "cash_discount_percentage": "Cash Discount %",
"enable_cash_discount": "Enable Cash Discounting" "enable_cash_discount": "Enable Cash Discounting",
"payment_type": "Payment Type Map",
"payment_map": {
"amex": "American Express",
"disc": "Discover",
"dnrs": "Diners",
"intr": "Interac",
"jcb": "JCB",
"mast": "MasterCard",
"visa": "Visa"
}
}, },
"invoice_federal_tax_rate": "Invoices - Federal Tax Rate", "invoice_federal_tax_rate": "Invoices - Federal Tax Rate",
"invoice_local_tax_rate": "Invoices - Local Tax Rate", "invoice_local_tax_rate": "Invoices - Local Tax Rate",

View File

@@ -334,7 +334,17 @@
}, },
"intellipay_config": { "intellipay_config": {
"cash_discount_percentage": "", "cash_discount_percentage": "",
"enable_cash_discount": "" "enable_cash_discount": "",
"payment_type": "",
"payment_map": {
"amex": "American Express",
"disc": "Discover",
"dnrs": "Diners",
"intr": "Interac",
"jcb": "JCB",
"mast": "MasterCard",
"visa": "Visa"
}
}, },
"invoice_federal_tax_rate": "", "invoice_federal_tax_rate": "",
"invoice_local_tax_rate": "", "invoice_local_tax_rate": "",

View File

@@ -334,7 +334,17 @@
}, },
"intellipay_config": { "intellipay_config": {
"cash_discount_percentage": "", "cash_discount_percentage": "",
"enable_cash_discount": "" "enable_cash_discount": "",
"payment_type": "",
"payment_map": {
"amex": "American Express",
"disc": "Discover",
"dnrs": "Diners",
"intr": "Interac",
"jcb": "JCB",
"mast": "MasterCard",
"visa": "Visa"
}
}, },
"invoice_federal_tax_rate": "", "invoice_federal_tax_rate": "",
"invoice_local_tax_rate": "", "invoice_local_tax_rate": "",

View File

@@ -371,6 +371,7 @@ exports.postback = async (req, res) => {
iprequest: values, iprequest: values,
decodedComment decodedComment
}; };
const ipMapping = req.body?.bodyshop?.intellipay_config?.payment_map;
logger.log("intellipay-postback-received", "DEBUG", req.user?.email, null, logResponseMeta); logger.log("intellipay-postback-received", "DEBUG", req.user?.email, null, logResponseMeta);
@@ -417,7 +418,7 @@ exports.postback = async (req, res) => {
amount: p.amount, amount: p.amount,
transactionid: values.authcode, transactionid: values.authcode,
payer: "Customer", payer: "Customer",
type: values.cardtype, type: ipMapping[(values.cardtype || "").toLowerCase()] || values.cardtype,
jobid: p.jobid, jobid: p.jobid,
date: moment(Date.now()), date: moment(Date.now()),
payment_responses: { payment_responses: {
@@ -481,7 +482,7 @@ exports.postback = async (req, res) => {
amount: values.total, amount: values.total,
transactionid: values.authcode, transactionid: values.authcode,
payer: "Customer", payer: "Customer",
type: values.cardtype, type: ipMapping[(values.cardtype || "").toLowerCase()] || values.cardtype,
jobid: values.invoice, jobid: values.invoice,
date: moment(Date.now()) date: moment(Date.now())
} }