update member cards
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
"username": "savvy",
|
||||
"password": "savvy001!",
|
||||
"database": "savvy",
|
||||
"host": "postgres",
|
||||
"host": "10.10.33.21",
|
||||
"port": 5432,
|
||||
"dialect": "postgres"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const { check, validationResult } = require('express-validator');
|
||||
const memberServices = require("../services").member;
|
||||
const memberServices = require("../services").memberService.member;
|
||||
|
||||
module.exports = {
|
||||
register(req, res) {
|
||||
@@ -123,7 +123,6 @@ module.exports = {
|
||||
},
|
||||
|
||||
getSlideCardData(req, res) {
|
||||
console.log('ss');
|
||||
memberServices.getSlideCard(req)
|
||||
.then(data => res.status(200).send(data))
|
||||
.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 = {
|
||||
member
|
||||
cardService,
|
||||
mailService,
|
||||
memberService
|
||||
};
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const handlebars = require('handlebars');
|
||||
const fs = require('fs');
|
||||
const sgMail = require('@sendgrid/mail')
|
||||
|
||||
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
|
||||
module.exports = {
|
||||
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 crypto = require('crypto');
|
||||
const Member = require("../../models").Members;
|
||||
const MemberOnboardingSurvey = require("../../models").MembersOnboardingSurvey;
|
||||
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 cardService = require("../card/card");
|
||||
const memberCardService = require("../card").memberCard.bind(this);
|
||||
const mailServiceMember = require("../mail").member;
|
||||
const { DEFAULT_CARD_TYPE } = require('../card/card');
|
||||
|
||||
console.log('card in member', memberCardService)
|
||||
module.exports = {
|
||||
RESET_START: 100,
|
||||
RESET_CONFIRM: 200,
|
||||
@@ -80,7 +82,7 @@ module.exports = {
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
message: "Wrong username or password."
|
||||
message: "Wrong email."
|
||||
};
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -143,7 +145,7 @@ module.exports = {
|
||||
|
||||
let expired = date.setDate(date.getDate() + 7);
|
||||
var status = 3;
|
||||
|
||||
|
||||
if (user == null) {
|
||||
console.log('user null')
|
||||
return false;
|
||||
@@ -266,7 +268,7 @@ module.exports = {
|
||||
},
|
||||
|
||||
async getProfile(req) {
|
||||
console.log(req.user)
|
||||
//console.log(req.user)
|
||||
const member_id = req.user.id;
|
||||
var result = {};
|
||||
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;*/
|
||||
},
|
||||
|
||||
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 card_type = (req.query.card_type) ? req.query.card_type : DEFAULT_CARD_TYPE;
|
||||
const card_count = (req.query.card_count) ? req.query.card_count : cardService.DEFAULT_CARD_COUNT;
|
||||
//const surveyCards = await cardService.getMemberSurveyCards(member_id);
|
||||
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 : memberCardService.DEFAULT_CARD_COUNT;
|
||||
//const surveyCards = await memberCardService.getMemberSurveyCards(member_id);
|
||||
//console.log(surveyCards);
|
||||
console.log("card_type:", card_type);
|
||||
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.total)
|
||||
//console.log("memberCards", memberCards)
|
||||
if (surveyCards) {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user