Export writes: Generate a write file via Script

Principle

The purpose of this script is to generate an accounting entry file when exporting a batch. It contains several functions that can be easily reused.

Example of file contents after script interpretation

SOCIETE;CODE;ID;NUMERO_LIGNE;SENS;CODE_FACTURE;LIBELLE_ECRITURE;DATE_COMPTABLE;DATE_PIECE;DATE_ECHEANCE;TYPE_TIERS;COMPTE;CENTRALISATEUR;DEBIT;CREDIT;DEVISE;AXE0;TAUX_TVA;BASE_TVA;URL;ID_CAPTURE
341;ACH;507;2;Facture;1409322;Fact_19122019_867;30/09/2014;30/09/2014;31/10/2014;F;FTIERS10;401000;;55.2;EUR;;;TTC;http://localhost:8000/browse/previewDocument/idDocument/507;867;
341;ACH;507;3;Facture;1409322;Fact_19122019_867;30/09/2014;30/09/2014;31/10/2014;;445616;445616;9.2;;EUR;;20.00;TVA;http://localhost:8000/browse/previewDocument/idDocument/507;867;
341;ACH;507;4;Facture;1409322;Fact_19122019_867;30/09/2014;30/09/2014;31/10/2014;;601100;601100;46;;EUR;;20.00;HT;http://localhost:8000/browse/previewDocument/idDocument/507;867;
341;ACH;512;5;Facture;1410243;Fact_20122019_876;28/10/2014;28/10/2014;30/11/2014;F;FANNECY;40120000;;190.8;EUR;;;TTC;http://localhost:8000/browse/previewDocument/idDocument/512;876;
341;ACH;512;6;Facture;1410243;Fact_20122019_876;28/10/2014;28/10/2014;30/11/2014;;445600;445600;31.8;;EUR;;20.00;TVA;http://localhost:8000/browse/previewDocument/idDocument/512;876;
341;ACH;512;7;Facture;1410243;Fact_20122019_876;28/10/2014;28/10/2014;30/11/2014;;601100;601100;159;;EUR;;20.00;HT;http://localhost:8000/browse/previewDocument/idDocument/512;876;

Script

var save_Analytic = null;
//Allow to get index value on [pParameters] list from [idIndex] and [idUnit](number which identify an occurence of index if it has multiple values)
var getIndexFromIDAndIDUnit = function(pParameters, idIndex, idUnit){
	var listIndex = getIndexesFromID(pParameters, idIndex);
	if(listIndex != null){
		for(var i=0;i<listIndex.length;i++){
			if(listIndex[i].idUnit == idUnit)
				return getTextFromIndexInfo(listIndex[i]);
		}
	}
	return "";
};
var getAccountType = function(line){
	if(line.accountNumber != null && line.accountNumber != "" && line.genericAccountNumber != null && line.genericAccountNumber != "")
		return "PersonalLine";
	if(line.accountNumber != null && line.accountNumber != ""){
		if(line.accountNumber.lastIndexOf("445", 0) === 0)
			return "VATLine";
		return "ChargeLine";
	}
	return "";
};
var buildSaveAnalytic = function(lines){
	save_Analytic = [];
	
	for(var i=0;i<lines.length;i++){	
		
		var line = lines[i];
		if(save_Analytic.length == 0 && getAccountType(line) == "ChargeLine" && line.analyticalBreakdown != null && line.analyticalBreakdown.ventilatedPlanList != null){
			for(var p=0;p < line.analyticalBreakdown.ventilatedPlanList.length;p++){
				if(line.analyticalBreakdown.ventilatedPlanList[p].lines != null && line.analyticalBreakdown.ventilatedPlanList[p].lines.length > 0){
					for(var l=0;l < line.analyticalBreakdown.ventilatedPlanList[p].lines.length;l++){
						
						var abLine = line.analyticalBreakdown.ventilatedPlanList[p].lines[l];
						save_Analytic.push({code : abLine.section.code, percent: (abLine.allocatedAmount * 100 / line.amount)});
					}
					break; 
				}
			}
		}
	}
};
var manageABD = function(line, pParameters, countResult){
	var resultAB = "";
	if(line.analyticalBreakdown != null && line.analyticalBreakdown.ventilatedPlanList != null){
		for(var p=0;p < line.analyticalBreakdown.ventilatedPlanList.length;p++){
			if(line.analyticalBreakdown.ventilatedPlanList[p].lines != null && line.analyticalBreakdown.ventilatedPlanList[p].lines.length > 0){
				for(var l=0;l < line.analyticalBreakdown.ventilatedPlanList[p].lines.length;l++){
					
					var abLine = line.analyticalBreakdown.ventilatedPlanList[p].lines[l];
					if(abLine.section != null)
						resultAB += buildLine(line, pParameters, abLine.allocatedAmount, abLine.section.code, countResult);
				}
			}
		}
	}else if(save_Analytic != null){
		var totalLineHandled = 0.0;
		
		for(var l=0;l < save_Analytic.length;l++){
			var abLine = save_Analytic[l];
			
			if(abLine.code != null && abLine.percent != null){
				var calculAmount = 0.0;
				if(l < save_Analytic.length -1){
					calculAmount = line.amount * (abLine.percent / 100);
					totalLineHandled += calculAmount;
				}
				else
					calculAmount = line.amount - totalLineHandled;
				resultAB += buildLine(line, pParameters, calculAmount, abLine.code, countResult);
			}
		}
	}
	return resultAB;
}
var buildLineWrapper = function(line, pParameters, countResult){
	if(line.amount != null)
		line.amount = parseFloat(line.amount.replace(',', '.'));
	else
		line.amount = 0.0;
	if((line.analyticalBreakdown != null && line.analyticalBreakdown.ventilatedPlanList != null && line.analyticalBreakdown.ventilatedPlanList.length > 0) 
		|| (getAccountType(line) == "ChargeLine" && save_Analytic != null && save_Analytic.length > 0))
		return manageABD(line, pParameters, countResult);
	else
		return buildLine(line, pParameters, line.amount, "", countResult);
};
var getVATFromIndex = function(line, pParameters, pIndexID){
	var listIndex = getIndexesFromID(pParameters, pIndexID);
	if(listIndex != null){
		for(var i=0;i<listIndex.length;i++){
			var amount = parseFloat(getTextFromIndexInfo(listIndex[i]).replace(',', '.'));
			if(amount == line.amount){
				var vatRateStr = getIndexFromIDAndIDUnit(pParameters, "VAT_RATE_INDEX", listIndex[i].idUnit);
				if(vatRateStr != null)
					return vatRateStr.replace('.', ',');
			}
		}
	}
	return "";
};
var buildLine = function(line, pParameters, amount, codeAB, countResult){
	
	var result = "341";
	result += ";";
	
	if(ACCOUNT_ENTRY.ledger != null)
		result += ACCOUNT_ENTRY.ledger.code;
	else
		result += "";
	result += ";";
	result+= ID_DMS;
	result += ";";
	result += countResult;
	result += ";";
	result += getTextFromIndexInfo(getFirstIndexFromID(pParameters, "TYPEDOC_INDEX"));
	result += ";";
	result += getTextFromIndexInfo(getFirstIndexFromID(pParameters, "INVOICE_NUMBER_INDEX"));
	result += ";";
	result += line.labelLine;
	result += ";";
	result += ACCOUNT_ENTRY.date;
	result += ";";
	result += getTextFromIndexInfo(getFirstIndexFromID(pParameters, "DATE_INDEX"));		
	result += ";";
	result += getTextFromIndexInfo(getFirstIndexFromID(pParameters, "DUE_DATE_INDEX"));
	result += ";";
	if(getAccountType(line) == "PersonalLine")
		result += "F";
	result += ";";
	result += line.accountNumber;
	result += ";";
	if(line.genericAccountNumber != null && line.genericAccountNumber != "")
		result += line.genericAccountNumber;
	else
		result += line.accountNumber;
	result += ";";
	if(line.meaning == "DEBIT")
		result += amount.toFixed(2).replace('.', ',');
	else
		result += "";
	result += ";";
	if(line.meaning == "CREDIT")
		result += amount.toFixed(2).replace('.', ',');
	else
		result += "";
	result += ";";
	result += getTextFromIndexInfo(getFirstIndexFromID(pParameters, "DEVISE_INDEX"));
	result += ";";
	result += codeAB;
	result += ";";
	if(getAccountType(line) == "PersonalLine")
		result += "";
	else if(getAccountType(line) == "VATLine")
		result += getVATFromIndex(line, pParameters, "VAT_AMOUNT_INDEX");
	else if(getAccountType(line) == "ChargeLine")
		result += getVATFromIndex(line, pParameters, "AMOUNT_EX_VAT_INDEX");
	result += ";";
	if(getAccountType(line) == "PersonalLine")
		result += "TTC";
	else if(getAccountType(line) == "VATLine")
		result += "TVA";
	else if(getAccountType(line) == "ChargeLine")
		result += "HT";
	result += ";";
	result += "http://localhost:8000/browse/previewDocument/idDocument/"+ ID_DMS;
	result += ";";
	result += ID_INVOICE;
	result += ";";
	
	result +="n";
	return result;
};
if(ACCOUNT_ENTRY != null && ACCOUNT_ENTRY.lines != null){
	buildSaveAnalytic(ACCOUNT_ENTRY.lines);
	var finalPathFile = 'C:DocumentsCapture'+ACCOUNT_ENTRY.bundleId+'.csv';
	if(ACCOUNT_ENTRY_NUMBER == 1)
		JSE_File.writeFile(finalPathFile, "SOCIETE;CODE;ID;NUMERO_LIGNE;SENS;CODE_FACTURE;LIBELLE_ECRITURE;DATE_COMPTABLE;DATE_PIECE;DATE_ECHEANCE;TYPE_TIERS;COMPTE;CENTRALISATEUR;DEBIT;CREDIT;DEVISE;AXE0;TAUX_TVA;BASE_TVA;URL;ID_CAPTUREn");
	var result = JSE_File.readFile(finalPathFile);
	var countResult = result.split('n').length - 1;
	for(var i=0;i<ACCOUNT_ENTRY.lines.length;i++){
		var line = ACCOUNT_ENTRY.lines[i];
		result += buildLineWrapper(line, pParameters, countResult);
		countResult++;
	}
	JSE_File.writeFile(finalPathFile, result);
	return true;
}
return false;