UNPKG

veezard

Version:

TECHB fork from veeva. Veeva CLM Generator & Workflow for building iRep Presentations.

330 lines (250 loc) 10.2 kB
'use strict'; var ___ = require('lodash'), fs = require('fs'), ftp = require('vinyl-ftp'), json2csv = require('json2csv'), path = require('path'), plumber = require('gulp-plumber'), Q = require('q'), size = require('gulp-size'), util = require('gulp-util'), utils = require('../lib/utils'), zip = require('gulp-zip'); module.exports = function(gulp, options) { function handleVaultCSV(keyMessages) { var deferred = Q.defer(), vaultFields = require('./helpers/vault_fields').vaultFields, buildArray = []; buildArray.push({ 'document_id__v': '', 'external_id__v': '', 'name__v': options.clm.primary.name, 'Type': 'Presentation', 'lifecycle__v': 'Binder Lifecycle', 'Presentation Link': '',//options.clm.primary.name, 'Fields Only': false, 'pres.country__v.name__v':'United Kingdom', 'pres.crm_end_date__v': '', 'pres.crm_start_date__v': '', 'pres.crm_training__v': true, 'pres.product__v.name__v': options.clm.product.name, 'slide.clm_content__v': true, 'slide.country__v.name__v': '', 'slide.crm_disable_actions__v': '', 'slide.crm_media_type__v': '', 'slide.filename': '', 'slide.product__v.name__v': '', 'slide.related_shared_resource__v': '', 'slide.related_sub_pres__v': '', 'slide.title__v': '', 'slide.engage_content__v': false }); // build up arrays with information based on Key Messages ___(keyMessages).forEach(function(item) { buildArray.push({ 'document_id__v': '', 'external_id__v': item.key_message, 'name__v': item.key_message, 'Type': 'Slide', 'lifecycle__v': 'CRM Content Lifecycle', 'Presentation Link': '',//options.clm.primary.name, 'Fields Only': false, 'pres.crm_end_date__v': '', 'pres.crm_start_date__v': '', 'pres.crm_training__v': true, 'pres.product__v.name__v': options.clm.product.name, 'slide.clm_content__v': true, 'slide.country__v.name__v': 'United Kingdom', 'slide.crm_disable_actions__v': '', 'slide.crm_media_type__v': 'HTML', 'slide.filename': item.key_message + '.zip', 'slide.product__v.name__v': options.clm.product.name, 'slide.related_shared_resource__v': '', 'slide.related_sub_pres__v': '', 'slide.title__v': item.description, 'slide.engage_content__v': false }); }); json2csv({ data: buildArray, fields: vaultFields }, function(err, csv) { // create directory if it doesn't exist if (!fs.existsSync(options.paths.deploy)) { fs.mkdirSync(options.paths.deploy); } fs.writeFile(options.paths.deploy + '/VAULT_CSV.csv', csv, function(err) { if (err) { deferred.reject(err); } else { deferred.resolve(); } }); }); return deferred.promise; } function handleFTPZips() { var deferred = Q.defer(); var conn = ftp.create({ host: options.clm.ftp.host, user: options.clm.ftp.user, password: options.clm.ftp.pass, parallel: 10, log: utils.log.verbose, debug: utils.log.debug }); gulp.src(path.join(options.paths.deploy, '**', '*.zip'), { buffer: false }) .pipe(plumber()) .pipe(conn.dest('/')) .on('error', function(err) { deferred.reject(err); }) .on('end', function() { deferred.resolve(); }); return deferred.promise; } function handleFTPCtls() { var deferred = Q.defer(); var conn = ftp.create({ host: options.clm.ftp.host, user: options.clm.ftp.user, password: options.clm.ftp.pass, parallel: 10, log: utils.log.verbose, debug: utils.log.debug }); gulp.src(path.join(options.paths.deploy, '**', '*.ctl'), { buffer: false }) .pipe(plumber()) .pipe(conn.dest(options.clm.ftp.remotePath)) .on('error', function(err) { deferred.reject(err); }) .on('end', function() { deferred.resolve(); }); return deferred.promise; } function handleStaging(keyMessages) { var deferred = Q.defer(), controlFile, numKeyMessage = keyMessages.length - 1, iZipped = 0; function stageKeyMessage(keyMessage) { var deferred = Q.defer(); gulp.src('**/*', { cwd: path.join(process.cwd(), options.paths.dist, keyMessage['key_message']), base: options.paths.dist }) .pipe(plumber()) .pipe(zip(keyMessage['key_message'] + '.zip')) .pipe(size({ title: util.colors.green.bold('⤷ Zipping Key Message: ') + util.colors.yellow.bold(keyMessage['key_message']), showFiles: options.verbose })) .pipe(gulp.dest(options.paths.deploy)) .on('error', function(err) { deferred.reject(err); }) .on('end', function() { // create Veeva required control file controlFile = 'USER=' + options.clm.ftp.user + '\n' + 'PASSWORD=' + options.clm.ftp.pass + '\n' + 'EMAIL=' + options.clm.ftp.email + '\n' + 'NAME=' + keyMessage['key_message'] + '\n' + 'Description_vod__c=' + keyMessage['description'] + '\n' + 'FILENAME=' + keyMessage['key_message'] + '.zip'; fs.writeFile(options.paths.deploy + '/' + keyMessage['key_message'] + '.ctl', controlFile); deferred.resolve(); }); return deferred.promise; } keyMessages.map(function(keyMessage) { stageKeyMessage(keyMessage).done(function() { if (numKeyMessage === iZipped) { deferred.resolve(); } iZipped++; }); }); return deferred.promise; } gulp.task('stage', ['clean:deploy', 'build'], function() { var deferred = Q.defer(), mergeKeyMessages = options.keyMessages, autoDeploy = false; // Remove the 'global' key Message from array mergeKeyMessages = mergeKeyMessages.filter(function(item) { return (item.key_message !== 'global'); }); // Single Key Message Mode? if (options.deploy.keyMessage) { mergeKeyMessages.splice(0, mergeKeyMessages.length); mergeKeyMessages.push(options.deploy.keyMessage); // turn on auto-deploy autoDeploy = true; } utils.executeWhen(true, function() { utils.log.note('⤷ Staging Key Messages.'); return handleStaging(mergeKeyMessages); }) .then(function() { return utils.executeWhen(autoDeploy, handleFTPZips, '⤷ Auto deploying zipped files'); }) .then(function() { return utils.executeWhen(autoDeploy, handleFTPCtls, '⤷ Auto deploying control files'); }) .done(function() { utils.log.success('Done Staging Key Messages'); deferred.resolve(); }, function(err) { utils.log.error(err); deferred.reject(err); }); return deferred.promise; }); gulp.task('veeva-deploy', function() { var deferred = Q.defer(); utils.executeWhen(true, handleFTPZips, '⤷ Deploying zipped files') .then(function() { return utils.executeWhen(true, handleFTPCtls, '⤷ Deploying control files'); }) .done(function() { utils.log.success('Done Deploying Key Messages'); deferred.resolve(); }, function(err) { utils.log.error(err); deferred.reject(err); }); return deferred.promise; }); gulp.task('veeva-vault-stage', function() { var deferred = Q.defer(), mergeKeyMessages = options.keyMessages; // Remove the 'global' key Message from array mergeKeyMessages = mergeKeyMessages.filter(function(item) { return (item.key_message !== 'global'); }); // Single Key Message Mode? if (options.deploy.keyMessage) { mergeKeyMessages.splice(0, mergeKeyMessages.length); mergeKeyMessages.push(options.deploy.keyMessage); } utils.executeWhen(true, function() { utils.log.note('⤷ Generating Veeva Vault CSV file'); return handleVaultCSV(mergeKeyMessages); }) .done(function() { utils.log.success('Veeva Vault CSV file has been successfully generated'); deferred.resolve(); }, function(err) { utils.log.error(err); deferred.reject(err); }); return deferred.promise; }); };