Back to index

fet  5.18.0
Public Member Functions | Public Attributes
Activity Class Reference

This class represents an activity. More...

#include <activity.h>

List of all members.

Public Member Functions

bool operator== (Activity &a)
 If the teachers, subject, activity tag, students, duration are identical and the activity group id of both of them is 0 or of both of them is != 0, returns true.
 Activity ()
 Simple constructor, used only indirectly by the static variable "Activity internalActivitiesList[MAX_ACTIVITIES]".
 Activity (Rules &r, int _id, int _activityGroupId, const QStringList &_teachersNames, const QString &_subjectName, const QStringList &_activityTagsNames, const QStringList &_studentsNames, int _duration, int _totalDuration, bool _active, bool _computeNTotalStudents, int _nTotalStudents)
 Complete constructor.
 Activity (Rules &r, int _id, int _activityGroupId, const QStringList &_teachersNames, const QString &_subjectName, const QStringList &_activityTagsNames, const QStringList &_studentsNames, int _duration, int _totalDuration, bool _active, bool _computeNTotalStudents, int _nTotalStudents, int _computedNumberOfStudents)
bool searchTeacher (const QString &teacherName)
bool removeTeacher (const QString &teacherName)
 Removes this teacher from the list of teachers.
void renameTeacher (const QString &initialTeacherName, const QString &finalTeacherName)
 Renames this teacher in the list of teachers.
bool searchStudents (const QString &studentsName)
bool removeStudents (Rules &r, const QString &studentsName, int nStudents)
 Removes this students set from the list of students.
void renameStudents (Rules &r, const QString &initialStudentsName, const QString &finalStudentsName, int initialNumberOfStudents, int finalNumberOfStudents)
 Renames this students set in the list of students and possibly modifies the number of students for the activity, if initialNumberOfStudents!=finalNumberOfStudents.
void computeInternalStructure (Rules &r)
 Computes the internal structure.
QString getXmlDescription (Rules &r)
 Returns a representation of this activity (xml format).
QString getDescription (Rules &r)
 Returns a representation of this activity.
QString getDetailedDescription (Rules &r)
 Returns a representation of this activity (more detailed).
QString getDetailedDescriptionWithConstraints (Rules &r)
 Returns a representation of this activity (detailed), together with the constraints related to this activity.
bool isSplit ()
 Returns true if this activity is split into more lessons per week.
bool representsComponentNumber (int compNumber)

Public Attributes

QString comments
QStringList teachersNames
 The teachers' names.
QString subjectName
 The name of the subject.
QStringList activityTagsNames
 The name of the activity tag.
QStringList studentsNames
 The names of the sets of students involved in this activity (years, groups or subgroups).
int duration
 The duration, in hours.
int totalDuration
 The parity: weekly (PARITY_WEEKLY) or once at two weeks (PARITY_FORTNIGHTLY).
int id
 A unique ID for any activity.
int activityGroupId
 The activities generated from a split activity have the same activityGroupId.
int nTotalStudents
 The number of students who are attending this activity.
bool computeNTotalStudents
 If true, we will have to compute the number of total students from the involved students sets.
bool active
 True if this activity is active, that is it will be taken into consideration when generating the timetable.
QList< int > iTeachersList
 The number of teachers who are teaching this activity.
int subjectIndex
 The index of the subject.
QSet< int > iActivityTagsSet
 The index of the activity tag.
QList< int > iSubgroupsList
 The number of subgroups implied in this activity.

Detailed Description

This class represents an activity.

An activity is a certain course (lecture), taught by a certain teacher (or more), to a certain year (or group, or subgroup) of students (or more).

Definition at line 50 of file activity.h.


Constructor & Destructor Documentation

Simple constructor, used only indirectly by the static variable "Activity internalActivitiesList[MAX_ACTIVITIES]".

Any other use of this function should be avoided.

Definition at line 29 of file activity.cpp.

{
       comments=QString("");
}
Activity::Activity ( Rules r,
int  _id,
int  _activityGroupId,
const QStringList &  _teachersNames,
const QString &  _subjectName,
const QStringList &  _activityTagsNames,
const QStringList &  _studentsNames,
int  _duration,
int  _totalDuration,
bool  _active,
bool  _computeNTotalStudents,
int  _nTotalStudents 
)

Complete constructor.

If _totalDuration!=duration, then this activity is a part of a bigger (split) activity.

As a must, for non-split activities, _activityGroupId==0. For the split ones, it is >0

Definition at line 34 of file activity.cpp.

{
       comments=QString("");

       this->id=_id;
       this->activityGroupId=_activityGroupId;
       this->teachersNames = _teachersNames;
       this->subjectName = _subjectName;
       this->activityTagsNames = _activityTagsNames;
       this->studentsNames = _studentsNames;
       this->duration=_duration;
       this->totalDuration=_totalDuration;
       this->active=_active;
       this->computeNTotalStudents=_computeNTotalStudents;
       
       if(_computeNTotalStudents==true){  
              this->nTotalStudents=0;
              for(QStringList::Iterator it=this->studentsNames.begin(); it!=this->studentsNames.end(); it++){
                     StudentsSet* ss=r.searchStudentsSet(*it);
                     this->nTotalStudents += ss->numberOfStudents;
              }
       }
       else{
              assert(_nTotalStudents>=0);
              this->nTotalStudents=_nTotalStudents;
       }
}

Here is the call graph for this function:

Activity::Activity ( Rules r,
int  _id,
int  _activityGroupId,
const QStringList &  _teachersNames,
const QString &  _subjectName,
const QStringList &  _activityTagsNames,
const QStringList &  _studentsNames,
int  _duration,
int  _totalDuration,
bool  _active,
bool  _computeNTotalStudents,
int  _nTotalStudents,
int  _computedNumberOfStudents 
)

Definition at line 74 of file activity.cpp.

{
       Q_UNUSED(r);
       Q_UNUSED(_nTotalStudents);

       comments=QString("");

       this->id=_id;
       this->activityGroupId=_activityGroupId;
       this->teachersNames = _teachersNames;
       this->subjectName = _subjectName;
       this->activityTagsNames = _activityTagsNames;
       this->studentsNames = _studentsNames;
       this->duration=_duration;
       this->totalDuration=_totalDuration;
       this->active=_active;
       this->computeNTotalStudents=_computeNTotalStudents;
       
       assert(_computeNTotalStudents);
       this->nTotalStudents=_computedNumberOfStudents;
}

Member Function Documentation

Computes the internal structure.

Definition at line 205 of file activity.cpp.

{
       //the internal subgroups list must be computed before entering here.

       //teachers
       //this->nTeachers=0;
       this->iTeachersList.clear();
       for(QStringList::Iterator it=this->teachersNames.begin(); it!=this->teachersNames.end(); it++){
              int tmp;
              for(tmp=0; tmp<r.nInternalTeachers; tmp++){
                     if(r.internalTeachersList[tmp]->name == (*it))
                            break;
              }
              assert(tmp < r.nInternalTeachers);
              //assert(this->nTeachers<MAX_TEACHERS_PER_ACTIVITY);
              //this->teachers[this->nTeachers++]=tmp;
              this->iTeachersList.append(tmp);
       }

       //subjects
       this->subjectIndex = r.searchSubject(this->subjectName);
       assert(this->subjectIndex>=0);

       //activity tags
       this->iActivityTagsSet.clear();
       foreach(QString tag, this->activityTagsNames){
              assert(tag!="");
              int index=r.searchActivityTag(tag);
              assert(index>=0);
              this->iActivityTagsSet.insert(index);
       }
       //this->activityTagIndex = r.searchActivityTag(this->activityTagName);

       //students    
       //this->nSubgroups=0;
       this->iSubgroupsList.clear();
       for(QStringList::Iterator it=this->studentsNames.begin(); it!=this->studentsNames.end(); it++){
              StudentsSet* ss=r.searchAugmentedStudentsSet(*it);
              assert(ss);
              if(ss->type==STUDENTS_SUBGROUP){
                     int tmp;
                     /*for(tmp=0; tmp<r.nInternalSubgroups; tmp++)
                            if(r.internalSubgroupsList[tmp]->name == ss->name)
                                   break;*/
                     tmp=((StudentsSubgroup*)ss)->indexInInternalSubgroupsList;
                     assert(tmp>=0);
                     assert(tmp<r.nInternalSubgroups);
                     //assert(this->nSubgroups<MAX_SUBGROUPS_PER_ACTIVITY);
                     
                     bool duplicate=false;
                     if(this->iSubgroupsList.contains(tmp))
                     //for(int j=0; j<this->nSubgroups; j++)
                     //     if(this->subgroups[j]==tmp)
                                   duplicate=true;
                     if(duplicate){
                            /*QString s;
                            s=QString("Warning: activity with id=%1 contains duplicated subgroups. Automatically correcting...")
                                   .arg(this->id);
                            cout<<qPrintable(s)<<endl;*/
                     }
                     else
                            this->iSubgroupsList.append(tmp);
                            //this->subgroups[this->nSubgroups++]=tmp;
              }
              else if(ss->type==STUDENTS_GROUP){
                     StudentsGroup* stg=(StudentsGroup*)ss;
                     for(int k=0; k<stg->subgroupsList.size(); k++){
                            StudentsSubgroup* sts=stg->subgroupsList[k];
                            int tmp;
                            /*for(tmp=0; tmp<r.nInternalSubgroups; tmp++)
                                   if(r.internalSubgroupsList[tmp]->name == sts->name)
                                          break;*/
                            tmp=sts->indexInInternalSubgroupsList;
                            assert(tmp>=0);
                            assert(tmp<r.nInternalSubgroups);
                            //assert(this->nSubgroups<MAX_SUBGROUPS_PER_ACTIVITY);

                            bool duplicate=false;
                            if(this->iSubgroupsList.contains(tmp))
                            //for(int j=0; j<this->nSubgroups; j++)
                            //     if(this->subgroups[j]==tmp)
                                          duplicate=true;
                            if(duplicate){
                                   /*QString s;
                                   s=QString("Warning: activity with id=%1 contains duplicated subgroups. Automatically correcting...")
                                          .arg(this->id);
                                   cout<<qPrintable(s)<<endl;*/
                            }
                            else
                                   //this->subgroups[this->nSubgroups++]=tmp;
                                   this->iSubgroupsList.append(tmp);
                     }
              }
              else if(ss->type==STUDENTS_YEAR){
                     StudentsYear* sty=(StudentsYear*)ss;
                     for(int k=0; k<sty->groupsList.size(); k++){
                            StudentsGroup* stg=sty->groupsList[k];
                            for(int l=0; l<stg->subgroupsList.size(); l++){
                                   StudentsSubgroup* sts=stg->subgroupsList[l];
                                   int tmp;
                                   /*for(tmp=0; tmp<r.nInternalSubgroups; tmp++)
                                          if(r.internalSubgroupsList[tmp]->name == sts->name)
                                                 break;*/
                                   tmp=sts->indexInInternalSubgroupsList;
                                   assert(tmp>=0);
                                   assert(tmp<r.nInternalSubgroups);
                                   //assert(this->nSubgroups<MAX_SUBGROUPS_PER_ACTIVITY);

                                   bool duplicate=false;
                                   if(this->iSubgroupsList.contains(tmp))
                                   //for(int j=0; j<this->nSubgroups; j++)
                                   //     if(this->subgroups[j]==tmp)
                                                 duplicate=true;
                                   if(duplicate){
                                          /*QString s;
                                          s=QString("Warning: activity with id=%1 contains duplicated subgroups. Automatically correcting...")
                                                 .arg(this->id);
                                          cout<<qPrintable(s)<<endl;*/
                                   }
                                   else{
                                          //this->subgroups[this->nSubgroups++]=tmp;
                                          this->iSubgroupsList.append(tmp);
                                   }
                            }
                     }
              }
              else
                     assert(0);
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:

QString Activity::getDescription ( Rules r)

Returns a representation of this activity.

Definition at line 375 of file activity.cpp.

{
       const int INDENT=4;

       Q_UNUSED(r);
       
       bool _indent;
       if(this->isSplit() && this->id!=this->activityGroupId)
              _indent=true;
       else
              _indent=false;
              
       bool indentRepr;
       if(this->isSplit() && this->id==this->activityGroupId)
              indentRepr=true;
       else
              indentRepr=false;
              
       QString _teachers="";
       if(teachersNames.count()==0)
              _teachers=tr("no teachers");
       else
              _teachers=this->teachersNames.join(",");

       QString _subject=this->subjectName;
       
       QString _activityTags=this->activityTagsNames.join(",");

       QString _students="";
       if(studentsNames.count()==0)
              _students=tr("no students");
       else
              _students=this->studentsNames.join(",");

       QString _id;
       _id = CustomFETString::number(id);

       QString _agid="";
       if(this->isSplit())
              _agid = CustomFETString::number(this->activityGroupId);

       QString _duration=CustomFETString::number(this->duration);
       
       QString _totalDuration="";
       if(this->isSplit())
              _totalDuration = CustomFETString::number(this->totalDuration);

       QString _active;
       if(this->active==true)
              _active="";
       else
              _active="X";

       QString _nstudents="";
       if(this->computeNTotalStudents==false)
              _nstudents=CustomFETString::number(this->nTotalStudents);

       QString s="";
       if(_indent)
              s+=QString(INDENT, ' ');
              
       s+=_id;
       s+=" - ";

       if(indentRepr)
              s+=QString(INDENT, ' ');
              
       if(_active!=""){
              s+=_active;
              s+=" - ";
       }
       
       s+=_duration;
       if(this->isSplit()){
              s+="/";
              s+=_totalDuration;
       }
       s+=" - ";
       
       s+=_teachers;
       s+=" - ";
       s+=_subject;
       s+=" - ";
       if(_activityTags!=""){
              s+=_activityTags;
              s+=" - ";
       }
       s+=_students;

       if(_nstudents!=""){
              s+=" - ";
              s+=_nstudents;
       }
       
       if(!comments.isEmpty()){
              s+=" - ";
              s+=comments;
       }

       return s;
}

Here is the call graph for this function:

Returns a representation of this activity (more detailed).

Definition at line 478 of file activity.cpp.

{
       Q_UNUSED(r);

       QString s;

       s=tr("Activity:");
       s+="\n";

       //Id, AGId
       s += tr("Id=%1").arg(CustomFETString::number(id));
       s+="\n";
       if(this->isSplit()){
              s += tr("Activity group id=%1").arg(CustomFETString::number(this->activityGroupId));
              s+="\n";
       }

       //Dur, TD
       s+=tr("Duration=%1").arg(CustomFETString::number(this->duration));
       s+="\n";
       if(this->isSplit()){
              s += tr("Total duration=%1").arg(CustomFETString::number(this->totalDuration));
              s+="\n";
       }
       
       if(teachersNames.count()==0){
              s+=tr("No teachers for this activity");
              s+="\n";
       }
       else
              for(QStringList::Iterator it=this->teachersNames.begin(); it!=this->teachersNames.end(); it++){
                     s+=tr("Teacher=%1").arg(*it);
                     s+="\n";
              }

       s+=tr("Subject=%1").arg(this->subjectName);
       s+="\n";
       foreach(QString tag, this->activityTagsNames){
              assert(tag!="");
              s+=tr("Activity tag=%1").arg(tag);
              s+="\n";
       }

       if(studentsNames.count()==0){
              s+=tr("No students sets for this activity");
              s+="\n";
       }
       else
              for(QStringList::Iterator it=this->studentsNames.begin(); it!=this->studentsNames.end(); it++){
                     s += tr("Students=%1").arg(*it);
                     s+="\n";
              }
              
       if(this->computeNTotalStudents==true){
              /*int nStud=0;
              for(QStringList::Iterator it=this->studentsNames.begin(); it!=this->studentsNames.end(); it++){
                     StudentsSet* ss=r.searchStudentsSet(*it);
                     nStud += ss->numberOfStudents;
              }*/
              int nStud=this->nTotalStudents;
              s+=tr("Total number of students=%1").arg(nStud);
              s+="\n";
       }
       else{
              s+=tr("Total number of students=%1").arg(this->nTotalStudents);
              s+=" ("+tr("specified", "Specified means that the total number of students was specified separately for the activity")+")";
              s+="\n";
       }
       
       //Not active?
       QString activeYesNo;
       if(this->active==true)
              activeYesNo=tr("yes");
       else
              activeYesNo=tr("no");
       if(!active){
              s+=tr("Active=%1", "Represents a boolean value, if activity is active or not, %1 is yes or no").arg(activeYesNo);
              s+="\n";
       }

       //Has comments?
       if(!comments.isEmpty()){
              s+=tr("Comments=%1").arg(comments);
              s+="\n";
       }

       return s;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Returns a representation of this activity (detailed), together with the constraints related to this activity.

Definition at line 567 of file activity.cpp.

{
       QString s=this->getDetailedDescription(r);

       s+="--------------------------------------------------\n";
       s+=tr("Time constraints directly related to this activity:");
       s+="\n";
       for(int i=0; i<r.timeConstraintsList.size(); i++){
              TimeConstraint* c=r.timeConstraintsList[i];
              if(c->isRelatedToActivity(r, this)){
                     s+="\n";
                     s+=c->getDetailedDescription(r);
              }
       }

       s+="--------------------------------------------------\n";
       s+=tr("Space constraints directly related to this activity:");
       s+="\n";
       for(int i=0; i<r.spaceConstraintsList.size(); i++){
              SpaceConstraint* c=r.spaceConstraintsList[i];
              if(c->isRelatedToActivity(this)){
                     s+="\n";
                     s+=c->getDetailedDescription(r);
              }
       }
       s+="--------------------------------------------------\n";

       return s;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Returns a representation of this activity (xml format).

Definition at line 336 of file activity.cpp.

{
       Q_UNUSED(r);

       QString s="<Activity>\n";

       for(QStringList::Iterator it=this->teachersNames.begin(); it!=this->teachersNames.end(); it++)
              s+="   <Teacher>" + protect(*it) + "</Teacher>\n";

       s+="   <Subject>" + protect(this->subjectName) + "</Subject>\n";

       foreach(QString tag, this->activityTagsNames)
              s+="   <Activity_Tag>" + protect(tag) + "</Activity_Tag>\n";

       for(QStringList::Iterator it=this->studentsNames.begin(); it!=this->studentsNames.end(); it++)
              s+="   <Students>" + protect(*it) + "</Students>\n";

       s+="   <Duration>"+CustomFETString::number(this->duration)+"</Duration>\n";
       s+="   <Total_Duration>"+CustomFETString::number(this->totalDuration)+"</Total_Duration>\n";
       s+="   <Id>"+CustomFETString::number(this->id)+"</Id>\n";
       s+="   <Activity_Group_Id>"+CustomFETString::number(this->activityGroupId)+"</Activity_Group_Id>\n";

       if(this->computeNTotalStudents==false)
              s+="   <Number_Of_Students>"+CustomFETString::number(this->nTotalStudents)+"</Number_Of_Students>\n";

       s+="   <Active>";
       if(this->active==true)
              s+="true";
       else
              s+="false";
       s+="</Active>\n";

       s+="   <Comments>"+protect(comments)+"</Comments>\n";

       s+="</Activity>";

       return s;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Returns true if this activity is split into more lessons per week.

Definition at line 597 of file activity.cpp.

{
       return this->totalDuration != this->duration;
}

Here is the caller graph for this function:

bool Activity::operator== ( Activity a)

If the teachers, subject, activity tag, students, duration are identical and the activity group id of both of them is 0 or of both of them is != 0, returns true.

TODO: add a more intelligent comparison

Definition at line 109 of file activity.cpp.

{
       if(this->teachersNames != a.teachersNames)
              return false;
       if(this->subjectName != a.subjectName)
              return false;
       if(this->activityTagsNames != a.activityTagsNames)
              return false;
       if(this->studentsNames != a.studentsNames)
              return false;
       //if(this->duration != a.duration)
         //  return false;
       if((this->activityGroupId==0 && a.activityGroupId!=0) || (this->activityGroupId!=0 && a.activityGroupId==0))
              return false;
       return true;
}
bool Activity::removeStudents ( Rules r,
const QString &  studentsName,
int  nStudents 
)

Removes this students set from the list of students.

Definition at line 154 of file activity.cpp.

{
       Q_UNUSED(r);

       int t=this->studentsNames.removeAll(studentsName);

       if(t>0 && this->computeNTotalStudents==true){
              /*StudentsSet* s=r.searchStudentsSet(studentsName);
              assert(s!=NULL);
              this->nTotalStudents-=s->numberOfStudents;*/
              this->nTotalStudents-=nStudents;
              assert(this->nTotalStudents>=0);
       }
       
       return t>0;
}

Here is the caller graph for this function:

bool Activity::removeTeacher ( const QString &  teacherName)

Removes this teacher from the list of teachers.

Definition at line 131 of file activity.cpp.

{
       int t=this->teachersNames.removeAll(teacherName);
       
       return t>0;
}

Here is the caller graph for this function:

void Activity::renameStudents ( Rules r,
const QString &  initialStudentsName,
const QString &  finalStudentsName,
int  initialNumberOfStudents,
int  finalNumberOfStudents 
)

Renames this students set in the list of students and possibly modifies the number of students for the activity, if initialNumberOfStudents!=finalNumberOfStudents.

Definition at line 171 of file activity.cpp.

{
       Q_UNUSED(r);

       int t=0;
       for(QStringList::iterator it=this->studentsNames.begin(); it!=this->studentsNames.end(); it++)
              if((*it)==initialStudentsName){
                     /*if(this->computeNTotalStudents==true){
                            StudentsSet* s=r.searchStudentsSet(initialStudentsName);
                            assert(s!=NULL);
                            this->nTotalStudents-=s->numberOfStudents;
                            
                            StudentsSet* s2=r.searchStudentsSet(finalStudentsName);
                            assert(s2!=NULL);
                            this->nTotalStudents+=s2->numberOfStudents;
                            
                            assert(this->nTotalStudents>=0);
                     }*/
              
                     *it=finalStudentsName;
                     t++;
                     
                     if(this->computeNTotalStudents){
                            assert(initialNumberOfStudents>=0);
                            assert(finalNumberOfStudents>=0);
                     
                            nTotalStudents-=initialNumberOfStudents;
                            assert(nTotalStudents>=0);
                            nTotalStudents+=finalNumberOfStudents;
                     }
              }
       assert(t<=1);
}

Here is the caller graph for this function:

void Activity::renameTeacher ( const QString &  initialTeacherName,
const QString &  finalTeacherName 
)

Renames this teacher in the list of teachers.

Definition at line 138 of file activity.cpp.

{
       int t=0;
       for(QStringList::iterator it=this->teachersNames.begin(); it!=this->teachersNames.end(); it++)
              if((*it)==initialTeacherName){
                     *it=finalTeacherName;
                     t++;
              }
       assert(t<=1);
}
bool Activity::representsComponentNumber ( int  compNumber)

Definition at line 602 of file activity.cpp.

{
       if(this->activityGroupId==0)
              return index==1;
              //return false;
              
       //assert(this->activityGroupId>0);
       
       return index == (this->id - this->activityGroupId + 1);
}

Here is the caller graph for this function:

bool Activity::searchStudents ( const QString &  studentsName)

Definition at line 149 of file activity.cpp.

{
       return this->studentsNames.indexOf(studentsName)!=-1;
}
bool Activity::searchTeacher ( const QString &  teacherName)

Definition at line 126 of file activity.cpp.

{
       return this->teachersNames.indexOf(teacherName)!=-1;
}

Here is the caller graph for this function:


Member Data Documentation

True if this activity is active, that is it will be taken into consideration when generating the timetable.

Definition at line 125 of file activity.h.

The activities generated from a split activity have the same activityGroupId.

For non-split activities, activityGroupId==0

Definition at line 104 of file activity.h.

The name of the activity tag.

Definition at line 70 of file activity.h.

Definition at line 54 of file activity.h.

If true, we will have to compute the number of total students from the involved students sets.

If false, it means that nTotalStudents is given and must not be recalculated.

Definition at line 119 of file activity.h.

The duration, in hours.

Definition at line 80 of file activity.h.

The index of the activity tag.

Definition at line 155 of file activity.h.

A unique ID for any activity.

This is NOT the index (activities might be erased, but this ID remains the same).

Definition at line 98 of file activity.h.

The number of subgroups implied in this activity.

The indices of the subgroups implied in this activity.

Definition at line 167 of file activity.h.

The number of teachers who are teaching this activity.

The indices of the teachers who are teaching this activity.

Definition at line 145 of file activity.h.

The number of students who are attending this activity.

If computeNTotalStudentsFromSets is false, this number is given. If it is true, this number should be calculated from the sets involved.

Definition at line 112 of file activity.h.

The names of the sets of students involved in this activity (years, groups or subgroups).

Definition at line 75 of file activity.h.

The index of the subject.

Definition at line 150 of file activity.h.

The name of the subject.

Definition at line 64 of file activity.h.

The teachers' names.

Definition at line 59 of file activity.h.

The parity: weekly (PARITY_WEEKLY) or once at two weeks (PARITY_FORTNIGHTLY).

This value is used only for split activities (for high-schools). If totalDuration==duration, then this activity is not split. If totalDuration>duration, then this activity is split.

Definition at line 92 of file activity.h.


The documentation for this class was generated from the following files: