Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[26544] dialog on mail change of activated mediorder patient #799

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public List<ISticker> getStickers(Identifiable identifiable) {
List<ISticker> loadedStickers = new ArrayList<>();
for (StickerObjectLink link : stickerObjectLinks) {
ISticker sticker = loadStickerForStickerObjectLink(link, identifiable);
if (sticker != null && !sticker.getId().equals("activate_mediorder")) {
if (sticker != null) {
loadedStickers.add(sticker);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@
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.model.StickerConstants;
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;
Expand Down Expand Up @@ -101,7 +104,10 @@ 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;

@Inject
private IStickerService stickerService;

static final InputData[] def = new InputData[] {
new InputData(Messages.Core_Name, Kontakt.FLD_NAME1, Typ.STRING, null),
Expand Down Expand Up @@ -266,6 +272,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));
Expand Down Expand Up @@ -520,14 +537,20 @@ private void addListener(Kontakt kontakt) {
try {
boolean mandatorEditGuard = kontakt.istMandant();

List<ISticker> lSticker = stickerService.getStickers(kontakt.toIContact().asIPatient());
boolean hasSticker = lSticker.stream().anyMatch(
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);
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -99,9 +102,12 @@
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.model.StickerConstants;
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;
Expand Down Expand Up @@ -255,6 +261,10 @@ private void adaptForUser(IUser user) {
private Button deceasedBtn;
private CDateTime deceasedDate;
private Button increasedTreatmentBtn;
ArrayList<InputData> fields;

@Inject
private IStickerService stickerService;

void recreateUserpanel() {
// cUserfields.setRedraw(false);
Expand All @@ -263,7 +273,7 @@ void recreateUserpanel() {
ipp = null;
}

ArrayList<InputData> 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$
Expand Down Expand Up @@ -941,6 +951,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<ISticker> lSticker = stickerService.getStickers(actPatient.toIPatient());
if (lSticker.stream().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;
}
fields.get(9).getWidget().getControl().removeKeyListener(this);
}
}
}
});
}
}

public void refreshUi() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,19 @@
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;
import org.eclipse.jface.viewers.StructuredSelection;
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;
Expand All @@ -30,10 +33,14 @@
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.model.StickerConstants;
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 {

Expand All @@ -51,6 +58,10 @@ public class PatientPropertyPage extends PropertyPage implements IWorkbenchPrope
private CDateTime geburtsdatum;

private ComboViewer comboGeschlecht;

private VerifyListener emailVerifyListener;

private IStickerService stickerService;

public PatientPropertyPage() {
super();
Expand Down Expand Up @@ -161,12 +172,27 @@ public String getText(Object element) {

setUnlocked(LocalLockServiceHolder.get().isLocked(pat));

emailVerifyListener = e -> {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Du verwendest den IStickerService ja nur an dieser Stelle! Hol ihn doch hier ab und release ihn gleich nach der Verwendung wieder. dispose sollte generell nicht verwendet werden, und es gibt auch keinen Grund das hier zu tun! Zudem musst die ungetService auf das service-objekt, nicht die klassen anwenden!

Du musst IStickerService gar nicht im Field anlegen!

List<ISticker> lSticker = stickerService.getStickers(pat);
if (lSticker.stream()
.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;
}

private void init() {
IAdaptable adapt = getElement();
pat = (IPatient) adapt.getAdapter(IPatient.class);

stickerService = OsgiServiceUtil.getService(IStickerService.class).orElseThrow(() -> new IllegalStateException());
}

private Date getGeburtsdatum() {
Expand Down Expand Up @@ -224,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();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ch.elexis.core.model;

public class StickerConstants {

public static final String PEA_MEDIORDER_STICKER_ID = "activate_mediorder";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bitte kurze JavaDoc


}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ 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()}.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

? Die JavaDoc stimmt doch so nicht mehr oder?

*
* @param identifiable
* @return
Expand Down