/*
* PanelProfcheckupItemView.java
*
* Created on 17 Май 2008 г., 11:03
*/
package clips.doctor.profcheckup.item;
import cli_fmw.utils.SelectorEditableExceptional;
import clips.delegate.directory.complex.DangerServiceData;
import clips.delegate.directory.complex.DirectoryPacketTemplateItem;
import clips.delegate.contract.PolisData;
import clips.delegate.directory.simple.profcheckupResult.DirectoryProfcheckupResultItem;
import clips.delegate.doctor.profchekup.ProfcheckupItemLocal;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.main.ActivateSensitive;
import cli_fmw.main.ClipsException;
import cli_fmw.main.MainWindow;
import cli_fmw.main.OpenCloseSensitive;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageGeneric;
import cli_fmw.main.Persistentable;
import cli_fmw.utils.InfoDialog;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.table_config_states.StateSaver;
import clips.delegate.directory.complex.DirectoryDangerItem;
import clips.delegate.directory.simple.profcheckupResult.DirectoryProfcheckupResult;
import clips.doctor.medexam.TableModelMedexamResult;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
/**
* Панель отображает информацию по данному профчекап итему
* TODO: привинтить права
* @author petr
*/
public class PanelProfCheckupItemEdit extends PageGeneric implements DocumentListener,
Persistentable,
ActivateSensitive{
DirectoryPacketTemplateItem servicePacket; //пакет услуг точнее его шаблон
private ProfcheckupItemLocal profcheckupItemLocal;//сам делегат
private String title;
private String serviceInfo;
private String contractInfo;
private TableModelMedexamResult model;
private DirectoryProfcheckupResult dirPR;
/** Creates new form PanelProfcheckupItemView */
public PanelProfCheckupItemEdit(PageContainer container, ProfcheckupItemLocal profcheckupItem) throws ClipsException {
super(container);
initComponents();
dirPR = DirectoryLocator.getDirectory(DirectoryProfcheckupResult.class);
// dchLightWorkTill.setEnabled(false);//скрываем панель "отправлен на люгкую работу"
setProfCheckupItem(profcheckupItem);
title = profcheckupItemLocal.getPolisData().getClient(getAuditManager()).toString();
taResultExtra.getDocument().addDocumentListener(this);
profcheckupItemLocal.addContentStateListener(container);
createServiceInfo(profcheckupItem.getDanger());
contractInfo = profcheckupItem.getPolisData().getContract().getHTML();
StateSaver.attachTo(this);
}
private void reloadTable() throws ClipsException {
if (model != null) {
profcheckupItemLocal.removeContentStateListener(model);
}
model = new TableModelMedexamResult(profcheckupItemLocal);
model.addTableModelListener(tblResults);
tblResults.setModel(model);
DefaultComboBoxModel modelTypes = new DefaultComboBoxModel(dirPR.toArray());
JComboBox comboPR = new JComboBox(modelTypes);
tblResults.getColumnModel().getColumn(TableModelMedexamResult.COL_RESULT).setCellEditor(new DefaultCellEditor(comboPR));
}
void createServiceInfo(DirectoryDangerItem ddi) throws ClipsException{
serviceInfo = "<html>";//<h1>Список необходимых к оказанию услуг</h1><hr>";
SelectorEditableExceptional<DangerServiceData> dangerServices = ddi.getDangerServices();
serviceInfo += "<UL>";
for (int i = 0; i < dangerServices.size(); i++) {
String servTitle = dangerServices.get(i).getService().getTitle();
serviceInfo += "<li>" + servTitle;
}
serviceInfo += "</UL></html>";
}
/**
* Задание профчекапитема панели
* @param pil - сам делегат
*/
public void setProfCheckupItem(ProfcheckupItemLocal pil) throws ClipsException {
//устанавливаем поля окна
taDanger.setText(pil.getDanger().getTitle());
taDanger.setCaretPosition(0);
taResultExtra.setText(pil.getResultExtra());
taResultExtra.setCaretPosition(0);
//загружаем в модель комбо-бокса виды результатов из справочника
DirectoryProfcheckupResult simple = DirectoryLocator.getDirectory(DirectoryProfcheckupResult.class);
DefaultComboBoxModel boxModel1 = new DefaultComboBoxModel(simple.toArray());
cbProfres.setModel(boxModel1);
cbPassed.setSelected(pil.isPassed());//пройден / непройден
cbProfres.setEnabled(pil.isPassed());
// dchLightWorkTill.setEnabled(cbPassed.isSelected());
this.profcheckupItemLocal = pil;
dchLightWorkTill.setEnabled(pil.getResult().isLimitaryFit() && cbPassed.isSelected());// показываем панель pnlLightWork
dchLightWorkTill.setDate(pil.getLightWorkTill());//ставим её в датачузер
if (pil.isPassed()) {//если профосмотр пройден, то
cbProfres.setSelectedItem(pil.getResult());//устанавливаем текущий результат
}else{
cbProfres.setSelectedItem(simple.getNullItem());
}
reloadTable();
}
/** 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() {
jScrollPane3 = new javax.swing.JScrollPane();
jSplitPane1 = new javax.swing.JSplitPane();
jPanel3 = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
taResultExtra = new javax.swing.JTextArea();
jPanel6 = new javax.swing.JPanel();
jPanel7 = new javax.swing.JPanel();
jLabel7 = new javax.swing.JLabel();
cbPassed = new javax.swing.JCheckBox();
jPanel10 = new javax.swing.JPanel();
jLabel5 = new javax.swing.JLabel();
cbProfres = new javax.swing.JComboBox();
pnlLightWork = new javax.swing.JPanel();
jLabel6 = new javax.swing.JLabel();
dchLightWorkTill = new org.infotechservice.ICalendar.components.ICDateChooser();
jPanel2 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
taDanger = new javax.swing.JTextArea();
jPanel4 = new javax.swing.JPanel();
jPanel5 = new javax.swing.JPanel();
btContract = new javax.swing.JButton();
btServiceList = new javax.swing.JButton();
jPanel8 = new javax.swing.JPanel();
jScrollPane4 = new javax.swing.JScrollPane();
tblResults = new cli_fmw.utils.sorted_table.SortedTable();
setLayout(new java.awt.BorderLayout());
jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jPanel3.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
jPanel3.setLayout(new java.awt.BorderLayout());
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Проф. осмотр", javax.swing.border.TitledBorder.LEFT, javax.swing.border.TitledBorder.DEFAULT_POSITION));
jPanel1.setLayout(new java.awt.BorderLayout());
jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder("Дополнение к результату"));
jScrollPane1.setMaximumSize(new java.awt.Dimension(205, 105));
jScrollPane1.setMinimumSize(new java.awt.Dimension(220, 85));
taResultExtra.setColumns(20);
taResultExtra.setLineWrap(true);
taResultExtra.setRows(3);
taResultExtra.setMaximumSize(new java.awt.Dimension(200, 100));
taResultExtra.setMinimumSize(new java.awt.Dimension(215, 90));
jScrollPane1.setViewportView(taResultExtra);
jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jPanel6.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 0, 1, 1));
jPanel6.setLayout(new java.awt.GridLayout(2, 1, 0, 5));
jPanel7.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 5, 0));
jLabel7.setText("Пройден");
jPanel7.add(jLabel7);
cbPassed.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
cbPassed.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
cbPassed.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbPassedActionPerformed(evt);
}
});
jPanel7.add(cbPassed);
jPanel10.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 10, 0, 0));
jPanel10.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 5, 0));
jLabel5.setText("Результат профосмотра");
jPanel10.add(jLabel5);
cbProfres.setEnabled(false);
cbProfres.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbProfresActionPerformed(evt);
}
});
jPanel10.add(cbProfres);
jPanel7.add(jPanel10);
jPanel6.add(jPanel7);
pnlLightWork.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 5, 0));
jLabel6.setText("Переведен на лёгкую работу до ");
pnlLightWork.add(jLabel6);
dchLightWorkTill.setPreferredSize(new java.awt.Dimension(120, 19));
dchLightWorkTill.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
dchLightWorkTillPropertyChange(evt);
}
});
pnlLightWork.add(dchLightWorkTill);
jPanel6.add(pnlLightWork);
jPanel1.add(jPanel6, java.awt.BorderLayout.NORTH);
jPanel3.add(jPanel1, java.awt.BorderLayout.CENTER);
jPanel2.setLayout(new java.awt.BorderLayout());
jScrollPane2.setBorder(javax.swing.BorderFactory.createTitledBorder("Вредный фактор"));
jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
taDanger.setColumns(20);
taDanger.setLineWrap(true);
taDanger.setRows(2);
taDanger.setWrapStyleWord(true);
jScrollPane2.setViewportView(taDanger);
jPanel2.add(jScrollPane2, java.awt.BorderLayout.CENTER);
jPanel4.setLayout(new java.awt.GridBagLayout());
jPanel5.setLayout(new java.awt.BorderLayout(0, 3));
btContract.setText("Договор");
btContract.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btContractActionPerformed(evt);
}
});
jPanel5.add(btContract, java.awt.BorderLayout.NORTH);
btServiceList.setText("Услуги");
btServiceList.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btServiceListActionPerformed(evt);
}
});
jPanel5.add(btServiceList, java.awt.BorderLayout.SOUTH);
jPanel4.add(jPanel5, new java.awt.GridBagConstraints());
jPanel2.add(jPanel4, java.awt.BorderLayout.EAST);
jPanel3.add(jPanel2, java.awt.BorderLayout.PAGE_START);
jSplitPane1.setLeftComponent(jPanel3);
jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder("Осмотры специалистов"));
tblResults.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane4.setViewportView(tblResults);
javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
jPanel8.setLayout(jPanel8Layout);
jPanel8Layout.setHorizontalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 434, Short.MAX_VALUE)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE))
);
jPanel8Layout.setVerticalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 130, Short.MAX_VALUE)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 130, Short.MAX_VALUE))
);
jSplitPane1.setRightComponent(jPanel8);
add(jSplitPane1, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
private void cbPassedActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbPassedActionPerformed
try {
if (cbPassed.isSelected()){//restore all fields exept passed
cbProfres.setEnabled(true);
taResultExtra.setEditable(true);
profcheckupItemLocal.setPassed(true);
}else{
profcheckupItemLocal.restore();
profcheckupItemLocal.setPassed(false);
setProfCheckupItem(profcheckupItemLocal);
}
dchLightWorkTill.setEnabled(((DirectoryProfcheckupResultItem)cbProfres.getSelectedItem()).isLimitaryFit() && cbPassed.isSelected());
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_cbPassedActionPerformed
private void cbProfresActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbProfresActionPerformed
Object sel = cbProfres.getSelectedItem();
if (sel instanceof DirectoryProfcheckupResultItem){
try {
DirectoryProfcheckupResultItem resultItem = (DirectoryProfcheckupResultItem) sel;
dchLightWorkTill.setEnabled(resultItem.isLimitaryFit() && cbPassed.isSelected());
profcheckupItemLocal.setResult(resultItem);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}//GEN-LAST:event_cbProfresActionPerformed
private void dchLightWorkTillPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_dchLightWorkTillPropertyChange
if (dchLightWorkTill.isEnabled()){
try {
profcheckupItemLocal.setLightWorkTill(dchLightWorkTill.getDate());
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}//GEN-LAST:event_dchLightWorkTillPropertyChange
private void btServiceListActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btServiceListActionPerformed
InfoDialog infoDialog = new InfoDialog(MainWindow.mainWindow, serviceInfo, "Список необходимых услуг");
infoDialog.setVisible(true);
}//GEN-LAST:event_btServiceListActionPerformed
private void btContractActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btContractActionPerformed
InfoDialog infoDialog = new InfoDialog(MainWindow.mainWindow, contractInfo, "Информация о договоре");
infoDialog.setVisible(true);
}//GEN-LAST:event_btContractActionPerformed
@Override
public String getPageTitle() {
return "Проф. осмотр " + title;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btContract;
private javax.swing.JButton btServiceList;
private javax.swing.JCheckBox cbPassed;
private javax.swing.JComboBox cbProfres;
private org.infotechservice.ICalendar.components.ICDateChooser dchLightWorkTill;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel10;
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 javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JScrollPane jScrollPane4;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JPanel pnlLightWork;
private javax.swing.JTextArea taDanger;
private javax.swing.JTextArea taResultExtra;
private cli_fmw.utils.sorted_table.SortedTable tblResults;
// End of variables declaration//GEN-END:variables
@Override
public DelegateLine2 getDelegate() {
return null;
}
@Override
public void insertUpdate(DocumentEvent e) {
updateText(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateText(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
updateText(e);
}
private void updateText(DocumentEvent e) {
if (profcheckupItemLocal != null){
try {
profcheckupItemLocal.setResultExtra(e.getDocument().getText(0, e.getDocument().getLength()));
} catch (BadLocationException ex) {
MessageBox.showException(ex);
} catch (ClipsException ex){
MessageBox.showException(ex);
}
}
}
@Override
public boolean isDirty() {
return profcheckupItemLocal != null ? profcheckupItemLocal.isDirty() : false;
}
@Override
public void save() throws ClipsException {
profcheckupItemLocal.save1();
setProfCheckupItem(profcheckupItemLocal);
}
@Override
public void restore() {
profcheckupItemLocal.restore();
try {
setProfCheckupItem(profcheckupItemLocal);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
@Override
public void beforeActivate() {
//do nothing
}
@Override
public void beforeDeactivate() {
//do nothing
}
@Override
public boolean canBeActivated() {
return true;
}
@Override
public boolean canBeDeactivated() {
return !isDirty();
}
}