Пренасям част от дискусия от LinkedIn, понеже там не е възможно да се огражда код, да се прикачи файл и има ограничение до 4000 символа на пост, а цитираните по-долу въпроси и отговори биха били полезни за всички сблъскали се с проблема с изписване на суми словом във фактура в OpenERP.
...по въпроса за изписване с думи на сумата по фактура -
forum.openerp.com/forum/topic31741.html и ако в PDF-а излизат квадрати или въпросителни, се сменя шрифта с такъв, поддържащ кирилица. Ако останалия текст на кирилица се изписва коректно, шрифта е ок.
А от къде се взима самият код на Python, който прави конвертирането на числото към български? Аз не можах да го намеря и си го написах, но все някъде трябва да го има...
В OpenERP в
account_print_invoice.py има French и Dutch, a в
account_print_invoice_en.py - English. Из интернет има за доста езици, но за български не срещнах. Файла е
/opt/openerp70/server/openerp/tools/amount_to_text.py и разбира се трябва да се добави български - Bulgarian (секция с думите и някой специфични неща в граматиката) по подобие на другите езици. Файла може и да се отдели като
amount_to_text_bg.py, като за основа се ползва
amount_to_text_en.py. Освен това във файла
/opt/openerp70/server/openerp/addons/account/report/account_print_invoice.py се добавя
from tools.translate import _
from tools import amount_to_text
from tools.amount_to_text import amount_to_text_bg
и след
се добавя това
'amount_to_text_bg': amount_to_text_bg
а в
/opt/openerp70/server/openerp/addons/account/report/account_print_invoice.rml се заменя tr за Total:
това
<tr>
<td>
<para style="terp_default_8">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_tblheader_Details"><b>Total:</b></para>
</td>
<td>
<para style="terp_default_Bold_Right_9"><b>[[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</b></para>
</td>
</tr>
с това
<tr>
<td>
<para style="terp_default_8">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_tblheader_Details">Total:</para>
</td>
<td>
<para style="terp_default_Bold_Right_9">[[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</para>
</td>
</tr>
<tr>
<td>
<para style="terp_default_8">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_9">Amount in words:</para>
</td>
<td>
<para style="terp_default_Bold_9">[[ str(amount_to_text_bg(o.amount_total,"лева")) ]]</para>
</td>
</tr>
(съответните изрази трябва да ги има в
_bg.po файл или да се добавят от администрацията - Settings - .... - Translated Terms)
Повечето неща са описани подробно в цитираната тема -
http://forum.openerp.com/forum/topic31741.html и ако се съпоставят сорсовете на трита файла от форума и от OpenERP ясно се вижда какво и къде да се добави. Там се разисква добавянето на индийски - Indian.
За улеснение и заради спецификата на българската граматика, за основа може да се ползва този php скрипт -
http://georgi.unixsol.org/programs/num2bgmoney.php/get/, прикачам го тук. (скрипта не работи коректно)
Посочените пътища се отнасят за версия 7.0, 6.1 и 8.0 и където аз ги инсталирам -
/opt/openerp70/server (/opt/openerp61/server, /opt/openerp80/server). За 6.0 пътищата са
/opt/openerp604/server/bin/tools/amount_to_text.py, /opt/openerp604/server/bin/addons/account/report/account_print_invoice.py и /opt/openerp604/server/bin/addons/account/report/account_print_invoice.rml. Разлики в кода на практика няма.