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 }