zoukankan      html  css  js  c++  java
  • odoo导入功能二开

    原来有的导入功能相信很多小伙伴对其功能不是很满意,不过没关系,我们可以二开啊,把它的功能改造成你想要的样子,接下来让我们看看怎么办吧

    • 例如我想把员工导入功能中添加上用户同步注册功能

    • 首先,我要找到原模块中导入时调用的模型——importUser.py文件

    • 找到这个文件之后打开 HtkjtImport 类,该类继承import基础模块

        class HtkjtImport(models.TransientModel):
        	_inherit = "base_import.import"
      
    • 在该类下面找到 do 方法,将其重写

    • 当然咯,重写该方法或者其他方法都可以,不一定就选择这个

    • 代码风格规范一点的也可以自己新建一个方法,然后调用就可以了

      @api.multi
      def do(self, fields, columns, options, dryrun=False):

        self.ensure_one()
        self._cr.execute('SAVEPOINT import')
      
        try:
            data, import_fields = self._convert_import_data(fields, options)
            # Parse date and float field
            data = self._parse_import_data(data, import_fields, options)
        except ValueError as error:
            return {
                'messages': [{
                    'type': 'error',
                    'message': pycompat.text_type(error),
                    'record': False,
                }]
            }
      
        _logger.info('importing %d rows...', len(data))
      
        name_create_enabled_fields = options.pop('name_create_enabled_fields', {})
        model = self.env[self.res_model].with_context(import_file=True,
                                                      name_create_enabled_fields=name_create_enabled_fields)
        import_result = model.load(import_fields, data)
        _logger.info('done')
      
        # If transaction aborted, RELEASE SAVEPOINT is going to raise
        # an InternalError (ROLLBACK should work, maybe). Ignore that.
        try:
            if dryrun:
                self._cr.execute('ROLLBACK TO SAVEPOINT import')
                # cancel all changes done to the registry/ormcache
                self.pool.reset_changes()
            else:
                self._cr.execute('RELEASE SAVEPOINT import')
        except psycopg2.InternalError:
            pass
      
        # 导入成功后更新插入映射列
        if import_result['ids'] and options.get('headers'):
            BaseImportMapping = self.env['base_import.mapping']
            for index, column_name in enumerate(columns):
                if column_name:
                    # Update to latest selected field
                    exist_records = BaseImportMapping.search(
                        [('res_model', '=', self.res_model), ('column_name', '=', column_name)])
                    if exist_records:
                        exist_records.write({'field_name': fields[index]})
                    else:
                        BaseImportMapping.create({
                            'res_model': self.res_model,
                            'column_name': column_name,
                            'field_name': fields[index]
                        })
      
        for da in data:
            print(da[1])
            print(da[3])
      
            data = {
                'name': da[1],
                'display_name': da[1],
                'email': da[3],
            }
            partner = self.env['res.partner'].create(data)
            print(partner.id)
      
            data = {
                'login': da[3],
                'password': 123456,
                'partner_id': partner.id,
            }
            user = self.env['res.users'].create(data)
      
        return import_result
  • 相关阅读:
    ORA-02020 : 过多的数据库链接在使用中-Windows环境解决步骤
    <转载>c++中new一个二维数组
    C C++输出格式 <转载>仅用于个人
    *p 和p[i] 区别
    Const *ptr ptr
    C 格式化的输入输出(printf scanf)
    PP 各种快捷键
    【Java并发工具类】原子类
    【Java并发工具类】Java并发容器
    【Java并发工具类】CountDownLatch和CyclicBarrier
  • 原文地址:https://www.cnblogs.com/chenshuquan/p/10531862.html
Copyright © 2011-2022 走看看