638a0f02bd50c0093197bc5d59f6d72ab4bc51c6
[motion.git] / server / config / ami / member.js
1 var moment = require('moment');
2
3 function Member() {
4   console.log('Member Initialization...');
5 }
6
7 Member.prototype.login = function(evt) {
8   evt.state = 0;
9   evt.statedesc = 'LOGIN';
10
11   evt.enterdate = moment().format("YYYY-MM-DD HH:mm:ss");
12
13   findOrCreate(evt);
14 }
15
16 Member.prototype.logout = function(evt) {
17   evt.state = 0;
18   evt.statedesc = 'LOGIN';
19
20   evt.exitdate = moment().format("YYYY-MM-DD HH:mm:ss");
21   findAndUpdate(evt);
22 }
23
24 Member.prototype.pause = function(evt) {
25   evt.state = 1;
26   evt.statedesc = 'PAUSE';
27
28   var paused = parseInt(evt.paused, 10);
29   if (paused) {
30     evt.enterdate = moment().format("YYYY-MM-DD HH:mm:ss");
31     findOrCreate(evt);
32   } else {
33     if (evt.reason) {
34       delete evt.reason;
35     }
36
37     evt.exitdate = moment().format("YYYY-MM-DD HH:mm:ss");
38     findAndUpdate(evt);
39   }
40 }
41
42 function findOrCreate(evt) {
43   var member = require('../../models').ReportMember;
44   // member.
45   // findOne({
46   //   where: {
47   //     queue: evt.queue,
48   //     membername: evt.membername,
49   //     state: evt.state,
50   //   }
51   // });
52
53   member
54     .findOrCreate({
55       where: {
56         queue: evt.queue,
57         membername: evt.membername,
58         state: evt.state,
59         enterdate: {
60           $ne: null
61         },
62         exitdate: null
63       },
64       defaults: evt
65     })
66     .spread(function(mem, created) {
67       if (created) {
68         console.log('[member] member created');
69       } else {
70         console.log('[member] member exist');
71         mem
72           .updateAttributes({
73             exitdate: moment().format("YYYY-MM-DD HH:mm:ss")
74           })
75           .then(function(res) {
76             console.log('[member] member updated');
77             findOrCreate(evt);
78           });
79       }
80     });
81 }
82
83 function findAndUpdate(evt) {
84   var member = require('../../models').ReportMember;
85   member
86     .update(evt, {
87       where: {
88         queue: evt.queue,
89         membername: evt.membername,
90         state: evt.state,
91         enterdate: {
92           $ne: null
93         },
94         exitdate: null,
95         reason: null
96       }
97     })
98     .then(function(member) {
99       console.log('[member] member updated');
100     })
101     .catch(function(err) {
102       console.error('[member] member error: ' + err);
103     });
104 }
105
106 module.exports = Member;