package ch.elexis.icpc.fire.model; import java.util.ArrayList; import java.util.List; import java.util.Optional; import javax.xml.datatype.DatatypeConfigurationException; import ch.elexis.data.Artikel; import ch.elexis.data.Konsultation; import ch.elexis.data.Patient; import ch.elexis.data.Prescription; import ch.elexis.data.Query; import ch.elexis.icpc.fire.model.TConsultation.Medis; import ch.rgw.tools.TimeTool; public class MedisBuilder { private Konsultation consultation; private FireConfig config; public MedisBuilder(FireConfig config){ this.config = config; } public MedisBuilder consultation(Konsultation consultation){ this.consultation = consultation; return this; } public Optional<Medis> build() throws DatatypeConfigurationException{ Patient patient = consultation.getFall().getPatient(); Query<Prescription> query = new Query<Prescription>(Prescription.class); query.add(Prescription.FLD_PATIENT_ID, Query.EQUALS, patient.getId()); TimeTool consTime = new TimeTool(consultation.getDatum()); query.add(Prescription.FLD_DATE_FROM, Query.LIKE, consTime.toString(TimeTool.DATE_COMPACT) + "%"); List<Prescription> prescriptions = query.execute(); if (prescriptions != null && !prescriptions.isEmpty()) { Medis medis = config.getFactory().createTConsultationMedis(); for (Prescription prescription : prescriptions) { Artikel articel = prescription.getArtikel(); if (articel != null) { TMedi tMedi = config.getFactory().createTMedi(); String beginDateString = prescription.getBeginDate(); if (beginDateString != null && !beginDateString.isEmpty()) { tMedi.setBeginDate( XmlUtil.getXmlGregorianCalendar(new TimeTool(beginDateString))); } String stopDateString = prescription.getEndDate(); if (stopDateString != null && !stopDateString.isEmpty()) { tMedi.setBeginDate( XmlUtil.getXmlGregorianCalendar(new TimeTool(stopDateString))); } String atcCode = articel.getATC_code(); if (atcCode != null && !atcCode.isEmpty()) { tMedi.setAtc(atcCode); } String pharmacode = articel.getPharmaCode(); if (pharmacode != null && !pharmacode.isEmpty()) { try { long numericPharmacode = Long.valueOf(pharmacode); tMedi.setPharmacode(numericPharmacode); } catch (NumberFormatException e) { //ignore and skip } } ArrayList<Float> floatDosis = Prescription.getDoseAsFloats(prescription.getDosis()); if (floatDosis != null) { int size = floatDosis.size(); if (size > 0) { tMedi.setDosisMo(floatDosis.get(0)); } if (size > 1) { tMedi.setDosisMi(floatDosis.get(1)); } if (size > 2) { tMedi.setDosisAb(floatDosis.get(2)); } if (size > 3) { tMedi.setDosisNa(floatDosis.get(3)); } } medis.getMedi().add(tMedi); } } return Optional.of(medis); } return Optional.empty(); } }