Source code for lib_openmolar.client.db_orm.diary.diary_day_data

#! /usr/bin/env python
# -*- coding: utf-8 -*-

###############################################################################
##                                                                           ##
##  Copyright 2010, Neil Wallace <rowinggolfer@googlemail.com>               ##
##                                                                           ##
##  This program is free software: you can redistribute it and/or modify     ##
##  it under the terms of the GNU General Public License as published by     ##
##  the Free Software Foundation, either version 3 of the License, or        ##
##  (at your option) any later version.                                      ##
##                                                                           ##
##  This program is distributed in the hope that it will be useful,          ##
##  but WITHOUT ANY WARRANTY; without even the implied warranty of           ##
##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            ##
##  GNU General Public License for more details.                             ##
##                                                                           ##
##  You should have received a copy of the GNU General Public License        ##
##  along with this program.  If not, see <http://www.gnu.org/licenses/>.    ##
##                                                                           ##
###############################################################################

'''
provides one 'private' class DiaryDayData
'''
from PyQt4 import QtCore, QtSql
from diary_appointment import DiaryAppointment

[docs]class DiaryDayData(object): ''' this object stores information gleaned from the diary of the database. '''
[docs] def __init__(self, date): self.sessions_loaded = False self._entries = None self.date = date self._diaries = {} self._diary_list = None self._public_hol_text = "" self.in_bookable_range = False self._sessions = {}
def __repr__(self): return "Daydata for %s" % self.date
[docs] def clear(self): self.sessions_loaded = False self._diaries_loaded = False
@property
[docs] def entries(self): if self._entries is None: self.load_entries() return self._entries
@property
[docs] def public_hol_text(self): return self._public_hol_text
[docs] def set_public_hol_text(self, text): self._public_hol_text = text
@property
[docs] def is_public_hol(self): return self._public_hol_text != ""
@property
[docs] def has_sessions(self): return self._sessions != {}
[docs] def set_session_start(self, diary_id, start): try: self._sessions[diary_id]["start"] = start except KeyError: self._sessions[diary_id]={"start":start}
[docs] def session_start(self, diary_id): if not self.sessions_loaded: self.load_sessions() try: return self._sessions.get(diary_id).get("start") except KeyError: return None
[docs] def set_session_finish(self, diary_id, finish): self._sessions[diary_id]["finish"] = finish
[docs] def session_finish(self, diary_id): if not self.sessions_loaded: self.load_sessions() try: return self._sessions.get(diary_id).get("start") except KeyError: return None
@property
[docs] def message(self): message = u"<b>%s</b><ul>"% _("sessions") for diary_id in self.diaries: message += "<li>Diary - %s %s - %s</li>"% ( diary_id, self.session_start(diary_id).toString(), self.session_finish(diary_id).toString()) return u"%s </ul>"% message
@property
[docs] def diaries(self): LOGGER.debug("%s diaries"% self) if self._diary_list == None: self._diary_list = sorted(self._sessions.keys()) return self._diary_list
[docs] def minutes_past_midnight(self, dtime): ''' takes either a QDateTime, or a QTime, and returns the minutes past midnight ''' if type(dtime) == QtCore.QDateTime: dtime = dtime.time() return dtime.hour() * 60 + dtime.minute()
[docs] def load_sessions(self): ''' loads all appointments of type "session" for this day ''' LOGGER.debug("%s load_sessions"% self) q_query = QtSql.QSqlQuery(SETTINGS.psql_conn) query = '''select diary_id, start, finish from diary_in_office where date(start) = ?''' q_query.prepare(query) q_query.addBindValue(self.date) q_query.exec_() if q_query.lastError().isValid(): LOGGER.error("%s"% q_query.lastError().text()) LOGGER.debug("query was %s"% q_query.lastQuery()) while q_query.next(): record = q_query.record() diary_id = record.value("diary_id").toInt()[0] start = record.value("start").toDateTime() finish = record.value("finish").toDateTime() self.set_session_start(diary_id, start) self.set_session_finish(diary_id, finish) q_query.finish() self.sessions_loaded = True
[docs] def load_entries(self): ''' loads all appointments of type "session" for this day ''' LOGGER.debug("%s load_entries"% self) q_query = QtSql.QSqlQuery(SETTINGS.psql_conn) query = '''select diary_id, start, finish, etype, comment from diary_entries where date(start) = ? order by start''' q_query.prepare(query) q_query.addBindValue(self.date) self._entries = [] q_query.exec_() if q_query.lastError().isValid(): LOGGER.error("%s"% q_query.lastError().text()) LOGGER.debug("query was %s"% q_query.lastQuery()) while q_query.next(): record = q_query.record() entry = DiaryAppointment(record) self._entries.append(entry) q_query.finish()
if __name__ == "__main__": import logging logging.basicConfig(level = logging.DEBUG) LOGGER = logging.getLogger("test") from PyQt4 import QtGui app = QtGui.QApplication([]) from lib_openmolar.client.connect import DemoClientConnection cc = DemoClientConnection() cc.connect() day_data = DiaryDayData(QtCore.QDate(2012,07,02)) LOGGER.debug("%s"% day_data) LOGGER.debug("public hol - %s %s"% ( day_data.is_public_hol, day_data.public_hol_text)) day_data.load_sessions() LOGGER.debug("day_data diaries %s"% day_data.diaries) LOGGER.debug("day_data message '%s'"% day_data.message) LOGGER.debug("day_data entries '%s'"% day_data.entries)