From: Philipp Spitzer Date: Tue, 30 Apr 2013 21:42:38 +0000 (+0000) Subject: Now the dayChange time is taken into account. This fixes #43. X-Git-Tag: 0.6.0~12 X-Git-Url: https://git.toastfreeware.priv.at/toast/confclerk.git/commitdiff_plain/41c4cebec5eea8569bb1af1ec7434dfc8c755b2e Now the dayChange time is taken into account. This fixes #43. --- diff --git a/src/mvc/conference.h b/src/mvc/conference.h index 2da6c24..51dee99 100644 --- a/src/mvc/conference.h +++ b/src/mvc/conference.h @@ -49,6 +49,7 @@ public: QDate start() const { return value("start").toDate(); } QDate end() const { return value("end").toDate(); } int dayChange() const { return value("day_change").toInt(); } // in seconds from 00:00 + QTime dayChangeTime() const {QTime dayChangeTime(0, 0); return dayChangeTime.addSecs(dayChange());} int timeslotDuration() const { return value("timeslot_duration").toInt(); } // in seconds bool isActive() const { return value("active").toBool(); } QString url() const { return stringFromNullable(value("url")); } diff --git a/src/mvc/event.cpp b/src/mvc/event.cpp index 3e49764..c8cc349 100644 --- a/src/mvc/event.cpp +++ b/src/mvc/event.cpp @@ -17,6 +17,7 @@ * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ +#include "conference.h" #include "event.h" #include "room.h" @@ -53,24 +54,30 @@ Event Event::getById(int id, int conferenceId) { QList Event::getByDate(const QDate& date, int conferenceId, QString orderBy) { + Q_ASSERT(conferenceId > 0); + Conference conference = Conference::getById(conferenceId); + QDateTime dayStart(date, conference.dayChangeTime(), Qt::UTC); QSqlQuery query; query.prepare(selectQuery() + QString("WHERE xid_conference = :conf AND start >= :start AND start < :end ORDER BY %1").arg(orderBy)); query.bindValue(":conf", conferenceId); - query.bindValue(":start", convertToDb(date, QVariant::DateTime)); - query.bindValue(":end", convertToDb(date.addDays(1), QVariant::DateTime)); + query.bindValue(":start", dayStart.toTime_t()); + query.bindValue(":end", dayStart.addDays(1).toTime_t()); return load(query); } -QList Event::getByDateAndRoom(const QDate& date, int conferenceId) -{ + +QList Event::getByDateAndRoom(const QDate& date, int conferenceId) { + Q_ASSERT(conferenceId > 0); + Conference conference = Conference::getById(conferenceId); + QDateTime dayStart(date, conference.dayChangeTime(), Qt::UTC); QSqlQuery query; QString aliasEvent("E"); QString aliasEventRoom("R"); query.prepare(QString("SELECT %1 FROM %2 %3, %4 %5 WHERE %3.xid_conference = :conf AND %3.start >= :start AND %3.start < :end AND %3.id = R.xid_event ORDER BY %5.xid_room, %3.start, %3.duration").arg( columnsForSelect(aliasEvent), Event::sTableName, aliasEvent, "EVENT_ROOM", aliasEventRoom)); query.bindValue(":conf", conferenceId); - query.bindValue(":start", convertToDb(date, QVariant::DateTime)); - query.bindValue(":end", convertToDb(date.addDays(1), QVariant::DateTime)); + query.bindValue(":start", dayStart.toTime_t()); + query.bindValue(":end", dayStart.addDays(1).toTime_t()); return load(query); } @@ -103,13 +110,15 @@ QList Event::getImminentAlarmEvents(int maxSecToAlarm, int conferenceId) } -QList Event::getFavByDate(const QDate& date, int conferenceId) -{ +QList Event::getFavByDate(const QDate& date, int conferenceId) { + Q_ASSERT(conferenceId > 0); + Conference conference = Conference::getById(conferenceId); + QDateTime dayStart(date, conference.dayChangeTime(), Qt::UTC); QSqlQuery query; query.prepare(selectQuery() + QString("WHERE xid_conference = :conf AND start >= :start AND start < :end AND favourite = 1 ORDER BY start, duration")); query.bindValue(":conf", conferenceId); - query.bindValue(":start", convertToDb(date, QVariant::DateTime)); - query.bindValue(":end", convertToDb(date.addDays(1), QVariant::DateTime)); + query.bindValue(":start", dayStart.toTime_t()); + query.bindValue(":end", dayStart.addDays(1).toTime_t()); return load(query); } @@ -236,9 +245,13 @@ QList Event::getSearchResultByDate(const QDate& date, int conferenceId, Q throw OrmSqlException( query.lastError().text() ); } + Q_ASSERT(conferenceId > 0); + Conference conference = Conference::getById(conferenceId); + QDateTime dayStart(date, conference.dayChangeTime(), Qt::UTC); + query.bindValue(":conf", conferenceId); - query.bindValue(":start", convertToDb(date, QVariant::DateTime)); - query.bindValue(":end", convertToDb(date.addDays(1), QVariant::DateTime)); + query.bindValue(":start", dayStart.toTime_t()); + query.bindValue(":end", dayStart.addDays(1).toTime_t()); list = load(query); } diff --git a/src/mvc/eventmodel.cpp b/src/mvc/eventmodel.cpp index 8ffb1b4..139d330 100644 --- a/src/mvc/eventmodel.cpp +++ b/src/mvc/eventmodel.cpp @@ -29,10 +29,10 @@ EventModel::EventModel() void EventModel::Group::setTitle(const QList& mEvents) { - QTime startTime = mEvents.at(mFirstEventIndex).start().time(); - QTime endTime(0, 0); + QDateTime startTime = mEvents.at(mFirstEventIndex).start(); + QDateTime endTime(startTime); for (int i = mFirstEventIndex; i != mFirstEventIndex + mChildCount; ++i) { - endTime = qMax(mEvents.at(i).start().time().addSecs(mEvents.at(i).duration()), endTime); + endTime = qMax(mEvents.at(i).start().addSecs(mEvents.at(i).duration()), endTime); } mTitle = QString("%1 - %2").arg(startTime.toString("HH:mm")).arg(endTime.toString("HH:mm")); } @@ -235,44 +235,31 @@ void EventModel::clearModel() reset(); } -void EventModel::loadEvents(const QDate &aDate, int aConferenceId) -{ + +void EventModel::loadEvents(const QDate &aDate, int aConferenceId) { clearModel(); - // check for existence of the conference in the DB - if(Conference::getAll().count()) - { - mEvents = Event::getByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId, "start, duration"); - } + mEvents = Event::getByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId, "start, duration"); createTimeGroups(); } -void EventModel::loadFavEvents(const QDate &aDate, int aConferenceId) -{ + +void EventModel::loadFavEvents(const QDate &aDate, int aConferenceId) { clearModel(); - // check for existence of the conference in the DB - if(Conference::getAll().count()) - { - mEvents = Event::getFavByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId); - } + mEvents = Event::getFavByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId); createTimeGroups(); } -int EventModel::loadSearchResultEvents(const QDate &aDate, int aConferenceId) -{ - clearModel(); - // check for existence of the conference in the DB - if(Conference::getAll().count()) - { - try{ - mEvents = Event::getSearchResultByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId, "start, duration"); - } - catch( OrmException &e ){ - qDebug() << "Event::getSearchResultByDate failed: " << e.text(); - } - catch(...){ - qDebug() << "Event::getSearchResultByDate failed"; - } +int EventModel::loadSearchResultEvents(const QDate &aDate, int aConferenceId) { + clearModel(); + try { + mEvents = Event::getSearchResultByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId, "start, duration"); + } + catch( OrmException &e ){ + qDebug() << "Event::getSearchResultByDate failed: " << e.text(); + } + catch(...){ + qDebug() << "Event::getSearchResultByDate failed"; } createTimeGroups(); @@ -280,37 +267,28 @@ int EventModel::loadSearchResultEvents(const QDate &aDate, int aConferenceId) return mEvents.count(); } -void EventModel::loadEventsByTrack(const QDate &aDate, int aConferenceId) -{ + +void EventModel::loadEventsByTrack(const QDate &aDate, int aConferenceId) { clearModel(); - if (Conference::getAll().count()) - { - mEvents = Event::getByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId, "xid_track, start, duration"); - } + mEvents = Event::getByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId, "xid_track, start, duration"); createTrackGroups(); } -void EventModel::loadEventsByRoom(const QDate &aDate, int aConferenceId) -{ + +void EventModel::loadEventsByRoom(const QDate &aDate, int aConferenceId) { clearModel(); - if (Conference::getAll().count()) - { - mEvents = Event::getByDateAndRoom(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId); - } + mEvents = Event::getByDateAndRoom(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId); createRoomGroups(); } void EventModel::loadConflictEvents(int aEventId, int aConferenceId) { clearModel(); - // check for existence of the conference in the DB - if(Conference::getAll().count()) - { - mEvents = Event::conflictEvents(aEventId, aConferenceId); - } + mEvents = Event::conflictEvents(aEventId, aConferenceId); createTimeGroups(); } + void EventModel::updateModel(int aEventId) { for(int i=0; i &aConference, int confe void SqlEngine::addEventToDB(QHash &aEvent) { - //insert event track to table and get track id - int conference = aEvent["conference_id"].toInt(); - QString name = aEvent["track"]; + int conferenceId = aEvent["conference_id"].toInt(); + Conference conference = Conference::getById(conferenceId); + + // insert event track to table and get track id Track track; int trackId; + QString trackName = aEvent["track"]; try { - track = Track::retrieveByName(conference, name); + track = Track::retrieveByName(conferenceId, trackName); trackId = track.id(); } catch (OrmNoObjectException &e) { - track.setConference(conference); - track.setName(name); + track.setConference(conferenceId); + track.setName(trackName); trackId = track.insert(); } + QDate startDate = QDate::fromString(aEvent["date"], DATE_FORMAT); + QTime startTime = QTime::fromString(aEvent["start"], TIME_FORMAT); + // consider day_change (note that if day_change is e.g. at 04:00 AM, an event starting at 02:00 AM has the previous date in the XML file) + if (startTime < conference.dayChangeTime()) startDate = startDate.addDays(1); QDateTime startDateTime; startDateTime.setTimeSpec(Qt::UTC); - startDateTime = QDateTime(QDate::fromString(aEvent["date"],DATE_FORMAT),QTime::fromString(aEvent["start"],TIME_FORMAT),Qt::UTC); + startDateTime = QDateTime(startDate, startTime, Qt::UTC); bool event_exists = false; {