Exemple #1
0
	def __init__(self, backend, parent=None):
		super().__init__(parent)
		self.backend = backend

		self.ui = Ui_mainwindow()
		self.ui.setupUi(self)
		self.setWindowTitle('qTimer v%s' % VERSION)

		session = self.backend.session

		# Setup initial projects
		self.backend.syncConditionally()
		for project in session.query(Project):
			parent = QTreeWidgetItem([project.name])
			parent.project = project
			self.ui.projects.addTopLevelItem(parent)
			for ticket in project.tickets:
				child = QTreeWidgetItem([ticket.name])
				child.ticket = ticket
				parent.addChild(child)

		for timer in session.query(Timer):
			item = QTreeWidgetItem([
				timer.status,
				timer.name,
				format_time(timer.start),
				str(self.backend.roundTime(timer.duration)),
				str(timer.posted)
			])
			item.timer = timer
			self.ui.timers.addTopLevelItem(item)

		self.ui.date_from.setDate(QDate.currentDate())
		self.ui.date_to.setDate(QDate.currentDate())

		self.actionMenu = QMenu()
		self.actionMenu.triggered.connect(self.onActionClicked)
		self.actionMenu.addAction('Start')
		self.actionMenu.addAction('Stop')
		self.actionMenu.addAction('Post')

		self.ui.actions.setMenu(self.actionMenu)

		self.readSettings()

		self.dateFromChanged = lambda date: self.onDateChanged(self.ui.date_from_label)
		self.dateToChanged = lambda date: self.onDateChanged(self.ui.date_to_label)

		self.ui.projects.itemClicked.connect(self.onFilterClicked)
		self.ui.date_from.dateChanged.connect(self.dateFromChanged)
		self.ui.date_to.dateChanged.connect(self.dateToChanged)

		self.durationTimer = QTimer(self)
		self.durationTimer.timeout.connect(self.onRefreshDurations)
		self.durationTimer.start(int(self.backend.config.timers.rounding) * 1000)
Exemple #2
0
    def _formatRow(self, row, fieldNames, core):
        items = vars(row)
        if isinstance(row, Timer):
            items['start'] = format_time(row.start)
            items['duration'] = timedelta()
            items['duration'] = core.roundTime(row.duration)
            items['ticket'] = '%d: %s' % (row.ticket.id, row.ticket.name) \
                if row.ticket else None
            items['status'] = row.status.title()

        return tuple([items[key] for key in fieldNames])
Exemple #3
0
    def _formatRow(self, row, fieldNames, core):
        items = vars(row)
        if isinstance(row, Timer):
            items['start'] = format_time(row.start)
            items['duration'] = timedelta()
            items['duration'] = core.roundTime(row.duration)
            items['ticket'] = '%d: %s' % (row.ticket.id, row.ticket.name) \
                if row.ticket else None
            items['status'] = row.status.title()

        return tuple([ items[key] for key in fieldNames ])
Exemple #4
0
    def _formatRow(self, row, fieldNames, program):
        items = vars(row)
        if isinstance(row, Timer):
            items["start"] = format_time(row.sessions[0].start)
            items["duration"] = timedelta()
            for session in row.sessions:
                end = session.end if session.end else datetime.utcnow()
                items["duration"] += end - session.start
            items["duration"] = program.roundTime(items["duration"])
            items["ticket"] = "%d: %s" % (row.ticket.id, row.ticket.name) if row.ticket else None

        return tuple([items[key] for key in fieldNames])
Exemple #5
0
	def onFilterClicked(self, item, column):
		self.ui.timers.clear()

		query = self.backend.session.query(Timer)
		if hasattr(item, 'ticket'):
			query = query.filter(Timer.ticket_id == item.ticket.id)
		elif hasattr(item, 'project'):
			query = query.join(Ticket).filter(Ticket.project_id == item.project.id)

		for timer in query:
			item = QTreeWidgetItem([
				timer.status,
				timer.name,
				format_time(timer.start),
				str(self.backend.roundTime(timer.duration)),
				str(timer.posted)
			])
			item.timer = timer
			self.ui.timers.addTopLevelItem(item)