|
|
@@ -1,6 +1,5 @@
|
|
|
import os
|
|
|
from django import template
|
|
|
-from django.utils.numberformat import format as format_number
|
|
|
|
|
|
register = template.Library()
|
|
|
|
|
|
@@ -19,14 +18,38 @@ def formato_numero(value, decimal_places=2):
|
|
|
# Convertir a float
|
|
|
num = float(value)
|
|
|
|
|
|
- # Formatear con el número de decimales especificado
|
|
|
- formatted = format_number(
|
|
|
- num,
|
|
|
- decimal_sep=',',
|
|
|
- thousand_sep='.',
|
|
|
- force_grouping=True,
|
|
|
- precision=decimal_places
|
|
|
- )
|
|
|
- return formatted
|
|
|
+ # Formato con 2 decimales por defecto
|
|
|
+ if decimal_places is None or decimal_places == '':
|
|
|
+ decimal_places = 2
|
|
|
+ else:
|
|
|
+ decimal_places = int(decimal_places)
|
|
|
+
|
|
|
+ # Formatear manualmente
|
|
|
+ format_string = f"{{:.{decimal_places}f}}"
|
|
|
+ formatted = format_string.format(num)
|
|
|
+
|
|
|
+ # Separar parte entera y decimal
|
|
|
+ parts = formatted.split('.')
|
|
|
+ integer_part = parts[0]
|
|
|
+ decimal_part = parts[1] if len(parts) > 1 else '0' * decimal_places
|
|
|
+
|
|
|
+ # Agregar separadores de miles a la parte entera
|
|
|
+ # Manejar números negativos
|
|
|
+ if integer_part.startswith('-'):
|
|
|
+ sign = '-'
|
|
|
+ integer_part = integer_part[1:]
|
|
|
+ else:
|
|
|
+ sign = ''
|
|
|
+
|
|
|
+ # Invertir para procesar de derecha a izquierda
|
|
|
+ reversed_int = integer_part[::-1]
|
|
|
+ grouped = '.'.join([reversed_int[i:i+3] for i in range(0, len(reversed_int), 3)])
|
|
|
+ integer_part = grouped[::-1]
|
|
|
+
|
|
|
+ # Combinar con el signo
|
|
|
+ integer_part = sign + integer_part
|
|
|
+
|
|
|
+ # Retornar con coma como separador decimal
|
|
|
+ return f"{integer_part},{decimal_part}"
|
|
|
except (ValueError, TypeError):
|
|
|
return value
|