Files
public/l10n_ru_doc/models/sale.py

74 lines
2.4 KiB
Python

from odoo import models, fields, api
from datetime import datetime
import re
from pytils import numeral, dt
from odoo.tools import pycompat
class SaleOrder(models.Model):
_inherit = 'sale.order'
amount_total_words = fields.Char(
string='Сумма прописью',
compute='_compute_amount_total_words',
store=True
)
chief_initials = fields.Char(
string='Инициалы руководителя',
compute='_compute_chief_initials',
store=True
)
accountant_initials = fields.Char(
string='Инициалы бухгалтера',
compute='_compute_accountant_initials',
store=True
)
@api.depends('company_id.chief_id.name')
def _compute_chief_initials(self):
for order in self:
if order.company_id and order.company_id.chief_id:
order.chief_initials = self._get_initials(order.company_id.chief_id.name)
else:
order.chief_initials = ''
@api.depends('company_id.accountant_id.name')
def _compute_accountant_initials(self):
for order in self:
if order.company_id and order.company_id.accountant_id:
order.accountant_initials = self._get_initials(order.company_id.accountant_id.name)
else:
order.accountant_initials = ''
def _get_initials(self, fio):
if fio:
# fio.split()[0]
# [fio[0:1]+'.' for fio in fio.split()[1:]]
return (fio.split()[0] + ' ' + ''.join([part[0:1] + '.' for part in fio.split()[1:]])).strip()
return ''
@api.depends('amount_total')
def _compute_amount_total_words(self):
for order in self:
if order.amount_total:
order.amount_total_words = self.rubles(order.amount_total)
else:
order.amount_total_words = ''
def rubles(self, sum_amount):
rub = int(sum_amount)
kop = int(round((sum_amount - rub) * 100))
text_rubles = numeral.rubles(rub)
text_copeck = numeral.choose_plural(kop, ("копейка", "копейки", "копеек"))
text_rubles = text_rubles[0].upper() + text_rubles[1:]
return ("%s %02d %s") % (text_rubles, kop, text_copeck)
def print_quotation(self):
self.filtered(lambda s: s.state == 'draft').write({'state': 'sent'})
return self.env['report'].get_action(self, 'l10n_ru_doc.report_order')