Dépôt officiel du code source de l'ERP OpenConcerto
Rev 174 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
*
* The contents of this file are subject to the terms of the GNU General Public License Version 3
* only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
* copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each file.
*/
package org.openconcerto.erp.panel.compta;
import org.openconcerto.erp.generationEcritures.Ecriture;
import org.openconcerto.erp.generationEcritures.Exercice;
import org.openconcerto.erp.generationEcritures.Mouvement;
import org.openconcerto.erp.generationEcritures.Piece;
import org.openconcerto.sql.element.SQLElementDirectory;
import org.openconcerto.sql.model.DBRoot;
import org.openconcerto.sql.users.User;
import org.openconcerto.utils.StringUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ImportFEC {
private String error = null;
private Map<String, Piece> mapPiece = new HashMap<>();
public ImportFEC() {
//
}
public void loadFrom(File file) throws IOException {
this.error = null;
this.mapPiece = new HashMap<>();
try (BufferedReader bReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charset.forName("Cp1252")))) {
String line = bReader.readLine();
final List<String> headers = StringUtils.fastSplit(line, ExportFEC.ZONE_SEPARATOR);
for (int i = 0; i < headers.size(); i++) {
String c1 = headers.get(i);
String c2 = ExportFEC.COLS.get(i);
// Typo chez les stars de Ciel : MontantDevise au lieu de Montantdevise
if (!c1.equalsIgnoreCase(c2)) {
this.error = "L'entête de la colonne " + (i + 1) + " : " + c1 + " n'est pas " + c2;
return;
}
}
line = bReader.readLine();
while (line != null) {
final List<String> parts = fastSplit(line, ExportFEC.ZONE_SEPARATOR);
final String journalCode = parts.get(0).trim();
final String journalLib = parts.get(1).trim();
// final String ecritureNum = parts.get(2).trim();
final Date ecritureDate = parseDate(parts.get(3).trim());
final String compteNum = parts.get(4).trim();
final String compteLib = parts.get(5).trim();
// final String compAuxNum = parts.get(6).trim();
// final String compAuxLib = parts.get(7).trim();
String pieceRef = parts.get(8).trim();
// final String pieceDate = parts.get(9).trim();
final String ecritureLib = parts.get(10).trim();
final BigDecimal debit = new BigDecimal(parts.get(11).replace(',', '.'));
final BigDecimal credit = new BigDecimal(parts.get(12).replace(',', '.'));
final String ecritureLet = parts.get(13).trim();
final Date dateLet = parseDate(parts.get(14).trim());
final Date validDate = parseDate(parts.get(15).trim());
// final String montantdevise = parts.get(16).trim();
// final String idevise = parts.get(17).trim();
if (pieceRef.isEmpty()) {
pieceRef = "Import";
}
Piece p = this.mapPiece.get(pieceRef);
Mouvement mouvement;
if (p == null) {
p = new Piece(pieceRef);
mouvement = new Mouvement();
p.add(mouvement);
this.mapPiece.put(pieceRef, p);
} else {
mouvement = p.getMouvements().get(0);
}
final Ecriture ecriture = new Ecriture(ecritureDate, debit, credit);
ecriture.setNom(ecritureLib);
ecriture.setCompte(compteNum, compteLib);
ecriture.setJournal(journalCode, journalLib);
ecriture.setDateValidation(validDate);
ecriture.setDateLettrage(dateLet);
ecriture.setLettrage(ecritureLet);
if ("AN".equals(journalCode)) {
ecriture.setaNouveau(true);
}
mouvement.add(ecriture);
// Next
line = bReader.readLine();
}
}
}
private Date parseDate(String str) {
if (str.length() != 8) {
return null;
}
final Calendar c = Calendar.getInstance();
final int year = Integer.parseInt(str.substring(0, 4));
final int month = Integer.parseInt(str.substring(4, 6));
final int day = Integer.parseInt(str.substring(6, 8));
c.set(year, month - 1, day, 0, 0, 0);
return c.getTime();
}
// return null is no error
public String getError() {
return this.error;
}
public void importTo(SQLElementDirectory directory, DBRoot rootSociete, User user) throws SQLException {
final Exercice e = new Exercice();
e.insert(directory, rootSociete, user, new ArrayList<Piece>(this.mapPiece.values()));
}
public static void main(String[] args) throws IOException {
final ImportFEC i = new ImportFEC();
i.loadFrom(new File("Y:\\Projets\\OpenConcerto\\ExportCiel\\FEC20171231.txt"));
System.err.println("ImportFEC.main()" + i.getError());
}
public static final List<String> fastSplit(final String string, final char sep) {
final List<String> l = new ArrayList<>();
final int length = string.length();
final char[] cars = string.toCharArray();
int rfirst = 0;
for (int i = 0; i < length; i++) {
if (cars[i] == sep) {
l.add(new String(cars, rfirst, i - rfirst));
rfirst = i + 1;
}
}
if (rfirst <= length) {
// <= au lieu de < pour Ciel....
l.add(new String(cars, rfirst, length - rfirst));
}
return l;
}
}