op listen export

This commit is contained in:
Ralph Soika 2023-02-08 11:12:07 +01:00
parent 0a4254b8ae
commit 723599dafb
6 changed files with 122 additions and 68 deletions

View file

@ -93,6 +93,7 @@ public class OPListExportAdapter extends POIFindReplaceAdapter {
appendExcelTemplate(document, textblock, template, targetName);
logger.info("... loading poi configuration..");
// Process POI instructions
// read the config
ItemCollection poiConfig = workflowService.evalWorkflowResult(event, "poi-update", document, false);
@ -103,14 +104,17 @@ public class OPListExportAdapter extends POIFindReplaceAdapter {
List<String> replaceDevList = poiConfig.getItemValue("findreplace");
String eval = poiConfig.getItemValueString("eval");
try {
logger.info("... update template with normal poi information..");
this.updateFileData(document.getFileData(targetName), document, replaceDevList, eval);
// now we add separate lines for each invoice....
logger.info("... insert invoices..");
insertInvoiceRows(document, targetName);
} catch (PluginException | IOException | QueryException e) {
throw new PluginException(OPListExportAdapter.class.getSimpleName(), ERROR_CONFIG,
"failed to update op-liste: " + e.getMessage());
}
logger.info("... completed!");
return document;
}
@ -132,36 +136,44 @@ public class OPListExportAdapter extends POIFindReplaceAdapter {
// load dummy rechnungen
String spaceID = document.getItemValueString("space.ref");
logger.info("... space.ref=" + spaceID + " ...grouping invoices by spaceid....");
Map<String, List<ItemCollection>> invoiceMap = groupInvoicesBySpaceID(spaceID);
FileData fileData = document.getFileData(fileName);
logger.info("... processing workbook... DEBUG MODE");
// load XSSFWorkbook
XSSFWorkbook doc = null;
try (InputStream imputStream = new ByteArrayInputStream(fileData.getContent())) {
XSSFWorkbook doc = new XSSFWorkbook(imputStream);
doc = new XSSFWorkbook(imputStream);
// NOTE: we only take the first sheet !
XSSFSheet sheet = doc.getSheetAt(0);
CellReference cr = new CellReference("A12");
XSSFRow referenceRow = sheet.getRow(cr.getRow());
CellReference categoryRefCell = new CellReference("A12");
XSSFRow referenceRowCategory = sheet.getRow(categoryRefCell.getRow());
CellReference invoiceRefCell = new CellReference("A13");
XSSFRow referenceRowInvoice = sheet.getRow(invoiceRefCell.getRow());
int referenceRowPos = 12;
int rowPos = 12;
// int lastRow = sheet.getLastRowNum();
int lastRow = 999;
int lastRow = 2999;
logger.finest("Last rownum=" + lastRow);
int totalRowCount = invoiceMap.size();
for (List<?> list : invoiceMap.values()) {
totalRowCount = totalRowCount + list.size();
}
if (totalRowCount == 0) {
logger.warning("No Invoices found - skip update workbook!");
return;
}
sheet.shiftRows(rowPos, lastRow, totalRowCount, true, true);
for (Map.Entry<String, List<ItemCollection>> entry : invoiceMap.entrySet()) {
String dbtrNumber = entry.getKey();
logger.info("......add debitor " + dbtrNumber);
List<ItemCollection> invoices = entry.getValue();
// erzeuge eine Zwischenüberschrift für den Debitor....
XSSFRow categoryRow = sheet.createRow(rowPos);
categoryRow.copyRowFrom(referenceRow, new CellCopyPolicy());
categoryRow.copyRowFrom(referenceRowCategory, new CellCopyPolicy());
// insert values
categoryRow.getCell(0).setCellValue(dbtrNumber);
String debitorName = invoices.get(0).getItemValueString("dbtr.name");
@ -172,35 +184,32 @@ public class OPListExportAdapter extends POIFindReplaceAdapter {
for (ItemCollection invoice : invoices) {
catSum = catSum + invoice.getItemValueDouble("invoice.saldo");
}
if (catSum < 0) {
// SOLL
categoryRow.getCell(6).setCellValue(catSum);
} else {
categoryRow.getCell(8).setCellValue(catSum);
}
logger.fine("......... sum=" + catSum);
categoryRow.getCell(10).setCellValue(catSum);
rowPos++;
// jetzt füge alle Rechnungen an.
for (ItemCollection invoice : invoices) {
logger.finest("......copy row...");
logger.fine("......add invoice " + invoice.getUniqueID());
// now create a new line..
XSSFRow row = sheet.createRow(rowPos);
row.copyRowFrom(referenceRow, new CellCopyPolicy());
row.copyRowFrom(referenceRowInvoice, new CellCopyPolicy());
// insert values
row.getCell(2).setCellValue(invoice.getItemValueString("invoice.number"));
row.getCell(3).setCellValue(invoice.getItemValueString("invoice.text"));
row.getCell(4).setCellValue(invoice.getItemValueDate("invoice.date"));
row.getCell(5).setCellValue(invoice.getItemValueDate("invoice.duedate"));
double total = invoice.getItemValueDouble("invoice.saldo");
if (total < 0) {
// SOLL
String currency=invoice.getItemValueString("invoice.currency");
if ("EUR".equals(currency)) {
// EUR
row.getCell(6).setCellValue(total);
row.getCell(7).setCellValue(invoice.getItemValueString("invoice.currency"));
row.getCell(7).setCellValue(currency);
} else {
// HABEN
// USD
row.getCell(8).setCellValue(total);
row.getCell(9).setCellValue(invoice.getItemValueString("invoice.currency"));
row.getCell(9).setCellValue(currency);
}
row.getCell(10).setCellValue(invoice.getItemValueString("$workflowstatus"));
saldo = saldo + total;
@ -211,13 +220,14 @@ public class OPListExportAdapter extends POIFindReplaceAdapter {
sheet.shiftRows(referenceRowPos, lastRow + totalRowCount, -1, true, true);
// finally update the total formula...
evalXSSFSheet(doc, sheet, "TOTAL");
evalXSSFSheet(doc, sheet, "TOTALEUR");
evalXSSFSheet(doc, sheet, "TOTALUSD");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// write back the file
doc.write(byteArrayOutputStream);
doc.close();
byte[] newContent = byteArrayOutputStream.toByteArray();
FileData fileDataNew = new FileData(fileData.getName(), newContent, fileData.getContentType(), null);
// update the fileData
@ -228,6 +238,15 @@ public class OPListExportAdapter extends POIFindReplaceAdapter {
} catch (IOException e) {
throw new PluginException(OPListExportAdapter.class.getSimpleName(), ERROR_CONFIG,
"failed to update opliste: " + e.getMessage());
} finally {
if (doc != null) {
try {
doc.close();
} catch (IOException e) {
logger.severe("Failed to close workbook: " + e.getMessage());
e.printStackTrace();
}
}
}
}

View file

@ -25,10 +25,11 @@ package com.alexanderlogistics;
import java.util.logging.Logger;
import javax.ejb.Timer;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.imixs.workflow.engine.scheduler.SchedulerController;
/**
@ -60,6 +61,10 @@ public class OPListExportController extends SchedulerController {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(OPListExportController.class.getName());
@Inject
OPListExportScheduler opListExportScheduler;
@Override
public String getName() {
return OPLIST_EXPORT_CONFIGURATION;
@ -78,4 +83,8 @@ public class OPListExportController extends SchedulerController {
return schedulerClass;
}
}

View file

@ -26,18 +26,16 @@ import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import org.imixs.marty.team.TeamService;
import org.imixs.workflow.FileData;
import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.engine.DocumentService;
import org.imixs.workflow.engine.ModelService;
import org.imixs.workflow.engine.ReportService;
import org.imixs.workflow.engine.WorkflowService;
import org.imixs.workflow.engine.scheduler.Scheduler;
import org.imixs.workflow.engine.scheduler.SchedulerException;
@ -69,21 +67,15 @@ public class OPListExportScheduler implements Scheduler {
public static DecimalFormat decimalFormat = new DecimalFormat("0.00",
new DecimalFormatSymbols(java.util.Locale.GERMANY));
@EJB
DocumentService documentService;
@EJB
WorkflowService workflowService;
@EJB
ModelService modelService;
DocumentService documentService;
@EJB
TeamService teamService;
@EJB
ReportService reportService;
private static Logger logger = Logger.getLogger(OPListExportScheduler.class.getName());
/**
@ -96,45 +88,73 @@ public class OPListExportScheduler implements Scheduler {
* @throws QueryException
*/
public ItemCollection run(ItemCollection configuration) throws SchedulerException {
List<ItemCollection> invoices = null;
StringBuffer buffer = new StringBuffer();
int lines = 0;
try {
configuration.removeItem("_scheduler_logmessage");
logMessage(configuration, "....export OP-Listen...");
logMessage("....export OP-Listen...", configuration, null);
// Hole dir alle Bereiche
List<ItemCollection> spaces = teamService.getSpaces();
// Jezt erzeugen wir für jeden Berich ein neues Workitem falls offene Rechnungen
// Jezt erzeugen wir für jeden Bereich ein neues Workitem .
for (ItemCollection space : spaces) {
// Gibt es Rechnungen?
try {
List<ItemCollection> invoices = documentService
.find("$modelversion:rechnungsausgang-de-1.0 AND type:workitem AND $uniqueidref:"
+ space.getUniqueID(), 1, 0);
if (invoices.size() > 0) {
// erzeuge eine OP-Liste
ItemCollection workitem = new ItemCollection();
workitem.setItemValue("space.ref", space.getUniqueID());
processOPListe(workitem);
}
} catch (QueryException e) {
// not possible
e.printStackTrace();
}
try {
}
logMessage("...completed", configuration, null);
} catch (RuntimeException e) {
// continue with log message
logger.severe("...OPList Error");
logMessage("...Failed to create OPLists: " + e.getMessage(), configuration, null);
} catch (PluginException | ModelException e2) {
logger.severe("Error processing OP-List for space: " + e2.getMessage());
throw new SchedulerException("OP-LIST-ERROR", "OPList Processing failed : " + e2.getMessage(), e2);
}
return configuration;
}
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
public void processOPListe(ItemCollection workitem)
throws PluginException, AccessDeniedException, ProcessingErrorException, ModelException {
workflowService.processWorkItem( //
workitem.task(1000). //
event(100). //
model("opliste-de-1.0"));
} catch (AccessDeniedException | ProcessingErrorException | PluginException | ModelException e) {
e.printStackTrace();
}
}
// transfer file via FTP...
DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmm");
// MMM d, yyyy HH:mm a
FileData fileData = new FileData("OPD_" + formatter.format(new Date()) + ".txt",
String.valueOf(buffer).getBytes(), null, null);
logMessage(configuration, "...completed: " + lines + " lines");
return configuration;
/**
* Creates a new log entry stored in the item _scheduler_log. The log can be
* writen optional to the configuraiton and the workitem
*
* @param message
* @param configuration
*/
public void logMessage(String message, ItemCollection configuration, ItemCollection workitem) {
if (configuration != null) {
configuration.appendItemValue(Scheduler.ITEM_LOGMESSAGE, message);
}
if (workitem != null) {
workitem.appendItemValue(Scheduler.ITEM_LOGMESSAGE, message);
}
private void logMessage(ItemCollection configuration, String message) {
configuration.appendItemValue("_scheduler_logmessage", message);
logger.info(message);
}
}

View file

@ -56,7 +56,7 @@
<div class="imixs-footer">
<h:outputLabel value="#{message.modified}: " />
<h:outputText
value="#{cargosoftExportController.configuration.item['$modified']}">
value="#{oplistExportController.configuration.item['$modified']}">
<f:convertDateTime timeZone="#{message.timeZone}" type="both"
pattern="#{message.dateTimePattern}" />
</h:outputText>
@ -64,6 +64,7 @@
<br />
<h:commandButton
actionListener="#{oplistExportController.saveConfiguration()}"
value="#{message.save}">

View file

@ -86,6 +86,7 @@ public class MigrationSpaceZuordnung {
while (true) {
workflowCLient.setPageIndex(pageIndex);
workflowCLient.setPageSize(pageSize);
workflowCLient.setSortBy("$created");
List<ItemCollection> invoices = workflowCLient.searchDocuments(query);
@ -95,7 +96,10 @@ public class MigrationSpaceZuordnung {
for (ItemCollection invoice: invoices) {
count++;
boolean update=false;
if (invoice.getItemValueString("space.ref").isEmpty()) {
String currentSpaceRef=invoice.getItemValueString("space.ref");
List<String> refList=invoice.getItemValueList("$uniqueidref",String.class);
if (currentSpaceRef.isEmpty() || !refList.contains(currentSpaceRef)) {
// Jezt noch das Space mapping
// dazu kucken wir in alle spaces den config wert 'pos.mapping'
@ -112,6 +116,7 @@ public class MigrationSpaceZuordnung {
// we have a match
invoice.setItemValue("space.ref", entry.getKey());
invoice.setItemValue("space.name", spaceNames.get(entry.getKey()));
invoice.appendItemValueUnique("$uniqueidref", entry.getKey());
update=true;
break;

Binary file not shown.