Revision 9c269b1f
Von Christian Ehringfeld vor mehr als 7 Jahren hinzugefügt
samples/example/models/pupil.h | ||
---|---|---|
|
||
class Pupil : public Person {
|
||
Q_OBJECT
|
||
EM_MACRO(Pupil)
|
||
Q_PROPERTY(QString legalGuardianNote READ getLegalGuardianNote WRITE
|
||
setLegalGuardianNote)
|
||
public:
|
samples/simple/address.cpp | ||
---|---|---|
#include "address.h"
|
||
#include "pupil.h"
|
||
|
||
Address::Address(QString label, QString street, QString postcode,
|
||
QString city) {
|
||
this->label = label;
|
||
this->street = street;
|
||
this->postcode = postcode;
|
||
this->city = city;
|
||
}
|
||
|
||
QString Address::getLabel() const {
|
||
return label;
|
||
}
|
||
|
||
void Address::setLabel(const QString &value) {
|
||
label = value;
|
||
}
|
||
|
||
QString Address::getStreet() const {
|
||
return street;
|
||
}
|
||
|
||
void Address::setStreet(const QString &value) {
|
||
street = value;
|
||
}
|
||
|
||
QString Address::getPostcode() const {
|
||
return postcode;
|
||
}
|
||
|
||
void Address::setPostcode(const QString &value) {
|
||
postcode = value;
|
||
}
|
||
|
||
QString Address::getCity() const {
|
||
return city;
|
||
}
|
||
|
||
void Address::setCity(const QString &value) {
|
||
city = value;
|
||
}
|
||
|
||
QList<QSharedPointer<Person> > Address::getPersons() const {
|
||
return persons;
|
||
}
|
||
|
||
void Address::setPersons(const QList<QSharedPointer<Person> > &value) {
|
||
persons = value;
|
||
}
|
||
|
||
const QHash<QString, CuteEntityManager::Relation> Address::getRelations()
|
||
const {
|
||
auto hash = Entity::getRelations();
|
||
hash.insert("persons", CuteEntityManager::Relation("persons",
|
||
RelationType::MANY_TO_MANY,
|
||
QString("addresses")));
|
||
return hash;
|
||
}
|
||
|
||
QList<QSharedPointer<Pupil> > Address::getPupils() const {
|
||
return pupils;
|
||
}
|
||
|
||
void Address::setPupils(const QList<QSharedPointer<Pupil> > &value) {
|
||
pupils = value;
|
||
}
|
||
|
||
|
samples/simple/address.h | ||
---|---|---|
#ifndef ADDRESS_H
|
||
#define ADDRESS_H
|
||
|
||
#include <QString>
|
||
#include <QHash>
|
||
#include "entity.h"
|
||
|
||
class Person;
|
||
class Relation;
|
||
class Pupil;
|
||
class Address: public CuteEntityManager::Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Address)
|
||
Q_PROPERTY(QString label READ getLabel WRITE setLabel)
|
||
Q_PROPERTY(QString street READ getStreet WRITE setStreet)
|
||
Q_PROPERTY(QString postcode READ getPostcode WRITE setPostcode)
|
||
Q_PROPERTY(QString city READ getCity WRITE setCity)
|
||
Q_PROPERTY(QList<QSharedPointer<Person>> persons READ
|
||
getPersons WRITE setPersons)
|
||
|
||
public:
|
||
Q_INVOKABLE Address() {}
|
||
Address(QString label, QString street, QString postcode, QString city);
|
||
|
||
QString getLabel() const;
|
||
void setLabel(const QString &value);
|
||
|
||
QString getStreet() const;
|
||
void setStreet(const QString &value);
|
||
|
||
QString getPostcode() const;
|
||
void setPostcode(const QString &value);
|
||
|
||
QString getCity() const;
|
||
void setCity(const QString &value);
|
||
|
||
QList<QSharedPointer<Person> > getPersons() const;
|
||
void setPersons(const QList<QSharedPointer<Person> > &value);
|
||
|
||
const QHash<QString, CuteEntityManager::Relation> getRelations() const override;
|
||
|
||
QList<QSharedPointer<Pupil> > getPupils() const;
|
||
void setPupils(const QList<QSharedPointer<Pupil> > &value);
|
||
|
||
protected:
|
||
QString label;
|
||
QString street;
|
||
QString postcode;
|
||
QString city;
|
||
QList<QSharedPointer<Person>> persons;
|
||
QList<QSharedPointer<Pupil>> pupils;
|
||
};
|
||
|
||
#endif // ADDRESS_H
|
samples/simple/contact.cpp | ||
---|---|---|
#include "contact.h"
|
||
#include "pupil.h"
|
||
|
||
Contact::Contact(QString label, Category category, QString content) {
|
||
this->label = label;
|
||
this->category = category;
|
||
this->content = content;
|
||
}
|
||
|
||
const QHash<QString, CuteEntityManager::Relation> Contact::getRelations()
|
||
const {
|
||
auto hash = Entity::getRelations();
|
||
hash.insert("persons", CuteEntityManager::Relation("persons",
|
||
RelationType::MANY_TO_MANY,
|
||
QString("contacts")));
|
||
return hash;
|
||
}
|
||
|
||
QString Contact::getContent() const {
|
||
return content;
|
||
}
|
||
|
||
void Contact::setContent(const QString &value) {
|
||
content = value;
|
||
}
|
||
|
||
QString Contact::getLabel() const {
|
||
return label;
|
||
}
|
||
|
||
void Contact::setLabel(const QString &value) {
|
||
label = value;
|
||
}
|
||
Contact::Category Contact::getCategory() const {
|
||
return category;
|
||
}
|
||
|
||
void Contact::setCategory(const Category &value) {
|
||
category = value;
|
||
}
|
||
|
||
QList<QSharedPointer<Person> > Contact::getPersons() const {
|
||
return persons;
|
||
}
|
||
|
||
void Contact::setPersons(const QList<QSharedPointer<Person> > &value) {
|
||
persons = value;
|
||
}
|
||
|
||
QList<QSharedPointer<Pupil> > Contact::getPupils() const {
|
||
return pupils;
|
||
}
|
||
|
||
void Contact::setPupils(const QList<QSharedPointer<Pupil> > &value) {
|
||
pupils = value;
|
||
}
|
samples/simple/contact.h | ||
---|---|---|
#ifndef CONTACT_H
|
||
#define CONTACT_H
|
||
|
||
#include <QString>
|
||
#include "entity.h"
|
||
|
||
class Relation;
|
||
class Person;
|
||
class Pupil;
|
||
class Contact: public CuteEntityManager::Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Contact)
|
||
Q_PROPERTY(QString content READ getContent WRITE setContent)
|
||
Q_PROPERTY(Category category READ getCategory WRITE setCategory)
|
||
Q_PROPERTY(QString label READ getLabel WRITE setLabel)
|
||
Q_PROPERTY(QList<QSharedPointer<Person>> persons READ
|
||
getPersons WRITE setPersons)
|
||
|
||
public:
|
||
enum Category {EMAIL, MOBILE, LANDLINE, MESSENGER, EXTRA} ;
|
||
Q_INVOKABLE Contact() {}
|
||
Contact(QString label, Category category, QString content);
|
||
const QHash<QString, CuteEntityManager::Relation> getRelations() const
|
||
override;
|
||
|
||
QString getContent() const;
|
||
void setContent(const QString &value);
|
||
|
||
QString getLabel() const;
|
||
void setLabel(const QString &value);
|
||
|
||
Category getCategory() const;
|
||
void setCategory(const Category &value);
|
||
|
||
QList<QSharedPointer<Person> > getPersons() const;
|
||
void setPersons(const QList<QSharedPointer<Person> > &value);
|
||
|
||
QList<QSharedPointer<Pupil> > getPupils() const;
|
||
void setPupils(const QList<QSharedPointer<Pupil> > &value);
|
||
|
||
protected:
|
||
QString content;
|
||
Category category;
|
||
QString label;
|
||
QList<QSharedPointer<Person>> persons;
|
||
QList<QSharedPointer<Pupil>> pupils;
|
||
};
|
||
|
||
#endif // CONTACT_H
|
samples/simple/datacreation.cpp | ||
---|---|---|
#include "datacreation.h"
|
||
#include "ratingmarksystem.h"
|
||
|
||
|
||
DataCreation::DataCreation()
|
||
{
|
||
|
||
}
|
||
|
||
QList<QSharedPointer<Entity> > DataCreation::createRatingEntities()
|
||
{
|
||
QList<QSharedPointer<Entity>> resultList;
|
||
|
||
|
||
QSharedPointer<RatingMarkSystem>ratingSystem2;
|
||
ratingSystem2 = QSharedPointer<RatingMarkSystem>(new RatingMarkSystem());
|
||
ratingSystem2->setName("15 bis 0 Punkte als 1+ bis 6");
|
||
ratingSystem2->setPanelColumns(4);
|
||
ratingSystem2->setPanelRows(6);
|
||
ratingSystem2->setValuesComputable(true);
|
||
ratingSystem2->setDigits(0);
|
||
ratingSystem2->setHigherValueBetter(true);
|
||
resultList.append(ratingSystem2);
|
||
|
||
QList<QSharedPointer<RatingMarkDefinition>> rateSystem2Definitions;
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_1p;
|
||
def2_1p = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_1p->setSymbol("1+");
|
||
def2_1p->setMinValue(14.5);
|
||
def2_1p->setValueEquivalent(15);
|
||
def2_1p->setMinPercent(95);
|
||
def2_1p->setPercentEquivalent(97.5);
|
||
def2_1p->setRateable(true);
|
||
def2_1p->setRatingMarkSystem(ratingSystem2);
|
||
def2_1p->setPanelColumn(1);
|
||
def2_1p->setPanelRow(1);
|
||
resultList.append(def2_1p);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_1;
|
||
def2_1 = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_1->setSymbol("1");
|
||
def2_1->setMinValue(13.5);
|
||
def2_1->setValueEquivalent(14);
|
||
def2_1->setMinPercent(90);
|
||
def2_1->setPercentEquivalent(92.5);
|
||
def2_1->setRateable(true);
|
||
def2_1->setRatingMarkSystem(ratingSystem2);
|
||
def2_1->setPanelColumn(2);
|
||
def2_1->setPanelRow(1);
|
||
resultList.append(def2_1);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_1m;
|
||
def2_1m = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_1m->setSymbol("1-");
|
||
def2_1m->setMinValue(12.5);
|
||
def2_1m->setValueEquivalent(13);
|
||
def2_1m->setMinPercent(85);
|
||
def2_1m->setPercentEquivalent(87.5);
|
||
def2_1m->setRateable(true);
|
||
def2_1m->setRatingMarkSystem(ratingSystem2);
|
||
def2_1m->setPanelColumn(3);
|
||
def2_1m->setPanelRow(1);
|
||
resultList.append(def2_1m);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_2p;
|
||
def2_2p = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_2p->setSymbol("2+");
|
||
def2_2p->setMinValue(11.5);
|
||
def2_2p->setValueEquivalent(12);
|
||
def2_2p->setMinPercent(80);
|
||
def2_2p->setPercentEquivalent(82.5);
|
||
def2_2p->setRateable(true);
|
||
def2_2p->setRatingMarkSystem(ratingSystem2);
|
||
def2_2p->setPanelColumn(1);
|
||
def2_2p->setPanelRow(2);
|
||
resultList.append(def2_2p);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_2;
|
||
def2_2 = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_2->setSymbol("2");
|
||
def2_2->setMinValue(10.5);
|
||
def2_2->setValueEquivalent(11);
|
||
def2_2->setMinPercent(75);
|
||
def2_2->setPercentEquivalent(77.5);
|
||
def2_2->setRateable(true);
|
||
def2_2->setRatingMarkSystem(ratingSystem2);
|
||
def2_2->setPanelColumn(2);
|
||
def2_2->setPanelRow(2);
|
||
resultList.append(def2_2);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_2m;
|
||
def2_2m = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_2m->setSymbol("2-");
|
||
def2_2m->setMinValue(9.5);
|
||
def2_2m->setValueEquivalent(10);
|
||
def2_2m->setMinPercent(70);
|
||
def2_2m->setPercentEquivalent(72.5);
|
||
def2_2m->setRateable(true);
|
||
def2_2m->setRatingMarkSystem(ratingSystem2);
|
||
def2_2m->setPanelColumn(3);
|
||
def2_2m->setPanelRow(2);
|
||
resultList.append(def2_2m);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_3p;
|
||
def2_3p = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_3p->setSymbol("3+");
|
||
def2_3p->setMinValue(8.5);
|
||
def2_3p->setValueEquivalent(9);
|
||
def2_3p->setMinPercent(65);
|
||
def2_3p->setPercentEquivalent(67.5);
|
||
def2_3p->setRateable(true);
|
||
def2_3p->setRatingMarkSystem(ratingSystem2);
|
||
def2_3p->setPanelColumn(1);
|
||
def2_3p->setPanelRow(3);
|
||
resultList.append(def2_3p);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_3;
|
||
def2_3 = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_3->setSymbol("3");
|
||
def2_3->setMinValue(7.5);
|
||
def2_3->setValueEquivalent(8);
|
||
def2_3->setMinPercent(60);
|
||
def2_3->setPercentEquivalent(62.5);
|
||
def2_3->setRateable(true);
|
||
def2_3->setRatingMarkSystem(ratingSystem2);
|
||
def2_3->setPanelColumn(2);
|
||
def2_3->setPanelRow(3);
|
||
resultList.append(def2_3);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_3m;
|
||
def2_3m = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_3m->setSymbol("3-");
|
||
def2_3m->setMinValue(6.5);
|
||
def2_3m->setValueEquivalent(7);
|
||
def2_3m->setMinPercent(55);
|
||
def2_3m->setPercentEquivalent(57.5);
|
||
def2_3m->setRateable(true);
|
||
def2_3m->setRatingMarkSystem(ratingSystem2);
|
||
def2_3m->setPanelColumn(3);
|
||
def2_3m->setPanelRow(3);
|
||
resultList.append(def2_3m);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_4p;
|
||
def2_4p = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_4p->setSymbol("4+");
|
||
def2_4p->setMinValue(5.5);
|
||
def2_4p->setValueEquivalent(6);
|
||
def2_4p->setMinPercent(50);
|
||
def2_4p->setPercentEquivalent(52.5);
|
||
def2_4p->setRateable(true);
|
||
def2_4p->setRatingMarkSystem(ratingSystem2);
|
||
def2_4p->setPanelColumn(1);
|
||
def2_4p->setPanelRow(4);
|
||
resultList.append(def2_4p);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_4;
|
||
def2_4 = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_4->setSymbol("4");
|
||
def2_4->setMinValue(4.5);
|
||
def2_4->setValueEquivalent(5);
|
||
def2_4->setMinPercent(45);
|
||
def2_4->setPercentEquivalent(47.5);
|
||
def2_4->setRateable(true);
|
||
def2_4->setRatingMarkSystem(ratingSystem2);
|
||
def2_4->setPanelColumn(2);
|
||
def2_4->setPanelRow(4);
|
||
resultList.append(def2_4);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_4m;
|
||
def2_4m = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_4m->setSymbol("4-");
|
||
def2_4m->setMinValue(3.5);
|
||
def2_4m->setValueEquivalent(4);
|
||
def2_4m->setMinPercent(39);
|
||
def2_4m->setPercentEquivalent(42);
|
||
def2_4m->setRateable(true);
|
||
def2_4m->setRatingMarkSystem(ratingSystem2);
|
||
def2_4m->setPanelColumn(3);
|
||
def2_4m->setPanelRow(4);
|
||
resultList.append(def2_4m);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_5p;
|
||
def2_5p = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_5p->setSymbol("5+");
|
||
def2_5p->setMinValue(2.5);
|
||
def2_5p->setValueEquivalent(3);
|
||
def2_5p->setMinPercent(33);
|
||
def2_5p->setPercentEquivalent(36);
|
||
def2_5p->setRateable(true);
|
||
def2_5p->setRatingMarkSystem(ratingSystem2);
|
||
def2_5p->setPanelColumn(1);
|
||
def2_5p->setPanelRow(5);
|
||
resultList.append(def2_5p);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_5;
|
||
def2_5 = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_5->setSymbol("5");
|
||
def2_5->setMinValue(1.5);
|
||
def2_5->setValueEquivalent(2);
|
||
def2_5->setMinPercent(27);
|
||
def2_5->setPercentEquivalent(30);
|
||
def2_5->setRateable(true);
|
||
def2_5->setRatingMarkSystem(ratingSystem2);
|
||
def2_5->setPanelColumn(2);
|
||
def2_5->setPanelRow(5);
|
||
resultList.append(def2_5);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_5m;
|
||
def2_5m = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_5m->setSymbol("5-");
|
||
def2_5m->setMinValue(0.5);
|
||
def2_5m->setValueEquivalent(1);
|
||
def2_5m->setMinPercent(20);
|
||
def2_5m->setPercentEquivalent(23.5);
|
||
def2_5m->setRateable(true);
|
||
def2_5m->setRatingMarkSystem(ratingSystem2);
|
||
def2_5m->setPanelColumn(3);
|
||
def2_5m->setPanelRow(5);
|
||
resultList.append(def2_5m);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_6;
|
||
def2_6 = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_6->setSymbol("6");
|
||
def2_6->setMinValue(0);
|
||
def2_6->setValueEquivalent(0);
|
||
def2_6->setMinPercent(0);
|
||
def2_6->setPercentEquivalent(10);
|
||
def2_6->setRateable(true);
|
||
def2_6->setRatingMarkSystem(ratingSystem2);
|
||
def2_6->setPanelColumn(0);
|
||
def2_6->setPanelRow(5);
|
||
resultList.append(def2_6);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
QSharedPointer<RatingMarkDefinition>def2_NotRated;
|
||
def2_NotRated = QSharedPointer<RatingMarkDefinition>(new RatingMarkDefinition());
|
||
def2_NotRated->setSymbol("NB");
|
||
def2_NotRated->setMinValue(9999);
|
||
def2_NotRated->setValueEquivalent(9999);
|
||
def2_NotRated->setMinPercent(9999);
|
||
def2_NotRated->setPercentEquivalent(9999);
|
||
def2_NotRated->setRateable(false);
|
||
def2_NotRated->setRatingMarkSystem(ratingSystem2);
|
||
def2_NotRated->setPanelColumn(0);
|
||
def2_NotRated->setPanelRow(4);
|
||
resultList.append(def2_NotRated);
|
||
rateSystem2Definitions.append(resultList.last().objectCast<RatingMarkDefinition>());
|
||
|
||
ratingSystem2->setRatingMarkDefinitions(rateSystem2Definitions);
|
||
|
||
|
||
|
||
|
||
// QSharedPointer<AppRatingData>appRatingData = QSharedPointer<AppRatingData>(new AppRatingData());
|
||
// appRatingData->setRatingMarkSystem(ratingSystem2);
|
||
// appRatingData->setIconName("ratingIcon.svg");
|
||
// appRatingData->setAllowMultipleRatingsPerLesson(true);
|
||
|
||
// appRatingData->setName("Bewertung1-6");
|
||
// appRatingData->setTeachersDeskPosition(4);
|
||
// resultList.append(appRatingData);
|
||
|
||
|
||
ratingSystem2->setAdditionalInfo("sys2");
|
||
auto now = QDateTime::currentDateTime();
|
||
ratingSystem2->setBookedAt(now);
|
||
ratingSystem2->setBookedFor(now);
|
||
|
||
return resultList;
|
||
|
||
|
||
|
||
}
|
samples/simple/datacreation.h | ||
---|---|---|
#ifndef DATACREATION_H
|
||
#define DATACREATION_H
|
||
|
||
#include <QSharedPointer>
|
||
|
||
#include "entitymanager.h"
|
||
//#include "src/model/persons/group.h"
|
||
//#include "src/controller/appcontroller.h"
|
||
|
||
//class StandardLesson;
|
||
//class TimeEntity;
|
||
//class CalendarEvent;
|
||
//class Room;
|
||
//class AppController;
|
||
//class AppSeatingData;
|
||
//class AppMediaData;
|
||
|
||
using namespace CuteEntityManager;
|
||
|
||
class DataCreation
|
||
{
|
||
public:
|
||
DataCreation();
|
||
static QList<QSharedPointer<Entity>> createRatingEntities();
|
||
|
||
};
|
||
|
||
#endif // DATACREATION_H
|
samples/simple/enums.h | ||
---|---|---|
#ifndef ENUMS_H
|
||
#define ENUMS_H
|
||
|
||
#include <QObject>
|
||
#include <QDate>
|
||
#include <QMetaEnum>
|
||
#include <QDebug>
|
||
#include <QMetaObject>
|
||
|
||
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||
* Do NOT change any number assignments, as that might/will
|
||
* invalidate existing dataBases!
|
||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||
*/
|
||
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||
* When creating new types, check for enum doublettes as
|
||
* we do not have strong types in qml - Enums is the
|
||
* common space and the last Enum's number is taken.
|
||
* Better keep numbers synchronized (see
|
||
* DataFieldPosition vs IconPosition)
|
||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||
*/
|
||
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||
* Always do:
|
||
* Q_ENUM beneath class
|
||
* Q_DECLARE_METATYPE (see below) for QML<->C++ (slots/invokables)
|
||
* qRegisterMetaType (main.cpp) for QML<->C++ (slots/invokables)
|
||
* (Registration for use in QML is already done by qmlRegisterType<Enums>)
|
||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||
*/
|
||
class Enums: public QObject
|
||
{
|
||
Q_OBJECT
|
||
|
||
public:
|
||
static constexpr qreal EPSILON_CALCULATION = 0.001;
|
||
static constexpr qreal EPSILON_SCREEN = 0.001;
|
||
|
||
enum class Gender {
|
||
MALE = 0,
|
||
FEMALE = 1,
|
||
UNKNOWNGENDER = -1
|
||
};
|
||
Q_ENUM(Gender)
|
||
|
||
enum class IncidentRetrievalPolicy {
|
||
NEW_PER_LESSON = 1, // if recent: return same Incident, else: create new (entirely)
|
||
// (Example: "Attendance" App)
|
||
CHANGE_PER_LESSON = 2, // if recent: return same Incident, else: clone a new (based on last)
|
||
// (Example: cycling "Status" App)
|
||
NEW = 3, // create a new (entirely), allows multiple entries per lesson
|
||
// (Example: grading multiple contributions with "Grade" App)
|
||
CHANGE = 4 // clone a new (based on last), allows logging of multiple changes per lesson
|
||
// (Example: logging disturbances with a "count" App)
|
||
// (unsuitable for cyclic status apps)
|
||
///@todo SINGLETON = 5 // only one Incident per pupil and group shall exist.
|
||
};
|
||
Q_ENUM(IncidentRetrievalPolicy)
|
||
|
||
enum class AttendanceState {
|
||
PRESENT=1,
|
||
MISSING=2,
|
||
LATE=3,
|
||
ATSCHOOL=4,
|
||
UNDEFINED=-1
|
||
};
|
||
Q_ENUM(AttendanceState)
|
||
|
||
// enum class CalendarEventType {
|
||
// STANDARDLESSON=0,
|
||
// LESSON=1,
|
||
// SCHOOLPERSONAL=2,
|
||
// SCHOOLGENERAL=3,
|
||
// PERSONAL=4
|
||
// };
|
||
// Q_ENUM(CalendarEventType)
|
||
enum class CalendarPlacementResult {
|
||
OFFBEFORE=-1,
|
||
OFFAFTER=-2,
|
||
FITSIN=0,
|
||
CUTATSTART=1,
|
||
CUTATEND=2,
|
||
CUTATBOTH=3
|
||
};
|
||
Q_ENUM(CalendarPlacementResult)
|
||
|
||
enum class DayOfWeek {
|
||
SUNDAY=0,
|
||
MONDAY=1,
|
||
TUESDAY=2,
|
||
WEDNESDAY=3,
|
||
THURSDAY=4,
|
||
FRIDAY=5,
|
||
SATURDAY=6,
|
||
UNDEFINED=-1
|
||
};
|
||
Q_ENUM(DayOfWeek)
|
||
|
||
enum class Orientation {
|
||
LANDSCAPE,
|
||
PORTRAIT,
|
||
LANDSCAPE_180,
|
||
PORTRAIT_180
|
||
};
|
||
Q_ENUM(Orientation)
|
||
|
||
enum class NameOrder {
|
||
FIRST_FAMILY=0,
|
||
FAMILY_FIRST=1
|
||
};
|
||
Q_ENUM(NameOrder)
|
||
|
||
enum class AppMode {
|
||
SEATINGPLAN=1,
|
||
TABLE=2,
|
||
CALENDAR=3,
|
||
SPECIAL=0,
|
||
UNDEFINED=-1
|
||
}; //APPBUTTONS,GROUPBUTTONS,ROOMEDIT,SEATEDIT, SCHEDULE
|
||
Q_ENUM(AppMode)
|
||
|
||
enum class AppType {
|
||
NOAPP=-1,
|
||
ATTENDANCE=1,
|
||
HOMEWORK=2,
|
||
RATING=3,
|
||
STATUS=4,
|
||
CHECKLIST=5,
|
||
GROUPS=6,
|
||
APPS=7,
|
||
ROOMS=8,
|
||
SEATS=9,
|
||
COUNT=10,
|
||
BASEDATA=11,
|
||
SCHEDULE=12,
|
||
GRADES=13,
|
||
MEDIA=14
|
||
|
||
};
|
||
Q_ENUM(AppType)
|
||
|
||
enum class ToolType {
|
||
UNDEFINED=-1,
|
||
RANDOM_PUPIL=0,
|
||
ADD_MEDIA=1,
|
||
TOGGLE_RASTER=2,
|
||
};
|
||
Q_ENUM(ToolType)
|
||
|
||
enum class DataFieldPosition {
|
||
// always keep numbers synchronized with IconPosition,
|
||
// as in qml mix-up confusion is possible (not strongly typed there)
|
||
|
||
// ordinality is important. These fields are being iterated!
|
||
TOP_LEFT=0,
|
||
TOP=1,
|
||
TOP_RIGHT=2,
|
||
UPPER_LEFT=3,
|
||
UPPER=4,
|
||
UPPER_RIGHT=5,
|
||
LOWER_LEFT=6,
|
||
LOWER=7,
|
||
LOWER_RIGHT=8,
|
||
BOTTOM_LEFT=9,
|
||
BOTTOM=10,
|
||
BOTTOM_RIGHT=11,
|
||
CENTER=12
|
||
};
|
||
Q_ENUM(Enums::DataFieldPosition)
|
||
|
||
enum class IconPosition {
|
||
// always keep numbers synchronized with DataFieldPosition,
|
||
// as in qml mix-up confusion is possible (not strongly typed there)
|
||
TOP_LEFT=0,
|
||
// TOP=1,
|
||
TOP_RIGHT=2,
|
||
// UPPER_LEFT=3,
|
||
// UPPER=4,
|
||
// UPPER_RIGHT=5,
|
||
// LOWER_LEFT=6,
|
||
// LOWER=7,
|
||
// LOWER_RIGHT=8,
|
||
BOTTOM_LEFT=9,
|
||
// BOTTOM=10,
|
||
BOTTOM_RIGHT=11,
|
||
// CENTER=12
|
||
|
||
|
||
};
|
||
Q_ENUM(IconPosition)
|
||
|
||
enum class RecurrencePatternType {
|
||
DAILY=0,
|
||
WEEKLY=1,
|
||
ABSOLUTEMONTHLY=2,
|
||
RELATIVEMONTHLY=3,
|
||
ABSOLUTEYEARLY=4,
|
||
RELATIVEYEARLY=5
|
||
};
|
||
Q_ENUM(RecurrencePatternType)
|
||
|
||
enum class RecurrenceRangeType {
|
||
ENDDATE=0,
|
||
NOEND=1,
|
||
NUMBERED=2
|
||
};
|
||
Q_ENUM(RecurrenceRangeType)
|
||
|
||
enum class ShadowPosition {
|
||
TOP_LEFT_SHADOW=0,
|
||
TOP_RIGHT_SHADOW=1,
|
||
BOTTOM_LEFT_SHADOW=2,
|
||
BOTTOM_RIGHT_SHADOW=3,
|
||
INVALID_SHADOW=-1
|
||
};
|
||
Q_ENUM(ShadowPosition)
|
||
|
||
enum class WeekIndex {
|
||
FIRST=0,
|
||
SECOND=1,
|
||
THIRD=2,
|
||
FOURTH=3,
|
||
LAST=4
|
||
};
|
||
Q_ENUM(WeekIndex)
|
||
|
||
enum class RoundingOption {
|
||
ROUND = 0,
|
||
CEILING = 1,
|
||
FLOOR = 2
|
||
};
|
||
Q_ENUM(RoundingOption)
|
||
|
||
|
||
enum class RandomPersonMode {
|
||
UNDEFINED = -1,
|
||
FREE_RANDOM = 0,
|
||
ONLY_ONCE = 1,
|
||
ONLY_ONCE_BEFORE_SECOND = 2,
|
||
WEIGHED_RANDOM = 3
|
||
};
|
||
Q_ENUM(RandomPersonMode)
|
||
|
||
// enum class RatingMarkIntendedEntry {
|
||
// VALUE=0,
|
||
// SYMBOL=1,
|
||
// PERCENT=2,
|
||
// UNRATEABLE=3,
|
||
// UNDEFINED=-1
|
||
// };
|
||
// Q_ENUM(RatingMarkIntendedEntry)
|
||
|
||
static DayOfWeek dayOfWeek(QDate date) {
|
||
Q_ASSERT(date.isValid());
|
||
if (!date.isValid()) {
|
||
return DayOfWeek::UNDEFINED;
|
||
}
|
||
switch (date.dayOfWeek()) {
|
||
case 1: return DayOfWeek::MONDAY;
|
||
case 2: return DayOfWeek::TUESDAY;
|
||
case 3: return DayOfWeek::WEDNESDAY;
|
||
case 4: return DayOfWeek::THURSDAY;
|
||
case 5: return DayOfWeek::FRIDAY;
|
||
case 6: return DayOfWeek::SATURDAY;
|
||
case 7: return DayOfWeek::SUNDAY;
|
||
default: return DayOfWeek::UNDEFINED;
|
||
}
|
||
|
||
}
|
||
|
||
static QMap<int, QString> toGenericStringMap(QString enumClassName) {
|
||
QMap<int, QString> resultMap;
|
||
const QMetaObject &mo = Enums::staticMetaObject;
|
||
int index = mo.indexOfEnumerator(enumClassName.toLocal8Bit());
|
||
QMetaEnum metaEnum = mo.enumerator(index);
|
||
//Enums::AttendanceState test = Enums::AttendanceState::UNDEFINED;
|
||
//QString enumString = metaEnum.valueToKey(static_cast<int>(test));
|
||
for (int i=0; i<metaEnum.keyCount();i++) {
|
||
resultMap.insert(metaEnum.value(i),metaEnum.key(i));
|
||
}
|
||
return resultMap;
|
||
}
|
||
|
||
template<class T>
|
||
static QMap<int, QString> toStringMap(QString enumClassName, bool omitValuesUnderZero = false) {
|
||
QMap<int, QString> resultMap;
|
||
const QMetaObject &mo = Enums::staticMetaObject;
|
||
int index = mo.indexOfEnumerator(enumClassName.toLocal8Bit());
|
||
QMetaEnum metaEnum = mo.enumerator(index);
|
||
try {
|
||
for (int i=0; i<metaEnum.keyCount();i++) {
|
||
if (metaEnum.value(i) >= 0 || !omitValuesUnderZero) {
|
||
T instance = static_cast<T>(metaEnum.value(i));
|
||
resultMap.insert(metaEnum.value(i),toString(instance));
|
||
}
|
||
}
|
||
} catch (...) {
|
||
resultMap.clear();
|
||
}
|
||
Q_ASSERT (!resultMap.isEmpty());
|
||
return resultMap;
|
||
}
|
||
};
|
||
Q_DECLARE_METATYPE(Enums::AttendanceState)
|
||
Q_DECLARE_METATYPE(Enums::Orientation)
|
||
Q_DECLARE_METATYPE(Enums::AppMode)
|
||
Q_DECLARE_METATYPE(Enums::AppType)
|
||
Q_DECLARE_METATYPE(Enums::DataFieldPosition)
|
||
Q_DECLARE_METATYPE(Enums::IconPosition)
|
||
Q_DECLARE_METATYPE(Enums::ShadowPosition)
|
||
Q_DECLARE_METATYPE(Enums::Gender)
|
||
Q_DECLARE_METATYPE(Enums::ToolType)
|
||
Q_DECLARE_METATYPE(Enums::RandomPersonMode)
|
||
|
||
inline Enums::DayOfWeek &operator++( Enums::DayOfWeek &d, int ) {
|
||
if (d == Enums::DayOfWeek::UNDEFINED) {
|
||
return d;
|
||
}
|
||
int nr = static_cast<int>(d) + 1;
|
||
if (nr > 6) {
|
||
nr = 0;
|
||
}
|
||
d = static_cast<Enums::DayOfWeek>(nr);
|
||
return d;
|
||
}
|
||
|
||
inline QString toString(Enums::DayOfWeek day, int limitLength=0) {
|
||
if (limitLength == 0) {
|
||
limitLength=100;
|
||
}
|
||
switch (day) {
|
||
case Enums::DayOfWeek::MONDAY: return(QString("Montag").left(limitLength));
|
||
case Enums::DayOfWeek::TUESDAY: return(QString("Dienstag").left(limitLength));
|
||
case Enums::DayOfWeek::WEDNESDAY: return(QString("Mittwoch").left(limitLength));
|
||
case Enums::DayOfWeek::THURSDAY: return(QString("Donnerstag").left(limitLength));
|
||
case Enums::DayOfWeek::FRIDAY: return(QString("Freitag").left(limitLength));
|
||
case Enums::DayOfWeek::SATURDAY: return(QString("Samstag").left(limitLength));
|
||
case Enums::DayOfWeek::SUNDAY: return(QString("Sonntag").left(limitLength));
|
||
default:
|
||
return QString();
|
||
}
|
||
}
|
||
inline QString toString(Enums::AppType appType, int limitLength=0) {
|
||
if (limitLength == 0) {
|
||
limitLength=100;
|
||
}
|
||
switch (appType) {
|
||
case Enums::AppType::NOAPP: return(QString("Keine App").left(limitLength));
|
||
case Enums::AppType::ATTENDANCE: return(QString("Anwesenheit").left(limitLength));
|
||
case Enums::AppType::HOMEWORK: return(QString("Hausaufgaben").left(limitLength));
|
||
case Enums::AppType::RATING: return(QString("Bewertung").left(limitLength));
|
||
case Enums::AppType::STATUS: return(QString("Status").left(limitLength));
|
||
case Enums::AppType::CHECKLIST: return(QString("Checkliste").left(limitLength));
|
||
case Enums::AppType::GROUPS: return(QString("Gruppen").left(limitLength));
|
||
case Enums::AppType::APPS: return(QString("Apps").left(limitLength));
|
||
case Enums::AppType::ROOMS: return(QString("Raumbau").left(limitLength));
|
||
case Enums::AppType::SEATS: return(QString("Sitzplan").left(limitLength));
|
||
case Enums::AppType::COUNT: return(QString("Zählen").left(limitLength));
|
||
case Enums::AppType::BASEDATA: return(QString("Basisdaten").left(limitLength));
|
||
case Enums::AppType::SCHEDULE: return(QString("Termine").left(limitLength));
|
||
case Enums::AppType::GRADES: return(QString("Zensuren").left(limitLength));
|
||
case Enums::AppType::MEDIA: return(QString("Medien").left(limitLength));
|
||
default:
|
||
return QString();
|
||
}
|
||
}
|
||
|
||
inline QString toString(Enums::AttendanceState state) {
|
||
switch (state) {
|
||
case Enums::AttendanceState::ATSCHOOL: return(QString("Schulisch abwesend"));
|
||
case Enums::AttendanceState::LATE: return(QString("Verspätet"));
|
||
case Enums::AttendanceState::MISSING: return(QString("Fehlstunde(n)"));
|
||
case Enums::AttendanceState::PRESENT: return(QString("Anwesend"));
|
||
case Enums::AttendanceState::UNDEFINED: return(QString("Nicht definiert"));
|
||
default:
|
||
return QString();
|
||
}
|
||
}
|
||
|
||
template <class T> inline T fromString(QString stateString, QString className) {
|
||
const QMetaObject &mo = Enums::staticMetaObject;
|
||
int index = mo.indexOfEnumerator(className.toLocal8Bit()); // watch out during refactorings
|
||
QMetaEnum metaEnum = mo.enumerator(index);
|
||
for (int i = 0; i < metaEnum.keyCount(); i++) {
|
||
int val = metaEnum.value(i);
|
||
T enumVal = static_cast<T>(val);
|
||
if (toString(enumVal) == stateString) {
|
||
return enumVal;
|
||
}
|
||
}
|
||
return static_cast<T>(-1);;
|
||
}
|
||
|
||
#endif // ENUMS_H
|
samples/simple/group.cpp | ||
---|---|---|
#include "group.h"
|
||
#include "../samples/example/models/pupil.h"
|
||
#include <QDebug>
|
||
|
||
Group::Group() : Entity() {
|
||
|
||
}
|
||
|
||
const QHash<QString, CuteEntityManager::Relation> Group::getRelations() const {
|
||
auto hash = QHash<QString, CuteEntityManager::Relation>();
|
||
hash.insert("persons", CuteEntityManager::Relation("persons",
|
||
RelationType::MANY_TO_MANY));
|
||
hash.insert("pupils", CuteEntityManager::Relation("pupils",
|
||
RelationType::MANY_TO_MANY, QString("groups")));
|
||
hash.insert("mainTeacher", CuteEntityManager::Relation("mainTeacher",
|
||
RelationType::MANY_TO_ONE));
|
||
return hash;
|
||
}
|
||
|
||
QString Group::getName() const {
|
||
return name;
|
||
}
|
||
|
||
void Group::setName(const QString &value) {
|
||
name = value;
|
||
}
|
||
QList<QSharedPointer<Pupil> > Group::getPupils() const {
|
||
return pupils;
|
||
}
|
||
|
||
void Group::setPupils(const QList<QSharedPointer<Pupil> > &value) {
|
||
pupils = value;
|
||
}
|
||
|
||
void Group::addPupil(Pupil *pupil) {
|
||
this->pupils.append(QSharedPointer<Pupil>(pupil));
|
||
}
|
||
|
||
QSharedPointer<Pupil> Group::pupilAt(int i) {
|
||
return this->pupils.at(i);
|
||
}
|
||
|
||
QSharedPointer<Person> Group::getMainTeacher() const {
|
||
return mainTeacher;
|
||
}
|
||
|
||
void Group::setMainTeacher(const QSharedPointer<Person> &value) {
|
||
mainTeacher = value;
|
||
}
|
||
QList<QSharedPointer<Person> > Group::getPersons() const {
|
||
return persons;
|
||
}
|
||
|
||
void Group::addPerson(Person *person) {
|
||
this->persons.append(QSharedPointer<Person>(person));
|
||
}
|
||
|
||
void Group::setPersons(const QList<QSharedPointer<Person> > &value) {
|
||
persons = value;
|
||
}
|
||
|
||
|
||
|
||
|
samples/simple/group.h | ||
---|---|---|
#ifndef GROUP_H
|
||
#define GROUP_H
|
||
#include "entity.h"
|
||
#include <QDebug>
|
||
|
||
class Teacher;
|
||
class Person;
|
||
class Pupil;
|
||
//class Relation;
|
||
using namespace CuteEntityManager;
|
||
|
||
class Group: public CuteEntityManager::Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Group)
|
||
Q_PROPERTY(QList<QSharedPointer<Pupil>> pupils READ getPupils WRITE setPupils)
|
||
Q_PROPERTY(QList<QSharedPointer<Person>> persons READ getPersons WRITE
|
||
setPersons)
|
||
Q_PROPERTY(QString name READ getName WRITE setName)
|
||
Q_PROPERTY(QSharedPointer<Person> mainTeacher READ getMainTeacher WRITE
|
||
setMainTeacher)
|
||
|
||
public:
|
||
Q_INVOKABLE Group();
|
||
const QHash<QString, CuteEntityManager::Relation> getRelations() const override;
|
||
|
||
QString getName() const;
|
||
void setName(const QString &value);
|
||
|
||
QList<QSharedPointer<Pupil> > getPupils() const;
|
||
void setPupils(const QList<QSharedPointer<Pupil> > &value);
|
||
void addPupil(Pupil *pupil);
|
||
QSharedPointer<Pupil> pupilAt(int i);
|
||
|
||
QSharedPointer<Person> getMainTeacher() const;
|
||
void setMainTeacher(const QSharedPointer<Person> &value);
|
||
|
||
QList<QSharedPointer<Person> > getPersons() const;
|
||
void addPerson(Person *person);
|
||
void setPersons(const QList<QSharedPointer<Person> > &value);
|
||
|
||
protected:
|
||
QList<QSharedPointer<Pupil>> pupils;
|
||
QList<QSharedPointer<Person>> persons;
|
||
QSharedPointer<Person> mainTeacher;
|
||
QString name;
|
||
};
|
||
|
||
#endif // GROUP_H
|
samples/simple/incident.cpp | ||
---|---|---|
#include "incident.h"
|
||
//#include "src/model/appdata/appdata.h"
|
||
//#include "src/trivia/errorhandling.h"
|
||
|
||
Incident::Incident() :
|
||
Entity()
|
||
{
|
||
|
||
}
|
||
|
||
void Incident::initIncident(const QSharedPointer<Pupil> pupil,
|
||
const QSharedPointer<Group> group,
|
||
const QDateTime dateTime)
|
||
{
|
||
this->setPupil(pupil);
|
||
this->setGroup(group);
|
||
// this->setRoom(room);
|
||
// this->setAppData(appData);
|
||
this->setBookedFor(dateTime);
|
||
this->setBookedAt(dateTime);
|
||
this->setCancelledAt(QDateTime());
|
||
this->setLocked(false);
|
||
this->setPredecessor(QSharedPointer<Incident>());
|
||
}
|
||
|
||
QDateTime Incident::bookedFor() const
|
||
{
|
||
return m_bookedFor;
|
||
}
|
||
|
||
void Incident::setBookedFor(const QDateTime &bookedFor)
|
||
{
|
||
m_bookedFor = bookedFor;
|
||
}
|
||
|
||
QDateTime Incident::bookedAt() const
|
||
{
|
||
return m_bookedAt;
|
||
}
|
||
|
||
void Incident::setBookedAt(const QDateTime &bookedAt)
|
||
{
|
||
m_bookedAt = bookedAt;
|
||
}
|
||
|
||
QDateTime Incident::cancelledAt() const
|
||
{
|
||
return m_cancelledAt;
|
||
}
|
||
|
||
void Incident::setCancelledAt(const QDateTime &cancelledAt, bool forceOverwrite)
|
||
{
|
||
if (m_cancelledAt.isValid() && !forceOverwrite) {
|
||
// sometimes an EntityManager metacall reaches this, too. Immediately after setting it manually. (<= 1ms?)
|
||
// reproduce: change attendanceIncident, ok, change again
|
||
qint64 diff = qAbs(m_cancelledAt.secsTo(cancelledAt));
|
||
if (diff > 10) { // giving some delay headroom for a possible double call
|
||
Q_ASSERT(!m_cancelledAt.isValid());
|
||
// THROW_MODERATE_ERROR_CIT("Das Canceln eines Ereignisses ist fehlgeschlagen, das Ereignis war bereits vorher gecancelt!");
|
||
}
|
||
}
|
||
m_cancelledAt = cancelledAt;
|
||
}
|
||
|
||
QSharedPointer<Pupil> Incident::pupil() const
|
||
{
|
||
return m_pupil;
|
||
}
|
||
|
||
void Incident::setPupil(const QSharedPointer<Pupil> &pupil)
|
||
{
|
||
m_pupil = pupil;
|
||
}
|
||
|
||
//QSharedPointer<AppData> Incident::appData() const
|
||
//{
|
||
// return m_appData;
|
||
//}
|
||
|
||
//void Incident::setAppData(const QSharedPointer<AppData> &appData)
|
||
//{
|
||
// m_appData = appData;
|
||
//}
|
||
|
||
QSharedPointer<Group> Incident::group() const
|
||
{
|
||
return m_group;
|
||
}
|
||
|
||
void Incident::setGroup(const QSharedPointer<Group> &group)
|
||
{
|
||
m_group = group;
|
||
}
|
||
|
||
bool Incident::cancelled(QDateTime dateTime) const
|
||
{
|
||
if (!m_cancelledAt.isValid()) {
|
||
return false;
|
||
}
|
||
return (dateTime>cancelledAt());
|
||
}
|
||
|
||
bool Incident::locked() const
|
||
{
|
||
return m_locked;
|
||
}
|
||
|
||
void Incident::setLocked(bool locked)
|
||
{
|
||
m_locked = locked;
|
||
}
|
||
|
||
//QSharedPointer<Room> Incident::room() const
|
||
//{
|
||
// return m_room;
|
||
//}
|
||
|
||
//void Incident::setRoom(const QSharedPointer<Room> &room)
|
||
//{
|
||
// m_room = room;
|
||
//}
|
||
|
||
QString Incident::additionalInfo() const
|
||
{
|
||
return m_additionalInfo;
|
||
}
|
||
|
||
void Incident::setAdditionalInfo(const QString &additionalInfo)
|
||
{
|
||
m_additionalInfo = additionalInfo;
|
||
}
|
||
|
||
const QHash<QString, Relation> Incident::getRelations() const
|
||
{
|
||
auto hash = QHash<QString, CuteEntityManager::Relation>();
|
||
|
||
hash.insert("pupil",CuteEntityManager::Relation(
|
||
"pupil",CuteEntityManager::RelationType::MANY_TO_ONE));
|
||
// hash.insert("appData",CuteEntityManager::Relation(
|
||
// "appData",CuteEntityManager::RelationType::MANY_TO_ONE));
|
||
hash.insert("group",CuteEntityManager::Relation(
|
||
"group",CuteEntityManager::RelationType::MANY_TO_ONE));
|
||
// hash.insert("room",CuteEntityManager::Relation(
|
||
// "room",CuteEntityManager::RelationType::MANY_TO_ONE));
|
||
// hash.insert("seatingPlan", CuteEntityManager::Relation(
|
||
// "seatingPlan",CuteEntityManager::RelationType::MANY_TO_ONE));
|
||
hash.insert("predecessor", CuteEntityManager::Relation("predecessor", true, CuteEntityManager::RelationType::ONE_TO_ONE));
|
||
return hash;
|
||
}
|
||
|
||
//QSharedPointer<SeatingPlan> Incident::seatingPlan() const
|
||
//{
|
||
// return m_seatingPlan;
|
||
//}
|
||
|
||
//void Incident::setSeatingPlan(const QSharedPointer<SeatingPlan> &seatingPlan)
|
||
//{
|
||
// m_seatingPlan = seatingPlan;
|
||
//}
|
||
|
||
QSharedPointer<Incident> Incident::predecessor() const
|
||
{
|
||
return m_predecessor;
|
||
}
|
||
|
||
void Incident::setPredecessor(const QSharedPointer<Incident> &predecessor)
|
||
{
|
||
m_predecessor = predecessor;
|
||
}
|
||
|
||
bool Incident::lessThanBookedFor(const QSharedPointer<Incident> &a, const QSharedPointer<Incident> &b) {
|
||
return a->bookedFor() < b->bookedFor();
|
||
}
|
||
|
||
bool Incident::moreThanBookedFor(const QSharedPointer<Incident> &a, const QSharedPointer<Incident> &b) {
|
||
return a->bookedFor() > b->bookedFor();
|
||
}
|
||
|
||
bool Incident::lessThanBookedAt(const QSharedPointer<Incident> &a, const QSharedPointer<Incident> &b) {
|
||
return a->bookedAt() < b->bookedAt();
|
||
}
|
||
|
||
bool Incident::moreThanBookedAt(const QSharedPointer<Incident> &a, const QSharedPointer<Incident> &b) {
|
||
return a->bookedAt() > b->bookedAt();
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
samples/simple/incident.h | ||
---|---|---|
#ifndef INCIDENT_H
|
||
#define INCIDENT_H
|
||
#include <QDateTime>
|
||
#include <QObject>
|
||
|
||
#include "entity.h"
|
||
|
||
//#include "src/enums.h"
|
||
|
||
using namespace CuteEntityManager;
|
||
|
||
//class AppData;
|
||
class Pupil;
|
||
class Group;
|
||
//class Room;
|
||
//class SeatingPlan;
|
||
|
||
class Incident : public Entity
|
||
{
|
||
Q_OBJECT
|
||
EM_MACRO(Incident)
|
||
Q_PROPERTY(bool locked READ locked WRITE setLocked) // i.e.: has had impacts on not undoable events
|
||
|
||
Q_PROPERTY(QDateTime bookedFor READ bookedFor WRITE setBookedFor)
|
||
Q_PROPERTY(QDateTime bookedAt READ bookedAt WRITE setBookedAt)
|
||
Q_PROPERTY(QDateTime cancelledAt READ cancelledAt WRITE setCancelledAt)
|
||
|
||
Q_PROPERTY(QSharedPointer<Pupil> pupil READ pupil WRITE setPupil)
|
||
// Q_PROPERTY(QSharedPointer<AppData> appData READ appData WRITE setAppData)
|
||
Q_PROPERTY(QSharedPointer<Group> group READ group WRITE setGroup)
|
||
// Q_PROPERTY(QSharedPointer<Room> room READ room WRITE setRoom)
|
||
// Q_PROPERTY(QSharedPointer<SeatingPlan> seatingPlan READ seatingPlan WRITE setSeatingPlan)
|
||
|
||
Q_PROPERTY(QString additionalInfo READ additionalInfo WRITE setAdditionalInfo)
|
||
Q_PROPERTY(QSharedPointer<Incident> predecessor READ predecessor WRITE setPredecessor)
|
||
|
||
public:
|
||
Q_INVOKABLE Incident();
|
||
|
||
void initIncident(
|
||
const QSharedPointer<Pupil> pupil,
|
||
const QSharedPointer<Group> group,
|
||
// const QSharedPointer<Room> room,
|
||
// const QSharedPointer<AppData> appData,
|
||
const QDateTime dateTime);
|
||
|
||
// virtual Enums::AppType appType() {return Enums::AppType::NOAPP; }
|
||
|
||
QDateTime bookedFor() const;
|
||
void setBookedFor(const QDateTime &bookedFor);
|
||
|
||
QDateTime bookedAt() const;
|
||
void setBookedAt(const QDateTime &bookedAt);
|
||
|
||
QDateTime cancelledAt() const;
|
||
void setCancelledAt(const QDateTime &cancelledAt, bool forceOverwrite = false);
|
||
|
||
QSharedPointer<Pupil> pupil() const;
|
||
void setPupil(const QSharedPointer<Pupil> &pupil);
|
||
|
||
// QSharedPointer<AppData> appData() const;
|
||
// void setAppData(const QSharedPointer<AppData> &appData);
|
||
|
||
QSharedPointer<Group> group() const;
|
||
void setGroup(const QSharedPointer<Group> &group);
|
||
|
||
bool cancelled(QDateTime dateTime) const;
|
||
|
||
bool locked() const;
|
||
void setLocked(bool locked);
|
||
|
||
// QSharedPointer<Room> room() const;
|
||
// void setRoom(const QSharedPointer<Room> &room);
|
||
|
||
QString additionalInfo() const;
|
||
void setAdditionalInfo(const QString &additionalInfo);
|
||
|
||
virtual const QHash<QString, CuteEntityManager::Relation> getRelations() const override;
|
||
|
||
// QSharedPointer<SeatingPlan> seatingPlan() const;
|
||
// void setSeatingPlan(const QSharedPointer<SeatingPlan> &seatingPlan);
|
||
|
||
QSharedPointer<Incident> predecessor() const;
|
||
void setPredecessor(const QSharedPointer<Incident> &predecessor);
|
||
|
||
static bool lessThanBookedFor(const QSharedPointer<Incident> &a, const QSharedPointer<Incident> &b);
|
||
static bool moreThanBookedFor(const QSharedPointer<Incident> &a, const QSharedPointer<Incident> &b);
|
||
static bool lessThanBookedAt(const QSharedPointer<Incident> &a, const QSharedPointer<Incident> &b);
|
||
static bool moreThanBookedAt(const QSharedPointer<Incident> &a, const QSharedPointer<Incident> &b);
|
||
protected:
|
||
QDateTime m_bookedFor;
|
||
QDateTime m_bookedAt;
|
||
QDateTime m_cancelledAt;
|
||
QSharedPointer<Pupil> m_pupil;
|
||
// QSharedPointer<AppData> m_appData;
|
||
QSharedPointer<Group> m_group;
|
||
// QSharedPointer<Room> m_room;
|
||
// QSharedPointer<SeatingPlan> m_seatingPlan;
|
||
bool m_cancelled = false;
|
||
bool m_locked = false;
|
||
QString m_additionalInfo;
|
||
QSharedPointer<Incident> m_predecessor;
|
||
|
||
|
||
|
||
};
|
||
|
||
#endif // INCIDENT_H
|
samples/simple/main.cpp | ||
---|---|---|
#include <QCoreApplication>
|
||
#include <QDir>
|
||
#include <QDebug>
|
||
#include "article.h"
|
||
#include "entitymanager.h"
|
||
|
||
#include "person.h"
|
||
#include "pupil.h"
|
||
#include "group.h"
|
||
#include "address.h"
|
||
#include "contact.h"
|
||
|
||
#include "occasion.h"
|
||
#include "ratingmarkdefinition.h"
|
||
#include "ratingmarksystem.h"
|
||
#include "ratingmarkincident.h"
|
||
#include "datacreation.h"
|
||
#include "incident.h"
|
||
#include "entityinstancefactory.h"
|
||
|
||
|
||
using namespace CuteEntityManager;
|
||
int main(int argc, char *argv[]) {
|
||
Q_UNUSED(argc) Q_UNUSED(argv);
|
||
EntityInstanceFactory::registerClass<Address>();
|
||
EntityInstanceFactory::registerClass<Contact>();
|
||
EntityInstanceFactory::registerClass<Person>();
|
||
EntityInstanceFactory::registerClass<Pupil>();
|
||
EntityInstanceFactory::registerClass<Group>();
|
||
EntityInstanceFactory::registerClass<Occasion>();
|
||
EntityInstanceFactory::registerClass<Incident>();
|
||
EntityInstanceFactory::registerClass<RatingMarkDefinition>();
|
||
EntityInstanceFactory::registerClass<RatingMarkIncident>();
|
||
EntityInstanceFactory::registerClass<RatingMarkSystem>();
|
||
|
||
|
||
|
||
Q_UNUSED(argc) Q_UNUSED(argv)
|
||
EntityInstanceFactory::registerClass<Article>();
|
||
QSharedPointer<CuteEntityManager::EntityManager> e =
|
||
QSharedPointer<CuteEntityManager::EntityManager>(new
|
||
CuteEntityManager::EntityManager("QSQLITE",
|
||
QDir::currentPath() + "/db.sqlite"));
|
||
qDebug()<<QDir::currentPath();
|
||
QStringList inits = QStringList() << "Address" << "Contact" << "Person" << "Pupil" << "Group" << "Incident" << "Occasion" << "RatingMarkDefinition" << "RatingMarkIncident" << "RatingMarkSystem";
|
||
QStringList inits = QStringList() << "Article";
|
||
e->startup("0.1", inits);
|
||
|
||
|
||
auto entities = DataCreation::createRatingEntities();
|
||
e->save(entities);
|
||
|
||
// QSharedPointer<Pupil> pupil = QSharedPointer<Pupil>(new Pupil("Vorname","Nachname","","","Keks"));
|
||
// e->save(pupil);
|
||
|
||
QSharedPointer<Pupil> pupil = QSharedPointer<Pupil>(new Pupil());
|
||
pupil->setLegalGuardianNote("note");
|
||
e->save(pupil);
|
||
|
||
// QSharedPointer<Person> person = QSharedPointer<Person>(new Person("Vorname","Nachname","","","Keks"));
|
||
// e->save(person);
|
||
|
||
|
||
|
||
QSharedPointer<Occasion> occasion = QSharedPointer<Occasion>(new Occasion("IrgendeinAnlass"));
|
||
QSharedPointer<RatingMarkIncident> inc = QSharedPointer<RatingMarkIncident>(new RatingMarkIncident());
|
||
inc->setAdditionalInfo("addInf");
|
||
inc->setBookedAt(QDateTime::currentDateTime());
|
||
inc->setBookedFor(QDateTime::currentDateTime());
|
||
inc->setOccasion(occasion);
|
||
// inc->setPupil(pupil);
|
||
inc->setRateable(true);
|
||
// inc->setRatingMarkSystem(system);
|
||
inc->setSymbol("z");
|
||
inc->setValue(23);
|
||
|
||
e->save(inc);
|
||
|
||
|
||
|
||
QSharedPointer<Article> a = QSharedPointer<Article>(new Article(5.0,
|
||
"muesli"));
|
||
auto ep = a.objectCast<CuteEntityManager::Entity>();
|
||
qDebug() << e->create(ep, true, true); //INSERT on database
|
||
a->setPrice(6.0); //inflation
|
||
a->setName("muesli improved"); //1337 muesli upgrade
|
||
qDebug() << e->save(ep); //UPDATE on database
|
||
qDebug() << e->remove(ep); //REMOVE on database
|
||
return 0;
|
||
}
|
samples/simple/occasion.cpp | ||
---|---|---|
#include "occasion.h"
|
||
|
||
Occasion::Occasion() : Entity()
|
||
{
|
||
m_text.clear();
|
||
}
|
||
|
||
Occasion::Occasion(QString text)
|
||
{
|
||
m_text=text;
|
||
}
|
||
QString Occasion::text()
|
||
{
|
||
return m_text;
|
||
}
|
||
|
||
void Occasion::setText(QString &text)
|
||
{
|
||
m_text = text;
|
||
}
|
||
|
||
|
samples/simple/occasion.h | ||
---|---|---|
#ifndef OCCASION_H
|
||
#define OCCASION_H
|
||
|
||
#include "entity.h"
|
||
#include <QObject>
|
||
|
||
using namespace CuteEntityManager;
|
||
class Occasion : public Entity
|
||
{
|
||
Q_OBJECT
|
||
EM_MACRO(Occasion)
|
||
Q_PROPERTY(QString text READ text WRITE setText)
|
||
public:
|
||
Q_INVOKABLE explicit Occasion();
|
||
Occasion(QString text);
|
||
QString text();
|
||
void setText(QString &text);
|
||
|
||
protected:
|
||
QString m_text;
|
||
|
||
};
|
||
|
||
#endif // OCCASION_H
|
||
|
samples/simple/person.cpp | ||
---|---|---|
#include "person.h"
|
||
#include "contact.h"
|
||
#include "address.h"
|
||
|
||
Person::Person(QObject *parent): Entity(parent) {
|
||
}
|
||
Person::Person(QString firstName, QString familyName,
|
||
QString customPictureFileName, QString namePrefix, QString nickName,
|
||
QDate birthday, QObject *parent): Entity(parent) {
|
||
setFirstName(firstName);
|
||
setFamilyName(familyName);
|
||
setNamePrefix(namePrefix);
|
||
setNickName(nickName);
|
||
setBirthday(birthday);
|
||
setCustomPictureFileName(customPictureFileName);
|
||
}
|
||
|
||
const QHash<QString, CuteEntityManager::Relation> Person::getRelations() const {
|
||
auto hash = QHash<QString, CuteEntityManager::Relation>();
|
||
hash.insert("groups", CuteEntityManager::Relation("groups",
|
||
RelationType::MANY_TO_MANY,
|
||
QString("persons")));
|
||
hash.insert("maintainedGroups", CuteEntityManager::Relation("maintainedGroups",
|
||
RelationType::ONE_TO_MANY,
|
||
QString("mainTeacher")));
|
||
hash.insert("contacts", CuteEntityManager::Relation("contacts",
|
||
RelationType::MANY_TO_MANY));
|
||
hash.insert("addresses", CuteEntityManager::Relation("addresses",
|
||
RelationType::MANY_TO_MANY));
|
||
return hash;
|
||
}
|
||
|
||
QString Person::fullName(NameOrder nameOrder) const {
|
||
QString name = QString();
|
||
if (nameOrder == NameOrder::FAMILY_FIRST_NAME_ORDER) {
|
||
name += this->getFamilyName();
|
||
name += ", ";
|
||
if (!this->getNamePrefix().isEmpty()) {
|
||
name += this->getNamePrefix();
|
||
name += " ";
|
||
}
|
||
name += this->getFirstName();
|
||
} else {
|
||
name += this->getFirstName();
|
||
name += " ";
|
||
name += this->getFamilyName();
|
||
if (!this->getNamePrefix().isEmpty()) {
|
||
name += ", ";
|
||
name += this->getNamePrefix();
|
||
}
|
||
}
|
||
return name;
|
||
}
|
||
QString Person::getFirstName() const {
|
||
return firstName;
|
||
}
|
||
|
||
void Person::setFirstName(const QString &value) {
|
||
firstName = value;
|
||
}
|
||
QString Person::getFamilyName() const {
|
||
return familyName;
|
||
}
|
||
|
||
void Person::setFamilyName(const QString &value) {
|
||
familyName = value;
|
||
}
|
||
QString Person::getNamePrefix() const {
|
||
return namePrefix;
|
||
}
|
||
|
||
void Person::setNamePrefix(const QString &value) {
|
||
namePrefix = value;
|
||
}
|
||
QString Person::getNickName() const {
|
||
return nickName;
|
||
}
|
||
|
||
void Person::setNickName(const QString &value) {
|
||
nickName = value;
|
||
}
|
||
QDate Person::getBirthday() const {
|
||
return birthday;
|
||
}
|
||
|
||
void Person::setBirthday(const QDate &value) {
|
||
birthday = value;
|
||
}
|
||
QString Person::getCustomPictureFileName() const {
|
||
return customPictureFileName;
|
||
}
|
||
|
||
void Person::setCustomPictureFileName(const QString &value) {
|
||
customPictureFileName = value;
|
||
}
|
||
QList<QSharedPointer<Contact> > Person::getContacts() const {
|
||
return contacts;
|
||
}
|
||
|
||
void Person::setContacts(const QList<QSharedPointer<Contact> > &value) {
|
||
contacts = value;
|
||
}
|
||
QList<QSharedPointer<Address> > Person::getAddresses() const {
|
||
return addresses;
|
||
}
|
||
|
||
void Person::setAddresses(const QList<QSharedPointer<Address> > &value) {
|
||
addresses = value;
|
||
}
|
||
QList<QSharedPointer<Group> > Person::getGroups() const {
|
||
return groups;
|
||
}
|
||
|
||
void Person::setGroups(const QList<QSharedPointer<Group> > &value) {
|
||
groups = value;
|
||
}
|
||
|
||
void Person::addContact(Contact *contact) {
|
||
this->contacts.append(QSharedPointer<Contact>(contact));
|
||
}
|
||
|
||
void Person::addAddress(Address *address) {
|
||
this->addresses.append(QSharedPointer<Address>(address));
|
||
}
|
||
|
||
QList<QSharedPointer<Group> > Person::getMaintainedGroups() const {
|
||
return maintainedGroups;
|
||
}
|
||
|
||
void Person::setMaintainedGroups(const QList<QSharedPointer<Group> > &value) {
|
||
maintainedGroups = value;
|
||
|
||
}
|
||
|
samples/simple/person.h | ||
---|---|---|
#ifndef PERSON_H
|
||
#define PERSON_H
|
||
|
||
#include <QDateTime>
|
||
#include <QString>
|
||
#include <QList>
|
||
#include <QObject>
|
||
#include <QAbstractListModel>
|
||
#include <QDebug>
|
||
#include "entity.h"
|
||
|
||
using namespace CuteEntityManager;
|
||
class Group;
|
||
class Contact;
|
||
class Address;
|
||
|
||
class Person: public Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Person)
|
||
Q_PROPERTY(QString firstName READ getFirstName WRITE setFirstName)
|
||
Q_PROPERTY(QString familyName READ getFamilyName WRITE setFamilyName)
|
||
Q_PROPERTY(QString namePrefix READ getNamePrefix WRITE setNamePrefix)
|
||
Q_PROPERTY(QString nickName READ getNickName WRITE setNickName)
|
||
Q_PROPERTY(QString customPictureFileName READ getCustomPictureFileName WRITE
|
||
setCustomPictureFileName)
|
||
Q_PROPERTY(QDate birthday READ getBirthday WRITE setBirthday)
|
||
Q_PROPERTY(QList<QSharedPointer<Group>> groups READ getGroups WRITE setGroups)
|
||
Q_PROPERTY(QList<QSharedPointer<Group>> maintainedGroups READ
|
||
getMaintainedGroups WRITE setMaintainedGroups)
|
||
Q_PROPERTY(QList<QSharedPointer<Contact>> contacts READ getContacts WRITE
|
||
setContacts)
|
||
Q_PROPERTY(QList<QSharedPointer<Address>> addresses READ
|
||
getAddresses WRITE setAddresses)
|
||
|
||
public:
|
||
enum class NameOrder {FIRST_FAMILY_NAME_ORDER, FAMILY_FIRST_NAME_ORDER};
|
||
Q_INVOKABLE explicit Person(QObject *parent = 0);
|
||
Person(QString firstName, QString familyName,
|
||
QString customPictureFileName = QString(), QString namePrefix = QString(),
|
||
QString nickName = QString(), QDate birthday = QDate(), QObject *parent = 0);
|
||
|
||
virtual const QHash<QString, CuteEntityManager::Relation> getRelations() const override;
|
||
|
||
bool isPresent(QDateTime date = QDateTime::currentDateTime());
|
||
QString fullName(NameOrder nameOrder = NameOrder::FAMILY_FIRST_NAME_ORDER)
|
||
const;
|
||
|
||
QString getFirstName() const;
|
||
void setFirstName(const QString &value);
|
||
|
||
QString getFamilyName() const;
|
||
void setFamilyName(const QString &value);
|
||
|
||
QString getNamePrefix() const;
|
||
void setNamePrefix(const QString &value);
|
||
|
||
QString getNickName() const;
|
||
void setNickName(const QString &value);
|
||
|
||
QDate getBirthday() const;
|
||
void setBirthday(const QDate &value);
|
||
|
||
QString getCustomPictureFileName() const;
|
||
void setCustomPictureFileName(const QString &value);
|
||
|
||
QList<QSharedPointer<Contact> > getContacts() const;
|
||
void setContacts(const QList<QSharedPointer<Contact> > &value);
|
||
|
||
QList<QSharedPointer<Address> > getAddresses() const;
|
||
void setAddresses(const QList<QSharedPointer<Address> > &value);
|
||
|
||
QList<QSharedPointer<Group> > getGroups() const;
|
||
void setGroups(const QList<QSharedPointer<Group> > &value);
|
||
|
||
void addContact(Contact *contact);
|
||
void addAddress(Address *address);
|
||
|
||
QList<QSharedPointer<Group> > getMaintainedGroups() const;
|
||
void setMaintainedGroups(const QList<QSharedPointer<Group> > &value);
|
||
|
||
protected:
|
||
QString firstName;
|
||
QString familyName;
|
||
QString namePrefix;
|
||
QString nickName;
|
||
QDate birthday;
|
||
QString customPictureFileName;
|
||
QList <QSharedPointer<Contact>> contacts;
|
||
QList <QSharedPointer<Address>> addresses;
|
||
QList <QSharedPointer<Group>> groups;
|
||
QList <QSharedPointer<Group>> maintainedGroups;
|
||
|
||
};
|
||
|
||
|
||
#endif // PERSON_H
|
samples/simple/pupil.cpp | ||
---|---|---|
#include "pupil.h"
|
||
|
||
Pupil::Pupil() : Person() {
|
||
|
||
}
|
||
|
||
Pupil::Pupil(QString firstName, QString familyName,
|
||
QString customPictureFileName, QString namePrefix, QString nickName,
|
||
QDate birthday, QString legalGuardianNote, QObject *parent)
|
||
: Person(firstName, familyName, customPictureFileName, namePrefix,
|
||
nickName, birthday, parent) {
|
||
setFirstName(firstName);
|
||
setFamilyName(familyName);
|
||
setNamePrefix(namePrefix);
|
||
setNickName(nickName);
|
||
setBirthday(birthday);
|
||
setCustomPictureFileName(customPictureFileName);
|
||
this->setLegalGuardianNote(legalGuardianNote);
|
||
}
|
||
|
||
QString Pupil::getLegalGuardianNote() const {
|
||
return legalGuardianNote;
|
||
}
|
||
|
||
void Pupil::setLegalGuardianNote(const QString &value) {
|
||
legalGuardianNote = value;
|
||
}
|
||
|
||
const QHash<QString, Relation> Pupil::getRelations() const {
|
||
auto hash = Person::getRelations();
|
||
hash.insert("groups", CuteEntityManager::Relation("groups",
|
||
RelationType::MANY_TO_MANY));
|
||
return hash;
|
||
}
|
samples/simple/pupil.h | ||
---|---|---|
#ifndef PUPIL_H
|
||
#define PUPIL_H
|
||
#include "person.h"
|
||
|
||
class Pupil : public Person {
|
||
Q_OBJECT
|
||
EM_MACRO(Pupil)
|
||
Q_PROPERTY(QString legalGuardianNote READ getLegalGuardianNote WRITE
|
||
setLegalGuardianNote)
|
||
public:
|
||
Q_INVOKABLE Pupil();
|
||
Pupil(QString firstName, QString familyName,
|
||
QString customPictureFileName = QString(), QString namePrefix = QString(),
|
||
QString nickName = QString(), QDate birthday = QDate(), QString legalGuardianNote = "", QObject *parent = 0);
|
||
|
||
QString getLegalGuardianNote() const;
|
||
void setLegalGuardianNote(const QString &value);
|
||
virtual const QHash<QString, CuteEntityManager::Relation> getRelations() const override;
|
||
|
||
QString getForm() const;
|
||
void setForm(const QString &value);
|
||
|
||
protected:
|
||
QString legalGuardianNote;
|
||
|
||
};
|
||
|
||
#endif // PUPIL_H
|
samples/simple/ratingmarkdefinition.cpp | ||
---|---|---|
#include "ratingmarkdefinition.h"
|
||
|
||
RatingMarkDefinition::RatingMarkDefinition()
|
||
:Incident()
|
||
{
|
||
m_ratingMarkSystem = QSharedPointer<RatingMarkSystem>();
|
||
m_symbol = QString();
|
||
m_valueEquivalent = -999;
|
||
m_minValue = -999;
|
||
m_percentEquivalent = -999;
|
||
m_minPercent = -999;
|
||
m_rateable = true;
|
||
m_panelColumn = -1;
|
||
m_panelRow = -1;
|
||
}
|
||
|
||
QSharedPointer<RatingMarkSystem> RatingMarkDefinition::ratingMarkSystem() const
|
||
{
|
||
return m_ratingMarkSystem;
|
||
}
|
||
|
||
void RatingMarkDefinition::setRatingMarkSystem(const QSharedPointer<RatingMarkSystem> &ratingMarkSystem)
|
||
{
|
||
m_ratingMarkSystem = ratingMarkSystem;
|
||
}
|
||
|
||
QString RatingMarkDefinition::symbol() const
|
||
{
|
||
return m_symbol;
|
||
}
|
||
|
||
void RatingMarkDefinition::setSymbol(const QString &symbol)
|
||
{
|
||
m_symbol = symbol;
|
||
}
|
||
|
||
qreal RatingMarkDefinition::valueEquivalent() const
|
||
{
|
||
return m_valueEquivalent;
|
||
}
|
||
|
||
void RatingMarkDefinition::setValueEquivalent(const qreal &valueEquivalent)
|
||
{
|
||
m_valueEquivalent = valueEquivalent;
|
||
}
|
||
|
||
qreal RatingMarkDefinition::minValue() const
|
||
{
|
||
return m_minValue;
|
||
}
|
||
|
||
void RatingMarkDefinition::setMinValue(const qreal &minValue)
|
||
{
|
||
m_minValue = minValue;
|
||
}
|
||
|
||
qreal RatingMarkDefinition::percentEquivalent() const
|
||
{
|
||
return m_percentEquivalent;
|
||
}
|
||
|
||
void RatingMarkDefinition::setPercentEquivalent(const qreal &percentEquivalent)
|
||
{
|
||
m_percentEquivalent = percentEquivalent;
|
||
}
|
||
|
||
qreal RatingMarkDefinition::minPercent() const
|
||
{
|
||
return m_minPercent;
|
||
}
|
||
|
||
void RatingMarkDefinition::setMinPercent(const qreal &minimumPercent)
|
||
{
|
||
m_minPercent = minimumPercent;
|
||
}
|
||
|
||
bool RatingMarkDefinition::rateable() const
|
||
{
|
||
return m_rateable;
|
||
}
|
||
|
||
void RatingMarkDefinition::setRateable(bool rateable)
|
||
{
|
||
m_rateable = rateable;
|
||
}
|
||
|
||
int RatingMarkDefinition::panelColumn() const
|
||
{
|
||
return m_panelColumn;
|
||
}
|
||
|
||
void RatingMarkDefinition::setPanelColumn(int panelColumn)
|
||
{
|
||
m_panelColumn = panelColumn;
|
||
}
|
||
|
||
int RatingMarkDefinition::panelRow() const
|
||
{
|
||
return m_panelRow;
|
||
}
|
||
|
||
void RatingMarkDefinition::setPanelRow(int panelRow)
|
||
{
|
||
m_panelRow = panelRow;
|
||
}
|
||
|
||
const QHash<QString, Relation> RatingMarkDefinition::getRelations() const
|
||
{
|
||
auto hash = Incident::getRelations();
|
||
hash.insert("ratingMarkSystem",Relation("ratingMarkSystem",CuteEntityManager::RelationType::MANY_TO_ONE));
|
||
|
||
return hash;
|
||
}
|
||
|
||
bool RatingMarkDefinition::lessThanPercent(const QSharedPointer<RatingMarkDefinition> &a, const QSharedPointer<RatingMarkDefinition> &b)
|
||
{
|
||
return a->percentEquivalent() < b->percentEquivalent();
|
||
}
|
samples/simple/ratingmarkdefinition.h | ||
---|---|---|
#ifndef RATINGMARKDEFINITION_H
|
||
#define RATINGMARKDEFINITION_H
|
||
|
||
#include <QObject>
|
||
|
||
#include "entity.h"
|
||
#include "incident.h"
|
||
#include "enums.h"
|
||
|
||
class RatingMarkSystem;
|
||
|
||
using namespace CuteEntityManager;
|
||
|
||
/**
|
||
* @brief The RatingMarkDefinition class
|
||
*
|
||
*/
|
||
class RatingMarkDefinition : public Incident
|
||
{
|
||
Q_OBJECT
|
||
EM_MACRO(RatingMarkDefinition)
|
||
Q_PROPERTY(QSharedPointer<RatingMarkSystem> ratingMarkSystem READ ratingMarkSystem WRITE setRatingMarkSystem)
|
||
Q_PROPERTY(QString symbol READ symbol WRITE setSymbol)
|
||
Q_PROPERTY(qreal valueEquivalent READ valueEquivalent WRITE setValueEquivalent)
|
||
Q_PROPERTY(qreal minValue READ minValue WRITE setMinValue)
|
||
Q_PROPERTY(qreal percentEquivalent READ percentEquivalent WRITE setPercentEquivalent)
|
||
Q_PROPERTY(qreal minPercent READ minPercent WRITE setMinPercent)
|
||
Q_PROPERTY(bool rateable READ rateable WRITE setRateable)
|
||
Q_PROPERTY(int panelColumn READ panelColumn WRITE setPanelColumn)
|
||
Q_PROPERTY(int panelRow READ panelRow WRITE setPanelRow)
|
||
|
||
public:
|
||
Q_INVOKABLE RatingMarkDefinition();
|
||
|
||
QSharedPointer<RatingMarkSystem> ratingMarkSystem() const;
|
||
void setRatingMarkSystem(const QSharedPointer<RatingMarkSystem> &ratingMarkSystem);
|
||
|
||
QString symbol() const;
|
||
void setSymbol(const QString &symbol);
|
||
|
||
qreal valueEquivalent() const;
|
||
void setValueEquivalent(const qreal &valueEquivalent);
|
||
|
||
qreal minValue() const;
|
||
void setMinValue(const qreal &minValue);
|
||
|
||
qreal percentEquivalent() const;
|
||
void setPercentEquivalent(const qreal &percentEquivalent);
|
||
|
||
qreal minPercent() const;
|
||
void setMinPercent(const qreal &minPercent);
|
||
|
||
bool rateable() const;
|
||
void setRateable(bool rateable);
|
||
|
||
int panelColumn() const;
|
||
void setPanelColumn(int panelColumn);
|
||
|
||
int panelRow() const;
|
||
void setPanelRow(int panelRow);
|
||
|
||
virtual const QHash<QString, CuteEntityManager::Relation> getRelations() const override;
|
||
virtual InheritanceStrategy getInheritanceStrategy() const override { return InheritanceStrategy::PER_CLASS_TABLE; }
|
||
|
||
|
||
static bool lessThanPercent(const QSharedPointer<RatingMarkDefinition> &a, const QSharedPointer<RatingMarkDefinition> &b);
|
||
|
||
protected:
|
||
QSharedPointer<RatingMarkSystem> m_ratingMarkSystem;
|
||
QString m_symbol;
|
||
qreal m_valueEquivalent;
|
||
qreal m_minValue;
|
||
qreal m_percentEquivalent;
|
||
qreal m_minPercent;
|
||
bool m_rateable;
|
||
int m_panelColumn;
|
||
int m_panelRow;
|
||
};
|
||
|
||
#endif // RATINGMARKDEFINITION_H
|
samples/simple/ratingmarkincident.cpp | ||
---|---|---|
#include "ratingmarkincident.h"
|
||
|
||
RatingMarkIncident::RatingMarkIncident()
|
||
{
|
||
|
||
}
|
||
|
||
QString RatingMarkIncident::symbol() const
|
||
{
|
||
return m_symbol;
|
||
}
|
||
|
||
void RatingMarkIncident::setSymbol(const QString &symbol)
|
||
{
|
||
m_symbol = symbol;
|
||
}
|
||
|
||
qreal RatingMarkIncident::value() const
|
||
{
|
||
return m_value;
|
||
}
|
||
|
||
void RatingMarkIncident::setValue(const qreal &value)
|
||
{
|
||
m_value = value;
|
||
}
|
||
|
||
qreal RatingMarkIncident::percentValue() const
|
||
{
|
||
return m_percentValue;
|
||
}
|
||
|
||
void RatingMarkIncident::setPercentValue(const qreal &percentValue)
|
||
{
|
||
m_percentValue = percentValue;
|
||
}
|
||
|
||
qreal RatingMarkIncident::weight() const
|
||
{
|
||
return m_weight;
|
||
}
|
||
|
||
void RatingMarkIncident::setWeight(const qreal &weight)
|
||
{
|
||
m_weight = weight;
|
||
}
|
||
|
||
bool RatingMarkIncident::rateable() const
|
||
{
|
||
return m_rateable;
|
||
}
|
||
|
||
void RatingMarkIncident::setRateable(bool rateable)
|
||
{
|
||
m_rateable = rateable;
|
||
}
|
||
|
||
QSharedPointer<Occasion> RatingMarkIncident::occasion() const
|
||
{
|
||
return m_occasion;
|
||
}
|
||
|
||
void RatingMarkIncident::setOccasion(const QSharedPointer<Occasion> &occasion)
|
||
{
|
||
m_occasion = occasion;
|
||
}
|
||
|
||
const QHash<QString, Relation> RatingMarkIncident::getRelations() const
|
||
{
|
||
auto hash = Incident::getRelations();
|
||
hash.insert("occasion",Relation("occasion",CuteEntityManager::RelationType::MANY_TO_ONE));
|
||
hash.insert("ratingMarkSystem", Relation("ratingMarkSystem",RelationType::MANY_TO_ONE));
|
||
return hash;
|
||
}
|
||
|
||
QSharedPointer<RatingMarkSystem> RatingMarkIncident::ratingMarkSystem() const
|
||
{
|
||
return m_ratingMarkSystem;
|
||
}
|
||
|
||
void RatingMarkIncident::setRatingMarkSystem(const QSharedPointer<RatingMarkSystem> &ratingMarkSystem)
|
||
{
|
||
m_ratingMarkSystem = ratingMarkSystem;
|
||
}
|
||
|
||
bool RatingMarkIncident::signatureNeeded() const
|
||
{
|
||
return m_signatureNeeded;
|
||
}
|
||
|
||
void RatingMarkIncident::setSignatureNeeded(bool signatureNeeded)
|
||
{
|
||
m_signatureNeeded = signatureNeeded;
|
||
}
|
samples/simple/ratingmarkincident.h | ||
---|---|---|
#ifndef RATINGMARKINCIDENT_H
|
||
#define RATINGMARKINCIDENT_H
|
||
|
||
#include <QObject>
|
||
|
||
#include "incident.h"
|
||
#include "occasion.h"
|
||
#include "ratingmarksystem.h"
|
||
|
||
class AppData;
|
||
class RatingMarkIncident : public Incident
|
||
{
|
||
Q_OBJECT
|
||
EM_MACRO(RatingMarkIncident)
|
||
Q_PROPERTY(QString symbol READ symbol WRITE setSymbol)
|
||
Q_PROPERTY(qreal value READ value WRITE setValue)
|
||
Q_PROPERTY(qreal percentValue READ percentValue WRITE setPercentValue)
|
||
Q_PROPERTY(qreal weight READ weight WRITE setWeight)
|
||
Q_PROPERTY(bool rateable READ rateable WRITE setRateable)
|
||
Q_PROPERTY(bool signatureNeeded READ signatureNeeded WRITE setSignatureNeeded)
|
||
Q_PROPERTY(QSharedPointer<Occasion> occasion READ occasion WRITE setOccasion)
|
||
// ratingMarkSystem scheint auf den ersten Blick ein Duplikat zu sein, da man es aus AppData
|
||
// (zu AppRatingData gecastet) ermitteln könnte. In der TimeMachine ist es jedoch wichtig, dass
|
||
// bei einem für die App geänderten RatingMarkSystem ein alter RatingMarkIncident noch sein
|
||
// ursprüngliches RatingMarkSystem kennt.
|
||
Q_PROPERTY(QSharedPointer<RatingMarkSystem> ratingMarkSystem READ ratingMarkSystem WRITE setRatingMarkSystem)
|
||
public:
|
||
Q_INVOKABLE RatingMarkIncident();
|
||
|
||
QString symbol() const;
|
||
void setSymbol(const QString &symbol);
|
||
|
||
qreal value() const;
|
||
void setValue(const qreal &value);
|
||
|
||
qreal percentValue() const;
|
||
void setPercentValue(const qreal &percentValue);
|
||
|
||
qreal weight() const;
|
||
void setWeight(const qreal &weight);
|
||
|
||
bool rateable() const;
|
||
void setRateable(bool rateable);
|
||
|
||
QSharedPointer<Occasion> occasion() const;
|
||
void setOccasion(const QSharedPointer<Occasion> &occasion);
|
||
|
||
virtual const QHash<QString, CuteEntityManager::Relation> getRelations() const override;
|
||
virtual InheritanceStrategy getInheritanceStrategy() const override { return InheritanceStrategy::PER_CLASS_TABLE; }
|
||
|
||
|
||
QSharedPointer<RatingMarkSystem> ratingMarkSystem() const;
|
||
void setRatingMarkSystem(const QSharedPointer<RatingMarkSystem> &ratingMarkSystem);
|
||
|
||
bool signatureNeeded() const;
|
||
void setSignatureNeeded(bool signatureNeeded);
|
||
|
||
protected:
|
||
QString m_symbol = QString();
|
||
qreal m_value = 0;
|
||
qreal m_percentValue = 0;
|
||
qreal m_weight = 1;
|
||
bool m_rateable = true;
|
||
bool m_signatureNeeded = false;
|
||
QSharedPointer<Occasion> m_occasion = QSharedPointer<Occasion>();
|
||
QSharedPointer<RatingMarkSystem> m_ratingMarkSystem = QSharedPointer<RatingMarkSystem>();
|
||
};
|
||
|
||
#endif // RATINGMARK_H
|
samples/simple/ratingmarksystem.cpp | ||
---|---|---|
#include "ratingmarksystem.h"
|
||
#include "ratingmarkincident.h"
|
||
#include "occasion.h"
|
||
|
||
#include <QDebug>
|
||
#include <QtMath>
|
||
|
||
RatingMarkSystem::RatingMarkSystem()
|
||
{
|
||
|
||
}
|
||
|
||
QString RatingMarkSystem::name() const
|
||
{
|
||
return m_name;
|
||
}
|
||
|
||
void RatingMarkSystem::setName(const QString &name)
|
||
{
|
||
m_name = name;
|
||
}
|
||
|
||
QList<QSharedPointer<RatingMarkDefinition> > RatingMarkSystem::ratingMarkDefinitions() const
|
||
{
|
||
return m_ratingMarkDefinitions;
|
||
}
|
||
|
||
void RatingMarkSystem::setRatingMarkDefinitions(const QList<QSharedPointer<RatingMarkDefinition> > &ratingMarkDefinitions)
|
||
{
|
||
m_ratingMarkDefinitions = ratingMarkDefinitions;
|
||
}
|
||
|
||
bool RatingMarkSystem::valuesComputable() const
|
||
{
|
||
return m_valuesComputable;
|
||
}
|
||
|
||
void RatingMarkSystem::setValuesComputable(bool valuesComputable)
|
||
{
|
||
m_valuesComputable = valuesComputable;
|
||
}
|
||
|
||
bool RatingMarkSystem::higherValueBetter() const
|
||
{
|
||
return m_higherValueBetter;
|
||
}
|
||
|
||
void RatingMarkSystem::setHigherValueBetter(bool value)
|
||
{
|
||
m_higherValueBetter = value;
|
||
}
|
||
|
||
int RatingMarkSystem::digits() const
|
||
{
|
||
return m_digits;
|
||
}
|
||
|
||
void RatingMarkSystem::setDigits(int value)
|
||
{
|
||
m_digits = value;
|
||
}
|
||
|
||
const QHash<QString, Relation> RatingMarkSystem::getRelations() const
|
||
{
|
||
auto hash = Incident::getRelations();
|
||
hash.insert("ratingMarkDefinitions",Relation("ratingMarkDefinitions",CuteEntityManager::RelationType::ONE_TO_MANY,QString("ratingMarkSystem")));
|
||
|
||
return hash;
|
||
}
|
||
|
||
QSharedPointer<RatingMarkDefinition> RatingMarkSystem::ratingMarkDefinitionAtPanelPosition(int col, int row)
|
||
{
|
||
for (int i = 0; i < this->ratingMarkDefinitions().count(); i++) {
|
||
QSharedPointer<RatingMarkDefinition> rmd = this->ratingMarkDefinitions().at(i);
|
||
if (rmd->panelColumn() == col) {
|
||
if (rmd->panelRow() == row) {
|
||
return rmd;
|
||
}
|
||
}
|
||
}
|
||
return QSharedPointer<RatingMarkDefinition>();
|
||
}
|
||
|
||
int RatingMarkSystem::panelColumns() const
|
||
{
|
||
return m_panelColumns;
|
||
}
|
||
|
||
void RatingMarkSystem::setPanelColumns(int panelColumns)
|
||
{
|
||
m_panelColumns = panelColumns;
|
||
}
|
||
|
||
int RatingMarkSystem::panelRows() const
|
||
{
|
||
return m_panelRows;
|
||
}
|
||
|
||
void RatingMarkSystem::setPanelRows(int panelRows)
|
||
{
|
||
m_panelRows = panelRows;
|
||
}
|
||
|
||
bool RatingMarkSystem::lessThanPercent(const QSharedPointer<RatingMarkIncident> &a, const QSharedPointer<RatingMarkIncident> &b)
|
||
{
|
||
return a->percentValue() < b->percentValue();
|
||
}
|
||
bool RatingMarkSystem::moreThanPercent(const QSharedPointer<RatingMarkIncident> &a, const QSharedPointer<RatingMarkIncident> &b)
|
||
{
|
||
return a->percentValue() > b->percentValue();
|
||
}
|
||
bool RatingMarkSystem::lessThanValue(const QSharedPointer<RatingMarkIncident> &a, const QSharedPointer<RatingMarkIncident> &b)
|
||
{
|
||
return a->value() < b->value();
|
||
}
|
||
bool RatingMarkSystem::moreThanValue(const QSharedPointer<RatingMarkIncident> &a, const QSharedPointer<RatingMarkIncident> &b)
|
||
{
|
||
return a->value() > b->value();
|
||
}
|
||
QList<QSharedPointer<RatingMarkIncident> > RatingMarkSystem::sortPercent(QList<QSharedPointer<RatingMarkIncident> > list, Qt::SortOrder sortOrder)
|
||
{
|
||
if (sortOrder == Qt::AscendingOrder) {
|
||
std::sort(list.begin(),list.end(),RatingMarkSystem::lessThanPercent);
|
||
} else {
|
||
std::sort(list.begin(),list.end(),RatingMarkSystem::moreThanPercent);
|
||
}
|
||
return list;
|
||
}
|
||
|
||
QList<QSharedPointer<RatingMarkIncident> > RatingMarkSystem::sortValue(QList<QSharedPointer<RatingMarkIncident> > list, Qt::SortOrder sortOrder)
|
||
{
|
||
if (sortOrder == Qt::AscendingOrder) {
|
||
std::sort(list.begin(),list.end(),RatingMarkSystem::lessThanValue);
|
||
} else {
|
||
std::sort(list.begin(),list.end(),RatingMarkSystem::moreThanValue);
|
||
}
|
||
return list;
|
||
}
|
||
|
||
bool RatingMarkSystem::shallBeCalculated(QSharedPointer<RatingMarkIncident> inc, QSharedPointer<Occasion> occasion, bool respectRateabilityProperty) {
|
||
if (!occasion.isNull() && (occasion != inc->occasion())) {
|
||
return false;
|
||
}
|
||
if (respectRateabilityProperty && !inc->rateable()) {
|
||
return false;
|
||
}
|
||
return true;
|
||
|
||
}
|
||
|
||
qreal RatingMarkSystem::averageSomeFloatProperty(QList<QSharedPointer<RatingMarkIncident> > list,
|
||
QString propertyName,
|
||
QSharedPointer<Occasion> occasion,
|
||
int digits,
|
||
Enums::RoundingOption rounding,
|
||
bool respectWeight,
|
||
bool respectRateabilityProperty)
|
||
{
|
||
qreal sum = 0;
|
||
qreal weightSum = 0;
|
||
QListIterator<QSharedPointer<RatingMarkIncident> > iter(list);
|
||
bool ok = true;
|
||
|
||
while (ok && iter.hasNext()) {
|
||
QSharedPointer<RatingMarkIncident> inc = iter.next();
|
||
qreal addValue;
|
||
QVariant var = inc->getProperty(propertyName);
|
||
if (var.isValid() && !var.isNull()) {
|
||
addValue = var.toFloat(&ok);
|
||
if (!ok) {
|
||
qDebug()<<"RatingMarkSystem::averageSomeFloatProperty: Float conversion of "<<propertyName<<" was not successful. ";
|
||
}
|
||
} else {
|
||
ok = false;
|
||
qDebug()<<"RatingMarkSystem::averageSomeFloatProperty: "<<propertyName<<" was not found - typo?";
|
||
}
|
||
if (ok && this->shallBeCalculated(inc, occasion, respectRateabilityProperty)) {
|
||
qreal weight = respectWeight ? inc->weight() : 1;
|
||
if (weight < -Enums::EPSILON_CALCULATION) {
|
||
ok = true;
|
||
}
|
||
sum += weight * addValue;
|
||
weightSum += weight;
|
||
}
|
||
}
|
||
Q_ASSERT(ok);
|
||
return !ok? -1 : ((qAbs(weightSum) < Enums::EPSILON_CALCULATION)? -1 : this->shortenNumber(sum / weightSum, digits, rounding));
|
||
}
|
||
|
||
qreal RatingMarkSystem::averagePercent(const QList<QSharedPointer<RatingMarkIncident> > list,
|
||
QSharedPointer<Occasion> occasion,
|
||
int digits,
|
||
Enums::RoundingOption rounding,
|
||
bool respectWeight,
|
||
bool respectRateabilityProperty)
|
||
{
|
||
return this->averageSomeFloatProperty(list,"percentValue", occasion, digits, rounding, respectWeight, respectRateabilityProperty);
|
||
}
|
||
|
||
qreal RatingMarkSystem::averageValueSimple(QList<QSharedPointer<RatingMarkIncident> > list,
|
||
QSharedPointer<Occasion> occasion,
|
||
int digits,
|
||
Enums::RoundingOption rounding,
|
||
bool respectWeight,
|
||
bool respectRateabilityProperty)
|
||
{
|
||
return this->averageSomeFloatProperty(list,"value", occasion, digits, rounding, respectWeight, respectRateabilityProperty);
|
||
}
|
||
|
||
qreal RatingMarkSystem::symbolToPercent(QString symbol)
|
||
{
|
||
QListIterator<QSharedPointer<RatingMarkDefinition>>iter (this->ratingMarkDefinitions());
|
||
bool found = false;
|
||
QSharedPointer<RatingMarkDefinition> def;
|
||
while (!found && iter.hasNext()) {
|
||
def = iter.next();
|
||
if (def->symbol() == symbol) {
|
||
found = true;
|
||
}
|
||
}
|
||
return found? def->percentEquivalent() : -1;
|
||
}
|
||
|
||
QString RatingMarkSystem::percentToSymbol(qreal percent)
|
||
{
|
||
QListIterator<QSharedPointer<RatingMarkDefinition>>iter (this->ratingMarkDefinitions());
|
||
QSharedPointer<RatingMarkDefinition> candidate;
|
||
while (iter.hasNext()) {
|
||
QSharedPointer<RatingMarkDefinition> def;
|
||
def = iter.next();
|
||
if (def->minPercent() <= percent){
|
||
if (candidate.isNull()) {
|
||
candidate = def;
|
||
} else {
|
||
if (def->minPercent() > candidate->minPercent()) {
|
||
candidate = def;
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
return candidate.isNull()? QString() : candidate->symbol();
|
||
}
|
||
|
||
qreal RatingMarkSystem::shortenNumber(qreal nr, int digits, Enums::RoundingOption rounding)
|
||
{
|
||
if (digits >= 0) {
|
||
int factor = 1;
|
||
if (digits > 0) {
|
||
factor = qPow(10, digits);
|
||
nr *= factor;
|
||
}
|
||
qDebug()<<"Factor: "<<factor;
|
||
switch (rounding) {
|
||
case Enums::RoundingOption::ROUND:
|
||
nr = qRound(nr);
|
||
break;
|
||
case Enums::RoundingOption::CEILING:
|
||
nr = qCeil(nr);
|
||
break;
|
||
case Enums::RoundingOption::FLOOR:
|
||
nr = qFloor(nr);
|
||
break;
|
||
}
|
||
if (digits > 0) {
|
||
nr /= factor;
|
||
}
|
||
}
|
||
return nr;
|
||
}
|
||
|
||
|
||
|
samples/simple/ratingmarksystem.h | ||
---|---|---|
#ifndef RATINGMARKSYSTEM_H
|
||
#define RATINGMARKSYSTEM_H
|
||
|
||
#include "ratingmarkdefinition.h"
|
||
|
||
class RatingMarkIncident;
|
||
class Occasion;
|
||
////////////////////////////////////////////////
|
||
/// \brief The RatingMarkSystem class
|
||
///
|
||
/// A rating mark system defines a set of rating marks that are able
|
||
/// to evaluate the achievement of pupils.
|
||
/// Rating marks can base on numbers or plain symbols, they not have to
|
||
/// be equidistant, not even ordinal.
|
||
///
|
||
/// "ratingMarkDefinitions" keeps the actual symbols, values and boundaries
|
||
///
|
||
/// "valuesComputable" means that intermediate values can be calculated,
|
||
/// e.g. 1.3 and 1.0 could be averaged to a value of 1.15.
|
||
///
|
||
/// "digits" states, how many digits after the decimal point are to be
|
||
/// kept and taken into calculation
|
||
///
|
||
/// "higherValueBetter" is true for a system, where a higher value means
|
||
/// a better mark (greater achievement).
|
||
///
|
||
/// "panelColumns" and "panelRows" give QML information about the layout of the input panel for this system
|
||
|
||
class RatingMarkSystem : public Incident
|
||
{
|
||
Q_OBJECT
|
||
EM_MACRO(RatingMarkSystem)
|
||
Q_PROPERTY(QList<QSharedPointer<RatingMarkDefinition>> ratingMarkDefinitions READ ratingMarkDefinitions WRITE setRatingMarkDefinitions)
|
||
Q_PROPERTY(QString name READ name WRITE setName)
|
||
Q_PROPERTY(bool valuesComputable READ valuesComputable WRITE setValuesComputable)
|
||
Q_PROPERTY(int digits READ digits WRITE setDigits)
|
||
Q_PROPERTY(bool higherValueBetter READ higherValueBetter WRITE setHigherValueBetter)
|
||
Q_PROPERTY(int panelColumns READ panelColumns WRITE setPanelColumns)
|
||
Q_PROPERTY(int panelRows READ panelRows WRITE setPanelRows)
|
||
public:
|
||
Q_INVOKABLE RatingMarkSystem();
|
||
|
||
|
||
QString name() const;
|
||
void setName(const QString &name);
|
||
|
||
QList<QSharedPointer<RatingMarkDefinition> > ratingMarkDefinitions() const;
|
||
void setRatingMarkDefinitions(const QList<QSharedPointer<RatingMarkDefinition> > &ratingMarkDefinitions);
|
||
|
||
bool valuesComputable() const;
|
||
void setValuesComputable(bool valuesComputable);
|
||
|
||
bool higherValueBetter() const;
|
||
void setHigherValueBetter(bool value);
|
||
|
||
int digits() const;
|
||
void setDigits(int value);
|
||
|
||
virtual const QHash<QString, CuteEntityManager::Relation> getRelations() const override;
|
||
virtual InheritanceStrategy getInheritanceStrategy() const override { return InheritanceStrategy::PER_CLASS_TABLE; }
|
||
|
||
|
||
QSharedPointer<RatingMarkDefinition>ratingMarkDefinitionAtPanelPosition(int col, int row);
|
||
|
||
int panelColumns() const;
|
||
void setPanelColumns(int panelColumns);
|
||
|
||
int panelRows() const;
|
||
void setPanelRows(int panelRows);
|
||
|
||
static bool lessThanPercent(const QSharedPointer<RatingMarkIncident> &a, const QSharedPointer<RatingMarkIncident> &b);
|
||
static bool moreThanPercent(const QSharedPointer<RatingMarkIncident> &a, const QSharedPointer<RatingMarkIncident> &b);
|
||
static bool lessThanValue(const QSharedPointer<RatingMarkIncident> &a, const QSharedPointer<RatingMarkIncident> &b);
|
||
static bool moreThanValue(const QSharedPointer<RatingMarkIncident> &a, const QSharedPointer<RatingMarkIncident> &b);
|
||
virtual QList<QSharedPointer<RatingMarkIncident>> sortPercent(QList<QSharedPointer<RatingMarkIncident>> list, Qt::SortOrder sortOrder);
|
||
virtual QList<QSharedPointer<RatingMarkIncident>> sortValue(QList<QSharedPointer<RatingMarkIncident>> list, Qt::SortOrder sortOrder);
|
||
|
||
|
||
virtual qreal averagePercent(QList<QSharedPointer<RatingMarkIncident>> list,
|
||
QSharedPointer<Occasion> occasion,
|
||
int digits = -1,
|
||
Enums::RoundingOption rounding = Enums::RoundingOption::ROUND,
|
||
bool respectWeight = true,
|
||
bool respectRateabilityProperty = true);
|
||
virtual qreal averageValueSimple(QList<QSharedPointer<RatingMarkIncident>> list,
|
||
QSharedPointer<Occasion> occasion,
|
||
int digits = -1,
|
||
Enums::RoundingOption rounding = Enums::RoundingOption::ROUND,
|
||
bool respectWeight = true,
|
||
bool respectRateabilityProperty = true);
|
||
virtual bool shallBeCalculated(QSharedPointer<RatingMarkIncident> inc,
|
||
QSharedPointer<Occasion> occasion,
|
||
bool respectRateabilityProperty = true);
|
||
|
||
|
||
qreal symbolToPercent(QString symbol);
|
||
QString percentToSymbol(qreal percent);
|
||
qreal shortenNumber(qreal nr, int digits, Enums::RoundingOption rounding);
|
||
protected:
|
||
qreal averageSomeFloatProperty(QList<QSharedPointer<RatingMarkIncident>> list,
|
||
QString propertyName,
|
||
QSharedPointer<Occasion> occasion,
|
||
int digits = -1,
|
||
Enums::RoundingOption rounding = Enums::RoundingOption::ROUND,
|
||
bool respectWeight = true,
|
||
bool respectRateabilityProperty = true);
|
||
|
||
QString m_name;
|
||
QList<QSharedPointer<RatingMarkDefinition>> m_ratingMarkDefinitions;
|
||
bool m_valuesComputable = false;
|
||
bool m_higherValueBetter = true;
|
||
int m_digits = -1;
|
||
int m_panelColumns = -1;
|
||
int m_panelRows = -1;
|
||
};
|
||
|
||
#endif // RATINGMARKSYSTEM_H
|
samples/simple/simple.pro | ||
---|---|---|
TEMPLATE = app
|
||
|
||
HEADERS += \
|
||
ratingmarkincident.h \
|
||
incident.h \
|
||
ratingmarksystem.h \
|
||
ratingmarkdefinition.h \
|
||
enums.h \
|
||
occasion.h \
|
||
datacreation.h \
|
||
address.h \
|
||
contact.h \
|
||
group.h \
|
||
person.h \
|
||
pupil.h
|
||
article.h
|
||
|
||
SOURCES += \
|
||
main.cpp \
|
||
ratingmarkincident.cpp \
|
||
incident.cpp \
|
||
ratingmarksystem.cpp \
|
||
ratingmarkdefinition.cpp \
|
||
occasion.cpp \
|
||
datacreation.cpp \
|
||
address.cpp \
|
||
contact.cpp \
|
||
group.cpp \
|
||
person.cpp \
|
||
pupil.cpp
|
||
article.cpp
|
Auch abrufbar als: Unified diff
Revert "Trying to set up a test case for #629, new problem with "silent" crash"
This reverts commit 59e17af2ab165f2e2db22ff3831822d17ba8b8ff.