'use strict'; const request = require('request'); const db = require('../app/db') const logger = require('../app/logger'); const CARD_REQUESTED = 1; const CARD_HOLDER_CREATED = 10; const CARD_OWNER_ACTIVE = 30; const CARD_ASSIGNED = 40; //const User = require("../app/model/cardModel.js"); const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY); var cards = { createApplications: async function(req, res, next){ try { logger.info(req.body); var data = { "status": req.body.status, "limit": req.body.limit, }; let Qstring = " SELECT id AS request_id, uid AS request_uid, * FROM members_card_request WHERE status = "+data.status+" LIMIT "+data.limit; logger.info(Qstring); db.query(Qstring, async function (err, result) { if (err) throw err; logger.info(result.rows); let resultItem ={ "result": result.rows, "total_record": result.rows.length } next(null, resultItem); // pass control to the next handler }); } catch (error) { await res.status(500).json({error: `Internal Server error 002 ${error} `}); } }, createCardHolder: async function (req, res, next) { try { logger.info(req.body); var data = { "request_uid": req.body.request_uid, "request_id": req.body.request_id, }; let Qstring = " SELECT r.*,m.firstname,m.lastname,m.email,m.stripe_cardholder_id FROM members_card_request r " + " LEFT JOIN members m ON m.id=r.member_id " + " WHERE r.uid::text = '" + data.request_uid +"'"; logger.info(Qstring); db.query(Qstring, async function (err, result) { try { if (err) throw err; if ( result.rows[0].stripe_cardholder_id !=='') { Qstring = " UPDATE members_card_request " + " SET card_issue_id='"+result.rows[0].stripe_cardholder_id+"' , status = "+CARD_HOLDER_CREATED+", updated = now() " + " WHERE uid::text = '" + data.request_uid +"'"; db.query(Qstring, async function (err, result) { let resultItem = { "result": result.rows[0], "stripe_cardholder_id": result.rows[0].stripe_cardholder_id, "total_record": 0 } next(null, resultItem); // pass control to the next handler }); } const req_data = { "name": result.rows[0].firstname.toString() + ' ' + result.rows[0].firstname.toString(), "firstname": result.rows[0].firstname, "lastname": result.rows[0].lastname, "phone_number": result.rows[0].phone_number, "email": result.rows[0].email, "address": result.rows[0].address, "city": result.rows[0].city, "state": result.rows[0].state, "postal_code": result.rows[0].postal_code, "country": result.rows[0].country, "dob_day": result.rows[0].dob_day, "dob_month": result.rows[0].dob_month, "dob_year": result.rows[0].dob_year, "member_uid" : result.rows[0].member_uid, "member_id" : result.rows[0].member_id, }; logger.info("READY FOR STRIPE CALL ",req_data); logger.info("READY FOR STRIPE CALL ************************************************************************ AFTER "); const ReqParam = { name: req_data.name, email: req_data.email, phone_number: req_data.phone_number, status: 'active', type: 'individual', individual: { first_name: req_data.firstname, last_name: req_data.lastname, dob: { day: req_data.dob_day, month: req_data.dob_month, year: req_data.dob_year }, }, billing: { address: { line1: req_data.address, city: req_data.city, state: req_data.state, postal_code: req_data.postal_code, country: req_data.country, }, }, }; logger.info("REQ=>", ReqParam); stripe.issuing.cardholders.create(ReqParam).then((cardholder) => { console.log(cardholder); Qstring = " UPDATE members_card_request " + " SET card_issue_id='"+cardholder.id+"' , status = 10, updated = now() " + " WHERE uid::text = '" + data.request_uid +"'"; db.query(Qstring, async function (err, result) { console.log(cardholder); Qstring = "UPDATE members SET " + " stripe_cardholder_id = '"+cardholder.id+"' " + " WHERE id ="+data.member_id+" AND stripe_cardholder_id IS NULL AND uid::text = '"+data.member_uid+"'"; db.query(Qstring, async function (err, result) { let resultItem = { "result": cardholder, "stripe_cardholder_id": cardholder.id, "total_record": 0 } next(null, resultItem); // pass control to the next handler }); }); }).catch((error) => { console.error(error); let resultItem = { "result": error, "total_record": 0 } next(null, resultItem); }); } catch (e) { next(e.message, null); // pass control to the next handler } }); } catch (error) { await res.status(500).json({error: `Internal Server error 002 ${error} `}); } }, createCard: async function (req, res, next) { try { logger.info(req.body); var data = { "request_uid": req.body.request_uid, "request_id": req.body.request_id, }; let Qstring = " SELECT r.*,m.firstname,m.lastname,m.email FROM members_card_request r " + " LEFT JOIN members m ON m.id=r.member_id " + " WHERE r.uid::text = '" + data.request_uid +"'"; logger.info(Qstring); db.query(Qstring, async function (err, result) { try { if (err) throw err; // , , const req_data = { "name": result.rows[0].firstname.toString() + ' ' + result.rows[0].firstname.toString(), "firstname": result.rows[0].firstname, "lastname": result.rows[0].lastname, "phone_number": result.rows[0].phone_number, "email": result.rows[0].email, "address": result.rows[0].address, "city": result.rows[0].city, "state": result.rows[0].state, "postal_code": result.rows[0].postal_code, "country": result.rows[0].country, "dob_day": result.rows[0].dob_day, "dob_month": result.rows[0].dob_month, "dob_year": result.rows[0].dob_year, }; const aggrement_ip = '91.121.146.224'; const aggrement_date = Date.now(); logger.info("READY FOR STRIPE CALL ",req_data); logger.info("READY FOR STRIPE CALL ************************************************************************ AFTER "); const ReqParam = { name: req_data.name, email: req_data.email, phone_number: req_data.phone_number, status: 'active', type: 'individual', individual: { first_name: req_data.firstname, last_name: req_data.lastname, dob: { day: req_data.dob_day, month: req_data.dob_month, year: req_data.dob_year }, }, billing: { address: { line1: req_data.address, city: req_data.city, state: req_data.state, postal_code: req_data.postal_code, country: req_data.country, }, }, }; logger.info("REQ=>", ReqParam); stripe.issuing.cardholders.create(ReqParam).then((cardholder) => { console.log(cardholder); Qstring = " UPDATE members_card_request SET card_issue_id='"+cardholder.id+"' , status = 10, updated = now() " + " WHERE uid::text = '" + data.request_uid +"'"; db.query(Qstring, async function (err, result) { console.log(cardholder); //const cardholder = await stripe.issuing.cardholders.update( cardholder.id, { individual: { card_issuing: { user_terms_acceptance: { date: aggrement_date, ip: aggrement_ip, }, }, }, } ).then((cardConfirm)=>{ const card = stripe.issuing.cards.create({ cardholder: cardholder.id, currency: 'usd', type: 'virtual', }); let resultItem = { "result": cardholder, "result_confirm": cardConfirm, "card": card, "total_record": 0 } next(null, resultItem); // pass control to the next handler console.log(cardConfirm); }); }); }).catch((error) => { console.error(error); let resultItem = { "result": error, "total_record": 0 } next(null, resultItem); }); } catch (e) { next(e.message, null); // pass control to the next handler } }); } catch (error) { await res.status(500).json({error: `Internal Server error 002 ${error} `}); } }, acceptCardTerms: function (req, res, next) { const aggrement_ip = '91.121.146.224'; const aggrement_date = Date.now(); //const cardholder = await stripe.issuing.cardholders.update( cardholder.id, { individual: { card_issuing: { user_terms_acceptance: { date: aggrement_date, ip: aggrement_ip, }, }, }, } ).then((cardConfirm)=>{ const card = stripe.issuing.cards.create({ cardholder: cardholder.id, currency: 'usd', type: 'virtual', }); let resultItem = { "result_confirm": cardConfirm, "total_record": 0 } next(null, resultItem); // pass control to the next handler console.log(cardConfirm); }); let resultItem ={ "result": [], "total_record": 0 } next(null, resultItem ); // pass control to the next handler }, activateCard: function (req, res, next) { const card = stripe.issuing.cards.create({ cardholder: cardholder.id, currency: 'usd', type: 'virtual', status: 'active', }); let resultItem ={ "result": [], "total_record": 5 } next(null, resultItem ); // pass control to the next handler }, }; module.exports = cards;