diff --git a/models/partner.py b/models/partner.py index f9b2a35..982d5bf 100644 --- a/models/partner.py +++ b/models/partner.py @@ -7,56 +7,56 @@ from werkzeug import utils class partner(models.Model): _inherit = 'res.partner' - - statut=fields.Selection([('adherent', 'Adhérent'), ('bienfaiteur', 'Bienfaiteur'),('contact', 'Contact'), ('soutien','Soutien') ],'Statut', required=True, index=True) - date_contact_joomla=fields.Date(string='Date joomla de création du contact', readonly=True) + external_id=fields.Char('id') + statut_contact=fields.Selection([('adherent', 'Adhérent'), ('bienfaiteur', 'Bienfaiteur'),('contact', 'Contact'), ('soutien','Soutien') ],'Statut', required=True, index=True) + date_creation_contact=fields.Char(string='Date de création du contact', readonly=True) origine=fields.Selection([ - ('Boutique','Boutique'), - ('Visiteur','Visiteur'), - ('Vincennes','Vincennes'), - ('Bercy','Bercy'), - ('Salon Zen','Salon Zen'), - ('Autre','Autre'), - ('Internet Boutique','Internet Boutique'), - ('Conf M Ricard','Conf M Ricard'), - ('Visite lzr 09','Visite lzr 09'), - ('Retraite','Retraite'), - ('Amis','Amis'), - ('Centre FPMT','Centre FPMT'), - ('Site réservations','Site réservations'), - ('Réservations','Réservations'), - ('Voyage inde','Voyage inde'), - ('Internet','Internet'), - ('Librairie','Librairie'), - ('Site internet boutique','Site internet boutique'), - ('Portes ouvertes st cosme','Portes ouvertes st cosme'), - ('T','T'), + ('boutique','Boutique'), + ('visiteur','Visiteur'), + ('vincennes','Vincennes'), + ('bercy','Bercy'), + ('salon zen','Salon Zen'), + ('autre','Autre'), + ('internet boutique','Internet Boutique'), + ('conf M ricard','Conf M Ricard'), + ('visite lzr 09','Visite lzr 09'), + ('retraite','Retraite'), + ('amis','Amis'), + ('centre FPMT','Centre FPMT'), + ('site réservations','Site réservations'), + ('réservations','Réservations'), + ('voyage inde','Voyage inde'), + ('internet','Internet'), + ('librairie','Librairie'), + ('site internet boutique','Site internet boutique'), + ('portes ouvertes st cosme','Portes ouvertes st cosme'), + ('t','T'), ('maitreya','maitreya'), - ('Zen','Zen'), + ('zen','Zen'), ('Lille','Lille'), - ('Alan wallace','Alan wallace'), - ('Salon Rouen','Salon Rouen'), - ('Stage','Stage'), - ('B.Actualit','B.Actualit'), - ('B. Actualit','B. Actualit'), - ('R','R'), - ('Institut vy','Institut vy'), - ('Initiation kalachakr','Initiation kalachakr'), - ('Yoga','Yoga'), - ('Samsara','Samsara'), + ('alan wallace','Alan wallace'), + ('salon Rouen','Salon Rouen'), + ('stage','Stage'), + ('b.Actualit','B.Actualit'), + ('b. Actualit','B. Actualit'), + ('r','R'), + ('institut vy','Institut vy'), + ('initiation kalachakr','Initiation kalachakr'), + ('yoga','Yoga'), + ('samsara','Samsara'), ('missun@gmail.com','missun@gmail.com'), - ('Reliques','Reliques'), - ('Journal m','Journal m'), - ('Nantes','Nantes'), + ('reliques','Reliques'), + ('journal m','Journal m'), + ('nantes','Nantes'), ('retraite vipassana','retraite vipassana'), - ('Presse bouddhiste','Presse bouddhiste'), - ('Réservtions','Réservtions'), - ('Réservation','Réservation'), - ('Site','Site'), - ('Question mail','Question mail'), + ('presse bouddhiste','Presse bouddhiste'), + ('réservtions','Réservtions'), + ('réservation','Réservation'), + ('site','Site'), + ('question mail','Question mail'), ('interreligieux','interreligieux'), - ('Refuge','Refuge'), + ('refuge','Refuge'), ('zoom','zoom'), - ],'Origine', required=True, index=True) + ],'Origine', index=True) - date_adhesion=fields.Date(string='Date adhesion', readonly=True) \ No newline at end of file + date_adhesion=fields.Char(string='Date adhesion', readonly=True) \ No newline at end of file diff --git a/models/partnerimport.py b/models/partnerimport.py index 683abb2..0121388 100644 --- a/models/partnerimport.py +++ b/models/partnerimport.py @@ -1,9 +1,13 @@ from odoo import models, fields, api -from odoo.exceptions import UserError, ValidationError +from odoo.exceptions import UserError, ValidationError, Warning from psycopg2 import sql, DatabaseError from odoo.tools.safe_eval import safe_eval, datetime -from werkzeug import utils +from werkzeug import utils +import csv +import base64 +import io +import json @@ -11,15 +15,110 @@ class kalachakra_partnerdraftfile(models.Model): _name = 'kalachakra.partnerdraftfile' _description = 'draft partner file' - file= fields.Binary("Téléverser le fichier des contacts") + #file= fields.Binary("Téléverser le fichier des contacts") + file = fields.Binary("Attachment") file_name = fields.Char("Nom du fichier") active = fields.Boolean("actif") + source_name=fields.Char("Source") + def import_csv_files(self): + self.env["kalachakra.partnerdraft"].search([]).unlink() + files= self.env["kalachakra.partnerdraftfile"].search([('active','=',True)]) + #raise Warning('fff') + for f in files: + decrypted = base64.b64decode(f.file).decode('utf-8-sig') + source_name=f.source_name + with io.StringIO(decrypted) as fp: + reader = csv.DictReader(fp, delimiter=";", quotechar='"') + for row in reader: + vals={} + vals['source_name']=source_name + for key, value in row.items(): + + field_map=self.env['kalachakra.partnerdraftfile_mapping'].search([('external_field','=',key)]) + if field_map: + odoo_field=field_map.odoo_field + vals[odoo_field]=str(value) + + else: raise Warning('champ '+key+' non trouvé') + self.env['kalachakra.partnerdraft'].create(vals) + + #raise Warning(json.dumps(row)) + action = self.env.ref("kalachakra.kalachakra_partnerdraft_action").sudo().read([])[0] + + return action + + def transfert_draftpartner(self): + #transfert des contacts importés, dans la base des contact odoo + partners=self.env['kalachakra.partnerdraft'].search([]) + + if partners: + for p in partners: + vals={} + vals['name']=p.name + vals['company_type']='person' + vals['firstname']=p.firstname + + vals['source']=p.source_name + vals['street']=p.street + vals['street2']=p.street2 + vals['city']=p.city + vals['zip']=p.zip + vals['phone']=p.phone + vals['email']=p.email + vals['statut_contact']=p.statut_contact.lower() + vals['date_creation_contact']=p.date_creation_contact + vals['origine']=p.origine.lower() + vals['date_adhesion']=p.date_member + + + + + if p.country!='': + country=self.env['res.country'].search([('name','=',p.name)]) + if country:vals['country_id']=country.id + else:vals['country_id']=False + else: + vals['country_id']=False + + if p.title!='': + title=self.env['res.partner.title'].search([('name','=',p.title)]) + if title:vals['title']=title.id + else:vals['title']=False + else: + vals['title']=False + + + self.env['res.partner'].create(vals) + partners=self.env['kalachakra.partnerdraft'].search([]).unlink() + + + + + +class kalachakra_partnerdraftfile_mapping(models.Model): + _name = 'kalachakra.partnerdraftfile_mapping' + _description = 'file mapping' + + + external_field=fields.Char('external field') + odoo_field=fields.Selection('odoo_field_selection', string='odoo field') + + @api.model + def odoo_field_selection(self): + field_list=self.env['kalachakra.partnerdraft'].fields_get() + + result=[] + for key in field_list: + result.append((key,key)) + result.sort() + return result class kalachakra_partnerdraft(models.Model): _name = 'kalachakra.partnerdraft' _description = 'import draft partner' + _order = "id asc" - external_id=fields.Integer(string='external id') + external_id=fields.Char(string='external id') name=fields.Char(string='nom') firstname=fields.Char(string='prenom') title=fields.Char(string='civilité') @@ -31,7 +130,8 @@ class kalachakra_partnerdraft(models.Model): phone = fields.Char(string='tel') email = fields.Char(string='Email') statut_contact=fields.Char('Statut') - date_creation_contact=fields.Date(string='Date contact') + date_creation_contact=fields.Char(string='Date contact') origine=fields.Char(string='Origine') date_member=fields.Char(string='Date adhesion') doublon=fields.Boolean(string='Doublon') + source_name=fields.Char(string='Source') diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 1d5cb1f..9f354eb 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1,3 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_kalachakra_partnerdraft,kalachakra_partnerdraft,model_kalachakra_partnerdraft,donation.group_donation_manager,1,1,1,1 access_kalachakra_partnerdraftfile,kalachakra_partnerdraftfile,model_kalachakra_partnerdraftfile,donation.group_donation_manager,1,1,1,1 +access_kalachakra_partnerdraft_file_mapping,kalachakra_partnerdraft_file_mapping,model_kalachakra_partnerdraftfile_mapping,donation.group_donation_manager,1,1,1,1 \ No newline at end of file diff --git a/views/partner.xml b/views/partner.xml index d809677..15baae1 100644 --- a/views/partner.xml +++ b/views/partner.xml @@ -9,10 +9,11 @@ - - - - + + + + + @@ -40,6 +41,13 @@ + + file mapping + kalachakra.partnerdraftfile_mapping + tree,form + + + @@ -49,9 +57,18 @@ - + + + + + +