Format accounting

This commit is contained in:
Pierre Brunet 2017-06-12 08:49:03 +02:00
parent 38026025af
commit 544ff630a5
5 changed files with 236 additions and 205 deletions

View File

@ -35,5 +35,3 @@ admin.site.register(SimplifiedAccountingType)
admin.site.register(Operation) admin.site.register(Operation)
admin.site.register(Label) admin.site.register(Label)
admin.site.register(Company) admin.site.register(Company)

View File

@ -25,7 +25,6 @@
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core import validators from django.core import validators
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 _
@ -37,6 +36,7 @@ from decimal import Decimal
from core.models import User, SithFile from core.models import User, SithFile
from club.models import Club from club.models import Club
class CurrencyField(models.DecimalField): class CurrencyField(models.DecimalField):
""" """
This is a custom database field used for currency This is a custom database field used for currency
@ -56,6 +56,7 @@ class CurrencyField(models.DecimalField):
# Accounting classes # Accounting classes
class Company(models.Model): class Company(models.Model):
name = models.CharField(_('name'), max_length=60) name = models.CharField(_('name'), max_length=60)
street = models.CharField(_('street'), max_length=60, blank=True) street = models.CharField(_('street'), max_length=60, blank=True)
@ -104,6 +105,7 @@ class Company(models.Model):
def __str__(self): def __str__(self):
return self.name return self.name
class BankAccount(models.Model): class BankAccount(models.Model):
name = models.CharField(_('name'), max_length=30) name = models.CharField(_('name'), max_length=30)
iban = models.CharField(_('iban'), max_length=255, blank=True) iban = models.CharField(_('iban'), max_length=255, blank=True)
@ -131,6 +133,7 @@ class BankAccount(models.Model):
def __str__(self): def __str__(self):
return self.name return self.name
class ClubAccount(models.Model): class ClubAccount(models.Model):
name = models.CharField(_('name'), max_length=30) name = models.CharField(_('name'), max_length=30)
club = models.ForeignKey(Club, related_name="club_account", verbose_name=_("club")) club = models.ForeignKey(Club, related_name="club_account", verbose_name=_("club"))
@ -244,6 +247,7 @@ class GeneralJournal(models.Model):
self.amount -= o.amount self.amount -= o.amount
self.save() self.save()
class Operation(models.Model): 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
@ -352,6 +356,7 @@ class Operation(models.Model):
self.amount, self.date, self.accounting_type, self.done, self.amount, self.date, self.accounting_type, self.done,
) )
class AccountingType(models.Model): class AccountingType(models.Model):
""" """
Class describing the accounting types. Class describing the accounting types.
@ -385,6 +390,7 @@ class AccountingType(models.Model):
def __str__(self): def __str__(self):
return self.code + " - " + self.get_movement_type_display() + " - " + self.label return self.code + " - " + self.get_movement_type_display() + " - " + self.label
class SimplifiedAccountingType(models.Model): class SimplifiedAccountingType(models.Model):
""" """
Class describing the simplified accounting types. Class describing the simplified accounting types.
@ -410,6 +416,7 @@ class SimplifiedAccountingType(models.Model):
def __str__(self): def __str__(self):
return self.get_movement_type_display() + " - " + self.accounting_type.code + " - " + self.label return self.get_movement_type_display() + " - " + self.accounting_type.code + " - " + self.label
class Label(models.Model): class Label(models.Model):
"""Label allow a club to sort its operations""" """Label allow a club to sort its operations"""
name = models.CharField(_('label'), max_length=64) name = models.CharField(_('label'), max_length=64)
@ -432,4 +439,3 @@ class Label(models.Model):
def can_be_viewed_by(self, user): def can_be_viewed_by(self, user):
return self.club_account.can_be_viewed_by(user) return self.club_account.can_be_viewed_by(user)

View File

@ -22,15 +22,12 @@
# #
# #
from django.test import Client, TestCase from django.test import TestCase
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib.auth.models import Group
from django.core.management import call_command from django.core.management import call_command
from django.conf import settings from datetime import date
from datetime import date, datetime
from core.models import User from core.models import User
from counter.models import Counter
from accounting.models import GeneralJournal, Operation, Label, AccountingType, SimplifiedAccountingType from accounting.models import GeneralJournal, Operation, Label, AccountingType, SimplifiedAccountingType
@ -72,6 +69,7 @@ class RefoundAccountTest(TestCase):
self.assertFalse(response_post.status_code == 403) self.assertFalse(response_post.status_code == 403)
self.assertTrue(self.skia.customer.amount == 0) self.assertTrue(self.skia.customer.amount == 0)
class JournalTest(TestCase): class JournalTest(TestCase):
def setUp(self): def setUp(self):
call_command("populate") call_command("populate")
@ -91,6 +89,7 @@ class JournalTest(TestCase):
self.assertTrue(response_get.status_code == 403) self.assertTrue(response_get.status_code == 403)
self.assertFalse('<td>M\xc3\xa9thode de paiement</td>' in str(response_get.content)) self.assertFalse('<td>M\xc3\xa9thode de paiement</td>' in str(response_get.content))
class OperationTest(TestCase): class OperationTest(TestCase):
def setUp(self): def setUp(self):
call_command("populate") call_command("populate")
@ -137,7 +136,7 @@ class OperationTest(TestCase):
def test_bad_new_operation(self): def test_bad_new_operation(self):
self.client.login(username='comptable', password='plop') self.client.login(username='comptable', password='plop')
at = AccountingType.objects.filter(code = '604').first() AccountingType.objects.filter(code='604').first()
response = self.client.post(reverse('accounting:op_new', response = self.client.post(reverse('accounting:op_new',
args=[self.journal.id]), args=[self.journal.id]),
{'amount': 30, {'amount': 30,
@ -216,7 +215,6 @@ class OperationTest(TestCase):
response_get = self.client.get(reverse("accounting:journal_person_statement", args=[self.journal.id])) response_get = self.client.get(reverse("accounting:journal_person_statement", args=[self.journal.id]))
self.assertTrue("S&#39; Kia</a></td>\\n \\n <td>3.00</td>" in str(response_get.content)) self.assertTrue("S&#39; Kia</a></td>\\n \\n <td>3.00</td>" in str(response_get.content))
def test_accounting_statement(self): def test_accounting_statement(self):
self.client.login(username='comptable', password='plop') self.client.login(username='comptable', password='plop')
response_get = self.client.get(reverse("accounting:journal_accounting_statement", args=[self.journal.id])) response_get = self.client.get(reverse("accounting:journal_accounting_statement", args=[self.journal.id]))

View File

@ -22,7 +22,7 @@
# #
# #
from django.conf.urls import url, include from django.conf.urls import url
from accounting.views import * from accounting.views import *
@ -71,5 +71,3 @@ urlpatterns = [
# User account # User account
url(r'^refound/account$', RefoundAccountView.as_view(), name='refound_account'), url(r'^refound/account$', RefoundAccountView.as_view(), name='refound_account'),
] ]

View File

@ -22,25 +22,21 @@
# #
# #
from django.views.generic import ListView, DetailView, RedirectView from django.views.generic import ListView, DetailView
from django.views.generic.edit import UpdateView, CreateView, DeleteView, FormView from django.views.generic.edit import UpdateView, CreateView, DeleteView, FormView
from django.shortcuts import render
from django.core.urlresolvers import reverse_lazy, reverse from django.core.urlresolvers import reverse_lazy, reverse
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.forms.models import modelform_factory from django.forms.models import modelform_factory
from django.core.exceptions import PermissionDenied, ValidationError from django.core.exceptions import PermissionDenied, ValidationError
from django.forms import HiddenInput, TextInput from django.forms import HiddenInput
from django.db import transaction from django.db import transaction
from django.db.models import Sum from django.db.models import Sum
from django.conf import settings from django.conf import settings
from django import forms from django import forms
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponse
from django.utils.translation import ugettext as _
from django.conf import settings
import collections import collections
from ajax_select.fields import AutoCompleteSelectField, AutoCompleteSelectMultipleField from ajax_select.fields import AutoCompleteSelectField
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin
from core.views.forms import SelectFile, SelectDate from core.views.forms import SelectFile, SelectDate
@ -49,6 +45,7 @@ from counter.models import Counter, Selling, Product
# Main accounting view # Main accounting view
class BankAccountListView(CanViewMixin, ListView): class BankAccountListView(CanViewMixin, ListView):
""" """
A list view for the admins A list view for the admins
@ -57,6 +54,7 @@ class BankAccountListView(CanViewMixin, ListView):
template_name = 'accounting/bank_account_list.jinja' template_name = 'accounting/bank_account_list.jinja'
ordering = ['name'] ordering = ['name']
# Simplified accounting types # Simplified accounting types
class SimplifiedAccountingTypeListView(CanViewMixin, ListView): class SimplifiedAccountingTypeListView(CanViewMixin, ListView):
@ -66,6 +64,7 @@ class SimplifiedAccountingTypeListView(CanViewMixin, ListView):
model = SimplifiedAccountingType model = SimplifiedAccountingType
template_name = 'accounting/simplifiedaccountingtype_list.jinja' template_name = 'accounting/simplifiedaccountingtype_list.jinja'
class SimplifiedAccountingTypeEditView(CanViewMixin, UpdateView): class SimplifiedAccountingTypeEditView(CanViewMixin, UpdateView):
""" """
An edit view for the admins An edit view for the admins
@ -75,6 +74,7 @@ class SimplifiedAccountingTypeEditView(CanViewMixin, UpdateView):
fields = ['label', 'accounting_type'] fields = ['label', 'accounting_type']
template_name = 'core/edit.jinja' template_name = 'core/edit.jinja'
class SimplifiedAccountingTypeCreateView(CanCreateMixin, CreateView): class SimplifiedAccountingTypeCreateView(CanCreateMixin, CreateView):
""" """
Create an accounting type (for the admins) Create an accounting type (for the admins)
@ -83,6 +83,7 @@ class SimplifiedAccountingTypeCreateView(CanCreateMixin, CreateView):
fields = ['label', 'accounting_type'] fields = ['label', 'accounting_type']
template_name = 'core/create.jinja' template_name = 'core/create.jinja'
# Accounting types # Accounting types
class AccountingTypeListView(CanViewMixin, ListView): class AccountingTypeListView(CanViewMixin, ListView):
@ -92,6 +93,7 @@ class AccountingTypeListView(CanViewMixin, ListView):
model = AccountingType model = AccountingType
template_name = 'accounting/accountingtype_list.jinja' template_name = 'accounting/accountingtype_list.jinja'
class AccountingTypeEditView(CanViewMixin, UpdateView): class AccountingTypeEditView(CanViewMixin, UpdateView):
""" """
An edit view for the admins An edit view for the admins
@ -101,6 +103,7 @@ class AccountingTypeEditView(CanViewMixin, UpdateView):
fields = ['code', 'label', 'movement_type'] fields = ['code', 'label', 'movement_type']
template_name = 'core/edit.jinja' template_name = 'core/edit.jinja'
class AccountingTypeCreateView(CanCreateMixin, CreateView): class AccountingTypeCreateView(CanCreateMixin, CreateView):
""" """
Create an accounting type (for the admins) Create an accounting type (for the admins)
@ -109,6 +112,7 @@ class AccountingTypeCreateView(CanCreateMixin, CreateView):
fields = ['code', 'label', 'movement_type'] fields = ['code', 'label', 'movement_type']
template_name = 'core/create.jinja' template_name = 'core/create.jinja'
# BankAccount views # BankAccount views
class BankAccountEditView(CanViewMixin, UpdateView): class BankAccountEditView(CanViewMixin, UpdateView):
@ -120,6 +124,7 @@ class BankAccountEditView(CanViewMixin, UpdateView):
fields = ['name', 'iban', 'number', 'club'] fields = ['name', 'iban', 'number', 'club']
template_name = 'core/edit.jinja' template_name = 'core/edit.jinja'
class BankAccountDetailView(CanViewMixin, DetailView): class BankAccountDetailView(CanViewMixin, DetailView):
""" """
A detail view, listing every club account A detail view, listing every club account
@ -128,6 +133,7 @@ class BankAccountDetailView(CanViewMixin, DetailView):
pk_url_kwarg = "b_account_id" pk_url_kwarg = "b_account_id"
template_name = 'accounting/bank_account_details.jinja' template_name = 'accounting/bank_account_details.jinja'
class BankAccountCreateView(CanCreateMixin, CreateView): class BankAccountCreateView(CanCreateMixin, CreateView):
""" """
Create a bank account (for the admins) Create a bank account (for the admins)
@ -136,6 +142,7 @@ class BankAccountCreateView(CanCreateMixin, CreateView):
fields = ['name', 'club', 'iban', 'number'] fields = ['name', 'club', 'iban', 'number']
template_name = 'core/create.jinja' template_name = 'core/create.jinja'
class BankAccountDeleteView(CanEditPropMixin, DeleteView): # TODO change Delete to Close class BankAccountDeleteView(CanEditPropMixin, DeleteView): # TODO change Delete to Close
""" """
Delete a bank account (for the admins) Delete a bank account (for the admins)
@ -145,6 +152,7 @@ class BankAccountDeleteView(CanEditPropMixin, DeleteView): # TODO change Delete
template_name = 'core/delete_confirm.jinja' template_name = 'core/delete_confirm.jinja'
success_url = reverse_lazy('accounting:bank_list') success_url = reverse_lazy('accounting:bank_list')
# ClubAccount views # ClubAccount views
class ClubAccountEditView(CanViewMixin, UpdateView): class ClubAccountEditView(CanViewMixin, UpdateView):
@ -156,6 +164,7 @@ class ClubAccountEditView(CanViewMixin, UpdateView):
fields = ['name', 'club', 'bank_account'] fields = ['name', 'club', 'bank_account']
template_name = 'core/edit.jinja' template_name = 'core/edit.jinja'
class ClubAccountDetailView(CanViewMixin, DetailView): class ClubAccountDetailView(CanViewMixin, DetailView):
""" """
A detail view, listing every journal A detail view, listing every journal
@ -164,6 +173,7 @@ class ClubAccountDetailView(CanViewMixin, DetailView):
pk_url_kwarg = "c_account_id" pk_url_kwarg = "c_account_id"
template_name = 'accounting/club_account_details.jinja' template_name = 'accounting/club_account_details.jinja'
class ClubAccountCreateView(CanCreateMixin, CreateView): class ClubAccountCreateView(CanCreateMixin, CreateView):
""" """
Create a club account (for the admins) Create a club account (for the admins)
@ -180,6 +190,7 @@ class ClubAccountCreateView(CanCreateMixin, CreateView):
ret['bank_account'] = obj.id ret['bank_account'] = obj.id
return ret return ret
class ClubAccountDeleteView(CanEditPropMixin, DeleteView): # TODO change Delete to Close class ClubAccountDeleteView(CanEditPropMixin, DeleteView): # TODO change Delete to Close
""" """
Delete a club account (for the admins) Delete a club account (for the admins)
@ -189,6 +200,7 @@ class ClubAccountDeleteView(CanEditPropMixin, DeleteView): # TODO change Delete
template_name = 'core/delete_confirm.jinja' template_name = 'core/delete_confirm.jinja'
success_url = reverse_lazy('accounting:bank_list') success_url = reverse_lazy('accounting:bank_list')
# Journal views # Journal views
class JournalTabsMixin(TabedViewMixin): class JournalTabsMixin(TabedViewMixin):
@ -219,6 +231,7 @@ class JournalTabsMixin(TabedViewMixin):
}) })
return tab_list return tab_list
class JournalCreateView(CanCreateMixin, CreateView): class JournalCreateView(CanCreateMixin, CreateView):
""" """
Create a general journal Create a general journal
@ -236,6 +249,7 @@ class JournalCreateView(CanCreateMixin, CreateView):
ret['club_account'] = obj.id ret['club_account'] = obj.id
return ret return ret
class JournalDetailView(JournalTabsMixin, CanViewMixin, DetailView): class JournalDetailView(JournalTabsMixin, CanViewMixin, DetailView):
""" """
A detail view, listing every operation A detail view, listing every operation
@ -245,6 +259,7 @@ class JournalDetailView(JournalTabsMixin, CanViewMixin, DetailView):
template_name = 'accounting/journal_details.jinja' template_name = 'accounting/journal_details.jinja'
current_tab = 'journal' current_tab = 'journal'
class JournalEditView(CanEditMixin, UpdateView): class JournalEditView(CanEditMixin, UpdateView):
""" """
Update a general journal Update a general journal
@ -254,6 +269,7 @@ class JournalEditView(CanEditMixin, UpdateView):
fields = ['name', 'start_date', 'end_date', 'club_account', 'closed'] fields = ['name', 'start_date', 'end_date', 'club_account', 'closed']
template_name = 'core/edit.jinja' template_name = 'core/edit.jinja'
class JournalDeleteView(CanEditPropMixin, DeleteView): class JournalDeleteView(CanEditPropMixin, DeleteView):
""" """
Delete a club account (for the admins) Delete a club account (for the admins)
@ -270,6 +286,7 @@ class JournalDeleteView(CanEditPropMixin, DeleteView):
else: else:
raise PermissionDenied raise PermissionDenied
# Operation views # Operation views
class OperationForm(forms.ModelForm): class OperationForm(forms.ModelForm):
@ -350,6 +367,7 @@ class OperationForm(forms.ModelForm):
self.save() self.save()
return ret return ret
class OperationCreateView(CanCreateMixin, CreateView): class OperationCreateView(CanCreateMixin, CreateView):
""" """
Create an operation Create an operation
@ -376,6 +394,7 @@ class OperationCreateView(CanCreateMixin, CreateView):
kwargs['object'] = self.journal kwargs['object'] = self.journal
return kwargs return kwargs
class OperationEditView(CanEditMixin, UpdateView): class OperationEditView(CanEditMixin, UpdateView):
""" """
An edit view, working as detail for the moment An edit view, working as detail for the moment
@ -391,6 +410,7 @@ class OperationEditView(CanEditMixin, UpdateView):
kwargs['object'] = self.object.journal kwargs['object'] = self.object.journal
return kwargs return kwargs
class OperationPDFView(CanViewMixin, DetailView): class OperationPDFView(CanViewMixin, DetailView):
""" """
Display the PDF of a given operation Display the PDF of a given operation
@ -402,11 +422,10 @@ class OperationPDFView(CanViewMixin, DetailView):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
from reportlab.pdfgen import canvas from reportlab.pdfgen import canvas
from reportlab.lib.units import cm from reportlab.lib.units import cm
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle from reportlab.platypus import Table, TableStyle
from reportlab.lib import colors from reportlab.lib import colors
from reportlab.lib.pagesizes import letter from reportlab.lib.pagesizes import letter
from reportlab.lib.utils import ImageReader from reportlab.lib.utils import ImageReader
from reportlab.graphics.shapes import Drawing
from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase import pdfmetrics
@ -419,7 +438,6 @@ class OperationPDFView(CanViewMixin, DetailView):
num = self.object.number num = self.object.number
date = self.object.date date = self.object.date
mode = self.object.mode mode = self.object.mode
cheque_number = self.object.cheque_number
club_name = self.object.journal.club_account.name club_name = self.object.journal.club_account.name
ti = self.object.journal.name ti = self.object.journal.name
op_label = self.object.label op_label = self.object.label
@ -455,7 +473,7 @@ class OperationPDFView(CanViewMixin, DetailView):
p.drawString(90, height - 100, _("Financial proof: ") + "OP%010d" % (id_op)) # Justificatif du libellé p.drawString(90, height - 100, _("Financial proof: ") + "OP%010d" % (id_op)) # Justificatif du libellé
p.drawString(90, height - 130, _("Club: %(club_name)s") % ({"club_name": club_name})) p.drawString(90, height - 130, _("Club: %(club_name)s") % ({"club_name": club_name}))
p.drawString(90, height - 160, _("Label: %(op_label)s") % {"op_label": op_label if op_label != None else ""}) p.drawString(90, height - 160, _("Label: %(op_label)s") % {"op_label": op_label if op_label is not None else ""})
p.drawString(90, height - 190, _("Date: %(date)s") % {"date": date}) p.drawString(90, height - 190, _("Date: %(date)s") % {"date": date})
data = [] data = []
@ -516,6 +534,7 @@ class OperationPDFView(CanViewMixin, DetailView):
p.save() p.save()
return response return response
class JournalNatureStatementView(JournalTabsMixin, CanViewMixin, DetailView): class JournalNatureStatementView(JournalTabsMixin, CanViewMixin, DetailView):
""" """
Display a statement sorted by labels Display a statement sorted by labels
@ -532,8 +551,10 @@ class JournalNatureStatementView(JournalTabsMixin, CanViewMixin, DetailView):
for sat in [None] + list(SimplifiedAccountingType.objects.order_by('label').all()): for sat in [None] + list(SimplifiedAccountingType.objects.order_by('label').all()):
sum = queryset.filter(accounting_type__movement_type=movement_type, sum = queryset.filter(accounting_type__movement_type=movement_type,
simpleaccounting_type=sat).aggregate(amount_sum=Sum('amount'))['amount_sum'] simpleaccounting_type=sat).aggregate(amount_sum=Sum('amount'))['amount_sum']
if sat: sat = sat.label if sat:
else: sat = "" sat = sat.label
else:
sat = ""
if sum: if sum:
total_sum += sum total_sum += sum
statement[sat] = sum statement[sat] = sum
@ -566,6 +587,7 @@ class JournalNatureStatementView(JournalTabsMixin, CanViewMixin, DetailView):
kwargs['statement'] = self.big_statement() kwargs['statement'] = self.big_statement()
return kwargs return kwargs
class JournalPersonStatementView(JournalTabsMixin, CanViewMixin, DetailView): class JournalPersonStatementView(JournalTabsMixin, CanViewMixin, DetailView):
""" """
Calculate a dictionary with operation target and sum of operations Calculate a dictionary with operation target and sum of operations
@ -598,6 +620,7 @@ class JournalPersonStatementView(JournalTabsMixin, CanViewMixin, DetailView):
kwargs['total_debit'] = self.total("DEBIT") kwargs['total_debit'] = self.total("DEBIT")
return kwargs return kwargs
class JournalAccountingStatementView(JournalTabsMixin, CanViewMixin, DetailView): class JournalAccountingStatementView(JournalTabsMixin, CanViewMixin, DetailView):
""" """
Calculate a dictionary with operation type and sum of operations Calculate a dictionary with operation type and sum of operations
@ -624,10 +647,12 @@ class JournalAccountingStatementView(JournalTabsMixin, CanViewMixin, DetailView)
# Company views # Company views
class CompanyListView(CanViewMixin, ListView): class CompanyListView(CanViewMixin, ListView):
model = Company model = Company
template_name = 'accounting/co_list.jinja' template_name = 'accounting/co_list.jinja'
class CompanyCreateView(CanCreateMixin, CreateView): class CompanyCreateView(CanCreateMixin, CreateView):
""" """
Create a company Create a company
@ -648,6 +673,7 @@ class CompanyEditView(CanCreateMixin, UpdateView):
template_name = 'core/edit.jinja' template_name = 'core/edit.jinja'
success_url = reverse_lazy('accounting:co_list') success_url = reverse_lazy('accounting:co_list')
# Label views # Label views
class LabelListView(CanViewMixin, DetailView): class LabelListView(CanViewMixin, DetailView):
@ -655,6 +681,7 @@ class LabelListView(CanViewMixin, DetailView):
pk_url_kwarg = "clubaccount_id" pk_url_kwarg = "clubaccount_id"
template_name = 'accounting/label_list.jinja' template_name = 'accounting/label_list.jinja'
class LabelCreateView(CanCreateMixin, CreateView): # FIXME we need to check the rights before creating the object class LabelCreateView(CanCreateMixin, CreateView): # FIXME we need to check the rights before creating the object
model = Label model = Label
form_class = modelform_factory(Label, fields=['name', 'club_account'], widgets={ form_class = modelform_factory(Label, fields=['name', 'club_account'], widgets={
@ -670,12 +697,14 @@ class LabelCreateView(CanCreateMixin, CreateView): # FIXME we need to check the
ret['club_account'] = obj.id ret['club_account'] = obj.id
return ret return ret
class LabelEditView(CanEditMixin, UpdateView): class LabelEditView(CanEditMixin, UpdateView):
model = Label model = Label
pk_url_kwarg = "label_id" pk_url_kwarg = "label_id"
fields = ['name'] fields = ['name']
template_name = 'core/edit.jinja' template_name = 'core/edit.jinja'
class LabelDeleteView(CanEditMixin, DeleteView): class LabelDeleteView(CanEditMixin, DeleteView):
model = Label model = Label
pk_url_kwarg = "label_id" pk_url_kwarg = "label_id"
@ -684,9 +713,11 @@ class LabelDeleteView(CanEditMixin, DeleteView):
def get_success_url(self): def get_success_url(self):
return self.object.get_absolute_url() return self.object.get_absolute_url()
class CloseCustomerAccountForm(forms.Form): class CloseCustomerAccountForm(forms.Form):
user = AutoCompleteSelectField('users', label=_('Refound this account'), help_text=None, required=True) user = AutoCompleteSelectField('users', label=_('Refound this account'), help_text=None, required=True)
class RefoundAccountView(FormView): class RefoundAccountView(FormView):
""" """
Create a selling with the same amount than the current user money Create a selling with the same amount than the current user money