feat: add Nepali currency field, number to words, and unicode helpers

This commit is contained in:
sankalp committed 2026-01-30 19:50:26 +05:45
1 parent 2fea4d6db1
commit e606a2b490
14 files changed
+347 -12

No files matched your search

+7 -1
View File
@@ -7,7 +7,7 @@ from django_nepkit import (
NepaliMonthFilter,
)
from .models import Person, Citizen, AuditedPerson
from .models import Person, Citizen, AuditedPerson, Transaction
# Example 1: Basic setup
@@ -58,3 +58,9 @@ class CitizenAdmin(NepaliModelAdmin):
list_display = ("name", "province", "district", "municipality")
# Filters still work with HTMX
list_filter = ("province", "district")
@admin.register(Transaction)
class TransactionAdmin(NepaliModelAdmin):
list_display = ("title", "amount", "date")
list_filter = (("date", NepaliDateFilter),)
+10
View File
@@ -7,6 +7,7 @@ from django_nepkit import (
ProvinceField,
DistrictField,
MunicipalityField,
NepaliCurrencyField,
)
@@ -52,3 +53,12 @@ class AuditedPerson(models.Model):
def __str__(self):
return self.name
class Transaction(models.Model):
title = models.CharField(max_length=100)
amount = NepaliCurrencyField()
date = NepaliDateField(auto_now_add=True)
def __str__(self):
return f"{self.title} - {self.amount}"
+47 -5
View File
@@ -12,7 +12,8 @@
</head>
<body>
<h1>Person List</h1>
<a href="{% url 'demo:person-create' %}">Add New Person</a>
<a href="{% url 'demo:person-create' %}">Add New Person</a> |
<a href="{% url 'demo:transaction-create' %}">Add New Transaction</a>
<hr>
<table>
<thead>
@@ -34,16 +35,16 @@
{% for person in persons %}
<tr>
<td>{{ person.name }}</td>
<td>{{ person.birth_date_ne }}</td>
<td>{{ person.birth_date }}</td>
<td>{{ person.birth_date_en }}</td>
<td>{{ person.registration_time }}</td>
<td>{{ person.phone_number }}</td>
<td>{{ person.province_ne }}</td>
<td>{{ person.province }}</td>
<td>{{ person.province_en }}</td>
<td>{{ person.district_ne }}</td>
<td>{{ person.district }}</td>
<td>{{ person.district_en }}</td>
<td>{{ person.municipality_ne }}</td>
<td>{{ person.municipality }}</td>
<td>{{ person.municipality_en }}</td>
</tr>
{% empty %}
<tr>
@@ -52,5 +53,46 @@
{% endfor %}
</tbody>
</table>
<br><hr>
<h1>Transaction List</h1>
<table>
<thead>
<tr>
<th>Title</th>
<th>Amount (Raw)</th>
<th>Amount (Formatted)</th>
<th>Amount (Words)</th>
<th>Date</th>
<th>Unicode Example</th>
</tr>
</thead>
<tbody>
{% for tx in transactions %}
<tr>
<td>{{ tx.title }}</td>
<td>{{ tx.amount }}</td>
<td>{{ tx.amount|nepali_currency }}</td>
<td>{{ tx.amount|nepali_words }}</td>
<td>{{ tx.date }}</td>
<td>{{ tx.title|nepali_unicode }}</td>
</tr>
{% empty %}
<tr>
<td colspan="6">No transactions found.</td>
</tr>
{% endfor %}
</tbody>
</table>
<br><hr>
<h2>Quick Helpers Demo</h2>
<ul>
<li><strong>nepali_currency:</strong> 112000 -> {{ 112000|nepali_currency }}</li>
<li><strong>nepali_words:</strong> 1234 -> {{ 1234|nepali_words }}</li>
<li><strong>nepali_unicode:</strong> "Total: 12345" -> {{ "Total: 12345"|nepali_unicode }}</li>
</ul>
</body>
</html>
+1
View File
@@ -12,4 +12,5 @@ router.register("api/audited", views.AuditedPersonViewSet, basename="audited-api
urlpatterns = [
path("", views.person_list, name="person-list"),
path("add/", views.person_create, name="person-create"),
path("transactions/add/", views.transaction_create, name="transaction-create"),
] + router.urls
+26 -2
View File
@@ -3,7 +3,7 @@ from django.shortcuts import render, redirect
from rest_framework import viewsets, filters as drf_filters
from django_filters import rest_framework as django_filters
from django_nepkit.filters import NepaliDateYearFilter, NepaliDateMonthFilter
from .models import Person, Citizen, AuditedPerson
from .models import Person, Citizen, AuditedPerson, Transaction
from .serializers import PersonSerializer, CitizenSerializer, AuditedPersonSerializer
@@ -26,7 +26,12 @@ class PersonForm(forms.ModelForm):
def person_list(request):
persons = Person.objects.all()
return render(request, "demo/person_list.html", {"persons": persons})
transactions = Transaction.objects.all()
return render(
request,
"demo/person_list.html",
{"persons": persons, "transactions": transactions},
)
def person_create(request):
@@ -40,6 +45,25 @@ def person_create(request):
return render(request, "demo/person_form.html", {"form": form})
class TransactionForm(forms.ModelForm):
class Meta:
model = Transaction
fields = ["title", "amount"]
def transaction_create(request):
if request.method == "POST":
form = TransactionForm(request.POST)
if form.is_valid():
form.save()
return redirect("demo:person-list")
else:
form = TransactionForm()
return render(
request, "demo/person_form.html", {"form": form, "title": "Add Transaction"}
)
# --- API Support (DRF) ---