Skip to content

Commit

Permalink
Bugfixing LINK certification
Browse files Browse the repository at this point in the history
  • Loading branch information
YbeSpapen committed Jun 8, 2021
1 parent 52c6695 commit a07ca9b
Show file tree
Hide file tree
Showing 54 changed files with 851 additions and 311 deletions.
90 changes: 68 additions & 22 deletions cartridges/bm_mollie/cartridge/controllers/CSCOrderPaymentCancel.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,43 @@
'use strict';

var server = require('server');

var OrderMgr = require('dw/order/OrderMgr');
var Order = require('dw/order/Order');
var Logger = require('*/cartridge/scripts/utils/logger');
var orderHelper = require('*/cartridge/scripts/order/orderHelper');
var paymentService = require('*/cartridge/scripts/payment/paymentService');
var renderTemplate = require('*/cartridge/scripts/renderTemplateHelper').renderTemplate;
var csrfProtection = require('*/cartridge/scripts/middleware/csrf');

var isCancelAllowed = function (order) {
/**
* Checks if order is cancelable
* @param {dw.order.Order} order - order
* @returns {boolean} - is cancel allowed?
*/
function isCancelAllowed(order) {
if (!order) return false;
var orderStatus = order.status.value;
return (orderStatus !== Order.ORDER_STATUS_CANCELLED &&
orderStatus !== Order.ORDER_STATUS_FAILED);
};
}

exports.Start = function () {
/**
* CSCOrderPaymentCancel-Start : Renders the payment cancel page
* @name Mollie/CSCOrderPaymentCancel-Start
* @function
* @memberof CSCOrderPaymentCancel
* @param {middleware} - csrfProtection.generateToken
* @param {renders} - html
* @param {serverfunction} - get
*/
server.get('Start', csrfProtection.generateToken, function (req, res, next) {
var orderNo = request.httpParameterMap.get('order_no').stringValue;
var order = OrderMgr.getOrder(orderNo);
if (!isCancelAllowed(order)) {
renderTemplate('order/payment/cancel/order_payment_cancel_not_available.isml');
res.render('order/payment/cancel/order_payment_cancel_not_available.isml');
} else if (orderHelper.isMollieOrder(order)) {
var result = paymentService.getOrder(orderHelper.getOrderId(order));
renderTemplate('order/payment/cancel/order_payment_cancel_order.isml', {
res.render('order/payment/cancel/order_payment_cancel_order.isml', {
orderId: order.orderNo,
order: result.order
});
Expand All @@ -31,17 +49,27 @@ exports.Start = function () {
return paymentService.getPayment(paymentId).payment;
});
if (payments.length) {
renderTemplate('order/payment/cancel/order_payment_cancel_payment.isml', {
res.render('order/payment/cancel/order_payment_cancel_payment.isml', {
orderId: order.orderNo,
payments: payments
});
} else {
renderTemplate('order/payment/cancel/order_payment_cancel_not_available.isml');
res.render('order/payment/cancel/order_payment_cancel_not_available.isml');
}
}
};
return next();
});

exports.CancelPayment = function () {
/**
* CSCOrderPaymentCancel-CancelPayment : Handles cancel payment request
* @name Mollie/CSCOrderPaymentCancel-CancelPayment
* @function
* @memberof CSCOrderPaymentCancel
* @param {middleware} - csrfProtection.validateRequest
* @param {renders} - html
* @param {serverfunction} - post
*/
server.post('CancelPayment', csrfProtection.validateRequest, function (req, res, next) {
var paymentId = request.httpParameterMap.get('paymentId').stringValue;
var orderId = request.httpParameterMap.get('orderId').stringValue;
var viewParams = {
Expand All @@ -58,10 +86,20 @@ exports.CancelPayment = function () {
viewParams.errorMessage = e.message;
}

renderTemplate('order/payment/cancel/order_payment_cancel_confirmation.isml', viewParams);
};
res.render('order/payment/cancel/order_payment_cancel_confirmation.isml', viewParams);
return next();
});

exports.CancelOrderLine = function () {
/**
* CSCOrderPaymentCancel-CancelOrderLine : Handles cancel order line request
* @name Mollie/CSCOrderPaymentCancel-CancelOrderLine
* @function
* @memberof CSCOrderPaymentCancel
* @param {middleware} - csrfProtection.validateRequest
* @param {renders} - html
* @param {serverfunction} - post
*/
server.post('CancelOrderLine', csrfProtection.validateRequest, function (req, res, next) {
var orderId = request.httpParameterMap.get('orderId').stringValue;
var lineId = request.httpParameterMap.get('lineId').stringValue;
var quantity = request.httpParameterMap.get('quantity').stringValue;
Expand All @@ -83,10 +121,20 @@ exports.CancelOrderLine = function () {
viewParams.errorMessage = e.message;
}

renderTemplate('order/payment/cancel/order_payment_cancel_confirmation.isml', viewParams);
};
res.render('order/payment/cancel/order_payment_cancel_confirmation.isml', viewParams);
return next();
});

exports.CancelOrder = function () {
/**
* CSCOrderPaymentCancel-CancelOrder : Handles cancel order request
* @name Mollie/CSCOrderPaymentCancel-CancelOrder
* @function
* @memberof CSCOrderPaymentCancel
* @param {middleware} - csrfProtection.validateRequest
* @param {renders} - html
* @param {serverfunction} - post
*/
server.post('CancelOrder', csrfProtection.validateRequest, function (req, res, next) {
var orderId = request.httpParameterMap.get('orderId').stringValue;
var order = OrderMgr.getOrder(orderId);
var viewParams = {
Expand All @@ -103,10 +151,8 @@ exports.CancelOrder = function () {
viewParams.errorMessage = e.message;
}

renderTemplate('order/payment/cancel/order_payment_cancel_confirmation.isml', viewParams);
};
res.render('order/payment/cancel/order_payment_cancel_confirmation.isml', viewParams);
return next();
});

exports.Start.public = true;
exports.CancelPayment.public = true;
exports.CancelOrderLine.public = true;
exports.CancelOrder.public = true;
module.exports = server.exports();
78 changes: 59 additions & 19 deletions cartridges/bm_mollie/cartridge/controllers/CSCOrderPaymentLink.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,37 @@
'use strict';

var server = require('server');

var HookMgr = require('dw/system/HookMgr');
var OrderMgr = require('dw/order/OrderMgr');
var Order = require('dw/order/Order');
var Transaction = require('dw/system/Transaction');
var PaymentMgr = require('dw/order/PaymentMgr');
var Logger = require('*/cartridge/scripts/utils/logger');
var orderHelper = require('*/cartridge/scripts/order/orderHelper');
var paymentService = require('*/cartridge/scripts/payment/paymentService');
var MollieServiceException = require('*/cartridge/scripts/exceptions/MollieServiceException');
var PaymentMgr = require('dw/order/PaymentMgr');
var renderTemplate = require('*/cartridge/scripts/renderTemplateHelper').renderTemplate;
var csrfProtection = require('*/cartridge/scripts/middleware/csrf');

var isLinkAllowed = function (order) {
/**
* Checks if send payment link is allowed
* @param {dw.order.Order} order - order
* @returns {boolean} - link is allowed?
*/
function isLinkAllowed(order) {
if (!order) return false;
var orderStatus = order.status.value;
return orderStatus === Order.ORDER_STATUS_CREATED
|| orderStatus === Order.ORDER_STATUS_CANCELLED
|| orderStatus === Order.ORDER_STATUS_FAILED;
};
}

var undoFailOrCancelOrder = function (order) {
/**
* Undo fail or cancel order
* @param {dw.order.Order} order - order
* @returns {Object} - JSON
*/
function undoFailOrCancelOrder(order) {
if (!order) return false;
var orderStatus = order.status.value;
var result;
Expand All @@ -28,9 +42,16 @@ var undoFailOrCancelOrder = function (order) {
}

return { error: result && result.isError() };
};
}

var sendPaymentLink = function (order, email, paymentLink) {
/**
* Send payment link
* @param {dw.order.Order} order - order
* @param {string} email - email
* @param {string} paymentLink - order
* @return {MollieServiceException} - exception
*/
function sendPaymentLink(order, email, paymentLink) {
var hookName = 'mollie.send.payment.link';

if (!HookMgr.hasHook(hookName)) throw new MollieServiceException('Hook ' + hookName + ' not supported.');
Expand All @@ -42,15 +63,24 @@ var sendPaymentLink = function (order, email, paymentLink) {
email,
paymentLink
);
};
}

exports.Start = function () {
/**
* CSCOrderPaymentLink-Start : Renders the payment link page
* @name Mollie/CSCOrderPaymentLink-Start
* @function
* @memberof CSCOrderPaymentLink
* @param {middleware} - csrfProtection.generateToken
* @param {renders} - html
* @param {serverfunction} - get
*/
server.get('Start', csrfProtection.generateToken, function (req, res, next) {
var orderNo = request.httpParameterMap.get('order_no').stringValue;
var order = OrderMgr.getOrder(orderNo);
var paymentLink;
if (!isLinkAllowed(order) || undoFailOrCancelOrder(order).error) {
renderTemplate('order/payment/link/order_payment_link_not_available.isml');
return;
res.render('order/payment/link/order_payment_link_not_available.isml');
return next();
} else if (orderHelper.isMollieOrder(order)) {
var getOrderResult = paymentService.getOrder(orderHelper.getOrderId(order));
paymentLink = getOrderResult.order.links.checkout.href;
Expand All @@ -75,17 +105,27 @@ exports.Start = function () {
}
}
if (paymentLink) {
renderTemplate('order/payment/link/order_payment_link_send.isml', {
res.render('order/payment/link/order_payment_link_send.isml', {
paymentLink: paymentLink,
orderId: orderNo,
email: order.customer.profile ? order.customer.profile.email : order.customerEmail
});
} else {
renderTemplate('order/payment/link/order_payment_link_not_available.isml');
res.render('order/payment/link/order_payment_link_not_available.isml');
}
};
return next();
});

exports.SendMail = function () {
/**
* CSCOrderPaymentLink-SendMail : Sends email to customer
* @name Mollie/CSCOrderPaymentLink-SendMail
* @function
* @memberof CSCOrderPaymentLink
* @param {middleware} - csrfProtection.validateRequest
* @param {renders} - html
* @param {serverfunction} - post
*/
server.post('SendMail', csrfProtection.validateRequest, function (req, res, next) {
var paymentLink = request.httpParameterMap.get('paymentLink').stringValue;
var orderId = request.httpParameterMap.get('orderId').stringValue;
var email = request.httpParameterMap.get('email').stringValue;
Expand All @@ -105,8 +145,8 @@ exports.SendMail = function () {
viewParams.errorMessage = e.message;
}

renderTemplate('order/payment/link/order_payment_link_confirmation.isml', viewParams);
};
res.render('order/payment/link/order_payment_link_confirmation.isml', viewParams);
return next();
});

exports.Start.public = true;
exports.SendMail.public = true;
module.exports = server.exports();
Loading

0 comments on commit a07ca9b

Please sign in to comment.