/*
* PanelProfcheckup.java
*
* Created on 17 Сентябрь 2008 г., 18:46
*/
package clips.doctor.profcheckup.checkup;
import cli_fmw.delegate.DelegateLine2;
import clips.delegate.service.SerRenLocal;
import clips.delegate.contract.ContractLocal;
import clips.delegate.contract.PolisData;
import clips.delegate.doctor.checkup.CheckupXMLData;
import beans.service.create.ServiceCheckupChunk;
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.directory.complex.DirectoryDangerItem;
import clips.delegate.doctor.profchekup.ProfcheckupLocal;
import clips.doctor.profcheckup.dialogs.DialogClientChoose;
import clips.doctor.profcheckup.dialogs.PanelDanger;
import cli_fmw.main.ClipsException;
import cli_fmw.main.MainWindow;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageGeneric;
import cli_fmw.main.PrintCreators;
import cli_fmw.main.Printable;
import clips.delegate.directory.filtered.DirectoryServiceItem;
import cli_fmw.report.AlignmentType;
import cli_fmw.report.ExtraField;
import cli_fmw.report.TableReportOptions;
import cli_fmw.utils.Selector;
import cli_fmw.utils.delegate_models.DelegateDateModel;
import clips.delegate.contract.ServisePriceData;
import clips.delegate.directory.complex.DirectoryEnterpriseItem;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import clips.delegate.doctor.profchekup.ProfcheckupItemLocal;
import java.awt.Graphics;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.Set;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import java.awt.Frame;
import java.awt.event.MouseListener;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import javax.swing.RowSorter;
import javax.swing.table.TableRowSorter;
import framework.utils.Converter;
import java.awt.BorderLayout;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import org.infotechservice.ICalendar.DateHandler;
import org.jdom.IllegalDataException;
/**
*
* @author petr
*/
public class PanelProfcheckup extends PageGeneric implements Printable {
private ProfcheckupLocal profcheckup;//профчекап
/**мап панелей ид серпака - панель*/
private Map<Integer, PanelDanger> panelDangerMap;
private SimpleDateFormat dateFormatter;
private GregorianCalendar gc = new GregorianCalendar();
private DirectoryCollaboratorItem collaborator;
private ContractLocal contractLocal;
private DirectoryEnterpriseItem enterprise;
private ArrayList<ProfcheckupItemLocal> profcheckupItemList;
private ArrayList<ProfcheckupItemLocal> profcheckupItemDeletedList;
private boolean painted;
private Map<Integer, PanelDanger> panelDangerMapTrash;
private void fillDangers(Iterator<PanelDanger> iterator) {
System.out.println("fillDangers");
jScrollPane3.getViewport().removeAll();
JComponent last = jScrollPane3;
while (iterator.hasNext()) {
PanelDanger panelDanger = iterator.next();
System.out.println(panelDanger);
JPanel border = new JPanel(new BorderLayout(0, 5));
JPanel panel = panelDanger;
border.add(panel, BorderLayout.NORTH);
if (last instanceof JScrollPane) {
jScrollPane3.setViewportView(border);
} else {
last.add(border, BorderLayout.CENTER);
}
last = border;
}
jScrollPane3.revalidate();
jScrollPane3.getViewport().repaint();
}
/**
* выкидывается, когда невозможно сохранение, нужно
* чтоб дать знать верхнему компоненту, что сохранение не удалось
*/
public class CantSaveException extends ClipsException{
}
/**
* Класс реализующий интерфейс листенера для текстфилда
* При получении фокуса выделяет весь текст
* При потере снимает выделение
*/
private class SelectAllFocusListener implements FocusListener {
private JTextField textField = new JTextField();
public SelectAllFocusListener(JTextField jtf) {
textField = jtf;
}
@Override
public void focusGained(FocusEvent arg0) {
textField.selectAll();
}
@Override
public void focusLost(FocusEvent arg0) {
textField.select(0, 0);
}
}
/**
* Документ, фильтрующий ввод символов, возможно ввести только числа
*/
private class NumberFilter extends DocumentFilter {
@Override
public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
String text, AttributeSet attrs) throws BadLocationException {
fb.replace(offset, length, checkInput(text, offset), attrs);
}
private String checkInput(String proposedValue, int offset) throws BadLocationException {
//Убиваем все нецЫфры
String res = "";
for (int i = 0; i < proposedValue.length(); i++) {
Character ch = proposedValue.charAt(i);
if (Character.isDigit(ch)) {
res += ch;
}
}
return res;
}
}
/**
*
* @param container
* @param dirCollab нужен только при создании нового, если null - залочит добавление
* @param contractLocal
* @param profcheckup
*/
public PanelProfcheckup(PageContainer container,
DirectoryCollaboratorItem dirCollab,
ContractLocal contractLocal,
ProfcheckupLocal profcheckup) throws ClipsException {
super(container);
initComponents();
Map<DirectoryDangerItem, Map<Integer, CheckupXMLData>> bigXmlMap
= new HashMap<DirectoryDangerItem, Map<Integer, CheckupXMLData>>();
profcheckupItemDeletedList = new ArrayList<ProfcheckupItemLocal>();
this.profcheckup = profcheckup;
this.profcheckupItemList = profcheckup.getItems();
this.contractLocal = contractLocal;
this.enterprise = contractLocal.getEnterprise();
if (!profcheckup.isNewlyCreated()){
for (ProfcheckupItemLocal pil : profcheckupItemList) {
if (pil.getPolisData().getContract().getID() != contractLocal.getID()){
throw new IllegalDataException("Use polis from another contract");
}
}
for (ProfcheckupItemLocal pil : profcheckupItemList){
Map<Integer, CheckupXMLData> smallXmlMap = new HashMap<Integer, CheckupXMLData>();
List<SerRenLocal> s = pil.getDiseaseLocal().getSerrenList();
for (int i = 0; i < s.size(); i++) {
SerRenLocal srl = s.get(i);
if (srl.getAnalysis() != null) {
smallXmlMap.put(srl.getService().getID(), srl.getAnalysis().getCheckupXMLData());
}
}
for (Iterator<CheckupXMLData> it = smallXmlMap.values().iterator(); it.hasNext();) {
CheckupXMLData cxmld = it.next();
System.out.println("============Exist XML============");
System.out.println(cxmld.getXMLStr());
}
bigXmlMap.put(pil.getDanger(), smallXmlMap);
}
setScreenFields();
profcheckup.addContentStateListener(container);
}
this.collaborator = dirCollab;
if (collaborator == null){
btAdd.setEnabled(false);
}
lblContract.setText(contractLocal.getHTML());//выводим инфу по договору
addListeners();//и слушатели
panelDangerMap = new HashMap<Integer, PanelDanger>();
panelDangerMapTrash = new HashMap<Integer, PanelDanger>();
Iterator<DirectoryDangerItem> it = bigXmlMap.keySet().iterator();
while (it.hasNext()) {
DirectoryDangerItem ddi = it.next();
boolean block = !profcheckup.isNewlyCreated();
PanelDanger panelDanger = new PanelDanger(ddi,
bigXmlMap.get(ddi),
block,
contractLocal);
panelDangerMap.put(ddi.getID(), panelDanger);
// pnlDangers.add(panelDanger);
// pnlDangers.revalidate();
}
Iterator<PanelDanger> iterator = panelDangerMap.values().iterator();
fillDangers(iterator);
dateFormatter = new SimpleDateFormat("dd.MM.yyyy");
TableCellRenderProfcheckupItemList itemListCellRender
= new TableCellRenderProfcheckupItemList(contractLocal);
tblProfcheckupItemList.setDefaultRenderer(Object.class, itemListCellRender);
painted = false;
resizeColumns();
// dchProfCheckDate.addFocusListener(new FocusListener() {
//
// @Override
// public void focusGained(FocusEvent e) {
//
// }
//
// @Override
// public void focusLost(FocusEvent e) {
// pr dchProfCheckDate.getDate();
// }
// });
// MainWindow.mainWindow.pack();
StateSaver.attachTo(this);
}
/**
* Выставляет значения полям
* Внимание, дату в dchProfCheckDate следует выставлять после обновлений
* спинеров начала и конца
* (Лениво по человечьи править)
* @throws cli_fmw.main.ClipsException
*/
private void setScreenFields() throws ClipsException{
System.out.println("time from: " + profcheckup.getDateFrom().toString());
System.out.println("time till: " + profcheckup.getDateTill().toString());
GregorianCalendar calendar = new GregorianCalendar();
System.out.println("time calendar: " + calendar.toString());
calendar.setTime(profcheckup.getDateFrom());
int HOUR_OF_DAY = calendar.get(GregorianCalendar.HOUR_OF_DAY);
spnHourStart.setValue(HOUR_OF_DAY);
int MINUTE = calendar.get(GregorianCalendar.MINUTE);
System.out.println("H: " + HOUR_OF_DAY + " M: " + MINUTE);
spnMinuteStart.setValue(MINUTE);
calendar.setTime(profcheckup.getDateTill());
spnHourEnd.setValue(calendar.get(GregorianCalendar.HOUR_OF_DAY));
spnMinuteEnd.setValue(calendar.get(GregorianCalendar.MINUTE));
tfAppendix.setText(profcheckup.getDescription());
}
/**
* Установка в ашипко-режим, х.з может ли он быть но видимо может, так что
* пусть пока будет.
* Блокирует все элементы, при клике выводит месседж что панель заблокирована
* дальше диалог мона тока закрыть.
*/
protected void setErrorMode() {
System.err.println("Ахтунг! Упячка! Мы все умрём, Ашипко!");
btRemove.setEnabled(false);
btAdd.setEnabled(false);
tblProfcheckupItemList.setEnabled(false);
tfAppendix.setEnabled(false);
dchProfCheckDate.setEnabled(false);
spnHourEnd.setEnabled(false);
spnHourStart.setEnabled(false);
spnMinuteEnd.setEnabled(false);
spnMinuteStart.setEnabled(false);
MouseListener ml = cli_fmw.utils.ErrorModeListener.errorModeListener;
this.addMouseListener(ml);
tblProfcheckupItemList.addMouseListener(ml);
jScrollPane2.addMouseListener(ml);
}
/**
* Добавление слушателей
*/
private void addListeners() {
tfAppendix.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent arg0) {
resetText();
}
@Override
public void removeUpdate(DocumentEvent arg0) {
resetText();
}
@Override
public void changedUpdate(DocumentEvent arg0) {
resetText();
}
private void resetText() {
try {
profcheckup.setDescription(tfAppendix.getText());
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
});
SelectAllFocusListener focusListener = new SelectAllFocusListener(tfAppendix);
tfAppendix.addFocusListener(focusListener);
new DelegateDateModel<ProfcheckupLocal>(profcheckup, dchProfCheckDate) {
@Override
protected Date getDateImp() throws ClipsException {
return getDelegate().getDateFrom();
}
@Override
protected void setDateImp(Date date) throws ClipsException {
if (date == null){
getDelegate().setDateFrom(null);
getDelegate().setDateTill(null);
}else{
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(GregorianCalendar.HOUR_OF_DAY, (Integer) spnHourStart.getValue());
calendar.set(GregorianCalendar.MINUTE, (Integer) spnMinuteStart.getValue());
getDelegate().setDateFrom(calendar.getTime());
calendar.set(GregorianCalendar.HOUR_OF_DAY, (Integer) spnHourEnd.getValue());
calendar.set(GregorianCalendar.MINUTE, (Integer) spnMinuteEnd.getValue());
getDelegate().setDateTill(calendar.getTime());
}
}
};
}
/**
* Обновление таблицы отображающей кеш профчекап итемов
*/
private void resetTable() throws ClipsException {
TableModelProfcheckupItemList model
= new TableModelProfcheckupItemList(profcheckupItemList);
tblProfcheckupItemList.setModel(model);
RowSorter<TableModelProfcheckupItemList> sorter =
new TableRowSorter<TableModelProfcheckupItemList>(model);
tblProfcheckupItemList.setRowSorter(sorter);
}
/**
* установка размеров колонок
*/
private void resizeColumns() {
TableState state = new TableState();
state.setPreferredWidth(TableModelProfcheckupItemList.CL_SURNAME, 5);
state.setPreferredWidth(TableModelProfcheckupItemList.CL_NAME, 5);
state.setPreferredWidth(TableModelProfcheckupItemList.CL_PATHRON, 5);
state.setPreferredWidth(TableModelProfcheckupItemList.CL_DANGER, 15);
StateSaver.setDefaultState(this, tblProfcheckupItemList, state);
}
/** 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel13 = new javax.swing.JPanel();
jPanel24 = new javax.swing.JPanel();
lblContract = new javax.swing.JLabel();
jPanel10 = new javax.swing.JPanel();
jPanel7 = new javax.swing.JPanel();
jPanel6 = new javax.swing.JPanel();
jLabel6 = new javax.swing.JLabel();
dchProfCheckDate = new org.infotechservice.ICalendar.components.ICDateChooser();
jPanel15 = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
spnHourStart = new com.toedter.components.JSpinField();
spnMinuteStart = new com.toedter.components.JSpinField();
jPanel5 = new javax.swing.JPanel();
jLabel4 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
spnMinuteEnd = new com.toedter.components.JSpinField();
spnHourEnd = new com.toedter.components.JSpinField();
jPanel19 = new javax.swing.JPanel();
jLabel7 = new javax.swing.JLabel();
jPanel21 = new javax.swing.JPanel();
tfAppendix = new javax.swing.JTextField();
jPanel8 = new javax.swing.JPanel();
jSplitPane1 = new javax.swing.JSplitPane();
jPanel12 = new javax.swing.JPanel();
jPanel16 = new javax.swing.JPanel();
jPanel22 = new javax.swing.JPanel();
jPanel17 = new javax.swing.JPanel();
btAdd = new javax.swing.JButton();
btRemove = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
tblProfcheckupItemList = new cli_fmw.utils.sorted_table.SortedTable();
jScrollPane3 = new javax.swing.JScrollPane();
setPreferredSize(new java.awt.Dimension(800, 581));
setLayout(new java.awt.BorderLayout());
jPanel13.setLayout(new java.awt.BorderLayout());
jPanel24.setBorder(javax.swing.BorderFactory.createTitledBorder("Договор"));
jPanel24.setLayout(new java.awt.BorderLayout());
lblContract.setText("jLabel1");
lblContract.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
lblContractMouseClicked(evt);
}
});
jPanel24.add(lblContract, java.awt.BorderLayout.CENTER);
jPanel13.add(jPanel24, java.awt.BorderLayout.WEST);
jPanel10.setLayout(new java.awt.GridLayout(3, 1));
jPanel7.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
jPanel6.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 5, 0));
jLabel6.setText("Дата осмотра ");
jPanel6.add(jLabel6);
jPanel6.add(dchProfCheckDate);
jPanel7.add(jPanel6);
jPanel10.add(jPanel7);
jPanel15.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
jPanel4.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 5, 0));
jLabel3.setText("Время начала ");
jPanel4.add(jLabel3);
jPanel2.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
spnHourStart.setMaximum(23);
spnHourStart.setMinimum(0);
spnHourStart.setPreferredSize(new java.awt.Dimension(37, 19));
spnHourStart.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
spnHourStartPropertyChange(evt);
}
});
jPanel2.add(spnHourStart, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, -1));
spnMinuteStart.setMaximum(59);
spnMinuteStart.setMinimum(0);
spnMinuteStart.setPreferredSize(new java.awt.Dimension(37, 19));
spnMinuteStart.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
spnMinuteStartPropertyChange(evt);
}
});
jPanel2.add(spnMinuteStart, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 0, -1, -1));
jPanel4.add(jPanel2);
jPanel15.add(jPanel4);
jPanel5.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 5, 0));
jLabel4.setText("Время окончания");
jPanel5.add(jLabel4);
jPanel3.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
spnMinuteEnd.setMaximum(59);
spnMinuteEnd.setMinimum(0);
spnMinuteEnd.setPreferredSize(new java.awt.Dimension(37, 19));
spnMinuteEnd.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
spnMinuteEndPropertyChange(evt);
}
});
jPanel3.add(spnMinuteEnd, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 0, -1, -1));
spnHourEnd.setMaximum(23);
spnHourEnd.setMinimum(0);
spnHourEnd.setPreferredSize(new java.awt.Dimension(37, 19));
spnHourEnd.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
spnHourEndPropertyChange(evt);
}
});
jPanel3.add(spnHourEnd, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, -1));
jPanel5.add(jPanel3);
jPanel15.add(jPanel5);
jPanel10.add(jPanel15);
jPanel19.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 5, 1, 1));
jPanel19.setLayout(new java.awt.BorderLayout());
jLabel7.setText("Примечание");
jLabel7.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 5, 1, 10));
jPanel19.add(jLabel7, java.awt.BorderLayout.WEST);
jPanel21.setBorder(javax.swing.BorderFactory.createEmptyBorder(3, 1, 3, 1));
jPanel21.setLayout(new javax.swing.BoxLayout(jPanel21, javax.swing.BoxLayout.LINE_AXIS));
jPanel21.add(tfAppendix);
jPanel19.add(jPanel21, java.awt.BorderLayout.CENTER);
jPanel10.add(jPanel19);
jPanel13.add(jPanel10, java.awt.BorderLayout.CENTER);
add(jPanel13, java.awt.BorderLayout.NORTH);
jPanel12.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 1, 1, 1));
jPanel12.setLayout(new java.awt.BorderLayout());
jPanel16.setLayout(new java.awt.BorderLayout());
jPanel17.setLayout(new java.awt.GridLayout(1, 2, 5, 0));
btAdd.setText("Добавить");
btAdd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btAddActionPerformed(evt);
}
});
jPanel17.add(btAdd);
btRemove.setText("Удалить");
btRemove.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btRemoveActionPerformed(evt);
}
});
jPanel17.add(btRemove);
jPanel22.add(jPanel17);
jPanel16.add(jPanel22, java.awt.BorderLayout.LINE_END);
jPanel12.add(jPanel16, java.awt.BorderLayout.NORTH);
jScrollPane2.setBorder(javax.swing.BorderFactory.createTitledBorder("Список направленных на проф. осмотр"));
jScrollPane2.setViewportView(tblProfcheckupItemList);
jPanel12.add(jScrollPane2, java.awt.BorderLayout.CENTER);
jSplitPane1.setBottomComponent(jPanel12);
jSplitPane1.setLeftComponent(jScrollPane3);
javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
jPanel8.setLayout(jPanel8Layout);
jPanel8Layout.setHorizontalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 570, Short.MAX_VALUE)
);
jPanel8Layout.setVerticalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
);
add(jPanel8, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
private void btAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddActionPerformed
try {
DialogClientChoose dcc = new DialogClientChoose((Frame) getContainer(), collaborator, contractLocal, profcheckupItemList);
dcc.setAlwaysOnTop(true);
dcc.setVisible(true);
if (dcc.getDlgResult() == ModalDialog.DLG_OK) {
//если ДА
Map<PolisData, Set<DirectoryDangerItem>> polisMap = dcc.getSelectedClients();
Iterator<PolisData> it = polisMap.keySet().iterator();
while (it.hasNext()) {
PolisData cmd = it.next();
for (DirectoryDangerItem ddi : polisMap.get(cmd)) {
ProfcheckupItemLocal pil =
new ProfcheckupItemLocal(profcheckup,
new ArrayList<ServiceCheckupChunk>(),
ddi.getID(),
cmd);
profcheckupItemList.add(pil);
profcheckup.setItems(profcheckupItemList);
if (panelDangerMapTrash.get(ddi.getID()) == null){
if (panelDangerMap.get(ddi.getID())==null){
panelDangerMap.put(ddi.getID(), new PanelDanger(ddi, null, false, contractLocal));
}
}else{
//panelDangerMap.get(ddi.getID()).setVisible(true);
panelDangerMap.put(ddi.getID(), panelDangerMapTrash.get(ddi.getID()));
}
// pnlDangers.add(panelDangerMap.get(ddi.getID()));
}
Iterator<PanelDanger> iterator = panelDangerMap.values().iterator();
fillDangers(iterator);
}
resetTable(); //добавляем в кеш
}
// pnlDangers.revalidate();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btAddActionPerformed
private void btRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btRemoveActionPerformed
try {
int[] selected = tblProfcheckupItemList.getSelectedRowsSorted();//берём индексы выделенных элементов
//удаляем профчекапитемы по индексу начиная с конца списка
for (int i = selected.length - 1; i >= 0; i--) {
ProfcheckupItemLocal pil = profcheckupItemList.get(selected[i]);
profcheckupItemDeletedList.add(pil);
profcheckupItemList.remove(selected[i]);
}
profcheckup.setItems(profcheckupItemList);
resetTable();//обновляем таблицу
hideDangerPanels();
} catch (ClipsException ex) {
setErrorMode();
MessageBox.showException(ex);//ниасилил
}
}//GEN-LAST:event_btRemoveActionPerformed
private void hideDangerPanels() throws ClipsException {
panelDangerMap.putAll(panelDangerMapTrash);
panelDangerMapTrash.clear();
Set<Integer> is = new HashSet<Integer>();
for (ProfcheckupItemLocal pil : profcheckupItemList) {
is.add(pil.getDanger().getID());
}
Iterator<Integer> iterator = panelDangerMap.keySet().iterator();
while (iterator.hasNext()) {
Integer i = iterator.next();
if (!is.contains(i)){
PanelDanger pd = panelDangerMap.get(i);
// pnlDangers.remove(pd);
panelDangerMapTrash.put(pd.getDanger().getID(),pd);
// panelDangerMap.remove(pd.getDanger().getID());
}
}
Iterator<Integer> iterator1 = panelDangerMapTrash.keySet().iterator();
while (iterator1.hasNext()) {
Integer i = iterator1.next();
panelDangerMap.remove(i);
}
fillDangers(panelDangerMap.values().iterator());
}
private void spnMinuteStartPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_spnMinuteStartPropertyChange
try {
if (profcheckup.getDateFrom() == null){
return;
}
gc.setTime(profcheckup.getDateFrom());
gc.set(GregorianCalendar.MINUTE, spnMinuteStart.getValue());
profcheckup.setDateFrom(gc.getTime());
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_spnMinuteStartPropertyChange
private void spnHourStartPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_spnHourStartPropertyChange
try {
if (profcheckup.getDateFrom() == null){
return;
}
gc.setTime(profcheckup.getDateFrom());
gc.set(GregorianCalendar.HOUR_OF_DAY, spnHourStart.getValue());//GEN-LAST:event_spnHourStartPropertyChange
profcheckup.setDateFrom(gc.getTime());
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
private void spnHourEndPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_spnHourEndPropertyChange
try {
if (profcheckup.getDateTill() == null){
return;
}
gc.setTime(profcheckup.getDateTill());
gc.set(GregorianCalendar.HOUR_OF_DAY, spnHourEnd.getValue());
profcheckup.setDateTill(gc.getTime());
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_spnHourEndPropertyChange
private void spnMinuteEndPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_spnMinuteEndPropertyChange
try {
if (profcheckup.getDateFrom() == null){
return;
}
gc.setTime(profcheckup.getDateTill());
gc.set(GregorianCalendar.MINUTE, spnMinuteEnd.getValue());
profcheckup.setDateTill(gc.getTime());
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_spnMinuteEndPropertyChange
private void lblContractMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblContractMouseClicked
for (PanelDanger panelDanger : panelDangerMap.values()) {
System.out.println(panelDanger + " " + panelDanger.getSize());
}
jScrollPane3.revalidate();
}//GEN-LAST:event_lblContractMouseClicked
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btAdd;
private javax.swing.JButton btRemove;
private org.infotechservice.ICalendar.components.ICDateChooser dchProfCheckDate;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JPanel jPanel10;
private javax.swing.JPanel jPanel12;
private javax.swing.JPanel jPanel13;
private javax.swing.JPanel jPanel15;
private javax.swing.JPanel jPanel16;
private javax.swing.JPanel jPanel17;
private javax.swing.JPanel jPanel19;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel21;
private javax.swing.JPanel jPanel22;
private javax.swing.JPanel jPanel24;
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.JScrollPane jScrollPane3;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JLabel lblContract;
private com.toedter.components.JSpinField spnHourEnd;
private com.toedter.components.JSpinField spnHourStart;
private com.toedter.components.JSpinField spnMinuteEnd;
private com.toedter.components.JSpinField spnMinuteStart;
private cli_fmw.utils.sorted_table.SortedTable tblProfcheckupItemList;
private javax.swing.JTextField tfAppendix;
// End of variables declaration//GEN-END:variables
@Override
public String getPageTitle() {
return "Редактор профосмотра";
}
@Override
public DelegateLine2 getDelegate() {
// if (tblProfcheckupItemList.getSelectedRowCount() == 1){
// try {
// int row =tblProfcheckupItemList.getSelectedRow();
// ClientLocal client = profcheckupItemList.get(row).getPolisData().getClient();
// System.out.println("Get delegate: " + client.getFIO());
// return client;
// } catch (ClipsException ex) {
// ex.printStackTrace();
// return null;
// }
// }
return null;
}
@Override
public void paint(Graphics g) {
super.paint(g);
if (!painted && tblProfcheckupItemList.getModel() instanceof TableModelProfcheckupItemList){
painted = true;
}
}
public boolean isDirty() {
return profcheckup != null ? profcheckup.isDirty() : false;
}
public void save() throws ClipsException{
if (profcheckup.getItems().size() == 0){
MessageBox.showWarning(this, "На проф. осмотр не направлено ниодного человека!");
throw new CantSaveException();
}
if (profcheckup.getDateFrom() == null || profcheckup.getDateTill() == null){
MessageBox.showWarning(this, "Установите дату и время проф. осмотра!");
throw new CantSaveException();
}
if (profcheckup.getDateFrom().after(profcheckup.getDateTill())){
MessageBox.showWarning(this, "Время начала профосмотра не может быть больше времени его окончания!");
throw new CantSaveException();
}
for (PanelDanger ps : panelDangerMap.values()){
if (!ps.isInContract()){
MessageBox.showWarning(this, "Некоторые из услуг не включены в договор, сохранение невозможно!");
throw new CantSaveException();
}
}
for (PanelDanger ps : panelDangerMap.values()){
if (!ps.isXmlFilled()){
MessageBox.showWarning(this, MessageBox.W_ANALISES_NOT_SET);
throw new CantSaveException();
}
}
if (!checkMoney()){
int res = MessageBox.showConfirmYesNo(this, MessageBox.C_SAVE_CHANGES,
"Некоторые из услуг по договору оплачиваются не полностью, продолжить?");
if (res == MessageBox.ANSWER_NO){
throw new CantSaveException();
}
}
for (ProfcheckupItemLocal pic : profcheckupItemList) {
if (pic.serviceList() != null) {
//создаем список услуг, содержащих хмл
//gdfgdfg
ArrayList<DirectoryServiceItem> serviceList = new ArrayList<DirectoryServiceItem>();
serviceList = panelDangerMap.get(pic.getDanger().getID()).getServiceList();
for (DirectoryServiceItem service : serviceList) {
CheckupXMLData xmlData = panelDangerMap.get(pic.getDanger().getID()).getXml(service);
String xml = xmlData != null ? xmlData.getXMLStr() : null;
int checkupTypeID = xmlData != null ? xmlData.getCheckupType().getID() : 0;
ServiceCheckupChunk chunk = new ServiceCheckupChunk(service.getID(), xml, checkupTypeID);
pic.serviceList().add(chunk);
}
}
}
profcheckup.save1();
//remove removed
for (ProfcheckupItemLocal pil : profcheckupItemDeletedList) {
if (!pil.isNewlyCreated()){
pil.remove();
}
}
profcheckupItemDeletedList.clear();
}
/**
* Проверяет совпадение цены услуги и оплаты за услугу страховой компанией
* @return
*/
private boolean checkMoney() throws ClipsException{
Set<DirectoryServiceItem> serviceItems = new HashSet<DirectoryServiceItem>();
for (PanelDanger ps : panelDangerMap.values()){
ArrayList<DirectoryServiceItem> serviceList = ps.getServiceList();
serviceItems.addAll(serviceList);
}
Selector<ServisePriceData> contractServiceList
= contractLocal.getContractServiceList();
HashMap<DirectoryServiceItem, Integer> servSet
= new HashMap<DirectoryServiceItem, Integer>();
for (int i = 0; i < contractServiceList.size(); i++) {
ServisePriceData serviceData = contractServiceList.get(i);
servSet.put(serviceData.getService(), serviceData.getPrice() - serviceData.getMoney());
}
for (DirectoryServiceItem dsi : serviceItems) {
if (servSet.get(dsi) != 0){
return false;
}
}
return true;
}
public void restore() {
profcheckup.restore();
try {
profcheckupItemList = profcheckup.getItems();
setScreenFields();
resetTable();
hideDangerPanels();
} catch (ClipsException ex) {
MessageBox.showException(ex);
setErrorMode();
}
}
public void beforeActivate() {
try {
resetTable();
} catch (ClipsException ex) {
MessageBox.showException(ex);
setErrorMode();
}
}
@Override
public boolean readyForPrint() {
return !isDirty();
}
@Override
public void print() {
try {
String title = "Информация по профосмотру";
HashMap<String, Object> data = new LinkedHashMap<String, Object>();
data.put("date", "Дата: " + Converter.dateToString(profcheckup.getDateFrom()));
data.put("contractInfo", "Данные договора, по которому производится профосмотр");
AlignmentType at = AlignmentType.dataInOneColoumnByLeft;
ExtraField ef = new ExtraField(contractLocal.getIndex(), "индекс:", at);
data.put("contractIndex", ef);
ef = new ExtraField(contractLocal.getEnterprise(), "предприятие:", at);
data.put("contractEnterprise", ef);
String dangers = "Вредные факторы:\n";
Iterator<PanelDanger> it = panelDangerMap.values().iterator();
while (it.hasNext()) {
PanelDanger panelDanger = it.next();
if (panelDanger.isVisible()) {
dangers += " - " + panelDanger.getDanger().getTitle() + "\n";
}
}
data.put("dangers", dangers);
data.put("clients", "Список пациентов, направленных на профосмотр");
TableReportOptions ops = new TableReportOptions(TableReportOptions.PageOrentation.horizontal);
PrintCreators.createGeneratedReport(title, ops, data.entrySet(),
null, tblProfcheckupItemList.getModel(), getClass());
} catch(ClipsException ex) {
MessageBox.showException(ex);
}
}
}