import Datum und name Debitor
This commit is contained in:
parent
1d447da7e6
commit
c4f0e9c5d6
2 changed files with 67 additions and 6 deletions
|
|
@ -4,7 +4,10 @@ import java.io.BufferedReader;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
@ -15,12 +18,16 @@ import org.imixs.workflow.FileData;
|
||||||
import org.imixs.workflow.ItemCollection;
|
import org.imixs.workflow.ItemCollection;
|
||||||
import org.imixs.workflow.SignalAdapter;
|
import org.imixs.workflow.SignalAdapter;
|
||||||
import org.imixs.workflow.datev.imports.DatevImportAdapter;
|
import org.imixs.workflow.datev.imports.DatevImportAdapter;
|
||||||
|
import org.imixs.workflow.engine.DocumentService;
|
||||||
import org.imixs.workflow.engine.WorkflowService;
|
import org.imixs.workflow.engine.WorkflowService;
|
||||||
import org.imixs.workflow.exceptions.AccessDeniedException;
|
import org.imixs.workflow.exceptions.AccessDeniedException;
|
||||||
import org.imixs.workflow.exceptions.AdapterException;
|
import org.imixs.workflow.exceptions.AdapterException;
|
||||||
import org.imixs.workflow.exceptions.ModelException;
|
import org.imixs.workflow.exceptions.ModelException;
|
||||||
import org.imixs.workflow.exceptions.PluginException;
|
import org.imixs.workflow.exceptions.PluginException;
|
||||||
import org.imixs.workflow.exceptions.ProcessingErrorException;
|
import org.imixs.workflow.exceptions.ProcessingErrorException;
|
||||||
|
import org.imixs.workflow.exceptions.QueryException;
|
||||||
|
|
||||||
|
import com.alexanderlogistics.CargosoftController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Der DatevCargosoftImportAdapter liest eine von Cargosoft bereitgestellte
|
* Der DatevCargosoftImportAdapter liest eine von Cargosoft bereitgestellte
|
||||||
|
|
@ -41,9 +48,13 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
|
||||||
|
|
||||||
public static final String ENCODING = "ISO-8859-1";
|
public static final String ENCODING = "ISO-8859-1";
|
||||||
public static final String CHILD_ITEM_PROPERTY = "_ChildItems";
|
public static final String CHILD_ITEM_PROPERTY = "_ChildItems";
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
WorkflowService workflowService;
|
WorkflowService workflowService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
DocumentService documentService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method finds or create the Datev Export and adds a reference
|
* This method finds or create the Datev Export and adds a reference
|
||||||
* ($workitemref) to the current invoice.
|
* ($workitemref) to the current invoice.
|
||||||
|
|
@ -82,6 +93,12 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
|
||||||
private void readData(ItemCollection workitem)
|
private void readData(ItemCollection workitem)
|
||||||
throws PluginException, AccessDeniedException, ProcessingErrorException, ModelException {
|
throws PluginException, AccessDeniedException, ProcessingErrorException, ModelException {
|
||||||
String dataLine;
|
String dataLine;
|
||||||
|
// Start Datum Wirtschaftsjahr berechnen (JJJJMMTT)
|
||||||
|
String wjBeginn=workitem.getItemValueString("datev.WJ-Beginn");
|
||||||
|
String wjBeginnMonat=wjBeginn.substring(4,6);
|
||||||
|
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd");
|
||||||
|
|
||||||
|
|
||||||
ItemCollection invoiceWorkitem = null;
|
ItemCollection invoiceWorkitem = null;
|
||||||
List<ItemCollection> splitBuchungen = new ArrayList<ItemCollection>();
|
List<ItemCollection> splitBuchungen = new ArrayList<ItemCollection>();
|
||||||
|
|
||||||
|
|
@ -115,7 +132,21 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
|
||||||
String belegNummer = DatevImportAdapter.csvVal(header1List[10]);
|
String belegNummer = DatevImportAdapter.csvVal(header1List[10]);
|
||||||
String gegenKonto = DatevImportAdapter.csvVal(header1List[7]);
|
String gegenKonto = DatevImportAdapter.csvVal(header1List[7]);
|
||||||
String text = DatevImportAdapter.csvVal(header1List[13]);
|
String text = DatevImportAdapter.csvVal(header1List[13]);
|
||||||
|
String buchungsTag = DatevImportAdapter.csvVal(header1List[9]);
|
||||||
|
// cargosoft laesst gerne die führende 0 weg....
|
||||||
|
if (buchungsTag.length()==3) {
|
||||||
|
buchungsTag="0"+buchungsTag;
|
||||||
|
}
|
||||||
|
// berechne Buchungsdatum DDMM
|
||||||
|
String tag=buchungsTag.substring(0,2);
|
||||||
|
String monat=buchungsTag.substring(2,4);
|
||||||
|
String jahr=wjBeginn.substring(0,4);
|
||||||
|
// compute next year if start of WJ is not January
|
||||||
|
if (Integer.parseInt(wjBeginnMonat)>Integer.parseInt(monat)) {
|
||||||
|
jahr=Integer.parseInt(jahr+1)+"";
|
||||||
|
}
|
||||||
|
Date dateBuchung = dateFormatter.parse(jahr+monat+tag);
|
||||||
|
|
||||||
// Skip Eingangsrechnungen
|
// Skip Eingangsrechnungen
|
||||||
if (!gegenKonto.startsWith("1")) {
|
if (!gegenKonto.startsWith("1")) {
|
||||||
// skip
|
// skip
|
||||||
|
|
@ -139,7 +170,7 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
|
||||||
if (invoiceWorkitem == null) {
|
if (invoiceWorkitem == null) {
|
||||||
logger.info("...create new workitem....");
|
logger.info("...create new workitem....");
|
||||||
// erzeuge ein neues
|
// erzeuge ein neues
|
||||||
invoiceWorkitem =createEmptyInvoice(belegNummer,text,gegenKonto);
|
invoiceWorkitem =createEmptyInvoice(belegNummer,text,gegenKonto,dateBuchung);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ist es noch die selbe Belegnummer?
|
// ist es noch die selbe Belegnummer?
|
||||||
|
|
@ -157,24 +188,25 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
|
||||||
splitBuchungen = new ArrayList<ItemCollection>();
|
splitBuchungen = new ArrayList<ItemCollection>();
|
||||||
// invoice zurücksetzten
|
// invoice zurücksetzten
|
||||||
// erzeuge ein neues
|
// erzeuge ein neues
|
||||||
invoiceWorkitem =createEmptyInvoice(belegNummer,text,gegenKonto);
|
invoiceWorkitem =createEmptyInvoice(belegNummer,text,gegenKonto,dateBuchung);
|
||||||
splitBuchungen.add(dataItemCol);
|
splitBuchungen.add(dataItemCol);
|
||||||
}
|
}
|
||||||
|
|
||||||
}// wile end
|
}// wile end
|
||||||
closeInvoiceWorkitem(invoiceWorkitem,splitBuchungen);
|
closeInvoiceWorkitem(invoiceWorkitem,splitBuchungen);
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException | ParseException e) {
|
||||||
throw new PluginException(DatevCargosoftImportAdapter.class.getName(), DatevImportAdapter.DATEV_IMPORT_ERROR,
|
throw new PluginException(DatevCargosoftImportAdapter.class.getName(), DatevImportAdapter.DATEV_IMPORT_ERROR,
|
||||||
"Unable to read file", e);
|
"Unable to read file", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ItemCollection createEmptyInvoice(String belegNummer, String text, String gegenKonto) {
|
private ItemCollection createEmptyInvoice(String belegNummer, String text, String gegenKonto,Date dateBuchung ) {
|
||||||
ItemCollection invoiceWorkitem = new ItemCollection();
|
ItemCollection invoiceWorkitem = new ItemCollection();
|
||||||
invoiceWorkitem.setItemValue("invoice.number", belegNummer);
|
invoiceWorkitem.setItemValue("invoice.number", belegNummer);
|
||||||
invoiceWorkitem.setItemValue("invoice.text", text);
|
invoiceWorkitem.setItemValue("invoice.text", text);
|
||||||
|
invoiceWorkitem.setItemValue("invoice.date", dateBuchung);
|
||||||
invoiceWorkitem.setItemValue("dbtr.number", gegenKonto);
|
invoiceWorkitem.setItemValue("dbtr.number", gegenKonto);
|
||||||
return invoiceWorkitem;
|
return invoiceWorkitem;
|
||||||
}
|
}
|
||||||
|
|
@ -223,6 +255,14 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
|
||||||
invoiceWorkitem.setItemValue("invoice.total", total);
|
invoiceWorkitem.setItemValue("invoice.total", total);
|
||||||
// implode die Splitbuchungen
|
// implode die Splitbuchungen
|
||||||
implodeChildList(invoiceWorkitem, splitBuchungen);
|
implodeChildList(invoiceWorkitem, splitBuchungen);
|
||||||
|
|
||||||
|
// set dbtr.name
|
||||||
|
ItemCollection dbtrItemCol=findDbtr(invoiceWorkitem.getItemValueString("dbtr.number"));
|
||||||
|
if (dbtrItemCol!=null) {
|
||||||
|
invoiceWorkitem.setItemValue("dbtr.name", dbtrItemCol.getItemValueString("_VENDOR_Name"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Processe die Invoice
|
// Processe die Invoice
|
||||||
invoiceWorkitem.model("rechnungsausgang-de-1.0").task(5001).event(980);
|
invoiceWorkitem.model("rechnungsausgang-de-1.0").task(5001).event(980);
|
||||||
workflowService.processWorkItem(invoiceWorkitem);
|
workflowService.processWorkItem(invoiceWorkitem);
|
||||||
|
|
@ -250,5 +290,26 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method searches a dbtr by number
|
||||||
|
*/
|
||||||
|
private ItemCollection findDbtr(String number) {
|
||||||
|
// die cargosoft Kreditornummer beginnt seltsamerweise mit einem K
|
||||||
|
// und die Debitoren mit einem D.....
|
||||||
|
String query = "(type:" + CargosoftController.TYPE_CARGOSOFTKREDITOR + ") AND (name:D" + number+")";
|
||||||
|
|
||||||
|
try {
|
||||||
|
List<ItemCollection> result = documentService.find(query, 1, 0, "$modified", true);
|
||||||
|
logger.info("found " + result.size() + " debitors...");
|
||||||
|
if (result != null && result.size()>0) {
|
||||||
|
return result.get(0);
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (QueryException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -297,7 +297,7 @@ Bei Fragen wenden Sie sich bitte an info@imixs.com
|
||||||
<imixs:value><![CDATA[typcn-download]]></imixs:value>
|
<imixs:value><![CDATA[typcn-download]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
<imixs:value><![CDATA[<itemvalue>dbtr.number</itemvalue> <itemvalue>invoice.number</itemvalue> (<itemvalue>invoice.currency</itemvalue> <itemvalue>invoice.total</itemvalue>) ]]></imixs:value>
|
<imixs:value><![CDATA[<itemvalue>invoice.number</itemvalue> <itemvalue>dbtr.number</itemvalue> <itemvalue>dbtr.name</itemvalue> (<itemvalue>invoice.currency</itemvalue> <itemvalue>invoice.total</itemvalue>) ]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
<imixs:item name="keyupdateacl" type="xs:boolean">
|
||||||
<imixs:value>true</imixs:value>
|
<imixs:value>true</imixs:value>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue