/*
* DlgEditTemplateItems.java
*
* Created on 17 Июнь 2008 г., 17:51
*/
package clips.directory.editors.servicePacketTemplate;
import beans.directory.packet.entity.PacketTemplateItemDetails;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import clips.delegate.directory.complex.DirectoryPacketTemplateItem;
import clips.delegate.directory.complex.DirectoryPacketTemplateList;
import clips.delegate.directory.complex.DirectoryPacketTemplateListItem;
import clips.delegate.directory.filtered.DirectoryServiceItem;
import clips.directory.dialogs.DirectoryDialogService;
import cli_fmw.utils.MessageBox;
import cli_fmw.main.ClipsException;
import cli_fmw.main.audit.AuditManager;
import cli_fmw.utils.Selector;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.table_config_states.StateSaver;
import cli_fmw.utils.table_config_states.TableState;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.util.ArrayList;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableColumn;
/**
* диалог редактирования итемов пакета
* @author lacoste
*/
public class DlgEditTemplateItems extends ModalDialog {
private DirectoryPacketTemplateItem packet;
private Frame cont;
/** Creates new form DlgEditTemplateItems */
public DlgEditTemplateItems(java.awt.Frame parent, DirectoryPacketTemplateItem packet, AuditManager am) throws ClipsException {
super(parent, "Редактор шаблонов пакетов услуг", am);
initComponents();
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle dlgSize = new Rectangle((int)(0.6 * scrSize.width), (int)(0.6 * scrSize.height));
this.setBounds(dlgSize);
this.setLocation((scrSize.width - dlgSize.width) / 2, (scrSize.height - dlgSize.height) / 2);
this.cont = parent;
this.packet = packet;
tabPacketItems.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
tabPacketItems.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
btDel.setEnabled(tabPacketItems.getSelectedRowsSorted().length > 0);
}
});
this.setTitle("Состав шаблона пакета: " + packet.getTitle());
setTable();
resizeColumn();
StateSaver.attachTo(this);
}
private void setTable() throws ClipsException {
tabPacketItems.setModel(new TableModelEditPacketItems(packet));
}
private void resizeColumn() {
TableState state = new TableState();
state.setPreferredWidth(TableModelEditPacketItems.COL_ID, 2);
state.setPreferredWidth(TableModelEditPacketItems.COL_SERVICE, 14);
state.setPreferredWidth(TableModelEditPacketItems.COL_WEIGHT, 6);
state.setPreferredWidth(TableModelEditPacketItems.COL_DURATION, 6);
state.setPreferredWidth(TableModelEditPacketItems.COL_DISCOUNT, 4);
StateSaver.setDefaultState(this, tabPacketItems, state);
}
private void stopEdit() {
if (tabPacketItems.isEditing()) {
tabPacketItems.getCellEditor().stopCellEditing();
}
}
/** 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() {
jPanel4 = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
btDel = new javax.swing.JButton();
btAdd = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
tabPacketItems = new cli_fmw.utils.sorted_table.SortedTable();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosed(java.awt.event.WindowEvent evt) {
formWindowClosed(evt);
}
});
jPanel4.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
jPanel4.setLayout(new java.awt.BorderLayout(5, 5));
jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
btDel.setText("Удалить");
btDel.setEnabled(false);
btDel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btDelActionPerformed(evt);
}
});
jPanel1.add(btDel);
btAdd.setText("Добавить");
btAdd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btAddActionPerformed(evt);
}
});
jPanel1.add(btAdd);
jPanel4.add(jPanel1, java.awt.BorderLayout.SOUTH);
jScrollPane1.addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentResized(java.awt.event.ComponentEvent evt) {
jScrollPane1ComponentResized(evt);
}
});
tabPacketItems.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tabPacketItemsMouseClicked(evt);
}
});
tabPacketItems.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent evt) {
tabPacketItemsMouseMoved(evt);
}
});
jScrollPane1.setViewportView(tabPacketItems);
jPanel4.add(jScrollPane1, java.awt.BorderLayout.CENTER);
getContentPane().add(jPanel4, java.awt.BorderLayout.CENTER);
pack();
}// </editor-fold>//GEN-END:initComponents
private void btAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddActionPerformed
stopEdit();
try {
//выбор услуг которые добавятся в пакет
DirectoryDialogService dlg = new DirectoryDialogService(true, null);
dlg.setVisible(true);
if (dlg.getDlgResult() == ModalDialog.DLG_OK) {
Selector ii = dlg.getSelectedItems();
if (ii.size() < 1) {
return;
}
DirectoryPacketTemplateList dir = DirectoryLocator.getDirectory(DirectoryPacketTemplateList.class, false);
for (int i = 0; i < ii.size(); i ++) {
DirectoryServiceItem service = (DirectoryServiceItem) ii.get(i);
//может быть выбранная услуга уже есть в пакете
boolean isInPacket = false;
for (int j = 0; j < packet.getPacketItemCount(); j++) {
if (packet.getPacketItem(j).getService().getID() == service.getID()) {
isInPacket = true;
break;
}
}
//если нет в пакете то добавляем
if (!isInPacket) {
PacketTemplateItemDetails d = new PacketTemplateItemDetails();
d.id = 0;
d.title = service.getTitle();
d.service = service.getID();
d.defaultDuration = 0;
d.discount = 0;
d.weight = 0;
d.packetTemplate = packet.getID();
DirectoryPacketTemplateListItem item = new DirectoryPacketTemplateListItem(d);
if (!dir.checkContracts(d)) {
if (MessageBox.showConfirmYesNo(MessageBox.C_CONTRACT_SETVICE_NOT_FOUNDED) == MessageBox.ANSWER_NO) {
return;
}
}
dir.getItems().append(item);
}
}
setTable();
}
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btAddActionPerformed
private void btDelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDelActionPerformed
stopEdit();
try {
ArrayList<DirectoryPacketTemplateListItem> items = new ArrayList<DirectoryPacketTemplateListItem>();
int[] sel = tabPacketItems.getSelectedRowsSorted();
for (int i = 0; i < sel.length; i++) {
items.add(packet.getPacketItem(sel[i]));
}
DirectoryPacketTemplateList dir =
(DirectoryPacketTemplateList) DirectoryLocator.getDirectory(DirectoryPacketTemplateList.class, false);
for (int i = 0; i < items.size(); i++) {
DirectoryPacketTemplateListItem item = items.get(i);
dir.getItems().remove(item);
}
setTable();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btDelActionPerformed
private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
stopEdit();
}//GEN-LAST:event_formWindowClosed
private void tabPacketItemsMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabPacketItemsMouseMoved
int col = tabPacketItems.columnAtPoint(evt.getPoint());
TableColumn coll = tabPacketItems.getColumnModel().getColumn(col);
col = coll.getModelIndex();
if (col == TableModelEditPacketItems.COL_SERVICE) {
tabPacketItems.setToolTipText("Двойной клик, чтобы поменять услугу");
}
else {
tabPacketItems.setToolTipText(null);
}
}//GEN-LAST:event_tabPacketItemsMouseMoved
private void tabPacketItemsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabPacketItemsMouseClicked
stopEdit();
try {
int row = tabPacketItems.getSelectedRowSorted();
int col = tabPacketItems.columnAtPoint(evt.getPoint());
TableColumn coll = tabPacketItems.getColumnModel().getColumn(col);
col = coll.getModelIndex();
if (row < 0 || evt.getClickCount() < 2 || col != TableModelEditPacketItems.COL_SERVICE) {
return;
}
//просмотр услуги пакета, при необходимости замена
DirectoryServiceItem servItem = packet.getPacketItem(row).getService();
DirectoryDialogService dlg = new DirectoryDialogService(false, servItem);
dlg.setVisible(true);
if (dlg.getDlgResult() == ModalDialog.DLG_OK) {
Selector ii = dlg.getSelectedItems();
if (ii.size() > 0) {
DirectoryServiceItem item = (DirectoryServiceItem) ii.get(0);
boolean isInPacket = false;
for (int i = 0; i < packet.getPacketItemCount(); i++) {
if (packet.getPacketItem(i).getService().getID() == item.getID()) {
isInPacket = true;
break;
}
}
if (!isInPacket) {
packet.getPacketItem(row).setService(item);
}
}
setTable();
}
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_tabPacketItemsMouseClicked
private void jScrollPane1ComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jScrollPane1ComponentResized
}//GEN-LAST:event_jScrollPane1ComponentResized
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btAdd;
private javax.swing.JButton btDel;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel4;
private javax.swing.JScrollPane jScrollPane1;
private cli_fmw.utils.sorted_table.SortedTable tabPacketItems;
// End of variables declaration//GEN-END:variables
}