Built motion from commit 5e31ea4.|0.0.32
[motion.git] / server / api / fax_message / fax_message.controller.js
index 0780282..e354d5f 100644 (file)
@@ -1 +1,422 @@
-var _0x477d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x66\x73","\x70\x61\x74\x68","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x6E\x6F\x64\x65\x2D\x75\x75\x69\x64","\x68\x74\x6D\x6C\x2D\x70\x64\x66","\x73\x70\x69\x6E\x64\x72\x69\x66\x74","\x66\x6F\x72\x6D\x69\x64\x61\x62\x6C\x65","\x65\x78\x65\x63","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x43\x6F\x6E\x74\x61\x63\x74","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x44\x45\x53\x43","\x46\x72\x6F\x6D","\x54\x6F","\x66\x69\x6E\x64\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\x4F\x6E\x65","\x63\x72\x65\x61\x74\x65","\x75\x70\x6C\x6F\x61\x64\x44\x69\x72","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x66\x61\x78\x2F\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2F\x6F\x72\x69\x67\x69\x6E\x61\x6C","\x6A\x6F\x69\x6E","\x6B\x65\x65\x70\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x6D\x75\x6C\x74\x69\x70\x6C\x65\x73","\x6F\x6E\x6C\x79\x54\x65\x78\x74","\x62\x6F\x64\x79","\x68\x74\x6D\x6C","\x76\x34","\x2E\x70\x64\x66","\x46\x61\x78\x3A\x20\x48\x54\x4D\x4C\x20\x43\x6F\x6E\x76\x65\x72\x74\x65\x64","\x6C\x6F\x67","\x74\x6F\x46\x69\x6C\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x66\x69\x6C\x65","\x63\x72\x65\x61\x74\x65\x57\x72\x69\x74\x65\x53\x74\x72\x65\x61\x6D","\x70\x69\x70\x65","\x70\x64\x66\x53\x74\x72\x65\x61\x6D","\x46\x61\x78\x3A\x20\x48\x54\x4D\x4C\x20\x6A\x6F\x69\x6E\x65\x64\x20\x77\x69\x74\x68\x20\x50\x44\x46\x20\x75\x70\x6C\x6F\x61\x64\x65\x64","\x65\x72\x72\x6F\x72","\x46\x61\x78\x3A\x20\x50\x44\x46\x20\x52\x65\x6E\x61\x6D\x65","\x72\x65\x6E\x61\x6D\x65","\x70\x61\x72\x73\x65","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x66\x61\x78","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x6F\x72\x69\x67\x69\x6E\x61\x6C","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x2E\x74\x69\x66","\x67\x73","\x20\x2D\x71\x20\x2D\x64\x4E\x4F\x50\x41\x55\x53\x45\x20\x2D\x64\x42\x41\x54\x43\x48\x20\x2D\x73\x44\x45\x56\x49\x43\x45\x3D\x74\x69\x66\x66\x67\x34\x20","\x2D\x73\x50\x41\x50\x45\x52\x53\x49\x5A\x45\x3D\x6C\x65\x74\x74\x65\x72\x20\x2D\x73\x4F\x75\x74\x70\x75\x74\x46\x69\x6C\x65\x3D","\x20","\x53\x49\x50","\x74\x6F\x4E\x75\x6D","\x70\x68\x6F\x6E\x65","\x66\x61\x78\x68\x65\x61\x64\x65\x72","\x6C\x6F\x63\x61\x6C\x69\x64","\x6D\x61\x78\x72\x61\x74\x65","\x6D\x69\x6E\x72\x61\x74\x65","\x65\x63\x6D","\x54\x72\x75\x6E\x6B\x49\x64","\x46\x69\x6C\x65\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74\x73","\x46\x61\x78\x3A\x20\x50\x44\x46\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x74\x6F\x20\x54\x49\x46\x46","\x72\x6F\x6F\x6D\x49\x64","\x73\x65\x74\x46\x72\x6F\x6D","\x73\x70\x72\x65\x61\x64","\x66\x72\x6F\x6D","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x74\x54\x6F","\x74\x6F","\x4E\x4F\x54\x20\x53\x45\x4E\x54","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x4F\x50\x45\x4E","\x61\x63\x63\x6F\x75\x6E\x74\x49\x64","\x75\x73\x65\x72\x49\x64","\x63\x68\x6D\x6F\x64","\x65\x78\x69\x73\x74\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64","\x67\x65\x74\x43\x6F\x6E\x74\x65\x6E\x74\x46\x72\x6F\x6D\x4D\x65\x73\x73\x61\x67\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65\x50\x44\x46","\x52\x45\x43\x45\x49\x56\x45\x44","\x69\x6E\x62\x6F\x75\x6E\x64","\x73\x65\x6E\x64\x46\x69\x6C\x65","\x64\x69\x72\x65\x63\x74\x6F\x72\x79","\x53\x45\x4E\x54","\x46\x41\x49\x4C\x45\x44"];_0x477d[0];var _=require(_0x477d[1]);var fs=require(_0x477d[2]);var path=require(_0x477d[3]);var uploadFile=require(_0x477d[4]);var uuidLib=require(_0x477d[5]);var pdf=require(_0x477d[6]);var spindrift=require(_0x477d[7]);var formidable=require(_0x477d[8]);var exec=require(_0x477d[10])[_0x477d[9]];var config=require(_0x477d[11]);var FaxMessage=require(_0x477d[13])[_0x477d[12]];var FaxRoom=require(_0x477d[13])[_0x477d[14]];var FaxAccount=require(_0x477d[13])[_0x477d[15]];var Contact=require(_0x477d[13])[_0x477d[16]];exports[_0x477d[17]]=function(_0x2875xf,_0x2875x10){FaxMessage[_0x477d[26]]({where:_0x2875xf[_0x477d[22]],order:_0x477d[23],include:[{model:Contact,as:_0x477d[24]},{model:Contact,as:_0x477d[25]},{model:FaxRoom,include:[{model:FaxAccount}]}]})[_0x477d[21]](function(_0x2875x12){return _0x2875x10[_0x477d[20]](200)[_0x477d[19]](_0x2875x12)})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)})};exports[_0x477d[27]]=function(_0x2875xf,_0x2875x10){FaxMessage[_0x477d[31]]({where:{id:_0x2875xf[_0x477d[30]][_0x477d[29]]},include:[{model:Contact,as:_0x477d[24]},{model:Contact,as:_0x477d[25]}]})[_0x477d[21]](function(_0x2875x13){if(!_0x2875x13){return _0x2875x10[_0x477d[28]](404)};return _0x2875x10[_0x477d[19]](_0x2875x13);})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)})};exports[_0x477d[32]]=function(_0x2875xf,_0x2875x10,_0x2875x14){var _0x2875x15= new formidable.IncomingForm();_0x2875x15[_0x477d[33]]=path[_0x477d[36]](config[_0x477d[34]],_0x477d[35]);_0x2875x15[_0x477d[37]]=true;_0x2875x15[_0x477d[38]]=false;if(_0x2875xf[_0x477d[40]][_0x477d[39]]){if(_0x2875xf[_0x477d[40]][_0x477d[41]]){var _0x2875x16=uuidLib[_0x477d[42]]();var _0x2875x17=path[_0x477d[36]](config[_0x477d[34]],_0x477d[35],_0x2875x16+_0x477d[43]);pdf[_0x477d[32]](_0x2875xf[_0x477d[40]][_0x477d[41]],{"\x74\x69\x6D\x65\x6F\x75\x74":30000})[_0x477d[46]](_0x2875x17,function(_0x2875x11,_0x2875x18){console[_0x477d[45]](_0x477d[44]);convertPdfAndSendFax(_0x2875xf,_0x2875x10,_0x2875x16,_0x2875xf[_0x477d[40]]);});}}else {_0x2875x15[_0x477d[56]](_0x2875xf,function(_0x2875x11,_0x2875x19,_0x2875x1a){if(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)};if(_0x2875x19[_0x477d[41]]){var _0x2875x16=uuidLib[_0x477d[42]]();var _0x2875x17=path[_0x477d[36]](config[_0x477d[34]],_0x477d[35],_0x2875x16+_0x477d[43]);pdf[_0x477d[32]](_0x2875x19[_0x477d[41]],{"\x74\x69\x6D\x65\x6F\x75\x74":30000})[_0x477d[46]](_0x2875x17,function(_0x2875x11,_0x2875x18){console[_0x477d[45]](_0x477d[44]);var _0x2875x1b=spindrift(_0x2875x18[_0x477d[47]]);var _0x2875x1c=spindrift(_0x2875x1a[_0x477d[48]][_0x477d[3]]);var _0x2875x16=uuidLib[_0x477d[42]]();spindrift[_0x477d[36]](_0x2875x1b,_0x2875x1c)[_0x477d[51]]()[_0x477d[50]](fs[_0x477d[49]](path[_0x477d[36]](config[_0x477d[34]],_0x477d[35],_0x2875x16+_0x477d[43])));console[_0x477d[45]](_0x477d[52]);convertPdfAndSendFax(_0x2875xf,_0x2875x10,_0x2875x16,_0x2875x19);});}else {var _0x2875x16=uuidLib[_0x477d[42]]();var _0x2875x17=path[_0x477d[36]](config[_0x477d[34]],_0x477d[35],_0x2875x16+_0x477d[43]);fs[_0x477d[55]](_0x2875x1a[_0x477d[48]][_0x477d[3]],_0x2875x17,function(_0x2875x11){if(_0x2875x11){console[_0x477d[53]](_0x2875x11);return handleError(_0x2875x10,_0x2875xf);};console[_0x477d[45]](_0x477d[54]);convertPdfAndSendFax(_0x2875xf,_0x2875x10,_0x2875x16,_0x2875x19);});};})};};function convertPdfAndSendFax(_0x2875xf,_0x2875x10,_0x2875x1e,_0x2875x19){var _0x2875x1f=path[_0x477d[36]](config[_0x477d[34]],_0x477d[57],_0x477d[58],_0x477d[59],_0x477d[60],_0x477d[61],_0x2875x1e+_0x477d[43]);var _0x2875x20=path[_0x477d[36]](config[_0x477d[34]],_0x477d[57],_0x477d[58],_0x477d[59],_0x477d[60],_0x477d[62],_0x2875x1e+_0x477d[63]);var _0x2875x21=_0x477d[64]+_0x477d[65]+_0x477d[66]+_0x2875x20+_0x477d[67]+_0x2875x1f;var _0x2875x22=uuidLib[_0x477d[42]]();FaxAccount[_0x477d[93]](_0x2875x19[_0x477d[89]])[_0x477d[21]](function(_0x2875x23){if(_0x2875x23){var _0x2875x24={technology:_0x477d[68],to:_0x2875x19[_0x477d[69]],from:_0x2875x23[_0x477d[70]],fax_file:_0x2875x20,fax_header:_0x2875x23[_0x477d[71]],fax_localid:_0x2875x23[_0x477d[72]],maxrate:_0x2875x23[_0x477d[73]],minrate:_0x2875x23[_0x477d[74]],ecm:_0x2875x23[_0x477d[75]],uuid:_0x2875x22,trunk:{id:_0x2875x23[_0x477d[76]]}};fs[_0x477d[92]](_0x2875x1f,function(_0x2875x25){if(!_0x2875x25){handleError(_0x2875x10, new Error(_0x477d[77]))}else {exec(_0x2875x21,function(_0x2875x11){if(_0x2875x11){console[_0x477d[53]](_0x2875x11);handleError(_0x2875x10,_0x2875x11);}else {console[_0x477d[45]](_0x477d[78]);fs[_0x477d[91]](_0x2875x20,511,function(_0x2875x11){if(_0x2875x19[_0x477d[79]]){FaxRoom[_0x477d[83]]({where:{id:_0x2875x19[_0x477d[79]]},defaults:{}})[_0x477d[81]](function(_0x2875x26,_0x2875x27){FaxMessage[_0x477d[32]]({status:_0x477d[86],read:true,filenamePDF:_0x2875x1e+_0x477d[43],filename:_0x2875x1e+_0x477d[63],body:JSON[_0x477d[87]](_0x2875x24),uuid:_0x2875x22,FaxRoomId:_0x2875x26[_0x477d[29]]})[_0x477d[21]](function(_0x2875x28){Contact[_0x477d[83]]({where:{phone:_0x2875x24[_0x477d[82]]},defaults:{phone:_0x2875x24[_0x477d[82]],fullname:_0x2875x24[_0x477d[82]]}})[_0x477d[81]](function(_0x2875x29,_0x2875x27){_0x2875x28[_0x477d[80]](_0x2875x29)});Contact[_0x477d[83]]({where:{phone:_0x2875x24[_0x477d[85]]},defaults:{phone:_0x2875x24[_0x477d[85]],fullname:_0x2875x24[_0x477d[85]]}})[_0x477d[81]](function(_0x2875x29,_0x2875x27){_0x2875x28[_0x477d[84]](_0x2875x29)});return _0x2875x10[_0x477d[20]](200)[_0x477d[19]](_0x2875x28);})[_0x477d[18]](function(_0x2875x11){handleError(_0x2875x10,_0x2875x11)})})}else {FaxRoom[_0x477d[32]]({status:_0x477d[88],from:_0x2875x19[_0x477d[69]],FaxAccountId:_0x2875x19[_0x477d[89]],UserId:_0x2875x19[_0x477d[90]]})[_0x477d[21]](function(_0x2875x26){FaxMessage[_0x477d[32]]({status:_0x477d[86],read:true,filenamePDF:_0x2875x1e+_0x477d[43],filename:_0x2875x1e+_0x477d[63],body:JSON[_0x477d[87]](_0x2875x24),uuid:_0x2875x22,FaxRoomId:_0x2875x26[_0x477d[29]]})[_0x477d[21]](function(_0x2875x28){Contact[_0x477d[83]]({where:{phone:_0x2875x24[_0x477d[82]]},defaults:{phone:_0x2875x24[_0x477d[82]],fullname:_0x2875x24[_0x477d[82]]}})[_0x477d[81]](function(_0x2875x29,_0x2875x27){_0x2875x28[_0x477d[80]](_0x2875x29)});Contact[_0x477d[83]]({where:{phone:_0x2875x24[_0x477d[85]]},defaults:{phone:_0x2875x24[_0x477d[85]],fullname:_0x2875x24[_0x477d[85]]}})[_0x477d[81]](function(_0x2875x29,_0x2875x27){_0x2875x28[_0x477d[84]](_0x2875x29)});return _0x2875x10[_0x477d[20]](200)[_0x477d[19]](_0x2875x28);})[_0x477d[18]](function(_0x2875x11){handleError(_0x2875x10,_0x2875x11)})})[_0x477d[18]](function(_0x2875x11){handleError(_0x2875x10,_0x2875x11)})}});}})}});}});}exports[_0x477d[94]]=function(_0x2875xf,_0x2875x10){if(_0x2875xf[_0x477d[40]][_0x477d[29]]){delete _0x2875xf[_0x477d[40]][_0x477d[29]]};FaxMessage[_0x477d[31]]({where:{id:_0x2875xf[_0x477d[30]][_0x477d[29]]},include:[{model:Contact,as:_0x477d[24]},{model:Contact,as:_0x477d[25]}]})[_0x477d[21]](function(_0x2875x13){if(!_0x2875x13){return _0x2875x10[_0x477d[28]](404)};var _0x2875x2a=_[_0x477d[95]](_0x2875x13,_0x2875xf[_0x477d[40]]);_0x2875x2a[_0x477d[96]]()[_0x477d[21]](function(){return _0x2875x10[_0x477d[20]](200)[_0x477d[19]](_0x2875x13)})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)});})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)});};exports[_0x477d[97]]=function(_0x2875xf,_0x2875x10){FaxMessage[_0x477d[98]]({where:{id:_0x2875xf[_0x477d[30]][_0x477d[29]]}})[_0x477d[21]](function(_0x2875x13){if(!_0x2875x13){return _0x2875x10[_0x477d[28]](404)};_0x2875x13[_0x477d[97]]()[_0x477d[21]](function(){return _0x2875x10[_0x477d[28]](204)})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)});})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)})};exports[_0x477d[99]]=function(_0x2875xf,_0x2875x10){FaxMessage[_0x477d[93]](_0x2875xf[_0x477d[30]][_0x477d[29]])[_0x477d[21]](function(_0x2875x13){if(!_0x2875x13){return _0x2875x10[_0x477d[28]](404)};if(_0x2875x13[_0x477d[100]]){if(_0x2875x13[_0x477d[20]]===_0x477d[101]){var _0x2875x2b=path[_0x477d[36]](config[_0x477d[34]],_0x477d[57],_0x477d[58],_0x477d[59],_0x477d[102],_0x2875x13[_0x477d[100]]);fs[_0x477d[92]](_0x2875x2b,function(_0x2875x25){if(_0x2875x25){return _0x2875x10[_0x477d[103]](_0x2875x2b)}else {return _0x2875x10[_0x477d[28]](404)}});}else {if(_0x2875x13[_0x477d[20]]===_0x477d[86]||_0x2875x13[_0x477d[104]]===_0x477d[105]||_0x2875x13[_0x477d[20]]===_0x477d[106]){var _0x2875x2b=path[_0x477d[36]](config[_0x477d[34]],_0x477d[57],_0x477d[58],_0x477d[59],_0x477d[60],_0x477d[61],_0x2875x13[_0x477d[100]]);fs[_0x477d[92]](_0x2875x2b,function(_0x2875x25){if(_0x2875x25){return _0x2875x10[_0x477d[103]](_0x2875x2b)}else {return _0x2875x10[_0x477d[28]](404)}});}}}else {_0x2875x10[_0x477d[28]](404)};})[_0x477d[18]](function(_0x2875x11){return handleError(_0x2875x10,_0x2875x11)})};function handleError(_0x2875x10,_0x2875x11){return _0x2875x10[_0x477d[20]](500)[_0x477d[19]](_0x2875x11)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var fs = require('fs');
+var path = require('path');
+var uploadFile = require('upload-file');
+var uuidLib = require('node-uuid');
+var pdf = require('html-pdf');
+var spindrift = require('spindrift');
+var formidable = require('formidable');
+var exec = require('child_process').exec;
+var config = require('../../config/environment');
+
+var FaxMessage = require('../../models').FaxMessage;
+var FaxRoom = require('../../models').FaxRoom;
+var FaxAccount = require('../../models').FaxAccount;
+var Contact = require('../../models').Contact;
+
+// Get list of fax_messages
+exports.index = function(req, res) {
+  FaxMessage
+    .findAll({
+      where: req.query,
+      order: 'createdAt DESC',
+      include: [{
+        model: Contact,
+        as: 'From'
+      }, {
+        model: Contact,
+        as: 'To'
+      }, {
+        model: FaxRoom,
+        include: [{
+          model: FaxAccount
+        }]
+      }]
+    })
+    .then(function(fax_messages) {
+      return res.status(200).send(fax_messages);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single fax_message
+exports.show = function(req, res) {
+  FaxMessage
+    .findOne({
+      where: {
+        id: req.params.id
+      },
+      include: [{
+        model: Contact,
+        as: 'From'
+      }, {
+        model: Contact,
+        as: 'To'
+      }]
+    })
+    .then(function(fax_message) {
+      if (!fax_message) {
+        return res.sendStatus(404);
+      }
+      return res.send(fax_message);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new fax_message in the DB.
+exports.create = function(req, res, next) {
+  // FaxMessage
+  //   .create(req.body)
+  //   .then(function(fax_message) {
+  //     return res.status(201).send(fax_message);
+  //   })
+  //   .catch(function(err) {
+  //     return handleError(res, err);
+  //   });
+
+  var form = new formidable.IncomingForm();
+  // form.encoding = 'utf-8';
+  form.uploadDir = path.join(config.root, 'server/files/fax/outbound/original');
+  form.keepExtensions = true;
+  form.multiples = false;
+
+  if (req.body.onlyText) {
+    //There is not file, only text
+    // console.log(req.body);
+    if (req.body.html) {
+      //There is the html message -> convert
+      var uuid = uuidLib.v4()
+      var dest = path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf');
+      pdf.create(req.body.html, {
+        "timeout": 30000
+      }).toFile(dest, function(err, result) {
+        console.log('Fax: HTML Converted');
+        convertPdfAndSendFax(req, res, uuid, req.body);
+      });
+    }
+  } else {
+    form.parse(req, function(err, fields, files) {
+      if (err) {
+        return handleError(res, err);
+      }
+
+      if (fields.html) {
+        //There is HTML with PDF
+        var uuid = uuidLib.v4();
+        var dest = path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf');
+        pdf.create(fields.html, {
+          "timeout": 30000
+        }).toFile(dest, function(err, result) {
+          console.log('Fax: HTML Converted');
+          var pdfHTML = spindrift(result.filename);
+          var pdfUploaded = spindrift(files.file.path);
+          var uuid = uuidLib.v4();
+          spindrift.join(pdfHTML, pdfUploaded).pdfStream().pipe(fs.createWriteStream(path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf')));
+          console.log('Fax: HTML joined with PDF uploaded');
+          convertPdfAndSendFax(req, res, uuid, fields);
+        });
+      } else {
+        //There is only PDF
+        var uuid = uuidLib.v4();
+        var dest = path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf');
+        fs.rename(files.file.path, dest, function(err) {
+          if (err) {
+            console.error(err);
+            return handleError(res, req);
+            // return next(err);
+          }
+          console.log('Fax: PDF Rename');
+          convertPdfAndSendFax(req, res, uuid, fields);
+        });
+      }
+
+    });
+  }
+};
+
+function convertPdfAndSendFax(req, res, filenameInput, fields) {
+  var inputPath = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'original', filenameInput + '.pdf');
+  var resultPath = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'converted', filenameInput + '.tif');
+  var command = 'gs' + ' -q -dNOPAUSE -dBATCH -sDEVICE=tiffg4 ' + '-sPAPERSIZE=letter -sOutputFile=' + resultPath + ' ' + inputPath;
+  // console.log(inputPath, resultPath, command);
+
+  var uuidFax = uuidLib.v4();
+  FaxAccount
+    .findById(fields.accountId)
+    .then(function(faxAccount) {
+      // console.log('FaxAccount', faxAccount);
+
+      if (faxAccount) {
+        var faxBody = {
+          technology: 'SIP',
+          to: fields.toNum,
+          from: faxAccount.phone,
+          fax_file: resultPath,
+          fax_header: faxAccount.faxheader,
+          fax_localid: faxAccount.localid,
+          maxrate: faxAccount.maxrate,
+          minrate: faxAccount.minrate,
+          ecm: faxAccount.ecm,
+          uuid: uuidFax,
+          trunk: {
+            id: faxAccount.TrunkId
+          }
+        };
+
+        fs.exists(inputPath, function(exists) {
+          if (!exists) {
+            // console.log('File not exist');
+            handleError(res, new Error('File not exists'));
+          } else {
+            exec(command, function(err) {
+              if (err) {
+                console.error(err);
+                handleError(res, err);
+              } else {
+                console.log('Fax: PDF converted to TIFF');
+                fs.chmod(resultPath, 511, function(err) {
+                  if (fields.roomId) {
+                    // Room already exists -> create new message and associate
+                    FaxRoom
+                      .findOrCreate({
+                        where: {
+                          id: fields.roomId
+                        },
+                        defaults: {}
+                      })
+                      .spread(function(faxRoom, created) {
+                        // TODO Verify if we have to manage also the created
+                        FaxMessage
+                          .create({
+                            status: 'NOT SENT',
+                            read: true,
+                            filenamePDF: filenameInput + '.pdf',
+                            filename: filenameInput + '.tif',
+                            body: JSON.stringify(faxBody),
+                            uuid: uuidFax,
+                            FaxRoomId: faxRoom.id
+                          })
+                          .then(function(faxMessage) {
+                            // Fax message created, now association
+                            Contact
+                              .findOrCreate({
+                                where: {
+                                  phone: faxBody.from
+                                },
+                                defaults: {
+                                  phone: faxBody.from,
+                                  fullname: faxBody.from
+                                }
+                              })
+                              .spread(function(contact, created) {
+                                // console.log('Set relationship with from', created);
+                                faxMessage.setFrom(contact);
+                              });
+
+                            Contact
+                              .findOrCreate({
+                                where: {
+                                  phone: faxBody.to
+                                },
+                                defaults: {
+                                  phone: faxBody.to,
+                                  fullname: faxBody.to
+                                }
+                              })
+                              .spread(function(contact, created) {
+                                // console.log('Set relationship with to', created);
+                                faxMessage.setTo(contact);
+                              });
+
+                            return res.status(200).send(faxMessage);
+                          })
+                          .catch(function(err) {
+                            handleError(res, err);
+                            // console.error(err);
+                            // next(err);
+                          });
+                      });
+                  } else {
+                    // Room not exists -> create room, message and associate
+                    FaxRoom
+                      .create({
+                        status: 'OPEN',
+                        from: fields.toNum,
+                        FaxAccountId: fields.accountId,
+                        UserId: fields.userId
+                      })
+                      .then(function(faxRoom) {
+                        // Room created, now message
+                        FaxMessage
+                          .create({
+                            status: 'NOT SENT',
+                            read: true,
+                            filenamePDF: filenameInput + '.pdf',
+                            filename: filenameInput + '.tif',
+                            body: JSON.stringify(faxBody),
+                            uuid: uuidFax,
+                            FaxRoomId: faxRoom.id
+                          })
+                          .then(function(faxMessage) {
+                            // Fax message created, now association
+
+                            Contact
+                              .findOrCreate({
+                                where: {
+                                  phone: faxBody.from
+                                },
+                                defaults: {
+                                  phone: faxBody.from,
+                                  fullname: faxBody.from
+                                }
+                              })
+                              .spread(function(contact, created) {
+                                faxMessage.setFrom(contact);
+                              });
+
+                            Contact
+                              .findOrCreate({
+                                where: {
+                                  phone: faxBody.to
+                                },
+                                defaults: {
+                                  phone: faxBody.to,
+                                  fullname: faxBody.to
+                                }
+                              })
+                              .spread(function(contact, created) {
+                                faxMessage.setTo(contact);
+                              });
+
+                            return res.status(200).send(
+                              faxMessage);
+                          })
+                          .catch(function(err) {
+                            handleError(res, err);
+                          });
+                      })
+                      .catch(function(err) {
+                        handleError(res, err);
+                      });
+                  }
+                });
+              }
+            });
+          }
+        });
+      }
+    });
+}
+
+// Updates an existing fax_message in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  FaxMessage
+    .findOne({
+      where: {
+        id: req.params.id
+      },
+      include: [{
+        model: Contact,
+        as: 'From'
+      }, {
+        model: Contact,
+        as: 'To'
+      }]
+    })
+    .then(function(fax_message) {
+      if (!fax_message) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(fax_message, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(fax_message);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a fax_message from the DB.
+exports.destroy = function(req, res) {
+  FaxMessage
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(fax_message) {
+      if (!fax_message) {
+        return res.sendStatus(404);
+      }
+      fax_message.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.getContentFromMessage = function(req, res) {
+
+  FaxMessage
+    .findById(req.params.id)
+    .then(function(fax_message) {
+
+      // console.log(fax_message);
+
+      if (!fax_message) {
+        return res.sendStatus(404);
+      }
+
+      if (fax_message.filenamePDF) {
+
+        if (fax_message.status === 'RECEIVED') {
+          var pdfPath = path.join(config.root, 'server', 'files', 'fax', 'inbound', fax_message.filenamePDF);
+          fs.exists(pdfPath, function(exists) {
+            if (exists)
+              return res.sendFile(pdfPath);
+            else
+              return res.sendStatus(404);
+          });
+        } else if (fax_message.status === 'NOT SENT' || fax_message.directory ===
+          'SENT' || fax_message.status === 'FAILED') {
+          var pdfPath = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'original', fax_message.filenamePDF);
+          fs.exists(pdfPath, function(exists) {
+            if (exists)
+              return res.sendFile(pdfPath);
+            else
+              return res.sendStatus(404);
+          });
+        }
+      } else {
+        res.sendStatus(404);
+      }
+
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}