odoo導入功能二開

原來有的導入功能相信不少小夥伴對其功能不是很滿意,不過不要緊,咱們能夠二開啊,把它的功能改形成你想要的樣子,接下來讓咱們看看怎麼辦吧

  • 例如我想把員工導入功能中添加上用戶同步註冊功能
  • 首先,我要找到原模塊中導入時調用的模型——importUser.py文件
  • 找到這個文件以後打開 HtkjtImport 類,該類繼承import基礎模塊api

    class HtkjtImport(models.TransientModel):
        _inherit = "base_import.import"
  • 在該類下面找到 do 方法,將其重寫
  • 固然咯,重寫該方法或者其餘方法均可以,不必定就選擇這個
  • 代碼風格規範一點的也能夠本身新建一個方法,而後調用就能夠了app

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

    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
相關文章
相關標籤/搜索