CSV file after a workflow is completed

Script

// ----------------------------------------------------------------------------------------------------------------------------------
// Script goal :
// Check if all workflow task has been validated
// if yes Write a CSV File with document information
// /! Prerequisites : Last task validation have to be done from Capture
// ----------------------------------------------------------------------------------------------------------------------------------
// Variables to check :
// + Todo check CSV format and values in functions : getCSVHeader() and buildArticleLine();
// + Todo check writeFile() method to change output path and name
var CSVSeparator = ";";
var ArticleLinesIndexID = "ARTICLES_INDEX";
var PORTAL_API_KEY = "a16cb2ff81b5a31c2a05f7b904dcdd59da227dc5fbe152c115592bd65a58c519f750d213a3e6a9b770eb2dff65239460f2fa02a5afe44f94c40678fdebb4fe46";
var PORTAL_IP = "127.0.0.1";

// /! Some information are get from Buyer and thirdPart. Check getAdditionalInformationFromBuyer() and getInformationFromThirdPart() to check usage

// ----------------------------------------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------------------
//Check if workflow is finished positively
var checkIfWorflowDone = function(idDMS){
	JSE_File.addLogMessage("SCRIPT " + INTERNAL_DOCUMENT_ID + " Check DMS id :" + idDMS);
	
	var pHeader = {"Authorization" : "Key "+PORTAL_API_KEY};
	var ws = new JSE_WebService(PORTAL_IP, "http", 8000);
	var res = ws.send("/ws/v2/document/"+idDMS, "GET", pHeader, 60000);
	var resJson = JSON.parse(res.StringResponse);
	
	JSE_File.addLogMessage("SCRIPT " + INTERNAL_DOCUMENT_ID + " Check DMS id : " + idDMS + " Portal response : " + res.StringResponse);
	// WF status can indicate if a workflow is over 
	//0: document is not part of a Workflow
	//1: document awaiting validation in the Workflow
	//2: document rejected in a Workflow
	//3: document accepted in a workflow
	
	return resJson != null && resJson.document != null && resJson.document.wfStatus == 3;
};
var getCSVHeader = function(){
	return "Company ID"
	+ CSVSeparator + "Type"
	+ CSVSeparator + "Vendor"
	+ CSVSeparator + "Vendor Name"
	+ CSVSeparator + "Doc Type"
	+ CSVSeparator + "Doc Number"
	+ CSVSeparator + "Doc Date"
	+ CSVSeparator + "Due Date"
	+ CSVSeparator + "Posting Date"
	+ CSVSeparator + "PO Number #1"
	+ CSVSeparator + "PO Number #2"
	+ CSVSeparator + "PO %"
	+ CSVSeparator + "DO Number"
	+ CSVSeparator + "Exchange Rate"
	+ CSVSeparator + "Header Description"
	+ CSVSeparator + "Doc Amount Excl Tax"
	+ CSVSeparator + "GST Rate"
	+ CSVSeparator + "Doc Amount Tax"
	+ CSVSeparator + "Doc Total Incl Tax"
	+ CSVSeparator + "Scenario (**  for PO only)"
	+ CSVSeparator + "Line Description"
	+ CSVSeparator + "Tax Class"
	+ CSVSeparator + "Line Amount Excl Tax"
	+ CSVSeparator + "Line Tax Amount";
};
var getAdditionalInformationFromBuyer = function(additionalInformationID){
	
	if(FOLDER == null || FOLDER.additionalInformations == null)
		return "";
		
	for(var i=0;i< FOLDER.additionalInformations.length; i++){
		if(FOLDER.additionalInformations[i].id == additionalInformationID)
			return FOLDER.additionalInformations[i].value;
	}
	
	return "";
};
var getInformationFromThirdPart = function(informationID){
	
	if(THIRDPART == null || THIRDPART.values == null)
		return "";
		
	for(var i=0;i< THIRDPART.values.length; i++){
		if(THIRDPART.values[i].id == informationID)
			return THIRDPART.values[i].value;
	}
	
	return "";
};
var getSumOfGroupIndex = function(pParameters, indexID){
	
	var result = 0;
	
	var listIndex = getIndexesFromID(pParameters, indexID);
	
	if(listIndex != null){
		for(var i=0;i<listIndex.length;i++){
			result += parseFloat(getTextFromIndexInfo(listIndex[i]).replace(',', '.'));
		}
	}
	return result;
};
var buildArticleLine = function(pParameters, articleLine){
	return getAdditionalInformationFromBuyer("COMPANY_ID") //"Company ID"
	+ CSVSeparator + "PO/AP"//"Type"
	+ CSVSeparator + getInformationFromThirdPart("VENDOR_ID")//"Vendor"
	+ CSVSeparator + THIRDPART.name//"Vendor Name"
	+ CSVSeparator + "Invoice"//"Doc Type"
	+ CSVSeparator + getTextFromIndexInfo(getFirstIndexFromID(pParameters, "INVOICE_NUMBER_INDEX"))//"Doc Number"
	+ CSVSeparator + getTextFromIndexInfo(getFirstIndexFromID(pParameters, "DATE_INDEX"))//"Doc Date"
	+ CSVSeparator + getTextFromIndexInfo(getFirstIndexFromID(pParameters, "DUE_DATE_INDEX"))//"Due Date"
	+ CSVSeparator + getTextFromIndexInfo(getFirstIndexFromID(pParameters, "DATE_INDEX"))//"Posting Date"
	+ CSVSeparator + ""//"PO Number #1"
	+ CSVSeparator + ""//"PO Number #2"
	+ CSVSeparator + ""//"PO %"
	+ CSVSeparator + ""//"DO Number"
	+ CSVSeparator + "1.00000"//"Exchange Rate"
	+ CSVSeparator + getTextFromIndexInfo(getFirstIndexFromID(pParameters, "HEADER_DESCRIPTION_INDEX"))//"Header Description"
	+ CSVSeparator + getSumOfGroupIndex(pParameters, "AMOUNT_EX_VAT_INDEX")//"Doc Amount Excl Tax"
	+ CSVSeparator + getSumOfGroupIndex(pParameters, "VAT_RATE_INDEX")//"GST Rate"
	+ CSVSeparator + getSumOfGroupIndex(pParameters, "VAT_AMOUNT_INDEX")//"Doc Amount Tax"
	+ CSVSeparator + getTextFromIndexInfo(getFirstIndexFromID(pParameters, "AMOUNT_INCLUDING_VAT_INDEX"))//"Doc Total Incl Tax"
	+ CSVSeparator + ""//"Scenario (**  for PO only)"
	+ CSVSeparator + getTextFromIndexInfo(getIndexFromArticleLine(articleLine, "DESCRIPTION_ARTICLES_INDEX"))//"Line Description"
	+ CSVSeparator + getTextFromIndexInfo(getIndexFromArticleLine(articleLine, "TAX_CLASS_ARTICLES_INDEX"))//"Tax Class"
	+ CSVSeparator + getTextFromIndexInfo(getIndexFromArticleLine(articleLine, "MONTANT_ARTICLES_INDEX"))//"Line Amount Excl Tax"
	+ CSVSeparator + getTextFromIndexInfo(getIndexFromArticleLine(articleLine, "TAX_ARTICLES_INDEX"))//"Line Tax Amount";
};
var buildFileContent = function(pParameters){
	JSE_File.addLogMessage("SCRIPT " + INTERNAL_DOCUMENT_ID + " Start content file generation");
	
	var result = getCSVHeader() + "n";
	
	
	JSE_File.addLogMessage("SCRIPT " + INTERNAL_DOCUMENT_ID + " Header generated, start article lines");
	
	var articles = getArticleLines(pParameters, ArticleLinesIndexID);
	
	if(articles == null)
		return result;
	
	for(var i=0;i< articles.length; i++){
		result += buildArticleLine(pParameters, articles[i]) + "n";
	}
	
	JSE_File.addLogMessage("SCRIPT " + INTERNAL_DOCUMENT_ID + " File content generated");
	
	return result;
};

var writeFile = function(pParameters, content){
	
	var codeSct = getAdditionalInformationFromBuyer("CODE_SOCIETE")
	var date = new Date();
	
	var dateMonth = date.getMonth() < 10 ? "0" + date.getMonth() : date.getMonth();
	var dateDay = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
	var dateHour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
	var dateMinute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
	var dateSecond = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
	
	var finalPathFile = 'C:'+codeSct+'-' + date.getFullYear() + dateMonth + dateDay + dateHour + dateMinute + dateSecond + '.csv';
	
	JSE_File.addLogMessage("SCRIPT " + INTERNAL_DOCUMENT_ID + " File name generated => " + finalPathFile);
	
	JSE_File.writeFile(finalPathFile, content);
	
	JSE_File.addLogMessage("SCRIPT " + INTERNAL_DOCUMENT_ID + " Output done ");
};
// ----------------------------------------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------------------
JSE_File.addLogMessage("SCRIPT " + INTERNAL_DOCUMENT_ID + " Start Script");
if(ID_DMS == null || ID_DMS == ""){
	JSE_File.addLogMessage("SCRIPT " + INTERNAL_DOCUMENT_ID + " IDDMS empty => no output");
	return true;
}
if(!checkIfWorflowDone(ID_DMS)){
	
	JSE_File.addLogMessage("SCRIPT " + INTERNAL_DOCUMENT_ID + " Check DMS id :" + ID_DMS + " worflow not validated => no output");
	return true;
}
writeFile(pParameters, buildFileContent(pParameters));
return true;