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")); }
* You should have received a copy of the GNU General Public License along with
* ConfClerk. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "conference.h"
#include "event.h"
#include "room.h"
QList<Event> 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> Event::getByDateAndRoom(const QDate& date, int conferenceId)
-{
+
+QList<Event> 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);
}
}
-QList<Event> Event::getFavByDate(const QDate& date, int conferenceId)
-{
+QList<Event> 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);
}
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);
}
void EventModel::Group::setTitle(const QList<Event>& 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"));
}
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();
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<mEvents.count(); i++)
void SqlEngine::addEventToDB(QHash<QString,QString> &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;
{