package at.medevit.elexis.impfplan.ui.billing; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.widgets.Display; import ch.artikelstamm.elexis.common.ArtikelstammItem; import ch.elexis.core.data.interfaces.IVerrechenbar; import ch.elexis.core.text.model.Samdas; import ch.elexis.core.text.model.Samdas.Record; import ch.elexis.core.ui.dialogs.SelectOrCreateOpenKonsDialog; import ch.elexis.core.ui.locks.AcquireLockBlockingUi; import ch.elexis.core.ui.locks.ILockHandler; import ch.elexis.data.Artikel; import ch.elexis.data.Konsultation; import ch.elexis.data.Patient; import ch.elexis.data.TarmedLeistung; import ch.elexis.data.Verrechnet; public class AddVaccinationToKons { private static final String TARMED_5MIN_TARIF = "00.0010"; private static Object selectKonsLock = new Object(); private Konsultation kons; private static IVerrechenbar consVerrechenbar; private Patient patient; private Artikel art; public AddVaccinationToKons(Patient patient, Artikel art, String ean){ this.patient = patient; this.art = art; if (art == null) { art = ArtikelstammItem.findByEANorGTIN(ean); } if (consVerrechenbar == null) { consVerrechenbar = TarmedLeistung.getFromCode(TARMED_5MIN_TARIF); } } public Konsultation findOrCreateKons(){ // TODO anbieten, dass Tarifpositionen vorab bestimmt werden können // String l = CoreHub.userCfg.get(PreferencePage.VAC_BILLING_POS, ""); // String[] billingPos = l.split(","); initKonsultation(); if (kons == null || !kons.isEditable(false)) { return null; } else { // (kons != null && kons.isEditable(false)) { AcquireLockBlockingUi.aquireAndRun(kons, new ILockHandler() { @Override public void lockFailed(){ // do nothing } @Override public void lockAcquired(){ kons.addLeistung(art); // update kons. text Samdas samdas = new Samdas(kons.getEintrag().getHead()); Record rec = samdas.getRecord(); String recText = rec.getText(); recText += "\nImpfung - " + art.getName(); rec.setText(recText); kons.updateEintrag(samdas.toString(), true); boolean addedCons = true; List<Verrechnet> leistungen = kons.getLeistungen(); for (Verrechnet verrechnet : leistungen) { IVerrechenbar verrechenbar = verrechnet.getVerrechenbar(); if (verrechenbar != null && verrechenbar.getCodeSystemName().equals("Tarmed") && verrechenbar.getCode().equals(TARMED_5MIN_TARIF)) { addedCons = false; break; } } if (addedCons && (consVerrechenbar != null)) { kons.addLeistung(consVerrechenbar); } } }); return kons; } } /** * get existing kons or creates new one for patient */ private void initKonsultation(){ synchronized (selectKonsLock) { kons = patient.getLetzteKons(false); if (kons == null || !kons.isEditable(false)) { Display.getDefault().syncExec(new Runnable() { @Override public void run(){ SelectOrCreateOpenKonsDialog dialog = new SelectOrCreateOpenKonsDialog(patient, "Konsultation für die automatische Verrechnung auswählen."); if (dialog.open() == Dialog.OK) { kons = dialog.getKonsultation(); } } }); } } } }