无法在电子邮件中添加附件

时间:2016-03-16 07:47:51

标签: python openerp

使用netsvc服务在自定义模块的电子邮件模板中添加附件,这会显示错误

  

(结果,格式)= service.create(AttributeError:' unicode'对象没有属性'创建'

这是python odoo的代码

def custom_send_email (self, cr, uid, ids, context=None):
    email_obj = self.pool.get('mail.template')

    template_id = self.pool.get('mail.template').search(cr, uid, 
        [('name', '=', 'Sales Order - Send by Email')], context=context)[0]

    email = email_obj.browse(cr, uid, template_id)

    attachment_obj = self.pool.get('ir.attachment')
    ir_actions_report = self.pool.get('ir.actions.report.xml')

    matching_reports = ir_actions_report.search(
        cr, uid, [('name', '=', 'Overtime Report')])

    print "Matching report "
    print matching_reports

    if matching_reports:
        report = ir_actions_report.browse(cr, uid, matching_reports[0])
        report_service = 'report.' + report.report_name
        service = netsvc.LocalService(report_service)
        (result, format) = service.create(
            cr, uid, [1], {'model': self._name, 'start_date': datetime.now(), 'end_date': datetime.now()}, context=context)


        if not report.attachment:
            result = base64.b64encode(result)
            file_name = "Overtime Report " + datetime.strftime(datetime.now().date(), "%Y-%m-%d") + ".pdf"
            attachment_id = attachment_obj.create(cr, uid,
                                                  {
                                                      'name': file_name,
                                                      'datas': result,
                                                      'datas_fname': file_name,
                                                      'type': 'binary'
                                                  }, context=context)

        email_obj.write(cr, uid, template_id, 
                        {
                            'email_from': "${(object.user_id.email or 'tact.knysys@gmail.com')|safe}",
                            'email_to': "tact@tact.com",
                            'subject': "Over Time",
                            'body_html': "Over Time",
                            'email_recipients': "tact@tact.com",
                            'attachment_ids': [(6, 0, [attachment_id])],
                        })

        email_obj.send_mail(cr, uid, template_id, False, True, context=context)

    return True

1 个答案:

答案 0 :(得分:1)

在最新版本的odoo netsvc.LocalService 现已弃用,有一种新方法可以做同样的事情 openerp.report.render_report 。所以请尝试使用此代码。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell")!
    cell.textLabel.text = phrases[indexPath.row]
    return cell
}