@speakr/speakr-module-services
Version:
SPEAKR Shared Service Module
120 lines (111 loc) • 4.48 kB
JavaScript
;
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.");
}
});
}