在Odoo8中,如何将模块的.py文件导入自定义模块?

时间:2017-12-07 03:30:33

标签: python module odoo-8

好的,所以来了。支撑你自己。

我正在尝试覆盖位于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表生成期间被称为一次 ...

如何从自定义模块引用此文件?

我知道这是一面文字,所以谢谢你的阅读!

1 个答案:

答案 0 :(得分:0)

要导入它,请使用完整路径

from openerp.addons.account_followup.report import account_followup_print

我认为这会起作用,但如果不是只是稍微改变它就可以了 您需要指定模型报告的完整路径 看看这个问题:

Odoo overwrite inherited method