update member cards
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
"username": "savvy",
|
"username": "savvy",
|
||||||
"password": "savvy001!",
|
"password": "savvy001!",
|
||||||
"database": "savvy",
|
"database": "savvy",
|
||||||
"host": "postgres",
|
"host": "10.10.33.21",
|
||||||
"port": 5432,
|
"port": 5432,
|
||||||
"dialect": "postgres"
|
"dialect": "postgres"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const { check, validationResult } = require('express-validator');
|
const { check, validationResult } = require('express-validator');
|
||||||
const memberServices = require("../services").member;
|
const memberServices = require("../services").memberService.member;
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
register(req, res) {
|
register(req, res) {
|
||||||
@@ -123,7 +123,6 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
getSlideCardData(req, res) {
|
getSlideCardData(req, res) {
|
||||||
console.log('ss');
|
|
||||||
memberServices.getSlideCard(req)
|
memberServices.getSlideCard(req)
|
||||||
.then(data => res.status(200).send(data))
|
.then(data => res.status(200).send(data))
|
||||||
.catch(error => res.status(400).send(error.errors));
|
.catch(error => res.status(400).send(error.errors));
|
||||||
|
|||||||
@@ -1,242 +0,0 @@
|
|||||||
const sequelize = require("../../models").sequelize;
|
|
||||||
const { Op } = require("sequelize");
|
|
||||||
const { forEach } = require('lodash');
|
|
||||||
const MembersCardAssign = require("../../models").MembersCardAssign;
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
CARD_BEHAVIORS: {
|
|
||||||
BH0001: 'BH0001',
|
|
||||||
BH0002: 'BH0002',
|
|
||||||
BH0003: 'BH0003',
|
|
||||||
BH0004: 'BH0004',
|
|
||||||
BH0005: 'BH0005',
|
|
||||||
BH0006: 'BH0006',
|
|
||||||
BH0007: 'BH0007',
|
|
||||||
BH0008: 'BH0008',
|
|
||||||
BH0009: 'BH0009',
|
|
||||||
BH00010: 'BH00010',
|
|
||||||
BH00011: 'BH00011',
|
|
||||||
BH00012: 'BH00012',
|
|
||||||
BH00013: 'BH00013',
|
|
||||||
BH00014: 'BH00014',
|
|
||||||
BH00015: 'BH00015',
|
|
||||||
BH00016: 'BH00016',
|
|
||||||
BH00017: 'BH00017',
|
|
||||||
BH00018: 'BH00018',
|
|
||||||
},
|
|
||||||
DEFAULT_CARD_TYPE: 33000,
|
|
||||||
DEFAULT_CARD_COUNT: 100,
|
|
||||||
CARD_LOCATIONS: {
|
|
||||||
DEFAULT: 0,
|
|
||||||
MAINFEED: 100,
|
|
||||||
ACTIVITIES: 200
|
|
||||||
},
|
|
||||||
CARD_ADD_DENIED: 0,
|
|
||||||
CARD_ADD_ALLOWED: 100,
|
|
||||||
async getMemberSurveyCards(memberId) {
|
|
||||||
var result = {};
|
|
||||||
let sql = `SELECT card_id FROM members_onboarding_survey mos
|
|
||||||
LEFT JOIN onboarding_survey_cards ca ON ca.answers_key = mos.answers_key
|
|
||||||
LEFT JOIN main_cards a ON a.id=ca.card_id
|
|
||||||
WHERE mos.member_id = :member_id AND a.status = 1
|
|
||||||
AND card_id NOT IN (SELECT card_id FROM members_card_assign WHERE member_id = :member_id AND status=1)
|
|
||||||
GROUP BY card_id`;
|
|
||||||
const results = await sequelize.query(sql,
|
|
||||||
{
|
|
||||||
replacements: {
|
|
||||||
member_id: memberId
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (results[0]) {
|
|
||||||
var obj = this
|
|
||||||
console.log(results)
|
|
||||||
forEach(results[0], async function (value) {
|
|
||||||
await obj.userCardAdd(memberId, value.card_id)
|
|
||||||
});
|
|
||||||
result = results[0];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
async userCardAdd(memberId, cardId) {
|
|
||||||
console.log('add card')
|
|
||||||
var a = this;
|
|
||||||
const memberCard = await this.getMemberCardAssignByMemberIdAndCardId(memberId, cardId);
|
|
||||||
//console.log("memberCard: ",memberCard)
|
|
||||||
if (memberCard) {
|
|
||||||
console.log('card status', memberCard.status)
|
|
||||||
if (memberCard.status == 0) {
|
|
||||||
const cardClick = await this.getMemberCardClickTrack(memberId, cardId);
|
|
||||||
const data = {
|
|
||||||
status: 1,
|
|
||||||
updated: Date.now()
|
|
||||||
};
|
|
||||||
console.log('cardClick', cardClick)
|
|
||||||
if (cardClick) {
|
|
||||||
if (cardClick.expiration == 0) {
|
|
||||||
this.updateMemberCardAssign(memberId, cardId, data);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//update card status
|
|
||||||
this.updateMemberCardAssign(memberId, cardId, data);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//status already added
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//insert member card assign
|
|
||||||
data = {
|
|
||||||
member_id: memberId,
|
|
||||||
card_id: cardId,
|
|
||||||
status: 1
|
|
||||||
}
|
|
||||||
//console.log(data);
|
|
||||||
//this.memberCardAssignInsert(data);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
async memberCardAssignInsert(data) {
|
|
||||||
return await MembersCardAssign.create(data);
|
|
||||||
},
|
|
||||||
|
|
||||||
async getMemberCardAssignByMemberIdAndCardId(memberId, cardId) {
|
|
||||||
console.log('getMemberCardAssignByMemberIdAndCardId')
|
|
||||||
return await MembersCardAssign.findOne({
|
|
||||||
where: {
|
|
||||||
card_id: cardId,
|
|
||||||
member_id: memberId,
|
|
||||||
status: {
|
|
||||||
[Op.in]: [0, 1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
async getMemberCardClickTrack(memberId, cardId) {
|
|
||||||
var result = null;
|
|
||||||
let sql = `SELECT expiration FROM members_cardclicktrack mc LEFT JOIN main_cards a ON a.id=mc.card_id
|
|
||||||
WHERE a.id=:card_id AND mc.member_id=:member_id LIMIT 1`;
|
|
||||||
const results = await sequelize.query(sql,
|
|
||||||
{
|
|
||||||
replacements: {
|
|
||||||
card_id: cardId,
|
|
||||||
member_id: memberId
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (results[0].expiration) {
|
|
||||||
console.log(results[0])
|
|
||||||
result = results[0];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
async updateMemberCardAssign(memberId, cardId, data) {
|
|
||||||
console.log('updateMemberCardAssign')
|
|
||||||
return MembersCardAssign
|
|
||||||
.update(data,
|
|
||||||
{
|
|
||||||
returning: true,
|
|
||||||
where: {
|
|
||||||
member_id: memberId,
|
|
||||||
card_id: cardId,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.then(([rowsUpdate, [updatedRow]]) => {
|
|
||||||
return updatedRow
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log(error)
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
async getMemberCardsByType(memberId, cardType, limit) {
|
|
||||||
var result = {};
|
|
||||||
var total = 0;
|
|
||||||
var queryMain = '';
|
|
||||||
var sqlSelect = '';
|
|
||||||
var sqlCount = '';
|
|
||||||
var cardType = cardType;
|
|
||||||
console.log(cardType)
|
|
||||||
switch (cardType) {
|
|
||||||
case 33000:
|
|
||||||
sqlCount = `SELECT count(ca.id) `;
|
|
||||||
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,
|
|
||||||
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
|
|
||||||
queryMain = `FROM main_cards a
|
|
||||||
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
|
|
||||||
LEFT JOIN address adr ON adr.id = a.card_location
|
|
||||||
LEFT JOIN members_card_assign ca ON ca.card_id=a.id AND ca.member_id=:member_id AND ca.status=1
|
|
||||||
WHERE a.status = 1 AND a.deleted IS NULL AND a.button1_action IN ('GOOFFERS','CARPOOL') `;
|
|
||||||
sqlCount += queryMain;
|
|
||||||
sqlSelect += queryMain + `ORDER BY a.card_order ASC`;
|
|
||||||
break;
|
|
||||||
case 22000:
|
|
||||||
sqlCount = `SELECT count(ca.id) `;
|
|
||||||
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,ca.trigger_key,ca.message,ca.cat,
|
|
||||||
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
|
|
||||||
queryMain = `FROM members_card_assign ca
|
|
||||||
LEFT JOIN main_cards a ON a.id=ca.card_id
|
|
||||||
LEFT JOIN address adr ON adr.id = a.card_location
|
|
||||||
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
|
|
||||||
WHERE ca.member_id = :member_id AND ca.status =1 AND a.status=1
|
|
||||||
AND show_area IN (`+ this.CARD_LOCATIONS.DEFAULT + `,` + this.CARD_LOCATIONS.MAINFEED + `) AND a.deleted IS NULL AND ca.subscribe IS NULL AND ca.completed IS NULL `;
|
|
||||||
sqlCount += queryMain;
|
|
||||||
sqlSelect += queryMain + `ORDER BY a.card_order ASC`;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 55000:
|
|
||||||
sqlCount = `SELECT count(ca.id) `;
|
|
||||||
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,ca.trigger_key,ca.message,ca.cat,
|
|
||||||
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
|
|
||||||
queryMain = `FROM members_card_assign ca
|
|
||||||
LEFT JOIN main_cards a ON a.id=ca.card_id
|
|
||||||
LEFT JOIN address adr ON adr.id = a.card_location
|
|
||||||
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
|
|
||||||
WHERE ca.member_id = :member_id AND a.button1_action IN ('GOOFFERS') AND ca.subscribe IS NOT NULL `;
|
|
||||||
sqlCount += queryMain;
|
|
||||||
sqlSelect += queryMain + ` ORDER BY ca.subscribe ASC`;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 11000:
|
|
||||||
sqlCount = `SELECT count(a.id) `;
|
|
||||||
sqlSelect = `SELECT a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data `;
|
|
||||||
queryMain = `FROM main_cards a LEFT JOIN card_actions b ON (b.id=a.card_action_id)
|
|
||||||
WHERE a.status = 1 AND a.deleted IS NULL ORDER BY RANDOM()`;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sql = `select 1 from 1`;
|
|
||||||
}
|
|
||||||
sqlSelect += ` LIMIT ` + limit;
|
|
||||||
console.log("sql", sqlSelect)
|
|
||||||
const results = await sequelize.query(sqlSelect,
|
|
||||||
{
|
|
||||||
replacements: { member_id: memberId }
|
|
||||||
});
|
|
||||||
if (results[0]) {
|
|
||||||
forEach(results[0], async function (card) {
|
|
||||||
console.log(card.card_behavior)
|
|
||||||
});
|
|
||||||
//result = results[0];
|
|
||||||
}
|
|
||||||
const totalCards = await sequelize.query(sqlCount,
|
|
||||||
{
|
|
||||||
replacements: { member_id: memberId }
|
|
||||||
});
|
|
||||||
if (totalCards[0][0]) {
|
|
||||||
total = parseInt(totalCards[0][0].count);
|
|
||||||
}
|
|
||||||
return { total: total, result: result };
|
|
||||||
},
|
|
||||||
|
|
||||||
verifyMemberCardDescision(cardData, member){
|
|
||||||
var behavior = cardData.card_behavior;
|
|
||||||
switch(behavior){
|
|
||||||
case this.CARD_BEHAVIORS.BH0001:
|
|
||||||
return this.CARD_ADD_ALLOWED;
|
|
||||||
}
|
|
||||||
return this.CARD_ADD_ALLOWED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
const sequelize = require("../../models").sequelize;
|
||||||
|
const MembersBankAccount = require("../../models").MembersBankAccounts;
|
||||||
|
const OAuth2PullJob = require("../../models").Oauth2PullJobs;
|
||||||
|
|
||||||
|
module.exports = (memberCardService, memberService) => {
|
||||||
|
|
||||||
|
var cardBehavior = {};
|
||||||
|
cardBehavior.behaviorBH0001 = async (member) => {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0002 = async (member) => {
|
||||||
|
const totalBankAccount = await MembersBankAccount.count({
|
||||||
|
where: {
|
||||||
|
member_id: member.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (member.last_acct == "" && totalBankAccount == 0) {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0003 = async (member) => {
|
||||||
|
const totalPullEmail = await OAuth2PullJob.count({
|
||||||
|
where: {
|
||||||
|
member_id: member.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (member.last_email == "" && totalPullEmail == 0) {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0004 = async (member) => {
|
||||||
|
const totalPullEmail = await OAuth2PullJob.count({
|
||||||
|
where: {
|
||||||
|
member_id: member.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (member.last_acct == "" && totalPullEmail == 0) {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0005 = async (member) => {
|
||||||
|
const weeklySpending = await memberService.weeklyMemberSpending(member);
|
||||||
|
if (weeklySpending.weekly_total == 0) {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0006 = async (member) => {
|
||||||
|
if (member.max_budget == 0) {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0007 = async (member) => {
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0008 = async (member) => {
|
||||||
|
const weeklySpending = await memberService.weeklyMemberSpending(member);
|
||||||
|
if (weeklySpending.over_spending > 0 && weeklySpending.under_spending == 0) {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0009 = async (member) => {
|
||||||
|
const weeklySpending = await memberService.weeklyMemberSpending(member);
|
||||||
|
if (weeklySpending.under_spending > 0 && weeklySpending.over_spending == 0 && weeklySpending.user_budget_percentbelow > 0) {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0010 = async (member) => {
|
||||||
|
return await memberService.enableGPS(member);
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0011 = async (member) => {
|
||||||
|
const enableGPS = await memberService.enableGPS(member);
|
||||||
|
if (enableGPS && member.last_acct != "" && member.last_email != "") {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0012 = async (member) => {
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0013 = async (member) => {
|
||||||
|
const enableGPS = await memberService.enableGPS(member);
|
||||||
|
return !enableGPS;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0014 = async (member) => {
|
||||||
|
const weeklySpending = await memberService.weeklyMemberSpending(member);
|
||||||
|
if (weeklySpending.user_budget_percentabove > 0) {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0015 = async (member) => {
|
||||||
|
const weeklySpending = await memberService.weeklyMemberSpending(member);
|
||||||
|
if (weeklySpending.user_budget_percentbelow > 0) {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0016 = async (member) => {
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0017 = async (member) => {
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
cardBehavior.behaviorBH0018 = async (member) => {
|
||||||
|
if (member.min_budget + member.max_budget > 0) {
|
||||||
|
return memberCardService.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
return memberCardService.CARD_ADD_DENIED;
|
||||||
|
};
|
||||||
|
|
||||||
|
return cardBehavior;
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
const memberCard = require("./memberCard");
|
||||||
|
const cardBehavior = require("./cardBehavior");
|
||||||
|
|
||||||
|
/* console.log({
|
||||||
|
memberCard,
|
||||||
|
cardBehavior
|
||||||
|
}) */
|
||||||
|
module.exports = {
|
||||||
|
memberCard,
|
||||||
|
cardBehavior
|
||||||
|
};
|
||||||
@@ -0,0 +1,253 @@
|
|||||||
|
const sequelize = require("../../models").sequelize;
|
||||||
|
const { Op } = require("sequelize");
|
||||||
|
const { forEach, invoke } = require('lodash');
|
||||||
|
const MembersCardAssign = require("../../models").MembersCardAssign;
|
||||||
|
|
||||||
|
module.exports = (memberService) => {
|
||||||
|
const cardBehaviorService = require("./cardBehavior")(this,memberService);
|
||||||
|
return {
|
||||||
|
CARD_BEHAVIORS: {
|
||||||
|
BH0001: 'BH0001',
|
||||||
|
BH0002: 'BH0002',
|
||||||
|
BH0003: 'BH0003',
|
||||||
|
BH0004: 'BH0004',
|
||||||
|
BH0005: 'BH0005',
|
||||||
|
BH0006: 'BH0006',
|
||||||
|
BH0007: 'BH0007',
|
||||||
|
BH0008: 'BH0008',
|
||||||
|
BH0009: 'BH0009',
|
||||||
|
BH00010: 'BH00010',
|
||||||
|
BH00011: 'BH00011',
|
||||||
|
BH00012: 'BH00012',
|
||||||
|
BH00013: 'BH00013',
|
||||||
|
BH00014: 'BH00014',
|
||||||
|
BH00015: 'BH00015',
|
||||||
|
BH00016: 'BH00016',
|
||||||
|
BH00017: 'BH00017',
|
||||||
|
BH00018: 'BH00018',
|
||||||
|
},
|
||||||
|
DEFAULT_CARD_TYPE: 33000,
|
||||||
|
DEFAULT_CARD_COUNT: 100,
|
||||||
|
CARD_LOCATIONS: {
|
||||||
|
DEFAULT: 0,
|
||||||
|
MAINFEED: 100,
|
||||||
|
ACTIVITIES: 200
|
||||||
|
},
|
||||||
|
CARD_ADD_DENIED: 0,
|
||||||
|
CARD_ADD_ALLOWED: 100,
|
||||||
|
|
||||||
|
async getMemberSurveyCards(memberId) {
|
||||||
|
var result = {};
|
||||||
|
let sql = `SELECT card_id FROM members_onboarding_survey mos
|
||||||
|
LEFT JOIN onboarding_survey_cards ca ON ca.answers_key = mos.answers_key
|
||||||
|
LEFT JOIN main_cards a ON a.id=ca.card_id
|
||||||
|
WHERE mos.member_id = :member_id AND a.status = 1
|
||||||
|
AND card_id NOT IN (SELECT card_id FROM members_card_assign WHERE member_id = :member_id AND status=1)
|
||||||
|
GROUP BY card_id`;
|
||||||
|
const results = await sequelize.query(sql,
|
||||||
|
{
|
||||||
|
replacements: {
|
||||||
|
member_id: memberId
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (results[0]) {
|
||||||
|
var obj = this
|
||||||
|
console.log(results)
|
||||||
|
forEach(results[0], async function (value) {
|
||||||
|
await obj.userCardAdd(memberId, value.card_id)
|
||||||
|
});
|
||||||
|
result = results[0];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
async userCardAdd(memberId, cardId) {
|
||||||
|
console.log('add card')
|
||||||
|
var a = this;
|
||||||
|
const memberCard = await this.getMemberCardAssignByMemberIdAndCardId(memberId, cardId);
|
||||||
|
//console.log("memberCard: ",memberCard)
|
||||||
|
if (memberCard) {
|
||||||
|
console.log('card status', memberCard.status)
|
||||||
|
if (memberCard.status == 0) {
|
||||||
|
const cardClick = await this.getMemberCardClickTrack(memberId, cardId);
|
||||||
|
const data = {
|
||||||
|
status: 1,
|
||||||
|
updated: Date.now()
|
||||||
|
};
|
||||||
|
console.log('cardClick', cardClick)
|
||||||
|
if (cardClick) {
|
||||||
|
if (cardClick.expiration == 0) {
|
||||||
|
this.updateMemberCardAssign(memberId, cardId, data);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//update card status
|
||||||
|
this.updateMemberCardAssign(memberId, cardId, data);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//status already added
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//insert member card assign
|
||||||
|
data = {
|
||||||
|
member_id: memberId,
|
||||||
|
card_id: cardId,
|
||||||
|
status: 1
|
||||||
|
}
|
||||||
|
//console.log(data);
|
||||||
|
//this.memberCardAssignInsert(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async memberCardAssignInsert(data) {
|
||||||
|
return await MembersCardAssign.create(data);
|
||||||
|
},
|
||||||
|
|
||||||
|
async getMemberCardAssignByMemberIdAndCardId(memberId, cardId) {
|
||||||
|
console.log('getMemberCardAssignByMemberIdAndCardId')
|
||||||
|
return await MembersCardAssign.findOne({
|
||||||
|
where: {
|
||||||
|
card_id: cardId,
|
||||||
|
member_id: memberId,
|
||||||
|
status: {
|
||||||
|
[Op.in]: [0, 1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
async getMemberCardClickTrack(memberId, cardId) {
|
||||||
|
var result = null;
|
||||||
|
let sql = `SELECT expiration FROM members_cardclicktrack mc LEFT JOIN main_cards a ON a.id=mc.card_id
|
||||||
|
WHERE a.id=:card_id AND mc.member_id=:member_id LIMIT 1`;
|
||||||
|
const results = await sequelize.query(sql,
|
||||||
|
{
|
||||||
|
replacements: {
|
||||||
|
card_id: cardId,
|
||||||
|
member_id: memberId
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (results[0].expiration) {
|
||||||
|
console.log(results[0])
|
||||||
|
result = results[0];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
async updateMemberCardAssign(memberId, cardId, data) {
|
||||||
|
console.log('updateMemberCardAssign')
|
||||||
|
return MembersCardAssign
|
||||||
|
.update(data,
|
||||||
|
{
|
||||||
|
returning: true,
|
||||||
|
where: {
|
||||||
|
member_id: memberId,
|
||||||
|
card_id: cardId,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then(([rowsUpdate, [updatedRow]]) => {
|
||||||
|
return updatedRow
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.log(error)
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
async getMemberCardsByType(member, cardType, limit) {
|
||||||
|
var memberId = member.id;
|
||||||
|
var result = {};
|
||||||
|
var total = 0;
|
||||||
|
var queryMain = '';
|
||||||
|
var sqlSelect = '';
|
||||||
|
var sqlCount = '';
|
||||||
|
var cardType = cardType;
|
||||||
|
console.log(cardType)
|
||||||
|
switch (cardType) {
|
||||||
|
case 33000:
|
||||||
|
sqlCount = `SELECT count(ca.id) `;
|
||||||
|
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,
|
||||||
|
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
|
||||||
|
queryMain = `FROM main_cards a
|
||||||
|
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
|
||||||
|
LEFT JOIN address adr ON adr.id = a.card_location
|
||||||
|
LEFT JOIN members_card_assign ca ON ca.card_id=a.id AND ca.member_id=:member_id AND ca.status=1
|
||||||
|
WHERE a.status = 1 AND a.deleted IS NULL AND a.button1_action IN ('GOOFFERS','CARPOOL') `;
|
||||||
|
sqlCount += queryMain;
|
||||||
|
sqlSelect += queryMain + `ORDER BY a.card_order ASC`;
|
||||||
|
break;
|
||||||
|
case 22000:
|
||||||
|
sqlCount = `SELECT count(ca.id) `;
|
||||||
|
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,ca.trigger_key,ca.message,ca.cat,
|
||||||
|
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
|
||||||
|
queryMain = `FROM members_card_assign ca
|
||||||
|
LEFT JOIN main_cards a ON a.id=ca.card_id
|
||||||
|
LEFT JOIN address adr ON adr.id = a.card_location
|
||||||
|
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
|
||||||
|
WHERE ca.member_id = :member_id AND ca.status =1 AND a.status=1
|
||||||
|
AND show_area IN (`+ this.CARD_LOCATIONS.DEFAULT + `,` + this.CARD_LOCATIONS.MAINFEED + `) AND a.deleted IS NULL AND ca.subscribe IS NULL AND ca.completed IS NULL `;
|
||||||
|
sqlCount += queryMain;
|
||||||
|
sqlSelect += queryMain + `ORDER BY a.card_order ASC`;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 55000:
|
||||||
|
sqlCount = `SELECT count(ca.id) `;
|
||||||
|
sqlSelect = `SELECT ca.id AS assign_id, ca.subscribe, a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data,adr.latitude,adr.longitude,ca.trigger_key,ca.message,ca.cat,
|
||||||
|
EXTRACT(DAY FROM (CASE WHEN a.card_expiration IS NULL THEN now() -now() ELSE a.card_expiration -now() END)) AS expr_val, a.card_canexpire `;
|
||||||
|
queryMain = `FROM members_card_assign ca
|
||||||
|
LEFT JOIN main_cards a ON a.id=ca.card_id
|
||||||
|
LEFT JOIN address adr ON adr.id = a.card_location
|
||||||
|
LEFT JOIN card_actions b ON (b.id=a.card_action_id)
|
||||||
|
WHERE ca.member_id = :member_id AND a.button1_action IN ('GOOFFERS') AND ca.subscribe IS NOT NULL `;
|
||||||
|
sqlCount += queryMain;
|
||||||
|
sqlSelect += queryMain + ` ORDER BY ca.subscribe ASC`;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 11000:
|
||||||
|
sqlCount = `SELECT count(a.id) `;
|
||||||
|
sqlSelect = `SELECT a.*, a.id AS card_id,b.name AS card_action_name,b.type AS card_action_type,b.data AS card_action_data `;
|
||||||
|
queryMain = `FROM main_cards a LEFT JOIN card_actions b ON (b.id=a.card_action_id)
|
||||||
|
WHERE a.status = 1 AND a.deleted IS NULL ORDER BY RANDOM()`;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sql = `select 1 from 1`;
|
||||||
|
}
|
||||||
|
sqlSelect += ` LIMIT ` + limit;
|
||||||
|
console.log("sql", sqlSelect)
|
||||||
|
const results = await sequelize.query(sqlSelect, {
|
||||||
|
replacements: { member_id: memberId }
|
||||||
|
});
|
||||||
|
var testCardAllowed = this.CARD_ADD_DENIED
|
||||||
|
if (results[0]) {
|
||||||
|
var self = this;
|
||||||
|
forEach(results[0], async function (card) {
|
||||||
|
//console.log("card behavior: ", card.card_behavior)
|
||||||
|
if (cardType == 22000) {
|
||||||
|
testCardAllowed = self.verifyMemberCardDescision(card, member);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
result = results[0];
|
||||||
|
}
|
||||||
|
const totalCards = await sequelize.query(sqlCount, {
|
||||||
|
replacements: { member_id: memberId }
|
||||||
|
});
|
||||||
|
if (totalCards[0][0]) {
|
||||||
|
total = parseInt(totalCards[0][0].count);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { total: total, result: result };
|
||||||
|
},
|
||||||
|
|
||||||
|
async verifyMemberCardDescision(cardData, member) {
|
||||||
|
var behavior = cardData.card_behavior;
|
||||||
|
var func = 'behavior' + behavior;
|
||||||
|
|
||||||
|
if (func in cardBehaviorService) {
|
||||||
|
//console.log('call function ', func)
|
||||||
|
return invoke(cardBehaviorService, func, member);
|
||||||
|
}
|
||||||
|
return this.CARD_ADD_ALLOWED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,14 @@
|
|||||||
const member = require("./member/member");
|
const cardService = require("./card");
|
||||||
|
const mailService = require("./mail");
|
||||||
|
const memberService = require("./member");
|
||||||
|
|
||||||
|
/*console.log({
|
||||||
|
cardService,
|
||||||
|
mailService,
|
||||||
|
memberService
|
||||||
|
})*/
|
||||||
module.exports = {
|
module.exports = {
|
||||||
member
|
cardService,
|
||||||
|
mailService,
|
||||||
|
memberService
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
const handlebars = require('handlebars');
|
const handlebars = require('handlebars');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const sgMail = require('@sendgrid/mail')
|
const sgMail = require('@sendgrid/mail')
|
||||||
|
|
||||||
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
|
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
|
||||||
module.exports = {
|
module.exports = {
|
||||||
emailResetPassword(user, resetPin) {
|
emailResetPassword(user, resetPin) {
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
const member = require("./member");
|
||||||
|
const resetPassword = require("./resetPassword");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
member,
|
||||||
|
resetPassword
|
||||||
|
};
|
||||||
@@ -3,13 +3,15 @@ const { pick, forEach } = require('lodash');
|
|||||||
const bcrypt = require('bcrypt');
|
const bcrypt = require('bcrypt');
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
const Member = require("../../models").Members;
|
const Member = require("../../models").Members;
|
||||||
const MemberOnboardingSurvey = require("../../models").MembersOnboardingSurvey;
|
|
||||||
const sequelize = require("../../models").sequelize;
|
const sequelize = require("../../models").sequelize;
|
||||||
|
const MemberOnboardingSurvey = require("../../models").MembersOnboardingSurvey;
|
||||||
|
const MembersTracking = require("../../models").MembersTracking;
|
||||||
|
const MembersBankAccount = require("../../models").MembersBankAccounts;
|
||||||
const resetPasswordService = require("./resetPassword");
|
const resetPasswordService = require("./resetPassword");
|
||||||
const cardService = require("../card/card");
|
const memberCardService = require("../card").memberCard.bind(this);
|
||||||
const mailServiceMember = require("../mail").member;
|
const mailServiceMember = require("../mail").member;
|
||||||
const { DEFAULT_CARD_TYPE } = require('../card/card');
|
|
||||||
|
|
||||||
|
console.log('card in member', memberCardService)
|
||||||
module.exports = {
|
module.exports = {
|
||||||
RESET_START: 100,
|
RESET_START: 100,
|
||||||
RESET_CONFIRM: 200,
|
RESET_CONFIRM: 200,
|
||||||
@@ -80,7 +82,7 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
message: "Wrong username or password."
|
message: "Wrong email."
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -143,7 +145,7 @@ module.exports = {
|
|||||||
|
|
||||||
let expired = date.setDate(date.getDate() + 7);
|
let expired = date.setDate(date.getDate() + 7);
|
||||||
var status = 3;
|
var status = 3;
|
||||||
|
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
console.log('user null')
|
console.log('user null')
|
||||||
return false;
|
return false;
|
||||||
@@ -266,7 +268,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
async getProfile(req) {
|
async getProfile(req) {
|
||||||
console.log(req.user)
|
//console.log(req.user)
|
||||||
const member_id = req.user.id;
|
const member_id = req.user.id;
|
||||||
var result = {};
|
var result = {};
|
||||||
let sql = `SELECT dg.personality AS personality_name,m.id AS member_id,m.*,m.id as id
|
let sql = `SELECT dg.personality AS personality_name,m.id AS member_id,m.*,m.id as id
|
||||||
@@ -489,19 +491,125 @@ module.exports = {
|
|||||||
return 0;*/
|
return 0;*/
|
||||||
},
|
},
|
||||||
|
|
||||||
async getSlideCard(req) {
|
async weeklyMemberSpending(member) {
|
||||||
|
var overSpending = 0;
|
||||||
|
var underSpending = 0;
|
||||||
|
var weeklyTotal = 0;
|
||||||
|
var populationAverage = 0;
|
||||||
|
var memberAverage = 0;
|
||||||
|
var userBudgetPercentBelow = 0;
|
||||||
|
var userBudgetPercentAbove = 0;
|
||||||
|
var userMoreLocalAveragePerm = 0;
|
||||||
|
var userLessLocalAveragePerm = 0;
|
||||||
|
var totalBank = 0;
|
||||||
|
var totalEmail = 0;
|
||||||
|
var totalWeeklySpend = 0;
|
||||||
|
|
||||||
|
//local average
|
||||||
|
var queryPopulation = `SELECT avg(amount) *0.01 AS population_average
|
||||||
|
FROM members_bankimport
|
||||||
|
WHERE category IN (SELECT category FROM activity_listcategory) AND currency='USD'`;
|
||||||
|
const avgPop = await sequelize.query(queryPopulation);
|
||||||
|
if (avgPop[0][0]) {
|
||||||
|
populationAverage = parseFloat(avgPop[0][0].population_average);
|
||||||
|
}
|
||||||
|
|
||||||
|
var queryMemberAverage = `SELECT avg(amount) *0.01 AS member_average
|
||||||
|
FROM members_bankimport
|
||||||
|
WHERE category IN (SELECT category FROM activity_listcategory) AND member_id = :member_id AND currency='USD'`;
|
||||||
|
const memberAverge = await sequelize.query(queryMemberAverage, {
|
||||||
|
replacements: { member_id: member.id }
|
||||||
|
});
|
||||||
|
if (memberAverge[0][0]) {
|
||||||
|
memberAverage = parseFloat(memberAverge[0][0].member_average);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (memberAverage > 0 && memberAverage > populationAverage) {
|
||||||
|
userMoreLocalAveragePerm = memberAverage - populationAverage;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (memberAverage > 0 && memberAverage < populationAverage) {
|
||||||
|
userLessLocalAveragePerm = populationAverage - memberAverage;
|
||||||
|
}
|
||||||
|
//end local average
|
||||||
|
var totalWeeklyBudget = (member.min_budget + member.max_budget) / 200;
|
||||||
|
|
||||||
|
var queryBankImport = `SELECT * FROM (SELECT round(0.01*sum(amount),2) AS total FROM members_bankimport
|
||||||
|
WHERE member_id= :member_id AND LOWER(category) IN (SELECT LOWER(category) FROM activity_listcategory)
|
||||||
|
AND date_trunc('day', time) > (current_date - 8)
|
||||||
|
AND date_trunc('day', time) < current_date) AS c WHERE c.total IS NOT NULL`;
|
||||||
|
|
||||||
|
const totalBankImport = await sequelize.query(queryBankImport, {
|
||||||
|
replacements: { member_id: member.id }
|
||||||
|
});
|
||||||
|
if (totalBankImport[0][0]) {
|
||||||
|
totalBank = parseInt(totalBankImport[0][0].total);
|
||||||
|
}
|
||||||
|
|
||||||
|
var queryTotalEmail = `SELECT * FROM (SELECT round(sum(a.cost),2) AS total
|
||||||
|
FROM parsedemail_item a, trackedemail_item b WHERE b.id=a.trackedemail_item_id
|
||||||
|
AND b.member_id= :member_id AND a.dup_id IS NULL AND date_trunc('day', a.travel_date_end) > (current_date - 8)
|
||||||
|
AND date_trunc('day', a.travel_date_end) < current_date) AS c WHERE c.total IS NOT NULL`;
|
||||||
|
|
||||||
|
const totalEmailCost = await sequelize.query(queryTotalEmail, {
|
||||||
|
replacements: { member_id: member.id }
|
||||||
|
});
|
||||||
|
if (totalEmailCost[0][0]) {
|
||||||
|
totalEmail = parseInt(totalEmailCost[0][0].total);
|
||||||
|
}
|
||||||
|
|
||||||
|
totalWeeklySpend = totalBank + totalEmail;
|
||||||
|
|
||||||
|
if (totalWeeklySpend > totalWeeklyBudget && totalWeeklyBudget > 0) {
|
||||||
|
overSpending = totalWeeklySpend - totalWeeklyBudget;
|
||||||
|
userBudgetPercentAbove = overSpending / totalWeeklyBudget;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totalWeeklyBudget > totalWeeklySpend && totalWeeklyBudget > 0) {
|
||||||
|
underSpending = totalWeeklyBudget - totalWeeklySpend;
|
||||||
|
userBudgetPercentBelow = underSpending / totalWeeklyBudget;
|
||||||
|
}
|
||||||
|
|
||||||
|
weeklyTotal = totalWeeklySpend;
|
||||||
|
|
||||||
|
return {
|
||||||
|
over_spending: overSpending,
|
||||||
|
under_spending: underSpending,
|
||||||
|
weekly_total: weeklyTotal,
|
||||||
|
user_budget_percentbelow: userBudgetPercentBelow,
|
||||||
|
user_budget_percentabove: userBudgetPercentAbove,
|
||||||
|
user_less_localavergperm: userLessLocalAveragePerm,
|
||||||
|
user_more_localavergperm: userMoreLocalAveragePerm,
|
||||||
|
population_average: populationAverage,
|
||||||
|
member_average: memberAverage
|
||||||
|
};
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
async enableGPS(member) {
|
||||||
|
const totalTracking = await MembersBankAccount.count({
|
||||||
|
where: {
|
||||||
|
member_id: member.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (totalTracking > 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
async getSlideCard(req) {
|
||||||
const member_id = req.user.id;
|
const member_id = req.user.id;
|
||||||
const card_type = (req.query.card_type) ? req.query.card_type : DEFAULT_CARD_TYPE;
|
const card_type = (req.query.card_type) ? req.query.card_type : memberCardService.DEFAULT_CARD_TYPE;
|
||||||
const card_count = (req.query.card_count) ? req.query.card_count : cardService.DEFAULT_CARD_COUNT;
|
const card_count = (req.query.card_count) ? req.query.card_count : memberCardService.DEFAULT_CARD_COUNT;
|
||||||
//const surveyCards = await cardService.getMemberSurveyCards(member_id);
|
//const surveyCards = await memberCardService.getMemberSurveyCards(member_id);
|
||||||
//console.log(surveyCards);
|
//console.log(surveyCards);
|
||||||
console.log("card_type:", card_type);
|
console.log("card_type:", card_type);
|
||||||
console.log("get cards")
|
console.log("get cards")
|
||||||
|
const member = await this.getProfile(req);
|
||||||
|
const memberCards = await memberCardService(this).getMemberCardsByType(member, parseInt(card_type), card_count);
|
||||||
|
|
||||||
const memberCards = await cardService.getMemberCardsByType(member_id, parseInt(card_type), card_count);
|
//console.log("memberCards", memberCards)
|
||||||
|
|
||||||
console.log("memberCards", memberCards.total)
|
|
||||||
if (surveyCards) {
|
if (surveyCards) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user