package gui.statistique;
import static gui.MotsCleProjet.CMD_OK;
import static gui.MotsCleProjet.CMD_QUIT;
import static gui.util.TaxiGuiUtil.FabricationButton;
import gui.MainWindow;
import gui.Ouvrable;
import gui.PrjException;
import gui.util.Mois;
import gui.util.TaxiGuiUtil;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Paint;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JDesktopPane;
import javax.swing.JDialog;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import modele.charge.ChargeVoiture;
import modele.compteUser.RoleUser;
import modele.course.Tournee;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import dao.GestionnaireDeStockage;
import dao.IChargeVoitureDao;
import dao.ITourneeDao;
import dao.implementation.mysql.AccessMySql;
/**
* Classe StatistiqueChiffreAffaireFenetre
*
* @author Kasandra
*
*/
public class StatistiqueChiffreAffaireFenetre implements ActionListener, Ouvrable{
private JDialog aDialog;// R�f�rence � la boite de dialogue.
private JPanel titre;
private JLabel titres;
static Font titreFont = new Font("Tahoma", 1, 12);
protected boolean okFlag;
protected JInternalFrame internalFrame;
public void ouvreFenetre() {
internalFrame.setVisible(true);
}
public void fermeFenetre() {
internalFrame.setVisible(false);
}
class CustomRenderer extends BarRenderer {
/**
* Returns the paint for an item. Overrides the default behaviour inherited from
* AbstractSeriesRenderer.
*
* @param row the series.
* @param column the category.
*
* @return The item color.
*/
public Paint getItemPaint(final int row, final int column) {
CategoryDataset dataSet = getPlot().getDataset();
Number value = dataSet.getValue(row, column);
return (value.doubleValue() > 0.0) ? Color.GREEN : Color.RED ;
}
}
private JPanel createChartPaneChiffreAffaire() {
ITourneeDao tourneeDao = getTourneeDao();
java.util.List<Tournee> tournees = tourneeDao.findAll();
Map<Integer,BigDecimal> chiffresAffaireParMois = new HashMap<Integer, BigDecimal>();
for (Tournee tournee: tournees) {
int mois = tournee.getDateDebutService().getMonth();
BigDecimal recetteJournali�re = tournee.getRecetteJournali�re();
if (recetteJournali�re == null)
recetteJournali�re = new BigDecimal(0.0);
if (chiffresAffaireParMois.containsKey(mois)) {
BigDecimal chiffreAffaireTemp = chiffresAffaireParMois.get(mois);
chiffresAffaireParMois.put(mois, chiffreAffaireTemp.add(recetteJournali�re));
} else {
chiffresAffaireParMois.put(mois, recetteJournali�re);
}
}
IChargeVoitureDao chargeVoitureDao = getChargeVoitureDao();
java.util.List<ChargeVoiture> chargeVoitures = chargeVoitureDao.findAll();
for (ChargeVoiture chargeVoiture: chargeVoitures) {
int mois = chargeVoiture.getDateEmmissionCharge().getMonth();
BigDecimal depense = chargeVoiture.getMontantIndicatif().negate();
if (depense == null) depense = new BigDecimal(0.0);
if (chiffresAffaireParMois.containsKey(mois)) {
BigDecimal depenseTemp = chiffresAffaireParMois.get(mois);
chiffresAffaireParMois.put(mois, depenseTemp.add(depense));
}
else {
chiffresAffaireParMois.put(mois, depense);
}
}
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// affiche les donn�es m�me s'il n'y a pas eu de chiffre d'affaire.
for (Mois mois : Mois.values()) {
BigDecimal depenseDuMois = chiffresAffaireParMois.get(mois.getIndex());
dataset.addValue((depenseDuMois != null ? depenseDuMois : 0.0 ), "Chiffre d'affaires mensuel", mois.getNom());
}
JFreeChart barChart = ChartFactory.createBarChart(
"Evolution du chiffre d'affaires", "",
" Montant de chiffre d'affaires en euro", dataset, PlotOrientation.VERTICAL, true, true,
false);
final CategoryPlot plot = barChart.getCategoryPlot();
plot.setRenderer(new CustomRenderer());
ChartPanel cPanel = new ChartPanel(barChart);
cPanel.setSize(700,500);
return cPanel;
}
/**
* retourne l'instance de la classe MysqlTourneeDao pour pouvoir
* utiliser les m�thodes de l'interface ITourneeDao
* @return ITourneeDao
*/
private ITourneeDao getTourneeDao() {
try {
return GestionnaireDeStockage.getInstance().getTourneeDao();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
/**
* retourne l'instance de la classe MysqlChargeVoitureDao pour pouvoir
* utiliser les m�thodes de l'interface IChargeVoitureDao
* @return ChargeVoitureDao
*/
private IChargeVoitureDao getChargeVoitureDao() {
try {
return GestionnaireDeStockage.getInstance().getChargeVoitureDao();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
public boolean OK_Button() {
return okFlag;
}
/**
* Constructeur de la classe
* @throws PrjException
*/
public StatistiqueChiffreAffaireFenetre(JDesktopPane jDesktopPane) {
//JFrame dependantFrame, MainWindow mainwin) {
{
internalFrame = TaxiGuiUtil.creeInternalFrame("Stastique de chiffre d'affaires");
jDesktopPane.add(internalFrame);
try {
AccessMySql.ouvreConnection();
JToolBar toolBar = new JToolBar("Outils...");
JPanel parameterPane = new JPanel(false);
parameterPane.setBackground(new Color(170, 207, 249));
parameterPane.setLayout(new FlowLayout());
parameterPane.setPreferredSize(new Dimension(900,660));
//parameterPane.setBorder(BorderFactory.createTitledBorder(" "));
toolBar.setBackground(new Color(66, 79, 120));
toolBar.add(FabricationButton("Quitter", CMD_QUIT, "Quitter...", this));
parameterPane.add(createChartPaneChiffreAffaire(), BorderLayout.CENTER);
internalFrame.getContentPane().add(getTitre(), BorderLayout.NORTH);
internalFrame.getContentPane().add(parameterPane, BorderLayout.CENTER);
internalFrame.getContentPane().add(toolBar, BorderLayout.PAGE_END);
} catch (Exception e) {
//TaxiGuiUtil.MessageBox( "Erreur de base de donn�es. V�rifiez que la base de donn�es est d�mar�e.");
System.exit(1);
}
okFlag = false;
}
}
/**
* Renvoie titre formulaire
*
* @return
*/
private JPanel getTitre() {
if (titre == null) {
GridBagConstraints gridBagTitre = new GridBagConstraints();
gridBagTitre.gridx = 0;
gridBagTitre.gridy = 0;
titres = new JLabel();
titres.setText(" Vue d'ensemble chiffre d'affaires");
titres.setFont(new java.awt.Font("Comic Sans MS", 1, 20));
titres.setForeground(new Color(255, 255, 255));
titre = new JPanel();
titre.setLayout(new GridBagLayout());
titre.setPreferredSize(new Dimension(50, 45));
titre.setBackground(new Color(66, 79, 120));
titre.add(titres, gridBagTitre);
}
return titre;
}
/**
* D�finit la fen�tre et ses composants
*/
public void affiche() throws PrjException {
try {
JToolBar toolBar = new JToolBar("Outils...");
JPanel parameterPane = new JPanel(false);
parameterPane.setBackground(new Color(170, 207, 249));
parameterPane.setLayout(new GridLayout(1,2));
parameterPane.setPreferredSize(new Dimension(1200, 500));
parameterPane.setBorder(BorderFactory.createTitledBorder(" "));
parameterPane.add(createChartPaneChiffreAffaire());
aDialog.getContentPane().add(getTitre(), BorderLayout.NORTH);
aDialog.getContentPane().add(parameterPane, BorderLayout.CENTER);
aDialog.getContentPane().add(toolBar, BorderLayout.PAGE_END);
toolBar.setBackground(new Color(66, 79, 120));
//toolBar.add(FabricationButton("OK", CMD_OK, "OK...", this));
toolBar.add(FabricationButton("Quitter", CMD_QUIT, "Quitter...", this));
Point p = MainWindow.cadrePrincipal().getLocation();
aDialog.setLocation((p.x + 250), (p.y + 200));
aDialog.pack();
aDialog.setVisible(true);
} catch (NullPointerException exc) {
throw new PrjException(exc.getMessage());
}
}
/**
* Gestionnaire des �v�nements
*/
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (CMD_OK.equals(cmd)) {
okFlag = true;
aDialog.setVisible(false);
}else if (CMD_QUIT.equals(cmd)) {
okFlag = false;
aDialog.setVisible(false);
}
}
}