diff --git a/app/index.html b/app/index.html index a35bd5c..148c9a2 100755 --- a/app/index.html +++ b/app/index.html @@ -54,6 +54,11 @@

Boleto bancário

+
+ +

{{$parent.boleto | boleto}}

+
+ diff --git a/app/scripts/angular-boleto.js b/app/scripts/angular-boleto.js index c1a28fe..82a58d4 100644 --- a/app/scripts/angular-boleto.js +++ b/app/scripts/angular-boleto.js @@ -2,6 +2,29 @@ angular.module('angular.boleto', ['ui.mask']) + .filter('boleto', ['$filter', function ($filter) { + return function (boleto) { + if (typeof boleto !== 'undefined') { + var boleto = boleto.replace(/[^0-9-]/g,''); + + if (boleto === '') { + return ''; + } + + var boletoFormatado = boleto.slice(0, 5) + '.'; + boletoFormatado = boletoFormatado + boleto.slice(5, 10) + ' '; + boletoFormatado = boletoFormatado + boleto.slice(10, 15) + '.'; + boletoFormatado = boletoFormatado + boleto.slice(15, 21) + ' '; + boletoFormatado = boletoFormatado + boleto.slice(21, 26) + '.'; + boletoFormatado = boletoFormatado + boleto.slice(26, 32) + ' '; + boletoFormatado = boletoFormatado + boleto.slice(32, 33) + ' '; + boletoFormatado = boletoFormatado + boleto.slice(33, 47); + + return boletoFormatado; + } + }; + }]) + .filter('utc', ['$filter', function ($filter) { return function (date, format) { var dateOk, dateResult; diff --git a/app/scripts/angular-boleto.min.js b/app/scripts/angular-boleto.min.js index 4baaca0..2841c7b 100644 --- a/app/scripts/angular-boleto.min.js +++ b/app/scripts/angular-boleto.min.js @@ -1 +1 @@ -"use strict";angular.module("angular.boleto",["ui.mask"]).filter("utc",["$filter",function(e){return function(r,t){var a,n;return(angular.isNumber(r)||angular.isString(r))&&(a=new Date(r)),n=angular.isDate(a)?new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds()):r,"undefined"!=typeof t&&t?e("date")(n,t):n}}]).directive("inputBoleto",["$filter",function(e){return{restrict:"E",replace:!0,require:"?ngModel",scope:{form:"=",name:"@",validarValor:"=",validarVencimento:"="},template:'',link:function(r,t,a){r.$watch(a.ngModel,function(e){n(e)});var n=function(e){var t;return o(),"undefined"!=typeof e&&0!=e.length?(t=e.replace(/[^0-9]/g,""),t.length<47?(r.form[r.name].$setValidity("tamanhoErrado",!1),!1):0===parseInt(t)||0===t.length?(r.form[r.name].$setValidity("zerado",!1),!1):47==t.length&&u(t)?!0:void 0):void 0},o=function(){r.form[r.name].$setValidity("tamanhoErrado",!0),r.form[r.name].$setValidity("zerado",!0),r.form[r.name].$setValidity("verificadorErrado",!0),r.form[r.name].$setValidity("bloco1Errado",!0),r.form[r.name].$setValidity("bloco2Errado",!0),r.form[r.name].$setValidity("bloco3Errado",!0),r.form[r.name].$setValidity("valorErrado",!0),r.form[r.name].$setValidity("vencimentoErrado",!0)},i=function(e){for(var r,t=0,a=2,n=e.length-1;n>=0;)r=e.substr(n,1)*a,r>=10&&(r=1+(r-10)),t+=r,a=2==a?1:2,n-=1;var o=10-t%10;return 10==o&&(o=0),o},l=function(t){var a=function(r,t){return t=angular.copy(t),"number"==typeof t&&(t=e("utc")(t)),t.setTime(t.getTime()+24*parseInt(r)*60*60*1e3)},n=function(e,r){return Math.ceil((r-e)/864e5)},o=e("utc")("1997-10-07T00:00:00Z"),i=e("utc")(r.validarVencimento),l=n(o,i);if(l>9999){console.log("Data dentro do limite normalizado no comunicado FEBRABAN de n° 082/2012 de 14/06/2012.",r.validarVencimento);var u=e("utc")(a(9e3,o));o=angular.copy(u)}return a(t,o)},u=function(t){var a=t.substr(0,9),n=t.substr(9,1),o=i(a);if(0===parseInt(a)||n!=o)return r.form[r.name].$setValidity("bloco1Errado",!1),!1;var u=t.substr(10,10),d=t.substr(20,1),s=i(u);if(0===parseInt(u)||d!=s)return r.form[r.name].$setValidity("bloco2Errado",!1),!1;var m=t.substr(21,10),f=t.substr(31,1),c=i(m);if(0===parseInt(m)||f!=c)return r.form[r.name].$setValidity("bloco3Errado",!1),!1;if("undefined"!=typeof r.validarVencimento&&""!==r.validarVencimento){var v=t.substr(33,4),y=l(v);if(y=e("utc")(y,"yyyy-MM-dd"),r.validarVencimento!==y)return r.form[r.name].$setValidity("vencimentoErrado",!1),!1}if("undefined"!=typeof r.validarValor){var g=t.substr(37,10);if(g=parseFloat(g.substr(0,8)+"."+g.substr(g.length-2)),g!==r.validarValor)return r.form[r.name].$setValidity("valorErrado",!1),!1}return!0}}}}]); \ No newline at end of file +"use strict";angular.module("angular.boleto",["ui.mask"]).filter("boleto",["$filter",function(){return function(e){if("undefined"!=typeof e){var e=e.replace(/[^0-9-]/g,"");if(""===e)return"";var r=e.slice(0,5)+".";return r=r+e.slice(5,10)+" ",r=r+e.slice(10,15)+".",r=r+e.slice(15,21)+" ",r=r+e.slice(21,26)+".",r=r+e.slice(26,32)+" ",r=r+e.slice(32,33)+" ",r+=e.slice(33,47)}}}]).filter("utc",["$filter",function(e){return function(r,t){var a,n;return(angular.isNumber(r)||angular.isString(r))&&(a=new Date(r)),n=angular.isDate(a)?new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds()):r,"undefined"!=typeof t&&t?e("date")(n,t):n}}]).directive("inputBoleto",["$filter",function(e){return{restrict:"E",replace:!0,require:"?ngModel",scope:{form:"=",name:"@",validarValor:"=",validarVencimento:"="},template:'',link:function(r,t,a){r.$watch(a.ngModel,function(e){n(e)});var n=function(e){var t;return i(),"undefined"!=typeof e&&0!=e.length?(t=e.replace(/[^0-9]/g,""),t.length<47?(r.form[r.name].$setValidity("tamanhoErrado",!1),!1):0===parseInt(t)||0===t.length?(r.form[r.name].$setValidity("zerado",!1),!1):47==t.length&&u(t)?!0:void 0):void 0},i=function(){r.form[r.name].$setValidity("tamanhoErrado",!0),r.form[r.name].$setValidity("zerado",!0),r.form[r.name].$setValidity("verificadorErrado",!0),r.form[r.name].$setValidity("bloco1Errado",!0),r.form[r.name].$setValidity("bloco2Errado",!0),r.form[r.name].$setValidity("bloco3Errado",!0),r.form[r.name].$setValidity("valorErrado",!0),r.form[r.name].$setValidity("vencimentoErrado",!0)},o=function(e){for(var r,t=0,a=2,n=e.length-1;n>=0;)r=e.substr(n,1)*a,r>=10&&(r=1+(r-10)),t+=r,a=2==a?1:2,n-=1;var i=10-t%10;return 10==i&&(i=0),i},l=function(t){var a=function(r,t){return t=angular.copy(t),"number"==typeof t&&(t=e("utc")(t)),t.setTime(t.getTime()+24*parseInt(r)*60*60*1e3)},n=function(e,r){return Math.ceil((r-e)/864e5)},i=e("utc")("1997-10-07T00:00:00Z"),o=e("utc")(r.validarVencimento),l=n(i,o);if(l>9999){console.log("Data dentro do limite normalizado no comunicado FEBRABAN de n° 082/2012 de 14/06/2012.",r.validarVencimento);var u=e("utc")(a(9e3,i));i=angular.copy(u)}return a(t,i)},u=function(t){var a=t.substr(0,9),n=t.substr(9,1),i=o(a);if(0===parseInt(a)||n!=i)return r.form[r.name].$setValidity("bloco1Errado",!1),!1;var u=t.substr(10,10),d=t.substr(20,1),s=o(u);if(0===parseInt(u)||d!=s)return r.form[r.name].$setValidity("bloco2Errado",!1),!1;var c=t.substr(21,10),f=t.substr(31,1),m=o(c);if(0===parseInt(c)||f!=m)return r.form[r.name].$setValidity("bloco3Errado",!1),!1;if("undefined"!=typeof r.validarVencimento&&""!==r.validarVencimento){var v=t.substr(33,4),y=l(v);if(y=e("utc")(y,"yyyy-MM-dd"),r.validarVencimento!==y)return r.form[r.name].$setValidity("vencimentoErrado",!1),!1}if("undefined"!=typeof r.validarValor){var g=t.substr(37,10);if(g=parseFloat(g.substr(0,8)+"."+g.substr(g.length-2)),g!==r.validarValor)return r.form[r.name].$setValidity("valorErrado",!1),!1}return!0}}}}]); \ No newline at end of file diff --git a/bower.json b/bower.json index 03c71e4..d62cbe4 100755 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-boleto", - "version": "0.1.2", + "version": "0.1.3", "homepage": "https://github.com/bernardolm/angular-boleto", "authors": [ "Bernardo Loureiro (http://bernardoloureiro.com.br)" diff --git a/test/filtersSpec.js b/test/filtersSpec.js index de582b9..d41cb74 100644 --- a/test/filtersSpec.js +++ b/test/filtersSpec.js @@ -38,4 +38,24 @@ describe('Testando Filters:', function() { expect(dateUTC).toBe('01/09/2014'); }); }); + + describe('boleto:', function() { + it('0-boleto deve estar definido', function() { + expect($filter('boleto')).toBeDefined(); + }); + + it('1-boleto', function() { + var boleto = '21890010070014560208200371313180159470127456789'; + var boletoFormatado = $filter('boleto')(boleto); + + expect(boletoFormatado).toBe('21890.01007 00145.602082 00371.313180 1 59470127456789'); + }); + + it('2-boleto', function() { + var boleto = ''; + var boletoFormatado = $filter('boleto')(boleto); + + expect(boletoFormatado).toBe(''); + }); + }); });