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    }