X-Git-Url: https://git.toastfreeware.priv.at/toast/confclerk.git/blobdiff_plain/336fa33e20b71c122b3f29d9eb65587ac57c1b4e..9f367eb1ca61e58058b62e462f1759d87aa10ec3:/src/mvc/event.cpp diff --git a/src/mvc/event.cpp b/src/mvc/event.cpp index 1af20d5..1dc3af7 100644 --- a/src/mvc/event.cpp +++ b/src/mvc/event.cpp @@ -124,6 +124,97 @@ QStringList Event::persons() const return persons; } +QList Event::conflicts() const +{ + QSqlQuery query; + // TODO: conference ID isn't used here + query.prepare("SELECT conflict_event FROM event_conflict WHERE xid_event = :id AND xid_conference = :conf"); + query.bindValue(":id", id()); + query.bindValue(":conf", conferenceId()); + query.exec(); + // TODO: handle qeury error + //qDebug() << query.lastError(); + + QList conflicts; + while(query.next()) + conflicts.append(query.record().value("conflict_event").toInt()); + + return conflicts; +} + +bool Event::hasTimeConflict() const +{ + return conflicts().count() > 0 ? true : false; +} + +void Event::updateConflicts() +{ + qDebug() << "updating conflicts"; + QSqlQuery query; + query.prepare("SELECT id FROM event WHERE xid_conference = :conf AND ( \ + ( start <= :start1 AND ( start + duration ) >= :start2 ) \ + OR ( start >= :start3 AND ( start + duration ) <= :end1 ) \ + OR ( start <= :end2 AND ( start + duration ) >= :end3 ) ) AND favourite = 1 ORDER BY start"); + query.bindValue(":conf", conferenceId()); + query.bindValue(":start1", convertToDb(start(), QVariant::DateTime)); + query.bindValue(":start2", convertToDb(start(), QVariant::DateTime)); + query.bindValue(":start3", convertToDb(start(), QVariant::DateTime)); + query.bindValue(":end1", convertToDb(start().toTime_t()+duration(), QVariant::DateTime)); + query.bindValue(":end2", convertToDb(start().toTime_t()+duration(), QVariant::DateTime)); + query.bindValue(":end3", convertToDb(start().toTime_t()+duration(), QVariant::DateTime)); + query.exec(); + + QList conflicts; + while(query.next()) + { + int idx = query.record().value("id").toInt(); + if(idx != id()) + conflicts.append(idx); + } + + if(isFavourite()) // event became favourite + { + for(int i=0; i " << conflicts[i]; + + QSqlQuery queryRemove; + queryRemove.prepare("DELETE FROM event_conflict WHERE xid_event = :id1 AND xid_conference = :conf AND conflict_event = :id2"); + queryRemove.bindValue(":id1",conflicts[i]); + queryRemove.bindValue(":conf",conferenceId()); + queryRemove.bindValue(":id2",id()); + queryRemove.exec(); + } + } +} + void Event::setRoom(const QString &room) { Q_UNUSED(room);