From da22d931cb071d2e77d0b6dab3551e9593ea1bfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 23 Oct 2024 15:37:17 +0200 Subject: [PATCH] feat: add invoice category This is useful for reporting. --- weblate_web/invoices/admin.py | 4 +-- .../migrations/0008_invoice_category.py | 25 +++++++++++++++++++ weblate_web/invoices/models.py | 10 ++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 weblate_web/invoices/migrations/0008_invoice_category.py diff --git a/weblate_web/invoices/admin.py b/weblate_web/invoices/admin.py index 381a4437d9..58aaffffd5 100644 --- a/weblate_web/invoices/admin.py +++ b/weblate_web/invoices/admin.py @@ -45,8 +45,8 @@ class InvoiceItemAdmin(admin.TabularInline): class InvoiceAdmin(admin.ModelAdmin): date_hierarchy = "issue_date" autocomplete_fields = ("customer",) - list_display = ("number", "kind", "customer", "total_amount") - list_filter = ["kind"] + list_display = ("number", "kind", "category", "customer", "total_amount") + list_filter = ["kind", "category"] search_fields = ( "customer__name", "number", diff --git a/weblate_web/invoices/migrations/0008_invoice_category.py b/weblate_web/invoices/migrations/0008_invoice_category.py new file mode 100644 index 0000000000..ad9a67a379 --- /dev/null +++ b/weblate_web/invoices/migrations/0008_invoice_category.py @@ -0,0 +1,25 @@ +# Generated by Django 5.1.2 on 2024-10-23 13:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("invoices", "0007_invoice_number"), + ] + + operations = [ + migrations.AddField( + model_name="invoice", + name="category", + field=models.IntegerField( + choices=[ + (1, "Hosting"), + (2, "Support"), + (3, "Development"), + (4, "Donation"), + ], + default=1, + ), + ), + ] diff --git a/weblate_web/invoices/models.py b/weblate_web/invoices/models.py index 6bd4e501c2..0c20e92dbf 100644 --- a/weblate_web/invoices/models.py +++ b/weblate_web/invoices/models.py @@ -80,6 +80,13 @@ class InvoiceKind(models.IntegerChoices): QUOTE = 90, "Quote" +class InvoiceCategory(models.IntegerChoices): + HOSTING = 1, "Hosting" + SUPPORT = 2, "Support" + DEVEL = 3, "Development" + DONATE = 4, "Donation" + + class Discount(models.Model): description = models.CharField(max_length=200, unique=True) percents = models.IntegerField( @@ -109,6 +116,9 @@ class Invoice(models.Model): issue_date = models.DateField(default=datetime.date.today) due_date = models.DateField(blank=True) kind = models.IntegerField(choices=InvoiceKind) + category = models.IntegerField( + choices=InvoiceCategory, default=InvoiceCategory.HOSTING + ) customer = models.ForeignKey("payments.Customer", on_delete=models.deletion.PROTECT) customer_reference = models.CharField(max_length=100, blank=True) discount = models.ForeignKey(