001    package market.stdform;
002    
003    import java.awt.Dimension;
004    import java.awt.GridBagConstraints;
005    import java.awt.GridBagLayout;
006    import java.awt.GridLayout;
007    import java.awt.Insets;
008    
009    import javax.swing.Box;
010    import javax.swing.BoxLayout;
011    import javax.swing.JLabel;
012    import javax.swing.JPanel;
013    import javax.swing.JScrollPane;
014    import javax.swing.JTable;
015    
016    import market.CIArticle;
017    import market.Conversions;
018    import market.SMarket;
019    import market.statistics.CISalesStats;
020    import market.statistics.EvaluateStatistics;
021    import market.swing.ComponentFactory;
022    import market.swing.HistoryEntryModel;
023    import sale.FormSheet;
024    import sale.FormSheetContentCreator;
025    
026    /**
027     * This FormSheet displays detailed statistics of a chosen article during a chosen range of time.
028     */
029    public class FSManagerArticleStatsDetail extends FormSheet {
030    
031        /**
032             * ID for serialization.
033             */
034            private static final long serialVersionUID = -303500994550641437L;
035    
036            /**
037         * @param ciss the precomputed statistics to be displayed.
038         */
039        public FSManagerArticleStatsDetail(final CISalesStats ciss) {
040            super("Artikelstatistik - Details", new FormSheetContentCreator() {
041                            private static final long serialVersionUID = 4584811976140771653L;
042                            public void createFormSheetContent(final FormSheet fs) {
043                    final CIArticle cia = SMarket.getArticleCatalog().get(ciss.getArticleID());
044                    final EvaluateStatistics es = new EvaluateStatistics(ciss);
045                    JPanel jpMain = new JPanel();
046                    JPanel jpData = new JPanel();
047                    JPanel jpTables = new JPanel();
048                    JPanel jpLeftTable = new JPanel();
049                    JPanel jpRightTable = new JPanel();
050                    JPanel jpDataLabel1 = new JPanel();
051                    JPanel jpDataLabel2 = new JPanel();
052                    JPanel jpValueLabel1 = new JPanel();
053                    JPanel jpValueLabel2 = new JPanel();
054                    JScrollPane jsc1 = new JScrollPane();
055                    JScrollPane jsc2 = new JScrollPane();
056                    JTable jt1 = new JTable();
057                    JTable jt2 = new JTable();
058                    Dimension tableDimension = new Dimension(250, 150);
059                    GridBagConstraints c = new GridBagConstraints();
060                    GridBagLayout gridbag = new GridBagLayout();
061                    jpMain.setLayout(gridbag);
062                        c.gridy = 0;
063                        c.weightx = 1;
064                        c.weighty = 0.1;
065                        c.insets = new Insets(10,0,0,0);
066                        c.anchor = GridBagConstraints.NORTH;
067                      gridbag.setConstraints(jpData, c);
068                        c.gridy = 1;
069                        c.weightx = 1;
070                        c.weighty = 0.9;
071                        c.insets = new Insets(10,0,0,0);
072                        c.anchor = GridBagConstraints.CENTER;
073                      gridbag.setConstraints(jpTables, c);
074    
075                    jpData.setLayout(new BoxLayout(jpData, BoxLayout.X_AXIS));
076                    jpData.setBorder(ComponentFactory.createInsetBorder("Statistik für " + cia.getArticleName()));
077                    jpData.add(jpDataLabel1);
078                        jpDataLabel1.setLayout(new GridLayout(4,1));
079                        jpDataLabel1.add(new JLabel("Auf Lager:"));
080                        jpDataLabel1.add(new JLabel("Einkaufspreis:"));
081                        jpDataLabel1.add(new JLabel("Durchschn. Verkaufspreis:"));
082                        jpDataLabel1.add(new JLabel("Durchschn. Gewinn:"));
083                    jpData.add(jpValueLabel1);
084                        jpValueLabel1.setLayout(new GridLayout(4,1));
085                        jpValueLabel1.add(ComponentFactory.createTextField(SMarket.getOffer().countItems(
086                                ciss.getArticleID(), null), 7, false, ComponentFactory.RIGHT, false));
087                        jpValueLabel1.add(ComponentFactory.createTextField(Conversions.doubleToCurrency(
088                                cia.getOffer()), 7, false, ComponentFactory.RIGHT, false));
089                        jpValueLabel1.add(ComponentFactory.createTextField(Conversions.doubleToCurrency(
090                                es.getAveragePrice()), 7, false, ComponentFactory.RIGHT, false));
091                        jpValueLabel1.add(ComponentFactory.createTextField(Conversions.doubleToCurrency(
092                                es.getAveragePrice() - cia.getOffer()), 7, false, ComponentFactory.RIGHT, false));
093                    jpData.add(Box.createHorizontalStrut(25));
094                    jpData.add(jpDataLabel2);
095                        jpDataLabel2.setLayout(new GridLayout(4,1));
096                        jpDataLabel2.add(new JLabel("Gesamt verkauft:"));
097                        jpDataLabel2.add(new JLabel("Durchschn. Verkauf pro Tag:"));
098                        jpDataLabel2.add(new JLabel("Durchschn. Bestellmenge:"));
099                        jpDataLabel2.add(new JLabel("Bestellabstand:"));
100                    jpData.add(jpValueLabel2);
101                        jpValueLabel2.setLayout(new GridLayout(4,1));
102                        jpValueLabel2.add(ComponentFactory.createTextField(es.getAmount(),
103                                7, false, ComponentFactory.RIGHT, false));
104                        jpValueLabel2.add(ComponentFactory.createTextField(
105                                Conversions.round(es.getAverageItemsSold(), 3),
106                                7, false, ComponentFactory.RIGHT, false));
107                        jpValueLabel2.add(ComponentFactory.createTextField(
108                                Conversions.round(es.getAverageOrderAmount(), 1),
109                                7, false, ComponentFactory.RIGHT, false));
110                        jpValueLabel2.add(ComponentFactory.createTextField(
111                                Conversions.round(es.getAverageDaysBetweenOrders(), 1),
112                                7, false, ComponentFactory.RIGHT, false));
113                        jpTables.setLayout(new BoxLayout(jpTables, BoxLayout.X_AXIS));
114                        jpTables.add(jpLeftTable);
115                            jpLeftTable.setLayout(new BoxLayout(jpLeftTable, BoxLayout.Y_AXIS));
116                            jpLeftTable.add(new JLabel("Preisverlauf:"));
117                            jpLeftTable.add(Box.createVerticalStrut(10));
118                            jpLeftTable.add(jsc1);
119                                jsc1.setViewportView(jt1);
120                                    jt1.setPreferredScrollableViewportSize(tableDimension);
121                                    jt1.setModel(new HistoryEntryModel(es.getPriceHistory(),
122                                            HistoryEntryModel.PRICE_HISTORY));
123                        jpTables.add(Box.createHorizontalStrut(25));
124                        jpTables.add(jpRightTable);
125                            jpRightTable.setLayout(new BoxLayout(jpRightTable, BoxLayout.Y_AXIS));
126                            jpRightTable.add(new JLabel("Nachbestellungen:"));
127                            jpRightTable.add(Box.createVerticalStrut(10));
128                            jpRightTable.add(jsc2);
129                                jsc2.setViewportView(jt2);
130                                    jt2.setPreferredScrollableViewportSize(tableDimension);
131                                    jt2.setModel(new HistoryEntryModel(es.getOrderHistory(),
132                                            HistoryEntryModel.ORDER_HISTORY));
133                        jpMain.add(jpData);
134                        jpMain.add(jpTables);
135                    fs.setComponent(jpMain);
136                    fs.removeAllButtons();
137                    fs.addButton("Zurück", ButtonIDs.BTN_BACK, null);
138                }
139            }, false);
140        }
141    }