feat: add Nepali currency field, number to words, and unicode helpers
This commit is contained in:
14 files changed
+347
-12
No files matched your search
@@ -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),)
|
||||
@@ -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}"
|
||||
@@ -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>
|
||||
@@ -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
@@ -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) ---
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user