代码之家  ›  专栏  ›  技术社区  ›  Gerardo Parrello

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

  •  2
  • Gerardo Parrello  · 技术社区  · 7 年前

    好了,来了。振作起来。

    我正在尝试覆盖一个方法( get\u followup\u table\u html )来自班级( res_合作伙伴 )位于模块中( 账户跟进 )在Odoo 8中,通过创建自定义模块( account\u followup\u升级 )它继承类并定义和重新定义方法。

    更改非常小,因为该方法的唯一目的是创建一个html表,将其包含在发送给客户的电子邮件中;我刚刚复制了原始方法并修改了html代码部分。

    尽管如此,它还是有效的, 主要地 . 我的自定义模块文件夹中的文件包括:

    __openerp\uuuu。py(不是完整文件,只是重要的一点):

    'depends': ['account_followup'],
    

    __init\uuuu。py:

     # -*- coding: utf-8 -*-
    
    import 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\u followup\u打印。py公司 ,位于文件夹内 汇报 ,原件中 账户跟进 模块,我不知道如何导入(或继承)。我需要它,因为它叫 一旦 在html表生成过程中。。。

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

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Charif DZ    7 年前

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

    from openerp.addons.account_followup.report import account_followup_print
    

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

    Odoo overwrite inherited method