parent
cad014d17c
commit
b7f6244b34
14 changed files with 117 additions and 116 deletions
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 79 KiB |
@ -1,109 +1,87 @@ |
||||
# -*- coding: utf-8 -*- |
||||
import os |
||||
import re |
||||
|
||||
from django.conf import settings |
||||
from django.http import Http404, HttpResponseForbidden, HttpResponse |
||||
|
||||
from xlwt import easyxf |
||||
from xlrd import open_workbook |
||||
from xlutils.copy import copy |
||||
from pytils.numeral import rubles |
||||
from django.http import HttpResponseForbidden, HttpResponse |
||||
|
||||
from commons.pdf_tools import render_pdf_to_string |
||||
from customer.models import License |
||||
from customer.utils import raise_if_no_profile |
||||
|
||||
|
||||
XLS_ROOT = os.path.join(settings.TEMPLATES[0]['DIRS'][0], 'xls') |
||||
|
||||
|
||||
def get_doc(request, order_num=None): |
||||
def create_payment_account(request, order_num=None): |
||||
if not request.user.is_authenticated(): |
||||
raise HttpResponseForbidden |
||||
|
||||
raise_if_no_profile(request) |
||||
|
||||
license = License.objects.get(pk=order_num) |
||||
pm = license.payform |
||||
data = request.user.profile |
||||
if pm == 0: |
||||
tmp_name = 'bill.xls' |
||||
file_name = f"Invoice No.{order_num}.xls" |
||||
elif pm == 2: |
||||
tmp_name = '4pd.xls' |
||||
file_name = f"Kvitanciya na oplatu zakaza No.{order_num}.xls" |
||||
else: |
||||
raise Http404() |
||||
|
||||
response = HttpResponse(content_type="application/vnd.ms-excel") |
||||
response['Content-Disposition'] = f'attachment; filename={file_name}' |
||||
|
||||
rb = open_workbook(os.path.join(XLS_ROOT, tmp_name), on_demand=True, formatting_info=True) |
||||
wb = copy(rb) |
||||
ws = wb.get_sheet(0) |
||||
|
||||
# отключить колонтитулы |
||||
ws.show_headers = 0 |
||||
ws.print_headers = 0 |
||||
ws.header_str = b'' |
||||
ws.footer_str = b'' |
||||
|
||||
# заполняем счет |
||||
if pm == 0: |
||||
style0 = easyxf('font: name Times New Roman, height 280, bold True;') |
||||
style0_center = \ |
||||
easyxf('font: name Times New Roman, height 280, bold True; align: horiz center') |
||||
style1 = easyxf('font: name Times New Roman, height 180;') |
||||
style2 = easyxf('font: name Times New Roman, height 180, bold True;') |
||||
style3 = easyxf('font: name Times New Roman, height 180;' |
||||
'border: top thin, left thin, right thin, bottom thin;' |
||||
) |
||||
style4 = easyxf('font: name Times New Roman, height 180, bold True;' |
||||
'border: top thin, left thin, right thin, bottom thin;' |
||||
) |
||||
style4.num_format_str = "#,##0.00" |
||||
|
||||
ws.write(11, 0, f"СЧЕТ № {order_num} от {license.order_date.strftime('%d.%m.%Y')}", |
||||
style0_center) |
||||
ws.write(13, 0, f"Покупатель: {data.name}", style1) |
||||
ws.write(16, 2, f"Лицензия Dokumentor.ru на {license.get_term()}", style3) |
||||
|
||||
style3.num_format_str = "#,##0.00" |
||||
|
||||
ws.write(16, 36, license.pay_sum, style3) |
||||
ws.write(16, 44, license.pay_sum, style3) |
||||
ws.write(17, 44, license.pay_sum, style4) |
||||
ws.write(19, 44, license.pay_sum, style4) |
||||
ws.write(21, 0, f"Всего наименование 1, на сумму {license.pay_sum},00 руб.", style1) |
||||
ws.write(23, 0, f"{rubles(license.pay_sum).capitalize()}.", style2) |
||||
|
||||
ws.insert_bitmap(os.path.join(XLS_ROOT, 'stamp.bmp'), 26, 12, y=3, scale_y=1.1) |
||||
|
||||
# заполняем квитанцию |
||||
elif pm == 2: |
||||
style0 = easyxf('font: name Times New Roman, height 160, bold True;' |
||||
'border: bottom thin;' |
||||
) |
||||
style1 = easyxf('font: name Times New Roman, height 160, bold True;' |
||||
'border: bottom thin;' |
||||
'align: horiz center;' |
||||
) |
||||
|
||||
# заполняем оригинал |
||||
ws.write(11, 4, f"Лицензия Dokumentor.ru на {license.get_term()}", style1) |
||||
ws.write(13, 13, data.get_boss_fio(), style0) |
||||
ws.write(14, 13, re.sub("^\s+|\n|\r|\s+$", ' ', data.address), style0) |
||||
ws.write(15, 11, license.pay_sum, style1) |
||||
|
||||
# заполняем копию |
||||
ws.write(31, 4, u"Лицензия Dokumentor.ru на %s" % (license.get_term()), style1) |
||||
ws.write(33, 13, data.get_boss_fio(), style0) |
||||
ws.write(34, 13, re.sub("^\s+|\n|\r|\s+$", ' ', data.address), style0) |
||||
ws.write(35, 11, license.pay_sum, style1) |
||||
|
||||
else: |
||||
raise Http404() |
||||
|
||||
wb.save(response) |
||||
|
||||
return response |
||||
lic = License.objects.get(pk=order_num) |
||||
pay_form = lic.payform |
||||
customer = request.user.profile |
||||
|
||||
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'] |
||||
} |
||||
} |
||||
|
||||
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'] |
||||
}, |
||||
'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/invoice/as_pdf.html', dictionary) |
||||
response.write(pdf) |
||||
return response |
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 103 KiB |
Loading…
Reference in new issue