/*
* ProfCheckupSearch.java
*
* Created on 26 Апрель 2008 г., 12:34
*/
package clips.doctor.profcheckup.search;
import clips.delegate.contract.ContractLocal;
import clips.delegate.doctor.profchekup.ProfcheckupItemLocal;
import cli_fmw.delegate.DelegateLine2;
import clips.delegate.doctor.profchekup.SearchResult;
import clips.doctor.profcheckup.dialogs.DialogNewProfCheckup;
import cli_fmw.main.ClipsException;
import clips.delegate.doctor.profchekup.ProfcheckupLocal;
import clips.delegate.doctor.profchekup.ProfcheckupSearchLocal;
import clips.doctor.profcheckup.checkup.PanelProfcheckupView;
import cli_fmw.main.ActivateSensitive;
import cli_fmw.main.MainWindow;
import cli_fmw.main.PageGeneric;
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 cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.Selector;
import cli_fmw.utils.table_config_states.StateSaver;
import cli_fmw.utils.table_config_states.TableState;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import clips.doctor.profcheckup.checkup.PanelProfcheckupEdit;
import clips.doctor.profcheckup.dialogs.DialogContractM;
import clips.doctor.profcheckup.search.TableCellRenderProfCheckupSearch;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import framework.utils.Converter;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Панель поиска профчекапов
* @author petr
*/
public class PanelProfCheckupSearch extends PageGeneric implements ActivateSensitive, Printable {
static private final int search_all = 0;
static private final int search_before_date = 1;
static private final int search_after_date = 2;
static private final int search_between_dates = 3;
class ProfCeckupComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
ProfcheckupLocal p1 = (ProfcheckupLocal) o1;
ProfcheckupLocal p2 = (ProfcheckupLocal) o2;
try {
if (p1.getDateFrom().after(p2.getDateFrom())) {
return 1;
} else {
return -1;
}
} catch (ClipsException ex) {
ex.printStackTrace();
return 0;
}
}
}
private ArrayList<ProfcheckupLocal> profcheckupLocals; //кеш профчекапов
private boolean ableEdit; //возможность редактирования
private ProfCeckupComparator profCeckupComparator;
private int search_mode;
public PanelProfCheckupSearch(PageContainer container) throws ClipsException {
super(container);
search_mode = search_all;
profCeckupComparator = new ProfCeckupComparator();
profcheckupLocals = new ArrayList<ProfcheckupLocal>();
initComponents();
dchFromDate.setDate(new Date());
dchTillDate.setDate(new Date());
tblProfcheckups.setSelectionMode(0);//выделять в таблице можно только по одной строке
resizeColums();
StateSaver.attachTo(this);
}
/** 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() {
buttonGroup1 = new javax.swing.ButtonGroup();
jPanel3 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
tblProfcheckups = new cli_fmw.utils.sorted_table.SortedTable();
jPanel4 = new javax.swing.JPanel();
btEditWatch = new javax.swing.JButton();
btNew = new javax.swing.JButton();
btDelete = new javax.swing.JButton();
btResult = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
rbAll = new javax.swing.JRadioButton();
jPanel2 = new javax.swing.JPanel();
btFind = new javax.swing.JButton();
jPanel8 = new javax.swing.JPanel();
rbDate = new javax.swing.JRadioButton();
jPanel5 = new javax.swing.JPanel();
jPanel6 = new javax.swing.JPanel();
dchFromDate = new org.infotechservice.ICalendar.components.ICDateChooser();
dchTillDate = new org.infotechservice.ICalendar.components.ICDateChooser();
jPanel7 = new javax.swing.JPanel();
chbFrom = new javax.swing.JCheckBox();
chbTill = new javax.swing.JCheckBox();
buttonGroup1.add(rbAll);
buttonGroup1.add(rbDate);
setLayout(new java.awt.BorderLayout());
jPanel3.setLayout(new java.awt.BorderLayout());
tblProfcheckups.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
}
));
tblProfcheckups.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tblProfcheckupsMouseClicked(evt);
}
});
jScrollPane2.setViewportView(tblProfcheckups);
jPanel3.add(jScrollPane2, java.awt.BorderLayout.CENTER);
add(jPanel3, java.awt.BorderLayout.CENTER);
jPanel4.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT, 5, 0));
btEditWatch.setText("Открыть");
btEditWatch.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btEditWatchActionPerformed(evt);
}
});
jPanel4.add(btEditWatch);
btNew.setText("Новый");
btNew.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btNewActionPerformed(evt);
}
});
jPanel4.add(btNew);
btDelete.setText("Удалить");
btDelete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btDeleteActionPerformed(evt);
}
});
jPanel4.add(btDelete);
btResult.setText("Результаты");
btResult.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btResultActionPerformed(evt);
}
});
jPanel4.add(btResult);
add(jPanel4, java.awt.BorderLayout.SOUTH);
rbAll.setSelected(true);
rbAll.setText("Все");
rbAll.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rbAllActionPerformed(evt);
}
});
jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.LINE_AXIS));
btFind.setText("Искать");
btFind.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btFindActionPerformed(evt);
}
});
jPanel8.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 5));
rbDate.setText("По дате:");
rbDate.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rbDateActionPerformed(evt);
}
});
jPanel8.add(rbDate);
jPanel5.setLayout(new java.awt.BorderLayout());
jPanel6.setLayout(new java.awt.GridLayout(0, 1, 0, 2));
dchFromDate.setEnabled(false);
jPanel6.add(dchFromDate);
dchTillDate.setEnabled(false);
jPanel6.add(dchTillDate);
jPanel5.add(jPanel6, java.awt.BorderLayout.CENTER);
jPanel7.setLayout(new java.awt.GridLayout(2, 1));
chbFrom.setSelected(true);
chbFrom.setText("после");
chbFrom.setEnabled(false);
chbFrom.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
chbFromActionPerformed(evt);
}
});
jPanel7.add(chbFrom);
chbTill.setSelected(true);
chbTill.setText("до");
chbTill.setEnabled(false);
chbTill.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
chbTillActionPerformed(evt);
}
});
jPanel7.add(chbTill);
jPanel5.add(jPanel7, java.awt.BorderLayout.WEST);
jPanel8.add(jPanel5);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(rbAll)
.addComponent(btFind)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 449, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(51, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(rbAll)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(49, 49, 49)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btFind)
.addContainerGap())
);
add(jPanel1, java.awt.BorderLayout.NORTH);
}// </editor-fold>//GEN-END:initComponents
/**
* �?зменение ширины столбцов
*/
private void resizeColums() {
TableState state = new TableState();
state.setPreferredWidth(TableModelProfCheckupSearch.CL_PROFCHECKUP, 2);
state.setPreferredWidth(TableModelProfCheckupSearch.CL_DATE, 1);
state.setPreferredWidth(TableModelProfCheckupSearch.CL_TIME_FROM, 1);
state.setPreferredWidth(TableModelProfCheckupSearch.CL_TIME_TILL, 1);
state.setPreferredWidth(TableModelProfCheckupSearch.CL_APPENDIX, 5);
StateSaver.setDefaultState(this, tblProfcheckups, state);
}
private void selectMode() {
if (chbFrom.isSelected() & !chbTill.isSelected()) {
search_mode = search_after_date;
} else if (!chbFrom.isSelected() & chbTill.isSelected()) {
search_mode = search_before_date;
} else if (chbFrom.isSelected() & chbTill.isSelected()) {
search_mode = search_between_dates;
} else if (!chbFrom.isSelected() & !chbTill.isSelected()) {
chbFrom.setSelected(true);
chbTill.setSelected(true);
rbAll.setSelected(true);
rbAllActionPerformed(null);
} else {
System.err.println("Ахтунг, апокалипсис!");
}
// System.out.println("Search mode: " + search_mode);
}
/**
* Обновление таблицы
*/
@SuppressWarnings("unchecked")
private void resetTable() {
//TODO: отсортировать профчекапы в кеше по дате
// java.util.Collections.sort(profcheckupLocals, profCeckupComparator);
TableModelProfCheckupSearch model = new TableModelProfCheckupSearch(profcheckupLocals);
tblProfcheckups.setModel(model);
TableCellRenderProfCheckupSearch renderer = new TableCellRenderProfCheckupSearch(new TableCellRenderProfCheckupSearch.RenderDefaultDataSource());//создаём рендер
tblProfcheckups.setDefaultRenderer(Object.class, renderer);//вешаем рендер на таблицу
tblProfcheckups.setDefaultRenderer(Date.class, new TableCellRenderProfCheckupSearch(new TableCellRenderProfCheckupSearch.RenderDateDataSource()));//вешаем рендер на таблицу
//tblProfcheckups.getColumnModel().getColumn(TableModelProfCheckupSearch.CL_DATE).setCellRenderer(renderer);
// System.out.println("PanelProfCheckupSearch: resetTable");
}
/**
* Клик на кнопке btFind - "�?скать"
* @param evt
*/
private void btFindActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btFindActionPerformed
try {
ProfcheckupSearchLocal profcheckupSearch = new ProfcheckupSearchLocal(getAuditManager());
profcheckupLocals = new ArrayList<ProfcheckupLocal>();
Selector<ProfcheckupLocal> selector;
Date begin = dchFromDate.getDate();
Date end = dchTillDate.getDate();
switch (search_mode) {
case search_all:
profcheckupLocals = profcheckupSearch.getFullProfcheckupList();
break;
case search_after_date:
selector = profcheckupSearch.getProfcheckupsAfterDate(begin);
for (int i = 0; i < selector.size(); i++) {
profcheckupLocals.add(selector.get(i));
}
break;
case search_before_date:
selector = profcheckupSearch.getProfcheckupsBeforeDate(end);
for (int i = 0; i < selector.size(); i++) {
profcheckupLocals.add(selector.get(i));
}
break;
case search_between_dates:
selector = profcheckupSearch.getProfcheckupsByDate(begin, end);
for (int i = 0; i < selector.size(); i++) {
profcheckupLocals.add(selector.get(i));
}
break;
default:
}
resetTable();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btFindActionPerformed
/**
* Клик на кнопке btNew - "Новый"
* @param evt
*/
private void btNewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btNewActionPerformed
try {
DialogContractM dialogContract = new DialogContractM(MainWindow.mainWindow);
dialogContract.setVisible(true);
if (dialogContract.getDlgResult() == ModalDialog.DLG_OK) {//договор выбран
ContractLocal contractLocal = dialogContract.getContract();//берём его
DirectoryCollaboratorItem dirCollab = dialogContract.getCollaborator();//коллаба тоже
//коллаба тоже
SearchResult result = dialogContract.getResult();
DialogNewProfCheckup profCheckupDialog
= new DialogNewProfCheckup(MainWindow.mainWindow, dirCollab ,contractLocal, getAuditManager());
profCheckupDialog.setVisible(true);
}
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btNewActionPerformed
/**
* Клик на кнопке btDelete - "Удаление"
* @param evt
*/
private void btDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDeleteActionPerformed
int selRow = tblProfcheckups.getSelectedRowSorted();
if (selRow >= 0) {
if (MessageBox.showConfirmYesNo(MessageBox.C_DEL_PROFCHECKUP) ==
MessageBox.ANSWER_YES) {
try {
profcheckupLocals.get(selRow).remove();
profcheckupLocals.remove(selRow);
resetTable();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}
}//GEN-LAST:event_btDeleteActionPerformed
/**
* Клик мышой на таблице с профосмотрами
* @param evt
*/
private void chbTillActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chbTillActionPerformed
dchTillDate.setEnabled(chbTill.isSelected());
selectMode();
}//GEN-LAST:event_chbTillActionPerformed
private void rbDateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rbDateActionPerformed
dchFromDate.setEnabled(chbFrom.isSelected());
dchTillDate.setEnabled(chbTill.isSelected());
chbTill.setEnabled(true);
chbFrom.setEnabled(true);
selectMode();
}//GEN-LAST:event_rbDateActionPerformed
private void rbAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rbAllActionPerformed
dchFromDate.setEnabled(false);
dchTillDate.setEnabled(false);
chbTill.setEnabled(false);
chbFrom.setEnabled(false);
search_mode = search_all;
}//GEN-LAST:event_rbAllActionPerformed
private void btEditWatchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btEditWatchActionPerformed
if (tblProfcheckups.getSelectedRowCount() > 0) {
try {
// PanelProfcheckupView profcheckupView = new PanelProfcheckupView(getContainer(), profcheckupLocals.get(tblProfcheckups.getSelectedRow()));
// PageGeneric page = getContainer().addNewPage((PageGeneric) profcheckupView, null);
ProfcheckupLocal pl = profcheckupLocals.get(tblProfcheckups.getSelectedRowSorted());
ArrayList<ProfcheckupItemLocal> items = pl.getItems();
if (items.isEmpty()) {
MessageBox.showError(MessageBox.E_MAKE_FUCKING_EXCEPTION, "Профосмотр пуст, просмотр невозможен!");
return;
}
PanelProfcheckupView panelProfcheckup = new PanelProfcheckupView(getContainer(),
pl.getItems().get(0).getPolisData().getContract(),
pl);
PageGeneric page = getContainer().addNewPage(panelProfcheckup, null);
getContainer().activatePage(page);
} catch (PageException ex) {
MessageBox.showException(ex);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
} else {
MessageBox.showWarning(MessageBox.W_LIST_ELEMENT_NOT_SELECT);
}
}//GEN-LAST:event_btEditWatchActionPerformed
private void chbFromActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chbFromActionPerformed
dchFromDate.setEnabled(chbFrom.isSelected());
selectMode();
}//GEN-LAST:event_chbFromActionPerformed
private void tblProfcheckupsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tblProfcheckupsMouseClicked
if (evt.getClickCount() >= 2){
btEditWatchActionPerformed(null);
}
}//GEN-LAST:event_tblProfcheckupsMouseClicked
private void btResultActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btResultActionPerformed
if (tblProfcheckups.getSelectedRowCount() == 1){
try {
ProfcheckupLocal pl = profcheckupLocals.get(tblProfcheckups.getSelectedRowSorted());
PanelProfcheckupEdit ppe = new PanelProfcheckupEdit(getContainer(), pl);
getContainer().addNewPage(ppe, null);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}//GEN-LAST:event_btResultActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btDelete;
private javax.swing.JButton btEditWatch;
private javax.swing.JButton btFind;
private javax.swing.JButton btNew;
private javax.swing.JButton btResult;
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JCheckBox chbFrom;
private javax.swing.JCheckBox chbTill;
private org.infotechservice.ICalendar.components.ICDateChooser dchFromDate;
private org.infotechservice.ICalendar.components.ICDateChooser dchTillDate;
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 jScrollPane2;
private javax.swing.JRadioButton rbAll;
private javax.swing.JRadioButton rbDate;
private cli_fmw.utils.sorted_table.SortedTable tblProfcheckups;
// End of variables declaration//GEN-END:variables
@Override
public String getPageTitle() {
return "Поиск профосмотров";
}
@Override
public void beforeActivate() {
}
@Override
public void beforeDeactivate() {
//нифига не делаем
}
@Override
public boolean canBeActivated() {
return true;//всегда мб активирована
}
@Override
public boolean canBeDeactivated() {
return true;//всегда мб деактивирована
}
@Override
public DelegateLine2 getDelegate() {
return null;
}
@Override
public boolean readyForPrint() {
return true;
}
@Override
public void print() {
if (readyForPrint()) {
//производим поиск чтоб результаты соответствовали фильтру
btFindActionPerformed(null);
String title = "Поиск профосмотров по фильтру";
HashMap<String, Object> data = new LinkedHashMap<String, Object>();
if (rbAll.isSelected()) {
data.put("case", "Поиск всех");
}
else {
String date = "Поиск по дате: профосмотры";
if (chbFrom.isSelected()) {
date += "\nпосле: " + Converter.dateToString(dchFromDate.getDate());
}
if (chbTill.isSelected()) {
date += "\nдо: " + Converter.dateToString(dchTillDate.getDate());
}
data.put("case", date);
}
TableReportOptions ops = new TableReportOptions(TableReportOptions.PageOrentation.horizontal);
PrintCreators.createGeneratedReport(title, ops, data.entrySet(), null, tblProfcheckups.getModel(), getClass());
}
}
}