forked from artynusov/MacTimeLog
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathReportController.py
154 lines (115 loc) · 4.91 KB
/
ReportController.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#
# ReportController.py
# Report controller
#
# Copyright 2009 Artem Yunusov. All rights reserved.
#
import datetime
import objc
from Foundation import *
from Settings import Settings
from Statistics import Statistics
from FormatterHelpers import secToTimeStr, nsDateToDatetime
from Timings import Timings
class ReportController(NSObject):
attributeBox = objc.IBOutlet("attributeBox")
graphView = objc.IBOutlet("graphView")
scrollView = objc.IBOutlet("scrollView")
lblWorkTotal = objc.IBOutlet("lblWorkTotal")
lblAvgWork = objc.IBOutlet("lblAvgWork")
lblSlackTotal = objc.IBOutlet("lblSlackTotal")
lblAvgSlack = objc.IBOutlet("lblAvgSlack")
sgmControl = objc.IBOutlet("sgmControl")
dpkrFrom = objc.IBOutlet("dpkrFrom")
dpkrTo = objc.IBOutlet("dpkrTo")
btnShow = objc.IBOutlet("btnShow")
startDate = Timings.workStartDateTime()
endDate = Timings.workStartDateTime() + datetime.timedelta(days=1)
reportType = "tasks"
def awakeFromNib(self):
self.customControls = [self.btnShow, self.dpkrTo, self.dpkrFrom]
self.dpkrTo.setDateValue_(NSDate.alloc().init())
self.dpkrFrom.setDateValue_(NSDate.alloc().init())
self.graphView.setConversionFunction(secToTimeStr)
self.generateChart()
def setDate(self, date):
self.startDate = date
self.endDate = Timings.workStartDateTime() + datetime.timedelta(days=1)
def updateState(self):
self.setCustomControlsEnabled(False)
self.generateChart()
def setCustomControlsEnabled(self, enabled):
for control in self.customControls:
control.setEnabled_(enabled)
def generateChart(self):
self.graphView.setScrollView(self.scrollView)
stat = Statistics(self.startDate, self.endDate)
if self.reportType == "tasks":
self.graphView.setData(stat.countTasks(), self.reportType)
elif self.reportType == "projects":
self.graphView.setData(stat.countProjects(), self.reportType)
elif self.reportType == "slacking":
self.graphView.setData(stat.countSlacking(), self.reportType)
self.graphView.setScale(stat.maxValue)
self.lblWorkTotal.setStringValue_(secToTimeStr(stat.totalWork))
self.lblAvgWork.setStringValue_(secToTimeStr(stat.avgWork))
self.lblSlackTotal.setStringValue_(secToTimeStr(stat.totalSlacking))
self.lblAvgSlack.setStringValue_(secToTimeStr(stat.avgSlacking))
self.graphView.setNeedsDisplay_(True)
def windowDidBecomeMain_(self, sender):
self.generateChart()
@objc.IBAction
def customMenu_(self, sender):
self.setCustomControlsEnabled(True)
@objc.IBAction
def todayMenu_(self, sender):
self.setDate(Timings.workStartDateTime())
self.updateState()
@objc.IBAction
def yeaterdayMenu_(self, sender):
self.startDate = Timings.workStartDateTime() - datetime.timedelta(days=1)
self.endDate = Timings.workStartDateTime()
self.updateState()
@objc.IBAction
def currentMonthMenu_(self, sender):
today = Timings.workStartDateTime()
d = today - datetime.timedelta(days=int(today.strftime("%d")) - 1)
self.setDate(d)
self.updateState()
@objc.IBAction
def currentWeekMenu_(self, sender):
today = Timings.workStartDateTime()
weekNumber = int(today.strftime("%w"))
if weekNumber == 0:
weekNumber = 7
d = today - datetime.timedelta(days=weekNumber - 1)
self.setDate(d)
self.updateState()
@objc.IBAction
def days20Menu_(self, sender):
self.setDate(Timings.workStartDateTime() - datetime.timedelta(days=20))
self.updateState()
@objc.IBAction
def days30Menu_(self, sender):
self.setDate(Timings.workStartDateTime() - datetime.timedelta(days=30))
self.updateState()
@objc.IBAction
def days10_(self, sender):
self.setDate(Timings.workStartDateTime() - datetime.timedelta(days=10))
self.updateState()
@objc.IBAction
def typeChanged_(self, sender):
sel = self.sgmControl.selectedSegment()
if sel == 0:
self.reportType = "tasks"
elif sel == 1:
self.reportType = "projects"
elif sel == 2:
self.reportType = "slacking"
self.generateChart()
@objc.IBAction
def showCustom_(self, sender):
self.startDate = Timings.combineDateWithTime(nsDateToDatetime(self.dpkrFrom.dateValue()))
self.endDate = Timings.combineDateWithTime(nsDateToDatetime(self.dpkrTo.dateValue()) +
datetime.timedelta(days=1))
self.generateChart()