Built motion from commit 5e31ea4.|0.0.32
[motion.git] / server / api / default_report / default_report.controller.js
index 2f06910..133d91d 100644 (file)
@@ -1 +1,386 @@
-var _0xc0cc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x6E\x61\x6D\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x70\x61\x72\x65\x6E\x74","\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","\x72\x6F\x6C\x65","\x73\x70\x6C\x69\x74","\x70\x61\x72\x73\x65","\x66\x6F\x72\x4F\x77\x6E","\x63\x6C\x69\x65\x6E\x74\x51\x75\x65\x72\x79","\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","\x70\x72\x65\x76\x69\x65\x77","\x6C\x6F\x67","\x6C\x65\x6E\x67\x74\x68","\x73\x70\x72\x65\x61\x64","\x61\x6C\x6C","\x66\x6F\x75\x6E\x64\x20\x72\x65\x70\x6F\x72\x74","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x75\x69\x50\x61\x67\x69\x6E\x61\x74\x69\x6F\x6E","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x65\x78\x74\x72\x61\x63\x74\x50\x64\x66","\x50\x44\x46","\x65\x78\x74\x72\x61\x63\x74\x43\x73\x76","\x43\x53\x56","\x73\x74\x61\x72\x74\x44\x61\x74\x65","\x62\x6F\x64\x79","\x65\x6E\x64\x44\x61\x74\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x53\x54\x41\x52\x54\x5F\x4F\x52\x5F\x45\x4E\x44\x5F\x44\x41\x54\x45\x5F\x4D\x49\x53\x53\x49\x4E\x47","\x65\x78\x74\x72\x61\x63\x74","\x63\x72\x65\x61\x74\x65","","\x66\x75\x6E\x63\x74\x69\x6F\x6E","\x43\x4F\x55\x4E\x54\x28\x44\x49\x53\x54\x49\x4E\x43\x54\x20\x25\x73\x29","\x66\x69\x65\x6C\x64","\x43\x4F\x55\x4E\x54\x20\x44\x49\x53\x54\x49\x4E\x43\x54","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x28\x25\x73\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20\x25\x73\x20\x41\x53\x43\x29","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x20\x41\x53\x43","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x28\x25\x73\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20\x25\x73\x20\x44\x45\x53\x43\x29","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x20\x44\x45\x53\x43","\x25\x73\x28\x25\x73\x29","\x25\x73\x20\x41\x53\x20\x27\x25\x73\x27","\x61\x6C\x69\x61\x73","\x67\x72\x6F\x75\x70\x42\x79","\x6F\x72\x64\x65\x72\x42\x79","\x67\x72\x6F\x75\x70","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73","\x20","\x2C","\x6A\x6F\x69\x6E","\x2C\x43\x4F\x55\x4E\x54\x28\x2A\x29","\x20\x46\x52\x4F\x4D\x20","\x74\x61\x62\x6C\x65","\x28\x29","\x20\x57\x48\x45\x52\x45\x20","\x70\x65\x72\x50\x61\x67\x65","\x20\x41\x4E\x44\x20\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x3E\x3D\x20\x27","\x27","\x20\x41\x4E\x44\x20\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x3C\x3D\x20\x27","\x66\x69\x6E\x64","\x20\x41\x4E\x44\x20","\x20\x4C\x49\x4B\x45\x20\x27\x25","\x25\x27","\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20","\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20","\x20\x4C\x49\x4D\x49\x54\x20","\x20\x4F\x46\x46\x53\x45\x54\x20","\x28","\x72\x75\x6C\x65\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x20\x27","\x4C\x49\x4B\x45","\x76\x61\x6C\x75\x65","\x29","\x73\x68\x6F\x77","\x63\x6F\x70\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x46\x69\x65\x6C\x64\x73","\x70\x6C\x75\x63\x6B","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xc0cc[0];var _=require(_0xc0cc[1]);var util=require(_0xc0cc[2]);var DefaultReport=require(_0xc0cc[4])[_0xc0cc[3]];var sequelize=require(_0xc0cc[4])[_0xc0cc[5]];var CustomReport=require(_0xc0cc[4])[_0xc0cc[6]];var ExtractedReport=require(_0xc0cc[4])[_0xc0cc[7]];var extractUtils=require(_0xc0cc[8]);exports[_0xc0cc[9]]=function(_0xe7c3x8,_0xe7c3x9,_0xe7c3xa){var _0xe7c3xb=[_0xc0cc[10],_0xc0cc[11],_0xc0cc[12]];var _0xe7c3xc=_0xe7c3x8[_0xc0cc[14]][_0xc0cc[13]]?parseInt(_0xe7c3x8[_0xc0cc[14]][_0xc0cc[13]],10):100;var _0xe7c3xd=_0xe7c3x8[_0xc0cc[14]][_0xc0cc[15]]?parseInt(_0xe7c3x8[_0xc0cc[14]][_0xc0cc[15]],10):0;var _0xe7c3xe={where:{},limit:_0xe7c3xc,offset:_0xe7c3xd*_0xe7c3xc};_[_0xc0cc[34]](_0xe7c3x8[_0xc0cc[14]],function(_0xe7c3xf,_0xe7c3x10){switch(_0xe7c3x10){case _0xc0cc[13]:;case _0xc0cc[15]:break ;;case _0xc0cc[18]:_0xe7c3xe[_0xc0cc[16]]=util[_0xc0cc[21]](_0xc0cc[17],_0xe7c3x8[_0xc0cc[14]][_0xc0cc[18]],_0xe7c3x8[_0xc0cc[14]][_0xc0cc[19]]||_0xc0cc[20])||null;break ;;case _0xc0cc[19]:break ;;case _0xc0cc[27]:_0xe7c3xe[_0xc0cc[23]][_0xc0cc[22]]=[];_0xe7c3xb[_0xc0cc[26]](function(_0xe7c3x11){var _0xe7c3x12={};_0xe7c3x12[_0xe7c3x11]={$like:_0xc0cc[24]+_0xe7c3xf+_0xc0cc[24]};_0xe7c3xe[_0xc0cc[23]][_0xc0cc[22]][_0xc0cc[25]](_0xe7c3x12);});break ;;case _0xc0cc[28]:_0xe7c3xe[_0xc0cc[23]][_0xc0cc[28]]={$or:_0xe7c3xf[_0xc0cc[29]](/[\s,]+/)};break ;;case _0xc0cc[32]:var _0xe7c3x13=JSON[_0xc0cc[30]](_0xe7c3xf);_[_0xc0cc[31]](_0xe7c3x13,function(_0xe7c3x14,_0xe7c3x15){_0xe7c3xe[_0xc0cc[23]][_0xe7c3x15]=_0xe7c3x14});break ;;default:_0xe7c3xe[_0xc0cc[23]][_0xe7c3x10]={$like:{}};_0xe7c3xe[_0xc0cc[23]][_0xe7c3x10][_0xc0cc[33]]=_0xc0cc[24]+_0xe7c3xf+_0xc0cc[24];;}});DefaultReport[_0xc0cc[49]](_0xe7c3xe)[_0xc0cc[48]](function(_0xe7c3x17){var _0xe7c3x18=Math[_0xc0cc[40]](_0xe7c3x17[_0xc0cc[39]]/_0xe7c3xc);var _0xe7c3x19=_0xe7c3x18>(_0xe7c3xe[_0xc0cc[41]]+1)?util[_0xc0cc[21]](_0xc0cc[42],_0xe7c3x8[_0xc0cc[43]],_0xe7c3x8[_0xc0cc[45]][_0xc0cc[44]],_0xe7c3x8[_0xc0cc[46]],_0xe7c3xd+1):null;var _0xe7c3x1a=_0xe7c3xd>0?util[_0xc0cc[21]](_0xc0cc[42],_0xe7c3x8[_0xc0cc[43]],_0xe7c3x8[_0xc0cc[45]][_0xc0cc[44]],_0xe7c3x8[_0xc0cc[46]],_0xe7c3xd-1):null;_0xe7c3x9[_0xc0cc[37]](200)[_0xc0cc[36]]({count:_0xe7c3x17[_0xc0cc[39]],rows:_0xe7c3x17[_0xc0cc[47]],next_page:_0xe7c3x19,previous_page:_0xe7c3x1a,total_pages:_0xe7c3x18});})[_0xc0cc[38]](function(_0xe7c3x16){_0xe7c3x9[_0xc0cc[37]](500)[_0xc0cc[36]]({error:_0xc0cc[35]})});};exports[_0xc0cc[50]]=function(_0xe7c3x8,_0xe7c3x9){DefaultReport[_0xc0cc[63]](_0xe7c3x8[_0xc0cc[62]][_0xc0cc[61]],{include:[{all:true}]})[_0xc0cc[48]](function(_0xe7c3x1d){console[_0xc0cc[51]](_0xc0cc[55]);if(!_0xe7c3x1d){return _0xe7c3x9[_0xc0cc[56]](404)};var _0xe7c3xe=buildReport(_0xe7c3x1d[_0xc0cc[57]],_0xe7c3x8[_0xc0cc[14]]);var _0xe7c3x1e=[sequelize[_0xc0cc[14]](_0xe7c3xe,{type:sequelize[_0xc0cc[59]][_0xc0cc[58]]})];if(_0xe7c3x8[_0xc0cc[14]][_0xc0cc[60]]){var _0xe7c3x1f=buildReport(_0xe7c3x1d[_0xc0cc[57]],_0xe7c3x8[_0xc0cc[14]],true);_0xe7c3x1e[_0xc0cc[25]](sequelize[_0xc0cc[14]](_0xe7c3x1f,{type:sequelize[_0xc0cc[59]][_0xc0cc[58]]}));};return _0xe7c3x1e;})[_0xc0cc[54]]()[_0xc0cc[53]](function(_0xe7c3x1b,_0xe7c3x1c){console[_0xc0cc[51]](_0xe7c3x1b[_0xc0cc[52]]);console[_0xc0cc[51]](_0xe7c3x1c);_0xe7c3x9[_0xc0cc[37]](200)[_0xc0cc[36]]({rows:_0xe7c3x1b,count:_0xe7c3x1c?_0xe7c3x1c[0]:null});})[_0xc0cc[38]](function(_0xe7c3x16){console[_0xc0cc[51]](_0xe7c3x16);return handleError(_0xe7c3x9,_0xe7c3x16);})};exports[_0xc0cc[64]]=function(_0xe7c3x8,_0xe7c3x9){docExtract(_0xe7c3x8,_0xe7c3x9,_0xc0cc[65])};exports[_0xc0cc[66]]=function(_0xe7c3x8,_0xe7c3x9){docExtract(_0xe7c3x8,_0xe7c3x9,_0xc0cc[67])};function docExtract(_0xe7c3x8,_0xe7c3x9,_0xe7c3x21){if(!_0xe7c3x8[_0xc0cc[69]][_0xc0cc[68]]||!_0xe7c3x8[_0xc0cc[69]][_0xc0cc[70]]){return _0xe7c3x9[_0xc0cc[37]](500)[_0xc0cc[36]]({message:_0xc0cc[71]})};DefaultReport[_0xc0cc[63]](_0xe7c3x8[_0xc0cc[62]][_0xc0cc[61]],{include:[{all:true}]})[_0xc0cc[48]](function(_0xe7c3x1d){if(!_0xe7c3x1d){return _0xe7c3x9[_0xc0cc[56]](404)};return [_0xe7c3x1d,ExtractedReport[_0xc0cc[73]]({name:_0xe7c3x1d[_0xc0cc[10]],startDate:_0xe7c3x8[_0xc0cc[69]][_0xc0cc[68]],endDate:_0xe7c3x8[_0xc0cc[69]][_0xc0cc[70]],output:_0xe7c3x21})];})[_0xc0cc[53]](function(_0xe7c3x1d,_0xe7c3x22){extractUtils[_0xc0cc[72]+_0xe7c3x21](_0xe7c3x1d,_0xe7c3x8[_0xc0cc[69]][_0xc0cc[68]],_0xe7c3x8[_0xc0cc[69]][_0xc0cc[70]],_0xe7c3x22[_0xc0cc[61]])})[_0xc0cc[38]](function(_0xe7c3x16){console[_0xc0cc[51]](_0xe7c3x16);return handleError(_0xe7c3x9,_0xe7c3x16);});return _0xe7c3x9[_0xc0cc[56]](200);}function buildReport(_0xe7c3x1d,_0xe7c3xe,_0xe7c3x24){var _0xe7c3x25=[],_0xe7c3x26=[],_0xe7c3x27=[];_[_0xc0cc[26]](_0xe7c3x1d.Fields,function(_0xe7c3x28){var _0xe7c3x29=_0xc0cc[74];if(_0xe7c3x28[_0xc0cc[75]]){switch(_0xe7c3x28[_0xc0cc[75]]){case _0xc0cc[78]:_0xe7c3x29=util[_0xc0cc[21]](_0xc0cc[76],_0xe7c3x28[_0xc0cc[77]]);break ;;case _0xc0cc[80]:_0xe7c3x29=util[_0xc0cc[21]](_0xc0cc[79],_0xe7c3x28[_0xc0cc[77]],_0xe7c3x28[_0xc0cc[77]]);break ;;case _0xc0cc[82]:_0xe7c3x29=util[_0xc0cc[21]](_0xc0cc[81],_0xe7c3x28[_0xc0cc[77]],_0xe7c3x28[_0xc0cc[77]]);break ;;default:_0xe7c3x29=util[_0xc0cc[21]](_0xc0cc[83],_0xe7c3x28[_0xc0cc[75]],_0xe7c3x28[_0xc0cc[77]]);;}}else {_0xe7c3x29=_0xe7c3x28[_0xc0cc[77]]};_0xe7c3x25[_0xc0cc[25]](util[_0xc0cc[21]](_0xc0cc[84],_0xe7c3x29,_0xe7c3x28[_0xc0cc[85]]));if(_0xe7c3x28[_0xc0cc[86]]){_0xe7c3x26[_0xc0cc[25]](_0xe7c3x28[_0xc0cc[77]])};if(_0xe7c3x28[_0xc0cc[87]]){_0xe7c3x27[_0xc0cc[25]](util[_0xc0cc[21]](_0xc0cc[17],_0xe7c3x28[_0xc0cc[77]],_0xe7c3x28[_0xc0cc[87]]))};});var _0xe7c3x2a=getConditions(JSON[_0xc0cc[30]](_0xe7c3x1d[_0xc0cc[89]])[_0xc0cc[88]]);var _0xe7c3x2b=_0xc0cc[58];_0xe7c3x2b+=_0xc0cc[90]+_0xe7c3x25[_0xc0cc[92]](_0xc0cc[91]);if(_0xe7c3x24){_0xe7c3x2b+=_0xc0cc[93]};_0xe7c3x2b+=_0xc0cc[94]+_0xe7c3x1d[_0xc0cc[95]];_0xe7c3x2b+=_0xe7c3x2a!==_0xc0cc[96]?_0xc0cc[97]+_0xe7c3x2a:_0xc0cc[74];var _0xe7c3x2c=false;var _0xe7c3x2d=false;if(_0xe7c3xe){_[_0xc0cc[31]](_0xe7c3xe,function(_0xe7c3xf,_0xe7c3x10){switch(_0xe7c3x10){case _0xc0cc[15]:if(_0xe7c3xe[_0xc0cc[98]]){_0xe7c3x2c=parseInt(_0xe7c3xe[_0xc0cc[98]],10);_0xe7c3x2d=parseInt(_0xe7c3xf,10)*_0xe7c3x2c;};break ;;case _0xc0cc[98]:_0xe7c3x2c=parseInt(_0xe7c3xf,10);break ;;case _0xc0cc[68]:_0xe7c3x2b+=_0xc0cc[99]+_0xe7c3xf+_0xc0cc[100];break ;;case _0xc0cc[70]:_0xe7c3x2b+=_0xc0cc[101]+_0xe7c3xf+_0xc0cc[100];break ;;case _0xc0cc[60]:break ;;default:var _0xe7c3x2e=_[_0xc0cc[102]](_0xe7c3x1d.Fields,{alias:_0xe7c3x10})[_0xc0cc[77]];if(_0xe7c3x2e){_0xe7c3x2b+=_0xc0cc[103]+_0xe7c3x2e+_0xc0cc[104]+_0xe7c3xf+_0xc0cc[105]}else {_0xe7c3x2b+=_0xc0cc[103]+_0xe7c3x10+_0xc0cc[104]+_0xe7c3xf+_0xc0cc[105]};;}})};_0xe7c3x2b+=_0xe7c3x26[_0xc0cc[52]]?_0xc0cc[106]+_0xe7c3x26[_0xc0cc[92]](_0xc0cc[91]):_0xc0cc[74];_0xe7c3x2b+=_0xe7c3x27[_0xc0cc[52]]?_0xc0cc[107]+_0xe7c3x27[_0xc0cc[92]](_0xc0cc[91]):_0xc0cc[74];_0xe7c3x2b+=_0xe7c3x2c&&!_0xe7c3x24?_0xc0cc[108]+_0xe7c3x2c:_0xc0cc[74];_0xe7c3x2b+=_0xe7c3x2d&&!_0xe7c3x24?_0xc0cc[109]+_0xe7c3x2d:_0xc0cc[74];return _0xe7c3x2b;}function getConditions(_0xe7c3x30){if(!_0xe7c3x30){return _0xc0cc[74]};for(var _0xe7c3x31=_0xc0cc[110],_0xe7c3x32=0;_0xe7c3x32<_0xe7c3x30[_0xc0cc[111]][_0xc0cc[52]];_0xe7c3x32++){_0xe7c3x32>0&&(_0xe7c3x31+=_0xc0cc[90]+_0xe7c3x30[_0xc0cc[112]]+_0xc0cc[90]);_0xe7c3x31+=_0xe7c3x30[_0xc0cc[111]][_0xe7c3x32][_0xc0cc[88]]?getConditions(_0xe7c3x30[_0xc0cc[111]][_0xe7c3x32][_0xc0cc[88]]):_0xe7c3x30[_0xc0cc[111]][_0xe7c3x32][_0xc0cc[77]]+_0xc0cc[90]+_0xe7c3x30[_0xc0cc[111]][_0xe7c3x32][_0xc0cc[113]]+_0xc0cc[114]+(_0xe7c3x30[_0xc0cc[111]][_0xe7c3x32][_0xc0cc[113]]===_0xc0cc[115]?_0xc0cc[24]+_0xe7c3x30[_0xc0cc[111]][_0xe7c3x32][_0xc0cc[116]]+_0xc0cc[24]:_0xe7c3x30[_0xc0cc[111]][_0xe7c3x32][_0xc0cc[116]])+_0xc0cc[100];};return _0xe7c3x31+_0xc0cc[117];}exports[_0xc0cc[118]]=function(_0xe7c3x8,_0xe7c3x9){DefaultReport[_0xc0cc[63]](_0xe7c3x8[_0xc0cc[62]][_0xc0cc[61]],{include:[{all:true}]})[_0xc0cc[48]](function(_0xe7c3x1d){if(!_0xe7c3x1d){return _0xe7c3x9[_0xc0cc[56]](404)};return _0xe7c3x9[_0xc0cc[36]](_0xe7c3x1d);})[_0xc0cc[38]](function(_0xe7c3x16){return handleError(_0xe7c3x9,_0xe7c3x16)})};exports[_0xc0cc[119]]=function(_0xe7c3x8,_0xe7c3x9){DefaultReport[_0xc0cc[63]](_0xe7c3x8[_0xc0cc[62]][_0xc0cc[61]],{include:[{all:true}]})[_0xc0cc[48]](function(_0xe7c3x1d){if(!_0xe7c3x1d){return _0xe7c3x9[_0xc0cc[56]](404)};var _0xe7c3x33=_0xe7c3x1d[_0xc0cc[57]];delete _0xe7c3x33[_0xc0cc[61]];delete _0xe7c3x33[_0xc0cc[120]];delete _0xe7c3x33[_0xc0cc[121]];_0xe7c3x33[_0xc0cc[12]]=_0xe7c3x8[_0xc0cc[69]][_0xc0cc[12]];_0xe7c3x33[_0xc0cc[122]]=_[_0xc0cc[123]](_0xe7c3x33.Fields,_0xc0cc[57]);_[_0xc0cc[26]](_0xe7c3x33.Fields,function(_0xe7c3x28){delete _0xe7c3x28[_0xc0cc[61]];delete _0xe7c3x28[_0xc0cc[124]];delete _0xe7c3x28[_0xc0cc[120]];delete _0xe7c3x28[_0xc0cc[121]];});return CustomReport[_0xc0cc[73]](_0xe7c3x33,{include:[{all:true}]});})[_0xc0cc[48]](function(){return _0xe7c3x9[_0xc0cc[56]](201)})[_0xc0cc[38]](function(_0xe7c3x16){console[_0xc0cc[51]](_0xe7c3x16);return handleError(_0xe7c3x9,_0xe7c3x16);})};exports[_0xc0cc[73]]=function(_0xe7c3x8,_0xe7c3x9){DefaultReport[_0xc0cc[73]](_0xe7c3x8[_0xc0cc[69]])[_0xc0cc[48]](function(_0xe7c3x1d){return _0xe7c3x9[_0xc0cc[37]](201)[_0xc0cc[36]](_0xe7c3x1d)})[_0xc0cc[38]](function(_0xe7c3x16){return handleError(_0xe7c3x9,_0xe7c3x16)})};exports[_0xc0cc[125]]=function(_0xe7c3x8,_0xe7c3x9){if(_0xe7c3x8[_0xc0cc[69]][_0xc0cc[61]]){delete _0xe7c3x8[_0xc0cc[69]][_0xc0cc[61]]};DefaultReport[_0xc0cc[63]](_0xe7c3x8[_0xc0cc[62]][_0xc0cc[61]])[_0xc0cc[48]](function(_0xe7c3x1d){if(!_0xe7c3x1d){return _0xe7c3x9[_0xc0cc[56]](404)};var _0xe7c3x34=_[_0xc0cc[126]](_0xe7c3x1d,_0xe7c3x8[_0xc0cc[69]]);_0xe7c3x34[_0xc0cc[127]]()[_0xc0cc[48]](function(){return _0xe7c3x9[_0xc0cc[37]](200)[_0xc0cc[36]](_0xe7c3x1d)})[_0xc0cc[38]](function(_0xe7c3x16){return handleError(_0xe7c3x9,_0xe7c3x16)});})[_0xc0cc[38]](function(_0xe7c3x16){return handleError(_0xe7c3x9,_0xe7c3x16)});};exports[_0xc0cc[128]]=function(_0xe7c3x8,_0xe7c3x9){DefaultReport[_0xc0cc[63]](_0xe7c3x8[_0xc0cc[62]][_0xc0cc[61]])[_0xc0cc[48]](function(_0xe7c3x1d){if(!_0xe7c3x1d){return _0xe7c3x9[_0xc0cc[56]](404)};_0xe7c3x1d[_0xc0cc[128]]()[_0xc0cc[48]](function(){return _0xe7c3x9[_0xc0cc[56]](204)})[_0xc0cc[38]](function(_0xe7c3x16){return handleError(_0xe7c3x9,_0xe7c3x16)});})[_0xc0cc[38]](function(_0xe7c3x16){return handleError(_0xe7c3x9,_0xe7c3x16)})};function handleError(_0xe7c3x9,_0xe7c3x16){return _0xe7c3x9[_0xc0cc[37]](500)[_0xc0cc[36]](_0xe7c3x16)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var DefaultReport = require('../../models').DefaultReport;
+var sequelize = require('../../models').sequelize;
+var CustomReport = require('../../models').CustomReport;
+var ExtractedReport = require('../../models').ExtractedReport;
+var extractUtils = require('../../utils/report_extraction');
+
+// Get list of default reports
+exports.index = function(req, res, next) {
+
+  var attributes = ['name', 'description', 'parent'];
+  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;
+      case 'role':
+        query.where.role = {
+          $or: value.split(/[\s,]+/)
+        };
+        break;
+      case 'clientQuery':
+        var params = JSON.parse(value);
+        _.forOwn(params, function(pValue, pKey) {
+          query.where[pKey] = pValue;
+        });
+        break;
+      default:
+        query.where[key] = {
+          $like: {}
+        };
+        query.where[key].$like = '%' + value + '%';
+    }
+  });
+
+  DefaultReport
+    .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!'
+      });
+    });
+};
+
+exports.preview = function(req, res) {
+  DefaultReport
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(report) {
+      console.log('found report');
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      var query = buildReport(report.dataValues, req.query);
+      // console.log(query);
+      var queries = [sequelize.query(query, {
+        type: sequelize.QueryTypes.SELECT
+      })];
+      if (req.query.uiPagination) {
+        var countQuery = buildReport(report.dataValues, req.query, true);
+        queries.push(sequelize.query(countQuery, {
+          type: sequelize.QueryTypes.SELECT
+        }));
+      }
+      return queries;
+    })
+    .all()
+    .spread(function(results, totalItems) {
+      console.log(results.length);
+      console.log(totalItems);
+      res.status(200).send({
+        rows: results,
+        count: totalItems ? totalItems[0] : null
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+exports.extractPdf = function(req, res) {
+  // console.log('extractPdf api function');
+  docExtract(req, res, 'PDF')
+};
+
+exports.extractCsv = function(req, res) {
+  // console.log('extractCsv api function');
+  docExtract(req, res, 'CSV');
+};
+
+function docExtract(req, res, typeFunction) {
+  // console.log('common docExtract api function');
+  if (!req.body.startDate || !req.body.endDate) {
+    return res.status(500).send({
+      message: 'MESSAGE_START_OR_END_DATE_MISSING'
+    });
+  }
+  DefaultReport
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      // console.log('found the report, creating the new DB row for extracted reports..');
+      //CREATE A DB ROW IN A TABLE WITH THE REPORT INFO, QUERY DATES, AND THE STATUS 'ELABORATING'
+      return [report, ExtractedReport.create({
+        name: report.name,
+        startDate: req.body.startDate,
+        endDate: req.body.endDate,
+        output: typeFunction
+      })]
+    })
+    .spread(function(report, extractedReport) {
+      // console.log('created new extracted reports db entry, calling external extraction function: ' + typeFunction);
+      extractUtils['extract' + typeFunction](report, req.body.startDate, req.body.endDate, extractedReport.id);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+  return res.sendStatus(200);
+}
+
+function buildReport(report, query, count) {
+  var fields = [],
+    groupBy = [],
+    orderBy = [];
+  _.forEach(report.Fields, function(elem) {
+    var field = '';
+    if (elem.function) {
+      switch (elem.function) {
+        case 'COUNT DISTINCT':
+          field = util.format('COUNT(DISTINCT %s)', elem.field);
+          break;
+        case 'GROUP_CONCAT ASC':
+          field = util.format('GROUP_CONCAT(%s ORDER BY %s ASC)', elem.field, elem.field);
+          break;
+        case 'GROUP_CONCAT DESC':
+          field = util.format('GROUP_CONCAT(%s ORDER BY %s DESC)', elem.field, elem.field);
+          break;
+        default:
+          field = util.format('%s(%s)', elem.function, elem.field);
+      }
+    } else {
+      field = elem.field;
+    }
+    fields.push(util.format('%s AS \'%s\'', field, elem.alias));
+    if (elem.groupBy) {
+      groupBy.push(elem.field);
+    }
+    if (elem.orderBy) {
+      orderBy.push(util.format('%s %s', elem.field, elem.orderBy));
+    }
+  });
+  var conditions = getConditions(JSON.parse(report.conditions).group);
+  var resultQuery = 'SELECT';
+  // query += fields.length ? ' ' + fields.join(',') : ' *';//right if you want to select all fields also
+  resultQuery += ' ' + fields.join(','); //generate a wrong query if there isn' t any field
+  if (count) {
+    resultQuery += ',COUNT(*)';
+  }
+  resultQuery += ' FROM ' + report.table;
+  resultQuery += conditions !== '()' ? ' WHERE ' + conditions : '';
+  var limit = false;
+  var offset = false;
+  if (query) {
+    _.forOwn(query, function(value, key) {
+      switch (key) {
+        case 'page':
+          if (query.perPage) {
+            limit = parseInt(query.perPage, 10);
+            offset = parseInt(value, 10) * limit;
+          }
+          break;
+        case 'perPage':
+          limit = parseInt(value, 10);
+          break;
+        case 'startDate':
+          resultQuery += ' AND createdAt >= \'' + value + '\'';
+          break;
+        case 'endDate':
+          resultQuery += ' AND createdAt <= \'' + value + '\'';
+          break;
+        case 'uiPagination':
+          break;
+        default:
+          var column = _.find(report.Fields, {
+            alias: key
+          }).field;
+          if (column) {
+            resultQuery += ' AND ' + column + ' LIKE \'%' + value + '%\'';
+          } else {
+            resultQuery += ' AND ' + key + ' LIKE \'%' + value + '%\'';
+          }
+      }
+    });
+  }
+  resultQuery += groupBy.length ? ' GROUP BY ' + groupBy.join(',') : '';
+  resultQuery += orderBy.length ? ' ORDER BY ' + orderBy.join(',') : '';
+  resultQuery += limit && !count ? ' LIMIT ' + limit : '';
+  resultQuery += offset && !count ? ' OFFSET ' + offset : '';
+  return resultQuery;
+}
+
+function getConditions(group) {
+  if (!group) return "";
+  for (var str = "(", i = 0; i < group.rules.length; i++) {
+    i > 0 && (str += " " + group.operator + " ");
+    str += group.rules[i].group ?
+      getConditions(group.rules[i].group) :
+      group.rules[i].field + " " + group.rules[i].condition + " '" + (group.rules[i].condition === 'LIKE' ? "%" + group.rules[i].value + "%" : group.rules[i].value) + "'";
+  }
+
+  return str + ')';
+}
+
+// Get a single report
+exports.show = function(req, res) {
+  DefaultReport
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      return res.send(report);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Copy a default report
+exports.copy = function(req, res) {
+  DefaultReport
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      var newReport = report.dataValues;
+      delete newReport.id;
+      delete newReport.createdAt;
+      delete newReport.updatedAt;
+      newReport.parent = req.body.parent;
+      newReport.Fields = _.pluck(newReport.Fields, 'dataValues');
+      _.forEach(newReport.Fields, function(elem) {
+        delete elem.id;
+        delete elem.DefaultReportId;
+        delete elem.createdAt;
+        delete elem.updatedAt;
+      });
+
+      return CustomReport.create(newReport, {
+        include: [{
+          all: true
+        }]
+      })
+    })
+    .then(function() {
+      return res.sendStatus(201);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Creates a new report in the DB.
+exports.create = function(req, res) {
+  DefaultReport
+    .create(req.body)
+    .then(function(report) {
+      return res.status(201).send(report);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing report in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  DefaultReport
+    .findById(req.params.id)
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(report, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(report);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a report from the DB.
+exports.destroy = function(req, res) {
+  DefaultReport
+    .findById(req.params.id)
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      report.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}