diff --git a/nummi/main/migrations/0006_alter_category_options_transaction_trader_and_more.py b/nummi/main/migrations/0006_alter_category_options_transaction_trader_and_more.py new file mode 100644 index 0000000..9056ef4 --- /dev/null +++ b/nummi/main/migrations/0006_alter_category_options_transaction_trader_and_more.py @@ -0,0 +1,67 @@ +# Generated by Django 4.0.4 on 2022-05-20 16:06 + +import datetime +import django.core.validators +from django.db import migrations, models +import re + + +class Migration(migrations.Migration): + + dependencies = [ + ("main", "0005_alter_category_full_name"), + ] + + operations = [ + migrations.AlterModelOptions( + name="category", + options={"ordering": ["full_name"]}, + ), + migrations.AddField( + model_name="transaction", + name="trader", + field=models.CharField(blank=True, max_length=128, null=True), + ), + migrations.AlterField( + model_name="category", + name="name", + field=models.CharField( + max_length=64, + validators=[ + django.core.validators.RegexValidator( + re.compile("^[-\\w]+\\Z"), + "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or hyphens.", + "invalid", + ) + ], + ), + ), + migrations.AlterField( + model_name="invoice", + name="file", + field=models.FileField( + upload_to="invoices/", + validators=[django.core.validators.FileExtensionValidator(["pdf"])], + ), + ), + migrations.AlterField( + model_name="transaction", + name="date", + field=models.DateField(default=datetime.date.today), + ), + migrations.AlterField( + model_name="transaction", + name="description", + field=models.TextField(blank=True, null=True), + ), + migrations.AlterField( + model_name="transaction", + name="name", + field=models.CharField(default="Transaction", max_length=256), + ), + migrations.AlterField( + model_name="transaction", + name="value", + field=models.DecimalField(decimal_places=2, default=0, max_digits=12), + ), + ] diff --git a/nummi/main/models.py b/nummi/main/models.py index 13b9c82..1b10892 100644 --- a/nummi/main/models.py +++ b/nummi/main/models.py @@ -1,3 +1,4 @@ +from datetime import date import uuid from django.db import models from django.forms import ModelForm @@ -27,10 +28,11 @@ class Category(models.Model): class Transaction(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - name = models.CharField(max_length=256) - description = models.TextField() - value = models.DecimalField(max_digits=12, decimal_places=2) - date = models.DateField() + name = models.CharField(max_length=256, default="Transaction") + description = models.TextField(null=True, blank=True) + value = models.DecimalField(max_digits=12, decimal_places=2, default=0) + date = models.DateField(default=date.today) + trader = models.CharField(max_length=128, blank=True, null=True) category = models.ForeignKey( Category, on_delete=models.SET_NULL, blank=True, null=True ) diff --git a/nummi/main/static/css/index.css b/nummi/main/static/css/index.css new file mode 100644 index 0000000..c10a94b --- /dev/null +++ b/nummi/main/static/css/index.css @@ -0,0 +1,44 @@ +#transactions { + display: grid; + grid-template-columns: repeat(6, auto); + margin: 2em 0; + border-radius: 1em 0 1em 0; + overflow: hidden; + border-bottom: .5em solid var(--text); +} + +#transactions > div { + display: contents; +} + +#transactions > div > * { + padding: 1em; +} +#transactions > div.g> * { + background: var(--bg-01); +} + +#transactions > div.header > * { + background: var(--bg-inv); + color: var(--text-inv); +} + +#transactions > div > .date, +#transactions > div > .category, +#transactions > div > .trader { + text-align: center; +} +#transactions > div > .value { + text-align: right; +} +#transactions > div > .value, +#transactions > div > .date { + font-feature-settings: "tnum", "ss01"; +} + +#transactions > div > span.description, +#transactions > div > span.name { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/nummi/main/static/css/main.css b/nummi/main/static/css/main.css index 4921998..dd4ff82 100644 --- a/nummi/main/static/css/main.css +++ b/nummi/main/static/css/main.css @@ -1,3 +1,19 @@ -body { - background: #bebebe; +@import "https://rsms.me/inter/inter.css"; + +*, *::before, *::after { + box-sizing: border-box; +} + +body { + font-family: "Inter var experimental", "Inter var", "Inter", sans-serif; +} + +:root { + --bg: #ffffff; + --text: #000000de; + + --bg-inv: #000000; + --text-inv: #ffffffde; + + --bg-01: #dedede; } diff --git a/nummi/main/templates/main/index.html b/nummi/main/templates/main/index.html index 4f69d4b..c12c07d 100644 --- a/nummi/main/templates/main/index.html +++ b/nummi/main/templates/main/index.html @@ -1,6 +1,10 @@ {% extends "main/base.html" %} +{% load static %} -{% +{% block link %} +{{ block.super }} + +{% endblock %} {% block body %}

Nummi

@@ -9,24 +13,26 @@ Add transaction {% if transactions %} - - - - - - - - - {% for trans in transactions %} - - - - - - - - {% endfor %} -
DateNomValeurCatégorieDescription
{{ trans.date|date:"c" }}{{ trans.name }}{{ trans.value|floatformat:"2g" }} €{{ trans.category|default_if_none:"–" }}{{ trans.description }}
+
+
+ Date + Nom + Valeur + Commerçant + Catégorie + Description +
+ {% for trans in transactions %} +
+ {{ trans.date|date:"Y-m-d" }} + {{ trans.name }} + {{ trans.value|floatformat:"2g" }} € + {{ trans.trader|default_if_none:"–" }} + {% if trans.category %}{{ trans.category.name }}{% else %}–{% endif %} + {{ trans.description }} +
+ {% endfor %} +
{% endif %} {% if categories %}