diff --git a/addons/l10n_cn/__manifest__.py b/addons/l10n_cn/__manifest__.py
index 022963ca202..c8d98034b89 100644
--- a/addons/l10n_cn/__manifest__.py
+++ b/addons/l10n_cn/__manifest__.py
@@ -33,6 +33,9 @@ State Data/省份数据
修改小企业会计税率
+We added the option to print a voucher which will also
+print the amount in words (special Chinese characters for numbers)
+correctly when the cn2an library is installed. (e.g. with pip3 install cn2an)
""",
'depends': ['base', 'account', 'l10n_multilang'],
'data': [
@@ -42,7 +45,9 @@ State Data/省份数据
'data/l10n_cn_chart_post_data.xml',
'data/account_tax_template_data.xml',
'data/account_chart_template_data.xml',
- 'views/account_move_view.xml'
+ 'views/account_move_view.xml',
+ 'views/account_report.xml',
+ 'views/report_voucher.xml',
],
'demo': [
'demo/demo_company.xml',
diff --git a/addons/l10n_cn/models/account_move.py b/addons/l10n_cn/models/account_move.py
index f644e9db7d0..129fb9c0509 100644
--- a/addons/l10n_cn/models/account_move.py
+++ b/addons/l10n_cn/models/account_move.py
@@ -3,7 +3,12 @@
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
+from odoo.osv import expression
+try:
+ from cn2an import an2cn
+except ImportError:
+ an2cn = None
class AccountMove(models.Model):
_inherit = 'account.move'
@@ -15,3 +20,24 @@ class AccountMove(models.Model):
for record in self:
if record.fapiao and (len(record.fapiao) != 8 or not record.fapiao.isdecimal()):
raise ValidationError(_("Fapiao number is an 8-digit number. Please enter a correct one."))
+
+ @api.model
+ def check_cn2an(self):
+ return an2cn
+
+ @api.model
+ def _convert_to_amount_in_word(self, number):
+ """Convert number to ``amount in words`` for Chinese financial usage."""
+ if not self.check_cn2an():
+ return None
+ return an2cn(number, 'rmb')
+
+ def _count_attachments(self):
+ domains = [[('res_model', '=', 'account.move'), ('res_id', '=', self.id)]]
+ statement_ids = self.line_ids.mapped('statement_id')
+ payment_ids = self.line_ids.mapped('payment_id')
+ if statement_ids:
+ domains.append([('res_model', '=', 'account.bank.statement'), ('res_id', 'in', statement_ids)])
+ if payment_ids:
+ domains.append([('res_model', '=', 'account.payment'), ('res_id', 'in', payment_ids)])
+ return self.env['ir.attachment'].search_count(expression.OR(domains))
diff --git a/addons/l10n_cn/views/account_report.xml b/addons/l10n_cn/views/account_report.xml
new file mode 100644
index 00000000000..501d5c02b19
--- /dev/null
+++ b/addons/l10n_cn/views/account_report.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Voucher
+ account.move
+ qweb-pdf
+ l10n_cn.report_voucher
+ l10n_cn.report_voucher
+ 'Voucher_%s' % (object.name)
+ form
+
+
+
+
diff --git a/addons/l10n_cn/views/report_voucher.xml b/addons/l10n_cn/views/report_voucher.xml
new file mode 100644
index 00000000000..dad31b7ac02
--- /dev/null
+++ b/addons/l10n_cn/views/report_voucher.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 记账凭证
+
+
+
+
+
+
+
+
+
+
+
+
+ | 摘要 |
+ 科目 |
+ 借方 |
+ 贷方 |
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+ 合计:
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+ 审核:
+
+
+ 过账:
+
+
+ 制单:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+