From 80d1b6534e522c7aec1735cc438d9e25fa9dbe34 Mon Sep 17 00:00:00 2001 From: Eric Gourlaouen Date: Sun, 21 Aug 2016 01:33:32 +0200 Subject: [PATCH] added check and receipts excel generation --- core/services/excel_generation.py | 43 +++++++++++++++++++++++++++++++ facture/views.py | 28 +++++++++++++++++++- picsous/urls.py | 2 ++ requirements.txt | 1 + 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 core/services/excel_generation.py diff --git a/core/services/excel_generation.py b/core/services/excel_generation.py new file mode 100644 index 0000000..9cd5d47 --- /dev/null +++ b/core/services/excel_generation.py @@ -0,0 +1,43 @@ +# coding: utf8 + +from facture import models as facture_models + +def generate_checks_xls(worksheet): + qs = list(facture_models.Cheque.objects.all().order_by('num').prefetch_related('facturerecue')) + for n, val in enumerate(["Référence", "Destinataire", "Valeur", "Etat", "Numéro de facture", + "Destinataire de la facture"]): + worksheet.write(0, n, val) + for num, cheque in enumerate(qs): + for n, val in enumerate([cheque.num, cheque.destinataire, cheque.valeur, cheque.get_state_display()]): + worksheet.write(num+1, n, val) + if cheque.facturerecue: + worksheet.write(num+1, 4, cheque.facturerecue_id) + worksheet.write(num+1, 5, cheque.facturerecue.nom_entreprise) + else: + worksheet.write(num+1, 4, "--") + worksheet.write(num+1, 5, "--") + return worksheet + +def generate_receipts_xls(worksheet): + qs = list(facture_models.FactureRecue.objects.all().order_by('date').prefetch_related('perm') + .prefetch_related('categorie')) + for n, val in enumerate(["Référence", "Entreprise", "Date", "Date de paiement", "Prix TTC", "TVA", "Etat", + "Personne à rembourser", "Date de remboursement", "Nom de la perm", "Date de la perm", + "Période de la perm", "Responsable de la perm"]): + worksheet.write(0, n, val) + for num, facture in enumerate(qs): + for n, val in enumerate([facture.categorie.code + str(facture.id) if facture.categorie else facture.id, + facture.nom_entreprise, facture.date, facture.date_paiement, facture.prix, + facture.get_total_taxes(), facture.get_etat_display(), + facture.personne_a_rembourser or "", facture.date_remboursement or ""]): + worksheet.write(num+1, n, val) + if facture.perm: + worksheet.write(num+1, 9, facture.perm.nom) + worksheet.write(num + 1, 10, facture.perm.date) + worksheet.write(num + 1, 11, facture.perm.get_periode_display()) + worksheet.write(num + 1, 12, facture.perm.nom_resp + " - " + facture.perm.mail_resp) + else: + for i in range(9, 13): + worksheet.write(num+1, i, "--") + return worksheet + diff --git a/facture/views.py b/facture/views.py index 1171d89..9b0fa54 100644 --- a/facture/views.py +++ b/facture/views.py @@ -2,18 +2,20 @@ from sets import Set +from django.http import HttpResponse from django.shortcuts import render from rest_framework import viewsets from rest_framework.decorators import api_view, permission_classes, renderer_classes from rest_framework.renderers import JSONRenderer from rest_framework.response import Response +import xlwt from picsous.permissions import IsAdmin, IsAuthorizedUser from picsous.settings import NEMOPAY_FUNDATION_ID from core import models as core_models from core import viewsets as core_viewsets -from core.services import payutc +from core.services import payutc, excel_generation from facture import models as facture_models from facture import serializers as facture_serializers @@ -107,3 +109,27 @@ def tva_info(request, id): return Response({'tva_deductible': tva_deductible, 'tva_a_declarer': tva_a_declarer, 'tva_a_declarer_total': sum(tva['montant'] for tva in tva_a_declarer)}) + +def excel_check_generation(request): + # Vue permettant de générer un fichier excel avec la liste des chèques, et des factures associées + response = HttpResponse(content_type='application/vnd.ms-excel; charset=utf-8') + response['Content-Disposition'] = 'attachment; filename="Picasso_cheques.xls"' + + writer = xlwt.Workbook(encoding="utf-8") + ws = writer.add_sheet('Chèques') + excel_dump = excel_generation.generate_checks_xls(ws) + writer.save(response) + return response + +def excel_facture_generation(request): + # Vue permettant de générer un fichier excel avec la liste des factures, et des perms associées + response = HttpResponse(content_type='application/vnd.ms-excel; charset=utf-8') + response['Content-Disposition'] = 'attachment; filename="Picasso_factures_recues.xls"' + + writer = xlwt.Workbook(encoding="utf-8") + ws = writer.add_sheet('Factures reçues') + excel_dump = excel_generation.generate_receipts_xls(ws) + writer.save(response) + return response + + diff --git a/picsous/urls.py b/picsous/urls.py index b5d5450..ae6b6d1 100644 --- a/picsous/urls.py +++ b/picsous/urls.py @@ -33,6 +33,8 @@ url(r'^facture/(?P\d+)$', facture_views.facture), url(r'^tvainfo/(?P\d+)$', facture_views.tva_info), + url(r'^generate/cheques$', facture_views.excel_check_generation), + url(r'^generate/factures$', facture_views.excel_facture_generation), url(r'^convention/(?P\d+)$', perm_views.convention_partenariat), url(r'^createpayutcarticle/(?P\d+)/$', perm_views.create_payutc_article), diff --git a/requirements.txt b/requirements.txt index 8b2a9c5..104ebb6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ django-cors-headers django-extensions djangorestframework requests +xlwt==1.1.2