001 package market.stdform; 002 003 import java.awt.Color; 004 import java.awt.Font; 005 import java.awt.GridBagConstraints; 006 import java.awt.GridBagLayout; 007 import java.awt.GridLayout; 008 import java.awt.Insets; 009 import java.awt.event.ActionEvent; 010 import java.awt.event.ActionListener; 011 012 import javax.swing.BorderFactory; 013 import javax.swing.Box; 014 import javax.swing.BoxLayout; 015 import javax.swing.JButton; 016 import javax.swing.JComboBox; 017 import javax.swing.JLabel; 018 import javax.swing.JOptionPane; 019 import javax.swing.JPanel; 020 import javax.swing.JTextField; 021 022 import market.Conversions; 023 import market.SMarket; 024 import market.statistics.CSalesStats; 025 import market.statistics.Statistics; 026 import market.swing.ComponentFactory; 027 import market.swing.JCTimeRangeBoxes; 028 import sale.FormSheet; 029 import sale.FormSheetContentCreator; 030 031 /** 032 * This FormSheet displays receipts and expenditures of the market. The range of time for which they 033 * should be computed is also adjustable here. 034 */ 035 public class FSManagerOverallStats extends FormSheet { 036 037 /** 038 * ID for serialization. 039 */ 040 private static final long serialVersionUID = 4038659575064710710L; 041 042 private JTextField jtfCurrentCapital; 043 private JTextField jtfSales; 044 private JTextField jtfOrders; 045 private JTextField jtfWages; 046 private JTextField jtfMisc; 047 private JTextField jtfSum; 048 private JTextField jtfSumRevenue; 049 private JTextField jtfSumCosts; 050 051 private JComboBox jcbFromYear, jcbToYear, jcbFromMonth, jcbToMonth; 052 private JCTimeRangeBoxes jctrb; 053 054 public FSManagerOverallStats() { 055 super("Umsatzstatistik", null); 056 addContentCreator(new FormSheetContentCreator() { 057 private static final long serialVersionUID = -3856659840292911661L; 058 public void createFormSheetContent(final FormSheet fs) { 059 JPanel jpMain = new JPanel(); 060 JPanel jpCurrentCapital = new JPanel(); 061 JPanel jpTimeSelect = new JPanel(); 062 JPanel jpData = new JPanel(); 063 JPanel jpDataRevenue = new JPanel(); 064 JPanel jpDataCosts = new JPanel(); 065 JPanel jpDataRevenueDetail = new JPanel(); 066 JPanel jpDataCostsDetail = new JPanel(); 067 JPanel jpSumRevenue = new JPanel(); 068 JPanel jpSumCosts = new JPanel(); 069 JPanel jpFrom = new JPanel(); 070 JPanel jpTo = new JPanel(); 071 JPanel jpSummarize = new JPanel(); 072 JButton jbShow = new JButton("Anzeigen"); 073 jtfCurrentCapital = ComponentFactory.createTextField("", 10, false, 074 ComponentFactory.RIGHT, false); 075 jtfSales = ComponentFactory.createTextField("", 10, false, 076 ComponentFactory.RIGHT, false); 077 jtfOrders = ComponentFactory.createTextField("", 10, false, 078 ComponentFactory.RIGHT, Color.red, false); 079 jtfWages = ComponentFactory.createTextField("", 10, false, 080 ComponentFactory.RIGHT, Color.red, false); 081 jtfMisc = ComponentFactory.createTextField("", 10, false, 082 ComponentFactory.RIGHT, Color.red, false); 083 jtfSum = ComponentFactory.createTextField("", 10, false, 084 ComponentFactory.RIGHT, false); 085 jtfSumRevenue = ComponentFactory.createTextField("", 10, false, 086 ComponentFactory.RIGHT, false); 087 jtfSumCosts = ComponentFactory.createTextField("", 10, false, 088 ComponentFactory.RIGHT, Color.red, false); 089 jctrb = new JCTimeRangeBoxes(); 090 jcbFromYear = jctrb.getFromYearBox(); 091 jcbToYear = jctrb.getToYearBox(); 092 jcbFromMonth = jctrb.getFromMonthBox(); 093 jcbToMonth = jctrb.getToMonthBox(); 094 095 GridBagLayout gridBag = new GridBagLayout(); 096 jpMain.setLayout(gridBag); 097 GridBagConstraints c = new GridBagConstraints(); 098 c.gridy = 0; 099 c.weighty = 0.2; 100 c.insets = new Insets(10,0,0,0); 101 c.anchor = GridBagConstraints.CENTER; 102 gridBag.setConstraints(jpCurrentCapital, c); 103 c.gridy = 1; 104 c.weighty = 0.1; 105 c.insets = new Insets(10,0,0,0); 106 c.anchor = GridBagConstraints.CENTER; 107 gridBag.setConstraints(jpTimeSelect, c); 108 c.gridy = 2; 109 c.weighty = 0.7; 110 c.anchor = GridBagConstraints.CENTER; 111 gridBag.setConstraints(jpData, c); 112 c.gridy = 3; 113 c.weighty = 0; 114 c.ipadx = 0; 115 c.ipady = 0; 116 c.insets = new Insets(10,0,0,0); 117 c.anchor = GridBagConstraints.SOUTH; 118 gridBag.setConstraints(jpSummarize, c); 119 120 121 jpCurrentCapital.setBorder(ComponentFactory.createInsetBorder("Derzeitiges Vermögen")); 122 jpCurrentCapital.add(jtfCurrentCapital); 123 jtfCurrentCapital.setFont(new Font("",0,20)); 124 125 jpTimeSelect.setBorder(ComponentFactory.createInsetBorder( 126 ComponentFactory.createInsetBorder( 127 "Auswahl des Zeitraums für die Umsatzstatistik"), 15, 15, 0, 15)); 128 jpTimeSelect.setLayout(new BoxLayout(jpTimeSelect, 0)); 129 jpTimeSelect.add(jpFrom); 130 jpFrom.setBorder(ComponentFactory.createInsetBorder("von")); 131 jpFrom.add(jcbFromMonth); 132 jpFrom.add(jcbFromYear); 133 jpTimeSelect.add(Box.createHorizontalStrut(20)); 134 jpTimeSelect.add(jpTo); 135 jpTo.setBorder(ComponentFactory.createInsetBorder("bis")); 136 jpTo.add(jcbToMonth); 137 jpTo.add(jcbToYear); 138 jpTimeSelect.add(Box.createHorizontalStrut(20)); 139 jpTimeSelect.add(jbShow); 140 jbShow.addActionListener(new ActionListener() { 141 public void actionPerformed(ActionEvent e) { 142 fillTextFields(); 143 } 144 }); 145 146 jpData.setLayout(new BoxLayout(jpData, 0)); 147 jpData.add(jpDataRevenue); 148 jpDataRevenue.setLayout(new BoxLayout(jpDataRevenue, 1)); 149 jpDataRevenue.add(jpDataRevenueDetail); 150 jpDataRevenueDetail.setBorder(ComponentFactory.createInsetBorder("Einnahmen")); 151 jpDataRevenueDetail.setLayout(new GridLayout(4,2)); 152 jpDataRevenueDetail.add(new JLabel("Verkauf")); 153 jpDataRevenueDetail.add(jtfSales); 154 jpDataRevenueDetail.add(new JLabel("")); 155 jpDataRevenueDetail.add(new JLabel("")); 156 jpDataRevenueDetail.add(new JLabel("")); 157 jpDataRevenueDetail.add(new JLabel("")); 158 jpDataRevenueDetail.add(new JLabel("")); 159 jpDataRevenueDetail.add(new JLabel("")); 160 jpDataRevenue.add(jpSumRevenue); 161 jpSumRevenue.setBorder(BorderFactory.createEmptyBorder(15,15,15,15)); 162 jpSumRevenue.setLayout(new GridLayout(1,2)); 163 jpSumRevenue.add(new JLabel("Summe")); 164 jpSumRevenue.add(jtfSumRevenue); 165 jpData.add(jpDataCosts); 166 jpDataCosts.setLayout(new BoxLayout(jpDataCosts, 1)); 167 jpDataCosts.add(jpDataCostsDetail); 168 jpDataCostsDetail.setBorder(ComponentFactory.createInsetBorder("Ausgaben")); 169 jpDataCostsDetail.setLayout(new GridLayout(4,2)); 170 jpDataCostsDetail.add(new JLabel("Einkäufe")); 171 jpDataCostsDetail.add(jtfOrders); 172 jpDataCostsDetail.add(new JLabel("Lohnkosten")); 173 jpDataCostsDetail.add(jtfWages); 174 jpDataCostsDetail.add(new JLabel("Sonstiges")); 175 jpDataCostsDetail.add(jtfMisc); 176 jpDataCostsDetail.add(new JLabel("")); 177 jpDataCostsDetail.add(new JLabel("")); 178 jpDataCosts.add(jpSumCosts); 179 jpSumCosts.setBorder(BorderFactory.createEmptyBorder(15,15,15,15)); 180 jpSumCosts.setLayout(new GridLayout(1,2)); 181 jpSumCosts.add(new JLabel("Summe")); 182 jpSumCosts.add(jtfSumCosts); 183 184 jpSummarize.add(new JLabel("Gesamtergebnis: ")); 185 jpSummarize.add(jtfSum); 186 jtfSum.setFont(new Font("",0,20)); 187 188 jpMain.add(jpCurrentCapital); 189 jpMain.add(jpTimeSelect); 190 jpMain.add(jpData); 191 jpMain.add(jpSummarize); 192 193 fs.setComponent(jpMain); 194 fs.removeAllButtons(); 195 fillTextFields(); 196 } 197 }); 198 } 199 200 /** 201 * Evaluates the {@link JComboBox JComboBoxes}, computes the according statistics and updates 202 * the text fields. 203 */ 204 private void fillTextFields() { 205 if (jctrb.isValidTimeRange()) { 206 CSalesStats currentStats = Statistics.getOverallStats(jctrb.getFromMonth(), jctrb.getFromYear(), 207 jctrb.getToMonth(), jctrb.getToYear()); 208 jtfCurrentCapital.setText(Conversions.valueToCurrency(SMarket.getAccount(), " Euro")); 209 jtfSum.setForeground(Conversions.valueToInt(SMarket.getAccount()) < 0 ? Color.red : Color.black); 210 int sales = currentStats.getRevenue(); 211 int sumRevenue = sales; 212 jtfSales.setText(Conversions.doubleToCurrency(sales, " Euro")); 213 jtfSumRevenue.setText(Conversions.doubleToCurrency(sumRevenue, " Euro")); 214 int orderCosts = currentStats.getOrderCosts(); 215 int wages = currentStats.getWages(); 216 int misc = currentStats.getCosts(); 217 int sumCosts = orderCosts + wages + misc; 218 jtfOrders.setText(Conversions.doubleToCurrency(orderCosts, " Euro")); 219 jtfWages.setText(Conversions.doubleToCurrency(wages, " Euro")); 220 jtfMisc.setText(Conversions.doubleToCurrency(misc, " Euro")); 221 jtfSumCosts.setText(Conversions.doubleToCurrency(sumCosts, " Euro")); 222 int profit = sumRevenue - sumCosts; 223 jtfSum.setText(Conversions.doubleToCurrency(profit, " Euro")); 224 jtfSum.setForeground(profit < 0 ? Color.red : Color.black); 225 } else { 226 JOptionPane.showMessageDialog(getComponent(), "Ungültiger Zeitraum."); 227 } 228 } 229 }