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 }