/*******************************************************************************
* Copyright (c) 2014 MEDEVIT.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* MEDEVIT <office@medevit.at> - initial API and implementation
*******************************************************************************/
package at.medevit.elexis.impfplan.ui.dialogs;
import java.util.GregorianCalendar;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalListener;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.ResourceManager;
import org.eclipse.wb.swt.SWTResourceManager;
import at.medevit.elexis.impfplan.model.DiseaseDefinitionModel;
import at.medevit.elexis.impfplan.model.DiseaseDefinitionModel.DiseaseDefinition;
import at.medevit.elexis.impfplan.ui.VaccinationEffectCheckboxTreeViewer;
import ch.artikelstamm.elexis.common.ArtikelstammItem;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.ui.proposals.PersistentObjectContentProposal;
import ch.elexis.core.ui.proposals.PersistentObjectProposalProvider;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.Mandant;
import ch.elexis.data.Patient;
import ch.elexis.data.Query;
import ch.rgw.tools.TimeTool;
public class SupplementVaccinationDialog extends TitleAreaDialog {
private Text txtAdministrator;
private Text txtArticleName;
private Text txtLotNo;
private Text txtAtcCode;
private Text txtArticleEAN;
private VaccinationEffectCheckboxTreeViewer vect;
private boolean isSupplement = false;
private String administratorString = null;
private String articleString = null;
private DateTime dateOfAdministration;
private String articleEAN;
private String vaccAgainst;
private String articleAtcCode;
private String lotNo;
private GregorianCalendar doa;
private Mandant mandant;
private TimeTool patBDay;
private TimeTool selDate;
private Patient pat;
/**
* Create the dialog.
*
* @param parentShell
* @param sp
* @param b
*/
public SupplementVaccinationDialog(Shell parentShell, Patient pat){
super(parentShell);
this.pat = pat;
mandant = (Mandant) ElexisEventDispatcher.getSelected(Mandant.class);
patBDay = new TimeTool(pat.getGeburtsdatum());
selDate = new TimeTool();
isSupplement = true;
}
/**
* Create contents of the dialog.
*
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent){
setTitle("Impfung nachtragen");
setTitleImage(ResourceManager.getPluginImage("at.medevit.elexis.impfplan.ui",
"rsc/icons/vaccination_logo.png"));
Patient selectedPatient = ElexisEventDispatcher.getSelectedPatient();
setMessage(pat.getLabel());
Composite area = (Composite) super.createDialogArea(parent);
Composite container = new Composite(area, SWT.NONE);
container.setLayout(new GridLayout(2, false));
container.setLayoutData(new GridData(GridData.FILL_BOTH));
Group mainGroup = new Group(container, SWT.NONE);
mainGroup.setFont(SWTResourceManager.getFont("Noto Sans", 9, SWT.BOLD));
mainGroup.setText("Pflicht Angaben");
GridLayout gd_MainGroup = new GridLayout(2, false);
mainGroup.setLayout(gd_MainGroup);
mainGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
Label lblVerabreichungsdatum = new Label(mainGroup, SWT.NONE);
lblVerabreichungsdatum
.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblVerabreichungsdatum.setText("Datum");
dateOfAdministration = new DateTime(mainGroup, SWT.BORDER | SWT.DROP_DOWN);
dateOfAdministration.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
selDate.set(dateOfAdministration.getYear(), dateOfAdministration.getMonth(),
dateOfAdministration.getDay());
if (selDate.isBefore(patBDay)) {
SWTHelper.showInfo("Patient noch nicht geboren",
"Das von Ihnen gewählte Datum liegt vor der Geburt des Patienten.");
dateOfAdministration.setYear(patBDay.get(TimeTool.YEAR));
dateOfAdministration.setMonth(patBDay.get(TimeTool.MONTH));
dateOfAdministration.setDay(patBDay.get(TimeTool.DAY_OF_MONTH));
}
}
});
{ // article name
Label lblArtikelname = new Label(mainGroup, SWT.NONE);
lblArtikelname.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblArtikelname.setText("Artikelname");
txtArticleName = new Text(mainGroup, SWT.BORDER);
txtArticleName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
txtArticleName.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e){
articleString = txtArticleName.getText();
}
});
PersistentObjectProposalProvider<ArtikelstammItem> aopp =
new PersistentObjectProposalProvider<>(ArtikelstammItem.class,
ArtikelstammItem.FLD_ATC, Query.LIKE, "J07%");
ContentProposalAdapter articleProposalAdapter =
new ContentProposalAdapter(txtArticleName, new TextContentAdapter(), aopp, null,
null);
articleProposalAdapter.addContentProposalListener(new IContentProposalListener() {
@SuppressWarnings("unchecked")
@Override
public void proposalAccepted(IContentProposal proposal){
PersistentObjectContentProposal<ArtikelstammItem> prop =
(PersistentObjectContentProposal<ArtikelstammItem>) proposal;
txtArticleName.setText(prop.getLabel());
articleString = prop.getPersistentObject().storeToString();
/**
* could be useful to define vacc. against at some point, but not needed in the
* current version
*/
// txtArticleEAN.setText(prop.getPersistentObject().getEAN());
// txtAtcCode.setText(prop.getPersistentObject().getATCCode());
}
});
}
new Label(container, SWT.NONE);
Group optionalGroup = new Group(container, SWT.NONE);
optionalGroup.setFont(SWTResourceManager.getFont("Noto Sans", 9, SWT.BOLD));
optionalGroup.setText("Optionale Angaben");
optionalGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
optionalGroup.setLayout(new GridLayout(2, false));
{ // administrating contact
Label lblAdministratingContact = new Label(optionalGroup, SWT.NONE);
lblAdministratingContact.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false,
false, 1, 1));
lblAdministratingContact.setText("Nachtrag von");
txtAdministrator = new Text(optionalGroup, SWT.BORDER);
administratorString = mandant.storeToString();
txtAdministrator.setText(mandant.getMandantLabel());
txtAdministrator.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e){
administratorString = txtAdministrator.getText();
}
});
txtAdministrator.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
PersistentObjectProposalProvider<Mandant> mopp =
new PersistentObjectProposalProvider<Mandant>(Mandant.class) {
@Override
public String getLabelForObject(Mandant a){
return a.getMandantLabel();
}
};
ContentProposalAdapter mandatorProposalAdapter =
new ContentProposalAdapter(txtAdministrator, new TextContentAdapter(), mopp, null,
null);
mandatorProposalAdapter
.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
mandatorProposalAdapter.addContentProposalListener(new IContentProposalListener() {
@Override
public void proposalAccepted(IContentProposal proposal){
PersistentObjectContentProposal<Mandant> prop =
(PersistentObjectContentProposal<Mandant>) proposal;
administratorString = prop.getPersistentObject().storeToString();
}
});
Label lblLotNo = new Label(optionalGroup, SWT.NONE);
lblLotNo.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblLotNo.setText("Lot-Nr");
txtLotNo = new Text(optionalGroup, SWT.BORDER);
txtLotNo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
}
/**
* could be useful to define vacc. against at some point, but not needed in the current
* version
*/
// Label lblArtikelEan = new Label(optionalGroup, SWT.NONE);
// lblArtikelEan.setSize(60, 15);
// lblArtikelEan.setText("Artikel EAN");
//
// txtArticleEAN = new Text(optionalGroup, SWT.BORDER);
// txtArticleEAN.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
// txtArticleEAN.setSize(348, 21);
//
// Label lblAtccode = new Label(optionalGroup, SWT.NONE);
// lblAtccode.setSize(56, 15);
// lblAtccode.setText("ATC-Code");
//
// txtAtcCode = new Text(optionalGroup, SWT.BORDER);
// txtAtcCode.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
// txtAtcCode.setSize(314, 21);
Group expiredGroup = new Group(container, SWT.NONE);
expiredGroup.setFont(SWTResourceManager.getFont("Noto Sans", 9, SWT.BOLD));
expiredGroup.setText("Bei nicht mehr erhältlichen Impfstoffen");
expiredGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
expiredGroup.setLayout(new GridLayout(2, false));
{
Label lblVaccAgainst = new Label(expiredGroup, SWT.NONE);
lblVaccAgainst.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 1));
lblVaccAgainst.setText("Impfung gegen Krankheit(en)");
vect = new VaccinationEffectCheckboxTreeViewer(container, SWT.BORDER,
vaccAgainst);
}
return area;
}
/**
* Create contents of the button bar.
*
* @param parent
*/
@Override
protected void createButtonsForButtonBar(Composite parent){
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
@Override
protected void okPressed(){
lotNo = txtLotNo.getText();
doa =
new GregorianCalendar(dateOfAdministration.getYear(), dateOfAdministration.getMonth(),
dateOfAdministration.getDay());
vaccAgainst = vect.getCheckedElementsAsCommaSeparatedString();
super.okPressed();
}
public TimeTool getDateOfAdministration(){
return new TimeTool(doa.getTime());
}
public String getAdministratorString(){
return administratorString;
}
public String getLotNo(){
return lotNo;
}
public String getAtcCode(){
return articleAtcCode;
}
public String getArticleString(){
return articleString;
}
public String getEAN(){
return articleEAN;
}
public boolean isSupplement(){
return isSupplement;
}
public String getVaccAgainst(){
return vaccAgainst;
}
private class DiseaseTreeContentProvider implements ITreeContentProvider {
@Override
public void dispose(){}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput){}
@Override
public Object[] getElements(Object inputElement){
return DiseaseDefinitionModel.getDiseaseDefinitions().toArray();
}
@Override
public Object[] getChildren(Object parentElement){
return null;
}
@Override
public Object getParent(Object element){
return (DiseaseDefinition) element;
}
@Override
public boolean hasChildren(Object element){
return false;
}
}
private class DiseaseTreeLabelProvider implements ILabelProvider {
@Override
public void addListener(ILabelProviderListener listener){}
@Override
public void dispose(){}
@Override
public boolean isLabelProperty(Object element, String property){
return false;
}
@Override
public void removeListener(ILabelProviderListener listener){}
@Override
public Image getImage(Object element){
return null;
}
@Override
public String getText(Object element){
return ((DiseaseDefinition) element).getDiseaseLabel();
}
}
}