UNPKG

@speakr/speakr-module-services

Version:
125 lines (114 loc) 3.86 kB
'use strict'; const db = require('../../db'); const _ = require('underscore'); module.exports = { publicData, sumCampaigns, sumReferrals, forSingleInvoicePublicData, getOnlyLatestLineItemsSingleInvoice, getOnlyLatestLineItemsFromArrayOfInvoices }; function publicData(options) { let json = options.line_items.rows.map(line_item => { return { id_hash: line_item.id_hash, status: line_item.status, amount: `$${parseFloat(line_item.amount).toFixed(2)}`, created_at: line_item.created_at, network: line_item.network } }); options.line_items = json; return Promise.resolve(options); } function sumReferrals(options) { let total = options.line_items.reduce((memo, line_item) => { if (line_item.type == 'referral') { memo += parseFloat(line_item.amount); } return memo; }, 0); return Promise.resolve(total); } function sumCampaigns(options) { let total = options.line_items.reduce((memo, line_item) => { if (line_item.type != 'referral') { memo += parseFloat(line_item.amount); } return memo; }, 0.00); return Promise.resolve(total); } function forSingleInvoicePublicData(options) { const items = options.lineItems.map(li => li.dataValues ? li.dataValues : li) options.lineItems = items.map(l => { return { id_hash: l.id_hash, payable_id: l.payable_id, status: l.status, amount: l.amount, type: l.type, link: l.type === 'creative' ? l.creative.permalink : null, description: l.description ? l.description : null, deleted_at: l.deleted_at ? l.deleted_at : null, note: l.note ? l.note : null, discount: l.discount ? true : false, created_at: l.created_at, campaign: (l.type === 'creative' || l.type === 'campaign cost') ? (l.type === 'creative' ? l.creative.initiative.campaign.title : l.campaign.title) : null, campaign_id: (l.type === 'creative' || l.type === 'campaign cost') ? (l.type === 'creative' ? l.creative.initiative.campaign.id : l.campaign.id) : null, platform: l.type === 'creative' ? l.creative.platform.name : null, brand: l.type === 'campaign cost' ? (l.campaign.brand ? l.campaign.brand.name : null) : null, platform_handle: l.type === 'creative' ? l.creative.account.current_username : null, creative: l.type === 'creative' ? l.creative : null, referred: l.type === 'referral' ? l.referred : null } }); return Promise.resolve(options); } function getOnlyLatestLineItemsSingleInvoice(options) { return new Promise((resolve, reject) => { const items = options.lineItems.map(li => li.dataValues ? li.dataValues : li) .map(item => { item.sortByTime = new Date(item.updated_at).getTime(); return item; }); const groupedItems = _.groupBy(items, (item) => item.id_hash); const keyz = Object.keys(groupedItems); const sortedItems = keyz.map(key => { const arr = _.sortBy(groupedItems[key], (item) => -item.sortByTime); const latest = arr[0]; return latest; }); options.lineItems = sortedItems; return resolve(options); }); } function getOnlyLatestLineItemsFromArrayOfInvoices(options) { return new Promise((resolve, reject) => { options.invoices.rows = options.invoices.rows.map(inv => inv.dataValues ? inv.dataValues : inv) .map(invoice => { const items = invoice.line_items.map(li => li.dataValues ? li.dataValues : li) .map(item => { item.sortByTime = new Date(item.updated_at).getTime(); return item; }); const groupedItems = _.groupBy(items, (item) => item.id_hash); const keyz = Object.keys(groupedItems); const sortedItems = keyz.map(key => { const arr = _.sortBy(groupedItems[key], (item) => -item.sortByTime); const latest = arr[0]; return latest; }); invoice.line_items = sortedItems; return invoice; }) return resolve(options); }); }