From ccfd4b9d7ee05f571c7b8a4506805f8d6160ce9c Mon Sep 17 00:00:00 2001 From: Dmitriy Shesterkin Date: Sun, 9 Jul 2017 18:24:29 +0300 Subject: [PATCH] add act template in pdf for license --- src/commons/utils.py | 39 ++++++++++++++++ src/customer/models.py | 7 ++- src/customer/urls.py | 12 ++++- src/customer/views/documents.py | 82 ++++++++++++++++++++++----------- 4 files changed, 108 insertions(+), 32 deletions(-) diff --git a/src/commons/utils.py b/src/commons/utils.py index 35eaef2..e64eee4 100644 --- a/src/commons/utils.py +++ b/src/commons/utils.py @@ -32,3 +32,42 @@ def get_site_url(request=None): return f'{request.scheme}://{request.get_host()}' else: return settings.SITE_URL + + +def get_owner_data(): + + data = { + 'is_org': True, + 'get_company_name': settings.OWNER['NAME'], + 'address': settings.OWNER['ADDRESS'], + 'phone': settings.OWNER['PHONE'], + 'get_full_phone': settings.OWNER['PHONE'], + 'inn': settings.OWNER['INN'], + 'kpp': settings.OWNER['KPP'], + 'get_boss_fio': settings.OWNER['BOSS'], + 'get_boss_title': settings.OWNER['POSITION_BOSS'], + 'get_glavbuh_fio': settings.OWNER['GB'], + 'boss_sign': { + 'path': settings.OWNER['SIGN_BOSS'] + }, + 'glavbuh_sign': { + 'path': settings.OWNER['SIGN_GB'] + }, + 'stamp': { + 'path': settings.OWNER['STAMP'] + } + } + + return data + + +def get_owner_bank(): + + data = { + 'name': settings.OWNER['BANK'], + 'account': settings.OWNER['BANK_ACC'], + 'korr_account': settings.OWNER['CORR_ACC'], + 'bik': settings.OWNER['BIK'] + } + + return data diff --git a/src/customer/models.py b/src/customer/models.py index d82f46e..8c4edbd 100644 --- a/src/customer/models.py +++ b/src/customer/models.py @@ -598,7 +598,7 @@ class License(models.Model): if self.payform == 0: url = reverse( - 'customer_license_get_payment_account', + 'get_payment_account', kwargs={'order_num': self.id} ) return f'Оплата безналичным платежом' @@ -607,7 +607,10 @@ class License(models.Model): return f'Оплата банковской картой' elif self.status in [1, 2]: - url = '#' + url = reverse( + 'get_certificate_of_completion', + kwargs={'order_num': self.id} + ) cost_str = f'{self.pay_sum} ' \ f'{numeral.choose_plural(self.pay_sum, "рубль, рубля, рублей")}' return f'Скачать акт № {self.id} на {cost_str}' diff --git a/src/customer/urls.py b/src/customer/urls.py index 7f64136..53a5f0d 100644 --- a/src/customer/urls.py +++ b/src/customer/urls.py @@ -21,8 +21,16 @@ urlpatterns = [ # url(r'^get_doc/(?P\d+)/$', documents.get_doc, # name='customer_license_get_doc'), - url(r'^get_payment_account/(?P\d+)/$', documents.create_payment_account, - name='customer_license_get_payment_account'), + url( + r'^get_payment_account/(?P\d+)/$', + documents.create_payment_account, + name='get_payment_account' + ), + url( + r'^get_certificate_of_completion/(?P\d+)/$', + documents.create_certificate_of_completion, + name='get_certificate_of_completion' + ), # for delete # url(r'^payment/result/$', license.payment_result, name='yamoney_result'), # url(r'^payment/success/$', license.payment_success, name='yamoney_success'), diff --git a/src/customer/views/documents.py b/src/customer/views/documents.py index 3447402..8cdf4bd 100644 --- a/src/customer/views/documents.py +++ b/src/customer/views/documents.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -from django.conf import settings from django.http import HttpResponseForbidden, HttpResponse from commons.pdf_tools import render_pdf_to_string +from commons.utils import get_owner_data, get_owner_bank from customer.models import License from customer.utils import raise_if_no_profile @@ -19,39 +19,14 @@ def create_payment_account(request, order_num=None): response = HttpResponse(content_type='application/pdf') - profile = { - 'is_org': True, - 'get_company_name': settings.OWNER['NAME'], - 'address': settings.OWNER['ADDRESS'], - 'phone': settings.OWNER['PHONE'], - 'get_full_phone': settings.OWNER['PHONE'], - 'inn': settings.OWNER['INN'], - 'kpp': settings.OWNER['KPP'], - 'get_boss_fio': settings.OWNER['BOSS'], - 'get_boss_title': settings.OWNER['POSITION_BOSS'], - 'get_glavbuh_fio': settings.OWNER['GB'], - 'boss_sign': { - 'path': settings.OWNER['SIGN_BOSS'] - }, - 'glavbuh_sign': { - 'path': settings.OWNER['SIGN_GB'] - }, - 'stamp': { - 'path': settings.OWNER['STAMP'] - } - } + profile = get_owner_data() if pay_form == 0: response['Content-Disposition'] = \ f'attachment; filename="Schet_{order_num}_Dokumentor-ru.pdf"' obj = { - 'bank_account': { - 'name': settings.OWNER['BANK'], - 'account': settings.OWNER['BANK_ACC'], - 'korr_account': settings.OWNER['CORR_ACC'], - 'bik': settings.OWNER['BIK'] - }, + 'bank_account': get_owner_bank(), 'client': { 'name': customer.get_company_name(), 'get_inn_and_kpp': customer.get_inn_and_kpp(), @@ -85,3 +60,54 @@ def create_payment_account(request, order_num=None): pdf = render_pdf_to_string(request, 'docs/invoice/as_pdf.html', dictionary) response.write(pdf) return response + + +def create_certificate_of_completion(request, order_num=None): + if not request.user.is_authenticated(): + raise HttpResponseForbidden + + raise_if_no_profile(request) + + lic = License.objects.get(pk=order_num) + customer = request.user.profile + + profile = get_owner_data() + response = HttpResponse(content_type='application/pdf') + response['Content-Disposition'] = f'attachment; filename="Akt_{order_num}_Dokumentor-ru.pdf"' + + obj = { + 'bank_account': get_owner_bank(), + 'client': { + 'name': customer.get_company_name(), + 'get_inn_and_kpp': customer.get_inn_and_kpp(), + 'address': customer.address, + 'contact_phone': customer.get_full_phone() + }, + 'doc_num': order_num, + 'doc_date': lic.order_date, + 'total_price': lic.pay_sum, + 'sum_total_nds': 0, + 'nds_itogo_text': 'Без налога (НДС)', + 'sum_total_price': lic.pay_sum, + 'sum_full_total_price': lic.pay_sum + } + + obj_items = [{ + 'name': f'Лицензия на ПО Dokumentor на {lic.get_term()}', + 'units': 'услуги', + 'qty': 1, + 'price': lic.pay_sum, + 'total_price': lic.pay_sum + }] + + dictionary = { + 'obj': obj, + 'doc_sign': True, + 'obj_items': obj_items, + 'profile': profile, + } + + pdf = render_pdf_to_string(request, 'docs/aktrabot/as_pdf.html', dictionary) + response.write(pdf) + + return response