package gui.vues.demande;
import gui.vues.NtpPanel;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import metier.reservations.Demande;
import misc.GU;
import misc.Utils;
import data.abonne.Abonne;
import data.programmation.Piece;
import data.reservation.Reservation;
/**
* Panel d'affichage des informations sur un abonné.
* Point 3a2. 3a3. 3a4. et 3a2a. 3a3a. du cas d'utilisation 1
*
*
* @author Ait Elhaj Brahim
*
*/
public class InfosAbonne extends NtpPanel implements ActionListener{
private Piece p;
private Abonne a;
private Date currentDate;
private JLabel infosAbonne;
private JLabel message;
private JButton ok = new JButton("Continuer");
private JButton arret = new JButton("Arrêter");
/**
* Construit un objet <code>InfosAbonne</code>
*
* @param a L'abonné dont on va afficher les informations
* @param p La piéce
* @param d La date courante
* @param owner Le <code>JDialog</code> parent
* @param previous Le panel précédent
*/
public InfosAbonne(Abonne a, Piece p, Date d, JDialog owner,NtpPanel previous){
super(owner,previous);
this.p = p;
this.a = a;
this.currentDate = d;
message = new JLabel("",JLabel.CENTER);
GridLayout layout = new GridLayout(0,1);
setLayout(layout);
//Création de l'abonné et afficage des informations
JPanel infoPanel = new JPanel();
infoPanel.setLayout(layout);
infosAbonne = new JLabel("",JLabel.CENTER);
int taille = GU.TAILLE_FONT_HTML;
String couleurTitre = GU.COLOR_TITRE_HTML;
String couleurInfo = GU.COLOR_INFO_HTML;
String txt = "<html><font color="+couleurTitre+" size=+"+taille+"> Informations Abonné </font><ul>"+
"<li>Identifiant Abonné : <font color="+couleurInfo+">" + a.getIdAbo()+"</font><br>"+
"<li>Nom : <font color="+couleurInfo+">"+a.getNom()+"</font><br>"+
"<li>Prénom : <font color="+couleurInfo+">"+a.getPrenom()+"</font><br>"+
"<li>Adresse : <font color="+couleurInfo+">"+a.getAdresse()+"</font><br>"+
"<li>Nombre places sur l'abonnement : <font color="+couleurInfo+"" +
">"+a.getNbPlaces()+"</font><br>"+
"<li>Date de début de validité de l'abonnement : <font color="+couleurInfo+">"+
Utils.formatDateToString(a.getValiditeDebut())+"</font><br>"+
"<li>Date de fin de validité de l'abonnement : <font color="+couleurInfo+">"+
Utils.formatDateToString(a.getValiditeFin())+"</font><br>"+
"<li>Zone : <font color="+couleurInfo+">"+a.getZone().getIdZone()+"</font><br>"+
"</ul>";//</html>
String txtMessage = "<font color=red size=+"+taille+">";
if(!abonnementValide()){
txtMessage += "Abonnement non Valide";
ok.setEnabled(false);
}else if(dejaReserve()){
txtMessage += "Une réservation existe déja pour cette pièce";
ok.setEnabled(false);
}else{
arret.setEnabled(false);
}
txt+=txtMessage;
txt+="<br></font></html>";
infosAbonne.setText(txt);
infoPanel.add(infosAbonne);
//Panel bas
JPanel panelBas = new JPanel();
panelBas.add(arret);
panelBas.add(ok);
this.add(infoPanel);
this.add(panelBas);
ok.addActionListener(this);
arret.addActionListener(this);
}
/**
* Indique si un abonnement est valide
*
* @return true si l'abonnement de l'abonné est valide
*/
private boolean abonnementValide(){
// Validité de l'abonnement ?
Demande d = new Demande();
return d.abonnementValide(a, currentDate);
}
/**
* Indique si l'abonné a déja réservé pour cette piéce.
*
* @return true si l'abonné à déja réservé pour cette piéce
*/
private boolean dejaReserve(){
Demande d = new Demande();;
return d.aReserve(a.getIdAbo(), p.getIdPiece());
}
/**
* Gestion des évenements
*
* @param e L'évenement déclencheur (ex : Click sur un bouton ...)
*/
public void actionPerformed(ActionEvent e){
/* La source de l'évenement */
Object o = (Object)e.getSource();
if(o == ok){
// Création de la réservation et paramétrage de la date
Reservation res = new Reservation();
res.setDateReserv(new java.sql.Date(currentDate.getTime()));
//On passe à l'écran suivant
JPanel next = new ListeRepresentations(p,a,res,owner,this);
this.displayScreen(next);
}else if(o == arret){
//Fin du cas d'utilisation => Retour au premier écran
this.finishCase();
}
}
}