mirror of https://gitlab.crans.org/bde/nk20
Starting treasury app
This commit is contained in:
parent
1f004191a8
commit
71346476df
|
@ -0,0 +1,11 @@
|
||||||
|
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from django.apps import AppConfig
|
||||||
|
from django.db.models.signals import pre_save, post_save, post_delete
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
|
class TreasuryConfig(AppConfig):
|
||||||
|
name = 'treasury'
|
||||||
|
verbose_name = _('Treasury')
|
|
@ -0,0 +1,113 @@
|
||||||
|
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from django.db import models
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
|
class Billing(models.Model):
|
||||||
|
id = models.PositiveIntegerField(
|
||||||
|
primary_key=True,
|
||||||
|
verbose_name=_("Billing identifier"),
|
||||||
|
)
|
||||||
|
|
||||||
|
subject = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
verbose_name=_("Subject"),
|
||||||
|
)
|
||||||
|
|
||||||
|
description = models.TextField(
|
||||||
|
verbose_name=_("Description")
|
||||||
|
)
|
||||||
|
|
||||||
|
name = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
verbose_name=_("Name"),
|
||||||
|
)
|
||||||
|
|
||||||
|
address = models.TextField(
|
||||||
|
verbose_name=_("Address"),
|
||||||
|
)
|
||||||
|
|
||||||
|
date = models.DateField(
|
||||||
|
auto_now_add=True,
|
||||||
|
verbose_name=_("Place"),
|
||||||
|
)
|
||||||
|
|
||||||
|
acquitted = models.BooleanField(
|
||||||
|
verbose_name=_("Acquitted"),
|
||||||
|
)
|
||||||
|
|
||||||
|
place = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
default="Cachan",
|
||||||
|
verbose_name=_("Place"),
|
||||||
|
)
|
||||||
|
|
||||||
|
my_name = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
default="BDE ENS Cachan",
|
||||||
|
verbose_name=_("My name"),
|
||||||
|
)
|
||||||
|
|
||||||
|
my_address_street = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
default="61 avenue du Président Wilson",
|
||||||
|
verbose_name=_("My street address"),
|
||||||
|
)
|
||||||
|
|
||||||
|
my_city = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
default="94230 Cachan",
|
||||||
|
verbose_name=_("My city"),
|
||||||
|
)
|
||||||
|
|
||||||
|
bank_code = models.IntegerField(
|
||||||
|
default=30003,
|
||||||
|
verbose_name=_("Bank code"),
|
||||||
|
)
|
||||||
|
|
||||||
|
desk_code = models.IntegerField(
|
||||||
|
default=3894,
|
||||||
|
verbose_name=_("Desk code"),
|
||||||
|
)
|
||||||
|
|
||||||
|
account_number = models.IntegerField(
|
||||||
|
default=37280662,
|
||||||
|
verbose_name=_("Account number"),
|
||||||
|
)
|
||||||
|
|
||||||
|
rib_key = models.SmallIntegerField(
|
||||||
|
default=14,
|
||||||
|
verbose_name=_("RIB Key")
|
||||||
|
)
|
||||||
|
|
||||||
|
bic = models.CharField(
|
||||||
|
max_length=16,
|
||||||
|
default="SOGEFRPP",
|
||||||
|
verbose_name=_("BIC Code")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Product(models.Model):
|
||||||
|
billing = models.ForeignKey(
|
||||||
|
Billing,
|
||||||
|
on_delete=models.PROTECT,
|
||||||
|
)
|
||||||
|
|
||||||
|
designation = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
verbose_name=_("Designation"),
|
||||||
|
)
|
||||||
|
|
||||||
|
quantity = models.PositiveIntegerField(
|
||||||
|
verbose_name=_("Quantity")
|
||||||
|
)
|
||||||
|
|
||||||
|
amount = models.PositiveIntegerField(
|
||||||
|
verbose_name=_("Unit price")
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def total(self):
|
||||||
|
return self.quantity * self.amount
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from django_tables2 import tables
|
||||||
|
|
||||||
|
from .models import Billing
|
||||||
|
|
||||||
|
|
||||||
|
class BillingTable(tables.Table):
|
||||||
|
class Meta:
|
||||||
|
attrs = {
|
||||||
|
'class': 'table table-condensed table-striped table-hover'
|
||||||
|
}
|
||||||
|
model = Billing
|
||||||
|
template_name = 'django_tables2/bootstrap4.html'
|
||||||
|
fields = ('id', 'name', 'subject', 'acquitted', )
|
||||||
|
row_attrs = {
|
||||||
|
'class': 'table-row',
|
||||||
|
'data-href': lambda record: record.pk
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from django.urls import path
|
||||||
|
|
||||||
|
from .views import BillingListView
|
||||||
|
|
||||||
|
app_name = 'treasury'
|
||||||
|
urlpatterns = [
|
||||||
|
path('billing/', BillingListView.as_view(), name='billing'),
|
||||||
|
]
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
from django_tables2 import SingleTableView
|
||||||
|
|
||||||
|
from .models import Billing
|
||||||
|
from .tables import BillingTable
|
||||||
|
|
||||||
|
|
||||||
|
class BillingListView(LoginRequiredMixin, SingleTableView):
|
||||||
|
"""
|
||||||
|
List existing Billings
|
||||||
|
"""
|
||||||
|
model = Billing
|
||||||
|
table_class = BillingTable
|
|
@ -61,6 +61,7 @@ INSTALLED_APPS = [
|
||||||
'activity',
|
'activity',
|
||||||
'member',
|
'member',
|
||||||
'note',
|
'note',
|
||||||
|
'treasury',
|
||||||
'api',
|
'api',
|
||||||
'logs',
|
'logs',
|
||||||
]
|
]
|
||||||
|
|
|
@ -13,6 +13,7 @@ urlpatterns = [
|
||||||
|
|
||||||
# Include project routers
|
# Include project routers
|
||||||
path('note/', include('note.urls')),
|
path('note/', include('note.urls')),
|
||||||
|
path('treasury/', include('treasury.urls')),
|
||||||
|
|
||||||
# Include Django Contrib and Core routers
|
# Include Django Contrib and Core routers
|
||||||
path('i18n/', include('django.conf.urls.i18n')),
|
path('i18n/', include('django.conf.urls.i18n')),
|
||||||
|
|
|
@ -81,6 +81,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
<li class="nav-item active">
|
<li class="nav-item active">
|
||||||
<a class="nav-link" href="{% url 'note:transfer' %}"><i class="fa fa-exchange"></i>{% trans 'Transfer' %} </a>
|
<a class="nav-link" href="{% url 'note:transfer' %}"><i class="fa fa-exchange"></i>{% trans 'Transfer' %} </a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item active">
|
||||||
|
<a class="nav-link" href="{% url 'treasury:billing' %}"><i class="fa fa-money"></i>{% trans 'Treasury' %} </a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navbar-nav ml-auto">
|
<ul class="navbar-nav ml-auto">
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% load render_table from django_tables2 %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{% render_table table %}
|
||||||
|
|
||||||
|
<a class="btn btn-primary" href="{% url 'treasury:billing' %}">{% trans "New billing" %}</a>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
{% block extrajavascript %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
$(document).ready(function($) {
|
||||||
|
$(".table-row").click(function() {
|
||||||
|
window.document.location = $(this).data("href");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue