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    }