diff --git a/cotisations/templates/cotisations/aff_article.html b/cotisations/templates/cotisations/aff_article.html
new file mode 100644
index 00000000..d39bc312
--- /dev/null
+++ b/cotisations/templates/cotisations/aff_article.html
@@ -0,0 +1,21 @@
+
+
+
+ Nom de l'article |
+ Prix |
+ Cotisation |
+ Durée (en mois) |
+ |
+
+
+ {% for article in article_list %}
+
+ {{ article.name }} |
+ {{ article.prix }} |
+ {{ article.cotisation }} |
+ {{ article.duration }} |
+ Editer |
+
+ {% endfor %}
+
+
diff --git a/cotisations/templates/cotisations/aff_banque.html b/cotisations/templates/cotisations/aff_banque.html
new file mode 100644
index 00000000..4db16bdd
--- /dev/null
+++ b/cotisations/templates/cotisations/aff_banque.html
@@ -0,0 +1,15 @@
+
+
+
+ Banque |
+ |
+
+
+ {% for banque in banque_list %}
+
+ {{ banque.name }} |
+ Editer |
+
+ {% endfor %}
+
+
diff --git a/cotisations/templates/cotisations/aff_paiement.html b/cotisations/templates/cotisations/aff_paiement.html
new file mode 100644
index 00000000..1bfec970
--- /dev/null
+++ b/cotisations/templates/cotisations/aff_paiement.html
@@ -0,0 +1,15 @@
+
+
+
+ Moyen de paiement |
+ |
+
+
+ {% for paiement in paiement_list %}
+
+ {{ paiement.moyen }} |
+ Editer |
+
+ {% endfor %}
+
+
diff --git a/cotisations/templates/cotisations/factures.tex b/cotisations/templates/cotisations/factures.tex
new file mode 100644
index 00000000..d4fe7aee
--- /dev/null
+++ b/cotisations/templates/cotisations/factures.tex
@@ -0,0 +1,124 @@
+{% load i18n %}
+{% language 'fr' %}
+\nonstopmode
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Invoice Template
+% LaTeX Template
+% Version 1.0 (3/11/12)
+%
+% This template has been downloaded from:
+% http://www.LaTeXTemplates.com
+%
+% Original author:
+% Trey Hunner (http://www.treyhunner.com/)
+%
+% License:
+% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/)
+%
+% Important note:
+% This template requires the invoice.cls file to be in the same directory as
+% the .tex file. The invoice.cls file provides the style used for structuring the
+% document.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%----------------------------------------------------------------------------------------
+% DOCUMENT CONFIGURATION
+%----------------------------------------------------------------------------------------
+
+\documentclass[12pt]{article} % Use the custom invoice class (invoice.cls)
+\usepackage[utf8]{inputenc}
+\usepackage[frenchb]{babel}
+\usepackage{eurosym}
+\usepackage{tabularx}
+\usepackage[letterpaper,hmargin=0.79in,vmargin=0.79in]{geometry}
+\usepackage[parfill]{parskip} % Do not indent paragraphs
+\usepackage{fp} % Fixed-point arithmetic
+\usepackage{calc} % Counters for totaling hours and cost
+\usepackage{longtable}
+\usepackage{graphicx}
+\usepackage[absolute]{textpos}
+\usepackage{calc}
+\usepackage{xparse}
+
+\pagestyle{empty} % No page numbers
+\linespread{1.5} % Line spacing
+
+\setlength{\doublerulesep}{\arrayrulewidth} % Double rules look like one thick one
+\def \tab {\hspace*{3ex}} % Define \tab to create some horizontal white space
+
+
+
+
+\begin{document}
+%\newcommand{\product}[5][0][0][0][0][0]{
+%\setlength{ptotal}{#3*\real{#4}}
+%\addtolength{total}{#3*\real{#4}}
+\DeclareDocumentCommand{\product}{ O{0} O{0} O{0} O{0} O{0} }{
+#1 & #2 & #3 & #4 & #5 \\
+\hline
+}
+
+%----------------------------------------------------------------------------------------
+% HEADING SECTION
+%----------------------------------------------------------------------------------------
+\begin{titlepage}
+\begin{textblock*}{4cm}(20mm,5mm)
+%\includegraphics[scale=0.3]{% templatetag openbrace %}{{tpl_path}}/logo.png}
+\end{textblock*}
+\end{titlepage}
+\hfil{\Huge\bf ReZo Metz}\hfil % Company providing the invoice
+\bigskip\break % Whitespace
+\hrule % Horizontal line
+2 rue Edouard Belin \\ % Your address and contact information
+57070 Metz \hfill augustin.lemesle@supelec.fr \\
+Siret :
+\\ \\
+{\bf À :} \tab {{f.user.name}} {{f.user.surname}} \\ % Invoice recipient
+
+{\bf Date:} \tab {{DATE}} \\ % Invoice date
+
+{\bf Facture \no:} \tab {{fid}} \\ % Invoice number
+
+%----------------------------------------------------------------------------------------
+% TABLE OF EXPENSES
+%----------------------------------------------------------------------------------------
+
+
+\begin{tabularx}{\textwidth}{|l|X|r|r|r|}
+\hline
+ \textbf{Code} & \textbf{Désignation} & \textbf{Qté.} & \textbf{Prix Unit.} \euro & \textbf{Prix Tot.} \euro\\
+\hline
+
+{% for a in f.article %}
+\product[{{a.code}}][{{a.designation}}][{{a.nombre}}][{{a.pu|floatformat:2}}][{{a.ptotal|floatformat:2}}]
+{% endfor %}
+
+ \hline
+\end{tabularx}
+
+%\setcounter{paid}{0}
+%\setcounter{topay}{\real{\value{total}}-\value{paid}}
+
+\hfill
+\begin{tabular}{|l|r|}
+\hline
+\textbf{Total} & {{total|floatformat:2}}\euro \\
+\textbf{Votre règlement} & {{paid|floatformat:2}}\euro \\
+\hline
+\textbf{À PAYER} & {{topay|floatformat:2}}\euro \\
+\hline
+\hline
+
+\end{tabular}
+
+\vspace{1.5cm} % Whitespace
+\hrule % Horizontal line
+\footnotesize{TVA non applicable, art. 293 B du CGI}
+
+{% endlanguage %}
+%----------------------------------------------------------------------------------------
+
+\end{document}
+
+
diff --git a/cotisations/templates/cotisations/index_article.html b/cotisations/templates/cotisations/index_article.html
new file mode 100644
index 00000000..0f3011a5
--- /dev/null
+++ b/cotisations/templates/cotisations/index_article.html
@@ -0,0 +1,15 @@
+{% extends "cotisations/sidebar.html" %}
+{% load bootstrap3 %}
+
+{% block title %}Articles{% endblock %}
+
+{% block content %}
+ Liste des types d'articles
+ Ajouter un type d'articles
+ Supprimer un ou plusieurs types d'articles
+ {% include "cotisations/aff_article.html" with article_list=article_list %}
+
+
+
+{% endblock %}
+
diff --git a/cotisations/templates/cotisations/index_banque.html b/cotisations/templates/cotisations/index_banque.html
new file mode 100644
index 00000000..cad36320
--- /dev/null
+++ b/cotisations/templates/cotisations/index_banque.html
@@ -0,0 +1,15 @@
+{% extends "cotisations/sidebar.html" %}
+{% load bootstrap3 %}
+
+{% block title %}Banques{% endblock %}
+
+{% block content %}
+ Liste des banques
+ Ajouter une banque
+ Supprimer une ou plusieurs banques
+ {% include "cotisations/aff_banque.html" with banque_list=banque_list %}
+
+
+
+{% endblock %}
+
diff --git a/cotisations/templates/cotisations/index_paiement.html b/cotisations/templates/cotisations/index_paiement.html
new file mode 100644
index 00000000..5163165e
--- /dev/null
+++ b/cotisations/templates/cotisations/index_paiement.html
@@ -0,0 +1,15 @@
+{% extends "cotisations/sidebar.html" %}
+{% load bootstrap3 %}
+
+{% block title %}Paiements{% endblock %}
+
+{% block content %}
+ Liste des types de paiements
+ Ajouter un type de paiement
+ Supprimer un ou plusieurs types de paiements
+ {% include "cotisations/aff_paiement.html" with paiement_list=paiement_list %}
+
+
+
+{% endblock %}
+
diff --git a/cotisations/templates/cotisations/sidebar.html b/cotisations/templates/cotisations/sidebar.html
index be622d09..e34d045b 100644
--- a/cotisations/templates/cotisations/sidebar.html
+++ b/cotisations/templates/cotisations/sidebar.html
@@ -2,10 +2,7 @@
{% block sidebar %}
Liste des factures
- Ajouter un article
- Retirer un article
- Ajouter un moyen de paiement
- Retirer un moyen de paiement
- Ajouter une banque
- Retirer une banque
+ Liste des articles en vente
+ Liste des banques
+ Liste des moyens de paiement
{% endblock %}
diff --git a/cotisations/urls.py b/cotisations/urls.py
index fca9c331..56d090e2 100644
--- a/cotisations/urls.py
+++ b/cotisations/urls.py
@@ -5,12 +5,19 @@ from . import views
urlpatterns = [
url(r'^new_facture/(?P[0-9]+)$', views.new_facture, name='new-facture'),
url(r'^edit_facture/(?P[0-9]+)$', views.edit_facture, name='edit-facture'),
+ url(r'^new_facture_pdf/$', views.new_facture_pdf, name='new-facture-pdf'),
url(r'^add_article/$', views.add_article, name='add-article'),
+ url(r'^edit_article/(?P[0-9]+)$', views.edit_article, name='edit-article'),
url(r'^del_article/$', views.del_article, name='del-article'),
url(r'^add_paiement/$', views.add_paiement, name='add-paiement'),
+ url(r'^edit_paiement/(?P[0-9]+)$', views.edit_paiement, name='edit-paiement'),
url(r'^del_paiement/$', views.del_paiement, name='del-paiement'),
url(r'^add_banque/$', views.add_banque, name='add-banque'),
+ url(r'^edit_banque/(?P[0-9]+)$', views.edit_banque, name='edit-banque'),
url(r'^del_banque/$', views.del_banque, name='del-banque'),
+ url(r'^index_article/$', views.index_article, name='index-article'),
+ url(r'^index_banque/$', views.index_banque, name='index-banque'),
+ url(r'^index_paiement/$', views.index_paiement, name='index-paiement'),
url(r'^$', views.index, name='index'),
]
diff --git a/cotisations/views.py b/cotisations/views.py
index 31ebaddc..eac23d25 100644
--- a/cotisations/views.py
+++ b/cotisations/views.py
@@ -8,9 +8,10 @@ from django.template import Context, RequestContext, loader
from django.contrib import messages
from django.db.models import Max, ProtectedError
-from .models import Facture, Article, Cotisation, Article
+from .models import Facture, Article, Cotisation, Paiement, Banque
from .forms import NewFactureForm, EditFactureForm, ArticleForm, DelArticleForm, PaiementForm, DelPaiementForm, BanqueForm, DelBanqueForm
from users.models import User
+from .tex import render_tex
from dateutil.relativedelta import relativedelta
from django.utils import timezone
@@ -69,6 +70,9 @@ def new_facture(request, userid):
return redirect("/users/profil/" + userid)
return form({'factureform': facture_form}, 'cotisations/facture.html', request)
+def new_facture_pdf(request):
+ return render_tex(request, 'cotisations/factures.tex', {'DATE':None})
+
def edit_facture(request, factureid):
try:
facture = Facture.objects.get(pk=factureid)
@@ -87,7 +91,20 @@ def add_article(request):
if article.is_valid():
article.save()
messages.success(request, "L'article a été ajouté")
- return redirect("/cotisations/")
+ return redirect("/cotisations/index_article/")
+ return form({'factureform': article}, 'cotisations/facture.html', request)
+
+def edit_article(request, articleid):
+ try:
+ article_instance = Article.objects.get(pk=articleid)
+ except Article.DoesNotExist:
+ messages.error(request, u"Entrée inexistante" )
+ return redirect("/cotisations/index_article/")
+ article = ArticleForm(request.POST or None, instance=article_instance)
+ if article.is_valid():
+ article.save()
+ messages.success(request, "Type d'article modifié")
+ return redirect("/cotisations/index_article/")
return form({'factureform': article}, 'cotisations/facture.html', request)
def del_article(request):
@@ -96,7 +113,7 @@ def del_article(request):
article_del = article.cleaned_data['articles']
article_del.delete()
messages.success(request, "Le/les articles ont été supprimé")
- return redirect("/cotisations/")
+ return redirect("/cotisations/index_article")
return form({'factureform': article}, 'cotisations/facture.html', request)
def add_paiement(request):
@@ -104,7 +121,20 @@ def add_paiement(request):
if paiement.is_valid():
paiement.save()
messages.success(request, "Le moyen de paiement a été ajouté")
- return redirect("/cotisations/")
+ return redirect("/cotisations/index_paiement/")
+ return form({'factureform': paiement}, 'cotisations/facture.html', request)
+
+def edit_paiement(request, paiementid):
+ try:
+ paiement_instance = Paiement.objects.get(pk=paiementid)
+ except Paiement.DoesNotExist:
+ messages.error(request, u"Entrée inexistante" )
+ return redirect("/cotisations/index_paiement/")
+ paiement = PaiementForm(request.POST or None, instance=paiement_instance)
+ if paiement.is_valid():
+ paiement.save()
+ messages.success(request, "Type de paiement modifié")
+ return redirect("/cotisations/index_paiement/")
return form({'factureform': paiement}, 'cotisations/facture.html', request)
def del_paiement(request):
@@ -117,7 +147,7 @@ def del_paiement(request):
messages.success(request, "Le moyen de paiement a été supprimé")
except ProtectedError:
messages.error(request, "Le moyen de paiement %s est affecté à au moins une facture, vous ne pouvez pas le supprimer" % paiement_del)
- return redirect("/cotisations/")
+ return redirect("/cotisations/index_paiement/")
return form({'factureform': paiement}, 'cotisations/facture.html', request)
def add_banque(request):
@@ -125,7 +155,20 @@ def add_banque(request):
if banque.is_valid():
banque.save()
messages.success(request, "La banque a été ajoutée")
- return redirect("/cotisations/")
+ return redirect("/cotisations/index_banque/")
+ return form({'factureform': banque}, 'cotisations/facture.html', request)
+
+def edit_banque(request, banqueid):
+ try:
+ banque_instance = Article.objects.get(pk=banqueid)
+ except Banque.DoesNotExist:
+ messages.error(request, u"Entrée inexistante" )
+ return redirect("/cotisations/index_banque/")
+ banque = BanqueForm(request.POST or None, instance=banque_instance)
+ if banque.is_valid():
+ banque.save()
+ messages.success(request, "Banque modifiée")
+ return redirect("/cotisations/index_banque/")
return form({'factureform': banque}, 'cotisations/facture.html', request)
def del_banque(request):
@@ -138,9 +181,21 @@ def del_banque(request):
messages.success(request, "La banque a été supprimée")
except ProtectedError:
messages.error(request, "La banque %s est affectée à au moins une facture, vous ne pouvez pas la supprimer" % banque_del)
- return redirect("/cotisations/")
+ return redirect("/cotisations/index_banque/")
return form({'factureform': banque}, 'cotisations/facture.html', request)
+def index_article(request):
+ article_list = Article.objects.order_by('name')
+ return render(request, 'cotisations/index_article.html', {'article_list':article_list})
+
+def index_paiement(request):
+ paiement_list = Paiement.objects.order_by('moyen')
+ return render(request, 'cotisations/index_paiement.html', {'paiement_list':paiement_list})
+
+def index_banque(request):
+ banque_list = Banque.objects.order_by('name')
+ return render(request, 'cotisations/index_banque.html', {'banque_list':banque_list})
+
def index(request):
facture_list = Facture.objects.order_by('date').reverse()
return render(request, 'cotisations/index.html', {'facture_list': facture_list})