From 571cffaf0ed8337c842658fdc1c02533d29bac89 Mon Sep 17 00:00:00 2001 From: "holger.trampe" Date: Mon, 18 Jan 2021 20:10:47 +0100 Subject: [PATCH] =?UTF-8?q?Erstellen=20von=20eigenen=20Rechnungen=20in=20d?= =?UTF-8?q?er=20Adminoberfl=C3=A4che?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adm/forms.py | 13 ++ adm/templates/adm/adm_addbill.html | 42 ++++ adm/templates/adm/adm_bills.html | 6 +- adm/urls.py | 3 +- adm/views.py | 186 ++++++++++++++++++ .../__pycache__/settings.cpython-38.pyc | Bin 4787 -> 4787 bytes dump.rdb | Bin 28719 -> 62058 bytes users/views.py | 60 +++--- 8 files changed, 277 insertions(+), 33 deletions(-) create mode 100644 adm/forms.py create mode 100644 adm/templates/adm/adm_addbill.html diff --git a/adm/forms.py b/adm/forms.py new file mode 100644 index 0000000..55b6422 --- /dev/null +++ b/adm/forms.py @@ -0,0 +1,13 @@ +from django import forms +from django.forms import ModelForm +from users.models import AgencyBills + +class AgencyBillForm(forms.ModelForm): + + class Meta: + model = AgencyBills + fields = ['agency', 'start'] + labels = { + 'agency' : "Agentur", + 'start' : "Leistungszeitraum Start", + } diff --git a/adm/templates/adm/adm_addbill.html b/adm/templates/adm/adm_addbill.html new file mode 100644 index 0000000..7d291f4 --- /dev/null +++ b/adm/templates/adm/adm_addbill.html @@ -0,0 +1,42 @@ +{% extends "adm/adm_base.html" %} +{% block content %} +{% load adm_tags %} +{% load mathfilters %} +{% load crispy_forms_tags %} +{% load humanize %} +{% load counter_tag %} +
+

Rechnung manuell erstellen

+
+Achtung! Sie sind in Begriff, eine Rechnung manuell zu erstellen! Achten Sie auf die korrekte Agentur sowie Start- und Endtermin! Prüfen Sie vor Anlagen Ihre Eingaben! +
+ +
+ {% csrf_token %} + {{form.media}} + {{form|crispy}} + +
+ + +
+ +
+ Abbrechen + + + + +{% endblock content %} diff --git a/adm/templates/adm/adm_bills.html b/adm/templates/adm/adm_bills.html index ef12bb2..6afd416 100644 --- a/adm/templates/adm/adm_bills.html +++ b/adm/templates/adm/adm_bills.html @@ -5,7 +5,11 @@ {% load humanize %} {% load counter_tag %}
-

Rechungsübersicht

+

Rechungsübersicht + +  Rechnung + +


diff --git a/adm/urls.py b/adm/urls.py index d633db6..5fcaf1e 100644 --- a/adm/urls.py +++ b/adm/urls.py @@ -16,5 +16,6 @@ urlpatterns = [ path('ag/bills/', AdmBills.as_view(), name="adm-bills"), path('usersingle/', AdmUserSingle.as_view(), name="adm-user-single"), path('cron/', statisticCronJob, name="adm-cron"), - path('getorders/', getCSVRDOrders, name="getorders") + path('getorders/', getCSVRDOrders, name="getorders"), + path('adm/addbill', AdmAddBill.as_view(), name="admbill-add") ] diff --git a/adm/views.py b/adm/views.py index 7187342..e459bae 100644 --- a/adm/views.py +++ b/adm/views.py @@ -15,6 +15,17 @@ from datetime import date, datetime import json from users.models import UserYearAbsenceInfo, UserTime from timemanagement.models import Workday, Absence +from .forms import AgencyBillForm +from datetime import date, timedelta + +from django.core.mail import EmailMessage +from django.core.mail import EmailMultiAlternatives +import io as BytesIO +import base64 +from django.http import HttpResponse +from dateutil.relativedelta import * +import requests +from django.template.loader import render_to_string ''' Prüfung, ob angemeldeter User Mitarbeiterstatus hat. IMMER PER DISPATCH EINBAUEN! ''' @@ -121,6 +132,181 @@ class AdmBills(TemplateView): return context +''' +Erstellen einer neuen Rechnung +''' +class AdmAddBill(CreateView): + template_name = "adm/adm_addbill.html" + model = AgencyBills + success_url = reverse_lazy('adm-bills') + form_class = AgencyBillForm + + def dispatch(self, *args, **kwargs): + if(checkForStuffUser(self.request)): + return super().dispatch(*args, **kwargs) + else: + messages.warning(self.request, f'Sie benötigen einen Mitarbeiter-Account, um diese Seiten aufzurufen!') + return redirect("login") + + def form_valid(self, form): + + today = date.today() + + agency = form.cleaned_data['agency'] + + # USERCOUNT BERECHNEN + usercount = len(User.objects.filter(profile__agency=agency)) + + if(usercount < 4): + usercount = 0 + else: + usercount = usercount - 3 + + # HEADERS CURL + headers = { + 'Authorization': 'Bearer ' + settings.LEX_API, + 'Content-Type': 'application/json', + 'Accept': 'application/json', + } + + plan = 1 + + start_date = form.cleaned_data["start"] + start_date_string = start_date.strftime("%d.%m.%Y") + end_date = start_date + relativedelta(days=30) + end_date_string= end_date.strftime("%d.%m.%Y") + + # Rechnungsdatum passt ja + voucher_date_today = date.today().strftime("%Y-%m-%d") + + monthword = "Monat" + + lexdata = { + "voucherDate": voucher_date_today + "T00:00:00.000+00:00", + "address" : { + "name" : agency.name, + "street": agency.street, + "zip": agency.plz, + "city": agency.city, + "countryCode" : "DE" + }, + "totalPrice" : { + "currency" : "EUR", + }, + "lineItems" : [ + { + "type" : "custom", + "name" : "Digitale Agentur: Grundbetrag für " + str(plan) + " " + monthword, + "quantity" : 1, + "unitName" : "Stück", + "description" : "Zeitraum " + start_date_string + " - " + end_date_string, + "unitPrice" : + { + "currency" : "EUR", + "netAmount" : 21.00, + "taxRatePercentage" : 19 + }, + }, + { + "type" : "custom", + "name" : "Digitale Agentur: Zusätzliche Nutzer", + "description" : "Zeitraum " + start_date_string + " - " + end_date_string, + "quantity" : usercount, + "unitName" : "Stück", + "unitPrice" : + { + "currency" : "EUR", + "netAmount" : 3, + "taxRatePercentage" : 19 + }, + } + ], + "taxConditions": { + "taxType": "net" + }, + #"paymentConditions": { + # "paymentTermLabel": "Bitte zahlen Sie innerhalb von 14 Tagen.", + # "paymentTermDuration": 14, + #}, + "shippingConditions": { + #"shippingDate": voucher_date_today + "T00:00:00.000+00:00", + "shippingType": "none" + } + } + json_data = json.dumps(lexdata) + # WIEDER RAUSNEHMEN + # NEUE RECHNUNG ALs ENTWURF + + #r = requests.post("https://api.lexoffice.io/v1/invoices/", data=json_data, headers=headers) + # RICHTIGE RECHNUNG + r = requests.post("https://api.lexoffice.io/v1/invoices/?finalize=true", data=json_data, headers=headers) + + if(r.status_code == 201): + + response_text = json.loads(r.text) + newbill_id = response_text["id"] + + # OrganizationId berechnen, wenn noch nicht gesetzt + r = requests.get("https://api.lexoffice.io/v1/invoices/" + response_text["id"], data=json_data, headers=headers) + response_text = json.loads(r.text) + + newbill = AgencyBills(agency=agency, lexid=newbill_id, billtype="invoice", billnumber=response_text["voucherNumber"], billstatus=response_text["voucherStatus"], start=start_date, end=end_date, plan=plan, usercount=usercount) + newbill.save() + + mail_to_send = "" + if(agency.payment_address == None): + mail_to_send = agency.agency_email + else: + mail_to_send = agency.payment_address + + + + # BCC Mail with Object - NICHT DEN IMPORT VERGESSEN!!! + email = EmailMultiAlternatives( + 'Digitale Agentur | Rechnung ' + str(response_text["voucherNumber"]), + 'Sehr geehrte Nutzer, hiermit erhalten Sie eine neue Rechnung für die Digitale Agentur. Ihr Team der Digitalen Agentur', + 'noreply@digitale-agentur.com', + [mail_to_send], + ['info@digitale-agentur.com'], + headers={}, + ) + + headers = { + 'Authorization': 'Bearer ' + settings.LEX_API, + 'Content-Type': 'application/json', + 'Accept': 'application/json', + } + + lexdata = { + "renderType" : "pdf" + } + + json_data = json.dumps(lexdata) + + r_final = requests.get("https://api.lexoffice.io/v1/invoices/"+newbill_id+"/document", data=json_data, headers=headers) + json.loads(r_final.text) + + base64String = requests.get("https://api.lexoffice.io/v1/files/"+json.loads(r_final.text)["documentFileId"]+"/", data=json_data, headers=headers) + + content = base64.b64decode(base64String.text) + + msg_html = render_to_string('users/newbill_mail.html', {}) + email.attach_alternative(msg_html, "text/html") + email.attach('Rechnung_' + str(response_text["voucherNumber"]) + '.pdf', content, "application/pdf") + email.send() + + return super(AdmAddBill, self).form_valid(form) + + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + context.update({'active_link' : "adm-agencys"}) + + #context.update({'agencys' : Agency.objects.all()}) + + return context + ''' Gesamtansicht der Agenturen diff --git a/digitaleagentur/__pycache__/settings.cpython-38.pyc b/digitaleagentur/__pycache__/settings.cpython-38.pyc index e4934a87a0f0dd818e28e211d5dc486f2b2fe124..af75947033082b8adead9a8e3449bb0e0c54e640 100644 GIT binary patch delta 20 acmdn2x>=Pwl$V!_0SKh;vTo#FAp`(1rv#_~ delta 20 acmdn2x>=Pwl$V!_0SMxQSvGR75CQ-&LIhy| diff --git a/dump.rdb b/dump.rdb index fbe4324993f069052434a44bed7c79e05546022e..46ac46e91129a80a2400deb846c6655a65ce7bdc 100644 GIT binary patch literal 62058 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 z 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