Skip to content

Commit e913a88

Browse files
authored
adding auto approved leave types (#427)
1 parent 274e671 commit e913a88

File tree

11 files changed

+447
-18
lines changed

11 files changed

+447
-18
lines changed

lib/email.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const
1111
config = require('./config'),
1212
nodemailer = require('nodemailer'),
1313
smtpTransport = require('nodemailer-smtp-transport'),
14+
model = require('./model/db'),
1415
{getCommentsForLeave} = require('./model/comment');
1516

1617
function Email(){
@@ -166,7 +167,7 @@ Email.prototype.promise_leave_request_revoke_emails = function(args){
166167
let template_name_to_supervisor = 'leave_request_revoke_to_supervisor';
167168
let template_name_to_requestor = 'leave_request_revoke_to_requestor';
168169

169-
if ( leave.get('user').is_auto_approve() ) {
170+
if ( model.Leave.does_skip_approval( leave.get('user'), leave.get('leave_type') ) ) {
170171
template_name_to_supervisor = 'leave_request_revoke_to_supervisor_autoapprove';
171172
template_name_to_requestor = 'leave_request_revoke_to_requestor_autoapprove';
172173
}
@@ -226,7 +227,7 @@ Email.prototype.promise_leave_request_emails = function(args){
226227
var template_name_to_supervisor = 'leave_request_to_supervisor';
227228
var template_name_to_requestor = 'leave_request_to_requestor';
228229

229-
if ( leave.get('user').is_auto_approve() ) {
230+
if ( model.Leave.does_skip_approval( leave.get('user'), leave.get('leave_type') ) ) {
230231
template_name_to_supervisor = 'leave_request_to_supervisor_autoapprove';
231232
template_name_to_requestor = 'leave_request_to_requestor_autoapprove';
232233
}

lib/model/db/leave.js

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ module.exports = function(sequelize, DataTypes) {
8383
leave_day_part_all : () => 1,
8484
leave_day_part_morning : () => 2,
8585
leave_day_part_afternoon : () => 3,
86+
87+
does_skip_approval: function( user, leave_type ) {
88+
return user.is_auto_approve() || leave_type.is_auto_approve();
89+
}
8690
},
8791

8892
instanceMethods : {
@@ -189,6 +193,10 @@ is_approved_leave : function() {
189193
this.status === Leave.status_pended_revoke() ;
190194
},
191195

196+
is_auto_approve : function() {
197+
return Leave.does_skip_approval(this.user, this.leave_type);
198+
},
199+
192200
// Determine if leave starts with half day in the morning
193201
//
194202
does_start_half_morning : function() {
@@ -346,28 +354,28 @@ promise_to_approve : function(args) {
346354
},
347355

348356
promise_to_revoke : function(){
349-
let self = this;
350-
351-
return self.getUser({
357+
return this.reload({
352358
include : [
353359
{
354-
model : sequelize.models.Department,
355-
as : 'department',
356-
}
360+
model : sequelize.models.User,
361+
as : 'user',
362+
include: [ {model: sequelize.models.Department, as: 'department'} ]
363+
},
364+
{model : sequelize.models.LeaveType, as : 'leave_type' },
357365
],
358366
})
359-
.then(function(user){
367+
.then(function(leave){
360368

361-
var new_leave_status = user.is_auto_approve()
369+
var new_leave_status = leave.is_auto_approve()
362370
? Leave.status_rejected()
363371
: Leave.status_pended_revoke();
364372

365373
// By default it is user main boss is one who has to approve the revoked request
366-
self.approverId = user.department.bossId;
374+
leave.approverId = leave.user.department.bossId;
367375

368-
self.status = new_leave_status;
376+
leave.status = new_leave_status;
369377

370-
return self.save();
378+
return leave.save();
371379
});
372380
},
373381

lib/model/db/leave_type.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ module.exports = function(sequelize, DataTypes) {
2828
defaultValue : 0,
2929
comment : "Is used to determine sorting order of leave types",
3030
},
31+
auto_approve : {
32+
type : DataTypes.BOOLEAN,
33+
allowNull : false,
34+
defaultValue : false,
35+
},
3136
}, {
3237
classMethods: {
3338
associate : function( models ) {
@@ -62,8 +67,11 @@ module.exports = function(sequelize, DataTypes) {
6267
return value_in_db.match(/^\s*\#/)
6368
? 'leave_type_color_1'
6469
: value_in_db;
65-
}
70+
},
6671

72+
is_auto_approve : function(){
73+
return this.auto_approve === true;
74+
}
6775
}
6876
});
6977

lib/model/leave/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ function createNewLeave(args){
5757
.then(() => employee.promise_boss())
5858
.then(main_supervisor => {
5959

60-
const new_leave_status = employee.is_auto_approve()
60+
const new_leave_status = Models.Leave.does_skip_approval(employee, leave_type)
6161
? Models.Leave.status_approved()
6262
: Models.Leave.status_new();
6363

lib/route/requests.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ router.post(
264264
req.session.flash_message(
265265
'You have requested leave to be revoked. '
266266
+ (
267-
processed_leave.user.is_auto_approve()
267+
processed_leave.is_auto_approve()
268268
? ''
269269
: 'Your supervisor needs to approve it'
270270
)

lib/route/settings.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,9 @@ function get_and_validate_leave_type(args) {
505505
first_record = validator.trim(req.body['first_record']) || 0,
506506
use_allowance = validator.toBoolean(
507507
req.body['use_allowance__'+suffix]
508+
),
509+
auto_approve = validator.toBoolean(
510+
req.body['auto_approve__'+suffix]
508511
);
509512

510513
// If no name for leave type was provided: do nothing - treat case
@@ -536,6 +539,7 @@ function get_and_validate_leave_type(args) {
536539
name : name,
537540
color : color,
538541
use_allowance : use_allowance,
542+
auto_approve : auto_approve,
539543
limit : limit,
540544
sort_order : ( (first_record && (String(first_record)===String(suffix))? 1 : 0) ),
541545
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
'use strict';
2+
3+
var models = require('../lib/model/db');
4+
5+
module.exports = {
6+
up: function (queryInterface, Sequelize) {
7+
8+
queryInterface.describeTable('LeaveTypes').then(function(attributes){
9+
10+
if (attributes.hasOwnProperty('auto_approve')) {
11+
return 1;
12+
}
13+
14+
return queryInterface.addColumn(
15+
'LeaveTypes',
16+
'auto_approve',
17+
models.LeaveType.attributes.auto_approve
18+
);
19+
});
20+
21+
},
22+
23+
down: function (queryInterface, Sequelize) {
24+
return queryInterface.removeColumn('LeaveTypes', 'auto_approve');
25+
}
26+
};

0 commit comments

Comments
 (0)