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