utilsSvc.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524
  1. var utilsSvc = angular.module('utilsSvc', []);
  2. utilsSvc.factory('utilsSvc', function($cookies, $rootScope, $http, $q,$window, $mdDialog, $location, $mdToast, $mdMedia) {
  3. var utilsSvc = {};
  4. utilsSvc.refreshTimeout = 20000;
  5. utilsSvc.adminTimeout = 5000;
  6. utilsSvc.alreadyShowingError = false;
  7. if (utilsSvc.refreshTimeout == 200000)
  8. alert("Togliere refreshtimeout di test");
  9. utilsSvc.interactiveRefreshTimeout = 1500;
  10. utilsSvc.isLoading = false;
  11. utilsSvc.timeoutPromise = null;
  12. utilsSvc.showConfirm = function(title, text, ev) {
  13. var confirm = $mdDialog.confirm(
  14. {onComplete: function afterShowAnimation(me,$event) {
  15. var $dialog = $event; //angular.element(document.querySelector('md-dialog'));
  16. var $actionsSection = $dialog.find('md-dialog-actions');
  17. var $cancelButton = $actionsSection.children()[0];
  18. var $confirmButton = $actionsSection.children()[1];
  19. angular.element($confirmButton).removeClass('md-focused');
  20. angular.element($cancelButton).addClass('md-focused');
  21. $cancelButton.focus();
  22. }})
  23. .title(title).htmlContent(text).ok(
  24. 'Ok').cancel('Annulla').multiple(true);
  25. if (typeof ev != "undefined")
  26. confirm.targetEvent(ev);
  27. return $mdDialog.show(confirm);
  28. }
  29. utilsSvc.showConfirmYesNo = function(title, text, ev) {
  30. var confirm = $mdDialog.confirm({onComplete: function afterShowAnimation() {
  31. var $dialog = angular.element(document.querySelector('md-dialog'));
  32. var $actionsSection = $dialog.find('md-dialog-actions');
  33. var $cancelButton = $actionsSection.children()[0];
  34. var $confirmButton = $actionsSection.children()[1];
  35. angular.element($confirmButton).removeClass('md-focused');
  36. angular.element($cancelButton).addClass('md-focused');
  37. $cancelButton.focus();
  38. }})
  39. .title(title).htmlContent(text).ok(
  40. 'Si').cancel('No').multiple(true);
  41. if (typeof ev != "undefined")
  42. confirm.targetEvent(ev);
  43. return $mdDialog.show(confirm);
  44. }
  45. utilsSvc.handleHttpError = function(error) {
  46. if (!utilsSvc.alreadyShowingError) {
  47. utilsSvc.alreadyShowingError = true;
  48. if (error.status == 401)
  49. utilsSvc.show(
  50. "Sessione scaduta o non valida: rieseguire la login: "
  51. + error.statusText).then(function() {
  52. utilsSvc.alreadyShowingError = false;
  53. $location.path("/");
  54. });
  55. else {
  56. var msg = error.statusText;
  57. if (error.data)
  58. msg = error.data;
  59. if (error.data.value)
  60. msg = error.data.value;
  61. var title = msg;
  62. if (error.status != 404)
  63. title = "Errore " + error.status
  64. + " durante la richiesta al server: "
  65. + msg;
  66. utilsSvc.show(title).then(function() {
  67. utilsSvc.alreadyShowingError = false;
  68. });
  69. }
  70. }
  71. }
  72. utilsSvc.CheckId = function(id) {
  73. if (typeof id == "undefined")
  74. return false;
  75. if (id == null || id == 0)
  76. return false;
  77. return true;
  78. }
  79. utilsSvc.showMessage = function(message) {
  80. return $mdToast.show($mdToast.simple({templateUrl : 'templates/toast-template.html', controller : 'ToastCtrl', message:message}).content(message));
  81. }
  82. utilsSvc.show = function(message) {
  83. return $mdToast.show($mdToast.simple({templateUrl : 'templates/toast-wait-template.html', controller : 'ToastCtrl', message:message}).content(message).hideDelay(0).action(
  84. "ok"));
  85. }
  86. utilsSvc.showForever = function(message) {
  87. $mdToast.show($mdToast.simple({templateUrl : 'templates/toast-template.html', controller : 'ToastCtrl', message:message}).content(message).hideDelay(0));
  88. }
  89. utilsSvc.cancelMessage = function() {
  90. $mdToast.hide();
  91. }
  92. utilsSvc.showWaitMessage = function(message) {
  93. $('#waitIndicator').show();
  94. }
  95. utilsSvc.cancelWaitMessage = function() {
  96. $('#waitIndicator').hide();
  97. }
  98. utilsSvc.resizeGrid = function(rows, rowHeight) {
  99. // This will adjust the css after the Data is loaded
  100. var newHeight = (rows * rowHeight) + 60;
  101. angular.element(document.getElementsByClassName('grid')[0]).css(
  102. 'height', newHeight + 'px');
  103. };
  104. utilsSvc.isEmpty = function(data) {
  105. return data == null || data == "";
  106. };
  107. utilsSvc.downloadFile = function(mimeType,data,filename) {
  108. // check for IE
  109. if (window.navigator.msSaveBlob) {
  110. blobObject = new Blob([data], {type: mimeType+";charset=utf-8"});
  111. window.navigator.msSaveOrOpenBlob(blobObject, filename);
  112. } else {
  113. //if (mimeType=="application/pdf"){
  114. var blob = new Blob([data], {type: mimeType+";charset=utf-8"});
  115. var link = document.createElement('a');
  116. link.href = window.URL.createObjectURL(blob);
  117. link.download = filename;
  118. link.click();
  119. // } else {
  120. // var a = document.createElement('a');
  121. // a.href = 'data:'+mimeType + "," + encodeURIComponent(data);
  122. // a.target = '_blank';
  123. // a.download = filename;
  124. //
  125. // document.body.appendChild(a);
  126. // a.click();
  127. // document.body.removeChild(a);
  128. // }
  129. }
  130. }
  131. utilsSvc.help = function(templateUrl, event) {
  132. $scope.help = function(ev) {
  133. var helpFile = 'help/' + templateUrl;
  134. $mdDialog.show({
  135. templateUrl : helpFile,
  136. controller : 'helpCtrl',
  137. targetEvent : ev
  138. });
  139. }
  140. }
  141. utilsSvc.dateDiff = function(d1, d2) {
  142. var delta = Math.abs(d2 - d1) / 1000;
  143. var days = Math.floor(delta / 86400);
  144. delta -= days * 86400;
  145. var hours = Math.floor(delta / 3600) % 24;
  146. delta -= hours * 3600;
  147. var minutes = Math.floor(delta / 60) % 60;
  148. delta -= minutes * 60;
  149. var seconds = Math.floor(delta % 60);
  150. var res = (days > 0 ? days + 'd' : '') + hours + 'h' + minutes + 'm'
  151. + seconds + 's';
  152. return res;
  153. }
  154. utilsSvc.decodeCircuitoSDD = function(cod) {
  155. if (typeof cod == "undefined")
  156. return "";
  157. if (cod == "1")
  158. return "RID SEPA";
  159. if (cod == "2")
  160. return "SDD";
  161. if (cod == "3")
  162. return "SDD Esteri";
  163. return "RID CBI";
  164. }
  165. utilsSvc.decodeTipologia = function(tipologia){
  166. if (tipologia=="BONIFICI")
  167. return "SCT";
  168. else if (tipologia=="RID")
  169. return "SDD";
  170. else if (tipologia=="AEA")
  171. return "SEDA";
  172. else if (tipologia=="BONIFICI_ESTERI")
  173. return "STPE";
  174. else if (tipologia=="DOM")
  175. return "DOM";
  176. else if (tipologia=="BONIFICI_INTERNI")
  177. return "SCT_INT";
  178. else
  179. return tipologia;
  180. return "";
  181. }
  182. utilsSvc.largeScreen =function(){
  183. return $mdMedia('gt-sm');
  184. }
  185. utilsSvc.veryLargeScreen =function(){
  186. return $mdMedia('gt-md');
  187. }
  188. utilsSvc.smallScreen =function(){
  189. return !$mdMedia('gt-sm');
  190. }
  191. utilsSvc.getGridHeight=function(){
  192. if (utilsSvc.smallScreen())
  193. return {'height': '40px', 'min-height':'40px'};
  194. else
  195. return {'height': '30px', 'min-height':'30px'};
  196. }
  197. utilsSvc.getGridWithButtonHeight=function(){
  198. if (utilsSvc.smallScreen())
  199. return {'height': '30px', 'min-height':'30px'};
  200. else
  201. return {'height': '30px', 'min-height':'30px'};
  202. }
  203. utilsSvc.controllaCF = function(cf){
  204. cf = cf.toUpperCase();
  205. if( cf == '' ) return true;
  206. if( ! /^[0-9A-Z]{16}$/.test(cf) )
  207. return false
  208. var map = [1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 1, 0, 5, 7, 9, 13, 15, 17,
  209. 19, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23];
  210. var s = 0;
  211. for(var i = 0; i < 15; i++){
  212. var c = cf.charCodeAt(i);
  213. if( c < 65 )
  214. c = c - 48;
  215. else
  216. c = c - 55;
  217. if( i % 2 == 0 )
  218. s += map[c];
  219. else
  220. s += c < 10? c : c - 10;
  221. }
  222. var atteso = String.fromCharCode(65 + s % 26);
  223. if( atteso != cf.charAt(15) )
  224. return false
  225. return true;
  226. }
  227. utilsSvc.controllaPIVA = function (pi) {
  228. if( pi == '' ) return true;
  229. if( ! /^[0-9]{11}$/.test(pi) )
  230. return false
  231. var s = 0;
  232. for( i = 0; i <= 9; i += 2 )
  233. s += pi.charCodeAt(i) - '0'.charCodeAt(0);
  234. for(var i = 1; i <= 9; i += 2 ){
  235. var c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
  236. if( c > 9 ) c = c - 9;
  237. s += c;
  238. }
  239. var atteso = ( 10 - s%10 )%10;
  240. if( atteso != pi.charCodeAt(10) - '0'.charCodeAt(0) )
  241. return false;
  242. return true;
  243. }
  244. utilsSvc.isNumber=function(str){
  245. for (var i=0;i<str.length;i++)
  246. if ("0123456789".indexOf(str[i])==-1)
  247. return false;
  248. return true;
  249. }
  250. utilsSvc.allTrim=function(string) {
  251. return string.replace(/ /g, '')
  252. }
  253. utilsSvc.only=function(string, allowedChars){
  254. var res="";
  255. for (var i=0;i<string.length;i++)
  256. if (allowedChars.indexOf(string[i])>=0)
  257. res+=string[i];
  258. return res;
  259. }
  260. utilsSvc.controllaCFoPiva=function(txt) {
  261. if (txt==null|| txt=='')
  262. return true;
  263. if (txt.length==11)
  264. return utilsSvc.controllaPIVA(txt);
  265. if (txt.length==16)
  266. return utilsSvc.controllaCF(txt);
  267. return false;
  268. }
  269. utilsSvc.controlloIban1 = function(input) {
  270. var CODE_LENGTHS = {
  271. AD: 24, AE: 23, AT: 20, AZ: 28, BA: 20, BE: 16, BG: 22, BH: 22, BR: 29,
  272. CH: 21, CR: 21, CY: 28, CZ: 24, DE: 22, DK: 18, DO: 28, EE: 20, ES: 24,
  273. FI: 18, FO: 18, FR: 27, GB: 22, GI: 23, GL: 18, GR: 27, GT: 28, HR: 21,
  274. HU: 28, IE: 22, IL: 23, IS: 26, IT: 27, JO: 30, KW: 30, KZ: 20, LB: 28,
  275. LI: 21, LT: 20, LU: 20, LV: 21, MC: 27, MD: 24, ME: 22, MK: 19, MR: 27,
  276. MT: 31, MU: 30, NL: 18, NO: 15, PK: 24, PL: 28, PS: 29, PT: 25, QA: 29,
  277. RO: 24, RS: 22, SA: 24, SE: 24, SI: 19, SK: 24, SM: 27, TN: 24, TR: 26
  278. };
  279. var iban = String(input).toUpperCase().replace(/[^A-Z0-9]/g, ''), // keep only alphanumeric characters
  280. code = iban.match(/^([A-Z]{2})(\d{2})([A-Z\d]+)$/), // match and capture (1) the country code, (2) the check digits, and (3) the rest
  281. digits;
  282. // check syntax and length
  283. if (!code || iban.length !== CODE_LENGTHS[code[1]]) {
  284. return false;
  285. }
  286. // rearrange country code and check digits, and convert chars to ints
  287. digits = (code[3] + code[1] + code[2]).replace(/[A-Z]/g, function (letter) {
  288. return letter.charCodeAt(0) - 55;
  289. });
  290. // final check
  291. return utilsSvc.mod97(digits);
  292. }
  293. utilsSvc.mod97=function (string) {
  294. var checksum = string.slice(0, 2), fragment;
  295. for (var offset = 2; offset < string.length; offset += 7) {
  296. fragment = String(checksum) + string.substring(offset, offset + 7);
  297. checksum = parseInt(fragment, 10) % 97;
  298. }
  299. return checksum;
  300. }
  301. utilsSvc.controlloIban=function(iban) {
  302. if (iban==null || iban=="")
  303. return true;
  304. iban = utilsSvc.allTrim(iban.toUpperCase());
  305. if (utilsSvc.isNumber(iban.substring(0,2)))
  306. return false;
  307. if (utilsSvc.only(iban, "ABCDEFGHJKILMNOPQRSTUVWXYZ0123456789 ").length != iban.length)
  308. return false;
  309. if (iban.substr(0,2)=="IT" || iban.substr(0,2)=="SM") {
  310. if (iban.length!=27)
  311. return false;
  312. }
  313. var bufStringa = iban;
  314. bufStringa = bufStringa.substring(4,99) + bufStringa.substring(0,4);
  315. var checkIban="";
  316. for (var i=0;i<bufStringa.length;i++){
  317. console.log("Check i: " + i+ " > " + bufStringa.substring(i,i+1));
  318. switch(bufStringa.substring(i,i+1)) {
  319. case "A": checkIban+="10";break;
  320. case "B": checkIban+="11";break;
  321. case "C": checkIban+="12";break;
  322. case "D": checkIban+="13";break;
  323. case "E": checkIban+="14";break;
  324. case "F": checkIban+="15";break;
  325. case "G": checkIban+="16";break;
  326. case "H": checkIban+="17";break;
  327. case "I": checkIban+="18";break;
  328. case "J": checkIban+="19";break;
  329. case "K": checkIban+="20";break;
  330. case "L": checkIban+="21";break;
  331. case "M": checkIban+="22";break;
  332. case "N": checkIban+="23";break;
  333. case "O": checkIban+="24";break;
  334. case "P": checkIban+="25";break;
  335. case "Q": checkIban+="26";break;
  336. case "R": checkIban+="27";break;
  337. case "S": checkIban+="28";break;
  338. case "T": checkIban+="29";break;
  339. case "U": checkIban+="30";break;
  340. case "V": checkIban+="31";break;
  341. case "W": checkIban+="32";break;
  342. case "X": checkIban+="33";break;
  343. case "Y": checkIban+="34";break;
  344. case "Z": checkIban+="35";break;
  345. default: checkIban+=bufStringa.substring(i,i+1);break;
  346. }
  347. }
  348. return utilsSvc.validateIban(checkIban, 97)==1
  349. }
  350. utilsSvc.validateIban=function(iban, modulo){
  351. var bufModulo=0;
  352. var i=1;
  353. var numero;
  354. do {
  355. if (i==1) {
  356. numero=parseFloat(iban.substring(i-1,i-1+9));
  357. i=10
  358. } else {
  359. numero=parseFloat(bufModulo.toString()+iban.substring(i-1,i-1+9-bufModulo.toString().length))
  360. i+=9-bufModulo.toString().length;
  361. }
  362. bufModulo = numero % modulo;
  363. } while (i<=iban.length);
  364. return bufModulo
  365. }
  366. utilsSvc.controlloCin=function(cin, abi, cab, conto) {
  367. var coordinate=abi.padZero(5) + cab.padZero(5)+conto.toUpperCase().padZero(12);
  368. var pari=false;
  369. var sommaCaratteri=0
  370. for(var i=1;i<=22;i++) {
  371. var carattere=coordinate.substring(i-1,i);
  372. pari = (i % 2) == 0;
  373. switch(carattere){
  374. case "A","0": sommaCaratteri+=(pari? 0: 1);break;
  375. case "B","1": sommaCaratteri+=(pari? 1: 0);break;
  376. case "C","2": sommaCaratteri+=(pari? 2: 5);break;
  377. case "D","3": sommaCaratteri+=(pari? 3: 7);break;
  378. case "E","4": sommaCaratteri+=(pari? 4: 9);break;
  379. case "F","5": sommaCaratteri+=(pari? 5: 13);break;
  380. case "G","6": sommaCaratteri+=(pari? 6: 15);break;
  381. case "H","7": sommaCaratteri+=(pari? 7: 17);break;
  382. case "I","8": sommaCaratteri+=(pari? 8: 19);break;
  383. case "J","9": sommaCaratteri+=(pari? 9: 21);break;
  384. case "K": sommaCaratteri+=(pari? 10: 2);break;
  385. case "L": sommaCaratteri+=(pari? 11: 4);break;
  386. case "M": sommaCaratteri+=(pari? 12: 18);break;
  387. case "N": sommaCaratteri+=(pari? 13: 20);break;
  388. case "O": sommaCaratteri+=(pari? 14: 11);break;
  389. case "P": sommaCaratteri+=(pari? 15: 3);break;
  390. case "Q": sommaCaratteri+=(pari? 16: 6);break;
  391. case "R": sommaCaratteri+=(pari? 17: 8);break;
  392. case "S": sommaCaratteri+=(pari? 18: 12);break;
  393. case "T": sommaCaratteri+=(pari? 19: 14);break;
  394. case "U": sommaCaratteri+=(pari? 20: 16);break;
  395. case "V": sommaCaratteri+=(pari? 21: 10);break;
  396. case "W": sommaCaratteri+=(pari? 22: 22);break;
  397. case "X": sommaCaratteri+=(pari? 23: 25);break;
  398. case "Y": sommaCaratteri+=(pari? 24: 24);break;
  399. case "K": sommaCaratteri+=(pari? 25: 23);break;
  400. }
  401. }
  402. var restoSommaCaratteri = sommaCaratteri % 26;
  403. switch(restoSommaCaratteri) {
  404. case 0: return "A"==cin;
  405. case 1: return "B"==cin;
  406. case 2: return "C"==cin;
  407. case 3: return "D"==cin;
  408. case 4: return "E"==cin;
  409. case 5: return "F"==cin;
  410. case 6: return "G"==cin;
  411. case 7: return "H"==cin;
  412. case 8: return "I"==cin;
  413. case 9: return "J"==cin;
  414. case 10: return "K"==cin;
  415. case 11: return "L"==cin;
  416. case 12: return "M"==cin;
  417. case 13: return "N"==cin;
  418. case 14: return "O"==cin;
  419. case 15: return "P"==cin;
  420. case 16: return "Q"==cin;
  421. case 17: return "R"==cin;
  422. case 18: return "S"==cin;
  423. case 19: return "T"==cin;
  424. case 20: return "U"==cin;
  425. case 21: return "V"==cin;
  426. case 22: return "W"==cin;
  427. case 23: return "X"==cin;
  428. case 24: return "Y"==cin;
  429. case 25: return "Z"==cin;
  430. default: return false;
  431. }
  432. }
  433. utilsSvc.checkValuta=function(event, len){
  434. if ("0123456789,.".indexOf(event.key)==-1 || event.target.value.length>=len)
  435. event.preventDefault();
  436. }
  437. return utilsSvc;
  438. })
  439. .controller('ToastCtrl', function($scope, $mdToast, $mdDialog, message) {
  440. $scope.message = message;
  441. $scope.closeToast = function() {
  442. $mdToast
  443. .hide()
  444. };
  445. });