/*
* PanelFollowUpSearch.java
*
* Created on 15 Апрель 2008 г., 12:56
*/
package clips.doctor.medexam;
import beans.doctor.medexam.search.MedexamFilter;
import clips.delegate.client.ClientLocal;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.delegate.utils.TimeLocal;
import cli_fmw.main.ClipsException;
import cli_fmw.main.MainWindow;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageException;
import cli_fmw.main.PageGeneric;
import cli_fmw.main.PrintCreators;
import cli_fmw.main.Printable;
import cli_fmw.main.PageGeneric;
import cli_fmw.report.TableReportOptions;
import clips.userseach.PanelUserSearch;
import cli_fmw.utils.EmptyDialog;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.table_config_states.StateSaver;
import cli_fmw.utils.table_config_states.TableState;
import clips.delegate.doctor.DiseaseLocal;
import clips.delegate.doctor.medexam.MedexamLocal;
import clips.delegate.doctor.medexam.MedexamSearchLocal;
import clips.doctor.PanelEMC;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.LinkedHashMap;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import framework.utils.Converter;
import framework.utils.DateTimeUtils;
import java.util.Calendar;
/**
* панель для отображения списка диспансеризации
* @author lacoste
*/
public class PanelMedexamSearch extends PageGeneric implements Printable {
private MedexamSearchLocal medexamSearchLocal = new MedexamSearchLocal(getAuditManager());
private ArrayList<MedexamLocal> medexamList = new ArrayList<MedexamLocal>();
private MedexamFilter filter = new MedexamFilter();
private ClientLocal client;
public PanelMedexamSearch(PageContainer container) throws ClipsException{
super(container);
initComponents();
//cbClosedMedexam.setHorizontalTextPosition(SwingConstants.LEFT);
dateChFrom.setDate(TimeLocal.getCurrentTime().getTime());
dateChTill.setDate(TimeLocal.getCurrentTime().getTime());
refreshTable();
tabMedexam.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabMedexam.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
boolean active = tabMedexam.getSelectedRowCount() > 0;
btMedexam.setEnabled(active);
}
});
resizeColumn();
StateSaver.attachTo(this);
}
private void fillFilter() {
filter = new MedexamFilter();
if (cbClient.isSelected()) {
filter.clientId = client.getID();
}
filter.dateOpenFrom = DateTimeUtils.getDateOnly(dateChFrom.getDate());
Calendar gc = GregorianCalendar.getInstance();
gc.setTime(DateTimeUtils.getDateOnly(dateChTill.getDate()));
gc.add(Calendar.DAY_OF_YEAR, 1);
filter.dateOpenTill = gc.getTime();
filter.onlyOpened = !cbClosedMedexam.isSelected();
System.out.println("Фильтр медосмотров -------------");
System.out.println("Date from " + filter.dateOpenFrom);
System.out.println("Date to " + filter.dateOpenTill);
System.out.println("ClientID " + filter.clientId);
System.out.println("Only Opened " + filter.onlyOpened);
}
private void refreshTable() {
tabMedexam.setModel(new TableModelMedexamList(medexamList));
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel2 = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jPanel6 = new javax.swing.JPanel();
cbClient = new javax.swing.JCheckBox();
tfClient = new javax.swing.JTextField();
btClient = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
jPanel7 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
dateChFrom = new org.infotechservice.ICalendar.components.ICDateChooser();
jPanel8 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
dateChTill = new org.infotechservice.ICalendar.components.ICDateChooser();
cbClosedMedexam = new javax.swing.JCheckBox();
jPanel4 = new javax.swing.JPanel();
btGoGoGo = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
tabMedexam = new cli_fmw.utils.sorted_table.SortedTable();
jPanel5 = new javax.swing.JPanel();
btMedexam = new javax.swing.JButton();
setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
setLayout(new java.awt.BorderLayout(5, 5));
jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.PAGE_AXIS));
jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
jLabel1.setFont(jLabel1.getFont().deriveFont((jLabel1.getFont().getStyle() & ~java.awt.Font.ITALIC) | java.awt.Font.BOLD, 13));
jLabel1.setText("Поиск медосмотров:");
jPanel3.add(jLabel1);
jPanel2.add(jPanel3);
jPanel6.setLayout(new java.awt.BorderLayout());
cbClient.setText("по пациенту: ");
cbClient.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbClientActionPerformed(evt);
}
});
jPanel6.add(cbClient, java.awt.BorderLayout.LINE_START);
tfClient.setColumns(40);
tfClient.setEditable(false);
tfClient.setEnabled(false);
jPanel6.add(tfClient, java.awt.BorderLayout.CENTER);
btClient.setText("...");
btClient.setEnabled(false);
btClient.setPreferredSize(new java.awt.Dimension(24, 24));
btClient.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btClientActionPerformed(evt);
}
});
jPanel6.add(btClient, java.awt.BorderLayout.LINE_END);
jPanel2.add(jPanel6);
jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
jPanel7.setLayout(new java.awt.BorderLayout());
jLabel2.setText("С: ");
jPanel7.add(jLabel2, java.awt.BorderLayout.WEST);
dateChFrom.setPreferredSize(new java.awt.Dimension(130, 19));
jPanel7.add(dateChFrom, java.awt.BorderLayout.CENTER);
jPanel1.add(jPanel7);
jPanel8.setLayout(new java.awt.BorderLayout());
jLabel3.setText("по: ");
jPanel8.add(jLabel3, java.awt.BorderLayout.WEST);
dateChTill.setPreferredSize(new java.awt.Dimension(130, 19));
jPanel8.add(dateChTill, java.awt.BorderLayout.CENTER);
jPanel1.add(jPanel8);
cbClosedMedexam.setText("+ Пройденные медосмотры ");
cbClosedMedexam.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbClosedMedexamActionPerformed(evt);
}
});
jPanel1.add(cbClosedMedexam);
jPanel2.add(jPanel1);
jPanel4.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 5, 0));
btGoGoGo.setText("Найти");
btGoGoGo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btGoGoGoActionPerformed(evt);
}
});
jPanel4.add(btGoGoGo);
jPanel2.add(jPanel4);
add(jPanel2, java.awt.BorderLayout.NORTH);
jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder("Найденные медосмотры"));
jScrollPane1.addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentResized(java.awt.event.ComponentEvent evt) {
jScrollPane1ComponentResized(evt);
}
});
tabMedexam.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tabMedexamMouseClicked(evt);
}
});
jScrollPane1.setViewportView(tabMedexam);
add(jScrollPane1, java.awt.BorderLayout.CENTER);
jPanel5.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
btMedexam.setText("Перейти");
btMedexam.setEnabled(false);
btMedexam.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btMedexamActionPerformed(evt);
}
});
jPanel5.add(btMedexam);
add(jPanel5, java.awt.BorderLayout.SOUTH);
}// </editor-fold>//GEN-END:initComponents
private void btGoGoGoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btGoGoGoActionPerformed
try {
fillFilter();
medexamList = medexamSearchLocal.findMedexamLocals(filter);
refreshTable();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btGoGoGoActionPerformed
private void btMedexamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btMedexamActionPerformed
if (tabMedexam.getSelectedRowCount() == 0) {
MessageBox.showWarning(MessageBox.W_LIST_ELEMENT_NOT_SELECT);
return;
}
try {
ClientLocal clientLocal = medexamList.get(tabMedexam.getSelectedRowSorted()).getClientLocal();
DiseaseLocal disease = medexamList.get(tabMedexam.getSelectedRowSorted()).getDiseaseLocal();
PanelEMC panel = new PanelEMC(getContainer(), clientLocal);
getContainer().addNewPage(panel, this);
panel.selectInEmc(disease);
} catch (PageException ex) {
MessageBox.showException(ex);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btMedexamActionPerformed
private void cbClientActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbClientActionPerformed
btClient.setEnabled(cbClient.isSelected());
tfClient.setEnabled(cbClient.isSelected());
if (cbClient.isSelected()){
selectClient();
}
else {
client = null;
tfClient.setText("");
btClient.setEnabled(false);
}
}//GEN-LAST:event_cbClientActionPerformed
private void btClientActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btClientActionPerformed
selectClient();
}//GEN-LAST:event_btClientActionPerformed
private void selectClient() {
try {
EmptyDialog dlg = new EmptyDialog(MainWindow.mainWindow, "Выбор пациента", getAuditManager());
PanelUserSearch panel = new PanelUserSearch(dlg, PanelUserSearch.MODE_SELECT);
dlg.addNewPage(panel, null);
dlg.setVisible(true);
if (dlg.getDlgResult() == ModalDialog.DLG_OK) {
client = panel.getSelectedClient();
if (client != null) {
tfClient.setText(client.toString());
btClient.setEnabled(true);
} else {
tfClient.setText("");
cbClient.setSelected(false);
btClient.setEnabled(false);
}
}else{
cbClient.setSelected(false);
btClient.setEnabled(false);
}
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
private void tabMedexamMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabMedexamMouseClicked
if (evt.getClickCount() == 2) {
btMedexamActionPerformed(null);
}
}//GEN-LAST:event_tabMedexamMouseClicked
private void jScrollPane1ComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jScrollPane1ComponentResized
}//GEN-LAST:event_jScrollPane1ComponentResized
private void cbClosedMedexamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbClosedMedexamActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_cbClosedMedexamActionPerformed
@Override
public String getPageTitle() {
return "Поиск медосмотров";
}
private void resizeColumn() {
TableState state = new TableState();
state.setPreferredWidth(TableModelMedexamList.COL_CLIENT, 50);
state.setPreferredWidth(TableModelMedexamList.COL_TYPE, 20);
state.setPreferredWidth(TableModelMedexamList.COL_DATE, 10);
state.setPreferredWidth(TableModelMedexamList.COL_RESULT, 20);
StateSaver.setDefaultState(this, tabMedexam, state);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btClient;
private javax.swing.JButton btGoGoGo;
private javax.swing.JButton btMedexam;
private javax.swing.JCheckBox cbClient;
private javax.swing.JCheckBox cbClosedMedexam;
private org.infotechservice.ICalendar.components.ICDateChooser dateChFrom;
private org.infotechservice.ICalendar.components.ICDateChooser dateChTill;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JPanel jPanel7;
private javax.swing.JPanel jPanel8;
private javax.swing.JScrollPane jScrollPane1;
private cli_fmw.utils.sorted_table.SortedTable tabMedexam;
private javax.swing.JTextField tfClient;
// End of variables declaration//GEN-END:variables
@Override
public boolean readyForPrint() {
return true;
}
@Override
public void print() {
if (readyForPrint()) {
//производим поиск чтоб результаты соответствовали фильтру
btGoGoGoActionPerformed(null);
HashMap<String, Object> data = new LinkedHashMap<String, Object>();
data.put("dateFrom", "Дата поиска с: " + Converter.dateToString(dateChFrom.getDate())
+ " по: " + Converter.dateToString(dateChTill.getDate()));
if (client != null) {
data.put("client", "по пациенту: " + client.toString());
}
if (cbClosedMedexam.isSelected()) {
data.put("plusDown", "включая пройденные медосмотры приемы");
}
String title = "Список медицинских осмотров";
TableReportOptions ops = new TableReportOptions(TableReportOptions.PageOrentation.horizontal);
PrintCreators.createGeneratedReport(title, ops, data.entrySet(), null, tabMedexam.getModel(), getClass());
}
}
@Override
public DelegateLine2 getDelegate() {
return client;
}
}