コード例 #1
0
void XmlDataPersistance::loadCategories(const QString &fileName)
{
    QFile file(fileName);
    if(!file.open(QIODevice::ReadOnly))
        throw UTProfilerException("Failed to open " + fileName + " in UVManager::loadDegrees.");

    QDomDocument dom;
    dom.setContent(&file);

    QDomElement categories = dom.documentElement();

    for(QDomElement catElem = categories.firstChildElement("categorie");!catElem.isNull();catElem = catElem.nextSiblingElement("categorie"))
    {
        Uv::categories_.push_back(catElem.text());
    }

    file.close();
}
コード例 #2
0
//Chargement de toutes les uvs en mémoire si aucun paramètre, sinon juste l'UV dont le code est envoyé
void UVManager::load()
{

    bool automne;
    bool printemps;
    QString code;
    QString titre;
    //Categorie categorie
    QMap<QString,int> cat;
    int nombre_select = 0;
    QSqlQuery* query;
    DatabaseManager& dbu=DatabaseManager::getInstanceDB();


    query = new QSqlQuery("SELECT * FROM UV_table",dbu.getMyDB());

    while(query->next())
    {

        nombre_select++;
        automne = query->value(0).toBool();
        printemps = query->value(1).toBool();

        code = query->value(2).toString();
        titre = query->value(3).toString();

        cat.insert("CS",query->value(4).toInt());
        cat.insert("TM",query->value(5).toInt());
        cat.insert("TSH",query->value(6).toInt());
        cat.insert("SP",query->value(7).toInt());

        ajouterUV(code,titre,cat,automne,printemps);

    }
    std::cout<<nombre_select<<"\n";
    if(nombre_select == 0)
    {
        throw UTProfilerException("Erreur au chargement, l'UV n'existe pas");
    }



}
コード例 #3
0
ファイル: EtudiantDAO.cpp プロジェクト: roddehugo/utprofiler
bool EtudiantDAO::update(Etudiant *obj){
    try{
        QSqlQuery query(Connexion::getInstance()->getDataBase());
        query.prepare("UPDATE etudiants SET (login=:login, prenom=:prenom, nom=:nom) WHERE id = :id ;");
        query.bindValue(":id", obj->ID());
        query.bindValue(":login", obj->getLogin() );
        query.bindValue(":prenom", obj->getPrenom() );
        query.bindValue(":nom", obj->getNom() );
        if (!query.exec()){
            throw UTProfilerException("La requète a échoué : " + query.lastQuery());
            return false;
        }else{
            LogWriter::writeln("EtudiantDAO.cpp","Lecture de l'étudiant : " + obj->getLogin());
            return true;
        }
    }catch(UTProfilerException e){
        LogWriter::writeln("EtudiantDAO::update()",e.getMessage());
    }
}
コード例 #4
0
ファイル: semester.cpp プロジェクト: sagzy/lo21-project
Semester* Semester::getInstance(Season s, unsigned int a){
    if(semesters == 0){
        semesters = new std::vector<Semester*>();
    }

    if(a > 99){
        throw UTProfilerException("(Semester) Invalid year !");
        return 0;
    }

    for(std::vector<Semester*>::iterator it = semesters->begin(); it != semesters->end(); ++it){
        if((*it)->toStdString() == SeasonNames[s]+QString::number(a).toStdString()){
            return *it;
        }
    }
    Semester* n = new Semester(s, a);
    semesters->push_back(n);
    return n;
}
コード例 #5
0
ファイル: EtudiantDAO.cpp プロジェクト: roddehugo/utprofiler
bool EtudiantDAO::create(Etudiant *obj){
    try{
        QSqlQuery query(Connexion::getInstance()->getDataBase());
        query.prepare("INSERT INTO etudiants (id, login, prenom, nom) VALUES (NULL, :login, :prenom, :nom);");
        query.bindValue(":login", obj->getLogin() );
        query.bindValue(":prenom", obj->getPrenom() );
        query.bindValue(":nom", obj->getNom() );
        if (!query.exec()){
            throw UTProfilerException("La requète a échoué : " + query.lastQuery());
            return false;
        }else{
            int id = query.lastInsertId().toInt();
            obj->setID(id);
            Map.insert(id,obj);
            LogWriter::writeln("Etudiant.cpp","Création de l'étudiant : " + obj->getLogin());
            return true;
        }
    }catch(UTProfilerException e){
        LogWriter::writeln("EtudiantDAO::create()",e.getMessage());
    }
}
コード例 #6
0
ファイル: EtudiantDAO.cpp プロジェクト: roddehugo/utprofiler
Etudiant* EtudiantDAO::find(const int& id){
    try{
        if (Map.contains(id)) {
            return Map.value(id);
        }
        QSqlQuery query(Connexion::getInstance()->getDataBase());
        if (!query.exec("SELECT * FROM etudiants WHERE id = " + QString::number(id) + ";")){
            throw UTProfilerException("La requète a échoué : " + query.lastQuery());
        }
        if(query.first()){
            QSqlRecord rec = query.record();
            const QString l = rec.value("login").toString();
            const QString p = rec.value("prenom").toString();
            const QString n = rec.value("nom").toString();
            LogWriter::writeln("EtudiantDAO.cpp","Lecture de l'étudiant : " + l);
            Etudiant* etu = new Etudiant(id,l,p,n);
            Map.insert(id,etu);
            return etu;
        }
    }catch(UTProfilerException e){
        LogWriter::writeln("EtudiantDAO::find()",e.getMessage());
    }
}
コード例 #7
0
UV& UVManager::getUV(const QString& code){
    UV* uv=trouverUV(code);
    if (!uv) throw UTProfilerException("erreur, UVManager, UV inexistante",__FILE__,__LINE__);
    return *uv;
}
コード例 #8
0
void formationManager::load(const QString& f){
    if (!formations.isEmpty()) {
        deleteAllFormations();
    }
    file=f;

    QFile fin(file);
    // If we can't open it, let's show an error message.
    if (!fin.open(QIODevice::ReadOnly | QIODevice::Text)) {
        throw UTProfilerException("Erreur ouverture fichier formations");
    }

    // QXmlStreamReader takes any QIODevice.
    QXmlStreamReader xml(&fin);
    // We'll parse the XML until we reach end of it.
    while(!xml.atEnd() && !xml.hasError()) {
        // Read next element.
        QStringRef test;
        QXmlStreamReader::TokenType token = xml.readNext();
        test = xml.name();
        // If token is just StartDocument, we'll go to next.
        if(token == QXmlStreamReader::StartDocument) continue;
        // If token is StartElement, we'll see if we can read it.
        if(token == QXmlStreamReader::StartElement) {
            // If it's named formations, we'll go to the next.
            if(xml.name() == "formations") continue;
            // If it's named formation, we'll dig the information from there.
            if(xml.name() == "formation") {
                QString code;
                QString titre;
                QMap<QString, int> creditsNeeded;
                QSet<QString> formationsNeeded;
                QSet<QString> uvNeeded;
                CreditsInUV creditsNeededInUVSet;

                xml.readNext();
                //We're going to loop over the things because the order might change.
                //We'll continue the loop until we hit an EndElement named formation.


                while(!(xml.tokenType() == QXmlStreamReader::EndElement && xml.name() == "formation")) {
                    if(xml.tokenType() == QXmlStreamReader::StartElement) {
                        // We've found code.
                        if(xml.name() == "code") {
                            xml.readNext(); code=xml.text().toString();
                        }
                        // We've found titre.
                        if(xml.name() == "titre") {
                            xml.readNext(); titre=xml.text().toString();
                        }
                        // We've found creditsNeeded.
                        if(xml.name() == "creditsNeeded") {
                            QString cat;
                            int nbC;

                            QXmlStreamAttributes attributes = xml.attributes();
                            foreach (QXmlStreamAttribute attribute, attributes) {
                                cat=attribute.name().toString();
                                nbC=attribute.value().toInt();
                                creditsNeeded.insert(cat, nbC);

                                if (!UVManager::getInstance().getCategorieManager().getAllCategories().contains(cat)) {
                                    UVManager::getInstance().getCategorieManager().addItem(cat, "");
                                }
                            }
                        }
                        // We've found formationNeeded.
                        if(xml.name() == "formationNeeded") {
                            xml.readNext(); formationsNeeded.insert(xml.text().toString());
                        }
                        if(xml.name() == "uvNeeded") {
                            xml.readNext(); uvNeeded.insert(xml.text().toString());
                        }
                        if(xml.name() == "creditsNeededInUVSet") {
                            QString cat;
                            int nbC;
                            QMap<QString, int> credits;
                            QSet<QString> uvs;

                            QXmlStreamAttributes attributes = xml.attributes();
                            foreach (QXmlStreamAttribute attribute, attributes) {
                                cat=attribute.name().toString();
                                nbC=attribute.value().toInt();
                                credits.insert(cat, nbC);

                                if (!UVManager::getInstance().getCategorieManager().getAllCategories().contains(cat)) {
                                    UVManager::getInstance().getCategorieManager().addItem(cat, "");
                                }
                            }
                            xml.readNext();

                            while(!(xml.tokenType() == QXmlStreamReader::EndElement && xml.name() == "creditsNeededInUVSet")) {
                                if(xml.tokenType() == QXmlStreamReader::StartElement) {
                                    if(xml.name() == "uv") {
                                        xml.readNext(); uvs.insert(xml.text().toString());
                                    }
                                }
                                xml.readNext();
                            }
                            creditsNeededInUVSet.credits=credits;
                            creditsNeededInUVSet.uvs=uvs;
                        }
                    }
コード例 #9
0
ファイル: DossierEditeur.cpp プロジェクト: atchandj/LO21
void DossierEditeur::ajouterInscription()
{
    try
    {
        QDialog* window = new QDialog(this);
        QGridLayout* lay = new QGridLayout;
        QPushButton* ok = new QPushButton("Ok");
        QComboBox *ListeUV= new QComboBox(this);
        QComboBox *ListeCursus= new QComboBox(this);
        QComboBox *ListeResultat= new QComboBox(this);
        QComboBox *ListeSaison= new QComboBox(this);
        QLineEdit *Annee= new QLineEdit(this);
        QLabel* UVLabel= new QLabel("UV : ",this);
        QLabel* cursusLabel= new QLabel("Cursus : ",this);
        QLabel* resultatLabel= new QLabel("Note : ",this);
        QLabel* saisonLabel= new QLabel("Saison : ",this);
        QLabel* anneeLabel = new QLabel("Année : ",this);
        window->setFixedSize(300, 400);

        UV** uvs = UVManager::getInstance().getUVs();
        for(unsigned int i=0;i<UVManager::getInstance().getNbUV(); i++)
        {
            ListeUV->addItem(uvs[i]->getCode());
        }


        for(Note n = first; n <= last; n = Note(n+1))
            ListeResultat->addItem(NoteToString(n));

        for(int i = 0; i < FormationManager::getInstance().getTaille(); i++)
            ListeCursus->addItem(FormationManager::getInstance().getElement(i).getCode());
        ListeSaison->addItem("Automne");
        ListeSaison->addItem("Printemps");

        lay->addWidget(UVLabel,0,0);
        lay->addWidget(cursusLabel,1,0);
        lay->addWidget(resultatLabel,2,0);
        lay->addWidget(saisonLabel,3,0);
        lay->addWidget(anneeLabel,4,0);
        lay->addWidget(ListeUV,0,1);
        lay->addWidget(ListeCursus,1,1);
        lay->addWidget(ListeResultat,2,1);
        lay->addWidget(ListeSaison,3,1);
        lay->addWidget(Annee,4,1);
        lay->addWidget(ok,5,1,Qt::AlignHCenter);

        window->setLayout(lay);

        connect(ok,SIGNAL(clicked()),window,SLOT(accept()));
        window->exec();

        if(window->result())
        {
            if(Annee->text().isEmpty())
                throw UTProfilerException("Ne laissez pas l'année vide !");

            UV& uv = UVManager::getInstance().getUV(ListeUV->currentText());
            Semestre s(StringToSaison(ListeSaison->currentText()),Annee->text().toUInt());
            Dossier::getInstance().ajouterInscription(uv,StringToNote(ListeResultat->currentText()),s,ListeCursus->currentText());
            QMessageBox::information(this,"Ajout d'une inscription", QString("Ajout de la catégorie ")+ListeUV->currentText()+" réussie.");
            dossier->setRowCount(Dossier::getInstance().getTaille());

            QTableWidgetItem *monItem = new QTableWidgetItem(ListeUV->currentText());
            dossier->setItem(Dossier::getInstance().getTaille() -1,0,monItem);

            monItem = new QTableWidgetItem(s.FormeContracte());
            dossier->setItem(Dossier::getInstance().getTaille() -1,1,monItem);

            monItem = new QTableWidgetItem(ListeResultat->currentText());
            dossier->setItem(Dossier::getInstance().getTaille() -1,2,monItem);

            monItem = new QTableWidgetItem(ListeCursus->currentText());
            dossier->setItem(Dossier::getInstance().getTaille() -1,3,monItem);
        }
    }
    catch(UTProfilerException& e)
    {
        QMessageBox::warning(this, "Ajout d'inscription", e.getInfo());
    }
}
コード例 #10
0
/*!
 * \brief Sauvegarde les dossiers en mémoire dans le fichier dossiers.xml
 */
void DossierManager::save(){

    file=QDir::currentPath()+"/dossiers.xml";
    try{
    QFile newfile(file);
    if (!newfile.open(QIODevice::WriteOnly | QIODevice::Text)) throw UTProfilerException(QString("erreur ouverture fichier xml"));
    QXmlStreamWriter stream(&newfile);
    stream.setAutoFormatting(true);
    stream.writeStartDocument();
    stream.writeStartElement("dossiers");

    for(unsigned int i=0; i<nbDos; i++){
        stream.writeStartElement("dossier");

        QString n; n.setNum(tabDossiers[i]->getNumero());

        stream.writeTextElement("numero",n);
        stream.writeTextElement("nom",tabDossiers[i]->getNom());
        stream.writeTextElement("prenom",tabDossiers[i]->getPrenom());
        stream.writeTextElement("formation",tabDossiers[i]->getFormation());
        stream.writeTextElement("filiere",tabDossiers[i]->getFiliere());
        stream.writeTextElement("semestre",QString::number(tabDossiers[i]->getNumSemestre()));

        //ecriture des UV

        unsigned int j=0;
        stream.writeStartElement("uvs");
        for(QMap<QString,Note>::iterator it=tabDossiers[i]->getQmapIteratorUVbegin();it!=tabDossiers[i]->getQmapIteratorUVend(); it++)
        {
            stream.writeTextElement("uv",it.key());
            //ecriture du resultat correspondant
            stream.writeTextElement("result", Note2String(it.value()));
            j++;
        }

        stream.writeEndElement();


        //ecriture des equivalences

        unsigned int k=0;
        Equivalences** tab=tabDossiers[i]->getEquivalences();

        stream.writeStartElement("equivalences");

        while (tab[k]!=0) {
            stream.writeStartElement("equivalence");
            stream.writeTextElement("type", tab[k]->getType());
            QString n; n.setNum(tab[k]->getNbCredits());
            stream.writeTextElement("credits", n);
            stream.writeTextElement("description", tab[k]->getDescription());

            stream.writeEndElement();
            k++;
        }
        stream.writeEndElement();

        stream.writeStartElement("souhaits");
        if(tabDossiers[i]->Souhaits!=0)
        {
            stream.writeTextElement("dossier",QString::number(tabDossiers[i]->getNumero()));
            stream.writeStartElement("exigees");
            for(QSet<QString>::iterator it=tabDossiers[i]->Souhaits->exigences.begin();it!=tabDossiers[i]->Souhaits->exigences.end();it++)
            {
                stream.writeTextElement("uv",*it);
            }
            stream.writeEndElement();
            stream.writeStartElement("preferees");
            for(QSet<QString>::iterator it=tabDossiers[i]->Souhaits->preferences.begin();it!=tabDossiers[i]->Souhaits->preferences.end();it++)
            {
                stream.writeTextElement("uv",*it);
            }
            stream.writeEndElement();
            stream.writeStartElement("rejetees");
            for(QSet<QString>::iterator it=tabDossiers[i]->Souhaits->rejets.begin();it!=tabDossiers[i]->Souhaits->rejets.end();it++)
            {
                stream.writeTextElement("uv",*it);
            }
            stream.writeEndElement();
        }
        stream.writeEndElement();

        stream.writeEndElement();
    }
    stream.writeEndElement();
    stream.writeEndDocument();

    newfile.close();
    }
    catch(UTProfilerException& e){QMessageBox::warning(0,"Erreur",e.getInfo());}
}
コード例 #11
0
/*!
 * \brief Récupère les dossiers sauvegardés dans le fichiers dossiers.xml et les charge en mémoire.
 */
void DossierManager::load()
{
    try{
    file=QDir::currentPath()+"/dossiers.xml";
    QFile f(file);
    if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) {throw UTProfilerException("Erreur ouverture fichier cursus");}
    QXmlStreamReader xml(&f);
    while(!xml.atEnd() && !xml.hasError()) {
        QXmlStreamReader::TokenType token = xml.readNext();
        if(token == QXmlStreamReader::StartDocument) continue;
        if(token == QXmlStreamReader::StartElement) {
            if(xml.name() == "dossiers") continue;
            if(xml.name() == "dossier") {
                unsigned int numero;
                QString nom;
                QString prenom;
                QString formation;
                QString filiere;
                unsigned int numSemestre;
                QStringList listUV;
                QStringList listResult;

                //pour les equivalences :

                unsigned int credits= 6;
                QString description="lala";//valeur pour test du update : fonctionne
                QString type="Semestre" ;
                unsigned int nb=0;
                Equivalences ** tab=new Equivalences*[5];
                for (unsigned int j=0; j<5; j++) tab[j]=0;

                //pour les souhaits

                QSet<QString> exigees;
                QSet<QString> preferees;
                QSet<QString> rejetees;

                xml.readNext();
                while(!(xml.tokenType() == QXmlStreamReader::EndElement && xml.name() == "dossier")) {
                    if(xml.tokenType() == QXmlStreamReader::StartElement) {
                        if(xml.name() == "numero") {
                            xml.readNext(); numero=xml.text().toString().toUInt();
                        }
                        if(xml.name() == "nom") {
                            xml.readNext(); nom=xml.text().toString();
                        }
                        if(xml.name() == "prenom") {
                            xml.readNext(); prenom=xml.text().toString();
                        }
                        if(xml.name() == "formation") {
                            xml.readNext(); formation=xml.text().toString();
                        }
                        if(xml.name() == "filiere") {
                            xml.readNext(); filiere=xml.text().toString();
                        }
                        if(xml.name() == "semestre") {
                            xml.readNext(); numSemestre=xml.text().toUInt();
                        }

                        if(xml.name() == "uvs")
                        {
                            unsigned int nbUVs=0;
                            xml.readNext();
                            while(!(xml.tokenType()==QXmlStreamReader::EndElement && xml.name()=="uvs"))
                            {
                                if(xml.tokenType()==QXmlStreamReader::StartElement && xml.name()=="uv")
                                {
                                    nbUVs++;
                                    xml.readNext();
                                    listUV<<xml.text().toString();
                                }

                                if(xml.tokenType()==QXmlStreamReader::StartElement && xml.name()=="result")
                                {
                                    xml.readNext();
                                    listResult<<xml.text().toString();
                                }

                                xml.readNext();
                            }

                            ajouterDossier(numero,nom, prenom, formation, filiere, numSemestre);
                        }//fin if pour uv

                        if(xml.name() == "equivalences")
                        {
                            while(!(xml.tokenType()==QXmlStreamReader::EndElement && xml.name()=="equivalences"))
                            {
                                if(xml.name() == "equivalence") {
                                    xml.readNext();
                                    while(!(xml.tokenType()==QXmlStreamReader::EndElement && xml.name()=="equivalence"))
                                    {
                                        if(xml.tokenType()==QXmlStreamReader::StartElement && xml.name()=="type")
                                        {
                                            xml.readNext();
                                            type=xml.text().toString();
                                        }

                                        if(xml.tokenType()==QXmlStreamReader::StartElement && xml.name()=="credits")
                                        {
                                            xml.readNext();
                                            credits=xml.text().toUInt();
                                        }

                                        if(xml.tokenType()==QXmlStreamReader::StartElement && xml.name()=="description")
                                        {
                                            xml.readNext();
                                            description=xml.text().toString();
                                        }
                                        xml.readNext();
                                    }
                                    tab[nb]=new Equivalences(type, credits, description);
                                    nb++;
                                }
                                xml.readNext();
                            }
                        }

                        if(xml.name()=="souhaits")
                        {
                            qDebug()<<"Chargement souhaits";
                            while(!(xml.tokenType()==QXmlStreamReader::EndElement && xml.name()=="souhaits"))
                            {
                                if(xml.name()=="exigees")
                                {
                                    xml.readNext();
                                    while(!(xml.tokenType()==QXmlStreamReader::EndElement && xml.name()=="exigees"))
                                    {
                                        if(xml.name()=="uv")
                                        {
                                            xml.readNext();
                                            exigees.insert(xml.text().toString());
                                            xml.readNext();
                                        }
                                        xml.readNext();
                                    }
                                }

                                if(xml.name()=="preferees")
                                {
                                    xml.readNext();
                                    while(!(xml.tokenType()==QXmlStreamReader::EndElement && xml.name()=="preferees"))
                                    {
                                        if(xml.name()=="uv")
                                        {
                                            xml.readNext();
                                            preferees.insert(xml.text().toString());
                                            xml.readNext();
                                        }
                                        xml.readNext();
                                    }
                                }

                                if(xml.name()=="rejetees")
                                {
                                    xml.readNext();
                                    while(!(xml.tokenType()==QXmlStreamReader::EndElement && xml.name()=="rejetees"))
                                    {
                                        if(xml.name()=="uv")
                                        {
                                            xml.readNext();
                                            rejetees.insert(xml.text().toString());
                                            xml.readNext();
                                        }
                                        xml.readNext();
                                    }
                                }

                                xml.readNext();
                            }
                        }

                    }
                    xml.readNext();
                }

                Dossier* d=trouverDossier(numero);
                if(!listUV.empty())
                {
                    visiteur2* v=new visiteur2(numero,listUV,listResult);
                    v->visitUVmanager();
                    this->accept(v);
                }
                d->setNbEquivalences(nb);
                d->setEquivalences(tab);
                tab=d->getEquivalences();

                souhaits* newsouhait=new souhaits(d,exigees,preferees,rejetees);
                d->setSouhaits(newsouhait);
            }
        }
    }
    if(xml.hasError()) {
        throw UTProfilerException("Erreur lecteur fichier dossier, parser xml");
    }
    xml.clear();
    }
    catch(UTProfilerException& e){QMessageBox::warning(0,"Erreur",e.getInfo());}
}
コード例 #12
0
void UVEditorController::on_UVTableView_doubleClicked(const QModelIndex &index)
{
    if(index.column() == 0){
        UTProfilerException(uiUVEditor->exceptionLabel_main, "UV code isn't editable !");
    }
}
コード例 #13
0
void UVEditorController::uvToUpdate_dataChanged(QModelIndex x ,QModelIndex y){
    const std::vector<UV*>* uvs = uv_accessDB->getAll();
    bool modified;

    // column 0 : code isn't modifiable
    if(x.column() == 1){
        QString title = x.data().toString();
        if(title.size() <= 50){
            modified = true;
        }
        else
            UTProfilerException(uiUVEditor->exceptionLabel_main, "Maximum length is 50 characters.");
    }
    else if(x.column() == 2){
        QString descr = x.data().toString();
        if(descr.size() <= 500){
            modified = true;
        }
        else
            UTProfilerException(uiUVEditor->exceptionLabel_main, "Maximum length is 500 characters.");
    }
    else if(x.column() == 3){
        bool ok;
        int nbCredits = x.data().toString().toInt(&ok,10);
        if(ok && nbCredits <= 60){
            modified = true;
        }
        else
            UTProfilerException(uiUVEditor->exceptionLabel_main, "Maximum credits for one UV is 60.");
    }
    else if(x.column() == 4){
        std::string category = x.data().toString().toStdString();
        // get category
        int i=-1;
        while(category != CategoryNames[++i] && i<=3);
        if(i<=3){
            modified = true;
        }
        else
            UTProfilerException(uiUVEditor->exceptionLabel_main, "Categories are CS, TM, TSH or SP.");
    }

    if(!modified){
        QObject::disconnect(uv_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(uvToUpdate_dataChanged(QModelIndex,QModelIndex)) );

        if(x.row() < uvs->size()){ // existing UV in DB
            uv_model->item(x.row(), 0)->setText(uvs->at(x.row())->getCode().c_str());
            uv_model->item(x.row(), 1)->setText(uvs->at(x.row())->getTitle().c_str());
            uv_model->item(x.row(), 2)->setText(uvs->at(x.row())->getDescription().c_str());
            uv_model->item(x.row(), 3)->setText(QString::number(uvs->at(x.row())->getNbCredits()));
            uv_model->item(x.row(), 4)->setText(CategoryNames[uvs->at(x.row())->getCategory()]);
        }
        else{ // New UV in DB
            uv_model->item(x.row(), 0)->setText(uvs->at(x.row()-uvs->size())->getCode().c_str());
            uv_model->item(x.row(), 1)->setText(uvs->at(x.row()-uvs->size())->getTitle().c_str());
            uv_model->item(x.row(), 2)->setText(uvs->at(x.row()-uvs->size())->getDescription().c_str());
            uv_model->item(x.row(), 3)->setText(QString::number(uvs->at(x.row()-uvs->size())->getNbCredits()));
            uv_model->item(x.row(), 4)->setText(CategoryNames[uvs->at(x.row()-uvs->size())->getCategory()]);
        }

        QObject::connect(uv_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(uvToUpdate_dataChanged(QModelIndex,QModelIndex)));
    }
    else{
        std::string category = uv_model->item(x.row(), 4)->text().toStdString();
        int i=-1;
        while(category != CategoryNames[++i] && i<=3);
        Category cat = static_cast<Category>(i);

        // Is the UV already modified ?
        std::vector<UV>::iterator it;
        for(it = modifiedUVs->begin(); it != modifiedUVs->end() && it->getCode() != uv_model->item(x.row(), 0)->text().toStdString(); ++it){
        }
        if(it == modifiedUVs->end())
            modifiedUVs->push_back(UV(uv_model->item(x.row(), 0)->text().toStdString(), uv_model->item(x.row(), 1)->text().toStdString(), uv_model->item(x.row(), 2)->text().toStdString(), uv_model->item(x.row(), 3)->text().toInt(), cat ));
        else
        {
            it->setTitle(uv_model->item(x.row(), 1)->text().toStdString());
            it->setDescription(uv_model->item(x.row(), 2)->text().toStdString());
            it->setNbCredits(uv_model->item(x.row(), 3)->text().toInt());
            it->setCategory(uv_model->item(x.row(), 4)->text().toStdString());
        }
    }


}
コード例 #14
0
void XmlDataPersistance::loadStudents(const QString &studentsFileName)
{
    QFile file(studentsFileName);
    if(!file.open(QIODevice::ReadOnly))
        throw UTProfilerException("Failed to open " + studentsFileName + " in UVManager::loadStudents.");

    QDomDocument dom;
    dom.setContent(&file);

    QDomElement students = dom.documentElement();

    for(QDomElement studentElement = students.firstChildElement("etudiant"); !studentElement.isNull(); studentElement = studentElement.nextSiblingElement("etudiant"))
    {
        Student* student = new Student;
        student->setLogin(studentElement.firstChildElement("login").text());
        student->setFirstName(studentElement.firstChildElement("prenom").text());
        student->setLastName(studentElement.firstChildElement("nom").text());
        addDegrees(student, studentElement); // load degrees
        addSemesters(student, studentElement); // load semsters and uvs

        for(QDomElement eqElem = studentElement.firstChildElement("equivalence");!eqElem.isNull();eqElem = eqElem.nextSiblingElement("equivalence"))
        {
            student->setEquivalence(eqElem.attribute("categorie"),eqElem.text().toUInt());
        }

        students_.push_back(student);

        // Previsions
        for(QDomElement expElem = studentElement.firstChildElement("prevision"); !expElem.isNull(); expElem = expElem.nextSiblingElement("prevision"))
        {
            Expectation* exp = new Expectation;

            exp->setName(expElem.firstChildElement("nom").text());

            student->addExp(exp);

            for(QDomElement degreeElement = expElem.firstChildElement("cursus"); !degreeElement.isNull(); degreeElement = degreeElement.nextSiblingElement("cursus"))
            {
                for(int i = 0; i < degrees_.size(); i++)
                {
                    if(degrees_.at(i)->title() == degreeElement.text())
                        exp->addDegree(degrees_.at(i));
                }
            }

            for(QDomElement uvElement = expElem.firstChildElement("uvRejete"); !uvElement.isNull(); uvElement = uvElement.nextSiblingElement("uvRejete"))
            {
                const Uv *uv = uvFromCode(uvElement.text());
                if(uv)
                    exp->addRejectedUv(uv);
            }

            for(QDomElement uvElement = expElem.firstChildElement("uvRequise"); !uvElement.isNull(); uvElement = uvElement.nextSiblingElement("uvRequise"))
            {
                const Uv *uv = uvFromCode(uvElement.text());
                if(uv)
                    exp->addRequiredUv(uv);
            }

            for(QDomElement semesterElement = expElem.firstChildElement("semestre"); !semesterElement.isNull(); semesterElement = semesterElement.nextSiblingElement("semestre"))
            {
                Semester *semester = new Semester();
                semester->setTitle(semesterElement.firstChildElement("titre").text());

                for(QDomElement uvElement = semesterElement.firstChildElement("uv"); !uvElement.isNull(); uvElement = uvElement.nextSiblingElement("uv"))
                {
                    semester->addUv(uvElement.text(), Uv::stringToGrade("Undefined"));
                }
                exp->addSemester(semester);
            }
        }
    }

    file.close();
}