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)