 /****************************************************************************
** ui.h extension file, included from the uic-generated form implementation.
**
** If you wish to add, delete or rename functions or slots use
** Qt Designer which will update this file, preserving your code. Create an
** init() function in place of a constructor, and a destroy() function in
** place of a destructor.
*****************************************************************************/


void FormNotesDevoir::init()
{
    //on vide les listes déroulantes
    comboBoxMatiere->clear();
    comboBoxDevoir->clear();
    comboBoxEleve->clear();
    
    //tant qu'on n'a pas sélectionné de devoir, on ne peut pas mettre de note
    pushButtonValider->setEnabled(false);
    lineEditNote->setEnabled(false);
    
    //on sélectionne toutes les matières
    QSqlQuery req;
    QString lib="SELECT nomMatiere FROM MATIERE ORDER BY nomMatiere";
    req.exec(lib);
    
     //pour chaque matière
    while (req.next() )
    {
	comboBoxMatiere->insertItem(req.value(0).toString() );
    }
    
    matiere_changement();
}



void FormNotesDevoir::matiere_changement()
{
    //on vide la liste des devoirs
    comboBoxDevoir->clear();
    
    lineEditNote->setText("");
    lineEditNote->setEnabled(false);
    pushButtonValider->setEnabled(false);
     
    //récupération de l'élèment sélectionné
    QString matiere=comboBoxMatiere->currentText();
    
    //on sélectionne le numéro de la matière correspondant
    QSqlQuery req;
    QString lib="SELECT noMatiere FROM MATIERE WHERE nomMatiere='"+matiere+"'";
    req.exec(lib);
    req.next();
    //QString noMatiere=req.value(0).toString();
    int noMat=req.value(0).toInt();
    QString noMatiere=QString::number(noMat);
    
    //on sélectionne tous les devoirs concernant cette matière
    lib="SELECT libDevoir FROM DEVOIR WHERE noMatiere="+noMatiere+" ORDER BY dateDevoir,libDevoir";
    req.exec(lib);
    
    //pour chaque devoir
    while (req.next() )
    {
	comboBoxDevoir->insertItem(req.value(0).toString() );
    }
    
    devoir_changement();
}


void FormNotesDevoir::devoir_changement()
{
    //on vide la liste des élèves
    comboBoxEleve->clear();
    
    lineEditNote->setText("");
    lineEditNote->setEnabled(false);
    pushButtonValider->setEnabled(false);
    
    //récupération de la matière sélectionnée
    QString matiere=comboBoxMatiere->currentText();
    //on sélectionne le numéro de la matière correspondant
    QSqlQuery req;
    QString lib="SELECT noMatiere FROM MATIERE WHERE nomMatiere='"+matiere+"'";
    req.exec(lib);
    req.next();
    //QString noMatiere=req.value(0).toString();
    int noMat=req.value(0).toInt();
    QString noMatiere=QString::number(noMat);
    
     //récupération du devoir sélectionné
    QString devoir=comboBoxDevoir->currentText();
    //on sélectionne la classe concernée par le devoir
    lib="SELECT noDevoir,classeConcernee FROM DEVOIR WHERE libDevoir='"+devoir+"'";
    lib=lib+" AND noMatiere="+noMatiere;
    req.exec(lib);
    req.next();
    int noDev=req.value(0).toInt();
    QString noDevoir=QString::number(noDev);
    QString classe=req.value(1).toString();
    
    //on sélectionne tous les élèves de la classe concernée par ce devoir
    QString lib1="SELECT noEleve,nomEleve,prenomEleve FROM ELEVE";
    lib1=lib1+" WHERE classeEleve='"+classe+"' ORDER BY nomEleve";
    req.exec(lib1);
    
    QSqlQuery req2;
    //on sélectionne tous les élèves auxquels on a déjà attribué une note concernant ce devoir 
    QString lib2="SELECT EL.noEleve,nomEleve,prenomEleve FROM ELEVE EL,EFFECTUER EF";
    lib2=lib2+" WHERE EL.noEleve=EF.noEleve AND noDevoir="+noDevoir;
    lib2=lib2+" AND noMatiere="+noMatiere+" AND note IS NOT NULL ORDER BY nomEleve";
    req2.exec(lib2);
    req2.next();
        
    QString texteAff;
    //variable permettant de savoir s'il y a des élèves dans la liste
    bool elv=false;
        
     //pour chaque élève
    while (req.next() )
    {
	//si l'élève considéré a déjà une note
	if (req.value(0).toString()==req2.value(0).toString() )
	{
	    //on passe à l'élève suivant dans la liste de ceux qui ont déjà une note
	    req2.next();
	}
	//si l'élève considéré n'a pas encore de note, on l'affiche dans la liste
	else
	{	
	    elv=true;
	    texteAff=req.value(1).toString()+" "+req.value(2).toString();
	    comboBoxEleve->insertItem(texteAff);
	}	
    }
    
    //si la liste n'est pas vide
    if (elv)
    {
	lineEditNote->setEnabled(true);
	pushButtonValider->setEnabled(true);
    }
}


void FormNotesDevoir::validation()
{
    //on récupère la note saisie
    QString note=lineEditNote->text();
    int noteEntier=note.toInt();
    
    //si la note saisie n'est pas valide
    if ((note.isEmpty() )||(noteEntier<0)||(noteEntier>20))
    {
	//message d'erreur
	QMessageBox::warning(this,"Erreur","La note doit être comprise entre 0 et 20");
	return;
    }
    //si la note saisie est valide
    else
    {
	//récupération du nom et du prénom de l'élève
	QString eleve=comboBoxEleve->currentText();
	QStringList qsElv=QStringList::split(" ",eleve);
	QString nom=qsElv[0];
	QString prenom=qsElv[1];
	//on sélectionne le numéro de l'élève
	QSqlQuery req;
	QString lib="SELECT noEleve FROM ELEVE WHERE nomEleve='"+nom;
	lib=lib+"' AND prenomEleve='"+prenom+"'";
	req.exec(lib);
	req.next();
	int noElv=req.value(0).toInt();
	QString noEleve=QString::number(noElv);
	
	//récupération de la matière sélectionnée
	QString matiere=comboBoxMatiere->currentText();
	//on sélectionne le numéro de la matière 
	lib="SELECT noMatiere FROM MATIERE WHERE nomMatiere='"+matiere+"'";
	req.exec(lib);
	req.next();
	int noMat=req.value(0).toInt();
	QString noMatiere=QString::number(noMat);
		
		
	//récupération du devoir sélectionné
	QString devoir=comboBoxDevoir->currentText();
	//on sélectionne le numéro du devoir
	lib="SELECT noDevoir FROM DEVOIR WHERE libDevoir='"+devoir+"'";
	lib=lib+" AND noMatiere="+noMatiere;
	req.exec(lib);
	req.next();
	int noDev=req.value(0).toInt();
	QString noDevoir=QString::number(noDev);
	
	//on insère les données dans la table EFFECTUER
	lib="INSERT INTO EFFECTUER VALUES("+noEleve+","+noMatiere+","+noDevoir+","+note+")";	
	qDebug(lib);
	req.exec(lib);
	devoir_changement();
    }

}
