package com.hilotec.elexis.kgview.medikarte; import java.util.Iterator; import java.util.List; import java.util.Map; import com.hilotec.elexis.kgview.Preferences; import com.hilotec.elexis.kgview.data.FavMedikament; import ch.elexis.data.Patient; import ch.elexis.data.PersistentObject; import ch.elexis.data.Prescription; import ch.elexis.data.Query; import ch.rgw.tools.StringTool; import ch.rgw.tools.TimeTool; public class MedikarteHelpers { private final static String PRESC_EI_ORD = "hilotec:ordnungszahl"; private final static String PRESC_EI_ZWECK = "hilotec:zweck"; /** * Medikation auf der Medikarte des Patienten zusammensuchen. * Wenn !alle, dann wird nur die noch aktuelle Medikation zurueckgegeben. */ public static List<Prescription> medikarteMedikation( Patient patient, boolean alle) { return medikarteMedikation(patient, alle, false); } /** * Medikation auf der Medikarte des Patienten zusammensuchen. * Wenn !alle, dann wird nur die noch aktuelle Medikation zurueckgegeben. * Mit geloescht kann gesteuert werden ob auch geloeschte Medikamente * angezeigt werden sollen. */ public static List<Prescription> medikarteMedikation( Patient patient, boolean alle, boolean geloescht) { Query<Prescription> qbe = new Query<Prescription>(Prescription.class); // FIXME: sollte mit executed with deleted gehen if (geloescht) { qbe.clear(); } qbe.add(Prescription.FLD_PATIENT_ID, Query.EQUALS, patient.getId()); qbe.add(Prescription.FLD_REZEPT_ID, StringTool.leer, null); if (!alle) { qbe.startGroup(); String today = new TimeTool().toString(TimeTool.DATE_COMPACT); if (Preferences.getMedikarteStopdatumInkl()) { qbe.add(Prescription.FLD_DATE_UNTIL, Query.GREATER_OR_EQUAL, today); } else { qbe.add(Prescription.FLD_DATE_UNTIL, Query.GREATER, today); } qbe.or(); qbe.add(Prescription.FLD_DATE_UNTIL, StringTool.leer, null); qbe.or(); qbe.add(Prescription.FLD_DATE_UNTIL, Query.EQUALS, ""); qbe.endGroup(); } // Medikamente ohne Fav-Medi Verknuepfung oder mit falsch formatierter // Dosis rauswerfen List<Prescription> pl = qbe.execute(); Iterator<Prescription> i = pl.iterator(); while(i.hasNext()) { Prescription p = i.next(); if (FavMedikament.load(p.getArtikel()) == null) i.remove(); else if (p.getDosis().split("-").length != 4) i.remove(); } return pl; } /** * Datum der letzten Aenderung der Medikarte (letztes von oder bis datum) */ public static String medikarteDatum(Patient patient) { // TODO: Koennte man mit einer Query sauberer loesen List<Prescription> medis = medikarteMedikation(patient, false); TimeTool max = new TimeTool(0); TimeTool cur = new TimeTool(); for (Prescription p: medis) { cur.set(p.getBeginDate()); if (cur.isAfter(max)) max.set(p.getBeginDate()); cur.set(p.getEndDate()); if (cur.isAfter(max)) max.set(p.getEndDate()); } return max.toString(TimeTool.DATE_GER); } /** * Ordnungszahl fuer Verschreibung holen */ @SuppressWarnings("rawtypes") public static int getOrdnungszahl(Prescription presc) { Map ht = presc.getMap(Prescription.FLD_EXTINFO); // Ordnungszahl der Verschreibung if (ht.containsKey(PRESC_EI_ORD)) return (Integer) ht.get(PRESC_EI_ORD); // Standard fuers Medikament FavMedikament fm = FavMedikament.load(presc.getArtikel()); if (fm != null) return fm.getOrdnungszahl(); return 0; } /** * Ordnungszahl fuer Verschreibung setzen */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static void setOrdnungszahl(Prescription presc, int ord) { Map ht = presc.getMap(Prescription.FLD_EXTINFO); ht.put(PRESC_EI_ORD, ord); presc.setMap(Prescription.FLD_EXTINFO, ht); } /** * Zweck fuer Verschreibung holen */ @SuppressWarnings("rawtypes") public static String getPZweck(Prescription presc) { Map ht = presc.getMap(Prescription.FLD_EXTINFO); // Ordnungszahl der Verschreibung if (ht.containsKey(PRESC_EI_ZWECK)) return (String) ht.get(PRESC_EI_ZWECK); // Standard fuers Medikament FavMedikament fm = FavMedikament.load(presc.getArtikel()); if (fm != null) return fm.getZweck(); return ""; } /** * Ordnungszahl fuer Verschreibung setzen */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static void setPZweck(Prescription presc, String zweck) { Map ht = presc.getMap(Prescription.FLD_EXTINFO); // Wenns dem Standard entspricht speichern wir den Eintrag nicht FavMedikament fm = FavMedikament.load(presc.getArtikel()); if (fm != null && fm.getZweck().equals(zweck)) { ht.remove(PRESC_EI_ZWECK); } else { ht.put(PRESC_EI_ZWECK, zweck); } presc.setMap(Prescription.FLD_EXTINFO, ht); } }