const fs = require( 'fs-extra' ); const jsonfile = require( 'jsonfile' ); const glob = require( 'glob' ); const path = require( 'path' ); const moment = require( 'moment' ); const axios = require( 'axios' ); const scrapeit = require( 'scrape-it' ); const cheerio = require( 'cheerio' ); const Mustache = require( 'mustache' ); const qrcode = require( 'qrcode' ); // Check if package is installed or not to pickup the right config file const config = require( '../tribes/townconf.js' ); /* Model that will process actions plan for each client like sending email campain, or anything that are plan in /tribes/tribeid/actions/todo */ const Cards = {}; //require('../../models/Cards'); const Contracts = {}; /* Send if envoicampain a liste of email in param.msg.destperso with param.headers if not envoicampain, it just return a test about what to send @param = {headers, msg:{destperso}} */ Contracts.sendcampain = async ( param, envoicampain ) => { if( envoicampain ) { // Carefull w the action post outputs/msg just wait the feedback of the 1st message const retcampain = await axios.post( 'https://mail.maildigit.fr/outputs/msg', param.msg, { headers: param.headers } ); if( retcampain.status !== 200 ) { console.log( "err", retcampain.payload.moreinfo ); fs.appendFileSync( `${config.tribes}/log_erreurglobal.txt`, moment( new Date() ) .format( 'YYYYMMDD HH:mm:ss' ) + ' - IMPOSSIBLE TO SEND CAMPAIN TODO for :' + param.tribeid + ' -- ' + retcampain.payload.moreinfo + '\n', 'utf-8' ); }; return retcampain; } else { // permet de tester ce qu'il y a à envoyer let premieremail = ""; for( let i = 0; i < param.msg.destperso.length; i++ ) { premieremail += param.msg.destperso[ 0 ].email + ","; } return { status: 201, payload: { info: [ 'simplecomptage' ], model: 'Contracts', moreinfo: "#email: " + param.msg.destperso.length + " - 5 1st emails: " + premieremail } }; } } Contracts.initActiontodo = async ( envoie ) => { const datedeb = moment( new Date() ) .format( 'YYYYMMDD HH:mm:ss' ); let todo, actiondone; let log = { nbaction: 0, nbactionexec: 0, nbactionerr: 0, actionlist: "" }; const listclient = jsonfile.readFileSync( `${config.tribes}/tribeids.json` ); for( let clid in listclient ) { console.log( listclient[ clid ] ); let listaction = glob.sync( `${config.tribes}/${listclient[clid]}/actions/todo/*.json` ); for( let action in listaction ) { console.log( listaction[ action ] ) log.nbaction++; todo = jsonfile.readFileSync( listaction[ action ] ); let passdate = true; // currentdate doit etre après la startDate si existe et avant valideuntilDate si existe // console.log('test now est avant date start ', moment() < moment(todo.startDate, 'YYYYMMDD HH:mm:ss').toDate()); if( todo.startDate && ( moment() < moment( todo.startDate, 'YYYYMMDD HH:mm:ss' ) .toDate() ) ) { passdate = false; }; // currentdate ne doit pas depasser la date de validité de la tache // console.log('test now est après la date de validite ', moment() > moment(todo.validuntilDate, 'YYYYMMDD HH:mm:ss').toDate()); if( todo.valideuntilDate && ( moment() > moment( todo.validuntilDate, 'YYYYMMDD HH:mm:ss' ) .toDate() ) ) { passdate = false; }; // currentdate if( passdate && todo.action && todo.error == "" ) { log.nbactionexec++; const actiondone = await Contracts[ todo.action ]( todo, envoie ); todo.datesRun.push( moment( new Date() ) .format( 'YYYYMMDD HH:mm:ss' ) ); //console.log("actiondone", actio jsonfile.writeFileSyncndone); log.actionlist += "STATUS:" + actiondone.status + " -- " + listaction[ action ] + "\n"; if( actiondone.status == 200 ) { todo.error = ""; } else { log.nbactionerr++; todo.error += "status : " + actiondone.status + ' ' + actiondone.payload.moreinfo; }; if( parseInt( todo.maxnumberoftime ) && todo.maxnumberoftime != "999" && ( todo.datesRun.length >= parseInt( todo.maxnumberoftime ) ) ) { //archive en done this triggeraction jsonfile.writeFileSync( listaction[ action ].replace( '/todo/', '/done/' ), todo, { spaces: 2 } ); fs.unlinkSync( listaction[ action ] ); } else { jsonfile.writeFileSync( listaction[ action ], todo, { spaces: 2 } ); } } else { log.actionlist += "STATUS : not executed " + listaction[ action ] + "\n"; }; }; }; const trace = "###################### LOGS ####################\nSTART:" + datedeb + " END:" + moment( new Date() ) .format( 'YYYYMMDD HH:mm:ss' ) + "\n nombre d'actions analysées : " + log.nbaction + " dont executées : " + log.nbactionexec + " dont en erreur: " + log.nbactionerr + "\n" + log.actionlist; fs.appendFileSync( `${config.tribes}/log.txt`, trace, 'utf-8' ); return "done"; } module.exports = Contracts;