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         * @param ciss the precomputed statistics to be displayed.
033         */
034        public FSManagerArticleStatsDetail(final CISalesStats ciss) {
035            super("Artikelstatistik - Details", new FormSheetContentCreator() {
036                public void createFormSheetContent(final FormSheet fs) {
037                    final CIArticle cia = SMarket.getArticleCatalog().get(ciss.getArticleID());
038                    final EvaluateStatistics es = new EvaluateStatistics(ciss);
039                    JPanel jpMain = new JPanel();
040                    JPanel jpData = new JPanel();
041                    JPanel jpTables = new JPanel();
042                    JPanel jpLeftTable = new JPanel();
043                    JPanel jpRightTable = new JPanel();
044                    JPanel jpDataLabel1 = new JPanel();
045                    JPanel jpDataLabel2 = new JPanel();
046                    JPanel jpValueLabel1 = new JPanel();
047                    JPanel jpValueLabel2 = new JPanel();
048                    JPanel jpEdit = new JPanel();
049                    JPanel jpEditLabel1 = new JPanel();
050                    JPanel jpEditValue1 = new JPanel();
051                    JPanel jpEditCurrency1 = new JPanel();
052                    JScrollPane jsc1 = new JScrollPane();
053                    JScrollPane jsc2 = new JScrollPane();
054                    JTable jt1 = new JTable();
055                    JTable jt2 = new JTable();
056                    Dimension tableDimension = new Dimension(250, 150);
057                    GridBagConstraints c = new GridBagConstraints();
058                    GridBagLayout gridbag = new GridBagLayout();
059                    jpMain.setLayout(gridbag);
060                        c.gridy = 0;
061                        c.weightx = 1;
062                        c.weighty = 0.1;
063                        c.insets = new Insets(10,0,0,0);
064                        c.anchor = GridBagConstraints.NORTH;
065                      gridbag.setConstraints(jpData, c);
066                        c.gridy = 1;
067                        c.weightx = 1;
068                        c.weighty = 0.9;
069                        c.insets = new Insets(10,0,0,0);
070                        c.anchor = GridBagConstraints.CENTER;
071                      gridbag.setConstraints(jpTables, c);
072    
073                    jpData.setLayout(new BoxLayout(jpData, BoxLayout.X_AXIS));
074                    jpData.setBorder(ComponentFactory.createInsetBorder("Statistik für " + cia.getArticleName()));
075                    jpData.add(jpDataLabel1);
076                        jpDataLabel1.setLayout(new GridLayout(4,1));
077                        jpDataLabel1.add(new JLabel("Auf Lager:"));
078                        jpDataLabel1.add(new JLabel("Einkaufspreis:"));
079                        jpDataLabel1.add(new JLabel("Durchschn. Verkaufspreis:"));
080                        jpDataLabel1.add(new JLabel("Durchschn. Gewinn:"));
081                    jpData.add(jpValueLabel1);
082                        jpValueLabel1.setLayout(new GridLayout(4,1));
083                        jpValueLabel1.add(ComponentFactory.createTextField(SMarket.getOffer().countItems(
084                                ciss.getArticleID(), null), 7, false, ComponentFactory.RIGHT, false));
085                        jpValueLabel1.add(ComponentFactory.createTextField(Conversions.doubleToCurrency(
086                                cia.getOffer()), 7, false, ComponentFactory.RIGHT, false));
087                        jpValueLabel1.add(ComponentFactory.createTextField(Conversions.doubleToCurrency(
088                                es.getAveragePrice()), 7, false, ComponentFactory.RIGHT, false));
089                        jpValueLabel1.add(ComponentFactory.createTextField(Conversions.doubleToCurrency(
090                                es.getAveragePrice() - cia.getOffer()), 7, false, ComponentFactory.RIGHT, false));
091                    jpData.add(Box.createHorizontalStrut(25));
092                    jpData.add(jpDataLabel2);
093                        jpDataLabel2.setLayout(new GridLayout(4,1));
094                        jpDataLabel2.add(new JLabel("Gesamt verkauft:"));
095                        jpDataLabel2.add(new JLabel("Durchschn. Verkauf pro Tag:"));
096                        jpDataLabel2.add(new JLabel("Durchschn. Bestellmenge:"));
097                        jpDataLabel2.add(new JLabel("Bestellabstand:"));
098                    jpData.add(jpValueLabel2);
099                        jpValueLabel2.setLayout(new GridLayout(4,1));
100                        jpValueLabel2.add(ComponentFactory.createTextField(es.getAmount(),
101                                7, false, ComponentFactory.RIGHT, false));
102                        jpValueLabel2.add(ComponentFactory.createTextField(
103                                Conversions.round(es.getAverageItemsSold(), 3),
104                                7, false, ComponentFactory.RIGHT, false));
105                        jpValueLabel2.add(ComponentFactory.createTextField(
106                                Conversions.round(es.getAverageOrderAmount(), 1),
107                                7, false, ComponentFactory.RIGHT, false));
108                        jpValueLabel2.add(ComponentFactory.createTextField(
109                                Conversions.round(es.getAverageDaysBetweenOrders(), 1),
110                                7, false, ComponentFactory.RIGHT, false));
111                        jpTables.setLayout(new BoxLayout(jpTables, BoxLayout.X_AXIS));
112                        jpTables.add(jpLeftTable);
113                            jpLeftTable.setLayout(new BoxLayout(jpLeftTable, BoxLayout.Y_AXIS));
114                            jpLeftTable.add(new JLabel("Preisverlauf:"));
115                            jpLeftTable.add(Box.createVerticalStrut(10));
116                            jpLeftTable.add(jsc1);
117                                jsc1.setViewportView(jt1);
118                                    jt1.setPreferredScrollableViewportSize(tableDimension);
119                                    jt1.setModel(new HistoryEntryModel(es.getPriceHistory(),
120                                            HistoryEntryModel.PRICE_HISTORY));
121                        jpTables.add(Box.createHorizontalStrut(25));
122                        jpTables.add(jpRightTable);
123                            jpRightTable.setLayout(new BoxLayout(jpRightTable, BoxLayout.Y_AXIS));
124                            jpRightTable.add(new JLabel("Nachbestellungen:"));
125                            jpRightTable.add(Box.createVerticalStrut(10));
126                            jpRightTable.add(jsc2);
127                                jsc2.setViewportView(jt2);
128                                    jt2.setPreferredScrollableViewportSize(tableDimension);
129                                    jt2.setModel(new HistoryEntryModel(es.getOrderHistory(),
130                                            HistoryEntryModel.ORDER_HISTORY));
131                        jpMain.add(jpData);
132                        jpMain.add(jpTables);
133                    fs.setComponent(jpMain);
134                    fs.removeAllButtons();
135                    fs.addButton("Zurück", ButtonIDs.BTN_BACK, null);
136                }
137            }, false);
138        }
139    }