Files
public/ruodoo_commservice/report_helper.py

118 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Помощник форматирования для QWeb-отчётов (порт из comm_service).
Повторяет API QWebHelper российской локализации (`l10n_ru_doc`): русские
даты, суммы прописью, представление реквизитов контрагента.
"""
from datetime import datetime
import re
from pytils import numeral, dt
from odoo.tools import pycompat
class QWebHelper:
def img(self, img, type='png', width=0, height=0):
width = "width='%spx'" % width if width else ' '
height = "height='%spx'" % height if height else ' '
return "<img %s %s src='data:image/%s;base64,%s' />" % (
width, height, type, str(pycompat.to_text(img)),
)
def numer(self, name):
if name:
numeration = re.findall(r'\d+$', name)
if numeration:
return numeration[0]
return ''
def ru_date(self, date):
if date and date != 'False':
return dt.ru_strftime(
'"%d" %B %Y года',
date=datetime.strptime(str(date), "%Y-%m-%d"),
inflected=True,
)
return ''
def ru_date2(self, date):
if date and date != 'False':
return dt.ru_strftime(
'%d %B %Y г.',
date=datetime.strptime(str(date), "%Y-%m-%d %H:%M:%S"),
inflected=True,
)
return ''
def in_words(self, number):
return numeral.in_words(number)
def rubles(self, sum):
"""Сумма в рублях прописью."""
text_rubles = numeral.rubles(int(sum))
copeck = round((sum - int(sum)) * 100)
text_copeck = numeral.choose_plural(
int(copeck), ("копейка", "копейки", "копеек"),
)
return "%s %02d %s" % (text_rubles, copeck, text_copeck)
def initials(self, fio):
if fio:
parts = fio.split()
return (parts[0] + ' ' + ''.join(
[p[0:1] + '.' for p in parts[1:]]
)).strip()
return ''
def address(self, partner):
repr = []
if partner.zip:
repr.append(partner.zip)
if partner.city:
repr.append(partner.city)
if partner.street:
repr.append(partner.street)
if partner.street2:
repr.append(partner.street2)
return ', '.join(repr)
def representation(self, partner):
repr = []
if partner.name:
repr.append(partner.name)
if partner.inn:
repr.append("ИНН " + partner.inn)
if partner.kpp:
repr.append("КПП " + partner.kpp)
repr.append(self.address(partner))
return ', '.join(repr)
def full_representation(self, partner):
repr = [self.representation(partner)]
if partner.phone:
repr.append("тел.: " + partner.phone)
elif partner.parent_id.phone:
repr.append("тел.: " + partner.parent_id.phone)
bank = None
if partner.bank_ids:
bank = partner.bank_ids[0]
elif partner.parent_id.bank_ids:
bank = partner.parent_id.bank_ids[0]
if bank and bank.acc_number:
repr.append("р/сч " + bank.acc_number)
if bank and bank.bank_name:
repr.append("в банке " + bank.bank_name)
if bank and bank.bank_bic:
repr.append("БИК " + bank.bank_bic)
if bank and bank.bank_corr_acc:
repr.append("к/с " + bank.bank_corr_acc)
return ', '.join(repr)
def representation_small(self, partner):
repr = []
if partner.name:
repr.append(partner.name)
repr.append(self.address(partner))
return ', '.join(repr)