feat: add Nepali currency field, number to words, and unicode helpers
This commit is contained in:
5 files changed
+128
-20
No files matched your search
@@ -3,7 +3,11 @@ from django.utils.translation import gettext_lazy as _
|
||||
from nepali.datetime import nepalidate, nepalidatetime
|
||||
|
||||
from django_nepkit.conf import nepkit_settings
|
||||
from django_nepkit.models import NepaliDateField, NepaliDateTimeField, NepaliCurrencyField
|
||||
from django_nepkit.models import (
|
||||
NepaliDateField,
|
||||
NepaliDateTimeField,
|
||||
NepaliCurrencyField,
|
||||
)
|
||||
from django_nepkit.utils import (
|
||||
try_parse_nepali_date,
|
||||
try_parse_nepali_datetime,
|
||||
|
||||
@@ -72,6 +72,7 @@ def nepali_humanize(value, threshold=None, format_str=None):
|
||||
def nepali_currency(value, currency_symbol="Rs."):
|
||||
"""Format a number with Nepali-style commas and optional currency symbol."""
|
||||
from django_nepkit.utils import format_nepali_currency
|
||||
|
||||
return format_nepali_currency(value, currency_symbol=currency_symbol)
|
||||
|
||||
|
||||
@@ -79,6 +80,7 @@ def nepali_currency(value, currency_symbol="Rs."):
|
||||
def nepali_words(value):
|
||||
"""Convert a number to Nepali words."""
|
||||
from django_nepkit.utils import number_to_nepali_words
|
||||
|
||||
return number_to_nepali_words(value)
|
||||
|
||||
|
||||
@@ -86,4 +88,5 @@ def nepali_words(value):
|
||||
def nepali_unicode(value):
|
||||
"""Convert English digits to Nepali Unicode."""
|
||||
from django_nepkit.utils import english_to_nepali_unicode
|
||||
|
||||
return english_to_nepali_unicode(value)
|
||||
@@ -1,24 +1,27 @@
|
||||
import pytest
|
||||
from django_nepkit.admin import NepaliModelAdmin
|
||||
from django_nepkit.models import NepaliCurrencyField
|
||||
from django.db import models
|
||||
from django.contrib.admin.sites import AdminSite
|
||||
|
||||
|
||||
class MockModel(models.Model):
|
||||
amount = NepaliCurrencyField()
|
||||
|
||||
class Meta:
|
||||
app_label = 'django_nepkit'
|
||||
app_label = "django_nepkit"
|
||||
|
||||
|
||||
class MockAdmin(NepaliModelAdmin):
|
||||
list_display = ('amount',)
|
||||
list_display = ("amount",)
|
||||
|
||||
|
||||
def test_admin_currency_formatting():
|
||||
admin = MockAdmin(MockModel, AdminSite())
|
||||
displays = admin.get_list_display(None)
|
||||
|
||||
|
||||
# The first item should now be a callable (the display function)
|
||||
assert callable(displays[0])
|
||||
|
||||
|
||||
# Test the formatter directly
|
||||
obj = MockModel(amount=1234567)
|
||||
assert admin.format_nepali_currency(obj.amount) == "Rs. 12,34,567"
|
||||
@@ -1,7 +1,10 @@
|
||||
import pytest
|
||||
from django_nepkit.utils import format_nepali_currency, number_to_nepali_words, english_to_nepali_unicode
|
||||
from django_nepkit.utils import (
|
||||
format_nepali_currency,
|
||||
number_to_nepali_words,
|
||||
english_to_nepali_unicode,
|
||||
)
|
||||
from django_nepkit.models import NepaliCurrencyField
|
||||
from django.db import models
|
||||
|
||||
|
||||
def test_format_nepali_currency():
|
||||
assert format_nepali_currency(1234567) == "Rs. 12,34,567.00"
|
||||
@@ -10,6 +13,7 @@ def test_format_nepali_currency():
|
||||
assert format_nepali_currency(100.5) == "Rs. 100.50"
|
||||
assert format_nepali_currency(None) == ""
|
||||
|
||||
|
||||
def test_number_to_nepali_words():
|
||||
assert number_to_nepali_words(0) == "शून्य"
|
||||
assert number_to_nepali_words(1) == "एक"
|
||||
@@ -23,16 +27,18 @@ def test_number_to_nepali_words():
|
||||
assert number_to_nepali_words(1234567) == "बाह्र लाख चौंतीस हजार पाँच सय सतसट्ठी"
|
||||
# Note: 12,34,567 -> 12 Lakhs 34 Thousand 5 Hundred 67
|
||||
|
||||
|
||||
def test_english_to_nepali_unicode():
|
||||
assert english_to_nepali_unicode("123") == "१२३"
|
||||
assert english_to_nepali_unicode("Price: 100") == "Price: १००"
|
||||
assert english_to_nepali_unicode(None) == ""
|
||||
|
||||
|
||||
def test_nepali_currency_field():
|
||||
field = NepaliCurrencyField(max_digits=10, decimal_places=2)
|
||||
assert field.max_digits == 10
|
||||
assert field.decimal_places == 2
|
||||
|
||||
|
||||
default_field = NepaliCurrencyField()
|
||||
assert default_field.max_digits == 19
|
||||
assert default_field.decimal_places == 2
|
||||
+102
-10
@@ -143,16 +143,108 @@ def number_to_nepali_words(number: Any) -> str:
|
||||
if num == 0:
|
||||
return "शून्य"
|
||||
|
||||
ones = ["", "एक", "दुई", "तीन", "चार", "पाँच", "छ", "सात", "आठ", "नौ", "दश",
|
||||
"एघार", "बाह्र", "तेह्र", "चौध", "पन्ध्र", "सोह्र", "सत्र", "अठार", "उन्नाइस", "बीस",
|
||||
"एकाइस", "बाइस", "तेईस", "चौबीस", "पच्चीस", "छब्बीस", "सत्ताइस", "अठाइस", "उनन्तीस", "तीस",
|
||||
"एकतीस", "बत्तीस", "तेत्तीस", "चौंतीस", "पैंतीस", "छत्तीस", "सैंतीस", "अठतीस", "उनन्चालीस", "चालीस",
|
||||
"एकचालीस", "बयालीस", "त्रिचालीस", "चवालीस", "पैंतालीस", "छयालीस", "सत्तालीस", "अठचालीस", "उनन्पचास", "पचास",
|
||||
"एकाउन्न", "बाउन्न", "त्रिपन्न", "चउन्न", "पचपन्न", "छपन्न", "सन्ताउन्न", "अन्ठाउन्न", "उनन्साठी", "साठी",
|
||||
"एकसाठी", "बासट्ठी", "त्रिसट्ठी", "चौसट्ठी", "पैंसट्ठी", "छयसट्ठी", "सतसट्ठी", "अठसट्ठी", "उनन्सत्तरी", "सत्तरी",
|
||||
"एकहत्तर", "बाहत्तर", "त्रिहत्तर", "चौरहत्तर", "पचहत्तर", "छयहत्तर", "सतहत्तर", "अठहत्तर", "उनन्असी", "असी",
|
||||
"एकासी", "बयासी", "त्रियासी", "चौरासी", "पचासी", "छयासी", "सतासी", "अठासी", "उनन्नब्बे", "नब्बे",
|
||||
"एकानब्बे", "बयानब्बे", "त्रियानब्बे", "चौरानब्बे", "पञ्चानब्बे", "छ्यानब्बे", "सन्तानब्बे", "अन्ठानब्बे", "उनन्सय"]
|
||||
ones = [
|
||||
"",
|
||||
"एक",
|
||||
"दुई",
|
||||
"तीन",
|
||||
"चार",
|
||||
"पाँच",
|
||||
"छ",
|
||||
"सात",
|
||||
"आठ",
|
||||
"नौ",
|
||||
"दश",
|
||||
"एघार",
|
||||
"बाह्र",
|
||||
"तेह्र",
|
||||
"चौध",
|
||||
"पन्ध्र",
|
||||
"सोह्र",
|
||||
"सत्र",
|
||||
"अठार",
|
||||
"उन्नाइस",
|
||||
"बीस",
|
||||
"एकाइस",
|
||||
"बाइस",
|
||||
"तेईस",
|
||||
"चौबीस",
|
||||
"पच्चीस",
|
||||
"छब्बीस",
|
||||
"सत्ताइस",
|
||||
"अठाइस",
|
||||
"उनन्तीस",
|
||||
"तीस",
|
||||
"एकतीस",
|
||||
"बत्तीस",
|
||||
"तेत्तीस",
|
||||
"चौंतीस",
|
||||
"पैंतीस",
|
||||
"छत्तीस",
|
||||
"सैंतीस",
|
||||
"अठतीस",
|
||||
"उनन्चालीस",
|
||||
"चालीस",
|
||||
"एकचालीस",
|
||||
"बयालीस",
|
||||
"त्रिचालीस",
|
||||
"चवालीस",
|
||||
"पैंतालीस",
|
||||
"छयालीस",
|
||||
"सत्तालीस",
|
||||
"अठचालीस",
|
||||
"उनन्पचास",
|
||||
"पचास",
|
||||
"एकाउन्न",
|
||||
"बाउन्न",
|
||||
"त्रिपन्न",
|
||||
"चउन्न",
|
||||
"पचपन्न",
|
||||
"छपन्न",
|
||||
"सन्ताउन्न",
|
||||
"अन्ठाउन्न",
|
||||
"उनन्साठी",
|
||||
"साठी",
|
||||
"एकसाठी",
|
||||
"बासट्ठी",
|
||||
"त्रिसट्ठी",
|
||||
"चौसट्ठी",
|
||||
"पैंसट्ठी",
|
||||
"छयसट्ठी",
|
||||
"सतसट्ठी",
|
||||
"अठसट्ठी",
|
||||
"उनन्सत्तरी",
|
||||
"सत्तरी",
|
||||
"एकहत्तर",
|
||||
"बाहत्तर",
|
||||
"त्रिहत्तर",
|
||||
"चौरहत्तर",
|
||||
"पचहत्तर",
|
||||
"छयहत्तर",
|
||||
"सतहत्तर",
|
||||
"अठहत्तर",
|
||||
"उनन्असी",
|
||||
"असी",
|
||||
"एकासी",
|
||||
"बयासी",
|
||||
"त्रियासी",
|
||||
"चौरासी",
|
||||
"पचासी",
|
||||
"छयासी",
|
||||
"सतासी",
|
||||
"अठासी",
|
||||
"उनन्नब्बे",
|
||||
"नब्बे",
|
||||
"एकानब्बे",
|
||||
"बयानब्बे",
|
||||
"त्रियानब्बे",
|
||||
"चौरानब्बे",
|
||||
"पञ्चानब्बे",
|
||||
"छ्यानब्बे",
|
||||
"सन्तानब्बे",
|
||||
"अन्ठानब्बे",
|
||||
"उनन्सय",
|
||||
]
|
||||
|
||||
units = [
|
||||
("", ""),
|
||||
|
||||
Reference in new issue
Block a user