Built motion from commit 5e31ea4.|0.0.32
[motion.git] / server / api / fax_account / fax_account.controller.js
index a1695b5..d550303 100644 (file)
@@ -1 +1,374 @@
-var _0x6473=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x54\x72\x75\x6E\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x69\x6E\x64\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x70\x68\x6F\x6E\x65","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x62\x6C\x65\x77\x20\x75\x70\x21","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x63\x6F\x6E\x74\x65\x78\x74","\x47\x6F\x74\x6F","\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78\x2C\x73\x2C\x31","\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x6C\x6F\x67","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x6F\x6B","\x63\x6F\x6D\x6D\x69\x74","\x77\x61\x74\x65\x72\x66\x61\x6C\x6C","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x76\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x20\x65\x64\x69\x74\x65\x64","\x55\x73\x65\x72\x49\x64","\x6D\x65\x72\x67\x65","\x66\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x20\x73\x61\x76\x65\x64","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64","\x61\x64\x64\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6C\x65\x6E\x67\x74\x68","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x70\x72\x69\x6F\x72\x69\x74\x79","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0x6473[0];var _=require(_0x6473[1]);var util=require(_0x6473[2]);var async=require(_0x6473[3]);var Trunk=require(_0x6473[5])[_0x6473[4]];var FaxAccount=require(_0x6473[5])[_0x6473[6]];var FaxApplication=require(_0x6473[5])[_0x6473[7]];var VoiceExtension=require(_0x6473[5])[_0x6473[8]];var sequelize=require(_0x6473[5])[_0x6473[9]];exports[_0x6473[10]]=function(_0x2e2ex9,_0x2e2exa,_0x2e2exb){var _0x2e2exc=[_0x6473[11],_0x6473[12],_0x6473[13]];var _0x2e2exd=_0x2e2ex9[_0x6473[15]][_0x6473[14]]?parseInt(_0x2e2ex9[_0x6473[15]][_0x6473[14]],10):100;var _0x2e2exe=_0x2e2ex9[_0x6473[15]][_0x6473[16]]?parseInt(_0x2e2ex9[_0x6473[15]][_0x6473[16]],10):0;var _0x2e2exf={where:{},limit:_0x2e2exd,offset:_0x2e2exe*_0x2e2exd};_[_0x6473[30]](_0x2e2ex9[_0x6473[15]],function(_0x2e2ex10,_0x2e2ex11){switch(_0x2e2ex11){case _0x6473[14]:;case _0x6473[16]:break ;;case _0x6473[19]:_0x2e2exf[_0x6473[17]]=util[_0x6473[22]](_0x6473[18],_0x2e2ex9[_0x6473[15]][_0x6473[19]],_0x2e2ex9[_0x6473[15]][_0x6473[20]]||_0x6473[21])||null;break ;;case _0x6473[20]:break ;;case _0x6473[28]:_0x2e2exf[_0x6473[24]][_0x6473[23]]=[];_0x2e2exc[_0x6473[27]](function(_0x2e2ex12){var _0x2e2ex13={};_0x2e2ex13[_0x2e2ex12]={$like:_0x6473[25]+_0x2e2ex10+_0x6473[25]};_0x2e2exf[_0x6473[24]][_0x6473[23]][_0x6473[26]](_0x2e2ex13);});break ;;default:_0x2e2exf[_0x6473[24]][_0x2e2ex11]={$like:{}};_0x2e2exf[_0x6473[24]][_0x2e2ex11][_0x6473[29]]=_0x6473[25]+_0x2e2ex10+_0x6473[25];;}});FaxAccount[_0x6473[45]](_0x2e2exf)[_0x6473[44]](function(_0x2e2ex15){var _0x2e2ex16=Math[_0x6473[36]](_0x2e2ex15[_0x6473[35]]/_0x2e2exd);var _0x2e2ex17=_0x2e2ex16>(_0x2e2exf[_0x6473[37]]+1)?util[_0x6473[22]](_0x6473[38],_0x2e2ex9[_0x6473[39]],_0x2e2ex9[_0x6473[41]][_0x6473[40]],_0x2e2ex9[_0x6473[42]],_0x2e2exe+1):null;var _0x2e2ex18=_0x2e2exe>0?util[_0x6473[22]](_0x6473[38],_0x2e2ex9[_0x6473[39]],_0x2e2ex9[_0x6473[41]][_0x6473[40]],_0x2e2ex9[_0x6473[42]],_0x2e2exe-1):null;_0x2e2exa[_0x6473[33]](200)[_0x6473[32]]({count:_0x2e2ex15[_0x6473[35]],rows:_0x2e2ex15[_0x6473[43]],next_page:_0x2e2ex17,previous_page:_0x2e2ex18,total_pages:_0x2e2ex16});})[_0x6473[34]](function(_0x2e2ex14){_0x2e2exa[_0x6473[33]](500)[_0x6473[32]]({error:_0x6473[31]})});};exports[_0x6473[46]]=function(_0x2e2ex9,_0x2e2exa,_0x2e2exb){FaxAccount[_0x6473[50]](_0x2e2ex9[_0x6473[49]][_0x6473[48]])[_0x6473[44]](function(_0x2e2ex19){if(!_0x2e2ex19){return _0x2e2exa[_0x6473[47]](404)};return _0x2e2exa[_0x6473[32]](_0x2e2ex19);})[_0x6473[34]](function(_0x2e2ex14){return _0x2e2exb(_0x2e2ex14)})};exports[_0x6473[51]]=function(_0x2e2ex9,_0x2e2exa,_0x2e2exb){return sequelize[_0x6473[62]]()[_0x6473[44]](function(_0x2e2ex1a){async[_0x6473[61]]([function(_0x2e2ex1b){return FaxAccount[_0x6473[51]](_0x2e2ex9[_0x6473[52]],{transaction:_0x2e2ex1a})[_0x6473[44]](function(_0x2e2ex19){_0x2e2ex1b(null,_0x2e2ex19)})[_0x6473[34]](function(_0x2e2ex14){_0x2e2ex1b(_0x2e2ex14)})},function(_0x2e2ex19,_0x2e2ex1b){return Trunk[_0x6473[50]](_0x2e2ex9[_0x6473[52]].TrunkId,{transaction:_0x2e2ex1a})[_0x6473[44]](function(_0x2e2ex1c){_0x2e2ex1b(null,_0x2e2ex19,_0x2e2ex1c)})[_0x6473[34]](function(_0x2e2ex14){_0x2e2ex1b(_0x2e2ex14)})},function(_0x2e2ex19,_0x2e2ex1c,_0x2e2ex1b){return VoiceExtension[_0x6473[51]]({context:_0x2e2ex1c[_0x6473[53]],exten:_0x2e2ex9[_0x6473[52]][_0x6473[13]],priority:1,app:_0x6473[54],appdata:_0x6473[55],type:_0x6473[56],TrunkId:_0x2e2ex1c[_0x6473[48]]},{transaction:_0x2e2ex1a})[_0x6473[44]](function(_0x2e2ex1d){_0x2e2ex1b(null,_0x2e2ex19)})[_0x6473[34]](function(_0x2e2ex14){_0x2e2ex1b(_0x2e2ex14)})}],function(_0x2e2ex14,_0x2e2ex19){if(_0x2e2ex14){console[_0x6473[57]](_0x2e2ex14);_0x2e2ex1a[_0x6473[58]]();return _0x2e2exa[_0x6473[33]](404)[_0x6473[32]](_0x2e2ex14);}else {console[_0x6473[57]](_0x6473[59]);_0x2e2ex1a[_0x6473[60]]();return _0x2e2exa[_0x6473[33]](201)[_0x6473[32]](_0x2e2ex19);}})})};exports[_0x6473[63]]=function(_0x2e2ex9,_0x2e2exa,_0x2e2exb){if(_0x2e2ex9[_0x6473[52]][_0x6473[48]]){delete _0x2e2ex9[_0x6473[52]][_0x6473[48]]};return sequelize[_0x6473[62]]()[_0x6473[44]](function(_0x2e2ex1a){async[_0x6473[61]]([function(_0x2e2ex1b){return FaxAccount[_0x6473[64]]({where:{id:_0x2e2ex9[_0x6473[49]][_0x6473[48]]},include:[{model:Trunk}]},{transaction:_0x2e2ex1a})[_0x6473[44]](function(_0x2e2ex19){_0x2e2ex1b(null,_0x2e2ex19)})[_0x6473[34]](function(_0x2e2ex14){_0x2e2ex1b(_0x2e2ex14)})},function(_0x2e2ex19,_0x2e2ex1b){return Trunk[_0x6473[50]](_0x2e2ex9[_0x6473[52]].TrunkId,{transaction:_0x2e2ex1a})[_0x6473[44]](function(_0x2e2ex1e){return _0x2e2ex19[_0x6473[65]]({TrunkId:_0x2e2ex1e[_0x6473[48]]},{transaction:_0x2e2ex1a})[_0x6473[44]](function(_0x2e2ex1f){_0x2e2ex1b(null,_0x2e2ex19,_0x2e2ex1e)})[_0x6473[34]](function(_0x2e2ex14){_0x2e2ex1b(_0x2e2ex14)})})[_0x6473[34]](function(_0x2e2ex14){_0x2e2ex1b(_0x2e2ex14)})},function(_0x2e2ex19,_0x2e2ex1e,_0x2e2ex1b){return VoiceExtension[_0x6473[64]]({where:{priority:1,exten:_0x2e2ex19[_0x6473[13]],context:_0x2e2ex19[_0x6473[4]][_0x6473[53]]}},{transaction:_0x2e2ex1a})[_0x6473[44]](function(_0x2e2ex1d){if(!_0x2e2ex1d){_0x2e2ex1b(null,_0x2e2ex19)};return _0x2e2ex1d[_0x6473[65]]({exten:_0x2e2ex9[_0x6473[52]][_0x6473[13]],context:_0x2e2ex1e[_0x6473[53]],TrunkId:_0x2e2ex9[_0x6473[52]][_0x6473[67]]},{transaction:_0x2e2ex1a})[_0x6473[44]](function(){console[_0x6473[57]](_0x6473[66]);_0x2e2ex1b(null,_0x2e2ex19);})[_0x6473[34]](function(_0x2e2ex14){_0x2e2ex1b(_0x2e2ex14)});})[_0x6473[34]](function(_0x2e2ex14){_0x2e2ex1b(_0x2e2ex14)})},function(_0x2e2ex19,_0x2e2ex1b){var _0x2e2ex20=_[_0x6473[68]](_0x2e2ex19,_0x2e2ex9[_0x6473[52]]);return _0x2e2ex20[_0x6473[70]]({transaction:_0x2e2ex1a})[_0x6473[44]](function(){console[_0x6473[57]](_0x6473[69]);_0x2e2ex1b(null,_0x2e2ex19);})[_0x6473[34]](function(_0x2e2ex14){_0x2e2ex1b(_0x2e2ex14)});}],function(_0x2e2ex14,_0x2e2ex19){if(_0x2e2ex14){console[_0x6473[57]](_0x2e2ex14);_0x2e2ex1a[_0x6473[58]]();return _0x2e2exa[_0x6473[33]](404)[_0x6473[32]](_0x2e2ex14);}else {console[_0x6473[57]](_0x6473[59]);_0x2e2ex1a[_0x6473[60]]();return _0x2e2exa[_0x6473[33]](201)[_0x6473[32]](_0x2e2ex19);}})});};exports[_0x6473[71]]=function(_0x2e2ex9,_0x2e2exa,_0x2e2exb){FaxAccount[_0x6473[72]]({where:{id:_0x2e2ex9[_0x6473[49]][_0x6473[48]]}})[_0x6473[44]](function(_0x2e2ex19){if(!_0x2e2ex19){return _0x2e2exa[_0x6473[47]](404)};_0x2e2ex19[_0x6473[71]]()[_0x6473[44]](function(){return _0x2e2exa[_0x6473[47]](204)})[_0x6473[34]](function(_0x2e2ex14){_0x2e2exb(_0x2e2ex14)});})[_0x6473[34]](function(_0x2e2ex14){_0x2e2exb(_0x2e2ex14)})};exports[_0x6473[73]]=function(_0x2e2ex9,_0x2e2exa,_0x2e2exb){FaxApplication[_0x6473[79]]({where:{id:_0x2e2ex9[_0x6473[52]][_0x6473[75]]}})[_0x6473[44]](function(_0x2e2ex21){var _0x2e2ex22=_0x2e2ex21;return sequelize[_0x6473[62]](function(_0x2e2ex1a){return FaxApplication[_0x6473[71]]({where:{id:_0x2e2ex9[_0x6473[52]][_0x6473[75]]}},{transaction:_0x2e2ex1a})[_0x6473[44]](function(){var _0x2e2ex23=[];for(var _0x2e2ex24=0;_0x2e2ex24<_0x2e2ex9[_0x6473[52]][_0x6473[75]][_0x6473[74]];_0x2e2ex24++){var _0x2e2ex25=_[_0x6473[72]](_0x2e2ex22,{"\x69\x64":_0x2e2ex9[_0x6473[52]][_0x6473[75]][_0x2e2ex24]});if(_0x2e2ex25){_0x2e2ex25[_0x6473[76]]=_0x2e2ex24+1;_0x2e2ex23[_0x6473[26]](_0x2e2ex25[_0x6473[77]]);};};return FaxApplication[_0x6473[78]](_0x2e2ex23,{transaction:_0x2e2ex1a})[_0x6473[44]](function(_0x2e2ex1f){return _0x2e2ex1f});})})[_0x6473[44]](function(_0x2e2ex15){return _0x2e2exa[_0x6473[33]](200)[_0x6473[32]](_0x2e2ex15)})[_0x6473[34]](function(_0x2e2ex14){return handleError(_0x2e2exa,_0x2e2ex14)});})[_0x6473[34]](function(_0x2e2ex14){return _0x2e2exb(_0x2e2ex14)})};exports[_0x6473[80]]=function(_0x2e2ex9,_0x2e2exa){FaxAccount[_0x6473[71]]({where:{id:_0x2e2ex9[_0x6473[15]][_0x6473[48]]},individualHooks:true})[_0x6473[44]](function(){return _0x2e2exa[_0x6473[47]](204)})[_0x6473[34]](function(_0x2e2ex14){return handleError(_0x2e2exa,_0x2e2ex14)})};function handleError(_0x2e2exa,_0x2e2ex14){return _0x2e2exa[_0x6473[33]](500)[_0x6473[32]](_0x2e2ex14)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var async = require('async');
+
+var Trunk = require('../../models').Trunk;
+var FaxAccount = require('../../models').FaxAccount;
+var FaxApplication = require('../../models').FaxApplication;
+var VoiceExtension = require('../../models').VoiceExtension;
+var sequelize = require('../../models').sequelize;
+
+// Get list of agents
+exports.index = function(req, res, next) {
+
+  var attributes = ['description', 'name', 'phone'];
+  var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
+  var page = req.query.page ? parseInt(req.query.page, 10) : 0;
+
+  var query = {
+    where: {},
+    limit: per_page,
+    offset: page * per_page
+  };
+
+  _.forIn(req.query, function(value, key) {
+    switch (key) {
+      case 'per_page':
+      case 'page':
+        break;
+      case 'sort_by':
+        query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
+        break;
+      case 'sort_order':
+        break;
+      case '$':
+        query.where.$or = [];
+        attributes.forEach(function(attribute) {
+          var tmp = {};
+          tmp[attribute] = {
+            $like: '%' + value + '%'
+          };
+
+          query.where.$or.push(tmp);
+        });
+        break;
+      default:
+        query.where[key] = {
+          $like: {}
+        };
+        query.where[key].$like = '%' + value + '%';
+    }
+  });
+
+  FaxAccount
+    .findAndCountAll(query)
+    .then(function(result) {
+
+      var total_pages = Math.ceil(result.count / per_page);
+      var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
+      var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
+
+      res.status(200).send({
+        count: result.count,
+        rows: result.rows,
+        next_page: next_page,
+        previous_page: previous_page,
+        total_pages: total_pages
+      });
+
+    })
+    .catch(function(err) {
+      res.status(500).send({
+        error: 'Something blew up!'
+      });
+    });
+};
+
+// Get a single faxAccount
+exports.show = function(req, res, next) {
+  FaxAccount
+    .findById(req.params.id)
+    .then(function(faxAccount) {
+      if (!faxAccount) {
+        return res.sendStatus(404);
+      }
+      return res.send(faxAccount);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Creates a new faxAccount in the DB.
+exports.create = function(req, res, next) {
+  // console.log(req.body);
+  return sequelize
+    .transaction()
+    .then(function(t) {
+      async.waterfall([
+        function(callback) {
+          return FaxAccount
+            .create(req.body, {
+              transaction: t
+            })
+            .then(function(faxAccount) {
+              callback(null, faxAccount);
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        },
+        function(faxAccount, callback) {
+          return Trunk
+            .findById(req.body.TrunkId, {
+              transaction: t
+            })
+            .then(function(faxTrunk) {
+              callback(null, faxAccount, faxTrunk);
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        },
+        function(faxAccount, faxTrunk, callback) {
+          return VoiceExtension
+            .create({
+              context: faxTrunk.context,
+              exten: req.body.phone,
+              priority: 1,
+              app: 'Goto',
+              appdata: 'inbound-fax,s,1',
+              type: 'inbound-fax',
+              TrunkId: faxTrunk.id
+            }, {
+              transaction: t
+            })
+            .then(function(voiceExtension) {
+              callback(null, faxAccount);
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        }
+      ], function(err, faxAccount) {
+        if (err) {
+          console.log(err);
+          t.rollback();
+          return res.status(404).send(err);
+        } else {
+          console.log('ok');
+          t.commit();
+          return res.status(201).send(faxAccount);
+        }
+      })
+    });
+};
+
+// Updates an existing faxAccount in the DB.
+exports.update = function(req, res, next) {
+  // console.log(req.body);
+  // console.log(req.params);
+
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return sequelize
+    .transaction()
+    .then(function(t) {
+      async.waterfall([
+        function(callback) {
+          return FaxAccount
+            .findOne({
+              where: {
+                id: req.params.id
+              },
+              include: [{
+                model: Trunk
+              }]
+            }, {
+              transaction: t
+            })
+            .then(function(faxAccount) {
+              callback(null, faxAccount);
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        },
+        function(faxAccount, callback) {
+          return Trunk
+            .findById(req.body.TrunkId, {
+              transaction: t
+            })
+            .then(function(trunk) {
+              return faxAccount
+                .updateAttributes({
+                  TrunkId: trunk.id
+                }, {
+                  transaction: t
+                })
+                .then(function(data) {
+                  callback(null, faxAccount, trunk);
+                })
+                .catch(function(err) {
+                  callback(err);
+                });
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        },
+        function(faxAccount, trunk, callback) {
+          return VoiceExtension
+            .findOne({
+              where: {
+                priority: 1,
+                exten: faxAccount.phone,
+                context: faxAccount.Trunk.context
+              }
+            }, {
+              transaction: t
+            })
+            .then(function(voiceExtension) {
+              if (!voiceExtension) {
+                callback(null, faxAccount);
+              }
+              return voiceExtension
+                .updateAttributes({
+                  exten: req.body.phone,
+                  context: trunk.context,
+                  TrunkId: req.body.UserId
+                }, {
+                  transaction: t
+                })
+                .then(function() {
+                  console.log('voiceExtension edited');
+                  callback(null, faxAccount);
+                })
+                .catch(function(err) {
+                  callback(err);
+                });
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        },
+        function(faxAccount, callback) {
+          var updated = _.merge(faxAccount, req.body);
+          return updated.save({
+              transaction: t
+            })
+            .then(function() {
+              console.log('faxAccount saved');
+              callback(null, faxAccount);
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        }
+      ], function(err, faxAccount) {
+        if (err) {
+          console.log(err);
+          t.rollback();
+          return res.status(404).send(err);
+        } else {
+          console.log('ok');
+          t.commit();
+          return res.status(201).send(faxAccount);
+        }
+      })
+    });
+};
+
+// Deletes a faxAccount from the DB.
+exports.destroy = function(req, res, next) {
+  FaxAccount
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(faxAccount) {
+      if (!faxAccount) {
+        return res.sendStatus(404);
+      }
+      faxAccount.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          next(err);
+        });
+    })
+    .catch(function(err) {
+      next(err);
+    });
+};
+
+exports.addApplications = function(req, res, next) {
+
+  FaxApplication
+    .findAll({
+      where: {
+        id: req.body.applications
+      }
+    })
+    .then(function(faxApplications) {
+      var tmpFaxApplications = faxApplications;
+
+      return sequelize.transaction(function(t) {
+        return FaxApplication.destroy({
+          where: {
+            id: req.body.applications
+          }
+        }, {
+          transaction: t
+        }).then(function() {
+
+          var sortedApplications = [];
+
+          for (var i = 0; i < req.body.applications.length; i++) {
+
+            var tmpFaxApplication = _.find(tmpFaxApplications, {
+              'id': req.body.applications[i]
+            });
+
+            if (tmpFaxApplication) {
+              tmpFaxApplication.priority = i + 1;
+              sortedApplications.push(tmpFaxApplication.dataValues);
+            }
+          }
+
+          return FaxApplication.bulkCreate(sortedApplications, {
+            transaction: t
+          }).then(function(data) {
+            return data;
+          });
+        });
+      }).then(function(result) {
+        return res.status(200).send(result);
+        // Transaction has been committed
+        // result is whatever the result of the promise chain returned to the transaction callback
+      }).catch(function(err) {
+        return handleError(res, err);
+        // Transaction has been rolled back
+        // err is whatever rejected the promise chain returned to the transaction callback
+      });
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  FaxAccount
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}