package ch.elexis.archie.wzw; import java.util.Arrays; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.data.Konsultation; import ch.elexis.data.Query; import ch.elexis.data.Rechnung; import ch.elexis.data.RnStatus; import ch.rgw.tools.IFilter; import ch.rgw.tools.TimeTool; import ch.unibe.iam.scg.archie.annotations.GetProperty; import ch.unibe.iam.scg.archie.annotations.SetProperty; import ch.unibe.iam.scg.archie.model.AbstractTimeSeries; import ch.unibe.iam.scg.archie.ui.widgets.WidgetTypes; public abstract class BaseStats extends AbstractTimeSeries { protected String desc; protected String[] headings; private String dateMethod = "Rechnungsdatum"; private boolean bOnlyActiveMandator; protected int clicksPerRound; protected int HUGE_NUMBER = 1000000; public BaseStats(String name, String desc, String[] headings){ super(name); this.headings = headings; this.desc = desc; } @GetProperty(name = "Nur aktueller Mandant", widgetType = WidgetTypes.BUTTON_CHECKBOX, index = 1) public boolean getOnlyActiveMandator(){ return bOnlyActiveMandator; } @SetProperty(name = "Nur aktueller Mandant", index = 1) public void setOnlyActiveMandator(boolean val){ bOnlyActiveMandator = val; } @GetProperty(widgetType = WidgetTypes.COMBO, description = "Interpretation des Datums", index = 1, items = { "Rechnungsdatum", "Zahlungsdatum", "Konsultationsdatum" }, name = "Datum-Typ") public String getDateType(){ return dateMethod; } @SetProperty(index = 1, name = "Datum-Typ") public void setDateType(String dT){ dateMethod = dT; } @Override public String getDescription(){ return desc; } @Override protected List<String> createHeadings(){ return Arrays.asList(headings); } protected List<Konsultation> getConses(final IProgressMonitor monitor){ HUGE_NUMBER = 1000000; monitor.beginTask("Sammle Konsultationsdaten ", HUGE_NUMBER); monitor.subTask("Datenbankabfrage und PostQueryFilters"); Query<Konsultation> qbe = new Query<Konsultation>(Konsultation.class); String dateFrom = new TimeTool(getStartDate().getTime().getTime()).toString(TimeTool.DATE_COMPACT); String dateUntil = new TimeTool(getEndDate().getTimeInMillis()).toString(TimeTool.DATE_COMPACT); final TimeTool from = new TimeTool(dateFrom); final TimeTool to = new TimeTool(dateUntil); if (getDateType().equals("Konsultationsdatum")) { qbe.addPostQueryFilter(new IFilter() { @Override public boolean select(Object element){ Konsultation k = (Konsultation) element; monitor.subTask(k.getDatum()); monitor.worked(1); HUGE_NUMBER--; TimeTool konsDatum = new TimeTool(k.getDatum()); return konsDatum.isAfterOrEqual(from) && konsDatum.isBeforeOrEqual(to); } }); } else if (getDateType().equals("Rechnungsdatum")) { qbe.add(Konsultation.FLD_BILL_ID, "NOT", null); qbe.addPostQueryFilter(new IFilter() { @Override public boolean select(Object element){ Konsultation k = (Konsultation) element; monitor.subTask(k.getDatum()); monitor.worked(1); HUGE_NUMBER--; Rechnung rn = k.getRechnung(); TimeTool rndate = new TimeTool(rn.getDatumRn()); return rndate.isAfterOrEqual(from) && rndate.isBeforeOrEqual(to); } }); } else if (getDateType().equals("Zahlungsdatum")) { qbe.add(Konsultation.FLD_BILL_ID, "NOT", null); qbe.addPostQueryFilter(new IFilter() { @Override public boolean select(Object element){ Konsultation k = (Konsultation) element; monitor.subTask(k.getLabel()); monitor.worked(1); HUGE_NUMBER--; Rechnung rn = k.getRechnung(); if (rn.getStatus() == RnStatus.BEZAHLT || rn.getStatus() == RnStatus.ZUVIEL_BEZAHLT) { TimeTool rndate = new TimeTool(rn.getDatumRn()); return rndate.isAfterOrEqual(from) && rndate.isBeforeOrEqual(to); } return false; } }); } if (bOnlyActiveMandator) { qbe.add(Konsultation.FLD_MANDATOR_ID, Query.EQUALS, CoreHub.actMandant.getId()); } return qbe.execute(); } }