UNPKG

@jcbautistam/custom-table

Version:

Librería de tabla reutilizable con acciones, filtros, exportación y más.

169 lines 18.3 kB
import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; export class FormatNumberService { constructor() { } formatNumber(value, char) { if (value == null || value == undefined) return; // Convertir a string si es un número if (typeof value === 'number') { value = value.toString(); } value = value.replace(/[^0-9.-]*/g, ''); const parts = value.split('.'); //Agrega una coma cada 3 cifras parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ','); value = parts.join('.'); //Solo acepta un punto decimal if (parts.length > 2) { value = parts[0] + '.' + parts.slice(1).join(''); } // Solo acepta dos decimales y completa con ceros si es necesario if (parts.length > 1) { let decimalPart = parts[1].slice(0, 4); // if (decimalPart.length < 4) { // decimalPart = decimalPart.padEnd(4, '0'); // } value = `${parts[0]}.${decimalPart}`; } // else { // value = `${parts[0]}.0000`; // } if (char != null) value = char + value; return value; } convertToNumber(value) { if (value == null || value === '0') return 0; if (typeof value === 'number') { return isNaN(value) ? 0 : value; } value = value.replace(/[^0-9.]*/g, ''); const numberValue = Number(value); return isNaN(numberValue) ? 0 : numberValue; } // convertToNumber(value: any): number { // console.log('convertToNumber',value); // if (value == null || value == '0') return 0; // if (typeof value === 'number') // return value; // value = value.replace(/[^0-9.-]*/g, ''); // return Number(value); // } textNumber(num) { console.log('textNumber', num); let numWord = ''; let numUnidad = 0; let numResult = num; let and = ' '; const integerPart = Math.floor(num); const decimalPart = Math.round((num - integerPart) * 100); const decimalPartInWords = decimalPart.toString().padStart(2, '0'); numUnidad = Math.floor(numResult / 1000); if (numUnidad > 0) { if (numUnidad > 1) numWord = numWord + this.numberToWords(numUnidad) + ' MIL'; else numWord = 'MIL '; numResult = numResult - numUnidad * 1000; } numUnidad = Math.floor(numResult / 100) * 100; if (numUnidad > 0) { numWord = numWord + ' ' + this.numberToWords(numUnidad); numResult = numResult - numUnidad; } numUnidad = Math.floor(numResult / 10) * 10; if (numUnidad > 0) { numWord = numWord + ' ' + this.numberToWords(numUnidad); numResult = numResult - numUnidad; and = ' Y '; } numUnidad = Math.floor(numResult); if (numUnidad > 0) { numWord = numWord + and + this.numberToWords(numUnidad); numResult = numResult - numUnidad; } return `${numWord} ${decimalPartInWords}/100 M.N.`; } numberToWords(num) { const units = [ '', 'UNO', 'DOS', 'TRES', 'CUATRO', 'CINCO', 'SEIS', 'SIETE', 'OCHO', 'NUEVE', ]; const tens = [ '', 'DIEZ', 'VEINTE', 'TREINTA', 'CUARENTA', 'CINCUENTA', 'SESENTA', 'SETENTA', 'OCHENTA', 'NOVENTA', ]; const teens = [ 'ONCE', 'DOCE', 'TRECE', 'CATORCE', 'QUINCE', 'DIECISEIS', 'DIECISIETE', 'DIECIOCHO', 'DIECINUEVE', ]; const hundreds = [ '', 'CIENTO', 'DOSCIENTOS', 'TRESCIENTOS', 'CUATROCIENTOS', 'QUINIENTOS', 'SEISCIENTOS', 'SETECIENTOS', 'OCHOCIENTOS', 'NOVECIENTOS', ]; if (num === 0) return 'CERO'; if (num === 100) return 'CIEN'; let word = ''; if (Math.floor(num / 100) > 0) { word += hundreds[Math.floor(num / 100)] + ' '; } let remainder = num % 100; if (remainder >= 11 && remainder <= 19) { word += teens[remainder - 11]; } else { if (Math.floor(remainder / 10) > 0) { word += tens[Math.floor(remainder / 10)] + ' '; } remainder = remainder % 10; if (remainder > 0) { word += units[remainder]; } } return word.trim(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: FormatNumberService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: FormatNumberService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: FormatNumberService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0TnVtYmVyLlNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jdXN0b20tdGFibGUvc3JjL2xpYi9TZXJ2aWNlcy9mb3JtYXROdW1iZXIuU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLGdCQUFlLENBQUM7SUFFaEIsWUFBWSxDQUFDLEtBQVUsRUFBRSxJQUFhO1FBRXBDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksU0FBUztZQUNyQyxPQUFPO1FBRVQscUNBQXFDO1FBQ3JDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDMUI7UUFFRCxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvQiwrQkFBK0I7UUFDL0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUQsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFeEIsOEJBQThCO1FBQzlCLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbEQ7UUFFRSxpRUFBaUU7UUFD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LEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybWF0TnVtYmVyU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBmb3JtYXROdW1iZXIodmFsdWU6IGFueSwgY2hhcj86IHN0cmluZykge1xyXG5cclxuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5lZCApIFxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgLy8gQ29udmVydGlyIGEgc3RyaW5nIHNpIGVzIHVuIG7Dum1lcm9cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teMC05Li1dKi9nLCAnJyk7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHZhbHVlLnNwbGl0KCcuJyk7XHJcblxyXG4gICAgLy9BZ3JlZ2EgdW5hIGNvbWEgY2FkYSAzIGNpZnJhc1xyXG4gICAgcGFydHNbMF0gPSBwYXJ0c1swXS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpO1xyXG4gICAgdmFsdWUgPSBwYXJ0cy5qb2luKCcuJyk7XHJcblxyXG4gICAgLy9Tb2xvIGFjZXB0YSB1biBwdW50byBkZWNpbWFsXHJcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMikge1xyXG4gICAgICB2YWx1ZSA9IHBhcnRzWzBdICsgJy4nICsgcGFydHMuc2xpY2UoMSkuam9pbignJyk7XHJcbiAgICB9XHJcblxyXG4gICAgICAgLy8gU29sbyBhY2VwdGEgZG9zIGRlY2ltYWxlcyB5IGNvbXBsZXRhIGNvbiBjZXJvcyBzaSBlcyBuZWNlc2FyaW9cclxuICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgbGV0IGRlY2ltYWxQYXJ0ID0gcGFydHNbMV0uc2xpY2UoMCwgNCk7XHJcbiAgICAgICAgLy8gaWYgKGRlY2ltYWxQYXJ0Lmxlbmd0aCA8IDQpIHtcclxuICAgICAgICAvLyAgIGRlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQucGFkRW5kKDQsICcwJyk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHZhbHVlID0gYCR7cGFydHNbMF19LiR7ZGVjaW1hbFBhcnR9YDtcclxuICAgICAgfSBcclxuICAgICAgLy8gZWxzZSB7XHJcbiAgICAgIC8vICAgdmFsdWUgPSBgJHtwYXJ0c1swXX0uMDAwMGA7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIGlmKGNoYXIgIT0gbnVsbClcclxuICAgICAgdmFsdWUgPSBjaGFyICsgdmFsdWU7XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRvTnVtYmVyKHZhbHVlOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcwJykgcmV0dXJuIDA7XHJcblxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/IDAgOiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teMC05Ll0qL2csICcnKTtcclxuICAgIGNvbnN0IG51bWJlclZhbHVlID0gTnVtYmVyKHZhbHVlKTtcclxuXHJcbiAgICByZXR1cm4gaXNOYU4obnVtYmVyVmFsdWUpID8gMCA6IG51bWJlclZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gY29udmVydFRvTnVtYmVyKHZhbHVlOiBhbnkpOiBudW1iZXIge1xyXG4gIC8vICAgY29uc29sZS5sb2coJ2NvbnZlcnRUb051bWJlcicsdmFsdWUpO1xyXG4gIC8vICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gJzAnKSByZXR1cm4gMDtcclxuXHJcbiAgLy8gICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcclxuICAvLyAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICBcclxuICAvLyAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW14wLTkuLV0qL2csICcnKTtcclxuXHJcbiAgLy8gICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcclxuICAvLyB9XHJcblxyXG4gIHRleHROdW1iZXIobnVtOiBudW1iZXIpIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZygndGV4dE51bWJlcicsIG51bSk7XHJcbiAgICBsZXQgbnVtV29yZDogc3RyaW5nID0gJyc7XHJcbiAgICBsZXQgbnVtVW5pZGFkOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG51bVJlc3VsdDogbnVtYmVyID0gbnVtO1xyXG4gICAgbGV0IGFuZDogc3RyaW5nID0gJyAnO1xyXG5cclxuICAgIGNvbnN0IGludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihudW0pO1xyXG4gICAgY29uc3QgZGVjaW1hbFBhcnQgPSBNYXRoLnJvdW5kKChudW0gLSBpbnRlZ2VyUGFydCkgKiAxMDApO1xyXG5cclxuICAgIGNvbnN0IGRlY2ltYWxQYXJ0SW5Xb3JkcyA9IGRlY2ltYWxQYXJ0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuXHJcbiAgICBudW1VbmlkYWQgPSBNYXRoLmZsb29yKG51bVJlc3VsdCAvIDEwMDApO1xyXG4gICAgaWYgKG51bVVuaWRhZCA+IDApIHtcclxuICAgICAgaWYgKG51bVVuaWRhZCA+IDEpXHJcbiAgICAgICAgbnVtV29yZCA9IG51bVdvcmQgKyB0aGlzLm51bWJlclRvV29yZHMobnVtVW5pZGFkKSArICcgTUlMJztcclxuICAgICAgZWxzZSBudW1Xb3JkID0gJ01JTCAnO1xyXG4gICAgICBudW1SZXN1bHQgPSBudW1SZXN1bHQgLSBudW1VbmlkYWQgKiAxMDAwO1xyXG4gICAgfVxyXG5cclxuICAgIG51bVVuaWRhZCA9IE1hdGguZmxvb3IobnVtUmVzdWx0IC8gMTAwKSAqIDEwMDtcclxuICAgIGlmIChudW1VbmlkYWQgPiAwKSB7XHJcbiAgICAgIG51bVdvcmQgPSBudW1Xb3JkICsgJyAnICsgdGhpcy5udW1iZXJUb1dvcmRzKG51bVVuaWRhZCk7XHJcbiAgICAgIG51bVJlc3VsdCA9IG51bVJlc3VsdCAtIG51bVVuaWRhZDtcclxuICAgIH1cclxuXHJcbiAgICBudW1VbmlkYWQgPSBNYXRoLmZsb29yKG51bVJlc3VsdCAvIDEwKSAqIDEwO1xyXG4gICAgaWYgKG51bVVuaWRhZCA+IDApIHtcclxuICAgICAgbnVtV29yZCA9IG51bVdvcmQgKyAnICcgKyB0aGlzLm51bWJlclRvV29yZHMobnVtVW5pZGFkKTtcclxuICAgICAgbnVtUmVzdWx0ID0gbnVtUmVzdWx0IC0gbnVtVW5pZGFkO1xyXG4gICAgICBhbmQgPSAnIFkgJztcclxuICAgIH1cclxuXHJcbiAgICBudW1VbmlkYWQgPSBNYXRoLmZsb29yKG51bVJlc3VsdCk7XHJcbiAgICBpZiAobnVtVW5pZGFkID4gMCkge1xyXG4gICAgICBudW1Xb3JkID0gbnVtV29yZCArIGFuZCArIHRoaXMubnVtYmVyVG9Xb3JkcyhudW1VbmlkYWQpO1xyXG4gICAgICBudW1SZXN1bHQgPSBudW1SZXN1bHQgLSBudW1VbmlkYWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7bnVtV29yZH0gJHtkZWNpbWFsUGFydEluV29yZHN9LzEwMCBNLk4uYDtcclxuICB9XHJcblxyXG4gIG51bWJlclRvV29yZHMobnVtOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdW5pdHMgPSBbXHJcbiAgICAgICcnLFxyXG4gICAgICAnVU5PJyxcclxuICAgICAgJ0RPUycsXHJcbiAgICAgICdUUkVTJyxcclxuICAgICAgJ0NVQVRSTycsXHJcbiAgICAgICdDSU5DTycsXHJcbiAgICAgICdTRUlTJyxcclxuICAgICAgJ1NJRVRFJyxcclxuICAgICAgJ09DSE8nLFxyXG4gICAgICAnTlVFVkUnLFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHRlbnMgPSBbXHJcbiAgICAgICcnLFxyXG4gICAgICAnRElFWicsXHJcbiAgICAgICdWRUlOVEUnLFxyXG4gICAgICAnVFJFSU5UQScsXHJcbiAgICAgICdDVUFSRU5UQScsXHJcbiAgICAgICdDSU5DVUVOVEEnLFxyXG4gICAgICAnU0VTRU5UQScsXHJcbiAgICAgICdTRVRFTlRBJyxcclxuICAgICAgJ09DSEVOVEEnLFxyXG4gICAgICAnTk9WRU5UQScsXHJcbiAgICBdO1xyXG4gICAgY29uc3QgdGVlbnMgPSBbXHJcbiAgICAgICdPTkNFJyxcclxuICAgICAgJ0RPQ0UnLFxyXG4gICAgICAnVFJFQ0UnLFxyXG4gICAgICAnQ0FUT1JDRScsXHJcbiAgICAgICdRVUlOQ0UnLFxyXG4gICAgICAnRElFQ0lTRUlTJyxcclxuICAgICAgJ0RJRUNJU0lFVEUnLFxyXG4gICAgICAnRElFQ0lPQ0hPJyxcclxuICAgICAgJ0RJRUNJTlVFVkUnLFxyXG4gICAgXTtcclxuICAgIGNvbnN0IGh1bmRyZWRzID0gW1xyXG4gICAgICAnJyxcclxuICAgICAgJ0NJRU5UTycsXHJcbiAgICAgICdET1NDSUVOVE9TJyxcclxuICAgICAgJ1RSRVNDSUVOVE9TJyxcclxuICAgICAgJ0NVQVRST0NJRU5UT1MnLFxyXG4gICAgICAnUVVJTklFTlRPUycsXHJcbiAgICAgICdTRUlTQ0lFTlRPUycsXHJcbiAgICAgICdTRVRFQ0lFTlRPUycsXHJcbiAgICAgICdPQ0hPQ0lFTlRPUycsXHJcbiAgICAgICdOT1ZFQ0lFTlRPUycsXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChudW0gPT09IDApIHJldHVybiAnQ0VSTyc7XHJcblxyXG4gICAgaWYgKG51bSA9PT0gMTAwKSByZXR1cm4gJ0NJRU4nO1xyXG5cclxuICAgIGxldCB3b3JkID0gJyc7XHJcblxyXG4gICAgaWYgKE1hdGguZmxvb3IobnVtIC8gMTAwKSA+IDApIHtcclxuICAgICAgd29yZCArPSBodW5kcmVkc1tNYXRoLmZsb29yKG51bSAvIDEwMCldICsgJyAnO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZW1haW5kZXIgPSBudW0gJSAxMDA7XHJcblxyXG4gICAgaWYgKHJlbWFpbmRlciA+PSAxMSAmJiByZW1haW5kZXIgPD0gMTkpIHtcclxuICAgICAgd29yZCArPSB0ZWVuc1tyZW1haW5kZXIgLSAxMV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoTWF0aC5mbG9vcihyZW1haW5kZXIgLyAxMCkgPiAwKSB7XHJcbiAgICAgICAgd29yZCArPSB0ZW5zW01hdGguZmxvb3IocmVtYWluZGVyIC8gMTApXSArICcgJztcclxuICAgICAgfVxyXG4gICAgICByZW1haW5kZXIgPSByZW1haW5kZXIgJSAxMDtcclxuICAgICAgaWYgKHJlbWFpbmRlciA+IDApIHtcclxuICAgICAgICB3b3JkICs9IHVuaXRzW3JlbWFpbmRlcl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gd29yZC50cmltKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==