diff --git a/datas/riga.files.matching.header.csv b/datas/riga.files.matching.header.csv index 440be8f3fc6a36fb3875500259008b81218ba9f5..8c5c1abbb82e1abbe86f950b47fca7e3fc9229ba 100644 --- a/datas/riga.files.matching.header.csv +++ b/datas/riga.files.matching.header.csv @@ -1,52 +1,52 @@ -id,parent_id:id,name,riga_name -scop_contribution_header_1,odoo_scop_contribution,id_riga,EVTID -scop_contribution_header_2,odoo_scop_contribution,type_id,EVT04 -scop_contribution_header_3,odoo_scop_contribution,year,EVT08 -scop_contribution_header_4,odoo_scop_contribution,calculation_date,EVT05 -scop_contribution_header_5,odoo_scop_contribution,amount_calculated,EVT13 -scop_contribution_header_6,odoo_scop_contribution,amount_called,EVT06 -scop_contribution_header_7,odoo_scop_contribution,amount_paid,EVT20 -scop_contribution_header_8,odoo_scop_contribution,amount_remaining_previous,EVT10 -scop_contribution_header_9,odoo_scop_contribution,amount_paid_late,EVT11 -scop_contribution_header_10,odoo_scop_contribution,spreading,EVT16 -scop_contribution_header_11,odoo_scop_contribution,amount_remaining,EVT21 -scop_contribution_header_12,odoo_scop_contribution,quarter_1,EVT27 -scop_contribution_header_13,odoo_scop_contribution,quarter_2,EVT28 -scop_contribution_header_14,odoo_scop_contribution,quarter_3,EVT29 -scop_contribution_header_15,odoo_scop_contribution,quarter_4,EVT30 -scop_questionnaire_header_1,odoo_scop_questionnaire,id_riga,EVTID -scop_questionnaire_header_2,odoo_scop_questionnaire,year_riga,EVT02 -scop_questionnaire_header_3,odoo_scop_questionnaire,staff_count,EVT08 -scop_questionnaire_header_4,odoo_scop_questionnaire,staff_shareholder_count,EVT09 -scop_questionnaire_header_5,odoo_scop_questionnaire,staff_average,EVT10 -scop_liasse_fiscale_header_1,odoo_scop_liasse_fiscale,id_riga,EVTID -scop_liasse_fiscale_header_2,odoo_scop_liasse_fiscale,year_riga,EVT02 -scop_liasse_fiscale_header_3,odoo_scop_liasse_fiscale,effective_date,EVT04 -scop_liasse_fiscale_header_4,odoo_scop_liasse_fiscale,duration,EVT03 -scop_liasse_fiscale_header_5,odoo_scop_liasse_fiscale,closing_date,EVT04 -scop_liasse_fiscale_header_6,odoo_scop_liasse_fiscale,source_id,EVT07 -scop_liasse_fiscale_header_7,odoo_scop_liasse_fiscale,revenue_cg,EVT08 -scop_liasse_fiscale_header_8,odoo_scop_liasse_fiscale,margin_cg,EVT09 -scop_liasse_fiscale_header_9,odoo_scop_liasse_fiscale,av_cg,EVT10 -scop_liasse_fiscale_header_10,odoo_scop_liasse_fiscale,wage_cg,EVT11 -scop_liasse_fiscale_header_11,odoo_scop_liasse_fiscale,margin2ca,EVT14 -scop_liasse_fiscale_header_12,odoo_scop_liasse_fiscale,av_cgsubv,EVT19 -scop_liasse_fiscale_header_13,odoo_scop_liasse_fiscale,revenue_cgsubv,EVT29 -scop_liasse_fiscale_header_14,odoo_scop_liasse_fiscale,is_av_lf,EVT15 -scop_liasse_fiscale_header_15,odoo_scop_liasse_fiscale,av_lf,EVT16 -scop_liasse_fiscale_header_16,odoo_scop_liasse_fiscale,revenue_sub,EVT33 -scop_liasse_fiscale_header_17,odoo_scop_liasse_fiscale,sal,EVT34 -scop_liasse_fiscale_header_18,odoo_scop_liasse_fiscale,margin,EVT35 -scop_liasse_fiscale_header_19,odoo_scop_liasse_fiscale,distribution,EVT39 -scop_liasse_fiscale_header_20,odoo_scop_liasse_fiscale,capital_cae,EVT41 -scop_liasse_fiscale_header_21,odoo_scop_liasse_fiscale,flexible_keys,EVT37 -scop_liasse_fiscale_header_22,odoo_scop_liasse_fiscale,reserve,EVT42 -scop_liasse_fiscale_header_23,odoo_scop_liasse_fiscale,share_ass_perm,EVT51 -scop_liasse_fiscale_header_24,odoo_scop_liasse_fiscale,dvpt_fund,EVT45 -scop_liasse_fiscale_header_25,odoo_scop_liasse_fiscale,share_ass_work,EVT53 -scop_liasse_fiscale_header_26,odoo_scop_liasse_fiscale,share_capital,EVT43 -scop_liasse_fiscale_header_27,odoo_scop_liasse_fiscale,share_work,EVT46 -scop_liasse_fiscale_header_28,odoo_scop_liasse_fiscale,pension_fund,EVT44 -scop_liasse_fiscale_header_29,odoo_scop_liasse_fiscale,others,EVT47 -scop_liasse_fiscale_header_30,odoo_scop_liasse_fiscale,key_name,EVT64 -scop_liasse_fiscale_header_31,odoo_scop_liasse_fiscale,status_update,EVT48 \ No newline at end of file +id,parent_id:id,name,riga_name,relation +scop_contribution_header_1,odoo_scop_contribution,id_riga,EVTID, +scop_contribution_header_2,odoo_scop_contribution,type_id,EVT04,id_riga +scop_contribution_header_3,odoo_scop_contribution,year,EVT08, +scop_contribution_header_4,odoo_scop_contribution,calculation_date,EVT05, +scop_contribution_header_5,odoo_scop_contribution,amount_calculated,EVT13, +scop_contribution_header_6,odoo_scop_contribution,amount_called,EVT06, +scop_contribution_header_7,odoo_scop_contribution,amount_paid,EVT20, +scop_contribution_header_8,odoo_scop_contribution,amount_remaining_previous,EVT10, +scop_contribution_header_9,odoo_scop_contribution,amount_paid_late,EVT11, +scop_contribution_header_10,odoo_scop_contribution,spreading,EVT16, +scop_contribution_header_11,odoo_scop_contribution,amount_remaining,EVT21, +scop_contribution_header_12,odoo_scop_contribution,quarter_1,EVT27, +scop_contribution_header_13,odoo_scop_contribution,quarter_2,EVT28, +scop_contribution_header_14,odoo_scop_contribution,quarter_3,EVT29, +scop_contribution_header_15,odoo_scop_contribution,quarter_4,EVT30, +scop_questionnaire_header_1,odoo_scop_questionnaire,id_riga,EVTID, +scop_questionnaire_header_2,odoo_scop_questionnaire,year_riga,EVT02, +scop_questionnaire_header_3,odoo_scop_questionnaire,staff_count,EVT08, +scop_questionnaire_header_4,odoo_scop_questionnaire,staff_shareholder_count,EVT09, +scop_questionnaire_header_5,odoo_scop_questionnaire,staff_average,EVT10, +scop_liasse_fiscale_header_1,odoo_scop_liasse_fiscale,id_riga,EVTID, +scop_liasse_fiscale_header_2,odoo_scop_liasse_fiscale,year_riga,EVT02, +scop_liasse_fiscale_header_3,odoo_scop_liasse_fiscale,effective_date,EVT04, +scop_liasse_fiscale_header_4,odoo_scop_liasse_fiscale,duration,EVT03, +scop_liasse_fiscale_header_5,odoo_scop_liasse_fiscale,closing_date,EVT04, +scop_liasse_fiscale_header_6,odoo_scop_liasse_fiscale,source_id,EVT07,id_riga +scop_liasse_fiscale_header_7,odoo_scop_liasse_fiscale,revenue_cg,EVT08, +scop_liasse_fiscale_header_8,odoo_scop_liasse_fiscale,margin_cg,EVT09, +scop_liasse_fiscale_header_9,odoo_scop_liasse_fiscale,av_cg,EVT10, +scop_liasse_fiscale_header_10,odoo_scop_liasse_fiscale,wage_cg,EVT11, +scop_liasse_fiscale_header_11,odoo_scop_liasse_fiscale,margin2ca,EVT14, +scop_liasse_fiscale_header_12,odoo_scop_liasse_fiscale,av_cgsubv,EVT19, +scop_liasse_fiscale_header_13,odoo_scop_liasse_fiscale,revenue_cgsubv,EVT29, +scop_liasse_fiscale_header_14,odoo_scop_liasse_fiscale,is_av_lf,EVT15, +scop_liasse_fiscale_header_15,odoo_scop_liasse_fiscale,av_lf,EVT16, +scop_liasse_fiscale_header_16,odoo_scop_liasse_fiscale,revenue_sub,EVT33, +scop_liasse_fiscale_header_17,odoo_scop_liasse_fiscale,sal,EVT34, +scop_liasse_fiscale_header_18,odoo_scop_liasse_fiscale,margin,EVT35, +scop_liasse_fiscale_header_19,odoo_scop_liasse_fiscale,distribution,EVT39, +scop_liasse_fiscale_header_20,odoo_scop_liasse_fiscale,capital_cae,EVT41, +scop_liasse_fiscale_header_21,odoo_scop_liasse_fiscale,flexible_keys,EVT37, +scop_liasse_fiscale_header_22,odoo_scop_liasse_fiscale,reserve,EVT42, +scop_liasse_fiscale_header_23,odoo_scop_liasse_fiscale,share_ass_perm,EVT51, +scop_liasse_fiscale_header_24,odoo_scop_liasse_fiscale,dvpt_fund,EVT45, +scop_liasse_fiscale_header_25,odoo_scop_liasse_fiscale,share_ass_work,EVT53, +scop_liasse_fiscale_header_26,odoo_scop_liasse_fiscale,share_capital,EVT43, +scop_liasse_fiscale_header_27,odoo_scop_liasse_fiscale,share_work,EVT46, +scop_liasse_fiscale_header_28,odoo_scop_liasse_fiscale,pension_fund,EVT44, +scop_liasse_fiscale_header_29,odoo_scop_liasse_fiscale,others,EVT47, +scop_liasse_fiscale_header_30,odoo_scop_liasse_fiscale,key_name,EVT64, +scop_liasse_fiscale_header_31,odoo_scop_liasse_fiscale,status_update,EVT48, \ No newline at end of file diff --git a/models/riga_files_matching.py b/models/riga_files_matching.py index a5a77120c370fa981b7184addcf2d0aba8b02716..bc50fe005b85e104cbc745fb61fa46100698ad9a 100644 --- a/models/riga_files_matching.py +++ b/models/riga_files_matching.py @@ -11,8 +11,9 @@ class CgscopRigaFilesMatchingHeader(models.Model): parent_id = fields.Many2one( comodel_name='riga.files.matching', string='Modèle') - name = fields.Char('Champ Odoo') - riga_name = fields.Char('Header RIGA') + name = fields.Char('Champ Odoo', required=True) + riga_name = fields.Char('Header RIGA', required=True) + relation = fields.Char('Champ Relation') class CgscopRigaFilesMatching(models.Model): diff --git a/models/riga_odoo_import.py b/models/riga_odoo_import.py index 1439ded36e5b374d43df9c60c9401d36a347eb28..a820c43547be1508ef604b819cbf94cac129a88a 100644 --- a/models/riga_odoo_import.py +++ b/models/riga_odoo_import.py @@ -83,72 +83,74 @@ class CgscopRigaOdooImport(models.Model): :param parent_id (string): header du fichier CSV pour lequel on va rechercher l'ID RIGA de l'organisme """ - try: - file.seek(0) - # Création du lecteur CSV. - reader = csv.DictReader( - io.TextIOWrapper(file, encoding="utf-8-sig", newline=None), - delimiter=';') - model_obj = self.env[model.model] - crea_nb = 0 - maj_nb = 0 - log = "" - # Lecture de chaque ligne - for row in reader: - # Création de l'objet - vals = {} - for field in table: + # try: + file.seek(0) + # Création du lecteur CSV. + reader = csv.DictReader( + io.TextIOWrapper(file, encoding="utf-8-sig", newline=None), + delimiter=';') + model_obj = self.env[model.model] + crea_nb = 0 + maj_nb = 0 + log = "" + # Lecture de chaque ligne + for row in reader: + # Création de l'objet + vals = {} + for field in table: + print + vals.update({ + field[0]: self._cast_type( + model=model, + field=field[0], + value=row[field[1]], + relation=field[2]) + }) + # Vérification de la ligne dans la base + line = model_obj.search([ + ['id_riga', '=', row[primary_key]]]) + # Si il y a un enregistrement, on met à jour + if line: + line.write(vals) + maj_nb += 1 + else: + # Check d'un organisme dans la base + partner = self.env['res.partner'].search([ + ['id_riga', '=', row[header_key]], + ['is_cooperative', '=', True]]) + # Si l'organisme existe, on crée un enregistrement + if partner: vals.update({ - field[0]: self._cast_type( - model=model, - field=field[0], - value=row[field[1]]) + 'partner_id': partner.id }) - # Vérification de la ligne dans la base - line = model_obj.search([ - ['id_riga', '=', row[primary_key]]]) - # Si il y a un enregistrement, on met à jour - if line: - line.write(vals) - maj_nb += 1 + model_obj.create(vals) + crea_nb += 1 else: - # Check d'un organisme dans la base - partner = self.env['res.partner'].search([ - ['id_riga', '=', row[header_key]], - ['is_cooperative', '=', True]]) - # Si l'organisme existe, on crée un enregistrement - if partner: - vals.update({ - 'partner_id': partner.id - }) - model_obj.create(vals) - crea_nb += 1 - else: - log += ("Pas d'enredistrement trouvé pour l'id " + - row[primary_key] + " avec l'id riga " + - row[header_key] + "\n") - - # Création du log - self.create({ - 'model_id': model.id, - 'is_sync': True, - 'log': ("Import du fichier réussi : \n" + - " - Création de " + str(crea_nb) + " lignes\n" + - " - Mise à jour de " + str(maj_nb) + " lignes\n\n" + log), - 'is_warning': True if log else False, - }) - - except Exception as e: - _logger.error(e.__str__()) - # Création du log - self.create({ - 'model_id': model.id, - 'is_sync': False, - 'is_error': True, - 'log': str(e) - }) - - def _cast_type(self, model, field, value): + log += ("Pas d'enredistrement trouvé pour l'id " + + row[primary_key] + " avec l'id riga " + + row[header_key] + "\n") + + # Création du log + self.create({ + 'model_id': model.id, + 'is_sync': True, + 'log': ("Import du fichier réussi : \n" + + " - Création de " + str(crea_nb) + " lignes\n" + + " - Mise à jour de " + str(maj_nb) + " lignes\n\n" + log), + 'is_warning': True if log else False, + }) + + # except Exception as e: + # _logger.error(e.__str__()) + # # Création du log + # self.create({ + # 'model_id': model.id, + # 'is_sync': False, + # 'is_error': True, + # 'log': str(e) + # }) + + def _cast_type(self, model, field, value, relation=None): """ Détermine en fonction du champ la valeur typée à renvoyer pour l'ORM @@ -167,13 +169,22 @@ class CgscopRigaOdooImport(models.Model): return int(float(value.replace(',', '.'))) elif field_type == 'float': return float(value.replace(',', '.')) - elif field_type in ['date', 'datetime']: + elif field_type == 'date': + date_value = datetime.datetime.strptime( + value, '%d/%m/%Y') + return date_value + elif field_type == 'datetime': date_value = datetime.datetime.strptime( value, '%d/%m/%Y %H:%M:%S') return date_value - if field_type == 'many2one': + elif field_type == 'selection': + selection = self.env[model.model]._fields.get('state').selection + for item in selection: + if item[1] == value: + return item[0] + elif field_type == 'many2one': m2o_value = self.env[odoo_field.relation].search([ - ['id_riga', '=', value]]).id + [relation, '=', value]]).id return m2o_value else: return value @@ -202,7 +213,7 @@ class CgscopRigaOdooImport(models.Model): model.model_id.name ) for header in model.matching_table_ids: - table.append((header.name, header.riga_name)) + table.append([header.name, header.riga_name, header.relation]) self._read_file( model=model.model_id, file=self._get_ftp_file(model.riga_filename), diff --git a/models/scop_questionnaire.py b/models/scop_questionnaire.py index 8333a6ca4cfe8bcfe1cae1cd786ac3221b05b6c7..32497c9d05579557933a44b0e3908b57bd7a7044 100644 --- a/models/scop_questionnaire.py +++ b/models/scop_questionnaire.py @@ -22,7 +22,7 @@ class ScopQuestionnaireImport(models.Model): @api.multi def _compute_fields(self): for questionnaire in self: - if questionnaire.year_riga != '14862': + if questionnaire.year_riga != '14862' and questionnaire.year_riga != '14443': year = questionnaire.env['riga.lookup.table'].search([ ['id_riga', '=', questionnaire.year_riga]]) questionnaire.year = year.name diff --git a/views/riga_files_matching.xml b/views/riga_files_matching.xml index 3894433d67947e0098ab9a13c673c1a5fe069b3f..738068e06103430f6c2e79ddb5ccd15158bb875d 100644 --- a/views/riga_files_matching.xml +++ b/views/riga_files_matching.xml @@ -34,7 +34,7 @@ <group> <field name="primary_key"/> <field name="header_key"/> - <field name="is_active"/> + <field name="is_active" widget="boolean_toggle"/> </group> </group> <group> @@ -42,6 +42,7 @@ <tree editable="bottom"> <field name="name"/> <field name="riga_name"/> + <field name="relation"/> </tree> </field> </group>