|
1 |
| -export const TARGET_UNITS_QUERY = `SELECT |
| 1 | +import { |
| 2 | + GroupNameEnum, |
| 3 | + RELATED_PROJECT_FIELD_ID, |
| 4 | + REPORT_FILTER_FIELD_ID, |
| 5 | +} from '../../configs/weeklyFinancialReport'; |
| 6 | + |
| 7 | +const groupNamesList = Object.values(GroupNameEnum) |
| 8 | + .map((name) => `'${name.replace(/'/g, "''")}'`) |
| 9 | + .join(', '); |
| 10 | + |
| 11 | +const COMMON_SELECT = ` |
| 12 | + SELECT |
| 13 | + g.id AS group_id, |
| 14 | + g.lastname AS group_name, |
| 15 | + p.id AS project_id, |
| 16 | + p.name AS project_name, |
| 17 | + te.user_id AS user_id, |
| 18 | + CONCAT(u.firstname, ' ', u.lastname) AS username, |
| 19 | + te.spent_on AS spent_on, |
| 20 | + cv.value AS filter_name, |
| 21 | +`; |
| 22 | + |
| 23 | +const COMMON_FROM = ` |
| 24 | + FROM users AS g |
| 25 | + JOIN custom_values as cv ON cv.customized_id = g.id |
| 26 | + JOIN members AS m ON m.user_id = g.id |
| 27 | + JOIN projects AS p ON p.id = m.project_id |
| 28 | +`; |
| 29 | + |
| 30 | +const COMMON_WHERE = ` |
| 31 | + WHERE g.type = 'Group' |
| 32 | + AND cv.customized_type = 'Principal' |
| 33 | + AND cv.custom_field_id = ${REPORT_FILTER_FIELD_ID} |
| 34 | + AND cv.value IN (${groupNamesList}) |
| 35 | + AND te.spent_on BETWEEN DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) + 7 DAY) |
| 36 | + AND DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) + 1 DAY) |
| 37 | +`; |
| 38 | + |
| 39 | +function buildDirectGroupTimeEntries() { |
| 40 | + return ` |
| 41 | + ${COMMON_SELECT} |
| 42 | + te.hours AS project_hours, |
| 43 | + 0 as deptech_hours |
| 44 | + ${COMMON_FROM} |
| 45 | + JOIN time_entries te ON te.project_id = p.id |
| 46 | + JOIN users AS u ON u.id = te.user_id |
| 47 | + ${COMMON_WHERE} |
| 48 | + `; |
| 49 | +} |
| 50 | + |
| 51 | +function buildRelatedProjectTimeEntries() { |
| 52 | + return ` |
| 53 | + ${COMMON_SELECT} |
| 54 | + 0 as project_hours, |
| 55 | + te.hours AS deptech_hours |
| 56 | + ${COMMON_FROM} |
| 57 | + JOIN custom_values icv ON icv.value = CAST(p.id AS CHAR) |
| 58 | + AND icv.customized_type = 'Issue' |
| 59 | + AND icv.custom_field_id = ${RELATED_PROJECT_FIELD_ID} |
| 60 | + AND icv.value <> "" |
| 61 | + JOIN time_entries te ON te.issue_id = icv.customized_id |
| 62 | + JOIN users AS u ON u.id = te.user_id |
| 63 | + ${COMMON_WHERE} |
| 64 | + `; |
| 65 | +} |
| 66 | + |
| 67 | +export const TARGET_UNITS_QUERY = ` |
| 68 | + SELECT |
2 | 69 | group_id,
|
3 | 70 | group_name,
|
4 | 71 | project_id,
|
5 | 72 | project_name,
|
6 | 73 | user_id,
|
7 | 74 | username,
|
8 | 75 | DATE_FORMAT(spent_on, '%Y-%m-%d') AS spent_on,
|
9 |
| - SUM(total_hours) AS total_hours |
| 76 | + SUM(project_hours) AS project_hours, |
| 77 | + SUM(deptech_hours) AS deptech_hours, |
| 78 | + SUM(project_hours) + SUM(deptech_hours) AS total_hours, |
| 79 | + filter_name |
10 | 80 | FROM (
|
11 |
| - SELECT |
12 |
| - g.id AS group_id, |
13 |
| - g.lastname AS group_name, |
14 |
| - p.id AS project_id, |
15 |
| - p.name AS project_name, |
16 |
| - te.user_id AS user_id, |
17 |
| - CONCAT(u.firstname, ' ', u.lastname) AS username, |
18 |
| - te.spent_on AS spent_on, |
19 |
| - te.hours AS total_hours |
20 |
| - FROM users AS g |
21 |
| - JOIN custom_values as cv ON cv.customized_id = g.id |
22 |
| - JOIN members AS m ON m.user_id = g.id |
23 |
| - JOIN projects AS p ON p.id = m.project_id |
24 |
| - JOIN time_entries te ON te.project_id = p.id |
25 |
| - JOIN users AS u ON u.id = te.user_id |
26 |
| - WHERE g.type = 'Group' |
27 |
| - AND cv.customized_type = 'Principal' and cv.value = ? |
28 |
| - AND te.spent_on BETWEEN |
29 |
| - DATE_FORMAT( |
30 |
| - DATE_SUB( |
31 |
| - DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) + 1 DAY), |
32 |
| - INTERVAL (MONTH(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) + 1 DAY))-1)%3 MONTH |
33 |
| - ), |
34 |
| - '%Y-%m-01' |
35 |
| - ) |
36 |
| - AND DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) + 1 DAY) |
| 81 | + ${buildDirectGroupTimeEntries()} |
| 82 | + UNION ALL |
| 83 | + ${buildRelatedProjectTimeEntries()} |
37 | 84 | ) t
|
38 | 85 | GROUP BY
|
39 |
| - group_id, |
40 |
| - group_name, |
41 |
| - project_id, |
42 |
| - project_name, |
43 |
| - user_id, |
44 |
| - username, |
45 |
| - spent_on |
| 86 | + t.group_id, |
| 87 | + t.group_name, |
| 88 | + t.project_id, |
| 89 | + t.project_name, |
| 90 | + t.user_id, |
| 91 | + t.username, |
| 92 | + t.spent_on, |
| 93 | + t.filter_name |
46 | 94 | ORDER BY
|
47 |
| - group_name ASC, |
48 |
| - project_name ASC, |
49 |
| - username ASC, |
50 |
| - spent_on ASC`; |
| 95 | + t.group_name ASC, |
| 96 | + t.project_name ASC, |
| 97 | + t.username ASC, |
| 98 | + t.spent_on ASC |
| 99 | +`; |
0 commit comments