UNPKG

@speakr/speakr-module-services

Version:
120 lines (111 loc) 4.48 kB
"use strict"; const momentTimeZone = require("moment-timezone"); const moment = require("moment"); const db = require("../../db"); const readInvoice = require("./read"); const createInvoice = require("./create"); module.exports = { patchInvoice, updateInvoiceStatus, ifReferrerPayReferrer }; function patchInvoice(invoices, config) { return db.invoices .update(config, { where: { id: { $in: invoices.map(invoice => invoice.id) } } }) .then(invoice => { return db.invoices.findOne({ where: { id: invoice.id }, include: [db.line_items] }); }); } function updateInvoiceStatus(invoice_id_hashes, user_id_hash, status) { return db.invoices .findAll({ where: { id_hash: { $in: invoice_id_hashes } } }) .then(invoices => { let promises = invoices.map(i => { return i.updateAttributes({ status: status, updated_by: user_id_hash }); }); return db.Sequelize.Promise.all(promises); }) .then(() => { return readInvoice.allByIdHash(invoice_id_hashes); }); } function ifReferrerPayReferrer(creative, influencer) { return new Promise((resolve, reject) => { const referrer_id = influencer.referrer ? influencer.referrer : null; const network_id = creative.network_id; let referrer; const influencerCreatedAtPlusOneYear = moment(influencer.created_at) .add(1, "years") .format("YYYY-MM-DD"); const date_now = moment(Date.now()).format("YYYY-MM-DD"); let referrerInvoice; if ( network_id === 1 && referrer_id && moment(date_now).isBefore(influencerCreatedAtPlusOneYear) ) { return db.influencers .findOne({ where: { id: referrer_id } }) .then(ref => { referrer = ref; const { paypal_email } = referrer; return readInvoice .byInfluencerId(referrer_id, 1) .then(referrerInvoiceObj => { if (!referrerInvoiceObj) { return createInvoice .withInfluencerData( referrer_id, paypal_email, 1 ) .then(i => { return (referrerInvoice = i); }); } else { return (referrerInvoice = referrerInvoiceObj); } }) .then(() => { const creativeAmount = parseFloat( creative.offer_price ).toFixed(2); return db.line_items .create({ type: "referral", invoice_id: referrerInvoice.id, payable_id: referrer_id, amount: parseFloat( creativeAmount * 0.1 ).toFixed(2), note: `Referral bonus created on ${momentTimeZone .tz("America/Los_Angeles") .format( "MMMM Do YYYY, h:mm:ss a" )} PST in Submissions App`, created_by: "Speakr app auto publish", network_id: network_id, referral_creative_id: creative.id }) .then(line_item => { return resolve(line_item); }); }); }); } else { return resolve("No referrer to pay."); } }); }