001 package market.stdform; 002 003 import java.awt.GridBagConstraints; 004 import java.awt.GridBagLayout; 005 import java.util.Comparator; 006 007 import javax.swing.Box; 008 import javax.swing.BoxLayout; 009 import javax.swing.JComponent; 010 import javax.swing.JPanel; 011 import javax.swing.JScrollPane; 012 import javax.swing.JTextArea; 013 import javax.swing.event.TableModelEvent; 014 import javax.swing.event.TableModelListener; 015 016 import market.CIArticle; 017 import market.Conversions; 018 import market.SICustomer; 019 import market.swing.CmpNumbers; 020 import market.swing.ComponentFactory; 021 import sale.FormSheet; 022 import sale.FormSheetContentCreator; 023 import util.swing.AbstractTableEntryDescriptor; 024 import util.swing.TableEntryDescriptor; 025 import data.CountingStock; 026 import data.stdforms.SingleTableFormSheet; 027 import data.swing.CountingStockTableModel; 028 029 /** 030 * This FormSheet shows the order of the customer that has to be deduct in a table, 031 * it also shows a message-field containing information about removed articles that aren`t avaible yet. 032 */ 033 public class FSSellerOrderTable { 034 035 /** 036 * @return the order-table. 037 * 038 * @param shoppingBasket the shopping-basket of the customer that has to be deduct. 039 * @param sic the SICustomer in the till-queue related to the customer. 040 */ 041 public static SingleTableFormSheet getOrderTable(CountingStock shoppingBasket, final SICustomer sic){ 042 043 final SingleTableFormSheet stfs = SingleTableFormSheet.create( 044 "Kundenauftrag", 045 shoppingBasket, 046 null, 047 getTED()); 048 049 stfs.addContentCreator(new FormSheetContentCreator(){ 050 protected void createFormSheetContent(FormSheet fs) { 051 JPanel jp_main = new JPanel(); 052 JPanel jp_upper = new JPanel(); 053 JComponent jp_table = new JPanel(); 054 JPanel jp_message = new JPanel(); 055 JScrollPane jsc = new JScrollPane(); 056 final JTextArea jta = new JTextArea(10, 200); 057 String missingA = sic.getMissingArticles(); 058 if(missingA.length()>1) jta.setText(getMessage(missingA)); 059 GridBagConstraints c = new GridBagConstraints(); 060 GridBagLayout gridbag = new GridBagLayout(); 061 062 stfs.getTable().getModel().addTableModelListener(new TableModelListener(){ 063 public void tableChanged(TableModelEvent e) { 064 String s = sic.getMissingArticles(); 065 if(s.length()>1) jta.setText(getMessage(s)); 066 } 067 }); 068 069 jp_table = fs.getComponent(); 070 jp_upper.setLayout(gridbag); 071 c.gridx = 0; 072 c.weightx = 1; 073 c.weighty = 1; 074 c.gridy = 0; 075 c.fill = GridBagConstraints.BOTH; 076 gridbag.setConstraints(jp_table, c); 077 jp_upper.add(jp_table); 078 jp_message.setBorder(ComponentFactory.createInsetBorder("Benachrichtigung")); 079 jp_message.setLayout(new BoxLayout(jp_message, BoxLayout.X_AXIS)); 080 jp_message.add(jsc); 081 jsc.setViewportView(jta); 082 083 jp_main.setLayout(new BoxLayout(jp_main, BoxLayout.Y_AXIS)); 084 jp_main.add(jp_upper); 085 jp_main.add(Box.createVerticalStrut(10)); 086 jp_main.add(jp_message); 087 fs.setComponent(jp_main); 088 089 fs.removeAllButtons(); 090 fs.addButton("Abrechnen",ButtonIDs.BTN_ACCEPT , null); 091 fs.addButton("Zurück",ButtonIDs.BTN_BACK , null); 092 } 093 }); 094 return stfs; 095 } 096 097 /** 098 * @return the message to be shown if articles are missing. 099 * 100 * @param missingA String containing counts and articles that are missed 101 */ 102 private static String getMessage(String missingA){ 103 return new String("Aufgrund eines vorübergehenden Engpasses\n"+ 104 "mussten wir folgende Artikel aus ihrer Bestellung entfernen:"+missingA); 105 } 106 107 /** 108 * @return the TableEntryDescriptor of the table. 109 */ 110 private static TableEntryDescriptor getTED(){ 111 AbstractTableEntryDescriptor ted = new AbstractTableEntryDescriptor(){ 112 public int getColumnCount() { 113 return 3; 114 } 115 116 public String getColumnName(int nIdx) { 117 return (new String[]{ "Artikel", "Preis", "Anzahl"}) [nIdx]; 118 } 119 120 public Class getColumnClass(int nIdx) { 121 return (new Class[] {String.class, Number.class, Number.class}) [nIdx]; 122 } 123 124 public Object getValueAt(Object oRecord, int nIdx) { 125 CIArticle article = Conversions.recordToCIArticle(oRecord); 126 int count = ((CountingStockTableModel.Record)oRecord).getCount(); 127 switch (nIdx) { 128 case 0: 129 return article.getArticleName(); 130 case 1: 131 return Conversions.valueToCurrency( 132 CIArticle.getCatalogItemValue().getValue(article)); 133 case 2: 134 return new Integer(count).toString(); 135 } 136 return null; 137 } 138 139 public boolean canSortByColumn(int nIndex) { 140 return true; 141 } 142 143 public Comparator getColumnOrder(int nIndex) { 144 switch (nIndex) { 145 case 1: return new CmpNumbers(CmpNumbers.BID); 146 case 2: return new CmpNumbers(CmpNumbers.COUNT); 147 default: return null; 148 } 149 } 150 }; 151 return ted; 152 } 153 }