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;