layout update

This commit is contained in:
Ralph Soika 2023-07-25 16:41:32 +02:00
parent 2742379b37
commit 038d9478bf
2 changed files with 124 additions and 20 deletions

View file

@ -26,6 +26,7 @@ import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.engine.DocumentService;
import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.exceptions.QueryException;
import org.imixs.workflow.faces.data.WorkflowController; import org.imixs.workflow.faces.data.WorkflowController;
import org.imixs.workflow.office.views.SearchController;
/** /**
* Der InvoiceAnalyseController dient zur Auswertung der Sachprüfungs WOrklfow * Der InvoiceAnalyseController dient zur Auswertung der Sachprüfungs WOrklfow
@ -49,14 +50,23 @@ public class DebitorStatistikController implements Serializable {
@Inject @Inject
protected WorkflowController workflowController; protected WorkflowController workflowController;
public int getZahlungsmoral() { @Inject
protected SearchController searchController;
public int getZahlungsmoral() {
return 0; return 0;
} }
/*
* Gesamt
*/
public String getQueryRechnungen() {
String query = "(type:workitem OR type:workitemarchive) AND dbtr.number:" + getDbtNr()
+ " AND $workflowgroup:\"Rechnungsausgang\"";
return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " gesamt&query=" + query;
}
public int getRechnungen() { public int getRechnungen() {
int result = 0; int result = 0;
try { try {
result = documentService result = documentService
.count("(type:workitem OR type:workitemarchive) AND dbtr.number:" + getDbtNr() .count("(type:workitem OR type:workitemarchive) AND dbtr.number:" + getDbtNr()
@ -67,19 +77,35 @@ public class DebitorStatistikController implements Serializable {
return result; return result;
} }
/*
* Bezahlt
*/
public String getQueryRechnungenBezahlt() {
String query = "(type:workitem OR type:workitemarchive) AND dbtr.number:" + getDbtNr()
+ " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5900 TO 5999])";
return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " bezahlt&query=" + query;
}
public int getRechnungenBezahlt() { public int getRechnungenBezahlt() {
int result = 0; int result = 0;
try { try {
result = documentService result = documentService
.count("(type:workitem OR type:workitemarchive) AND dbtr.number:" + getDbtNr() .count("(type:workitem OR type:workitemarchive) AND dbtr.number:" + getDbtNr()
+ " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5900 TO 5999])"); + " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5900 TO 5999])");
} catch (QueryException e) { } catch (QueryException e) {
logger.severe("Failed to get statistic: " + e.getMessage()); logger.severe("Failed to get statistic: " + e.getMessage());
} }
return result; return result;
} }
/*
* Offen
*/
public String getQueryRechnungenOffen() {
String query = "(type:workitem) AND dbtr.number:" + getDbtNr()
+ " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5000 TO 5099])";
return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " offen&query=" + query;
}
public int getRechnungenOffen() { public int getRechnungenOffen() {
int result = 0; int result = 0;
@ -93,9 +119,16 @@ public class DebitorStatistikController implements Serializable {
return result; return result;
} }
/*
* Fällig
*/
public String getQueryRechnungenFaellig() {
String query = "(type:workitem) AND dbtr.number:" + getDbtNr()
+ " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5100 TO 5199])";
return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " fällig&query=" + query;
}
public int getRechnungenFaellig() { public int getRechnungenFaellig() {
int result = 0; int result = 0;
try { try {
result = documentService result = documentService
.count("(type:workitem) AND dbtr.number:" + getDbtNr() .count("(type:workitem) AND dbtr.number:" + getDbtNr()
@ -106,9 +139,16 @@ public class DebitorStatistikController implements Serializable {
return result; return result;
} }
/*
* In Mahnung
*/
public String getQueryRechnungenGemahnt() {
String query = "(type:workitem) AND dbtr.number:" + getDbtNr()
+ " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5200 TO 5299])";
return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " in Mahnung&query=" + query;
}
public int getRechnungenGemahnt() { public int getRechnungenGemahnt() {
int result = 0; int result = 0;
try { try {
result = documentService result = documentService
.count("(type:workitem ) AND dbtr.number:" + getDbtNr() .count("(type:workitem ) AND dbtr.number:" + getDbtNr()
@ -119,6 +159,14 @@ public class DebitorStatistikController implements Serializable {
return result; return result;
} }
/*
* Inkasso
*/
public String getQueryRechnungenInkasso() {
String query = "(type:workitem) AND dbtr.number:" + getDbtNr()
+ " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5300 TO 5399])";
return "/pages/workitems/worklist?title=Rechnungen " + getDbtNr() + " in Inkasso&query=" + query;
}
public int getRechnungenInkasso() { public int getRechnungenInkasso() {
int result = 0; int result = 0;
@ -145,6 +193,34 @@ public class DebitorStatistikController implements Serializable {
return dbtNr; return dbtNr;
} }
public long getDurchschnittZahlungsziel() {
getStats();
int count = 0;
long gesamt = 0;
for (Map.Entry<String, DebitorStatistikData> entry : stats.entrySet()) {
DebitorStatistikData statData = entry.getValue();
if (statData.count > 0) {
gesamt = gesamt + statData.getAverageDueDays();
count++;
}
}
return Math.round((double) gesamt / count);
}
public long getDurchschnittZahlungsdauer() {
getStats();
int count = 0;
long gesamt = 0;
for (Map.Entry<String, DebitorStatistikData> entry : stats.entrySet()) {
DebitorStatistikData statData = entry.getValue();
if (statData.count > 0) {
gesamt = gesamt + statData.getAveragePaymentDays();
count++;
}
}
return Math.round((double) gesamt / count);
}
/** /**
* Sucht alle Rechnugnen aus einem Zeitraum und sammelt Zahlungsziel und * Sucht alle Rechnugnen aus einem Zeitraum und sammelt Zahlungsziel und
* Zahlungszeitspanne gruppiert nach monaten * Zahlungszeitspanne gruppiert nach monaten
@ -409,7 +485,8 @@ public class DebitorStatistikController implements Serializable {
// Datasets 1 // Datasets 1
result = result + "{label: 'Zahlungsziel',borderWidth: 1,"; result = result + "{label: 'Zahlungsziel',borderWidth: 1,";
result = result + " \"backgroundColor\" : [\"#3B6B82\"],"; result = result + " borderColor: [\"#3B6B82\"],";
result = result + " \"backgroundColor\" : [\"#CFE9F5\"], fill: true,tension: 0.5,";
result = result + "data: ["; result = result + "data: [";
for (Map.Entry<String, DebitorStatistikData> entry : stats.entrySet()) { for (Map.Entry<String, DebitorStatistikData> entry : stats.entrySet()) {
@ -422,14 +499,11 @@ public class DebitorStatistikController implements Serializable {
// Datasets 2 // Datasets 2
result = result + "{label: 'Zahldauer',borderWidth: 1,"; result = result + "{label: 'Zahldauer',borderWidth: 1,";
result = result + " \"backgroundColor\" : [\"#CFE9F5\" ],"; result = result + " borderColor: [\"#E73B65\"],\"backgroundColor\" : [\"#70B088\" ], tension: 0.5,fill: true,";
result = result result = result
+ " trendlineLinear: { colorMin: \"red\", colorMax: \"green\", lineStyle: \"dotted\", width: 2 , projection: true },"; + " trendlineLinear: { colorMin: \"red\", colorMax: \"green\", lineStyle: \"dotted\", width: 2 , projection: true },";
// result = result
// + "trendlineLinear: {colorMin: \"red\",colorMax: \"green\", lineStyle:
// \"dotted\",width: 2,projection: true},";
result = result + "data: ["; result = result + "data: [";
for (Map.Entry<String, DebitorStatistikData> entry : stats.entrySet()) { for (Map.Entry<String, DebitorStatistikData> entry : stats.entrySet()) {

View file

@ -11,52 +11,82 @@
<dl> <dl>
<dt>Anzahl Rechnungen</dt> <dt>
<h:link outcome="#{debitorStatistikController.queryRechnungen}">Anzahl Rechnungen gesamt <span
class="typcn typcn-zoom" style="font-size: 1.2em;" /></h:link>
</dt>
<dd> <dd>
#{debitorStatistikController.rechnungen} #{debitorStatistikController.rechnungen}
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>Anzahl Offen</dt> <dt>
<h:link outcome="#{debitorStatistikController.queryRechnungenOffen}">Anzahl Rechnungen offen <span
class="typcn typcn-zoom" style="font-size: 1.2em;" /></h:link>
</dt>
<dd> <dd>
#{debitorStatistikController.rechnungenOffen} #{debitorStatistikController.rechnungenOffen}
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>Anzahl Offen</dt> <dt>
<h:link outcome="#{debitorStatistikController.queryRechnungenFaellig}">Anzahl Rechnungen fällig <span
class="typcn typcn-zoom" style="font-size: 1.2em;" /></h:link>
</dt>
<dd> <dd>
#{debitorStatistikController.rechnungenFaellig} #{debitorStatistikController.rechnungenFaellig}
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>Anzahl Rechnungen in Mahnung</dt> <dt>
<h:link outcome="#{debitorStatistikController.queryRechnungenGemahnt}">Anzahl Rechnungen in Mahnung <span
class="typcn typcn-zoom" style="font-size: 1.2em;" /></h:link>
</dt>
<dd> <dd>
#{debitorStatistikController.rechnungenGemahnt} #{debitorStatistikController.rechnungenGemahnt}
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>Anzahl Rechnungen in Inkasso</dt> <dt>
<h:link outcome="#{debitorStatistikController.queryRechnungenInkasso}">Anzahl Rechnungen in Inkasso <span
class="typcn typcn-zoom" style="font-size: 1.2em;" /></h:link>
</dt>
<dd> <dd>
#{debitorStatistikController.rechnungenInkasso} #{debitorStatistikController.rechnungenInkasso}
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>Anzahl Rechnungen Bezahlt</dt> <dt>
<h:link outcome="#{debitorStatistikController.queryRechnungenBezahlt}">Anzahl Rechnungen bezahlt <span
class="typcn typcn-zoom" style="font-size: 1.2em;" /></h:link>
</dt>
<dd> <dd>
#{debitorStatistikController.rechnungenBezahlt} #{debitorStatistikController.rechnungenBezahlt}
</dd> </dd>
</dl> </dl>
<dl>
<dt>Durchschnitt Zahlungsziel</dt>
<dd>
#{debitorStatistikController.durchschnittZahlungsziel}
</dd>
</dl>
<dl>
<dt>Durchschnitt Zahlungsdauer</dt>
<dd>
#{debitorStatistikController.durchschnittZahlungsdauer}
</dd>
</dl>
</h:panelGroup> </h:panelGroup>
<!-- Chart Diagramm --> <!-- Chart Diagramm -->
<div id="container" style="width: 75%;"> <div id="container" style="width: 75%;">
<canvas id="canvas"></canvas> asdf <canvas id="canvas"></canvas>
</div> </div>
<script type="text/javascript" <script type="text/javascript"
src="#{facesContext.externalContext.requestContextPath}/js/chartjs/chart.min.js?build=#{app.application_build_timestamp}"></script> src="#{facesContext.externalContext.requestContextPath}/js/chartjs/chart.min.js?build=#{app.application_build_timestamp}"></script>
<script type="text/javascript" <script type="text/javascript"
@ -71,7 +101,7 @@
// update the diagram // update the diagram
var ctx = document.getElementById("canvas").getContext("2d"); var ctx = document.getElementById("canvas").getContext("2d");
window.myBar = new Chart(ctx, { window.myBar = new Chart(ctx, {
type: 'bar', type: 'line',
data: barChartData, data: barChartData,
options: { options: {
responsive: true, responsive: true,
@ -81,7 +111,7 @@
title: { title: {
display: true, display: true,
text: 'Zahlungsstatistik' text: 'Zahlungsstatistik'
} }
} }
}); });
}); });