/*******************************************************************************
* Copyright (c) 2005-2010, G. Weirich and Elexis
* 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:
* G. Weirich - initial implementation
*******************************************************************************/
package ch.elexis.core.ui.contacts.dialogs;
import java.util.HashMap;
import java.util.List;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
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.constants.StringConstants;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.ui.dialogs.Messages;
import ch.elexis.core.ui.icons.ImageSize;
import ch.elexis.core.ui.icons.Images;
import ch.elexis.core.ui.locks.AcquireLockUi;
import ch.elexis.core.ui.locks.ILockHandler;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.Kontakt;
import ch.elexis.data.Patient;
import ch.elexis.data.Person;
import ch.elexis.data.Person.PersonDataException;
import ch.elexis.data.Query;
import ch.rgw.tools.ExHandler;
import ch.rgw.tools.StringTool;
import ch.rgw.tools.TimeTool;
import ch.rgw.tools.TimeTool.TimeFormatException;
public class PatientErfassenDialog extends TitleAreaDialog {
HashMap<String, String> fld;
Text tName, tVorname, tGebDat, tStrasse, tPlz, tOrt, tTel;
Combo cbSex;
Patient result;
public Patient getResult(){
return result;
}
public PatientErfassenDialog(final Shell parent, final HashMap<String, String> fields){
super(parent);
fld = fields;
}
private String getField(String name){
String ret = fld.get(name);
if (ret == null) {
ret = StringTool.leer;
}
return ret;
}
@Override
protected Control createDialogArea(final Composite parent){
Composite ret = new Composite(parent, SWT.NONE);
ret.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
ret.setLayout(new GridLayout(2, false));
new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_Name); //$NON-NLS-1$
tName = new Text(ret, SWT.BORDER);
tName.setText(getField(Patient.FLD_NAME));
tName.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_firstName); //$NON-NLS-1$
tVorname = new Text(ret, SWT.BORDER);
tVorname.setText(getField(Patient.FLD_FIRSTNAME));
tVorname.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_sex); //$NON-NLS-1$
cbSex = new Combo(ret, SWT.SINGLE);
cbSex.setItems(new String[] {
Messages.PatientErfassenDialog_male, Messages.PatientErfassenDialog_female
}); //$NON-NLS-1$ //$NON-NLS-2$
if (StringTool.isNothing(getField(Patient.FLD_SEX))) {
cbSex.select(0);
} else {
cbSex.select(StringTool.isFemale(getField(Patient.FLD_FIRSTNAME)) ? 1 : 0);
}
new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_birthDate); //$NON-NLS-1$
tGebDat = new Text(ret, SWT.BORDER);
tGebDat.setText(getField(Patient.FLD_DOB));
tGebDat.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_street); //$NON-NLS-1$
tStrasse = new Text(ret, SWT.BORDER);
tStrasse.setText(getField(Patient.FLD_STREET));
tStrasse.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_zip); //$NON-NLS-1$
tPlz = new Text(ret, SWT.BORDER);
tPlz.setText(getField(Patient.FLD_ZIP));
tPlz.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_city); //$NON-NLS-1$
tOrt = new Text(ret, SWT.BORDER);
tOrt.setText(getField(Patient.FLD_PLACE));
tOrt.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_phone); //$NON-NLS-1$
tTel = new Text(ret, SWT.BORDER);
tTel.setText(getField(Patient.FLD_PHONE1));
tTel.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
return ret;
}
@Override
public void create(){
super.create();
setMessage(Messages.PatientErfassenDialog_pleaseEnterPersonalia); //$NON-NLS-1$
setTitle(Messages.PatientErfassenDialog_enterData); //$NON-NLS-1$
getShell().setText(Messages.PatientErfassenDialog_enterPatient); //$NON-NLS-1$
setTitleImage(Images.IMG_LOGO.getImage(ImageSize._75x66_TitleDialogIconSize));
}
@Override
protected void okPressed(){
final String[] ret = new String[8];
ret[0] = tName.getText();
ret[1] = tVorname.getText();
int idx = cbSex.getSelectionIndex();
if (idx == -1) {
char sex = cbSex.getText().charAt(0);
if (sex == 'w' || sex == 'W' || sex == 'f' || sex == 'F') {
idx = 1;
} else if (sex == 'm' || sex == 'M') {
idx = 0;
}
}
if (idx == -1) {
SWTHelper.showError("Bitte Geschlecht angeben",
"Die Angabe des Geschlechts ist erforderlich");
return;
}
ret[2] = cbSex.getItem(idx);
ret[3] = tGebDat.getText();
try {
TimeTool check = null;
if (!StringTool.isNothing(ret[3])) {
check = new TimeTool(ret[3], true);
}
ret[4] = tStrasse.getText();
ret[5] = tPlz.getText();
ret[6] = tOrt.getText();
ret[7] = tTel.getText();
Query<Kontakt> qbe = new Query<Kontakt>(Kontakt.class);
qbe.add("Bezeichnung1", Query.EQUALS, ret[0], true);
qbe.add("Bezeichnung2", Query.EQUALS, ret[1], true);
if (check != null)
qbe.add(Person.BIRTHDATE, Query.EQUALS, check.toDBString(false), true);
List<Kontakt> list = qbe.execute();
if ((list != null) && (!list.isEmpty())) {
Kontakt k = list.get(0);
if (k.istPerson()) {
k.set(Kontakt.FLD_IS_PATIENT, StringConstants.ONE);
if (MessageDialog.openConfirm(getShell(),
Messages.PatientErfassenDialog_personExists,
Messages.PatientErfassenDialog_personWithThisNameExists) == false) { //$NON-NLS-1$ //$NON-NLS-2$
// abort dialog
super.cancelPressed();
return;
}
}
}
result = new Patient(ret[0], ret[1], check, ret[2]);
AcquireLockUi.aquireAndRun(result, new ILockHandler() {
@Override
public void lockFailed(){
result.delete();
}
@Override
public void lockAcquired(){
result.set(new String[] {
Kontakt.FLD_STREET, Kontakt.FLD_ZIP, Kontakt.FLD_PLACE, Kontakt.FLD_PHONE1
}, new String[] {
ret[4], ret[5], ret[6], ret[7]
});
ElexisEventDispatcher.fireSelectionEvent(result);
}
});
super.okPressed();
} catch (TimeFormatException e) {
ExHandler.handle(e);
SWTHelper.showError("Falsches Datumsformat",
"Das Geburtsdatum kann nicht interpretiert werden");
return;
} catch (PersonDataException pe) {
ExHandler.handle(pe);
SWTHelper.showError("Unplausible Angaben",
"Bitte überprüfen Sie die Eingaben nochmals.");
}
}
}