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 #695

Open
wants to merge 2 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 @@ -2988,6 +2988,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 @@ -6009,6 +6009,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 Patientenbestellung \u00DCber PEA aktiviert. \nEine \u00C4nderung an der E-Mail hat zur Folge, dass die Einverst\u00C4ndniserkl\u00C4rung ung\u00FCltig wird. \m\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 @@ -5987,6 +5987,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 Patientenbestellung \u00DCber PEA aktiviert. \nEine \u00C4nderung an der E-Mail hat zur Folge, dass die Einverst\u00C4ndniserkl\u00C4rung ung\u00FCltig wird. \m\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 @@ -5927,6 +5927,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. \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 @@ -49,8 +49,10 @@
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.holder.AccessControlServiceHolder;
import ch.elexis.core.services.holder.ContextServiceHolder;
import ch.elexis.core.services.holder.StickerServiceHolder;
import ch.elexis.core.services.holder.StoreToStringServiceHolder;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.core.ui.dialogs.AnschriftEingabeDialog;
Expand Down Expand Up @@ -94,7 +96,7 @@ 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;

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

List<ISticker> lSticker = StickerServiceHolder.get().getStickers(kontakt.toIContact().asIPatient());
boolean hasSticker = lSticker.stream().anyMatch(sticker -> sticker.getId().equals("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.

Wir haben jetzt schon an ein paar Stellen den literal String activate_mediorder - wir kopieren den immer, das gefällt mir nicht. Hast du einen Vorschlag wie und wo wir den als Konstante in einer Klasse ablegen können?
Dann kannst du das dort dokumentieren, und es ist auch leicht referenzen darauf zu finden?!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Ich würde eine Constants Klasse in ch.elexis.core.ui.mediorder vorschlagen.


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.SelectionAdapter;
Expand Down Expand Up @@ -91,11 +93,13 @@
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.holder.ConfigServiceHolder;
import ch.elexis.core.services.holder.CoreModelServiceHolder;
import ch.elexis.core.services.holder.StickerServiceHolder;
import ch.elexis.core.ui.Hub;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.core.ui.actions.GlobalActions;
Expand Down Expand Up @@ -246,15 +250,16 @@ private void adaptForUser(IUser user) {
private Button deceasedBtn;
private CDateTime deceasedDate;
private Button increasedTreatmentBtn;
ArrayList<InputData> fields;

void recreateUserpanel() {
// cUserfields.setRedraw(false);
if (ipp != null) {
ipp.dispose();
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 @@ -918,6 +923,26 @@ public void setPatient(final Patient p) {
refreshUi();

setUnlocked(LocalLockServiceHolder.get().isLockedLocal(p));

if (ipp != null) {
fields.get(9).getWidget().getControl().addKeyListener(new KeyAdapter() {

@Override
public void keyPressed(KeyEvent e) {
if (actPatient != null) {
List<ISticker> lSticker = StickerServiceHolder.get().getStickers(actPatient.toIPatient());
if (lSticker.stream().anyMatch(sticker -> sticker.getId().equals("activate_mediorder"))) {
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,20 @@
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.VerifyEvent;
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,7 +34,9 @@
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.holder.CoreModelServiceHolder;
import ch.elexis.core.services.holder.StickerServiceHolder;
import ch.elexis.core.types.Gender;
import ch.elexis.core.ui.locks.IUnlockable;
import ch.elexis.core.ui.util.SWTHelper;
Expand Down Expand Up @@ -161,6 +167,21 @@ public String getText(Object element) {

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

textEmail.addVerifyListener(new VerifyListener() {
Copy link
Member

Choose a reason for hiding this comment

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

Das müsstest du als Lambda implementieren können, da VerifyListener ein FunctionalInterface ist. Das reduziert den ganzen Boilerplate Code hier ...


@Override
public void verifyText(VerifyEvent e) {
var lSticker = StickerServiceHolder.get().getStickers(pat);
if (lSticker.stream().anyMatch(sticker -> sticker.getId().equals("activate_mediorder"))) {
if (!MessageDialog.openConfirm(getShell(), Messages.Core_E_Mail + " " + Messages.Core_Edit,
Messages.Mediorder_changeEmail_text)) {
e.doit = false;
}
textEmail.removeVerifyListener(this);
}
}
});

return comp;
}

Expand Down Expand Up @@ -193,7 +214,7 @@ protected void performApply() {
if (bd != null) {
pat.setDateOfBirth(LocalDateTime.ofInstant(bd.toInstant(), ZoneId.systemDefault()));
}

pat.setLastName(textNachname.getText());
pat.setFirstName(textVorname.getText());
pat.setEmail(textEmail.getText());
Expand Down