Improve Operation numbering in accounting

This commit is contained in:
Skia 2016-07-20 18:48:18 +02:00
parent 150147c69f
commit 28aa143f39
8 changed files with 75 additions and 10 deletions

View File

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounting', '0011_auto_20160718_1805'),
]
operations = [
migrations.AlterModelOptions(
name='operation',
options={'ordering': ['-number']},
),
migrations.AddField(
model_name='operation',
name='number',
field=models.IntegerField(default=1, verbose_name='number'),
preserve_default=False,
),
migrations.AlterUniqueTogether(
name='operation',
unique_together=set([('number', 'journal')]),
),
]

View File

@ -1,7 +1,10 @@
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.core.exceptions import ValidationError
from django.db.models import Count
from django.db import models from django.db import models
from django.conf import settings from django.conf import settings
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.template import defaultfilters
from decimal import Decimal from decimal import Decimal
from core.models import User from core.models import User
@ -128,6 +131,7 @@ class Operation(models.Model):
""" """
An operation is a line in the journal, a debit or a credit An operation is a line in the journal, a debit or a credit
""" """
number = models.IntegerField(_('number'))
journal = models.ForeignKey(GeneralJournal, related_name="operations", null=False) journal = models.ForeignKey(GeneralJournal, related_name="operations", null=False)
amount = CurrencyField(_('amount')) amount = CurrencyField(_('amount'))
date = models.DateField(_('date')) date = models.DateField(_('date'))
@ -139,7 +143,19 @@ class Operation(models.Model):
done = models.BooleanField(_('is done'), default=False) done = models.BooleanField(_('is done'), default=False)
accounting_type = models.ForeignKey('AccountingType', related_name="operations") accounting_type = models.ForeignKey('AccountingType', related_name="operations")
class Meta:
unique_together = ('number', 'journal')
ordering = ['-number']
def clean(self):
super(Operation, self).clean()
if self.date < self.journal.start_date:
raise ValidationError(_("""The date can not be before the start date of the journal, which is
%(start_date)s.""") % {'start_date': defaultfilters.date(self.journal.start_date, settings.DATE_FORMAT)})
def save(self): def save(self):
if self.number is None:
self.number = self.journal.operations.count() + 1
super(Operation, self).save() super(Operation, self).save()
self.journal.update_amounts() self.journal.update_amounts()

View File

@ -17,6 +17,7 @@
<p>{% trans %}You can not create new journal while you still have one opened{% endtrans %}</p> <p>{% trans %}You can not create new journal while you still have one opened{% endtrans %}</p>
{% endif %} {% endif %}
<table> <table>
<thead>
<tr> <tr>
<td>{% trans %}Name{% endtrans %}</td> <td>{% trans %}Name{% endtrans %}</td>
<td>{% trans %}Start{% endtrans %}</td> <td>{% trans %}Start{% endtrans %}</td>
@ -24,7 +25,10 @@
<td>{% trans %}Amount{% endtrans %}</td> <td>{% trans %}Amount{% endtrans %}</td>
<td>{% trans %}Effective amount{% endtrans %}</td> <td>{% trans %}Effective amount{% endtrans %}</td>
<td>{% trans %}Closed{% endtrans %}</td> <td>{% trans %}Closed{% endtrans %}</td>
<td>{% trans %}Actions{% endtrans %}</td>
</tr> </tr>
</thead>
<tbody>
{% for j in object.journals.all() %} {% for j in object.journals.all() %}
<tr> <tr>
<td>{{ j.name }}</td> <td>{{ j.name }}</td>
@ -45,5 +49,6 @@
<a href="{{ url('accounting:journal_edit', j_id=j.id) }}">{% trans %}Edit{% endtrans %}</a> </td> <a href="{{ url('accounting:journal_edit', j_id=j.id) }}">{% trans %}Edit{% endtrans %}</a> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody>
</table> </table>
{% endblock %} {% endblock %}

View File

@ -15,6 +15,7 @@
<p><a href="{{ url('accounting:op_new') }}?parent={{ object.id }}">{% trans %}New operation{% endtrans %}</a></p> <p><a href="{{ url('accounting:op_new') }}?parent={{ object.id }}">{% trans %}New operation{% endtrans %}</a></p>
{% endif %} {% endif %}
<table> <table>
<thead>
<tr> <tr>
<td>{% trans %}Nb{% endtrans %}</td> <td>{% trans %}Nb{% endtrans %}</td>
<td>{% trans %}Date{% endtrans %}</td> <td>{% trans %}Date{% endtrans %}</td>
@ -28,9 +29,11 @@
<td>{% trans %}Comment{% endtrans %}</td> <td>{% trans %}Comment{% endtrans %}</td>
<td>{% trans %}Actions{% endtrans %}</td> <td>{% trans %}Actions{% endtrans %}</td>
</tr> </tr>
</thead>
<tbody>
{% for o in object.operations.all() %} {% for o in object.operations.all() %}
<tr> <tr>
<td>{{ o.id }}</td> <td>{{ o.number }}</td>
<td>{{ o.date }}</td> <td>{{ o.date }}</td>
<td>{{ o.label }}</td> <td>{{ o.label }}</td>
<td>{{ o.amount }} €</td> <td>{{ o.amount }} €</td>
@ -50,5 +53,6 @@
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody>
</table> </table>
{% endblock %} {% endblock %}

View File

@ -180,9 +180,3 @@ select[multiple]
vertical-align: top; vertical-align: top;
} }
/* Tables
-----------------------------------------------*/
tbody>tr{
display: block;
margin: 3px;
}

View File

@ -111,6 +111,24 @@ ul, ol {
display: inline-block; display: inline-block;
margin: 4px; margin: 4px;
} }
table {
width: 100%;
}
td {
padding: 4px;
border: solid 1px black;
border-collapse: collapse;
}
thead {
font-weight: bold;
}
tbody>tr:nth-child(even) {
background: lightgrey;
}
tbody>tr:hover {
background: yellow;
width: 100%;
}
/*-----------------------------USER PROFILE----------------------------*/ /*-----------------------------USER PROFILE----------------------------*/
.user_profile { .user_profile {

View File

@ -65,7 +65,7 @@ class Product(models.Model):
icon = models.ImageField(upload_to='products', null=True, blank=True) icon = models.ImageField(upload_to='products', null=True, blank=True)
club = models.ForeignKey(Club, related_name="products") club = models.ForeignKey(Club, related_name="products")
def is_owned_by(self, user): # TODO do this for all models def is_owned_by(self, user):
""" """
Method to see if that object can be edited by the given user Method to see if that object can be edited by the given user
""" """

View File

@ -144,9 +144,9 @@ DATABASES = {
# Internationalization # Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/ # https://docs.djangoproject.com/en/1.8/topics/i18n/
LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'fr-FR'
TIME_ZONE = 'UTC' TIME_ZONE = 'Europe/Paris'
USE_I18N = True USE_I18N = True