You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

199 lines
7.6 KiB

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 opendons_partnerdraftfile(models.Model):
_name = 'opendons.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["opendons.partnerdraft"].search([]).unlink()
files= self.env["opendons.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['opendons.partnerdraftfile_mapping'].search([('external_field','=',key)])
if field_map:
odoo_field=field_map.odoo_field
vals[odoo_field]=str(value)
else: raise Warning('champ '+str(key)+' non trouvé')
self.env['opendons.partnerdraft'].create(vals)
#raise Warning(json.dumps(row))
action = self.env.ref("opendons.opendons_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['opendons.partnerdraft'].search([])
fields=self.env['opendons.partnerdraftfile_mapping'].search([])
if partners:
for p in partners:
vals={}
for f in fields:
if f.partner_field=='country_id':
if p[f.odoo_field]!='':
country=self.env['res.country'].search([('name','=',p[f.odoo_field])])
if country:vals[f.partner_field]=country.id
else:vals[f.partner_field]=False
elif f.partner_field=='title':
if p[f.odoo_field]!='':
title=self.env['res.partner.title'].search([('name','=',p[f.odoo_field])])
if title:vals[f.partner_field]=title.id
else:vals[f.partner_field]=False
else:
vals[f.partner_field]=False
elif f.partner_field in ('origine','statut_contact'):
if p[f.odoo_field]!=False:
vals[f.partner_field]=p[f.odoo_field].lower()
else:
vals[f.partner_field]=p[f.odoo_field]
vals['company_type']='person'
self.env['res.partner'].create(vals)
partners=self.env['opendons.partnerdraft'].search([]).unlink()
class opendons_partnerdraftfile_mapping(models.Model):
_name = 'opendons.partnerdraftfile_mapping'
_description = 'file mapping'
external_field=fields.Char('external field')
odoo_field=fields.Selection('odoo_field_selection', string='odoo field')
partner_field=fields.Selection('partner_field_selection', string='partner field')
@api.model
def odoo_field_selection(self):
field_list=self.env['opendons.partnerdraft'].fields_get()
result=[]
for key in field_list:
result.append((key,key))
result.sort()
return result
api.model
def partner_field_selection(self):
field_list=self.env['res.partner'].fields_get()
result=[]
for key in field_list:
result.append((key,key))
result.sort()
return result
class opendons_partnerdraft(models.Model):
_name = 'opendons.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')
class partner(models.Model):
_inherit = 'res.partner'
external_id=fields.Char('id')
statut_contact=fields.Selection([('adhérent', 'Adhérent'), ('bienfaiteur', 'Bienfaiteur'),('contact', 'Contact'), ('soutien','Soutien') ],'Statut', 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'),
('maitreya','maitreya'),
('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'),
('missun@gmail.com','missun@gmail.com'),
('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'),
('interreligieux','interreligieux'),
('refuge','Refuge'),
('zoom','zoom'),
('contact','contact'),
],'Origine', index=True)
date_adhesion=fields.Char(string='Date adhesion', readonly=True)