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