mirror of https://gitlab.crans.org/bde/nk20
Repair Invoice model
This commit is contained in:
parent
f6027e9edd
commit
15bfdd9f96
|
@ -8,7 +8,7 @@ from .models import Invoice, Product
|
|||
|
||||
@admin.register(Invoice)
|
||||
class InvoiceAdmin(admin.ModelAdmin):
|
||||
list_display = ('id', 'name', 'subject', 'acquitted', )
|
||||
list_display = ('id', 'name', 'object', 'acquitted', )
|
||||
|
||||
|
||||
@admin.register(Product)
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import datetime
|
||||
|
||||
from crispy_forms.helper import FormHelper
|
||||
from django import forms
|
||||
|
||||
|
@ -8,6 +10,14 @@ from .models import Invoice, Product
|
|||
|
||||
|
||||
class InvoiceForm(forms.ModelForm):
|
||||
date = forms.DateField(
|
||||
initial=datetime.date.today,
|
||||
widget=forms.TextInput(attrs={'type': 'date'})
|
||||
)
|
||||
|
||||
def clean_date(self):
|
||||
self.instance.date = self.data.get("date")
|
||||
|
||||
class Meta:
|
||||
model = Invoice
|
||||
fields = '__all__'
|
||||
|
|
|
@ -25,9 +25,9 @@ class Invoice(models.Model):
|
|||
verbose_name=_("BDE"),
|
||||
)
|
||||
|
||||
subject = models.CharField(
|
||||
object = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Subject"),
|
||||
verbose_name=_("Object"),
|
||||
)
|
||||
|
||||
description = models.TextField(
|
||||
|
@ -52,56 +52,6 @@ class Invoice(models.Model):
|
|||
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):
|
||||
invoice = models.ForeignKey(
|
||||
|
|
|
@ -29,4 +29,4 @@ class InvoiceTable(tables.Table):
|
|||
}
|
||||
model = Invoice
|
||||
template_name = 'django_tables2/bootstrap4.html'
|
||||
fields = ('id', 'name', 'subject', 'acquitted', 'invoice',)
|
||||
fields = ('id', 'name', 'object', 'acquitted', 'invoice',)
|
||||
|
|
|
@ -47,9 +47,9 @@ class InvoiceCreateView(LoginRequiredMixin, CreateView):
|
|||
kwargs = {}
|
||||
for key in self.request.POST:
|
||||
value = self.request.POST[key]
|
||||
if key.endswith("amount"):
|
||||
if key.endswith("amount") and value:
|
||||
kwargs[key] = str(int(100 * float(value)))
|
||||
else:
|
||||
elif value:
|
||||
kwargs[key] = value
|
||||
|
||||
formset = ProductFormSet(kwargs, instance=form.instance)
|
||||
|
@ -87,6 +87,7 @@ class InvoiceUpdateView(LoginRequiredMixin, UpdateView):
|
|||
form = context['form']
|
||||
form.helper = FormHelper()
|
||||
form.helper.form_tag = False
|
||||
form.fields['date'].initial = form.instance.date
|
||||
form_set = ProductFormSet(instance=form.instance)
|
||||
context['formset'] = form_set
|
||||
context['helper'] = ProductFormSetHelper()
|
||||
|
@ -100,25 +101,21 @@ class InvoiceUpdateView(LoginRequiredMixin, UpdateView):
|
|||
kwargs = {}
|
||||
for key in self.request.POST:
|
||||
value = self.request.POST[key]
|
||||
if key.endswith("amount"):
|
||||
if key.endswith("amount") and value:
|
||||
kwargs[key] = str(int(100 * float(value)))
|
||||
else:
|
||||
elif value:
|
||||
kwargs[key] = value
|
||||
|
||||
formset = ProductFormSet(kwargs, instance=form.instance)
|
||||
saved = []
|
||||
print(formset.errors)
|
||||
if formset.is_valid():
|
||||
for f in formset:
|
||||
if f.is_valid() and f.instance.designation:
|
||||
if type(f.instance.pk) == 'number' and f.instance.pk <= 0:
|
||||
f.instance.pk = None
|
||||
f.save()
|
||||
f.instance.save()
|
||||
saved.append(f.instance.pk)
|
||||
else:
|
||||
f.instance = None
|
||||
|
||||
Product.objects.filter(~Q(pk__in=saved), invoice=form.instance).delete()
|
||||
|
||||
return ret
|
||||
|
@ -137,8 +134,18 @@ class InvoiceRenderView(LoginRequiredMixin, View):
|
|||
invoice = Invoice.objects.get(pk=pk)
|
||||
products = Product.objects.filter(invoice=invoice).all()
|
||||
|
||||
invoice.description = invoice.description.replace("\n", "\\newline\n")
|
||||
invoice.address = invoice.address.replace("\n", "\\newline\n")
|
||||
invoice.place = "Cachan"
|
||||
invoice.my_name = "BDE ENS Cachan"
|
||||
invoice.my_address_street = "61 avenue du Président Wilson"
|
||||
invoice.my_city = "94230 Cachan"
|
||||
invoice.bank_code = 30003
|
||||
invoice.desk_code = 3894
|
||||
invoice.account_number = 37280662
|
||||
invoice.rib_key = 14
|
||||
invoice.bic = "SOGEFRPP"
|
||||
|
||||
invoice.description = invoice.description.replace("\r", "").replace("\n", "\\\\ ")
|
||||
invoice.address = invoice.address.replace("\r", "").replace("\n", "\\\\ ")
|
||||
tex = render_to_string("treasury/invoice_sample.tex", dict(obj=invoice, products=products))
|
||||
try:
|
||||
os.mkdir(BASE_DIR + "/tmp")
|
||||
|
@ -155,9 +162,6 @@ class InvoiceRenderView(LoginRequiredMixin, View):
|
|||
error = subprocess.Popen(
|
||||
["pdflatex", "invoice-{}.tex".format(pk)],
|
||||
cwd=tmp_dir,
|
||||
stdin=open(os.devnull, "r"),
|
||||
stderr=open(os.devnull, "wb"),
|
||||
stdout=open(os.devnull, "wb")
|
||||
).wait()
|
||||
|
||||
if error:
|
||||
|
|
|
@ -505,7 +505,7 @@ msgid "BDE"
|
|||
msgstr ""
|
||||
|
||||
#: apps/treasury/models.py:30
|
||||
msgid "Subject"
|
||||
msgid "Object"
|
||||
msgstr ""
|
||||
|
||||
#: apps/treasury/models.py:34
|
||||
|
|
|
@ -505,7 +505,7 @@ msgid "BDE"
|
|||
msgstr "BDE"
|
||||
|
||||
#: apps/treasury/models.py:30
|
||||
msgid "Subject"
|
||||
msgid "Object"
|
||||
msgstr "Objet"
|
||||
|
||||
#: apps/treasury/models.py:34
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
\def\FactureAcquittee {% if obj.acquitted %} {oui} {% else %} {non} {% endif %} % Facture acquittée : oui/non
|
||||
\def\FactureLieu {{"{"}}{{ obj.place }}} % Lieu de l'édition de la facture
|
||||
\def\FactureDate {{"{"}}{{ obj.date }}} % Date de l'édition de la facture
|
||||
\def\FactureObjet {{"{"}}{{ obj.subject|safe }} } % Objet du document
|
||||
\def\FactureObjet {{"{"}}{{ obj.object|safe }} } % Objet du document
|
||||
% Description de la facture
|
||||
\def\FactureDescr {{"{"}}{{ obj.description|safe }}}
|
||||
|
||||
|
|
Loading…
Reference in New Issue