Public release from ruodoo-project: 19.0 - 2026-11-01 22:52:25 UTC
This commit is contained in:
117
ruodoo_commservice/report_helper.py
Normal file
117
ruodoo_commservice/report_helper.py
Normal file
@@ -0,0 +1,117 @@
|
||||
"""Помощник форматирования для 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)
|
||||
Reference in New Issue
Block a user