from odoo import models, fields, api 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 import csv import base64 import io import json 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("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.Char(string='external id') # name=fields.Char(string='nom') # firstname=fields.Char(string='prenom') # title=fields.Char(string='civilité') # street = fields.Char(string='adresse') # street2 = fields.Char(string='adresse2') # city = fields.Char(string='ville') # country = fields.Char(string='pays') # zip = fields.Char(string='code postal') # phone = fields.Char(string='tel') # email = fields.Char(string='Email') # statut_contact=fields.Char('Statut') # 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')