-
Notifications
You must be signed in to change notification settings - Fork 63
/
appointmentServiceViewModel.js
86 lines (78 loc) · 2.96 KB
/
appointmentServiceViewModel.js
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
'use strict';
Bahmni.Appointments.AppointmentServiceViewModel = (function () {
var Service = function (serviceDetails) {
angular.extend(this, serviceDetails);
};
var constDays = [{
dayOfWeek: 'SUNDAY',
isSelected: false
}, {
dayOfWeek: 'MONDAY',
isSelected: false
}, {
dayOfWeek: 'TUESDAY',
isSelected: false
}, {
dayOfWeek: 'WEDNESDAY',
isSelected: false
}, {
dayOfWeek: 'THURSDAY',
isSelected: false
}, {
dayOfWeek: 'FRIDAY',
isSelected: false
}, {
dayOfWeek: 'SATURDAY',
isSelected: false
}];
Service.createFromResponse = function (serviceDetails) {
var getDateTime = function (time) {
if (!time) {
return undefined;
}
let date = new Date();
date.setHours(time.split(':')[0]);
date.setMinutes(time.split(':')[1]);
date.setSeconds(time.split(':')[2]);
date.setMilliseconds(0);
return date;
};
var parseAvailability = function (avbsByDay) {
var groupedAvbs = _.groupBy(avbsByDay, function (avb) {
return avb.startTime + '#' + avb.endTime + '#' + avb.maxAppointmentsLimit;
});
return Object.keys(groupedAvbs).map(function (key) {
var result = {};
result.startTime = getDateTime(groupedAvbs[key][0].startTime);
result.endTime = getDateTime(groupedAvbs[key][0].endTime);
result.maxAppointmentsLimit = groupedAvbs[key][0].maxAppointmentsLimit;
var selectedDays = groupedAvbs[key];
var days = angular.copy(constDays);
selectedDays.map(function (day) {
var d = _.find(days, {dayOfWeek: day.dayOfWeek});
d.uuid = day.uuid;
d.isSelected = true;
});
result.days = days;
return result;
});
};
var service = new Service({
name: serviceDetails.name,
uuid: serviceDetails.uuid,
description: serviceDetails.description,
durationMins: serviceDetails.durationMins,
maxAppointmentsLimit: serviceDetails.maxAppointmentsLimit,
color: serviceDetails.color,
startTime: getDateTime(serviceDetails.startTime),
endTime: getDateTime(serviceDetails.endTime),
initialAppointmentStatus: serviceDetails.initialAppointmentStatus,
specialityUuid: serviceDetails.speciality ? serviceDetails.speciality.uuid : undefined,
locationUuid: serviceDetails.location ? serviceDetails.location.uuid : undefined,
weeklyAvailability: parseAvailability(serviceDetails.weeklyAvailability) || [],
serviceTypes: serviceDetails.serviceTypes || []
});
return service;
};
return Service;
})();