好的,所以来了。支撑你自己。
我正在尝试覆盖位于Odoo模块( account_followup )中的类( res_partner )的方法( get_followup_table_html ) 8,创建一个自定义模块( account_followup_upgrade ),继承该类并定义和重新定义该方法。
这些变化非常小,因为该方法的唯一目的是创建一个html表,以包含在发送给客户的电子邮件中;我刚刚复制了原始方法并修改了html代码部分。
话虽如此,它仍然有效,主要是。我的自定义模块文件夹中的文件包括:
__ openerp__.py(不是完整档案,只是重要的一点):
'depends': ['account_followup'],
。__ INIT __ PY:
# -*- coding: utf-8 -*-
import mymodule
mymodule.py:
# -*- coding: utf-8 -*-
from openerp.osv import osv
# I need to modify a method in this class
class res_partner(osv.osv):
# So I inherit it
_inherit = 'res.partner'
# And define a method called the same as the original, with the same arguments
def get_followup_table_html(self, cr, uid, ids, context=None):
"""
Build the html tables to be included in emails send to partners,
when reminding them their overdue invoices.
:param ids: [id] of the partner for whom we are building the tables
:rtype: string
"""
try:
from report import account_followup_print
except ImportError:
return 'import failed'
# The code that follows generates an html table
assert len(ids) == 1
if context is None:
context = {}
partner = self.browse(cr, uid, ids[0], context=context).commercial_partner_id
#copy the context to not change global context. Overwrite it because _() looks for the lang in local variable 'context'.
#Set the language to use = the partner language
context = dict(context, lang=partner.lang)
followup_table = ''
if partner.unreconciled_aml_ids:
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
current_date = fields.date.context_today(self, cr, uid, context=context)
rml_parse = account_followup_print.report_rappel(cr, uid, "followup_rml_parser")
final_res = rml_parse._lines_get_with_partner(partner, company.id)
for currency_dict in final_res:
currency = currency_dict.get('line', [{'currency_id': company.currency_id}])[0]['currency_id']
# My changes start here
followup_table += '''
<table border="0" width=100%>
<tr style="background-color:#ea6153;color:White">
<td><b>''' + _("Invoice Date") + '''</b></td>
<td><b>''' + _("Description") + '''</b></td>
<td><b>''' + _("Due Date") + '''</b></td>
<td><b>''' + _("Amount") + " (%s)" % (currency.symbol) + '''</b></td>
</tr>
'''
total = 0
strbegin = "<TD>"
strend = "</TD>"
empty_cell = strbegin + strend
for aml in currency_dict['line']:
date = aml['date_maturity'] or aml['date']
if date <= current_date and aml['balance'] > 0:
total += aml['balance']
followup_table +="<TR>" + strbegin + str(aml['date']) + strend + strbegin + aml['name'] + strend + strbegin + str(date) + strend + strbegin + '{0:.2f}'.format(aml['balance']) + strend + "</TR>"
#total = reduce(lambda x, y: x+y['balance'], currency_dict['line'], 0.00)
followup_table +='''<TR style="background-color:#e9e9e9">''' + empty_cell + empty_cell + strbegin +"<B>TOTAL</B>" + strend + strbegin + "<B>" + '{0:.2f}'.format(total) + "</B>" + strend + "</TR>"
followup_table +="</table>"
return followup_table
现在,我知道该模块在我的电子邮件中工作时出现'导入错误',它实际上覆盖了原始方法(否则我会得到一个有效的,如果丑陋的html表)。问题是导入:
from report import account_followup_print
此文件 account_followup_print.py 位于原始 account_followup 模块中报告文件夹内,我不知道如何导入(或继承它)。我需要它,因为它在html表生成期间被称为一次 ...
如何从自定义模块引用此文件?
我知道这是一面文字,所以谢谢你的阅读!
答案 0 :(得分:0)
要导入它,请使用完整路径
from openerp.addons.account_followup.report import account_followup_print
我认为这会起作用,但如果不是只是稍微改变它就可以了 您需要指定模型报告的完整路径 看看这个问题: