Skip to content

Commit

Permalink
[26144] add new medics lab order using webais
Browse files Browse the repository at this point in the history
  • Loading branch information
huthomas committed Feb 20, 2024
1 parent 09d0a27 commit b95469d
Show file tree
Hide file tree
Showing 9 changed files with 637 additions and 483 deletions.
7 changes: 6 additions & 1 deletion bundles/ch.elexis.laborimport.medics.v2/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,12 @@ Bundle-Localization: plugin
Bundle-ActivationPolicy: lazy
Bundle-Activator: ch.elexis.labor.medics.v2.MedicsActivator
Bundle-Vendor: medshare.net
Import-Package: org.apache.commons.lang3;version="3.12.0"
Import-Package: com.google.gson;version="2.9.1",
javax.ws.rs.client,
javax.ws.rs.core;version="2.1.6",
org.apache.commons.lang3,
org.glassfish.jersey,
org.glassfish.jersey.client
Require-Bundle: ch.elexis.core.l10n,
ch.elexis.core.data;bundle-version="3.9.0",
ch.elexis.core.hl7.v2x;bundle-version="3.9.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,63 +1,117 @@
package ch.elexis.labor.medics.v2;

import org.apache.commons.lang3.StringUtils;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.service.ContextServiceHolder;
import ch.elexis.core.model.IMandator;
import ch.elexis.core.services.holder.ConfigServiceHolder;
import ch.elexis.core.services.holder.CoreModelServiceHolder;
import ch.elexis.core.ui.preferences.SettingsPreferenceStore;
import ch.elexis.labor.medics.v2.order.WebAis;

/**
* Einstellungen für Medics Plugin
*
* @author immi
*/
public class MedicsPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

public static final String DOWNLOAD_DIR = "medics/download"; //$NON-NLS-1$
public static final String UPLOAD_DIR = "medics/upload"; //$NON-NLS-1$
public static final String IMED_DIR = "medics/uploadimed"; //$NON-NLS-1$
public static final String ARCHIV_DIR = "medics/archiv"; //$NON-NLS-1$
public static final String ERROR_DIR = "medics/error"; //$NON-NLS-1$
public static final String I_MED_URL = "medics/imed/url"; //$NON-NLS-1$
public static final String BROWSER_EXTERN = "medics/imed/extern"; //$NON-NLS-1$
public static final String DOKUMENT_CATEGORY = "medics/extern"; //$NON-NLS-1$
public static final String DELETE_ARCHIV_DAYS = "medics/del_archiv/days"; //$NON-NLS-1$

private static final String DEFAULT_DOWNLOAD = StringUtils.EMPTY;
private static final String DEFAULT_UPLOAD = StringUtils.EMPTY;
private static final String DEFAULT_IMED = StringUtils.EMPTY;
private static final String DEFAULT_ARCHIV = StringUtils.EMPTY;
private static final String DEFAULT_MEDICS_URL = Messages.MedicsPreferencePage_defaultMedicsUrl;
private static final boolean DEFAULT_BROWSER_EXTERN = false;
private static final String DEFAULT_DOKUMENT_CATEGORY = Messages.MedicsPreferencePage_documentCategoryName;
private static final int DEFAULT_DELETE_ARCHIV_DAYS = 30;

private List<WebAisMandatorComposite> webaisMandators;

public MedicsPreferencePage() {
super(GRID);
setPreferenceStore(new SettingsPreferenceStore(CoreHub.localCfg));
getPreferenceStore().setDefault(DOWNLOAD_DIR, DEFAULT_DOWNLOAD);
getPreferenceStore().setDefault(UPLOAD_DIR, DEFAULT_UPLOAD);
getPreferenceStore().setDefault(IMED_DIR, DEFAULT_IMED);
getPreferenceStore().setDefault(ARCHIV_DIR, DEFAULT_ARCHIV);
getPreferenceStore().setDefault(I_MED_URL, DEFAULT_MEDICS_URL);
getPreferenceStore().setDefault(BROWSER_EXTERN, DEFAULT_BROWSER_EXTERN);
getPreferenceStore().setDefault(DOKUMENT_CATEGORY, DEFAULT_DOKUMENT_CATEGORY);
getPreferenceStore().setDefault(DELETE_ARCHIV_DAYS, DEFAULT_DELETE_ARCHIV_DAYS);
}

@Override
protected Control createContents(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new GridLayout());
container.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

Composite fieldEditorContainer = new Composite(container, SWT.NONE);
fieldEditorContainer.setLayout(new GridLayout());
fieldEditorContainer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

// create field editors
super.createContents(fieldEditorContainer);
getFieldEditorParent().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

Label separator = new Label(container, SWT.HORIZONTAL | SWT.SEPARATOR);
separator.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

Composite mandatorsContainer = new Composite(container, SWT.NONE);
mandatorsContainer.setLayout(new GridLayout());
mandatorsContainer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

if (ContextServiceHolder.get().getActiveUser().isPresent()
&& ContextServiceHolder.get().getActiveUser().get().isAdministrator()) {
Button useTestBtn = new Button(mandatorsContainer, SWT.CHECK);
useTestBtn.setText("Test Portal URL verwenden (nur als Administrator)");
useTestBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean value = ConfigServiceHolder.get().get(WebAis.CFG_MEDICS_LABORDER_TESTMODE, false);

ConfigServiceHolder.get().set(WebAis.CFG_MEDICS_LABORDER_TESTMODE, !value);
}
});
useTestBtn.setSelection(ConfigServiceHolder.get().get(WebAis.CFG_MEDICS_LABORDER_TESTMODE, false));
}
List<IMandator> mandators = CoreModelServiceHolder.get().getQuery(IMandator.class).execute();
mandators.sort((l, r) -> {
return l.getLabel().compareTo(r.getLabel());
});
webaisMandators = new ArrayList<>();
for (IMandator mandator : mandators) {
WebAisMandatorComposite composite = new WebAisMandatorComposite(mandator, this, mandatorsContainer,
SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
webaisMandators.add(composite);
}

return container;
}

public void updateMandatorComposites() {
webaisMandators.forEach(w -> w.updateCredentials());
}

@Override
protected void createFieldEditors() {
addField(new DirectoryFieldEditor(DOWNLOAD_DIR, Messages.MedicsPreferencePage_labelDownloadDir,
getFieldEditorParent()));
addField(new DirectoryFieldEditor(UPLOAD_DIR, Messages.MedicsPreferencePage_labelUploadDir,
getFieldEditorParent()));
addField(new DirectoryFieldEditor(IMED_DIR, Messages.MedicsPreferencePage_labelUploadDirimed,
getFieldEditorParent()));
addField(new DirectoryFieldEditor(ARCHIV_DIR, Messages.MedicsPreferencePage_labelArchivDir,
Expand All @@ -69,47 +123,23 @@ protected void createFieldEditors() {
addField(new StringFieldEditor(DELETE_ARCHIV_DAYS, "Archiv bereinigen (Tage)", getFieldEditorParent()));
}

@Override
public void init(IWorkbench workbench) {
}

public static String getUploadDir() {
return CoreHub.localCfg.get(UPLOAD_DIR, DEFAULT_UPLOAD);
}

public static String getUploadDirimed() {
return CoreHub.localCfg.get(IMED_DIR, DEFAULT_IMED);
}

public static String getDownloadDir() {
return CoreHub.localCfg.get(DOWNLOAD_DIR, DEFAULT_DOWNLOAD);
}

public static String getArchivDir() {
return CoreHub.localCfg.get(ARCHIV_DIR, DEFAULT_ARCHIV);
}

public static String getErrorDir() {
return CoreHub.localCfg.get(ERROR_DIR, null);
public static String getDokumentKategorie() {
return CoreHub.localCfg.get(DOKUMENT_CATEGORY, DEFAULT_DOKUMENT_CATEGORY);
}

public static int getDeleteArchivDays() {
return CoreHub.localCfg.get(DELETE_ARCHIV_DAYS, DEFAULT_DELETE_ARCHIV_DAYS);
}

public static URL getIMedUrl() throws MalformedURLException {
String urlStr = CoreHub.localCfg.get(I_MED_URL, DEFAULT_MEDICS_URL);
if (!urlStr.startsWith("http")) { //$NON-NLS-1$
urlStr += "http://" + urlStr; //$NON-NLS-1$
}
return new URL(urlStr);
}

public static boolean showExtern() {
return CoreHub.localCfg.get(BROWSER_EXTERN, DEFAULT_BROWSER_EXTERN);
public static String getUploadDirimed() {
return CoreHub.localCfg.get(IMED_DIR, DEFAULT_IMED);
}

public static String getDokumentKategorie() {
return CoreHub.localCfg.get(DOKUMENT_CATEGORY, DEFAULT_DOKUMENT_CATEGORY);
@Override
public void init(IWorkbench workbench) {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
package ch.elexis.labor.medics.v2;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

import ch.elexis.core.data.service.ContextServiceHolder;
import ch.elexis.core.model.IMandator;
import ch.elexis.core.services.holder.ConfigServiceHolder;
import ch.elexis.core.services.holder.CoreModelServiceHolder;
import ch.elexis.core.ui.dialogs.base.InputDialog;
import ch.elexis.labor.medics.v2.order.WebAis;

public class WebAisMandatorComposite extends Composite {

private IMandator mandator;

private Button btnCredentials;

private MedicsPreferencePage medicsPreferencePage;

public WebAisMandatorComposite(IMandator mandator, MedicsPreferencePage medicsPreferencePage, Composite container,
int style) {
super(container, style);
this.mandator = mandator;
this.medicsPreferencePage = medicsPreferencePage;
createContent();
}

private void createContent() {
setLayout(new GridLayout());

Label lab = new Label(this, SWT.NONE);
lab.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
lab.setText(mandator.getLabel());

btnCredentials = new Button(this, SWT.PUSH);
btnCredentials.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
CredentialsDialog dialog = new CredentialsDialog(getShell());
if (dialog.open() == InputDialog.OK) {
updateCredentials();
}
}
});
updateCredentials();
}

public void updateCredentials() {
if (WebAis.hasCredentials(mandator)) {
btnCredentials.setText("Anmelde Informationen überschrieben");
} else {
btnCredentials.setText("Anmelde Informationen setzen");
}
layout();
}

private void setDefaultCredentialsConfig(String customer, String username, String password, String requester) {
List<IMandator> mandators = CoreModelServiceHolder.get().getQuery(IMandator.class).execute();
mandators.sort((l, r) -> {
return l.getLabel().compareTo(r.getLabel());
});
mandators.forEach(m -> {
if(!WebAis.hasCredentials(m)) {
setCredentialsConfig(m, customer, username, password, requester);
}
});
medicsPreferencePage.updateMandatorComposites();
}

private void setCredentialsConfig(IMandator mandator, String customer, String username, String password,
String requester) {
ConfigServiceHolder.get().set(mandator, WebAis.CFG_MEDICS_LABORDER_CUSTOMER, customer);
ConfigServiceHolder.get().set(mandator, WebAis.CFG_MEDICS_LABORDER_USERNAME, username);
ConfigServiceHolder.get().set(mandator, WebAis.CFG_MEDICS_LABORDER_PASSWORD, password);
ConfigServiceHolder.get().set(mandator, WebAis.CFG_MEDICS_LABORDER_REQUESTER, requester);
}

private class CredentialsDialog extends Dialog {

private Text customerTxt;
private Text usernameTxt;
private Text passwordTxt;
private Text requesterTxt;

protected CredentialsDialog(Shell parentShell) {
super(parentShell);
}

@Override
protected Control createDialogArea(Composite parent) {
Composite ret = (Composite) super.createDialogArea(parent);

customerTxt = new Text(ret, SWT.BORDER);
customerTxt.setMessage("Customer");
customerTxt.setToolTipText("Customer");
customerTxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

usernameTxt = new Text(ret, SWT.BORDER);
usernameTxt.setMessage("Username");
usernameTxt.setToolTipText("Username");
usernameTxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

passwordTxt = new Text(ret, SWT.BORDER);
passwordTxt.setMessage("Password");
passwordTxt.setToolTipText("Password");
passwordTxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

requesterTxt = new Text(ret, SWT.BORDER);
requesterTxt.setMessage("Requester");
requesterTxt.setToolTipText("Requester");
requesterTxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

loadFromConfig();

Button clear = new Button(ret, SWT.PUSH);
clear.setText("Leeren");
clear.setToolTipText("Diese Konfiguration leeren.");
clear.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
clear.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setCredentialsConfig(mandator, null, null, null, null);
loadFromConfig();
}
});

if (ContextServiceHolder.get().getActiveUser().isPresent()
&& ContextServiceHolder.get().getActiveUser().get().isAdministrator()) {
Button setAsDefault = new Button(ret, SWT.PUSH);
setAsDefault.setText("Als std. übernehmen");
setAsDefault
.setToolTipText("Als Standard bei allen Mandanten die noch keine Konfiguration haben setzen.");
setAsDefault.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
setAsDefault.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setDefaultCredentialsConfig(customerTxt.getText(), usernameTxt.getText(), passwordTxt.getText(),
requesterTxt.getText());
}
});
}

return ret;
}

private void loadFromConfig() {
customerTxt.setText(
ConfigServiceHolder.get().get(mandator, WebAis.CFG_MEDICS_LABORDER_CUSTOMER, StringUtils.EMPTY));
usernameTxt.setText(
ConfigServiceHolder.get().get(mandator, WebAis.CFG_MEDICS_LABORDER_USERNAME, StringUtils.EMPTY));
passwordTxt.setText(
ConfigServiceHolder.get().get(mandator, WebAis.CFG_MEDICS_LABORDER_PASSWORD, StringUtils.EMPTY));
requesterTxt.setText(
ConfigServiceHolder.get().get(mandator, WebAis.CFG_MEDICS_LABORDER_REQUESTER, StringUtils.EMPTY));
}

@Override
protected void okPressed() {
setCredentialsConfig(mandator, customerTxt.getText(), usernameTxt.getText(), passwordTxt.getText(),
requesterTxt.getText());
super.okPressed();
}
}
}
Loading

0 comments on commit b95469d

Please sign in to comment.