/
CSV Dateien versioniert einspielen

CSV Dateien versioniert einspielen

Dieser Artikel beschreibt, wie ein Updateprozess über eine im Namen der CSV-Datei befindlichen Versionsnummer durchgeführt wird. Die verschiedenen Versionen der CSV-Dateien werden durch einen Unterstrich und einer Versionsnummer gekennzeichnet (z.B. _1, _2, 3 usw.) und befinden sich alle in dem im Quellcode angegebenen cities-Ordner des Moduls dlt_germany_cities. Eine CSV-Dateien der Version 1 sieht z.B folgendermaßen aus:

  • dlt.germany.city_1.csv (Im Dateinamen darf nur ein _ vorhanden sein)

Nachfolgend wird zunächst eine Funktion _eq_load_citys beschrieben, welche alle Dateien des Ordners "cities" auflistet. Anschließend wird durch Trennung (durch Nutzung der split()-Funktion) die Versionsnummer des Dateinamen der CSV-Datei gefiltert und anschließend mit der Version verglichen, welche in den Systemparameter des Open ERP Systems Odoo hinterlegt ist (Zeile: 98). Die Version in den Systemparametern des Open Source ERP Systems Odoo wird immer dann gesetzt, wenn eine neue Version eingespielt wird und entspricht der letzten eingespielten Version.

Variablenübersicht:  

  • diff: entspricht der Versionsnummer der verschiedenen CSV-Datei, welche sich im cities-Ordner befinden
  • version: entspricht der momentanen Version, welche zuletzt in das Open Source ERP System Odoo in die Systemparameter eingefügt wurde.                         
    def _eq_load_citys(self, cr, uid):
        config_param_obj = self.pool.get('ir.config_parameter')
        germany_city_obj = self.pool.get('dlt.germany.city')
        dir = os.path.dirname(__file__)
        path = dir + '/cities'
        objects = os.listdir(path)
        objects.sort()
        
        for objectname in objects:
            version = config_param_obj.get_param(cr, uid, 'cities.csv.version', "0")
            diffunderscore = objectname.split('_')[1]
            diff = diffunderscore.split('.')[0]
            if version:
                if int(diff) > int(version):
                   self._create_data(cr, uid, diff, objectname, config_param_obj, germany_city_obj)    
            else:
               self._create_data(cr, uid, diff, objectname, config_param_obj, germany_city_obj)

 

Die Funktion _create_data wird entweder aufgerufen, wenn die neu-eingespielte Version größer ist als die momentan im Open Source ERP System Odoo vorhandene Version oder wenn keine Version vorhanden ist ( Erstinstallation).

Durch die Übergabe der Variable diff wird in Zeile 57 ein String zusammengefügt, welcher nur diejenigen Versionen der CSV-Dateien einfügt, welche noch nicht vorhanden sind. Anschließend werden die noch nicht eingespielten CSV-Dateien eingefügt.

    def _create_data(self, cr, uid, diff, objectname, config_param_obj, germany_city_obj):
        config_param_obj.set_param(cr, uid, 'cities.csv.version', diff)
        ir_model_data_object = self.pool.get('ir.model.data')
        
        dir = os.path.dirname(__file__)
        path = dir + '/cities/'
        mypath = path + objectname 
        objects = os.listdir(path)
        objects.sort()
        for objectname in objects:
            reader_data = open(path + 'dlt.germany.city_' + diff +'.csv')
            reader = csv.reader(reader_data,delimiter=',')
            next(reader)
            for row in reader:
                model_data_id = ir_model_data_object.search(cr, uid, [('name', '=', row[0]), ('model', '=', 'dlt.germany.city' )])
                if model_data_id:
                    # Datensatz überarbeiten 
                    model_id = ir_model_data_object.browse(cr, uid,model_data_id)
                    country_data_id = ir_model_data_object.search(cr, uid, [('name', '=', row[4])])
                    state_data_id = ir_model_data_object.search(cr, uid, [('name', '=', row[3])])
                    country_data = ir_model_data_object.browse(cr,uid, country_data_id)
                    state_data = ir_model_data_object.browse(cr,uid, state_data_id)
                    self.write(cr, uid, model_id.res_id, {'zip' : row[1], 'long_name' : row[2], 'state_id': state_data.res_id, 'country_id': country_data.res_id})
                   
                else:
                    # Datensatz erstellen
                    country_data_id = ir_model_data_object.search(cr, uid, [('name', '=', row[4])])
                    state_data_id = ir_model_data_object.search(cr, uid, [('name', '=', row[3])])
                    country_data = ir_model_data_object.browse(cr,uid, country_data_id)
                    state_data = ir_model_data_object.browse(cr,uid, state_data_id)    
                    create_id = self.create(cr, uid, {'zip' : row[1], 'long_name' : row[2] 
                                              ,'country_id': country_data.res_id, 'state_id': state_data.res_id
                                              })
                    ir_model_data_object.create(cr, uid, {'name' : row[0], 'model' : 'dlt.germany.city', 'res_id' : create_id})
                print 'ID:', row[0]     
          
        return True

Modulname: dlt_germany_cities

Modulversion: 1.0.4

Author: inetplus (modified by Equitania Software GmBH) // siehe oben beschriebene Änderungen

 

Related content

Muster-Datenimport Tutorial
Muster-Datenimport Tutorial
More like this
Import großer Datenmengen
Import großer Datenmengen
More like this
Import v. XML / SEPA CAMT.053 Format Dateien
Import v. XML / SEPA CAMT.053 Format Dateien
More like this
MyOdoo Versandsteuerung V13
MyOdoo Versandsteuerung V13
More like this
Modul "MyOdoo Versandsteuerung v10"
Modul "MyOdoo Versandsteuerung v10"
More like this
Eine Datenbank in die Entwicklungsumgebung holen
Eine Datenbank in die Entwicklungsumgebung holen
More like this