/*******************************************************************************
*
* The authorship of this code and the accompanying materials is held by
* medshare GmbH, Switzerland. All rights reserved.
* http://medshare.net
*
* This code and the accompanying materials are made available under
* the terms of the Eclipse Public License v1.0
*
* Year of publication: 2012
*
*******************************************************************************/
package com.hilotec.elexis.messwerte.v2.views;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import ch.elexis.data.Patient;
import ch.elexis.data.Query;
import ch.rgw.tools.TimeTool;
import com.hilotec.elexis.messwerte.v2.data.ExportData;
import com.tiff.common.ui.datepicker.DatePickerCombo;
public class ExportDialog extends Dialog {
private ExportData expData;
private Text patNumberFrom;
private Text patNumberTo;
private DatePickerCombo dateFrom;
private DatePickerCombo dateTo;
private Button btnPatAll;
private Button btnPatFromTo;
private Button btnDateAll;
private Button btnDateFromTo;
private final Shell parent;
private int patNrMin = -1;
private int patNrMax = -1;
public ExportDialog(Shell parent){
super(parent);
this.parent = parent;
// TODO Auto-generated constructor stub
}
/**
* @wbp.parser.constructor
*/
public ExportDialog(Shell parent, ExportData exportData){
super(parent);
this.parent = parent;
expData = exportData;
}
@Override
protected Control createDialogArea(Composite parent){
Composite composite = (Composite) super.createDialogArea(parent);
composite.setLayout(new GridLayout(1, true));
Label lblPatient = new Label(composite, SWT.NONE);
lblPatient.setText(Messages.ExportDialog_lblPatient);
Composite compPatient = new Composite(composite, SWT.NONE);
compPatient.setLayout(new RowLayout(SWT.HORIZONTAL));
btnPatAll = new Button(compPatient, SWT.RADIO);
btnPatAll.setLayoutData(new RowData(110, SWT.DEFAULT));
btnPatAll.setText(Messages.ExportDialog_btnPatAll);
btnPatFromTo = new Button(compPatient, SWT.RADIO);
btnPatFromTo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
if (btnPatFromTo.getSelection()) {
patNumberFrom.setEnabled(true);
patNumberTo.setEnabled(true);
patNumberFrom.setText(Integer.toString(expData.getPatientNumberFrom()));
patNumberTo.setText(Integer.toString(expData.getPatientNumberTo()));
} else {
patNumberFrom.setEnabled(false);
patNumberTo.setEnabled(false);
if (patNrMin == -1 || patNrMax == -1) {
calcMinMaxPatNumbers();
}
patNumberFrom.setText(Integer.toString(patNrMin));
patNumberTo.setText(Integer.toString(patNrMax));
}
}
});
btnPatFromTo.setLayoutData(new RowData(140, SWT.DEFAULT));
btnPatFromTo.setText(Messages.ExportDialog_btnPatFromTo);
btnPatFromTo.setSelection(true);
// btnPatFromTo.addListener(eventType, new Lis)
patNumberFrom = new Text(compPatient, SWT.BORDER | SWT.RIGHT);
patNumberFrom.setLayoutData(new RowData(74, SWT.DEFAULT));
patNumberFrom.setText(Integer.toString(expData.getPatientNumberFrom()));
Label lblPatTo = new Label(compPatient, SWT.CENTER);
lblPatTo.setLayoutData(new RowData(30, SWT.DEFAULT));
lblPatTo.setText(Messages.ExportDialog_lblPatTo);
patNumberTo = new Text(compPatient, SWT.BORDER | SWT.RIGHT);
patNumberTo.setLayoutData(new RowData(74, SWT.DEFAULT));
patNumberTo.setText(Integer.toString(expData.getPatientNumberTo()));
Label lblDate = new Label(composite, SWT.NONE);
lblDate.setText(Messages.ExportDialog_lblDate);
Composite compDate = new Composite(composite, SWT.NONE);
compDate.setLayout(new RowLayout(SWT.HORIZONTAL));
btnDateAll = new Button(compDate, SWT.RADIO);
btnDateAll.setLayoutData(new RowData(110, SWT.DEFAULT));
btnDateAll.setSelection(true);
btnDateAll.setText(Messages.ExportDialog_btnDateAll);
btnDateFromTo = new Button(compDate, SWT.RADIO);
btnDateFromTo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
if (btnDateFromTo.getSelection()) {
dateFrom.setEnabled(true);
dateTo.setEnabled(true);
dateFrom.setDate(expData.getDateFrom().getTime());
dateTo.setDate(expData.getDateTo().getTime());
} else {
dateFrom.setEnabled(false);
dateTo.setEnabled(false);
expData.setDateFrom(new TimeTool(dateFrom.getDate().getTime()));
expData.setDateTo(new TimeTool(dateTo.getDate().getTime()));
dateFrom.setDate(null);
dateTo.setDate(null);
}
}
});
btnDateFromTo.setLayoutData(new RowData(140, SWT.DEFAULT));
btnDateFromTo.setText(Messages.ExportDialog_btnDateFromTo);
btnDateFromTo.setSelection(false);
TimeTool date = new TimeTool();
expData.setDateFrom(date);
expData.setDateTo(date);
dateFrom = new DatePickerCombo(compDate, SWT.BORDER);
dateFrom.setEnabled(false);
dateFrom.setLayoutData(new RowData(60, SWT.DEFAULT));
dateFrom.setFormat(new SimpleDateFormat("dd.MM.yyyy")); //$NON-NLS-1$
Label lblDatetTo = new Label(compDate, SWT.CENTER);
lblDatetTo.setLayoutData(new RowData(30, SWT.DEFAULT));
lblDatetTo.setText(Messages.ExportDialog_lblDateTo);
dateTo = new DatePickerCombo(compDate, SWT.BORDER);
dateTo.setEnabled(false);
dateTo.setLayoutData(new RowData(60, SWT.DEFAULT));
dateTo.setFormat(new SimpleDateFormat("dd.MM.yyyy")); //$NON-NLS-1$
return composite;
}
@Override
protected void okPressed(){
try {
if (btnPatFromTo.getSelection()) {
int from = Integer.parseInt(patNumberFrom.getText());
int to = Integer.parseInt(patNumberTo.getText());
if (to < from) {
throw new Exception(Messages.ExportDialog_Exception_PatNumber);
}
expData.setPatientNumberFrom(from);
expData.setPatientNumberTo(to);
} else {
if (patNrMin == -1 || patNrMax == -1) {
calcMinMaxPatNumbers();
}
expData.setPatientNumberFrom(patNrMin);
expData.setPatientNumberTo(patNrMax);
}
if (btnDateFromTo.getSelection()) {
Date from = dateFrom.getDate();
Date to = dateTo.getDate();
if (to.before(from)) {
throw new Exception(Messages.ExportDialog_Exception_Datum);
}
expData.setDateFrom(new TimeTool(from.getTime()));
expData.setDateTo(new TimeTool(to.getTime()));
expData.setCheckDate(true);
} else {
expData.setDateFrom(new TimeTool(TimeTool.BEGINNING_OF_UNIX_EPOCH));
expData.setDateTo(new TimeTool(TimeTool.END_OF_UNIX_EPOCH));
expData.setCheckDate(false);
}
close();
} catch (Exception e) {
MessageDialog md =
new MessageDialog(parent, Messages.ExportDialog_ExceptionDialog, null,
e.getMessage(), MessageDialog.WARNING, new String[] {
"Ok" //$NON-NLS-1$
}, 0);
md.open();
}
}
@Override
protected void configureShell(Shell newShell){
super.configureShell(newShell);
newShell.setText(Messages.ExportDialog_CSV_Export);
}
private void calcMinMaxPatNumbers(){
this.getShell().setCursor(new Cursor(Display.getCurrent(), SWT.CURSOR_WAIT));
Query<Patient> qpat = new Query<Patient>(Patient.class);
qpat.add(Patient.FLD_PATID, Query.NOT_EQUAL, ""); //$NON-NLS-1$
List<Patient> listPatient = qpat.execute();
if (listPatient != null) {
int minPatNr = Integer.MAX_VALUE;
int maxPatNr = 0;
for (Patient patient : listPatient) {
int patNr = Integer.parseInt(patient.getPatCode());
if (patNr < minPatNr) {
minPatNr = patNr;
}
if (patNr > maxPatNr) {
maxPatNr = patNr;
}
}
patNrMin = minPatNr;
patNrMax = maxPatNr;
} else {
patNrMin = -1;
patNrMax = -1;
}
this.getShell().setCursor(null);
}
}