-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEmployee.Controller.js
More file actions
224 lines (216 loc) · 7.82 KB
/
Employee.Controller.js
File metadata and controls
224 lines (216 loc) · 7.82 KB
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
var request = require('request');
var AvailableTime = require('../models/AvailableTime');
var moment = require('moment');
var async = require('async');
var User = require('../models/User');
/**
* @api {post} /employee/setAvailableTime Set Available Time for Employee
* @apiName Set Available Time
* @apiGroup Employee
*
* @apiParam {User} employee_id Id of Employee
* @apiParam {Event} event Event Object from Angular Full calendar
*
* @apiSuccess {AvailableTime} Returns JSON of Available Time Data
*/
exports.setAvailableTime = function (req, res) {
if(req.body) {
if(req.body.event) {
if(req.body.event.start && req.body.event.end && req.body.employee_id) {
var duration = moment.duration(moment(req.body.event.end).diff(moment(req.body.event.start)));
var hours = duration.asHours();
var counter = 0;
var startDate = moment(req.body.event.start);
for(var i = 0; i<hours; i++) {
var event = new AvailableTime(req.body.event);
event.employee = req.body.employee_id;
if(startDate == req.body.event.start) {
event.start = startDate.toISOString();
event.end = startDate.add(1,'hours').toISOString();
event.save(function (err, data) {
if (err) {
return res.status(400).send({
message: err
});
}
});
} else {
startDate = startDate.add(1,'hours');
event.start = startDate.toISOString();
event.end = startDate.add(1,'hours');
event.save(function (err, data) {
if (err) {
return res.status(400).send({
message: err
});
}
});
}
counter += 1;
}
if(counter == hours.length - 1) {
return res.status(200).json(data);
}
} else {
return res.status(400).send({success: false, message: "Please check data"});
}
} else {
return res.status(400).send({success: false, message: "Please check data"});
}
} else {
return res.status(400).send({success: false, message: "Please check data"});
}
};
/**
* @api {post} /employee/getAvailabilityCalendar Get Calendar Availability for Employee
* @apiName Get Availability Calendar
* @apiGroup Employee
*
* @apiParam {Date} req.query.start Start Time to Get Available Times For
* @apiParam {Date} req.query.end End Time to Get Available Times For
* @apiParam {String} employee Employee to get available times for
*
* @apiSuccess {AvailableTime} Returns JSON of Available Time Data
*/
exports.getAvailabilityCalendar = function(req, res, next){
if(req.query) {
if(req.query.start && req.query.end && req.query.employee) {
var start = req.query.start;
var end = req.query.end;
if(start < new Date()){
start = moment().startOf('day').toDate();
}
var filter = {
employee: req.query.employee,
start: {
$gte: start,
$lte: end
}
}
AvailableTime.find(filter).sort('start').exec(function(err, data){
if(err){ return next(err); }
return res.status(200).json(data);
});
} else {
return res.status(400).send({success: false, message: "Please check query"});
}
} else {
return res.status(400).send({success: false, message: "Please check data"});
}
};
/**
* @api {delete} /employee/deleteAvailableTime Delete Available Time for Employee
* @apiName Delete Available Time
* @apiGroup Employee
*
* @apiParam {String} id Time to be deleted ID
*
* @apiSuccess {Status} Returns 200
*/
exports.deleteAvailableTime = function (req, res) {
if(req.body) {
if(req.body.id) {
AvailableTime.findOne({_id: req.body.id}).exec(function (err, data) {
if (err) {
return res.status(400).send({
message: err
});
} else {
var temp = data;
data.remove(function (err) {
if (!err) {
return res.sendStatus(200);
} else {
return res.sendStatus(400);
}
});
}
});
} else {
return res.status(400).send({success: false, message: 'Please check the body'});
}
} else {
return res.status(400).send({success: false, message: 'Please check the body'});
}
};
/**
* @api {post} /user/getAllEmployees Get all employees
* @apiName Get All Employees
* @apiGroup Employee
* *
* @apiSuccess {JSON} Returns Array of Employees
*/
exports.getAllEmployees = function (req, res) {
User.find({'role': 'employee'}).populate('employee').exec(function (err, emp) {
if (err) res.status(400).json({success: false, msg: 'Cannot find employees'}).send();
return res.status(200).json({success: true, employees: emp}).send();
});
}
/**
* @api {get} /user/getEmployeeByID Gets Employee by ID
* @apiName Get Employee by ID
* @apiGroup Employee
*
* @apiParam {String} req.headers.id ID of Employer
*
* @apiSuccess {Employee} Returns Employee Object
*/
exports.getEmployeeByID = function (req, res) {
if (!req.query) {
// res.status(400).send();
} else if (!req.query.id) {
// res.status(400).send();
} else {
var id = req.query.id;
User.findOne({'employee': id})
.populate('employee')
.select('-password -employer')
.exec(function (err, employee) {
if (err) {
return res.status(400).json({success: false, msg: 'Cannot find employee'}).send();
}
else if (employee) {
return res.status(200).json({Employee: employee}).send();
} else {
return res.status(400).json({success: false, msg: 'Cannot find employee'}).send();
}
});
}
}
/**
* @api {get} /employee/getAvailabilityCalendar Gets Availabile Slots for Employee
* @apiName Get Available Time Slots
* @apiGroup Employee
*
* @apiParam {String} req.query.employee ID of Employer
* @apiParam {String} req.query.start Start Date of Employer
* @apiParam {String} req.query.end End Date of Employer
*
* @apiSuccess {Event} Returns Array of Event Objects
*/
exports.getAvailabilityCalendar = function(req, res, next){
if(req.query) {
if(req.query.start && req.query.end && req.query.employee) {
var start = req.query.start;
var end = req.query.end;
if(start < new Date()){
start = moment().startOf('day').toDate();
}
var filter = {
employee: req.query.employee,
start: {
$gte: start,
$lte: end
}
}
AvailableTime.find(filter).sort('start').exec(function(err, data){
if(err){ return next(err); }
return res.status(200).json(data);
});
} else {
return res.status(400).json({success: false, msg: 'Please check your data'}).send();
}
} else {
return res.status(400).json({success: false, msg: 'Please check your data'}).send();
}
};