Skip to content

Commit ae23729

Browse files
authored
Merge pull request #467 from timeoff-management/leaves-report-issues
Fixes to the recently introduced features
2 parents 3834b0a + 9f03277 commit ae23729

12 files changed

+93
-32
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,13 @@ npm run-script db-update
122122
npm start
123123
```
124124

125+
## How to?
126+
127+
There are some customizations available.
128+
129+
## How to amend or extend colours available for colour picker?
130+
Follow instructions on [this page](docs/extend_colors_for_leave_type.md).
131+
125132

126133
## Feedback
127134

docs/extend_colors_for_leave_type.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
# Leave types colour setup
3+
4+
For some organizations the available set of colours is not enough. The page describes how to extend the set and amend the values of available colours.
5+
6+
# Amend colours of available options
7+
8+
## To change the predefined colours one needs:
9+
10+
* to open `scss/main.scss`
11+
* find classes of `leave_type_color_1` or similar
12+
* updated the classes to have relevant color for the `background` property
13+
* run the `npm run compile-sass` command to generate the css file
14+
* comment changes to git.
15+
16+
## To add new colours to the set of available colours
17+
18+
* open handlebar partial file that holds available options for the colour picker: `views/partials/options_for_color_picker.hbs`
19+
* add new option by adding line of following format:
20+
```
21+
<li><a href="#" class="btn btd-default leave_type_color_X" data-tom-color-picker-css-class="leave_type_color_X">Color X</a></li>
22+
```
23+
* * where `X` is next integer from the biggest one available so far
24+
* open `scss/main.scss`
25+
* find classes of `leave_type_color_` shape and add new one `leave_type_color_X` with colour of your choice
26+
* run the `npm run compile-sass` command to generate the css file
27+
* comment changes to git.

lib/model/db/user.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const
1414
withCompanyAwareness = require('../mixin/user/company_aware'),
1515
withAbsenceAwareness = require('../mixin/user/absence_aware');
1616

17+
const LeaveCollectionUtil = require('../leave_collection')();
1718

1819
module.exports = function(sequelize, DataTypes) {
1920

@@ -268,10 +269,12 @@ function get_instance_methods(sequelize) {
268269
},
269270

270271
reload_with_leave_details : function(args){
271-
var self = this;
272+
const self = this;
273+
const dbModel = self.sequelize.models;
272274

273275
return Promise.join(
274-
self.promise_my_active_leaves(args),
276+
self.promise_my_active_leaves(args)
277+
.then(leaves => LeaveCollectionUtil.enrichLeavesWithComments({leaves, dbModel})),
275278
self.getDepartment(),
276279
self.promise_schedule_I_obey(),
277280
function(leaves, department, schedule){
@@ -280,7 +283,7 @@ function get_instance_methods(sequelize) {
280283

281284
// Note: we do not do anything with scheduler as "promise_schedule_I_obey"
282285
// sets the "cached_schedule" attribute under the hood, which is used in
283-
// synchronous code afterwards. Yes... it is silly, but it is where we are
286+
// synchronous code afterwards. Yes... itaza`z is silly, but it is where we are
284287
// at thi moment after mixing non blocking and blocking code together...
285288
//
286289
return Promise.resolve(self);

lib/model/leave_collection.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,26 @@ function promise_to_sort_leaves(leaves) {
5959
));
6060
}
6161

62+
const enrichLeavesWithComments = async ({leaves, dbModel}) => {
63+
const comments = await dbModel.Comment.findAll({where: {
64+
entityId: { $in: leaves.map(l => l.id)},
65+
entityType: dbModel.Comment.getEntityTypeLeave(),
66+
}});
67+
68+
// Map comments by Leave ID
69+
const commentMap = comments.reduce((acc, c) => {acc[c.entityId]=c; return acc}, {});
70+
71+
leaves
72+
.filter(l => commentMap[l.id] !== undefined)
73+
.forEach(l => l.comment = commentMap[l.id]);
74+
75+
return leaves;
76+
};
77+
6278
module.exports = function(){
6379
return {
64-
promise_to_group_leaves : promise_to_group_leaves,
65-
promise_to_sort_leaves : promise_to_sort_leaves,
80+
enrichLeavesWithComments,
81+
promise_to_group_leaves,
82+
promise_to_sort_leaves,
6683
};
6784
};

lib/route/reports.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ const renderLeavesReportAsCsv = async ({res, company, startDate, endDate, leaves
188188

189189
// Compose result CSV header
190190
const content = [
191-
['Employee', 'Department', 'Leave Type', 'Deducted days', 'From', 'To', 'Status', 'Requested On', 'Approved By']
191+
['Employee', 'Department', 'Leave Type', 'Deducted days', 'From', 'To', 'Status', 'Requested On', 'Approved By', 'Comment']
192192
];
193193

194194
// ... and body

lib/route/requests.js

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,23 @@ var express = require('express'),
1010
EmailTransport = require('../email');
1111

1212
router.get('/', function(req, res){
13-
14-
Promise.join(
15-
req.user
16-
.promise_my_active_leaves_ever()
17-
.then(leaves => LeaveCollectionUtil.promise_to_group_leaves(leaves)),
18-
req.user.promise_leaves_to_be_processed(),
19-
function(my_leaves_grouped, to_be_approved_leaves){
20-
21-
res.render('requests',{
22-
my_leaves_grouped : my_leaves_grouped,
23-
to_be_approved_leaves : to_be_approved_leaves,
24-
});
25-
}
26-
);
13+
const dbModel = req.app.get('db_model');
14+
15+
Promise.join(
16+
req.user
17+
.promise_my_active_leaves_ever()
18+
.then(leaves => LeaveCollectionUtil.enrichLeavesWithComments({leaves, dbModel}))
19+
.then(leaves => LeaveCollectionUtil.promise_to_group_leaves(leaves)),
20+
req.user
21+
.promise_leaves_to_be_processed()
22+
.then(leaves => LeaveCollectionUtil.enrichLeavesWithComments({leaves, dbModel})),
23+
function(my_leaves_grouped, to_be_approved_leaves){
24+
res.render('requests',{
25+
my_leaves_grouped : my_leaves_grouped,
26+
to_be_approved_leaves : to_be_approved_leaves,
27+
});
28+
}
29+
);
2730
});
2831

2932
function leave_request_action(args) {

lib/route/users/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,8 @@ router.get('/edit/:user_id/absences/', function(req, res){
255255
user_id = validator.trim(req.params['user_id']),
256256
user_allowance;
257257

258+
const dbModel = req.app.get('db_model');
259+
258260
Promise
259261

260262
.try( () => ensure_user_id_is_integer({req : req, user_id : user_id}) )
@@ -313,6 +315,7 @@ router.get('/edit/:user_id/absences/', function(req, res){
313315
.then(function(){
314316
employee
315317
.promise_my_active_leaves_ever({})
318+
.then(leaves => LeaveCollectionUtil.enrichLeavesWithComments({leaves, dbModel}))
316319
.then(leaves => LeaveCollectionUtil.promise_to_group_leaves(leaves))
317320
.then(function(grouped_leaves){
318321

views/general_settings.hbs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,11 +222,7 @@
222222
<input type="hidden" name="color__{{ this.id }}" value="{{# with this }}{{ this.get_color_class }}{{/with}}">
223223
<button type="button" class="btn btn-default dropdown-toggle {{# with this }}{{ this.get_color_class }}{{/with}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-paint-brush"></i></button>
224224
<ul class="dropdown-menu">
225-
<li><a href="#" class="btn btd-default leave_type_color_1" data-tom-color-picker-css-class="leave_type_color_1">Color 1</a></li>
226-
<li><a href="#" class="btn btd-default leave_type_color_2" data-tom-color-picker-css-class="leave_type_color_2">Color 2</a></li>
227-
<li><a href="#" class="btn btd-default leave_type_color_3" data-tom-color-picker-css-class="leave_type_color_3">Color 3</a></li>
228-
<li><a href="#" class="btn btd-default leave_type_color_4" data-tom-color-picker-css-class="leave_type_color_4">Color 4</a></li>
229-
<li><a href="#" class="btn btd-default leave_type_color_5" data-tom-color-picker-css-class="leave_type_color_5">Color 5</a></li>
225+
{{> options_for_color_picker}}
230226
</ul>
231227
</div>
232228

views/partials/add_new_leave_type_modal.hbs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,7 @@
2828
<input type="hidden" name="color__new" value="leave_type_color_1">
2929
<button type="button" class="btn btn-default dropdown-toggle leave_type_color_1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-paint-brush"></i> Pick up color for new type</button>
3030
<ul class="dropdown-menu">
31-
<li><a href="#" class="btn btd-default leave_type_color_1" data-tom-color-picker-css-class="leave_type_color_1">Color 1</a></li>
32-
<li><a href="#" class="btn btd-default leave_type_color_2" data-tom-color-picker-css-class="leave_type_color_2">Color 2</a></li>
33-
<li><a href="#" class="btn btd-default leave_type_color_3" data-tom-color-picker-css-class="leave_type_color_3">Color 3</a></li>
34-
<li><a href="#" class="btn btd-default leave_type_color_4" data-tom-color-picker-css-class="leave_type_color_4">Color 4</a></li>
35-
<li><a href="#" class="btn btd-default leave_type_color_5" data-tom-color-picker-css-class="leave_type_color_5">Color 5</a></li>
31+
{{> options_for_color_picker}}
3632
</ul>
3733
</div>
3834
<p><em>Determine how leaves of new type are going to be highlighted on Calendar/Team view pages.</em></p>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<li><a href="#" class="btn btd-default leave_type_color_1" data-tom-color-picker-css-class="leave_type_color_1">Color 1</a></li>
2+
<li><a href="#" class="btn btd-default leave_type_color_2" data-tom-color-picker-css-class="leave_type_color_2">Color 2</a></li>
3+
<li><a href="#" class="btn btd-default leave_type_color_3" data-tom-color-picker-css-class="leave_type_color_3">Color 3</a></li>
4+
<li><a href="#" class="btn btd-default leave_type_color_4" data-tom-color-picker-css-class="leave_type_color_4">Color 4</a></li>
5+
<li><a href="#" class="btn btd-default leave_type_color_5" data-tom-color-picker-css-class="leave_type_color_5">Color 5</a></li>

views/partials/user_requests.hbs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<th>Deducted</th>
1818
<th>Approved by</th>
1919
<th></th>
20+
<th class="col-xs-2">Comment</th>
2021
<th><span class="pull-right">Status</span></th>
2122
</tr>
2223
</thead>
@@ -36,18 +37,19 @@
3637
{{# unless this.is_pended_revoke_leave}}
3738
<form method="post" action="/requests/revoke/">
3839
<input type="hidden" value="{{this.id}}" name="request">
39-
<button type="submit" class="pull-right btn btn-default btn-xs revoke-btn" title="Revoke leave request. Subject of approval."><i class="fa fa-trash"> Revoke</i></button>
40+
<button type="submit" class="pull-right btn btn-default btn-xs revoke-btn" title="Revoke leave request. Subject of approval."><i class="fa fa-trash"></i> Revoke</button>
4041
</form>
4142
{{/unless}}
4243
{{else}}
4344
{{#if_equal this.userId ../logged_user.id }}
4445
<form method="post" action='/requests/cancel/'>
4546
<input type="hidden" value="{{this.id}}" name="request">
46-
<button type="submit" class="pull-right btn btn-default btn-xs revoke-btn" title="Cancel leave request" value="cancel"><i class="fa fa-trash"> Cancel</i></button>
47+
<button type="submit" class="pull-right btn btn-default btn-xs revoke-btn" title="Cancel leave request" value="cancel"><i class="fa fa-trash"></i> Cancel</button>
4748
</form>
4849
{{/if_equal}}
4950
{{/if}}
5051
</td>
52+
<td>{{this.comment.comment}}</td>
5153
<td><span class="pull-right leave-request-row-status">{{#if this.is_new_leave }}Pending{{else}}{{#if this.is_approved_leave}}Approved{{else}}Rejected{{/if}}{{/if}}</span></td>
5254
</tr>
5355

views/requests.hbs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<th>Leave dates</th>
2828
<th>Type</th>
2929
<th>Days</th>
30+
<th class="col-xs-2">Comment</th>
3031
<th colspan="2"></th>
3132
</tr>
3233
</thead>
@@ -41,6 +42,7 @@
4142
<td data-tom-leave-dates="1"><a class="leave-details-summary-trigger" data-leave-id="{{this.id}}" href="#">{{> leave_dates leave=this}}</a></td>
4243
<td>{{#if this.is_pended_revoke_leave}}REVOKE {{/if}}{{this.leave_type.name}}</td>
4344
<td data-vpp="days_used">{{ this.get_deducted_days_number }}</td>
45+
<td>{{this.comment.comment}}</td>
4446
<td>
4547
<form action="/requests/reject/" method="POST">
4648
<input class="btn btn-warning" type="submit" value="Reject">

0 commit comments

Comments
 (0)