package gui.charge.facture;
import static gui.MotsCleProjet.*
;
import static gui.util.TaxiGuiUtil.FabricationButton;
import static gui.util.TaxiGuiUtil.MessageBox;
import gui.*;
import gui.charge.chargevoiture.ChargeVoitureAffichable;
import gui.util.ErreurDeValidation;
import gui.util.TaxiGuiUtil;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
import javax.swing.*;
import util.Periode;
import modele.charge.ChargeVoiture;
import modele.charge.FichePaiementFacture;
import modele.compteUser.CompteUser;
import dao.GestionnaireDeStockage;
import dao.IChargeVoitureDao;
import dao.ICompteUserDao;
import dao.IDao;
/**
* class FichePaiementFactureEditionFenetre
* Cr�e l'interface graphique qui permet d'ins�rer ou de modifier un enregistrement
* @author Kasandra
*
*/
public class FichePaiementFactureEditionFenetre implements ActionListener {
private JDialog aDialog;// R�f�rence � la boite de dialogue.
private JTextControlKey textDescrip;
private JTextControlKey textMont;
private JLabel titres, textdtPaie;
ImageIcon ani;
private JComboBox cmbChargeVoiture;
private JPanel titre;
private FichePaiementFacture fichePaiementFacture = new FichePaiementFacture();
private static Font titreFont = new Font("Tahoma", 1, 12);
protected boolean okFlag;
public boolean OK_Button() {
return okFlag;
}
/**
* Constructeur
*/
public FichePaiementFactureEditionFenetre() {
aDialog = new JDialog(MainWindow.cadrePrincipal(), " Fiche de paie facture...", true);
ani = new ImageIcon(getClass().getClassLoader().getResource("images/logoCalender.jpg"));
textdtPaie = new JLabel();
textdtPaie.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));
textdtPaie.setIcon(ani);
textdtPaie.setFont(titreFont);
textdtPaie.setForeground(new java.awt.Color(66, 79, 120));
textdtPaie.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
DateCalendar fen = new DateCalendar(MainWindow.cadrePrincipal(), DateCalendar.Mode.DATE_SEULEMENT);
fen.affiche();
if (fen.okFlag) {
Date date = fen.retourDate();
if (dateValide(date)) {
textdtPaie.setText(new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).format(date));
} else {
textdtPaie.setText(DATE_ERREUR_TEXTE);
MessageBox(MainWindow.desktop(), "DATE INVALIDE...");
}
} else {
textdtPaie.setText(DATE_ERREUR_TEXTE);
MessageBox(MainWindow.desktop(), "DATE INVALIDE...");
}
}
private boolean dateValide(Date date) {
Calendar calendarFin = Calendar.getInstance();
calendarFin.add(Calendar.DAY_OF_MONTH, 15);
Calendar calendarDebut = Calendar.getInstance();
calendarDebut.add(Calendar.DAY_OF_MONTH, -15);
boolean dateValide = new Periode(calendarDebut.getTime(),calendarFin.getTime()).inclue(date);
return dateValide;
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
});
textDescrip = new JTextControlKey("",30,IsNumString);
textMont = new JTextControlKey("",30,IsDecimal);
cmbChargeVoiture = new JComboBox(getListeChargeVoiture());
okFlag = false;
}
/**
* initialise Fiche paiement facture
* @param pays
*/
public void initializeDonnee(FichePaiementFacture fichePaiementFacture) {
this.fichePaiementFacture = fichePaiementFacture;
textdtPaie.setText(new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).format(fichePaiementFacture.getDatePaieFacture()));
textDescrip.ChampsTxt.setText(fichePaiementFacture.getLibellePaieFcature());
textMont.ChampsTxt.setText(fichePaiementFacture.getMontantPaieFacture()+"");
selectionneChargeVoiture(fichePaiementFacture.getChargeVoiture());
}
/**
* Selectionne charge voitiure
* @param chargeVoiture
*/
private void selectionneChargeVoiture(ChargeVoiture chargeVoiture) {
int nbChargeVoiture = cmbChargeVoiture.getItemCount();
for (int i = 0; i<nbChargeVoiture; i++) {
if (((ChargeVoitureAffichable)cmbChargeVoiture.getItemAt(i)).getChargeVoiture().getId().equals(chargeVoiture.getId())) {
cmbChargeVoiture.setSelectedIndex(i);
break;
}
}
}
/***
* Retourne fiche paiement facture
* @return
*/
public FichePaiementFacture renvoiFichePaiementFacture() {
return fichePaiementFacture;
}
/**
* Panel Montant pay�
* @return
*/
private JPanel creeMontantPaieFacturePane()
{
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
JLabel labMontant = new JLabel(" Montant : *");
labMontant.setFont(titreFont);
labMontant.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labMontant);
parameterPane.add(textMont.ChampsTxt);
return parameterPane;
}
/**
* Panel libell� paiement
* @return
*/
private JPanel creeLibellePane()
{
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
JLabel labLibelle = new JLabel(" Libell� facture : *");
labLibelle.setFont(titreFont);
labLibelle.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labLibelle);
parameterPane.add(textDescrip.ChampsTxt);
return parameterPane;
}
/**
* Panel charge voiture
* @return
*/
private JPanel creeChargeVoiturePane()
{
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
JLabel labCharge = new JLabel(" Charge voiture :");
labCharge.setFont(titreFont);
labCharge.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labCharge);
parameterPane.add(cmbChargeVoiture);
return parameterPane;
}
/**
* Panel date paiement
* @return
*/
private JPanel creeDatePaieFacturePane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
JLabel labDateAverti = new JLabel(" Date paie : *");
labDateAverti.setFont(titreFont);
labDateAverti.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labDateAverti);
parameterPane.add(textdtPaie);
return parameterPane;
}
/**
* Titre formulaire
* @return
*/
private JPanel getTitre() {
if (titre == null) {
GridBagConstraints gridBagTitre = new GridBagConstraints();
gridBagTitre.gridx = 0;
gridBagTitre.gridy = 0;
titres = new JLabel();
titres.setText(" Fiche paie facture");
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;
}
/**
* affiche 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 FlowLayout());
parameterPane.setPreferredSize(new Dimension(600, 200));
//parameterPane.setBorder(BorderFactory.createTitledBorder(" "));
parameterPane.add(creeDatePaieFacturePane());
parameterPane.add(creeLibellePane());
parameterPane.add(creeMontantPaieFacturePane());
parameterPane.add(creeChargeVoiturePane());
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("ANNULER", CMD_CANCEL, "Annuler...", this));
Point p = MainWindow.cadrePrincipal().getLocation();
aDialog.setLocation((p.x + 450), (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) {
try {
// Restaure la couleur de fonds par d�faut.
for (JComponent composant : Arrays.<JComponent>asList(textDescrip.ChampsTxt, textMont.ChampsTxt,textdtPaie)) {
composant.setBackground(Color.WHITE);
composant.setToolTipText("");
}
String cmd = e.getActionCommand();
if (CMD_OK.equals(cmd)) {
Vector<ErreurDeValidation> erreursDeValidation = new Vector<ErreurDeValidation>();
Date datePaie = null;
try {
datePaie = new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).parse(textdtPaie.getText());
fichePaiementFacture.setDatePaieFacture(datePaie);
} catch (ParseException e1) {
TaxiGuiUtil.MessageBox(MainWindow.desktop(), "Le format de date est invalide : attendu " + gui.MotsCleProjet.DATE_FORMAT, "Erreur");
}
if (datePaie.after(new Date())){
erreursDeValidation.add(new ErreurDeValidation(textdtPaie, "Date de paiement facture' doit �tre apr�s la date syst�me"));
}
if (textDescrip.ChampsTxt.getText().trim().equals("")) {
erreursDeValidation.add(new ErreurDeValidation(textDescrip.ChampsTxt, "le champ 'libell�' est obligatoire"));
}
if (textMont.ChampsTxt.getText().trim().equals("")) {
erreursDeValidation.add(new ErreurDeValidation(textMont.ChampsTxt, "le champ 'montant � payer facture' est obligatoire"));
}
try {
new BigDecimal(textMont.ChampsTxt.getText());
} catch (NumberFormatException ex) {
erreursDeValidation.add(new ErreurDeValidation(textMont.ChampsTxt, "le champ 'montant � payer' n'est pas un nombre"));
}
if (!erreursDeValidation.isEmpty()) {
StringBuffer erreurAffichee = new StringBuffer();
for (ErreurDeValidation erreurDeValidation : erreursDeValidation) {
erreurAffichee.append(erreurDeValidation.getMessageErreur());
erreurAffichee.append("\n");
erreurDeValidation.getComposant().setBackground(Color.RED);
erreurDeValidation.getComposant().setToolTipText(erreurDeValidation.getMessageErreur());
}
TaxiGuiUtil.MessageBox(MainWindow.desktop(), erreurAffichee.toString(), "ERREUR");
return;
}
else{
fichePaiementFacture.setLibellePaieFacture(textDescrip.ChampsTxt.getText());
fichePaiementFacture.setMontantPaieFacture(new BigDecimal(textMont.ChampsTxt.getText()));
fichePaiementFacture.setChargeVoiture(getChargeVoitureSelectionne());
okFlag = true;
aDialog.setVisible(false);
}
}
else if (CMD_CANCEL.equals(cmd)) {
okFlag = false;
aDialog.setVisible(false);
}
}catch(Exception ex) {
TaxiGuiUtil.MessageBox(MainWindow.desktop(), "Erreur syst�me : " + ex.getMessage(), "Erreur syst�me");
ex.printStackTrace();
}
}
/**
* Retourne charge voiture selectionn�e
* @return
*/
private ChargeVoiture getChargeVoitureSelectionne() {
return ((ChargeVoitureAffichable)cmbChargeVoiture.getSelectedItem()).getChargeVoiture();
}
/*
private Vector<ChargeVoitureAffichable> getListeChargeVoiture() {
Vector<ChargeVoitureAffichable> chargeVoitureAffichable = new Vector<ChargeVoitureAffichable>();
ArrayList<ChargeVoiture> eechargeVoiture = getChargeVoitureDao().findAll();
for (ChargeVoiture chargeVoiture : eechargeVoiture) {
chargeVoitureAffichable.add(new ChargeVoitureAffichable(chargeVoiture));
}
return chargeVoitureAffichable;
}
private IDao<ChargeVoiture> 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);
}
}
*/
private Vector<ChargeVoitureAffichable> getListeChargeVoiture() {
Vector<ChargeVoitureAffichable> chargeVoitureAffichables = new Vector<ChargeVoitureAffichable>();
ArrayList<ChargeVoiture> chargeVoiture = getChargeVoitureDao().findAllActif();//.findAll();
for (ChargeVoiture echargeVoitureAffichable : chargeVoiture) {
chargeVoitureAffichables.add(new ChargeVoitureAffichable(echargeVoitureAffichable));
}
return chargeVoitureAffichables;
}
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);
}
}
}