From a75adc1ba2251e477fd762224d590d95a50b8847 Mon Sep 17 00:00:00 2001 From: Benjamin <benjamin@le-filament.com> Date: Tue, 18 Aug 2020 16:41:34 +0200 Subject: [PATCH] [add] update object if resync --- models/riga_odoo_import.py | 86 +++++++++++++++++++++++--------------- views/riga_odoo_import.xml | 1 + 2 files changed, 53 insertions(+), 34 deletions(-) diff --git a/models/riga_odoo_import.py b/models/riga_odoo_import.py index 041f48c..c61d48d 100644 --- a/models/riga_odoo_import.py +++ b/models/riga_odoo_import.py @@ -13,8 +13,9 @@ _logger = logging.getLogger(__name__) class CgscopRigaOdooImport(models.Model): - """ Ce modèle permet de logguer les imports de RIGA - vers Odoo + """ + Ce modèle permet de logguer les imports de RIGA + vers Odoo """ _name = 'riga.odoo.import' _description = 'Synchronisation RIGA vers Odoo' @@ -35,16 +36,17 @@ class CgscopRigaOdooImport(models.Model): # Fonctions génériques # ------------------------------------------------------ def _get_ftp_file(self, filename, ftp_channel): - """ Fonction de récupértion d'ufichier sur un FTP. + """ + Fonction de récupértion d'ufichier sur un FTP. - Cette fonction prend en paramètre un nom de fichier et recherche - dans le fichier de conf Odoo les login et password, puis dans les - paramètres système l'url et le path pour se connecter et retourner - le fichier binaire souhaité. + Cette fonction prend en paramètre un nom de fichier et recherche + dans le fichier de conf Odoo les login et password, puis dans les + paramètres système l'url et le path pour se connecter et retourner + le fichier binaire souhaité. - : param filename: (string) nom du fichier + : param filename: (string) nom du fichier - @return csv_file: (binary) fichier binaire à traiter + @return csv_file: (binary) fichier binaire à traiter """ param = ftp_channel ftp_login = param.login @@ -69,19 +71,22 @@ class CgscopRigaOdooImport(models.Model): except Exception as e: raise exceptions.Warning(e) - def _read_file(self, model, file, table, primary_key, header_key, resync=False): - """ Cette fonction prend en paramètre un fichier CSV et lit - chaque ligne pour mettre à jour la ligne de la table correspondante - si elle existe ou la créer si l'organisme existe - - :param model (obj): modèle pour importer les données - :param file (binary): fichier CSV à traiter - :param table (list): liste de tuples de correspondance - ('champ_odoo', 'champ_csv') - :param primary_key (string): header du fichier CSV correspondant à la clé - :param parent_id (string): header du fichier CSV pour lequel on va - rechercher l'ID RIGA de l'organisme - :param resync (bool): le fichier a été synchronisé manuellement + def _read_file(self, model, file, table, primary_key, header_key, + resync=False, log_id=None): + """ + Cette fonction prend en paramètre un fichier CSV et lit + chaque ligne pour mettre à jour la ligne de la table correspondante + si elle existe ou la créer si l'organisme existe + + :param model (obj): modèle pour importer les données + :param file (binary): fichier CSV à traiter + :param table (list): liste de tuples de correspondance + ('champ_odoo', 'champ_csv') + :param primary_key (string): header du fichier CSV correspondant à la clé + :param parent_id (string): header du fichier CSV pour lequel on va + rechercher l'ID RIGA de l'organisme + :param resync (bool): le fichier a été synchronisé manuellement + :param log_id (obj): ojjet à mettre à jour si pas de création """ try: file.seek(0) @@ -133,7 +138,7 @@ class CgscopRigaOdooImport(models.Model): ['model_id', '=', model.id]]) date_value = fields.Datetime.now() + datetime.timedelta(days=data.day) # Création du log - self.create({ + vals = { 'model_id': model.id, 'is_sync': True, 'filename': (data.riga_filename + @@ -146,17 +151,25 @@ class CgscopRigaOdooImport(models.Model): " - Mise à jour de " + str(maj_nb) + " lignes\n\n" + log), 'is_warning': True if log else False, 'is_resync': resync, - }) + } + if not log_id: + self.create(vals) + else: + log_id.update(vals) except Exception as e: _logger.error(e.__str__()) # Création du log - self.create({ + vals = { 'model_id': model.id, 'is_sync': False, 'is_error': True, 'log': str(e) - }) + } + if not log_id: + self.create(vals) + else: + log_id.update(vals) def _cast_type(self, model, field, value, relation=None): """ Détermine en fonction du champ la valeur typée à renvoyer @@ -199,20 +212,20 @@ class CgscopRigaOdooImport(models.Model): # ------------------------------------------------------ # Import données # ------------------------------------------------------ - def odoo_sync(self): model_sync = self.env['riga.files.matching'].sudo().search([ ['is_active', '=', True]]) self.sync_file(model_sync) def sync_file(self, model_sync): - """ Fonction de synchronisation des fichiers CSV RIGA - avec les tables associées Odoo. + """ + Fonction de synchronisation des fichiers CSV RIGA + avec les tables associées Odoo. - La fonction recherche l'ensembles des synchronisations actives - dans la table riga.files.matching, elle transforme la table - de correspondance de string à list puis appelle la fonction - _read_file qui permet d'intégrer ou de metre à jour les valeurs + La fonction recherche l'ensembles des synchronisations actives + dans la table riga.files.matching, elle transforme la table + de correspondance de string à list puis appelle la fonction + _read_file qui permet d'intégrer ou de metre à jour les valeurs """ for model in model_sync: table = [] @@ -240,6 +253,10 @@ class CgscopRigaOdooImport(models.Model): header_key=model.header_key) def resync_file(self): + """ + Fonction appelée pour la resynchronisation d'un log + en erreur + """ model = self.env['riga.files.matching'].sudo().search([ ['model_id', '=', self.model_id.id]]) table = [] @@ -251,4 +268,5 @@ class CgscopRigaOdooImport(models.Model): table=table, primary_key=model.primary_key, header_key=model.header_key, - resync=True) + resync=True, + log_id=self) diff --git a/views/riga_odoo_import.xml b/views/riga_odoo_import.xml index e84edf7..63ea032 100644 --- a/views/riga_odoo_import.xml +++ b/views/riga_odoo_import.xml @@ -42,6 +42,7 @@ <field name="is_warning" readonly="1" /> <field name="is_error" readonly="1" /> <field name="is_resync" readonly="1" /> + <field name="write_date" readonly="1" /> </group> </group> <group> -- GitLab