Package clips.shedule.reception

Source Code of clips.shedule.reception.PanelReception

/*
* PanelShedule.java
*
* Created on 29 Февраль 2008 г., 17:21
*/

package clips.shedule.reception;

import TimeTable.Day;
import TimeTable.DayOfWeek;
import TimeTable.JTableRuler;
import TimeTable.JTimeTable;
import TimeTable.model.TimeTableModel;
import TimeTable.scaler.TimeScaler;
import TimeTable.scaler.TimeScalerTraditional;
import clips.delegate.client.ClientLocal;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import clips.delegate.directory.complex.DirectoryWorkType;
import clips.delegate.directory.complex.DirectoryWorkTypeItem;
import cli_fmw.delegate.DelegateLine2;
import clips.delegate.directory.ro.DirectoryLpuItem;
import clips.delegate.service.SerRenLocal;
import clips.delegate.shedule.SheduledDay;
import clips.delegate.shedule.exception.SheduleExceptionLocal;
import clips.delegate.shedule.individual.SheduleIndividualLocal;
import clips.delegate.shedule.individual.WeekIndex;
import clips.delegate.shedule.insertion_point.SheduleInsertionPointLocal;
import clips.delegate.shedule.prorumble.SheduleProrumbleData;
import clips.delegate.shedule.prorumble.SheduleProrumbleLocal;
import clips.delegate.shedule.reception.ClientReceptionMode;
import clips.delegate.shedule.reception.SheduleClientReceptionLocal;
import clips.delegate.shedule.reception.SheduleReceptionData;
import clips.delegate.shedule.reception.SheduleReceptionLocal;
import clips.delegate.shedule.week.SheduleWeekLocal;
import cli_fmw.delegate.utils.TimeLocal;
import clips.directory.dialogs.collaborators.DirectoryDialogCollaborators;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageGeneric;
import cli_fmw.main.Persistentable;
import cli_fmw.main.Printable;
import clips.shedule.template.SheduleTemplateTableModel;
import cli_fmw.utils.ErrorValue;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.Selector;
import cli_fmw.utils.combo_vetoable.VetoableComboBoxListener;
import cli_fmw.utils.combo_vetoable.VetoableComboBoxModel;
import cli_fmw.main.ClipsException;
import cli_fmw.main.PrintCreators;
import cli_fmw.main.PageGeneric;
import cli_fmw.utils.table_config_states.StateSaver;
import clips.delegate.directory.ro.DirectoryCollaborator;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import clips.delegate.shedule.SheduleHelper;
import clips.login.UserInfo;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import framework.utils.Converter;

/**
*
* @author  axe
*/
public class PanelReception extends PageGeneric
        implements Persistentable, Printable {
   
    private final static int PANELMODE_OK = 0;
    private final static int PANELMODE_ERROR = 1;
    private final static int PANELMODE_HOLIDAY = 2;
    private final static int PANELMODE_NOSELECTION = 3;
   
    private final SheduleWeekLocal swl;
    private final SheduleInsertionPointLocal sip;
    private SheduleReceptionLocal srl;
    private SheduleProrumbleLocal spl;
    private SheduleIndividualLocal sil;
    private SheduleClientReceptionLocal scr;
   
    private TimeScaler scaler;
    private Calendar currentDay;
    private ClientLocal pacient;
    private DirectoryCollaboratorItem collaborator;

    private CollaboratorProcess collaboratorProcess = new CollaboratorProcess();
    private CalendarProcess calendarProcess = new CalendarProcess();
    private WorkTypeProcess workTypeProcess = new WorkTypeProcess();
    private ShowPrevouseReceptionProcess prevReceptionProcess = new ShowPrevouseReceptionProcess();
   
    private JLabel stubLabel, stubLabel2;
    private VetoableComboBoxModel collabModel;
    class WeekendException extends ClipsException {
        WeekendException(String desc) {
            super(desc);
        }
    }   
   
    /**
     * Creates new form PanelShedule
     */
    public PanelReception(PageContainer container, DelegateLine2 pacient) throws ClipsException {
        this(container, (ClientLocal) pacient);
    }
   
    public PanelReception(PageContainer container, ClientLocal pacient) throws ClipsException {
        super(container);
        initComponents();
        jScrollPane1.getVerticalScrollBar().setUnitIncrement(15);
       
        stubLabel = new JLabel();
        stubLabel.setHorizontalAlignment(JLabel.CENTER);
        stubLabel2 = new JLabel();
        stubLabel2.setHorizontalAlignment(JLabel.CENTER);
       
        this.pacient = pacient;
        sip = new SheduleInsertionPointLocal();
        swl = SheduleWeekLocal.getInstance();
        scr = new SheduleClientReceptionLocal(pacient);

        wtOn.setSelected(collaborator == null);
        workTypesCombo.setEnabled(collaborator == null);
       
        VetoableComboBoxModel wtmodel = new VetoableComboBoxModel();
        DirectoryWorkType wtd = (DirectoryWorkType) DirectoryLocator.getDirectory(DirectoryWorkType.class, false);
        Selector<DirectoryWorkTypeItem> workTypes = wtd.getItems();
        for(int i=0; i<workTypes.size(); i++) {
            DirectoryWorkTypeItem item = workTypes.get(i);
            if(item.isAvailiable()) {
                wtmodel.addElement(item);           
            }
        }
        wtmodel.setSelectedItem(null);
        wtmodel.addVetoableComboBoxListener(workTypeProcess);
        workTypesCombo.setModel(wtmodel);
       
        VetoableComboBoxModel crmodel = new VetoableComboBoxModel();
        for(ClientReceptionMode mode :scr.getModeList())  {
            crmodel.addElement(mode);
        }
        crmodel.setSelectedItem(null);
        crmodel.addVetoableComboBoxListener(new PrevouseReceptionProcess());
        prevoiseReceptionCombo.setModel(crmodel);
        prevoiseReceptions.setCellRenderer(new ReceptionListCellRenderer());
       
        StateSaver.attachTo(this);
    }

    /**
     * Вызывается при изменении типа работ
     */
    class WorkTypeProcess implements  VetoableComboBoxListener {
        @Override
        public boolean tryChange(Object newItem) {
            if(isDirty()) {
                return false;
            }
            srl = null;
            DirectoryWorkTypeItem workType = (DirectoryWorkTypeItem) newItem;
            if(workType != null) {
                try {
                    fillCollaboratorCombo(workType);
                    collCombo.setEnabled(true);
                    setPanelMode(PANELMODE_NOSELECTION, null);
                } catch (ClipsException ex) {
                    setPanelMode(PANELMODE_ERROR, "Ошибка");
                    MessageBox.showException(ex);
                }
            }
            return true;   
        }
    }
   
    class PrevouseReceptionProcess implements VetoableComboBoxListener {
        @Override
        public boolean tryChange(Object newItem) {
            if(isDirty()) {
                return false;
            }
            try {
                ClientReceptionMode mode = (ClientReceptionMode) newItem;
                if (mode == null) {
                    return false;
                }
                prevoiseReceptions.removeListSelectionListener(prevReceptionProcess);
                List<SheduleReceptionData> recs = scr.selector(mode);
                DefaultListModel model = new DefaultListModel();
                for(int i=0; i<recs.size(); i++) {
                    model.addElement(recs.get(i));
                    System.out.println("Added " + recs.get(i));
                }
                prevoiseReceptions.setModel(model);
                prevoiseReceptions.setSelectedIndex(-1);
                prevoiseReceptions.addListSelectionListener(prevReceptionProcess);
               
                calendar.setCalendar(TimeLocal.getCurrentTime());
            } catch (ClipsException ex) {
                MessageBox.showException(ex);
            }
            return true;
        }
    }

   
    class ShowPrevouseReceptionProcess implements ListSelectionListener {

        @Override
        public void valueChanged(ListSelectionEvent e) {
             SheduleReceptionData item = (SheduleReceptionData) prevoiseReceptions.getSelectedValue();
             if(item == null) {
                 return;
             }
             try {
                 /*if(!item.getCollaborator().isVisible()) {
                     //сотруднег уволен нах
                     MessageBox.showError(MessageBox.E_MAKE_FUCKING_EXCEPTION);
                     return;
                 }*/
                
                if(isDirty()) {
                    return;
                }
                
                DirectoryCollaboratorItem selectedCollaborator = item.getCollaborator();
                fillCollaboratorCombo(selectedCollaborator);
               
                calendar.removePropertyChangeListener(calendarProcess);
                Calendar cal = GregorianCalendar.getInstance();
                cal.setTime(item.getBegin());
                calendar.setCalendar(cal);
                calendar.addPropertyChangeListener(calendarProcess);
               
                initPanel(selectedCollaborator);
                setPanelMode(PANELMODE_OK, null);
            } catch (WeekendException ex) {
                setPanelMode(PANELMODE_HOLIDAY, ex.getLocalizedMessage());
            } catch (ClipsException ex) {
                MessageBox.showException(ex);
                setPanelMode(PANELMODE_ERROR, "Ошибка");
            } catch (Exception ex) {
                setPanelMode(PANELMODE_ERROR, ex.getLocalizedMessage());
                MessageBox.showExceptionOnly(ex);
            }
        }

    }
   
    private void fillCollaboratorCombo(DirectoryCollaboratorItem selected) throws ClipsException {
        collabModel = new VetoableComboBoxModel();
        DirectoryCollaborator colls = DirectoryLocator.getDirectory(DirectoryCollaborator.class, false);
        DirectoryLpuItem lpu = UserInfo.get().getCollaborator().getLpu();
        List<DirectoryCollaboratorItem> c = colls.getItemsFiltered(lpu, false, true, true);
        for (int i = 0; i < c.size(); i++) {
            DirectoryCollaboratorItem coll = c.get(i);
            if(coll.isVisible()
                    && coll.isSheduled()) {
                collabModel.addElement(c.get(i));
            }
        }
        collabModel.setSelectedItem(selected);
        collabModel.addVetoableComboBoxListener(collaboratorProcess);
        collCombo.setModel(collabModel);
    }
    /**
     *
     * @throws cli_fmw.delegate.exception.ClipsException
     */
    private void fillCollaboratorCombo(DirectoryWorkTypeItem workType)
            throws ClipsException {
        collabModel = new VetoableComboBoxModel();
        Iterator<DirectoryCollaboratorItem> i= sip.getInsertionPoint(workType).iterator();
        DirectoryLpuItem lpu = UserInfo.get().getCollaborator().getLpu();
        while(i.hasNext()) {
            DirectoryCollaboratorItem item = i.next();

            if(item.isVisible() && item.getLpu().getID() == lpu.getID()
                    && item.isSheduled()) {
                collabModel.addElement(item);
            }
        }
       
        collabModel.setSelectedItem(null);
        collabModel.addVetoableComboBoxListener(collaboratorProcess);
        collCombo.setModel(collabModel);
    }

    /**
     * Вызывается при смене сотрудника
     */
    class CollaboratorProcess implements VetoableComboBoxListener {
        @Override
        public boolean tryChange(Object newItem) {
            if(isDirty()) {
                return false;
            }
            try {
                calendar.removePropertyChangeListener(calendarProcess);
                calendar.setCalendar(TimeLocal.getCurrentTime());
                calendar.addPropertyChangeListener(calendarProcess);
      
                DirectoryCollaboratorItem coll = (DirectoryCollaboratorItem)newItem;
                initPanel(coll);
                setPanelMode(PANELMODE_OK, null);
            } catch (WeekendException ex) {
                setPanelMode(PANELMODE_HOLIDAY, ex.getLocalizedMessage());
            } catch (Exception ex) {
                setPanelMode(PANELMODE_ERROR, ex.getLocalizedMessage());
                MessageBox.showExceptionOnly(ex);
            }
            return true;
        }
    }   
   
    @Override
    public String getPageTitle() {
        return "Запись на прием (" + pacient.getFIO() + ")";
    }

    @Override
    public boolean isDirty() {
        return (srl != null && srl.isDirty());
    }

    @Override
    public void save() throws ClipsException {
        if(srl != null) {
            srl.save1();
        }
    }

    @Override
    public void restore() {
        if(srl != null) {
            try {
                srl.restore();
                DirectoryCollaboratorItem coll = (DirectoryCollaboratorItem) collabModel.getSelectedItem();
                if(coll != null) {
                    initPanel(coll);
                    setPanelMode(PANELMODE_OK, null);
                } else {
                    setPanelMode(PANELMODE_NOSELECTION, null);
                    collCombo.setEnabled(true);
                }
            } catch (WeekendException ex) {
                setPanelMode(PANELMODE_HOLIDAY, ex.getLocalizedMessage());
            } catch (Exception ex) {
                setPanelMode(PANELMODE_ERROR, ex.getLocalizedMessage());
                MessageBox.showException(ex);
            }
        } 
    }

    private void setPanelMode(int mode, String description) {
        boolean zoom = true;
        boolean cal = true;
        switch(mode) {
            case PANELMODE_OK: {
                break;
            }
            case PANELMODE_ERROR: {
                stubPanels(description);
                zoom = false;
                cal = false;
                break;
            }
            case PANELMODE_HOLIDAY: {
                stubPanels(description);
                zoom = false;
                break;
            }
            case PANELMODE_NOSELECTION: {
                stubPanels("");
                zoom = false;
                cal = false;
                break;
            }
        }
        calendar.setEnabled(cal);
        hourScaler.setEnabled(zoom);       
        planPanel.revalidate();
        realPanel.revalidate();             
    }
   
   
    private void stubPanels(String description) {
        realPlacement.removeAll();
        planPlacement.removeAll();

        stubLabel.setText(description);
        planPlacement.setLayout(new GridLayout());
        planPlacement.add(stubLabel);
        stubLabel.repaint();

        stubLabel2.setText(description);
        realPlacement.setLayout(new GridLayout());
        realPlacement.add(stubLabel2);
        stubLabel2.repaint();       
    }
   
    /**
     * Вызывается в после изменения дня в календаре или текущего сотрудника.
     * Создает модели для расписаний и загружает данные
     * @throws cli_fmw.delegate.exception.ClipsException
     */
    private void initPanel(DirectoryCollaboratorItem collab)
            throws ClipsException {
        Calendar cal = calendar.getCalendar();
        int day = cal.get(Calendar.DAY_OF_MONTH);
        int month = cal.get(Calendar.MONTH);
        int year = cal.get(Calendar.YEAR);
        DayOfWeek dayOfWeek = DayOfWeek.create(cal);

        scaler = new TimeScalerTraditional(
                swl.getTimeBegin(dayOfWeek).getHours(),
                swl.getTimeEnd(dayOfWeek).getHours(), 0.1f);
        scaler.setMinHourHeight(hourScaler.getValue());

        planPlacement.removeAll();
        realPlacement.removeAll();
       
        collaborator = collab;
        fireContainerEventStateChanged();
       
        spl = new SheduleProrumbleLocal(collaborator);
        sil = new SheduleIndividualLocal(collaborator);
        SheduledDay sheduledDay = new SheduleHelper(spl, sil)
                .getSheduledDay(new Day(cal.getTimeInMillis()));
        if(!sheduledDay.isWorking()) {
            srl = null;
            throw new WeekendException(sheduledDay.getDescription());
        }
       
        Day thisDay = new Day(year, month, day);
        initPlanPanel(collab, thisDay, dayOfWeek, scaler, sheduledDay);
        initReceptionPanel(collab, thisDay, scaler, sheduledDay);
    }

    /**
     * Инициализирует панель плана
     * @param collaborator
     * @param day
     * @param dayOfWeek
     * @param scaler
     * @param di
     * @throws generic.ClipsException
     */
    private void initPlanPanel(DirectoryCollaboratorItem collaborator,
            Day day, DayOfWeek dayOfWeek, TimeScaler scaler, SheduledDay di) throws ClipsException {

        SheduleProrumbleLocal spl = new SheduleProrumbleLocal(collaborator);
        SheduleProrumbleData prorumble = spl.getProrumble(day);
       
        if(prorumble != null) {
            throw new WeekendException(prorumble.getType().toString());
        }
       
        TimeTableModel tableModel = null;
        SheduleIndividualLocal sil = new SheduleIndividualLocal(collaborator);
        WeekIndex weekIndex = new WeekIndex(day);

        JTimeTable table = new JTimeTable();

        if (sil.daySelector(weekIndex, dayOfWeek).hasNext()) {
            tableModel = new SheduleTemplateTableModel(sil, weekIndex, getAuditManager());
            table.setDay(day);
            System.out.println("TimeTable set day to " + day + " week:" + weekIndex);
        } else {
            WeekIndex planWeekIndex = new WeekIndex(weekIndex.getIndex() % sil.getWeekCount());
            tableModel = new SheduleTemplateTableModel(sil, planWeekIndex, getAuditManager());

            Day planDay = planWeekIndex.getDay(dayOfWeek);
            table.setDay(planDay);
            System.out.println("PlanTimeTable set day to " + planDay + " week:" + planWeekIndex);
        }

        JTableRuler ruler = new JTableRuler(scaler);
        table.setScaler(scaler);
        table.setReadOnly(true);

        int shiftBegin = di.getClinicShiftBegin().getMilliseconds();
        int shiftEnd = di.getClinicShiftEnd().getMilliseconds();

        table.setShiftBegin(shiftBegin);
        table.setShiftEnd(shiftEnd);
        ruler.setShiftBegin(shiftBegin);
        ruler.setShiftEnd(shiftEnd);

        table.setModel(tableModel);
        planPlacement.setLayout(new BorderLayout(0, 0));
        planPlacement.add(ruler, java.awt.BorderLayout.WEST);
        planPlacement.add(table, java.awt.BorderLayout.CENTER);
    }

    /**
     * Инициализирует панель приема
     * @param collaborator
     * @param day
     * @param scaler
     * @param di
     * @throws generic.ClipsException
     */
    private void initReceptionPanel(DirectoryCollaboratorItem collaborator, Day day,
            TimeScaler scaler, SheduledDay di)
            throws ClipsException {
        srl = new SheduleReceptionLocal(day, collaborator);
        srl.addContentStateListener(getContainer());

        SheduleReceptionTableModel tableModel =
                new SheduleReceptionTableModel(srl.selector(), pacient, day, collaborator, description, getAuditManager());

        JTimeTable table = new JTimeTable();
        JTableRuler ruler = new JTableRuler(scaler);

        table.setScaler(scaler);

        int shiftBegin = di.getClinicShiftBegin().getMilliseconds();
        int shiftEnd = di.getClinicShiftEnd().getMilliseconds();

        table.setShiftBegin(shiftBegin);
        table.setShiftEnd(shiftEnd);
        ruler.setShiftBegin(shiftBegin);
        ruler.setShiftEnd(shiftEnd);

        table.setDay(day);
        table.setModel(tableModel);

        realPlacement.setLayout(new BorderLayout(0, 0));
        realPlacement.add(ruler, java.awt.BorderLayout.WEST);
        realPlacement.add(table, java.awt.BorderLayout.CENTER);
       
        Day today = new Day(TimeLocal.getCurrentTime().getTimeInMillis());
        table.setReadOnly(today.getMilliseconds() > day.getMilliseconds());
        System.out.println("today= " + today.getMilliseconds() + " day=" + day.getMilliseconds());
    }

   
    class CalendarProcess implements PropertyChangeListener {
        @Override
        public void propertyChange(PropertyChangeEvent evt)  {
            if (!evt.getPropertyName().equals("calendar")) {
                return;
            }
            try {
                if(isDirty()) {
                    if(currentDay != null) {
                        calendar.removePropertyChangeListener(calendarProcess);
                        calendar.setCalendar(currentDay);
                        calendar.addPropertyChangeListener(calendarProcess);
                    }
                    return;
                }
                DirectoryCollaboratorItem coll = (DirectoryCollaboratorItem) collabModel.getSelectedItem();
                initPanel(coll);
                setPanelMode(PANELMODE_OK, null);
            } catch (WeekendException ex) {
                setPanelMode(PANELMODE_HOLIDAY, ex.getLocalizedMessage());
                calendar.setEnabled(true);
            } catch (Exception ex) {
                setPanelMode(PANELMODE_ERROR, ex.getLocalizedMessage());
                MessageBox.showExceptionOnly(ex);
            }
        }
    }
   
   
    /** 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() {

        tree = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        prevoiseReceptions = new javax.swing.JList();
        prevoiseReceptionCombo = new javax.swing.JComboBox();
        content = new javax.swing.JPanel();
        toolbarTop = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        collCombo = new javax.swing.JComboBox();
        workTypesCombo = new javax.swing.JComboBox();
        allCollBtn = new javax.swing.JButton();
        wtOn = new javax.swing.JCheckBox();
        mainContent = new javax.swing.JPanel();
        leftToolbar = new javax.swing.JPanel();
        calendar = new com.toedter.calendar.JCalendar();
        jLabel4 = new javax.swing.JLabel();
        hourScaler = new javax.swing.JSlider();
        jLabel5 = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        description = new javax.swing.JTextArea();
        jPanel1 = new javax.swing.JPanel();
        head = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        body = new javax.swing.JPanel();
        planPanel = new javax.swing.JPanel();
        planPlacement = new javax.swing.JPanel();
        realPanel = new javax.swing.JPanel();
        realPlacement = new javax.swing.JPanel();

        setLayout(new java.awt.BorderLayout(10, 0));

        tree.setBorder(javax.swing.BorderFactory.createTitledBorder("Предыдущие приемы"));

        prevoiseReceptions.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        prevoiseReceptions.setCellRenderer(null);
        jScrollPane2.setViewportView(prevoiseReceptions);

        javax.swing.GroupLayout treeLayout = new javax.swing.GroupLayout(tree);
        tree.setLayout(treeLayout);
        treeLayout.setHorizontalGroup(
            treeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(treeLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(prevoiseReceptionCombo, 0, 223, Short.MAX_VALUE)
                .addContainerGap())
            .addGroup(treeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(treeLayout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 223, Short.MAX_VALUE)
                    .addContainerGap()))
        );
        treeLayout.setVerticalGroup(
            treeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(treeLayout.createSequentialGroup()
                .addComponent(prevoiseReceptionCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(414, Short.MAX_VALUE))
            .addGroup(treeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, treeLayout.createSequentialGroup()
                    .addGap(41, 41, 41)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                    .addContainerGap()))
        );

        add(tree, java.awt.BorderLayout.WEST);

        content.setLayout(new java.awt.BorderLayout());

        jLabel1.setText("Сотрудник:");

        collCombo.setEnabled(false);

        allCollBtn.setText("Все сотрудники...");
        allCollBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                allCollBtnActionPerformed(evt);
            }
        });

        wtOn.setSelected(true);
        wtOn.setText("Отфильтровать сотрудников, по типу работы");
        wtOn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                wtOnActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout toolbarTopLayout = new javax.swing.GroupLayout(toolbarTop);
        toolbarTop.setLayout(toolbarTopLayout);
        toolbarTopLayout.setHorizontalGroup(
            toolbarTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(toolbarTopLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(toolbarTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(toolbarTopLayout.createSequentialGroup()
                        .addComponent(wtOn)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(workTypesCombo, 0, 0, Short.MAX_VALUE))
                    .addGroup(toolbarTopLayout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(collCombo, 0, 317, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(allCollBtn)))
                .addContainerGap())
        );
        toolbarTopLayout.setVerticalGroup(
            toolbarTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(toolbarTopLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(toolbarTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(wtOn)
                    .addComponent(workTypesCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(toolbarTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(collCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(allCollBtn))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        content.add(toolbarTop, java.awt.BorderLayout.NORTH);

        mainContent.setLayout(new java.awt.BorderLayout(10, 0));

        leftToolbar.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));

        calendar.setEnabled(false);

        jLabel4.setText("Дата:");

        hourScaler.setMaximum(400);
        hourScaler.setMinimum(20);
        hourScaler.setValue(135);
        hourScaler.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                hourScalerStateChanged(evt);
            }
        });

        jLabel5.setText("Увеличение:");

        description.setLineWrap(true);
        description.setWrapStyleWord(true);
        description.setBorder(javax.swing.BorderFactory.createTitledBorder("Примечания"));
        jScrollPane3.setViewportView(description);

        javax.swing.GroupLayout leftToolbarLayout = new javax.swing.GroupLayout(leftToolbar);
        leftToolbar.setLayout(leftToolbarLayout);
        leftToolbarLayout.setHorizontalGroup(
            leftToolbarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(leftToolbarLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(leftToolbarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
                    .addComponent(jLabel4)
                    .addComponent(calendar, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
                    .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
                    .addComponent(hourScaler, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE))
                .addContainerGap())
        );
        leftToolbarLayout.setVerticalGroup(
            leftToolbarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(leftToolbarLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(calendar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel5)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(hourScaler, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 22, Short.MAX_VALUE)
                .addGap(41, 41, 41))
        );

        mainContent.add(leftToolbar, java.awt.BorderLayout.EAST);

        jPanel1.setLayout(new java.awt.BorderLayout());

        head.setLayout(new java.awt.GridLayout(1, 0, 10, 0));

        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("Работы");
        jLabel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        head.add(jLabel2);

        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("Расписание");
        jLabel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jLabel3.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        head.add(jLabel3);

        jPanel1.add(head, java.awt.BorderLayout.NORTH);

        body.setLayout(new java.awt.GridLayout(1, 0, 10, 0));

        planPanel.setLayout(new java.awt.BorderLayout());

        planPlacement.setLayout(new java.awt.GridLayout(1, 0));
        planPanel.add(planPlacement, java.awt.BorderLayout.CENTER);

        body.add(planPanel);

        realPanel.setLayout(new java.awt.BorderLayout());

        realPlacement.setLayout(new java.awt.GridLayout(1, 0));
        realPanel.add(realPlacement, java.awt.BorderLayout.CENTER);

        body.add(realPanel);

        jScrollPane1.setViewportView(body);

        jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        mainContent.add(jPanel1, java.awt.BorderLayout.CENTER);

        content.add(mainContent, java.awt.BorderLayout.CENTER);

        add(content, java.awt.BorderLayout.CENTER);
    }// </editor-fold>//GEN-END:initComponents

private void hourScalerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_hourScalerStateChanged
    if (scaler != null){
        int val = hourScaler.getValue();
        scaler.setMinHourHeight(val);
        for (int i = 0; i < planPlacement.getComponentCount(); i++) {
            Component c = planPlacement.getComponent(i);
            if (c instanceof JTableRuler) {
                JTableRuler ruler = (JTableRuler) c;
                ruler.revalidate();
            }
        }
        for (int i = 0; i < realPlacement.getComponentCount(); i++) {
            Component c = realPlacement.getComponent(i);
            if (c instanceof JTableRuler) {
                JTableRuler ruler = (JTableRuler) c;
                ruler.revalidate();
            }
        }
        planPanel.revalidate();
        realPanel.revalidate();
    }
}//GEN-LAST:event_hourScalerStateChanged

private void wtOnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_wtOnActionPerformed
    JCheckBox cb = (JCheckBox) evt.getSource();
    workTypesCombo.setEnabled(cb.isSelected());
    VetoableComboBoxModel model = (VetoableComboBoxModel) workTypesCombo.getModel();
    model.setSilent(true);
    model.setSelectedItem(null);
    model.setSilent(false);
}//GEN-LAST:event_wtOnActionPerformed

private void allCollBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_allCollBtnActionPerformed
    try {
        Object selectedItem = null;
        if (collabModel != null) {
            selectedItem = collabModel.getSelectedItem();
        }
        DirectoryDialogCollaborators dlg
                = new DirectoryDialogCollaborators(false, false, false, selectedItem);
        dlg.setVisible(true);
        if (dlg.getDlgResult() == ModalDialog.DLG_OK) {
            DirectoryCollaboratorItem item = (DirectoryCollaboratorItem) dlg.getSelectedItems().get(0);
            wtOn.setSelected(false);
            workTypesCombo.setEnabled(false);
            collCombo.setEnabled(true);
            fillCollaboratorCombo((DirectoryCollaboratorItem)null);
            //collCombo.setSelectedItem(item);
            collabModel.setSelectedItem(item);
        }
    } catch (ClipsException ex) {
        setPanelMode(PANELMODE_ERROR, "Ошибка");
        MessageBox.showException(ex);
    }
}//GEN-LAST:event_allCollBtnActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton allCollBtn;
    private javax.swing.JPanel body;
    private com.toedter.calendar.JCalendar calendar;
    private javax.swing.JComboBox collCombo;
    private javax.swing.JPanel content;
    private javax.swing.JTextArea description;
    private javax.swing.JPanel head;
    private javax.swing.JSlider hourScaler;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JPanel leftToolbar;
    private javax.swing.JPanel mainContent;
    private javax.swing.JPanel planPanel;
    private javax.swing.JPanel planPlacement;
    private javax.swing.JComboBox prevoiseReceptionCombo;
    private javax.swing.JList prevoiseReceptions;
    private javax.swing.JPanel realPanel;
    private javax.swing.JPanel realPlacement;
    private javax.swing.JPanel toolbarTop;
    private javax.swing.JPanel tree;
    private javax.swing.JComboBox workTypesCombo;
    private javax.swing.JCheckBox wtOn;
    // End of variables declaration//GEN-END:variables

    @Override
    public DelegateLine2 getDelegate() {
        return pacient;
    }

    @Override
    public boolean readyForPrint() {
        return !(isDirty() || collaborator == null);
    }

    @Override
    public void print() {
        try {
            if (readyForPrint()) {
                HashMap<String, Object> data = new LinkedHashMap<String, Object>();
                String title = "Записи на прием сотрудника: " + collaborator.getTitle();
                data.put("date", "Дата: " + Converter.dateToString(calendar.getDate()));
               
                TableModel model = null;
                if (srl == null || srl.selector() == null || srl.selector().size() == 0) {
                    data.put("noData", "нет записей на прием");
                } else {
                    model = new PrintTableModel();
                }
                PrintCreators.createGeneratedReport(title, null, data.entrySet(), null, model, getClass());
            }
        } catch (Exception ex) {
            MessageBox.showExceptionOnly(ex);
        }
    }
   
    class PrintTableModel extends AbstractTableModel {
        private ArrayList<SheduleReceptionData> datas = new ArrayList<SheduleReceptionData>();
        private final static int COL_TIME = 0;
        private final static int COL_CLIENT = 1;
        private final static int COL_DUTY = 2;
        private final static int COLCOUNT = 3;
       
        public PrintTableModel() throws ClipsException {           
            Selector<SheduleReceptionData> selector = srl.selector();
            for (int i = 0; i < selector.size(); i++) {
                datas.add(selector.get(i));
            }
            java.util.Collections.sort(datas, new SheduleReceptionDataComparator());
        }
       
        @Override
        public int getRowCount() {
            return datas.size();
        }

        @Override
        public int getColumnCount() {
            return COLCOUNT;
        }

        @Override
        public String getColumnName(int column) {
            if (column == COL_TIME) {
                return "Интервал";
            }
            else if (column == COL_CLIENT) {
                return "Пациент";
            }
            else if (column == COL_DUTY) {
                return "Включенные услуги";
            }
            else {
                return "Хммм, а это откуда?";
            }
        }
       
        @Override
        public Object getValueAt(int rowIndex, int col) {
            try {
                SheduleReceptionData data = datas.get(rowIndex);
           
                if (col == COL_TIME) {
                    Calendar tb = GregorianCalendar.getInstance();
                    Calendar te = GregorianCalendar.getInstance();
                    tb.setTime(data.getBegin());
                    te.setTime(data.getEnd());
                    return  String.format("%02d:%02d-%02d:%02d", tb.get(Calendar.HOUR_OF_DAY),
                            tb.get(Calendar.MINUTE), te.get(Calendar.HOUR_OF_DAY), te.get(Calendar.MINUTE));
                }
                else if (col == COL_CLIENT) {
                    return data.getClient(null).toString();
                }
                else if (col == COL_DUTY){
                    String services = "";
                    List<Integer> srl = data.getLinkedServicesList();
                    List<SerRenLocal> clientServices = data.getClient(null).getSerRenListToRender();

                    for (int i = 0; i < clientServices.size(); i++) {
                        SerRenLocal s = clientServices.get(i);
                        if (srl.contains(s.getID())) {
                            services += " - " + s.getService().getTitle() + "\n";
                        }
                    }
                    return services;
                }
                else {
                    return "Хммм, а это откуда?";
                }
            } catch (ClipsException ex) {
                return new ErrorValue(ex);
            }
        }
       
        class SheduleReceptionDataComparator implements Comparator {

            @Override
            public int compare(Object o1, Object o2) {
                SheduleReceptionData p1 = (SheduleReceptionData) o1;
                SheduleReceptionData p2 = (SheduleReceptionData) o2;
                if (p1.getBegin().after(p2.getBegin())) {
                    return 1;
                } else {
                    return -1;
                }
            }
        }
    }
}


TOP

Related Classes of clips.shedule.reception.PanelReception

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.