# -*- 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 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): 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