package ch.elexis.archie.wzw; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import ch.elexis.core.data.interfaces.IVerrechenbar; import ch.elexis.data.Fall; import ch.elexis.data.Konsultation; import ch.elexis.data.Mandant; import ch.elexis.data.Patient; import ch.elexis.data.Verrechnet; import ch.rgw.tools.Money; public class AlleLeistungen extends BaseStats { static final String NAME = "Leistungen-Hitliste"; static final String DESC = "Listet sämtliche Leistungen im gegebenen Zeitraum"; static final String[] HEADINGS = { "Codesystem", "Code", "Text", "Anzahl", "Umsatz" }; public AlleLeistungen(){ super(NAME, DESC, HEADINGS); } @Override protected IStatus createContent(IProgressMonitor monitor){ final ArrayList<Comparable<?>[]> result = new ArrayList<Comparable<?>[]>(); List<Konsultation> conses = getConses(monitor); if (conses.size() > 0) { int clicksPerRound = HUGE_NUMBER / conses.size(); HashMap<String, TarifStat> tstats = new HashMap<String, TarifStat>(); for (Konsultation k : conses) { Mandant m = k.getMandant(); if (m != null) { Fall fall = k.getFall(); if (fall != null) { Patient pat = fall.getPatient(); if (pat != null) { List<Verrechnet> vr = k.getLeistungen(); for (Verrechnet v : vr) { IVerrechenbar vv = v.getVerrechenbar(); if (vv == null) { System.out.println(v.getLabel()); } else { String sname = vv.getCodeSystemName(); String scode = vv.getCode() == null ? "?" : vv.getCode(); TarifStat ts = tstats.get(sname + scode); if (ts == null) { ts = new TarifStat(); ts.tarif = vv.getCodeSystemName(); ts.ziffer = vv.getCode() == null ? "?" : vv.getCode(); ts.text = vv.getText(); tstats.put(sname + scode, ts); } ts.count += v.getZahl(); ts.umsatz += v.getNettoPreis().doubleValue() + v.getZahl(); } } } } monitor.worked(clicksPerRound); if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } } } // Resultat-Array für Archie aufbauen for (TarifStat ts : tstats.values()) { Comparable<?>[] row = new Comparable<?>[this.dataSet.getHeadings().size()]; row[0] = ts.tarif; row[1] = ts.ziffer; row[2] = ts.text; row[3] = new Integer(ts.count); row[4] = new Money(ts.umsatz); result.add(row); } } // Und an Archie übermitteln this.dataSet.setContent(result); return Status.OK_STATUS; } class TarifStat { String tarif; String ziffer; String text; int count; double umsatz; } }