diff --git a/api/script/index.js b/api/script/index.js index 1e003ef1..28f2e7e5 100644 --- a/api/script/index.js +++ b/api/script/index.js @@ -83,12 +83,14 @@ function conditionSend({ .concat(source?.region?.map(itemNameId => ({itemNameId, factor: 'ss', type: 'region'}))) .concat(source?.city?.map(itemNameId => ({itemNameId, factor: 'ss', type: 'city'}))) .concat(source?.cardProduct?.map(itemNameId => ({itemNameId, factor: 'sc', type: 'cardProduct'}))) + .concat(source?.cardType?.map(itemNameId => ({itemNameId, factor: 'sc', type: 'cardType'}))) .concat(source?.accountProduct?.map(itemNameId => ({itemNameId, factor: 'sc', type: 'accountProduct'}))) .concat(source?.accountFeePolicy?.map(itemNameId => ({itemNameId, factor: 'sp', type: 'feePolicy'}))) .concat(destination?.country?.map(itemNameId => ({itemNameId, factor: 'ds', type: 'country'}))) .concat(destination?.region?.map(itemNameId => ({itemNameId, factor: 'ds', type: 'region'}))) .concat(destination?.city?.map(itemNameId => ({itemNameId, factor: 'ds', type: 'city'}))) .concat(destination?.cardProduct?.map(itemNameId => ({itemNameId, factor: 'dc', type: 'cardProduct'}))) + .concat(destination?.cardType?.map(itemNameId => ({itemNameId, factor: 'dc', type: 'cardType'}))) .concat(destination?.accountProduct?.map(itemNameId => ({itemNameId, factor: 'dc', type: 'accountProduct'}))) .concat(destination?.accountFeePolicy?.map(itemNameId => ({itemNameId, factor: 'dp', type: 'feePolicy'}))) .filter(Boolean) @@ -151,6 +153,7 @@ function conditionReceive({ kyc: getProp(conditionProperty, 'sk', 'source.kyc'), customerType: getProp(conditionProperty, 'st', 'source.customerType'), cardProduct: get(conditionItem, 'sc', 'cardProduct', 'itemNameId'), + cardType: get(conditionItem, 'sc', 'cardType', 'itemNameId'), accountProduct: get(conditionItem, 'sc', 'accountProduct', 'itemNameId'), country: get(conditionItem, 'ss', 'country', 'itemNameId'), region: get(conditionItem, 'ss', 'region', 'itemNameId'), @@ -163,6 +166,7 @@ function conditionReceive({ kyc: getProp(conditionProperty, 'dk', 'destination.kyc'), customerType: getProp(conditionProperty, 'dt', 'destination.customerType'), cardProduct: get(conditionItem, 'dc', 'cardProduct', 'itemNameId'), + cardType: get(conditionItem, 'dc', 'cardType', 'itemNameId'), accountProduct: get(conditionItem, 'dc', 'accountProduct', 'itemNameId'), country: get(conditionItem, 'ds', 'country', 'itemNameId'), region: get(conditionItem, 'ds', 'region', 'itemNameId'), diff --git a/api/sql/schema/750-rule.dropdown.list.sql b/api/sql/schema/750-rule.dropdown.list.sql index ff153946..a7675ba6 100644 --- a/api/sql/schema/750-rule.dropdown.list.sql +++ b/api/sql/schema/750-rule.dropdown.list.sql @@ -45,6 +45,11 @@ SELECT [value], [label], [parent] FROM core.item(@languageId, 'cardProduct') ORDER BY ISNULL(itemOrder, 99999), 2 +SELECT 'rule.cardType' AS resultSetName +SELECT [value], [label], [parent] +FROM core.item(@languageId, 'cardType') +ORDER BY ISNULL(itemOrder, 99999), 2 + SELECT 'rule.channel' AS resultSetName SELECT [value], [label], [parent] FROM core.item(@languageId, 'channel') diff --git a/history/config/rule.js b/history/config/rule.js index 16797ed5..fd373966 100644 --- a/history/config/rule.js +++ b/history/config/rule.js @@ -51,6 +51,7 @@ module.exports = { {key: 'source,cities', title: 'City', transform: conditionItemTransform}, {key: 'source,organization', title: 'Organization'}, {key: 'source,cardProducts', title: 'Product', transform: conditionItemTransform}, + {key: 'source,cardTypes', title: 'Type', transform: conditionItemTransform}, {key: 'source,accountProduct', title: 'Account Product'}, {key: 'source,properties', title: 'Properties', transform: propertyTransform} ], diff --git a/model/condition.js b/model/condition.js index d8b2ffe5..127c0abd 100644 --- a/model/condition.js +++ b/model/condition.js @@ -393,6 +393,9 @@ module.exports = ({joi}) => ({ cardProduct: { widget: {type: 'multiSelect', dropdown: 'rule.cardProduct'} }, + cardType: { + widget: {type: 'multiSelect', dropdown: 'rule.cardType'} + }, country: { widget: {type: 'multiSelect', dropdown: 'rule.country'} }, @@ -430,6 +433,9 @@ module.exports = ({joi}) => ({ cardProduct: { widget: {type: 'multiSelect', dropdown: 'rule.cardProduct'} }, + cardType: { + widget: {type: 'multiSelect', dropdown: 'rule.cardType'} + }, country: { widget: {type: 'multiSelect', dropdown: 'rule.country'} }, @@ -536,6 +542,7 @@ module.exports = ({joi}) => ({ 'source.customerType', 'source.kyc', 'source.cardProduct', + 'source.cardType', 'source.accountProduct', 'condition.sourceAccountId' ] @@ -552,6 +559,7 @@ module.exports = ({joi}) => ({ 'destination.customerType', 'destination.kyc', 'destination.cardProduct', + 'destination.cardType', 'destination.accountProduct', 'condition.destinationAccountId' ] diff --git a/ui/common.js b/ui/common.js index 5e99ae63..f2a76529 100644 --- a/ui/common.js +++ b/ui/common.js @@ -20,6 +20,7 @@ const propMap = { city: 'cities', operation: 'operations', cardProduct: 'cardProducts', + cardType: 'cardTypes', feePolicy: 'accountFeePolicies', so: 'source', do: 'destination', @@ -60,6 +61,8 @@ function prepareRuleModel(dbresult) { countries: [], cities: [], regions: [], + cardProducts: [], + cardTypes: [], accountFeePolicies: [] }, source: { @@ -68,6 +71,7 @@ function prepareRuleModel(dbresult) { cities: [], regions: [], cardProducts: [], + cardTypes: [], accountFeePolicies: [] }, split: { @@ -94,7 +98,7 @@ function prepareRuleModel(dbresult) { }); // condition item (dbresult.conditionItem || []).forEach((item) => { - if (['operation', 'country', 'city', 'region', 'cardProduct', 'feePolicy'].indexOf(item.type) > -1) { + if (['operation', 'country', 'city', 'region', 'cardProduct', 'cardType', 'feePolicy'].indexOf(item.type) > -1) { const obj = rule[propMap[item.factor]] && rule[propMap[item.factor]][propMap[item.type]]; obj && obj.push({ key: item.itemNameId, diff --git a/ui/react/configuration/reducers.js b/ui/react/configuration/reducers.js index 3796f837..673d639c 100644 --- a/ui/react/configuration/reducers.js +++ b/ui/react/configuration/reducers.js @@ -13,6 +13,7 @@ const defaultUiState = { 'operation', 'supervisor', 'cardProduct', + 'cardType', 'accountProduct', 'feePolicy', 'account' @@ -133,6 +134,10 @@ const defaultUiState = { visible: true, title: 'Product' }, + cardType: { + visible: true, + title: 'Type' + }, accountProduct: { visible: true, title: 'Account Product' @@ -163,6 +168,14 @@ const defaultUiState = { visible: true, title: 'Organization' }, + cardProduct: { + visible: true, + title: 'Product' + }, + cardType: { + visible: true, + title: 'Type' + }, accountProduct: { visible: true, title: 'Account Product' diff --git a/ui/react/pages/RuleProfile/Tabs/Destination/index.js b/ui/react/pages/RuleProfile/Tabs/Destination/index.js index 71553210..aba03a0a 100644 --- a/ui/react/pages/RuleProfile/Tabs/Destination/index.js +++ b/ui/react/pages/RuleProfile/Tabs/Destination/index.js @@ -24,7 +24,9 @@ const propTypes = { accountProducts: PropTypes.array, fieldValues: PropTypes.object, errors: PropTypes.object, // immutable - destinationConfig: PropTypes.object.isRequired + destinationConfig: PropTypes.object.isRequired, + cardProducts: PropTypes.object, + cardTypes: PropTypes.object }; const defaultProps = { @@ -52,6 +54,8 @@ class DestinationTab extends Component { accountProducts, fieldValues, feePolicies, + cardTypes, + cardProducts, destinationConfig: { fields } } = this.props; const changeInput = (field, value) => { @@ -109,6 +113,32 @@ class DestinationTab extends Component { label={fields.organization.title || 'Organization'} /> } + {fields.cardProduct.visible &&