Package clips.doctor.profcheckup.checkup

Source Code of clips.doctor.profcheckup.checkup.PanelProfcheckup

/*
* 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);
        }
    }
}
TOP

Related Classes of clips.doctor.profcheckup.checkup.PanelProfcheckup

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.