Built motion from commit 4143fce.|0.0.15
[motion.git] / server / api / mail_message / mail_message.controller.js
1 'use strict';
2
3 var _ = require('lodash');
4 var async = require('async');
5
6 var htmlToText = require('html-to-text');
7 var formidable = require('formidable');
8 var path = require('path');
9
10 var config = require('../../config/environment');
11 var sequelize = require('../../models').sequelize;
12 var MailMessage = require('../../models').MailMessage;
13 var MailAttachment = require('../../models').MailAttachment;
14 var MailRoom = require('../../models').MailRoom;
15 var MailAccount = require('../../models').MailAccount;
16 var Contact = require('../../models').Contact;
17
18 // Get list of mail_messages
19 exports.index = function (req, res, next) {
20   var params = {
21     order: 'createdAt DESC',
22     include: [{
23       all: true,
24       include: [{
25         all: true
26       }]
27     }]
28   };
29
30   switch (req.user.role) {
31   case 'admin':
32     params.where = req.query;
33     break;
34   case 'agent':
35     break;
36   default:
37
38   }
39
40   MailMessage
41     .findAll(params)
42     .then(function (mail_messages) {
43       return res.status(200).send(mail_messages);
44     })
45     .catch(function (err) {
46       return handleError(res, err, next);
47     });
48 };
49
50 // Get a single mailMessage
51 exports.show = function (req, res, next) {
52   MailMessage
53     .findById(req.params.id, {
54       include: [{
55         all: true,
56         include: [{
57           all: true
58         }]
59       }]
60     })
61     .then(function (mailMessage) {
62       if (!mailMessage) {
63         return res.sendStatus(404);
64       }
65       return res.send(mailMessage);
66     })
67     .catch(function (err) {
68       return handleError(res, err, next);
69     });
70 };
71
72 // Creates a new mailMessage in the DB.
73 exports.create = function (req, res, next) {
74   // 1) Messaggio in uscita
75   var form = new formidable.IncomingForm();
76   form.uploadDir = path.join(config.root, 'server', 'files', 'attachments');
77   form.keepExtensions = true;
78   form.multiples = true;
79
80   if (_.isEmpty(req.body)) {
81     // ATTACHMENT
82     form.parse(req, function (err, form, wrap) {
83       if (err) {
84         return res.status(400).send(err);
85       }
86
87       var file = wrap.file;
88       form.MailAttachments = [{
89         path: file.path,
90         fileName: file.name,
91         length: file.size,
92         contentType: file.type
93       }];
94
95       return sequelize.transaction().then(function (t) {
96         return MailMessage
97           .create(form, {
98             include: [{
99               all: true
100             }],
101             transaction: t
102           }).then(function (mailMessage) {
103             t.commit();
104             return res.status(201).send(mailMessage);
105           }).catch(function (err) {
106             t.rollback();
107             return handleError(res, err);
108           });
109       });
110     });
111   } else {
112     // NO ATTACHMENT
113     console.log('NO ATTACHMENT');
114     req.body.status = 'SENDING';
115
116     return sequelize.transaction().then(function (t) {
117       return MailMessage
118         .create(req.body, {
119           transaction: t
120         }).then(function (mailMessage) {
121           t.commit();
122           return res.status(201).send(mailMessage);
123         }).catch(function (err) {
124           t.rollback();
125           return handleError(res, err);
126         });
127     });
128   }
129 };
130
131 // Updates an existing mailMessage in the DB.
132 exports.update = function (req, res, next) {
133
134   MailMessage
135     .findById(req.params.id, {
136       include: [{
137         all: true
138       }]
139     })
140     .then(function (mailMessage) {
141       if (!mailMessage) {
142         return res.sendStatus(404);
143       }
144       var updated = _.merge(mailMessage, req.body);
145       updated.save()
146         .then(function () {
147           return res.status(200).send(updated);
148         })
149         .catch(function (err) {
150           return handleError(res, err, next);
151         });
152     })
153     .catch(function (err) {
154       return handleError(res, err, next);
155     });
156 };
157
158 // Deletes a mailMessage from the DB.
159 exports.destroy = function (req, res, next) {
160   MailMessage
161     .findById(req.params.id)
162     .then(function (mailMessage) {
163       if (!mailMessage) {
164         return res.sendStatus(404);
165       }
166       mailMessage.destroy()
167         .then(function () {
168           return res.sendStatus(204);
169         })
170         .catch(function (err) {
171           return handleError(res, err, next);
172         });
173     })
174     .catch(function (err) {
175       return handleError(res, err, next);
176     });
177 };
178
179 // Deletes a mailMessage from the DB.
180 exports.bulkDelete = function (req, res, next) {
181   MailMessage
182     .bulkUpdate({
183       where: {
184         id: {
185           $in: req.body.id
186         }
187       },
188       attributes: {
189         directory: 'TRASH'
190       }
191     })
192     .then(function (mailMessage) {
193       if (!mailMessage) {
194         return res.sendStatus(404);
195       }
196       mailMessage.destroy()
197         .then(function () {
198           return res.sendStatus(204);
199         })
200         .catch(function (err) {
201           return handleError(res, err, next);
202         });
203     })
204     .catch(function (err) {
205       return handleError(res, err, next);
206     });
207 };
208
209 function handleError(res, err, next) {
210   return res.status(500).send(err);
211 }