Skip to content

Commit

Permalink
Merge branch 'main' into feat/hide_put
Browse files Browse the repository at this point in the history
  • Loading branch information
joyet-simon authored Mar 21, 2023
2 parents 8f69576 + b52a820 commit 857bb8e
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 12 deletions.
12 changes: 10 additions & 2 deletions cartridges/int_alma/cartridge/controllers/Cart.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
'use strict';

var server = require('server');
var almaWidgetHelper = require('*/cartridge/scripts/helpers/almaWidgetHelper');

server.extend(module.superModule);

server.append('Show', function (req, res, next) {
var almaWidgetHelper = require('*/cartridge/scripts/helpers/almaWidgetHelper');
var viewData = almaWidgetHelper.getViewData(
res,
'cart',
Expand All @@ -19,12 +19,20 @@ server.append('Show', function (req, res, next) {
server.get('BasketWidgetData', server.middleware.https, function (req, res, next) {
var BasketMgr = require('dw/order/BasketMgr');
var almaPlanHelper = require('*/cartridge/scripts/helpers/almaPlanHelper');
var almaHelpers = require('*/cartridge/scripts/helpers/almaHelpers');
var almaWidgetHelper = require('*/cartridge/scripts/helpers/almaWidgetHelper');

var currentBasket = BasketMgr.getCurrentBasket();
var amount = Math.round(currentBasket.totalGrossPrice.multiply(100).value);

var productIds = [];
currentBasket.getAllProductLineItems().toArray().forEach(function (productLineItem) {
productIds.push(productLineItem.getProductID());
});
var isWidgetEnabled = almaWidgetHelper.isWidgetEnabled('product') && !almaHelpers.haveExcludedCategory(productIds);

res.json({
isWidgetEnabled: almaWidgetHelper.isWidgetEnabled('product'),
isWidgetEnabled: isWidgetEnabled,
paymentTypes: almaPlanHelper.getPlansForWidget(),
amount: amount
});
Expand Down
10 changes: 8 additions & 2 deletions cartridges/int_alma/cartridge/controllers/Checkout.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,19 @@ server.append('Begin', function (req, res, next) {
var Resource = require('dw/web/Resource');
var getLocale = require('*/cartridge/scripts/helpers/almaHelpers').getLocale;
var almaPlanHelper = require('*/cartridge/scripts/helpers/almaPlanHelper');
var almaHelpers = require('*/cartridge/scripts/helpers/almaHelpers');
var almaConfigInfo = getAlmaInfo();

var BasketMgr = require('dw/order/BasketMgr');
var currentBasket = BasketMgr.getCurrentBasket();

// if alma isn't activated don't even bother to call any API
if (!almaConfigInfo.isAlmaEnable) {
var productIds = [];
currentBasket.getAllProductLineItems().toArray().forEach(function (productLineItem) {
productIds.push(productLineItem.getProductID());
});

// if alma isn't activated don't even bother to call any API or if we have a category excluded
if (!almaConfigInfo.isAlmaEnable || almaHelpers.haveExcludedCategory(productIds)) {
next();
return;
}
Expand Down
10 changes: 8 additions & 2 deletions cartridges/int_alma/cartridge/controllers/Product.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,22 @@ server.append('Show', function (req, res, next) {
server.get('ProductWidgetData', server.middleware.https, function (req, res, next) {
var ProductFactory = require('*/cartridge/scripts/factories/product');
var almaPlanHelper = require('*/cartridge/scripts/helpers/almaPlanHelper');
var almaHelpers = require('*/cartridge/scripts/helpers/almaHelpers');

var productId = req.querystring.pid;

var params = {
method: 'GET',
pid: req.querystring.pid
pid: productId
};
var product = ProductFactory.get(params);

var isWidgetEnabled = almaWidgetHelper.isWidgetEnabled('product') && !almaHelpers.haveExcludedCategory([productId]);

var productQte = req.querystring.qte;
var amount = Math.round(product.price.sales.value * productQte * 100);
res.json({
isWidgetEnabled: almaWidgetHelper.isWidgetEnabled('product'),
isWidgetEnabled: isWidgetEnabled,
paymentTypes: almaPlanHelper.getPlansForWidget(),
amount: amount,
product: product
Expand Down
40 changes: 39 additions & 1 deletion cartridges/int_alma/cartridge/scripts/helpers/almaHelpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,43 @@ function getLocale(req) {
return Locale.getLocale(req.locale.id).toString();
}

/**
* Check if the product’s category is excluded
* @param {array} productIds product id
* @return {boolean} return a boolean
*/
function haveExcludedCategory(productIds) {
var ProductMgr = require('dw/catalog/ProductMgr');
var categoriesID = [];

productIds.forEach(function (productId) {
var product = ProductMgr.getProduct(productId);

if (product.isMaster()) {
product.getAllCategories().toArray().forEach(function (category) {
categoriesID.push(category.getID());
});
} else {
product.getMasterProduct().getAllCategories().toArray().forEach(function (category) {
categoriesID.push(category.getID());
});
}
});
logger.warn('categoriesID {0}', [JSON.stringify(categoriesID)]);

var categoriesExcluded = Site.getCurrent().getCustomPreferenceValue('categoryExclusion').trim().split(' | ');

var haveExcludedCategoryReturn = false;

categoriesExcluded.forEach(function (categoryExcluded) {
if (categoriesID.includes(categoryExcluded)) {
haveExcludedCategoryReturn = true;
}
});

return haveExcludedCategoryReturn;
}

module.exports = {
addHeaders: addHeaders,
formatCustomerData: formatCustomerData,
Expand All @@ -132,5 +169,6 @@ module.exports = {
getUrl: getUrl,
isAlmaEnable: isAlmaEnable,
isAlmaOnShipment: isAlmaOnShipment,
getSfccVersion: getSfccVersion
getSfccVersion: getSfccVersion,
haveExcludedCategory: haveExcludedCategory
};
7 changes: 3 additions & 4 deletions site_preference_builder/customSitePrefBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -187,16 +187,15 @@ exports.addFeePlans = (file, plans) => {
return file;
};

exports.addAPIInfo = (file, url, key, merchantId) => {
exports.addAPIInfo = (file, url, merchantId) => {
// add ALMA_APIKey as a custom site pref
file.metadata['type-extension'][2]['custom-attribute-definitions'][0]['attribute-definition'].push(
buildCustomSitePrefObject({
id: 'ALMA_APIKey',
name: 'Your Alma API key',
type: 'string',
type: 'password',
mandatory: false,
externallyManaged: false,
defaultValue: key
externallyManaged: false
})
);

Expand Down
2 changes: 1 addition & 1 deletion site_preference_builder/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ async function main() {
let updatedSitePref = addCustomAttrFromPlan(sitePref, plans);
updatedSitePref = addCustomGroupFromPlan(updatedSitePref, plans);
updatedSitePref = addFeePlans(updatedSitePref, plans);
updatedSitePref = addAPIInfo(updatedSitePref, url, apiKey, merchantId);
updatedSitePref = addAPIInfo(updatedSitePref, url, merchantId);

if (process.env.TOGGLE_REFUND !== REFUND_IS_DISABLED) {
updatedSitePref = addRefundCustomAttributes(updatedSitePref);
Expand Down
7 changes: 7 additions & 0 deletions site_preference_builder/ref/system-objecttype-extensions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@
<externally-managed-flag>false</externally-managed-flag>
<default-value>#alma-badge</default-value>
</attribute-definition>
<attribute-definition attribute-id="categoryExclusion">
<display-name xml:lang="x-default">Add ids of excluded categories separated by " | "</display-name>
<type>string</type>
<mandatory-flag>false</mandatory-flag>
<externally-managed-flag>false</externally-managed-flag>
</attribute-definition>

</custom-attribute-definitions>
<group-definitions>
Expand All @@ -95,6 +101,7 @@
<attribute attribute-id="isProductWidgetEnable"/>
<attribute attribute-id="productSelector"/>
<attribute attribute-id="ALMA_FEE_PLANS"/>
<attribute attribute-id="categoryExclusion"/>
</attribute-group>
</group-definitions>
</type-extension>
Expand Down

0 comments on commit 857bb8e

Please sign in to comment.