mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Report helper (#6454)
* Adds helper function for formatting numbers in reports * Update docs
This commit is contained in:
parent
226dc82cfd
commit
a99ba75fed
@ -3,6 +3,7 @@
|
||||
import base64
|
||||
import logging
|
||||
import os
|
||||
from decimal import Decimal
|
||||
|
||||
from django import template
|
||||
from django.conf import settings
|
||||
@ -376,3 +377,48 @@ def render_html_text(text: str, **kwargs):
|
||||
output += ''.join([f'</{tag}>' for tag in tags])
|
||||
|
||||
return mark_safe(output)
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def format_number(number, **kwargs):
|
||||
"""Render a number with optional formatting options.
|
||||
|
||||
kwargs:
|
||||
decimal_places: Number of decimal places to render
|
||||
integer: Boolean, whether to render the number as an integer
|
||||
leading: Number of leading zeros
|
||||
"""
|
||||
try:
|
||||
number = Decimal(str(number))
|
||||
except Exception:
|
||||
# If the number cannot be converted to a Decimal, just return the original value
|
||||
return str(number)
|
||||
|
||||
if kwargs.get('integer', False):
|
||||
# Convert to integer
|
||||
number = Decimal(int(number))
|
||||
|
||||
# Normalize the number (remove trailing zeroes)
|
||||
number = number.normalize()
|
||||
|
||||
decimals = kwargs.get('decimal_places', None)
|
||||
|
||||
if decimals is not None:
|
||||
try:
|
||||
decimals = int(decimals)
|
||||
number = round(number, decimals)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
value = str(number)
|
||||
|
||||
leading = kwargs.get('leading', None)
|
||||
|
||||
if leading is not None:
|
||||
try:
|
||||
leading = int(leading)
|
||||
value = '0' * leading + value
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
return value
|
||||
|
@ -64,6 +64,20 @@ To return an element corresponding to a certain key in a container which support
|
||||
{% endraw %}
|
||||
```
|
||||
|
||||
## Formatting Numbers
|
||||
|
||||
The helper function `format_number` allows for some common number formatting options. It takes a number (or a number-like string) as an input, as well as some formatting arguments. It returns a *string* containing the formatted number:
|
||||
|
||||
```html
|
||||
{% raw %}
|
||||
{% load report %}
|
||||
{% format_number 3.14159265359 decimal_places=5, leading=3 %}
|
||||
<!-- output: 0003.14159 -->
|
||||
{% format_number 3.14159265359 integer=True %}
|
||||
<!-- output: 3 -->
|
||||
{% endraw %}
|
||||
```
|
||||
|
||||
## Rendering Currency
|
||||
|
||||
The helper function `render_currency` allows for simple rendering of currency data. This function can also convert the specified amount of currency into a different target currency:
|
||||
|
Loading…
Reference in New Issue
Block a user