Commit project
This commit is contained in:
parent
28471965a0
commit
3ac017a5ad
1030 changed files with 94062 additions and 0 deletions
1290
middleware/api.js
Normal file
1290
middleware/api.js
Normal file
File diff suppressed because it is too large
Load diff
65
middleware/auth-check.js
Normal file
65
middleware/auth-check.js
Normal file
|
@ -0,0 +1,65 @@
|
|||
'use strict';
|
||||
|
||||
const Merchant = require('mongoose').model('Merchant');
|
||||
const config = require('../etc');
|
||||
const atob = require('abab').atob;
|
||||
const Response = require('../etc/responses.json');
|
||||
|
||||
|
||||
module.exports = (req, res, next) => {
|
||||
var lang;
|
||||
if (req.query.language) {
|
||||
lang = req.query.language;
|
||||
}
|
||||
else if (req.body.language) {
|
||||
lang = req.body.language;
|
||||
}
|
||||
else {
|
||||
req.body.language = 'en';
|
||||
}
|
||||
|
||||
if (!req.headers.authorization) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
message: Response.r81[lang],
|
||||
error_code: 'e51'
|
||||
})
|
||||
}
|
||||
|
||||
const decoded = atob(req.headers.authorization.split(/ /)[1]);
|
||||
const userId = decoded.split(/:/)[0];
|
||||
const pwd = decoded.split(/:/)[1];
|
||||
|
||||
return Merchant.findById(userId, (userErr, user) => {
|
||||
// Check user id
|
||||
if (userErr || !user) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
message: 'UserId ' + userId + Response.r82[lang]
|
||||
});
|
||||
}
|
||||
|
||||
// Check password
|
||||
return user.comparePassword(pwd, (pwdErr, isMatch) => {
|
||||
if (pwdErr) {
|
||||
return done(pwdErr);
|
||||
}
|
||||
|
||||
if (!isMatch) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
message: Response.r83[lang]
|
||||
})
|
||||
}
|
||||
|
||||
if (!req.body.merchant_id) {
|
||||
req.body.merchant_id = userId;
|
||||
}
|
||||
else {
|
||||
console.log('Merchant déjà');
|
||||
}
|
||||
|
||||
return next();
|
||||
})
|
||||
});
|
||||
};
|
121
middleware/auth.js
Normal file
121
middleware/auth.js
Normal file
|
@ -0,0 +1,121 @@
|
|||
'use strict';
|
||||
|
||||
const express = require('express');
|
||||
const passport = require('passport');
|
||||
const validator = require('validator');
|
||||
const config = require('../etc');
|
||||
const router = new express.Router();
|
||||
const Merchant = require('mongoose').model('Merchant');
|
||||
const Response = require('../etc/responses.json');
|
||||
|
||||
|
||||
function validateSignupForm(payload, lang) {
|
||||
var errors = {};
|
||||
let isFormValid = true;
|
||||
let message = '';
|
||||
|
||||
if (!payload || typeof payload.merchant_email !== 'string' || !validator.isEmail(payload.merchant_email)) {
|
||||
isFormValid = false;
|
||||
message = Response.r85[lang];
|
||||
errors = 'e33';
|
||||
}
|
||||
|
||||
if (!payload || typeof payload.password !== 'string' || payload.password.trim().length < 3) {
|
||||
isFormValid = false;
|
||||
message = Response.r86[lang];
|
||||
errors = 'e34';
|
||||
}
|
||||
|
||||
if (!payload || typeof payload.merchant_name !== 'string' || payload.merchant_name.trim().length === 0) {
|
||||
isFormValid = false;
|
||||
message = Response.r87[lang];
|
||||
errors = 'e35';
|
||||
}
|
||||
|
||||
return {
|
||||
success: isFormValid,
|
||||
message,
|
||||
errors
|
||||
};
|
||||
}
|
||||
|
||||
router.post('/signup', (req, res, next) => {
|
||||
var lang;
|
||||
if (req.query.language) {
|
||||
lang = req.query.language;
|
||||
res.locals.lang = lang;
|
||||
}
|
||||
else if (req.body.language) {
|
||||
lang = req.body.language;
|
||||
res.locals.lang = lang;
|
||||
}
|
||||
else {
|
||||
req.body.language = 'en';
|
||||
res.locals.lang = lang;
|
||||
}
|
||||
|
||||
const validationResult = validateSignupForm(req.body, lang);
|
||||
if (!validationResult.success) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: validationResult.message,
|
||||
error_code: validationResult.errors
|
||||
});
|
||||
}
|
||||
|
||||
// Get the next higher merchant number
|
||||
Merchant.findOne({}).sort({number: -1}).limit(1).exec((err, doc) => {
|
||||
if (err) return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[lang],
|
||||
error_code: 'e0'
|
||||
});
|
||||
if (!doc) {
|
||||
// There are no merchants on the database. Create the very first one.
|
||||
req.body.number = 1;
|
||||
next();
|
||||
}
|
||||
else {
|
||||
req.body.number = doc.number + 1;
|
||||
next();
|
||||
}
|
||||
});
|
||||
}, (req, res, next) => {
|
||||
let lang = res.locals.lang;
|
||||
|
||||
return passport.authenticate('local-signup', (err, doc) => {
|
||||
if (err) {
|
||||
if (err.name === 'MongoError' && err.code === 11000) {
|
||||
// the 11000 Mongo code is for a duplication email error
|
||||
// the 409 HTTP status code is for conflict error
|
||||
return res.status(409).json({
|
||||
success: false,
|
||||
message: Response.r90[lang],
|
||||
error_code: 'e36'
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r90[lang],
|
||||
error_code: 'e36'
|
||||
});
|
||||
}
|
||||
|
||||
if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r92[lang],
|
||||
error_code: 'e37'
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
message: 'Merchant ' + req.body.merchant_name + Response.r93[lang],
|
||||
merchant_id: doc._id
|
||||
});
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
module.exports = router;
|
193
middleware/gift-card-number.js
Normal file
193
middleware/gift-card-number.js
Normal file
|
@ -0,0 +1,193 @@
|
|||
'use strict';
|
||||
|
||||
const Merchant = require('mongoose').model('Merchant');
|
||||
const Branch = require('mongoose').model('Branch');
|
||||
const GiftCard = require('mongoose').model('GiftCard');
|
||||
const Response = require('../etc/responses.json');
|
||||
|
||||
|
||||
/*
|
||||
* Gather date, merchant_id, branch_id and gift card sequence
|
||||
* to generate a gift_card_number
|
||||
*/
|
||||
module.exports = (req, res, next) => {
|
||||
getMerchantNumber(req, res);
|
||||
}
|
||||
|
||||
// MARK: get merchant number
|
||||
function getMerchantNumber(req, res) {
|
||||
// Merchant number
|
||||
Merchant.findOne({ _id: req.body.merchant_id }, (err, doc) => {
|
||||
if (err || !doc) return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
else {
|
||||
// Make sure the merchant number always has 3 digits
|
||||
var numberString = doc.number.toString();
|
||||
if (numberString.length === 1) {
|
||||
numberString = "00" + numberString;
|
||||
}
|
||||
else if (numberString.length === 2) {
|
||||
numberString = "0" + numberString;
|
||||
}
|
||||
|
||||
req.body.merchant_number = numberString;
|
||||
req.body.merchant_name = doc.merchant_name;
|
||||
getBranchNumber(req, res);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// MARK: get branch number
|
||||
function getBranchNumber(req, res) {
|
||||
// Branch number
|
||||
Branch.findOne({ _id: req.body.branch_id }, (err, doc) => {
|
||||
if (err) return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
if (!doc) {
|
||||
// This Merchant has only the main office, no branches.
|
||||
req.body.branch_number = req.body.merchant_id;
|
||||
req.body.branch_number = "00";
|
||||
req.body.branch_name = req.body.merchant_name;
|
||||
}
|
||||
else {
|
||||
// Make sure the branch number always has 2 digits
|
||||
var numberString = doc.number.toString();
|
||||
if (numberString.length === 1) {
|
||||
numberString = "0" + numberString;
|
||||
}
|
||||
|
||||
req.body.branch_number = numberString;
|
||||
req.body.branch_name = doc.branch_name;
|
||||
}
|
||||
|
||||
generateCardNumber(req, res);
|
||||
});
|
||||
}
|
||||
|
||||
// MARK: generate card number
|
||||
function generateCardNumber(req, res) {
|
||||
// Get date
|
||||
var d = new Date();
|
||||
var year = d.getFullYear().toString().substr(-2);
|
||||
var month = (d.getMonth() + 1).toString();
|
||||
if (month.length === 1) {
|
||||
month = "0" + month;
|
||||
}
|
||||
var day = d.getDate().toString();
|
||||
if (day.length === 1) {
|
||||
day = "0" + day;
|
||||
}
|
||||
|
||||
// Get next available card number
|
||||
GiftCard.findOne({ merchant_id: req.body.merchant_id, branch_id: req.body.branch_id }).sort({ number: -1 }).limit(1).exec((err, doc) => {
|
||||
var numberString;
|
||||
|
||||
if (err) return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
if (!doc) {
|
||||
req.body.number = 1;
|
||||
numberString = '1';
|
||||
}
|
||||
else {
|
||||
req.body.number = doc.number + 1;
|
||||
numberString = req.body.number.toString();
|
||||
}
|
||||
|
||||
// Make sure the card number always has 4 digits
|
||||
if (numberString.length === 1) {
|
||||
numberString = "000" + numberString;
|
||||
}
|
||||
else if (numberString.length === 2) {
|
||||
numberString = "00" + numberString;
|
||||
}
|
||||
else if (numberString.length === 3) {
|
||||
numberString = "0" + numberString;
|
||||
}
|
||||
|
||||
// Trim numbers with more than 4 digits. The date components will guarantee the cardNumber uniqueness.
|
||||
else if (numberString.length >= 4) {
|
||||
numberString = numberString.slice(-4);
|
||||
}
|
||||
|
||||
// Finally compose complete card number
|
||||
const cardNumber =
|
||||
year +
|
||||
month +
|
||||
day +
|
||||
req.body.merchant_number +
|
||||
req.body.branch_number +
|
||||
numberString
|
||||
|
||||
req.body.gift_card_number = cardNumber;
|
||||
|
||||
addGiftCard(req, res);
|
||||
});
|
||||
}
|
||||
|
||||
// MARK: add gift card
|
||||
function addGiftCard(req, res) {
|
||||
req.body.balance = 0;
|
||||
req.body.points = 0;
|
||||
var msg;
|
||||
if (res.locals.fromAddClient) {
|
||||
msg = Response.r78[req.body.language];
|
||||
}
|
||||
else {
|
||||
msg = Response.r79[req.body.language];
|
||||
}
|
||||
|
||||
var newGiftCard = new GiftCard(req.body);
|
||||
newGiftCard.save((err, doc) => {
|
||||
if (err) {
|
||||
// Gift card number not unique due to simultaneous creation
|
||||
console.log('Gift card number not unique due to simultaneous creation. New number assigned automatically.');
|
||||
const number = Number(req.body.gift_card_number) + 1;
|
||||
req.body.gift_card_number = number.toString();
|
||||
newGiftCard = new GiftCard(req.body);
|
||||
newGiftCard.save((err2, doc2) => {
|
||||
if (err2) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r80[req.body.language],
|
||||
error: 'e32'
|
||||
});
|
||||
}
|
||||
else {
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
message: msg,
|
||||
client_name: req.body.client_name,
|
||||
client_id: req.body.client_id,
|
||||
gift_card_number: doc2.gift_card_number,
|
||||
merchant_name: req.body.merchant_name,
|
||||
branch_name: req.body.branch_name,
|
||||
balance: doc2.balance,
|
||||
points: doc2.points
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
else {
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
message: msg,
|
||||
client_name: req.body.client_name,
|
||||
client_id: req.body.client_id,
|
||||
gift_card_number: doc.gift_card_number,
|
||||
merchant_name: req.body.merchant_name,
|
||||
branch_name: req.body.branch_name,
|
||||
balance: doc.balance,
|
||||
points: doc.points
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
33
middleware/lang.js
Normal file
33
middleware/lang.js
Normal file
|
@ -0,0 +1,33 @@
|
|||
'use strict';
|
||||
|
||||
const Merchant = require('mongoose').model('Merchant');
|
||||
|
||||
module.exports = (req, res, next) => {
|
||||
if (req.body.language) {
|
||||
return next();
|
||||
}
|
||||
else if (req.query.language) {
|
||||
req.body.language = req.query.language;
|
||||
return next();
|
||||
}
|
||||
else {
|
||||
Merchant.findOne({_id: req.body.merchant_id}, (err, doc) => {
|
||||
if (err) return res.status(500).json({
|
||||
success: false,
|
||||
message: 'Server error / Erreur de serveur',
|
||||
error_code: 'e0'
|
||||
});
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: "Merchant not found / Merchant pas encontré",
|
||||
error_code: 'e12'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.language = doc.language;
|
||||
return next();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
32
middleware/payload-check.js
Normal file
32
middleware/payload-check.js
Normal file
|
@ -0,0 +1,32 @@
|
|||
'use strict';
|
||||
|
||||
const express = require('express');
|
||||
const router = new express.Router();
|
||||
const Response = require('../etc/responses.json');
|
||||
|
||||
router.use((req, res, next) => {
|
||||
var lang;
|
||||
if (req.query.language) {
|
||||
lang = req.query.language;
|
||||
}
|
||||
else if (req.body.language) {
|
||||
lang = req.body.language;
|
||||
}
|
||||
else {
|
||||
lang = 'en';
|
||||
}
|
||||
|
||||
const error = {};
|
||||
|
||||
if (!req.body.merchant_id) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r84[lang],
|
||||
error_code: 'e38'
|
||||
});
|
||||
}
|
||||
|
||||
next();
|
||||
});
|
||||
|
||||
module.exports = router;
|
740
middleware/trans.js
Normal file
740
middleware/trans.js
Normal file
|
@ -0,0 +1,740 @@
|
|||
'use strict';
|
||||
|
||||
const express = require('express');
|
||||
const router = new express.Router();
|
||||
const Merchant = require('mongoose').model('Merchant');
|
||||
const Branch = require('mongoose').model('Branch');
|
||||
const Workstation = require('mongoose').model('Workstation');
|
||||
const Employee = require('mongoose').model('Employee');
|
||||
const Client = require('mongoose').model('Client');
|
||||
const GiftCard = require('mongoose').model('GiftCard');
|
||||
const Transaction = require('mongoose').model('Transaction');
|
||||
const Response = require('../etc/responses.json');
|
||||
|
||||
|
||||
// MARK: - Transactions
|
||||
|
||||
// MARK: validation
|
||||
function validateTransaction(payload) {
|
||||
var errors = 'e39';
|
||||
let isFormValid = true;
|
||||
var message = Response.r61[req.body.language];
|
||||
|
||||
if (!payload.money_amount) {
|
||||
isFormValid = false;
|
||||
message = Response.r62[req.body.language];
|
||||
errors = 'e40';
|
||||
}
|
||||
|
||||
if (!payload.workstation_id && !payload.serial_number) {
|
||||
isFormValid = false;
|
||||
message = Response.r63[req.body.language];
|
||||
errors = 'e41';
|
||||
}
|
||||
|
||||
if (!payload.employee_id) {
|
||||
isFormValid = false;
|
||||
message = Response.r64[req.body.language];
|
||||
errors = 'e42';
|
||||
}
|
||||
|
||||
return {
|
||||
success: isFormValid,
|
||||
message,
|
||||
errors
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
// MARK: reload GiftCard
|
||||
router.put('/reloadGiftCard', (req, res, next) => {
|
||||
const validationResult = validateTransaction(req.body);
|
||||
if (!validationResult.success) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: validationResult.message,
|
||||
error_code: validationResult.errors
|
||||
});
|
||||
}
|
||||
|
||||
// Retrieve serial_number to make sure it gets registered in the transaction
|
||||
if (!req.body.serial_number) {
|
||||
Workstation.findOne({_id: req.body.workstation_id}, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r21[req.body.language],
|
||||
error_code: 'e15'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.serial_number = doc.serial_number;
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
}, (req, res, next) => {
|
||||
|
||||
// Retrieve employee number to guarantee it will be registered in the transaction
|
||||
Employee.findOne({_id: req.body.employee_id}, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r27[req.body.language],
|
||||
error_code: 'e19'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.employee_number = doc.employee_number;
|
||||
next();
|
||||
}
|
||||
});
|
||||
|
||||
}, (req, res, next) => {
|
||||
if (req.body.gift_card_id) {
|
||||
GiftCard.findOneAndUpdate(
|
||||
{_id: req.body.gift_card_id},
|
||||
{$inc: {balance: req.body.money_amount}},
|
||||
{new: true},
|
||||
(err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r54[req.body.language],
|
||||
error_code: 'e28'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.success = true;
|
||||
req.body.balance = doc.balance;
|
||||
req.body.branch_id = doc.branch_id;
|
||||
req.body.client_id = doc.client_id;
|
||||
req.body.gift_card_id = doc._id;
|
||||
req.body.gift_card_number = doc.gift_card_number;
|
||||
req.body.message = Response.r65[req.body.language];
|
||||
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (req.body.gift_card_number) {
|
||||
GiftCard.findOneAndUpdate(
|
||||
{gift_card_number: req.body.gift_card_number},
|
||||
{$inc: {balance: req.body.money_amount}},
|
||||
{new: true},
|
||||
(err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r54[req.body.language],
|
||||
error_code: 'e28'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.success = true;
|
||||
req.body.balance = doc.balance;
|
||||
req.body.branch_id = doc.branch_id;
|
||||
req.body.client_id = doc.client_id;
|
||||
req.body.gift_card_id = doc._id;
|
||||
req.body.gift_card_number = doc.gift_card_number;
|
||||
req.body.message = Response.r65[req.body.language];
|
||||
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// MARK: redeem GiftCard
|
||||
router.put('/redeemGiftCard', (req, res, next) => {
|
||||
const validationResult = validateTransaction(req.body);
|
||||
if (!validationResult.success) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: validationResult.message,
|
||||
errors: validationResult.errors
|
||||
});
|
||||
}
|
||||
|
||||
// Retrieve serial_number to make sure it gets registered in the transaction
|
||||
if (!req.body.serial_number) {
|
||||
Workstation.findOne({_id: req.body.workstation_id}, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r21[req.body.language],
|
||||
error_code: 'e15'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.serial_number = doc.serial_number;
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
}, (req, res, next) => {
|
||||
// Retrieve employee number to guarantee it will be registered in the transaction
|
||||
Employee.findOne({_id: req.body.employee_id}, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r27[req.body.language],
|
||||
error_code: 'e19'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.employee_number = doc.employee_number;
|
||||
next();
|
||||
}
|
||||
});
|
||||
|
||||
}, (req, res, next) => {
|
||||
if (req.body.gift_card_id) {
|
||||
GiftCard.findOne({_id: req.body.gift_card_id}, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r54[req.body.language],
|
||||
error_code: 'e28'
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (req.body.money_amount <= doc.balance) {
|
||||
GiftCard.findOneAndUpdate(
|
||||
{_id: req.body.gift_card_id},
|
||||
{$inc: {balance: -req.body.money_amount}},
|
||||
{new: true},
|
||||
(err, doc2) => {
|
||||
if (err) return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
else {
|
||||
req.body.success = true;
|
||||
req.body.balance = doc2.balance;
|
||||
req.body.branch_id = doc2.branch_id;
|
||||
req.body.client_id = doc2.client_id;
|
||||
req.body.gift_card_id = doc2._id;
|
||||
req.body.gift_card_number = doc2.gift_card_number;
|
||||
req.body.message = Response.r66[req.body.language];
|
||||
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
return res.status(200).json({
|
||||
success: false,
|
||||
message: Response.r67[req.body.language],
|
||||
error_code: 'e44',
|
||||
giftCardBalance: doc.balance
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (req.body.gift_card_number) {
|
||||
GiftCard.findOne({gift_card_number: req.body.gift_card_number}, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r54[req.body.language],
|
||||
error_code: 'e28'
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (req.body.money_amount <= doc.balance) {
|
||||
GiftCard.findOneAndUpdate(
|
||||
{gift_card_number: req.body.gift_card_number},
|
||||
{$inc: {balance: -req.body.money_amount}},
|
||||
{new: true},
|
||||
(err, doc2) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.success = true;
|
||||
req.body.balance = doc2.balance;
|
||||
req.body.branch_id = doc2.branch_id;
|
||||
req.body.client_id = doc2.client_id;
|
||||
req.body.gift_card_id = doc2._id;
|
||||
req.body.gift_card_number = doc2.gift_card_number;
|
||||
req.body.message = Response.r66[req.body.language];
|
||||
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (req.body.enforce) {
|
||||
GiftCard.findOneAndUpdate(
|
||||
{gift_card_number: req.body.gift_card_number},
|
||||
{$set: {balance: 0}},
|
||||
{new: true},
|
||||
(err, doc2) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.success = true;
|
||||
req.body.balance = doc2.balance;
|
||||
req.body.gift_card_id = doc2._id;
|
||||
req.body.branch_id = doc2.branch_id;
|
||||
req.body.client_id = doc2.client_id;
|
||||
req.body.gift_card_number = doc2.gift_card_number;
|
||||
req.body.remainder = req.body.money_amount - doc.balance;
|
||||
req.body.message = Response.r66[req.body.language];
|
||||
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
return res.status(200).json({
|
||||
success: false,
|
||||
message: Response.r67[req.body.language],
|
||||
error_code: 'e44',
|
||||
giftCardBalance: doc.balance
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// MARK: cancel transaction
|
||||
router.post('/cancelTransaction', (req, res, next) => {
|
||||
if (!req.body.transaction_id) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r68[req.body.language],
|
||||
error_code: 'e45'
|
||||
});
|
||||
}
|
||||
|
||||
if (!req.body.employee_id) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r64[req.body.language],
|
||||
error_code: 'e42'
|
||||
});
|
||||
}
|
||||
|
||||
// Retrieve employee number to guarantee it will be registered in the transaction
|
||||
Employee.findOne({_id: req.body.employee_id}, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r27[req.body.language],
|
||||
error_code: 'e19'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.employee_number = doc.employee_number;
|
||||
next();
|
||||
}
|
||||
});
|
||||
|
||||
}, (req, res, next) => {
|
||||
Transaction.findOneAndUpdate(
|
||||
{_id: req.body.transaction_id},
|
||||
{$set: {cancelled: true}},
|
||||
{new: true},
|
||||
(err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r69[req.body.language],
|
||||
error_code: 'e46'
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (doc.type === 'Redeem') {
|
||||
res.locals.gift_card_id = doc.gift_card_id;
|
||||
res.locals.amount = doc.money_amount;
|
||||
res.locals.transaction_id = req.body.transaction_id;
|
||||
res.locals.doc = doc;
|
||||
|
||||
next();
|
||||
}
|
||||
else if (doc.type === 'Reload') {
|
||||
res.locals.gift_card_id = doc.gift_card_id;
|
||||
res.locals.amount = -doc.money_amount;
|
||||
res.locals.transaction_id = req.body.transaction_id;
|
||||
res.locals.doc = doc;
|
||||
|
||||
next();
|
||||
}
|
||||
else if (doc.type === 'Activation'){
|
||||
res.locals.gift_card_id = doc.gift_card_id;
|
||||
res.locals.transaction_id = req.body.transaction_id;
|
||||
res.locals.doc = doc;
|
||||
|
||||
next();
|
||||
}
|
||||
else if (doc.type === 'Remittance') {
|
||||
res.locals.gift_card_id = doc.gift_card_id;
|
||||
res.locals.amount = doc.remainder;
|
||||
res.locals.transaction_id = req.body.transaction_id;
|
||||
res.locals.doc = doc;
|
||||
|
||||
next();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, (req, res, next) => {
|
||||
if (res.locals.doc.type == 'Activation') {
|
||||
GiftCard.findOneAndRemove({ _id: res.locals.gift_card_id }, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r54[req.body.language],
|
||||
error_code: 'e28'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.success = true;
|
||||
req.body.balance = doc.balance;
|
||||
req.body.branch_id = doc.branch_id;
|
||||
req.body.client_id = doc.client_id;
|
||||
req.body.gift_card_id = doc._id;
|
||||
req.body.gift_card_number = doc.gift_card_number;
|
||||
req.body.type = 'Cancel';
|
||||
req.body.cancelled_transaction_id = res.locals.transaction_id;
|
||||
req.body.message = Response.r70[req.body.language];
|
||||
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
GiftCard.findOneAndUpdate(
|
||||
{_id: res.locals.gift_card_id},
|
||||
{$inc: {balance: res.locals.amount}},
|
||||
{new: true},
|
||||
(err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r54[req.body.language],
|
||||
error_code: 'e28'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.success = true;
|
||||
req.body.balance = doc.balance;
|
||||
req.body.branch_id = doc.branch_id;
|
||||
req.body.client_id = doc.client_id;
|
||||
req.body.gift_card_id = doc._id;
|
||||
req.body.gift_card_number = doc.gift_card_number;
|
||||
req.body.type = 'Cancel';
|
||||
req.body.cancelled_transaction_id = res.locals.transaction_id;
|
||||
req.body.message = Response.r71[req.body.language];
|
||||
|
||||
next();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
// MARK: empty gift card (remittance)
|
||||
router.post('/emptyGiftCard', (req, res, next) => {
|
||||
if (!req.body.gift_card_id && !req.body.gift_card_number) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error_code: 'e24',
|
||||
message: Response.r37[req.body.language]
|
||||
});
|
||||
}
|
||||
if (!req.body.branch_id) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error_code: 'e7',
|
||||
message: Response.r11[req.body.language]
|
||||
});
|
||||
}
|
||||
if (!req.body.employee_id) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r64[req.body.language],
|
||||
error_code: 'e42'
|
||||
});
|
||||
}
|
||||
|
||||
// Retrieve employee number to guarantee it will be registered in the transaction
|
||||
Employee.findOne({_id: req.body.employee_id}, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r27[req.body.language],
|
||||
error_code: 'e19'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.employee_number = doc.employee_number;
|
||||
next();
|
||||
}
|
||||
});
|
||||
|
||||
}, (req, res, next) => {
|
||||
if (req.body.gift_card_id) {
|
||||
GiftCard.findOne({ _id: req.body.gift_card_id }, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r54[req.body.language],
|
||||
error_code: 'e28'
|
||||
});
|
||||
}
|
||||
else {
|
||||
res.locals.balance = doc.balance;
|
||||
req.body.gift_card_number = doc.gift_card_number;
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (req.body.gift_card_number) {
|
||||
GiftCard.findOne({ gift_card_number: req.body.gift_card_number }, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r54[req.body.language],
|
||||
error_code: 'e28'
|
||||
});
|
||||
}
|
||||
else {
|
||||
res.locals.balance = doc.balance;
|
||||
req.body.gift_card_id = doc._id;
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
}, (req, res, next) => {
|
||||
if (res.locals.balance > 5) {
|
||||
return res.status(400).json({
|
||||
sucess: false,
|
||||
error_code: 'e47',
|
||||
message: Response.r72[req.body.language]
|
||||
});
|
||||
}
|
||||
else if (res.locals.balance == 0) {
|
||||
return res.status(400).json({
|
||||
sucess: false,
|
||||
error_code: 'e48',
|
||||
message: Response.r73[req.body.language]
|
||||
});
|
||||
}
|
||||
next();
|
||||
}, (req, res, next) => {
|
||||
Branch.findOne({ _id: req.body.branch_id }, (err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
if (!doc) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r18[req.body.language],
|
||||
error_code: 'e13'
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (doc.province !== 'QC') {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r74[req.body.language] + doc.province + '.',
|
||||
error_code: 'e49'
|
||||
});
|
||||
}
|
||||
else {
|
||||
GiftCard.findOneAndUpdate(
|
||||
{gift_card_number: req.body.gift_card_number},
|
||||
{$set: {balance: 0}},
|
||||
{new: true},
|
||||
(err, doc2) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
else {
|
||||
req.body.success = true;
|
||||
req.body.balance = doc2.balance;
|
||||
req.body.gift_card_id = doc2._id;
|
||||
req.body.branch_id = req.body.branch_id;
|
||||
req.body.client_id = doc2.client_id;
|
||||
req.body.gift_card_number = doc2.gift_card_number;
|
||||
req.body.remainder = res.locals.balance;
|
||||
req.body.type = 'Remittance';
|
||||
req.body.message = Response.r75[req.body.language];
|
||||
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// MARK: - Record transaction
|
||||
router.use((req, res) => {
|
||||
if (req.body.success) {
|
||||
const newTransaction = new Transaction(req.body);
|
||||
newTransaction.save((err, doc) => {
|
||||
if (err) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: Response.r0[req.body.language],
|
||||
error_code: 'e0'
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
message: Response.r76[req.body.language] + req.body.message,
|
||||
transaction_id: doc._id,
|
||||
type: req.body.type,
|
||||
balance: req.body.balance,
|
||||
remainder: req.body.remainder
|
||||
})
|
||||
});
|
||||
}
|
||||
else {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: Response.r77[req.body.language],
|
||||
error_code: 'e50'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
module.exports = router;
|
Loading…
Add table
Add a link
Reference in a new issue