Skip to content

Commit 4a3d119

Browse files
committed
fixed postgres reporting and cleaned up a bit
1 parent 6249ef6 commit 4a3d119

File tree

1 file changed

+77
-54
lines changed

1 file changed

+77
-54
lines changed

lib/Db/ReportItemMapper.php

Lines changed: 77 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,30 @@ public function report($user, $from, $to, $filterProjectId, $filterClientId, $fi
3636
$selectFields = ['min(wi.id) as id', 'sum(duration) as "totalDuration"'];
3737

3838
$pg = 0;
39+
$aggregation = true;
40+
if(empty($groupOn1) && empty($groupOn2) && empty($timegroup)) {
41+
$selectFields[] = 'min(wi.details) as "details"';
42+
$selectFields[] = 'min(wi.name) as "name"';
43+
$selectFields[] = '\'*\' as "projectId"';
44+
$selectFields[] = 'min(p.name) as "project"';
45+
46+
$selectFields[] = '\'*\' as "clientId"';
47+
$selectFields[] = 'min(c.name) as "client"';
48+
$selectFields[] = 'min(user_uid) as "userUid"';
49+
$aggregation = false;
50+
} else {
51+
$selectFields[] = '\'*\' as "details"';
52+
}
53+
54+
3955
if ($this->dbengine != 'MYSQL') {
4056
$pg = 1;
4157
if(empty($timegroup)){
42-
$selectFields[]= "to_timestamp(min(start))::date as time";
58+
if (!$aggregation) {
59+
$selectFields[]= "to_char(to_timestamp(min(start))::date,'YYYY-MM-DD HH24:MI') as time";
60+
} else {
61+
$selectFields[]= "to_timestamp(min(start))::date as time";
62+
}
4363
} elseif ($timegroup == 'week') {
4464
$selectFields[]= "to_char(to_timestamp(start)::date, 'YYYY-WW') as time";
4565
}elseif ($timegroup == 'day') {
@@ -51,7 +71,7 @@ public function report($user, $from, $to, $filterProjectId, $filterClientId, $fi
5171
}
5272
} else {
5373
if(empty($timegroup)){
54-
if (empty($groupOn1) && empty($groupOn2)) {
74+
if (!$aggregation) {
5575
$selectFields[]= "DATE_FORMAT(FROM_UNIXTIME(start),'%Y-%m-%d %H:%i') as time";
5676
} else {
5777
$selectFields[]= "DATE_FORMAT(FROM_UNIXTIME(min(start)),'%Y-%m-%d') as time";
@@ -67,57 +87,59 @@ public function report($user, $from, $to, $filterProjectId, $filterClientId, $fi
6787
}
6888

6989
}
70-
if(($groupOn1 != 'name') && ($groupOn2 != 'name') && !empty($groupOn1) && !empty($groupOn2)){
71-
if ($this->dbengine != 'MYSQL') {
72-
$selectFields[] = '\'*\' as name';
90+
if ($aggregation){
91+
if($groupOn1 != 'name'){
92+
if ($this->dbengine != 'MYSQL') {
93+
$selectFields[] = '\'*\' as name';
94+
} else {
95+
$selectFields[] = 'CASE WHEN CHAR_LENGTH(group_concat(distinct wi.name)) > 40 THEN CONCAT(SUBSTRING(group_concat(distinct wi.name), 1, 40), "...") ELSE group_concat(distinct wi.name) END as name';
96+
}
97+
//$selectFields[] = 'group_concat(distinct wi.name) as name';
7398
} else {
74-
$selectFields[] = 'CASE WHEN CHAR_LENGTH(group_concat(distinct wi.name)) > 40 THEN CONCAT(SUBSTRING(group_concat(distinct wi.name), 1, 40), "...") ELSE group_concat(distinct wi.name) END as name';
99+
$selectFields[] = 'wi.name as name';
75100
}
76-
//$selectFields[] = 'group_concat(distinct wi.name) as name';
77-
} else {
78-
$selectFields[] = 'wi.name as name';
79101
}
80102

81-
if(($groupOn1 != 'name') && ($groupOn2 != 'name') && !empty($groupOn1) && !empty($groupOn2)){
82-
$selectFields[] = '\'*\' as details';
83-
} else {
84-
$selectFields[] = 'wi.details as details';
85-
}
86-
87-
if(($groupOn1 != 'project') && ($groupOn2 != 'project' && !empty($groupOn1) && !empty($groupOn2))){
88-
$selectFields[] = '\'*\' as "projectId"';
89-
if ($this->dbengine != 'MYSQL') {
90-
$selectFields[] = 'string_agg(distinct p.name, \',\') as project';
103+
104+
if ($aggregation){
105+
if(($groupOn1 != 'project') && ($groupOn2 != 'project')){
106+
$selectFields[] = '\'*\' as "projectId"';
107+
if ($this->dbengine != 'MYSQL') {
108+
$selectFields[] = 'string_agg(distinct p.name, \',\') as project';
109+
} else {
110+
$selectFields[] = 'group_concat(distinct p.name) as project';
111+
}
91112
} else {
92-
$selectFields[] = 'group_concat(distinct p.name) as project';
113+
114+
$selectFields[] = '\'*\' as "projectId"';
115+
$selectFields[] = 'p.name as project';
93116
}
94-
} else {
95-
$selectFields[] = '\'*\' as "projectId"';
96-
$selectFields[] = 'p.name as project';
97-
}
98-
99-
if(($groupOn1 != 'client') && ($groupOn2 != 'client')){
100-
$selectFields[] = '\'*\' as "clientId"';
101-
if ($this->dbengine != 'MYSQL') {
102-
$selectFields[] = 'string_agg(distinct c.name, \',\') as client';
117+
118+
119+
if(($groupOn1 != 'client') && ($groupOn2 != 'client')){
120+
$selectFields[] = '\'*\' as "clientId"';
121+
if ($this->dbengine != 'MYSQL') {
122+
$selectFields[] = 'string_agg(distinct c.name, \',\') as client';
123+
} else {
124+
$selectFields[] = 'group_concat(distinct c.name) as client';
125+
}
126+
103127
} else {
104-
$selectFields[] = 'group_concat(distinct c.name) as client';
128+
$selectFields[] = '\'*\' as "clientId"';
129+
$selectFields[] = 'c.name as client';
105130
}
106-
107-
} else {
108-
$selectFields[] = '\'*\' as "clientId"';
109-
$selectFields[] = 'c.name as client';
110-
}
111-
112-
if(($groupOn1 != 'userUid') && ($groupOn2 != 'userUid')){
113-
if ($this->dbengine != 'MYSQL') {
114-
$selectFields[] = 'string_agg(distinct user_uid, \',\') as "userUid"';
131+
132+
if(($groupOn1 != 'userUid') && ($groupOn2 != 'userUid') && $aggregation){
133+
if ($this->dbengine != 'MYSQL') {
134+
$selectFields[] = 'string_agg(distinct user_uid, \',\') as "userUid"';
135+
} else {
136+
$selectFields[] = 'group_concat(distinct user_uid) as "userUid"';
137+
}
138+
115139
} else {
116-
$selectFields[] = 'group_concat(distinct user_uid) as "userUid"';
140+
$selectFields[] = 'user_uid as "userUid"';
117141
}
118142

119-
} else {
120-
$selectFields[] = 'user_uid as "userUid"';
121143
}
122144

123145
$selectItems = implode(", ",$selectFields).
@@ -193,20 +215,21 @@ public function report($user, $from, $to, $filterProjectId, $filterClientId, $fi
193215
$groups[] = $groupOn1;
194216
}
195217
}
196-
if (!empty($groupOn2)){
197-
if ($groupOn2 == "project" || $groupOn2 == "client" || $groupOn2 == "name" || $groupOn2 == "userUid"){
198-
if ($groupOn2 == 'name'){
199-
$groups[] = 'wi.name';
200-
} else {
201-
if($pg) {
202-
$groups[] = '"'.$groupOn2.'"';// postgres needs quotes on names
203-
} else {
204-
$groups[] = $groupOn2;
205-
}
206-
}
218+
}
219+
if (!empty($groupOn2)){
220+
if ($groupOn2 == "project" || $groupOn2 == "client" || $groupOn2 == "name" || $groupOn2 == "userUid"){
221+
if ($groupOn2 == 'name'){
222+
$groups[] = 'wi.name';
223+
} else {
224+
if($pg) {
225+
$groups[] = '"'.$groupOn2.'"';// postgres needs quotes on names
226+
} else {
227+
$groups[] = $groupOn2;
207228
}
208-
}
229+
}
230+
}
209231
}
232+
210233
if (!empty($groups)){
211234
$group = "group by ".implode(",",$groups);
212235
} else {

0 commit comments

Comments
 (0)