Update project

This commit is contained in:
Gregory Trullemans 2024-06-11 10:05:50 +02:00
parent 9ba5868b88
commit 7cecdad32c
30 changed files with 47 additions and 50 deletions

View File

@ -29,7 +29,7 @@ Commande à taper :
python manage.py importcsv -b nom_de_la_banque -f path_du_fichier_csv python manage.py importcsv -b nom_de_la_banque -f path_du_fichier_csv
Le fichier importer DOIT être un `.csv`. Le fichier importer DOIT être un `.csv` et dois être push sur Heroku.
Egalement possible de le faire sur heroku via la commandes suivantes : Egalement possible de le faire sur heroku via la commandes suivantes :
heroku login heroku login

View File

@ -1,5 +1,11 @@
from django.contrib import admin from django.contrib import admin
from django_admin_listfilter_dropdown.filters import (
DropdownFilter,
ChoiceDropdownFilter,
RelatedDropdownFilter,
)
from .models import ( from .models import (
Client, Client,
Contract, Contract,
@ -7,6 +13,7 @@ from .models import (
) )
@admin.register(Client)
class ClientAdmin(admin.ModelAdmin): class ClientAdmin(admin.ModelAdmin):
model = Client model = Client
@ -14,6 +21,7 @@ class ClientAdmin(admin.ModelAdmin):
search_fields = ("name", "adress", "city") search_fields = ("name", "adress", "city")
@admin.register(Contract)
class ContractAdmin(admin.ModelAdmin): class ContractAdmin(admin.ModelAdmin):
model = Contract model = Contract
@ -22,13 +30,12 @@ class ContractAdmin(admin.ModelAdmin):
list_filter = ("is_finished",) # 'date__year', list_filter = ("is_finished",) # 'date__year',
@admin.register(Prestation)
class PrestationAdmin(admin.ModelAdmin): class PrestationAdmin(admin.ModelAdmin):
model = Prestation model = Prestation
list_display = ("date", "label", "total_amount", "contract") list_display = ("date", "label", "total_amount", "contract")
search_fields = ("label",) search_fields = ("label", "contract__title")
list_filter = (
("contract", RelatedDropdownFilter),
admin.site.register(Client, ClientAdmin) )
admin.site.register(Contract, ContractAdmin)
admin.site.register(Prestation, PrestationAdmin)

View File

@ -39,20 +39,25 @@ class ContractForm(forms.ModelForm):
class Meta: class Meta:
model = Contract model = Contract
fields = ("title", "client", "advance", "reference", "is_finished", "is_paid", "description") fields = ("title", "client", "advance", "reference", "is_finished", "is_paid", "description")
client = forms.ModelChoiceField(queryset=Contract.objects.all())
widgets = { widgets = {
"title": forms.TextInput( "title": forms.TextInput(
attrs={"class": "form-control", "placeholder": "Titre de la facture"} attrs={"class": "form-control", "placeholder": "Titre du contrat"}
), ),
"client": ModelSelect2Widget( "client": forms.Select(
search_fields=["title__icontains", "contact__icontains", "city__icontains"], attrs={
max_results=10, "class": "form-control"
attrs={"data-minimum-input-length": 0, "class": "form-control"}, },
), ),
"advance": forms.TextInput( "advance": forms.TextInput(
attrs={"class": "form-control", } attrs={"class": "form-control", }
), ),
"reference": forms.TextInput( "reference": forms.TextInput(
attrs={"class": "form-control", } attrs={
"class": "form-control",
"placeholder": date.today().strftime("%Y-%m") + "-00x",
"value": date.today().strftime("%Y-%m") + "-00x",
}
), ),
"is_finished": forms.CheckboxInput( "is_finished": forms.CheckboxInput(
attrs={"class": "form-control", } attrs={"class": "form-control", }

View File

@ -16,7 +16,7 @@
<form action="{% if client_id %}{% url 'client_update' client_id %}{% else %}{% url 'client_create' %}{% endif %}" method="post" class="form-horizontal" id="formulaire" name="formulaire"> <form action="{% if client_id %}{% url 'client_update' client_id %}{% else %}{% url 'client_create' %}{% endif %}" method="post" class="form-horizontal" id="formulaire" name="formulaire">
{% csrf_token %} {% csrf_token %}
<div class="form-group row "> <div class="form-group row ">
<label for="id_date" class="col-4 col-sm-2 col-md-2 col-lg-2 col-xl-2 control-label">Nom</label> <label for="id_date" class="col-4 col-sm-2 col-md-2 col-lg-2 col-xl-2 control-label">Nom<span class="text-danger">*</span></label>
<div class="col-12 col-sm-10 col-md-8 col-lg-8 col-xl-8 {% if form.name.errors %}has-danger{% endif %}"> <div class="col-12 col-sm-10 col-md-8 col-lg-8 col-xl-8 {% if form.name.errors %}has-danger{% endif %}">
{{ form.name }} {{ form.name }}
{% if form.name.errors %}<span class="btn btn-sm btn-danger-outline">{% for error in form.name.errors %}{{error}}{% endfor %}</span>{% endif %} {% if form.name.errors %}<span class="btn btn-sm btn-danger-outline">{% for error in form.name.errors %}{{error}}{% endfor %}</span>{% endif %}

View File

@ -49,7 +49,7 @@ def client_listing(request):
""" Récupère la liste de tous les clients. """ """ Récupère la liste de tous les clients. """
client_list = Client.objects.all() client_list = Client.objects.all()
context = {"client_list": client_list} context = {"client_list": client_list}
return render(request, "billing/clients/listing.html", context) return render(request, "clients/listing.html", context)
@login_required @login_required
@ -62,7 +62,7 @@ def client_details(request, client_id=None):
""" """
client = get_object_or_404(Client, pk=client_id) client = get_object_or_404(Client, pk=client_id)
context = {"client": client} context = {"client": client}
return render(request, "billing/clients/details.html", context) return render(request, "clients/details.html", context)
@login_required @login_required
@ -90,7 +90,7 @@ def client_create_or_update(request, client_id=None):
form = ClientForm(instance=client) form = ClientForm(instance=client)
context = {"form": form, "client_id": client_id} context = {"form": form, "client_id": client_id}
return render(request, "billing/clients/create.html", context) return render(request, "clients/create.html", context)
@login_required @login_required
@ -99,7 +99,7 @@ def contract_listing(request):
""" Récupère la liste de tous les contrats. """ """ Récupère la liste de tous les contrats. """
contract_list = Contract.objects.all() contract_list = Contract.objects.all()
context = {"contract_list": contract_list} context = {"contract_list": contract_list}
return render(request, "billing/contracts/listing.html", context) return render(request, "contracts/listing.html", context)
@login_required @login_required
@ -125,7 +125,7 @@ def contract_detail(request, contract_id):
"prestation_count": prestation_count, "prestation_count": prestation_count,
"total": total, "total": total,
} }
return render(request, "billing/contracts/details.html", context) return render(request, "contracts/details.html", context)
@login_required @login_required
@ -153,7 +153,7 @@ def contract_create_or_update(request, contract_id=None):
form = ContractForm(instance=contract) form = ContractForm(instance=contract)
context = {"form": form, "contract_id": contract_id} context = {"form": form, "contract_id": contract_id}
return render(request, "billing/contracts/create.html", context) return render(request, "contracts/create.html", context)
@login_required @login_required
@ -206,7 +206,7 @@ def prestation_create_or_update(request, prestation_id=None):
form = PrestationForm(instance=prestation) form = PrestationForm(instance=prestation)
context = {"form": form, "prestation_id": prestation_id} context = {"form": form, "prestation_id": prestation_id}
return render(request, "billing/prestations/create.html", context) return render(request, "prestations/create.html", context)
@login_required @login_required

View File

@ -47,10 +47,12 @@ INSTALLED_APPS = [
"django.contrib.messages", "django.contrib.messages",
"django.contrib.staticfiles", "django.contrib.staticfiles",
"comptabilite.apps.ComptabiliteConfig", "comptabilite.apps.ComptabiliteConfig",
"core.apps.CoreConfig",
"eventCompta.apps.ManagementConfig", "eventCompta.apps.ManagementConfig",
"billing.apps.BillingConfig", "billing.apps.BillingConfig",
"django.contrib.humanize", "django.contrib.humanize",
"django_select2", "django_select2",
"django_admin_listfilter_dropdown",
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@ -343,7 +343,7 @@ def year_listing(request):
year_list.append((year.year, Transaction.objects.by_year(year.year).count(),)) year_list.append((year.year, Transaction.objects.by_year(year.year).count(),))
context = {"year_list": year_list} context = {"year_list": year_list}
return render(request, "comptability/year_listing.html", context) return render(request, "year_listing.html", context)
@login_required @login_required
@ -390,7 +390,7 @@ def transaction_listing_for_year_and_type(
"total_simulated": total_simulated, "total_simulated": total_simulated,
"total": total, "total": total,
} }
return render(request, "comptability/transactions/listing.html", context) return render(request, "transactions/listing.html", context)
@login_required @login_required
@ -402,7 +402,7 @@ def transaction_details(request, transaction_id):
transaction = Transaction.objects.get(pk=transaction_id) transaction = Transaction.objects.get(pk=transaction_id)
context = {"event": transaction.event, "transaction": transaction} context = {"event": transaction.event, "transaction": transaction}
# changed template # changed template
return render(request, "comptability/transactions/details.html", context) return render(request, "transactions/details.html", context)
@login_required @login_required
@ -430,4 +430,4 @@ def transaction_create_or_update(request, transaction_id=None):
form = TransactionForm(instance=transaction) form = TransactionForm(instance=transaction)
context = {"form": form, "transaction_id": transaction_id} context = {"form": form, "transaction_id": transaction_id}
return render(request, "comptability/transactions/create.html", context) return render(request, "transactions/create.html", context)

7
core/apps.py Normal file
View File

@ -0,0 +1,7 @@
from django.apps import AppConfig
class CoreConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = "core"
verbose_name = "Core"

View File

@ -47,7 +47,7 @@
</div> </div>
</div> </div>
{% if message %} {% if message %}
<p class="text-danger"><b>{{message}}</b></p> <p class="text-danger"><b>{{ message }}</b></p>
{% endif %} {% endif %}
<div class="form-group"> <div class="form-group">
<div class="col-lg-6 col-lg-offset-3"> <div class="col-lg-6 col-lg-offset-3">
@ -68,34 +68,10 @@
<script src="{% static "js/highcharts/highcharts.js" %}"></script> <script src="{% static "js/highcharts/highcharts.js" %}"></script>
<script src="{% static "js/highcharts/exporting.js" %}"></script> <script src="{% static "js/highcharts/exporting.js" %}"></script>
<script src="{% static "js/highcharts/dark-unica.js" %}"></script> <script src="{% static "js/highcharts/dark-unica.js" %}"></script>
<!-- <script src="{% static "js/tablesort.js" %}"></script> -->
<!-- <link href="{% static "css/theme.default.min.css" %}" rel="stylesheet"> -->
<script src="{% static "js/jquery.tablesorter.js" %}"></script> <script src="{% static "js/jquery.tablesorter.js" %}"></script>
<script src="{% static "js/jquery.tablesorter.widgets.js" %}"></script> <script src="{% static "js/jquery.tablesorter.widgets.js" %}"></script>
<script src="{% static "js/jqueryui/jquery-ui.min.js" %}"></script> <script src="{% static "js/jqueryui/jquery-ui.min.js" %}"></script>
{% block extra_script %}{% endblock %} {% block extra_script %}{% endblock %}
<script type="text/javascript">
$(document).ready(function() {
Highcharts.setOptions({
lang: {
months: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
shortMonths: [ "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec"],
weekdays: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
decimalPoint: ",",
thousandsSep: ".",
downloadJPEG: "Telecharger en JPEG",
downloadPDF: "Telecharger en PDF",
downloadPNG: "Telecharger en PNG",
downloadSVG: "Telecharger en SVG",
printChart: "Imprimer",
resetZoom: "Rétablir",
resetZoomTitle: "Rétablir",
loading: "Chargement…",
noData: "Pas de données disponibles."
}
});
});
</script>
<section id="main" class="container">{% block content %}{% endblock %}</section> <section id="main" class="container">{% block content %}{% endblock %}</section>