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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM