From 09b0d7de736da07448235fea9f7820eb98702595 Mon Sep 17 00:00:00 2001 From: pdenzler Date: Thu, 27 Feb 2025 09:31:27 +0100 Subject: [PATCH 1/3] [26544] dialog on mail change of activated mediorder patient --- .../src/ch/elexis/core/l10n/Messages.java | 1 + .../ch/elexis/core/l10n/messages.properties | 2 + .../elexis/core/l10n/messages_de.properties | 2 + .../elexis/core/l10n/messages_en.properties | 2 + .../elexis/core/services/StickerService.java | 8 +++- .../core/ui/contacts/views/KontaktBlatt.java | 28 ++++++++++++- .../ui/contacts/views/Patientenblatt2.java | 40 ++++++++++++++++++- .../ui/propertypage/PatientPropertyPage.java | 20 ++++++++++ .../elexis/core/services/IStickerService.java | 15 ++++++- 9 files changed, 113 insertions(+), 5 deletions(-) diff --git a/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/Messages.java b/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/Messages.java index f4ec36dc59..ea703c92b5 100644 --- a/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/Messages.java +++ b/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/Messages.java @@ -3028,6 +3028,7 @@ public class Messages extends NLS { public static String MedicsPreferencePage_documentCategoryName; public static String MedicsPreferencePage_labelUploadDirimed; public static String Medics_Page_Cannot_be_displayed; + public static String Mediorder_changeEmail_text; public static String MediportClientSetsPrefPage_btn_PartnerinfoAnzeigen; public static String MediportClientSetsPrefPage_default_paramName; public static String MediportClientSetsPrefPage_error_msg_PartnerdateiOeffnen; diff --git a/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages.properties b/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages.properties index 08cb100cfe..79de63682f 100644 --- a/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages.properties +++ b/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages.properties @@ -6183,6 +6183,8 @@ MedicsPreferencePage_labelUploadDirimed = Upload Verzeichnis [i/med] Medics_Page_Cannot_be_displayed = Medics Seite kann nicht angezeigt werden +Mediorder_changeEmail_text = The patient is activated for ordering medicaton via PEA. \nChanging the e-mail will invalidate the declaration of consent. \n\nWould you still like to save the changes? + MediportClientSetsPrefPage_btn_PartnerinfoAnzeigen = Partnerinfo anzeigen MediportClientSetsPrefPage_default_paramName = MediPort Standard diff --git a/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages_de.properties b/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages_de.properties index 10f98ab975..f0905d325e 100644 --- a/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages_de.properties +++ b/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages_de.properties @@ -6161,6 +6161,8 @@ MedicsPreferencePage_labelUploadDirimed = Upload Verzeichnis [i/med] Medics_Page_Cannot_be_displayed = Medics Seite kann nicht angezeigt werden +Mediorder_changeEmail_text = Der Patient ist f\u00FCr die Medikamentenbestellung \u00FCber PEA aktiviert. \nWird die E-Mail-Adresse ge\u00E4ndert, verliert die Einverst\u00E4ndniserkl\u00E4rung ihre G\u00FCltigkeit. \n\nM\u00F6chten Sie die \u00C4nderung trozdem speichern? + MediportClientSetsPrefPage_btn_PartnerinfoAnzeigen = Partnerinfo anzeigen MediportClientSetsPrefPage_default_paramName = MediPort Standard diff --git a/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages_en.properties b/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages_en.properties index d92b1872e6..b21d16064d 100644 --- a/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages_en.properties +++ b/bundles/ch.elexis.core.l10n/src/ch/elexis/core/l10n/messages_en.properties @@ -6101,6 +6101,8 @@ MedicsPreferencePage_labelUploadDirimed = Upload directory [i / med] Medics_Page_Cannot_be_displayed = Medics page can not be displayed +Mediorder_changeEmail_text = The patient is activated for ordering medicaton via PEA. \nChanging the e-mail will invalidate the declaration of consent. \n\nWould you still like to save the changes? + MediportClientSetsPrefPage_btn_PartnerinfoAnzeigen = Show partner info MediportClientSetsPrefPage_default_paramName = MediPort standard diff --git a/bundles/ch.elexis.core.services/src/ch/elexis/core/services/StickerService.java b/bundles/ch.elexis.core.services/src/ch/elexis/core/services/StickerService.java index 8906726a1b..346a4d4b11 100644 --- a/bundles/ch.elexis.core.services/src/ch/elexis/core/services/StickerService.java +++ b/bundles/ch.elexis.core.services/src/ch/elexis/core/services/StickerService.java @@ -106,6 +106,11 @@ public List getObjectsWithSticker(ISticker sticker, Class type) { @Override public List getStickers(Identifiable identifiable) { + return getStickers(identifiable, false); + } + + @Override + public List getStickers(Identifiable identifiable, boolean includeMediorderSticker) { if (identifiable == null) { return Collections.emptyList(); } @@ -113,7 +118,8 @@ public List getStickers(Identifiable identifiable) { List loadedStickers = new ArrayList<>(); for (StickerObjectLink link : stickerObjectLinks) { ISticker sticker = loadStickerForStickerObjectLink(link, identifiable); - if (sticker != null && !sticker.getId().equals("activate_mediorder")) { + if (sticker != null + && (includeMediorderSticker || !IStickerService.PEA_MEDIORDER_STICKER_ID.equals(sticker.getId()))) { loadedStickers.add(sticker); } } diff --git a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java index 89409e7147..ac5ddf10ad 100644 --- a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java +++ b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java @@ -56,6 +56,8 @@ import ch.elexis.core.data.util.NoPoUtil; import ch.elexis.core.l10n.Messages; import ch.elexis.core.model.IContact; +import ch.elexis.core.model.ISticker; +import ch.elexis.core.services.IStickerService; import ch.elexis.core.services.holder.AccessControlServiceHolder; import ch.elexis.core.services.holder.ContextServiceHolder; import ch.elexis.core.services.holder.StoreToStringServiceHolder; @@ -71,6 +73,7 @@ import ch.elexis.core.ui.util.LabeledInputField.InputData.Typ; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.core.ui.views.IRefreshable; +import ch.elexis.core.utils.OsgiServiceUtil; import ch.elexis.data.Kontakt; import ch.elexis.data.Labor; import ch.elexis.data.Organisation; @@ -101,7 +104,9 @@ public class KontaktBlatt extends Composite implements IRefreshable, IUnlockable private final ScrolledForm form; private final FormToolkit tk; AutoForm afDetails; - Listener mandantListener, checkIfContactExistsListener; + Listener mandantListener, checkIfContactExistsListener, changeEmailListener; + + private IStickerService stickerService; static final InputData[] def = new InputData[] { new InputData(Messages.Core_Name, Kontakt.FLD_NAME1, Typ.STRING, null), @@ -207,6 +212,10 @@ void unlockedPatient(@Optional @UIEventTopic(ElexisEventTopics.EVENT_LOCK_RELEAS public KontaktBlatt(Composite parent, int style, IViewSite vs) { super(parent, style); + + stickerService = OsgiServiceUtil.getService(IStickerService.class) + .orElseThrow(() -> new IllegalStateException()); + site = vs; tk = UiDesk.getToolkit(); setLayout(new FillLayout()); @@ -266,6 +275,17 @@ public void handleEvent(Event event) { }; + changeEmailListener = new Listener() { + @Override + public void handleEvent(Event event) { + if (!MessageDialog.openConfirm(getShell(), Messages.Core_E_Mail + " " + Messages.Core_Edit, + Messages.Mediorder_changeEmail_text)) { + event.doit = false; + } + def[15].getWidget().getControl().removeListener(SWT.KeyDown, changeEmailListener); + } + }; + Composite cAnschrift = tk.createComposite(body); cAnschrift.setLayout(new GridLayout(2, false)); cAnschrift.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); @@ -520,14 +540,20 @@ private void addListener(Kontakt kontakt) { try { boolean mandatorEditGuard = kontakt.istMandant(); + List lSticker = stickerService.getStickers(kontakt.toIContact().asIPatient(), true); + boolean hasSticker = lSticker.stream().anyMatch( + sticker -> IStickerService.PEA_MEDIORDER_STICKER_ID.equals(sticker.getId())); for (int i = 0; i < def.length; i++) { def[i].getWidget().getControl().removeListener(SWT.KeyDown, mandantListener); def[i].getWidget().getControl().removeListener(SWT.CHANGED, checkIfContactExistsListener); + def[i].getWidget().getControl().removeListener(SWT.KeyDown, changeEmailListener); } if (mandatorEditGuard) { for (int i = 0; i < def.length; i++) { def[i].getWidget().getControl().addListener(SWT.KeyDown, mandantListener); } + } else if (hasSticker) { + def[15].getWidget().getControl().addListener(SWT.KeyDown, changeEmailListener); } else { // Listener deliberately applied to name1, name2 and sex def[0].getWidget().getControl().addListener(SWT.CHANGED, checkIfContactExistsListener); diff --git a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java index a4d37430b5..5c8bd324c7 100644 --- a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java +++ b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java @@ -40,6 +40,7 @@ import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; @@ -53,6 +54,7 @@ import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; +import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.events.ModifyEvent; @@ -68,6 +70,7 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IViewSite; import org.eclipse.ui.PlatformUI; @@ -99,9 +102,11 @@ import ch.elexis.core.l10n.Messages; import ch.elexis.core.model.IContact; import ch.elexis.core.model.IPatient; +import ch.elexis.core.model.ISticker; import ch.elexis.core.model.IUser; import ch.elexis.core.model.MaritalStatus; import ch.elexis.core.model.PatientConstants; +import ch.elexis.core.services.IStickerService; import ch.elexis.core.services.holder.ConfigServiceHolder; import ch.elexis.core.services.holder.CoreModelServiceHolder; import ch.elexis.core.ui.Hub; @@ -135,6 +140,7 @@ import ch.elexis.core.ui.views.contribution.ViewContributionHelper; import ch.elexis.core.ui.views.controls.StickerComposite; import ch.elexis.core.utils.CoreUtil; +import ch.elexis.core.utils.OsgiServiceUtil; import ch.elexis.data.BezugsKontakt; import ch.elexis.data.Kontakt; import ch.elexis.data.Labor; @@ -255,6 +261,9 @@ private void adaptForUser(IUser user) { private Button deceasedBtn; private CDateTime deceasedDate; private Button increasedTreatmentBtn; + ArrayList fields; + + IStickerService stickerService; void recreateUserpanel() { // cUserfields.setRedraw(false); @@ -263,7 +272,7 @@ void recreateUserpanel() { ipp = null; } - ArrayList fields = new ArrayList<>(20); + fields = new ArrayList<>(20); fields.add(new InputData(Messages.Core_Name, Patient.FLD_NAME, InputData.Typ.STRING, null)); // $NON-NLS-1$ fields.add(new InputData(Messages.Core_Firstname, Patient.FLD_FIRSTNAME, InputData.Typ.STRING, null)); // $NON-NLS-1$ fields.add(new InputData(Messages.Core_Enter_Birthdate, Patient.BIRTHDATE, InputData.Typ.DATE, null)); // $NON-NLS-1$ @@ -515,6 +524,10 @@ public void reloadContent(Object po, InputData ltf) { Patientenblatt2(final Composite parent, final IViewSite site) { super(parent, SWT.NONE); viewsite = site; + + stickerService = OsgiServiceUtil.getService(IStickerService.class) + .orElseThrow(() -> new IllegalStateException()); + makeActions(); parent.setLayout(new FillLayout()); setLayout(new GridLayout()); @@ -941,6 +954,31 @@ public void setPatient(final Patient p) { refreshUi(); setUnlocked(LocalLockServiceHolder.get().isLockedLocal(p)); + + if (ipp != null) { + Control control = fields.get(9).getWidget().getControl(); + for (Listener listener : control.getListeners(SWT.KeyDown)) { + control.removeListener(SWT.KeyDown, listener); + } + fields.get(9).getWidget().getControl().addKeyListener(new KeyAdapter() { + + @Override + public void keyPressed(KeyEvent e) { + if (actPatient != null) { + + List lSticker = stickerService.getStickers(actPatient.toIPatient(), true); + if (lSticker.stream().anyMatch( + sticker -> IStickerService.PEA_MEDIORDER_STICKER_ID.equals(sticker.getId()))) { + if (!MessageDialog.openConfirm(getShell(), Messages.Core_E_Mail + " " + Messages.Core_Edit, + Messages.Mediorder_changeEmail_text)) { + e.doit = false; + } + fields.get(9).getWidget().getControl().removeKeyListener(this); + } + } + } + }); + } } public void refreshUi() { diff --git a/bundles/ch.elexis.core.ui/src/ch/elexis/core/ui/propertypage/PatientPropertyPage.java b/bundles/ch.elexis.core.ui/src/ch/elexis/core/ui/propertypage/PatientPropertyPage.java index fd15cdadc2..f24f843e63 100644 --- a/bundles/ch.elexis.core.ui/src/ch/elexis/core/ui/propertypage/PatientPropertyPage.java +++ b/bundles/ch.elexis.core.ui/src/ch/elexis/core/ui/propertypage/PatientPropertyPage.java @@ -8,9 +8,11 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; +import java.util.List; import org.apache.commons.lang3.StringUtils; import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.LabelProvider; @@ -30,10 +32,13 @@ import ch.elexis.core.data.service.LocalLockServiceHolder; import ch.elexis.core.l10n.Messages; import ch.elexis.core.model.IPatient; +import ch.elexis.core.model.ISticker; +import ch.elexis.core.services.IStickerService; import ch.elexis.core.services.holder.CoreModelServiceHolder; import ch.elexis.core.types.Gender; import ch.elexis.core.ui.locks.IUnlockable; import ch.elexis.core.ui.util.SWTHelper; +import ch.elexis.core.utils.OsgiServiceUtil; public class PatientPropertyPage extends PropertyPage implements IWorkbenchPropertyPage, IUnlockable { @@ -51,6 +56,8 @@ public class PatientPropertyPage extends PropertyPage implements IWorkbenchPrope private CDateTime geburtsdatum; private ComboViewer comboGeschlecht; + + private IStickerService stickerService; public PatientPropertyPage() { super(); @@ -161,12 +168,25 @@ public String getText(Object element) { setUnlocked(LocalLockServiceHolder.get().isLocked(pat)); + textEmail.addVerifyListener(e -> { + List lSticker = stickerService.getStickers(pat, true); + if (lSticker.stream() + .anyMatch(sticker -> sticker.getId().equals(IStickerService.PEA_MEDIORDER_STICKER_ID))) { + if (!MessageDialog.openConfirm(getShell(), Messages.Core_E_Mail + " " + Messages.Core_Edit, + Messages.Mediorder_changeEmail_text)) { + e.doit = false; + } + } + }); + return comp; } private void init() { IAdaptable adapt = getElement(); pat = (IPatient) adapt.getAdapter(IPatient.class); + + stickerService = OsgiServiceUtil.getService(IStickerService.class).orElseThrow(() -> new IllegalStateException()); } private Date getGeburtsdatum() { diff --git a/bundles/ch.elexis.core/src/ch/elexis/core/services/IStickerService.java b/bundles/ch.elexis.core/src/ch/elexis/core/services/IStickerService.java index 970e5f273d..961fe0f708 100644 --- a/bundles/ch.elexis.core/src/ch/elexis/core/services/IStickerService.java +++ b/bundles/ch.elexis.core/src/ch/elexis/core/services/IStickerService.java @@ -9,6 +9,7 @@ public interface IStickerService { String STICKER_ID_READONLY = "readOnly"; + String PEA_MEDIORDER_STICKER_ID = "activate_mediorder"; /** * Whether the identifiable is tagged with the given sticker @@ -20,14 +21,24 @@ public interface IStickerService { public boolean hasSticker(Identifiable identifiable, ISticker iSticker); /** - * Get all stickers for the {@link Identifiable}. The returned list is sorted by - * {@link ISticker#getImportance()}. + * Get all stickers for the {@link Identifiable} excluding pea mediorder + * sticker. The returned list is sorted by {@link ISticker#getImportance()}. * * @param identifiable * @return */ public List getStickers(Identifiable identifiable); + /** + * Get all stickers for the {@link Identifiable}.The returned list is sorted by + * {@link ISticker#getImportance()}. + * + * @param identifiable + * @param includeMediorderSticker + * @return + */ + public List getStickers(Identifiable identifiable, boolean includeMediorderSticker); + /** * Get the sticker with the highest importance for the {@link Identifiable}. * From 4b8be7b5f2d2f4fd514ab90f509ca4ad69fcea00 Mon Sep 17 00:00:00 2001 From: pdenzler Date: Thu, 27 Feb 2025 10:03:57 +0100 Subject: [PATCH 2/3] [26544] inject IStickerService --- .../ch/elexis/core/ui/contacts/views/KontaktBlatt.java | 6 +----- .../ch/elexis/core/ui/contacts/views/Patientenblatt2.java | 8 ++------ 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java index ac5ddf10ad..343e33b676 100644 --- a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java +++ b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java @@ -73,7 +73,6 @@ import ch.elexis.core.ui.util.LabeledInputField.InputData.Typ; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.core.ui.views.IRefreshable; -import ch.elexis.core.utils.OsgiServiceUtil; import ch.elexis.data.Kontakt; import ch.elexis.data.Labor; import ch.elexis.data.Organisation; @@ -106,6 +105,7 @@ public class KontaktBlatt extends Composite implements IRefreshable, IUnlockable AutoForm afDetails; Listener mandantListener, checkIfContactExistsListener, changeEmailListener; + @Inject private IStickerService stickerService; static final InputData[] def = new InputData[] { @@ -212,10 +212,6 @@ void unlockedPatient(@Optional @UIEventTopic(ElexisEventTopics.EVENT_LOCK_RELEAS public KontaktBlatt(Composite parent, int style, IViewSite vs) { super(parent, style); - - stickerService = OsgiServiceUtil.getService(IStickerService.class) - .orElseThrow(() -> new IllegalStateException()); - site = vs; tk = UiDesk.getToolkit(); setLayout(new FillLayout()); diff --git a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java index 5c8bd324c7..ed07952f91 100644 --- a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java +++ b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java @@ -140,7 +140,6 @@ import ch.elexis.core.ui.views.contribution.ViewContributionHelper; import ch.elexis.core.ui.views.controls.StickerComposite; import ch.elexis.core.utils.CoreUtil; -import ch.elexis.core.utils.OsgiServiceUtil; import ch.elexis.data.BezugsKontakt; import ch.elexis.data.Kontakt; import ch.elexis.data.Labor; @@ -263,7 +262,8 @@ private void adaptForUser(IUser user) { private Button increasedTreatmentBtn; ArrayList fields; - IStickerService stickerService; + @Inject + private IStickerService stickerService; void recreateUserpanel() { // cUserfields.setRedraw(false); @@ -524,10 +524,6 @@ public void reloadContent(Object po, InputData ltf) { Patientenblatt2(final Composite parent, final IViewSite site) { super(parent, SWT.NONE); viewsite = site; - - stickerService = OsgiServiceUtil.getService(IStickerService.class) - .orElseThrow(() -> new IllegalStateException()); - makeActions(); parent.setLayout(new FillLayout()); setLayout(new GridLayout()); From 4ba75bf1fdbc44cc0cdc874ef9861e8f810d085f Mon Sep 17 00:00:00 2001 From: pdenzler Date: Fri, 28 Feb 2025 09:15:37 +0100 Subject: [PATCH 3/3] [26544] remove mediorderSticker from IStickerService --- .../elexis/core/services/StickerService.java | 8 +------- .../core/ui/contacts/views/KontaktBlatt.java | 5 +++-- .../ui/contacts/views/Patientenblatt2.java | 5 +++-- .../ui/propertypage/PatientPropertyPage.java | 20 +++++++++++++++---- .../elexis/core/model/StickerConstants.java | 7 +++++++ .../elexis/core/services/IStickerService.java | 11 ---------- 6 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 bundles/ch.elexis.core/src/ch/elexis/core/model/StickerConstants.java diff --git a/bundles/ch.elexis.core.services/src/ch/elexis/core/services/StickerService.java b/bundles/ch.elexis.core.services/src/ch/elexis/core/services/StickerService.java index 346a4d4b11..af84bc83d0 100644 --- a/bundles/ch.elexis.core.services/src/ch/elexis/core/services/StickerService.java +++ b/bundles/ch.elexis.core.services/src/ch/elexis/core/services/StickerService.java @@ -106,11 +106,6 @@ public List getObjectsWithSticker(ISticker sticker, Class type) { @Override public List getStickers(Identifiable identifiable) { - return getStickers(identifiable, false); - } - - @Override - public List getStickers(Identifiable identifiable, boolean includeMediorderSticker) { if (identifiable == null) { return Collections.emptyList(); } @@ -118,8 +113,7 @@ public List getStickers(Identifiable identifiable, boolean includeMedi List loadedStickers = new ArrayList<>(); for (StickerObjectLink link : stickerObjectLinks) { ISticker sticker = loadStickerForStickerObjectLink(link, identifiable); - if (sticker != null - && (includeMediorderSticker || !IStickerService.PEA_MEDIORDER_STICKER_ID.equals(sticker.getId()))) { + if (sticker != null) { loadedStickers.add(sticker); } } diff --git a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java index 343e33b676..ef8a223686 100644 --- a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java +++ b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/KontaktBlatt.java @@ -57,6 +57,7 @@ import ch.elexis.core.l10n.Messages; import ch.elexis.core.model.IContact; import ch.elexis.core.model.ISticker; +import ch.elexis.core.model.StickerConstants; import ch.elexis.core.services.IStickerService; import ch.elexis.core.services.holder.AccessControlServiceHolder; import ch.elexis.core.services.holder.ContextServiceHolder; @@ -536,9 +537,9 @@ private void addListener(Kontakt kontakt) { try { boolean mandatorEditGuard = kontakt.istMandant(); - List lSticker = stickerService.getStickers(kontakt.toIContact().asIPatient(), true); + List lSticker = stickerService.getStickers(kontakt.toIContact().asIPatient()); boolean hasSticker = lSticker.stream().anyMatch( - sticker -> IStickerService.PEA_MEDIORDER_STICKER_ID.equals(sticker.getId())); + sticker -> StickerConstants.PEA_MEDIORDER_STICKER_ID.equals(sticker.getId())); for (int i = 0; i < def.length; i++) { def[i].getWidget().getControl().removeListener(SWT.KeyDown, mandantListener); def[i].getWidget().getControl().removeListener(SWT.CHANGED, checkIfContactExistsListener); diff --git a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java index ed07952f91..5a066eee8f 100644 --- a/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java +++ b/bundles/ch.elexis.core.ui.contacts/src/ch/elexis/core/ui/contacts/views/Patientenblatt2.java @@ -106,6 +106,7 @@ import ch.elexis.core.model.IUser; import ch.elexis.core.model.MaritalStatus; import ch.elexis.core.model.PatientConstants; +import ch.elexis.core.model.StickerConstants; import ch.elexis.core.services.IStickerService; import ch.elexis.core.services.holder.ConfigServiceHolder; import ch.elexis.core.services.holder.CoreModelServiceHolder; @@ -962,9 +963,9 @@ public void setPatient(final Patient p) { public void keyPressed(KeyEvent e) { if (actPatient != null) { - List lSticker = stickerService.getStickers(actPatient.toIPatient(), true); + List lSticker = stickerService.getStickers(actPatient.toIPatient()); if (lSticker.stream().anyMatch( - sticker -> IStickerService.PEA_MEDIORDER_STICKER_ID.equals(sticker.getId()))) { + sticker -> StickerConstants.PEA_MEDIORDER_STICKER_ID.equals(sticker.getId()))) { if (!MessageDialog.openConfirm(getShell(), Messages.Core_E_Mail + " " + Messages.Core_Edit, Messages.Mediorder_changeEmail_text)) { e.doit = false; diff --git a/bundles/ch.elexis.core.ui/src/ch/elexis/core/ui/propertypage/PatientPropertyPage.java b/bundles/ch.elexis.core.ui/src/ch/elexis/core/ui/propertypage/PatientPropertyPage.java index f24f843e63..6e06e5bae4 100644 --- a/bundles/ch.elexis.core.ui/src/ch/elexis/core/ui/propertypage/PatientPropertyPage.java +++ b/bundles/ch.elexis.core.ui/src/ch/elexis/core/ui/propertypage/PatientPropertyPage.java @@ -20,6 +20,7 @@ import org.eclipse.nebula.widgets.cdatetime.CDT; import org.eclipse.nebula.widgets.cdatetime.CDateTime; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.VerifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; @@ -33,6 +34,7 @@ import ch.elexis.core.l10n.Messages; import ch.elexis.core.model.IPatient; import ch.elexis.core.model.ISticker; +import ch.elexis.core.model.StickerConstants; import ch.elexis.core.services.IStickerService; import ch.elexis.core.services.holder.CoreModelServiceHolder; import ch.elexis.core.types.Gender; @@ -57,6 +59,8 @@ public class PatientPropertyPage extends PropertyPage implements IWorkbenchPrope private ComboViewer comboGeschlecht; + private VerifyListener emailVerifyListener; + private IStickerService stickerService; public PatientPropertyPage() { @@ -168,16 +172,18 @@ public String getText(Object element) { setUnlocked(LocalLockServiceHolder.get().isLocked(pat)); - textEmail.addVerifyListener(e -> { - List lSticker = stickerService.getStickers(pat, true); + emailVerifyListener = e -> { + List lSticker = stickerService.getStickers(pat); if (lSticker.stream() - .anyMatch(sticker -> sticker.getId().equals(IStickerService.PEA_MEDIORDER_STICKER_ID))) { + .anyMatch(sticker -> StickerConstants.PEA_MEDIORDER_STICKER_ID.equals(sticker.getId()))) { if (!MessageDialog.openConfirm(getShell(), Messages.Core_E_Mail + " " + Messages.Core_Edit, Messages.Mediorder_changeEmail_text)) { e.doit = false; } + textEmail.removeVerifyListener(emailVerifyListener); } - }); + }; + textEmail.addVerifyListener(emailVerifyListener); return comp; } @@ -244,4 +250,10 @@ public void setUnlocked(boolean unlocked) { geburtsdatum.setEditable(unlocked); comboGeschlecht.getControl().setEnabled(unlocked); } + + @Override + public void dispose() { + OsgiServiceUtil.ungetService(IStickerService.class); + super.dispose(); + } } diff --git a/bundles/ch.elexis.core/src/ch/elexis/core/model/StickerConstants.java b/bundles/ch.elexis.core/src/ch/elexis/core/model/StickerConstants.java new file mode 100644 index 0000000000..0dc0c33d11 --- /dev/null +++ b/bundles/ch.elexis.core/src/ch/elexis/core/model/StickerConstants.java @@ -0,0 +1,7 @@ +package ch.elexis.core.model; + +public class StickerConstants { + + public static final String PEA_MEDIORDER_STICKER_ID = "activate_mediorder"; + +} diff --git a/bundles/ch.elexis.core/src/ch/elexis/core/services/IStickerService.java b/bundles/ch.elexis.core/src/ch/elexis/core/services/IStickerService.java index 961fe0f708..55c98aa87f 100644 --- a/bundles/ch.elexis.core/src/ch/elexis/core/services/IStickerService.java +++ b/bundles/ch.elexis.core/src/ch/elexis/core/services/IStickerService.java @@ -9,7 +9,6 @@ public interface IStickerService { String STICKER_ID_READONLY = "readOnly"; - String PEA_MEDIORDER_STICKER_ID = "activate_mediorder"; /** * Whether the identifiable is tagged with the given sticker @@ -29,16 +28,6 @@ public interface IStickerService { */ public List getStickers(Identifiable identifiable); - /** - * Get all stickers for the {@link Identifiable}.The returned list is sorted by - * {@link ISticker#getImportance()}. - * - * @param identifiable - * @param includeMediorderSticker - * @return - */ - public List getStickers(Identifiable identifiable, boolean includeMediorderSticker); - /** * Get the sticker with the highest importance for the {@link Identifiable}. *