-
Dr.Dran
-
-
Offline
-
Gold Boarder
-
- Messaggi: 187
-
Karma: 0
-
|
Hum, non sono troppo daccordo, è vero che esite l'ORM ma è anche vero che bisogna un pò alla volta capire come funziona
Allora qui ti facico vedere parte dello scriptino che ho utilizzato:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Contact-import.py
#
# This program is based on the great work of Sean Boran
#
# Copyright 2010 Franco Tampieri <info@francotampieri.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
import xmlrpclib
import csv
import xlrd
## (Config) Legge i parmatri di configuraizone per connettersi ad OpenERP
import ConfigParser, os
config = ConfigParser.ConfigParser()
config.read(['openerp.cfg', os.path.expanduser('~/.openerp.cfg')])
## (Debug) Stampa i parametri di configurazione
print config.items('dbaccess')
db = config.get('dbaccess','db')
username = config.get('dbaccess','username')
pwd = config.get('dbaccess','pwd')
host = config.get('dbaccess','host')
port = config.getint('dbaccess','port')
## (Config) Predispongo la configurazione per la connessione xml-RPC
sock_common = xmlrpclib.ServerProxy('http://%s:%d/xmlrpc/common' % (host, port))
uid = sock_common.login(db, username, pwd)
sock = xmlrpclib.ServerProxy('http://%s:%d/xmlrpc/object' % (host, port))
## Creo il file csv di esportazione per la tabella di relazione fra categorie e partner
writer = csv.writer(open('relazionecategorie.csv', 'wb'), delimiter=',')
writer.writerow( ('partner_id', 'category_id') )
## Crea la Categoria principale
dcontatti = { 'name': 'Mailing List Estero',
'active': 1,
}
idcontatti = sock.execute(db, uid, pwd, 'res.partner.category', 'create', dcontatti)
reader = csv.reader(file('Categorie_MLEstero.csv').readlines(), delimiter=',')
## Aggiunge una sigla ad ogni sottocategoria (Serve per non confondersi inizialmente con
## le gategorie omonime ma presenti in altre categorie principali)
for row in reader:
sigla = "mle"
nomecategoria = sigla+row[0]
dccontatti = { 'name': nomecategoria,
'parent_id': idcontatti,
'active': 1,
}
idccontatti = sock.execute(db, uid, pwd, 'res.partner.category', 'create', dccontatti)
## Apre il file excel con l'elenco dei contetti, per fare una importazione raw dei dati
wbcontatti = xlrd.open_workbook("mailing-estero.xls")
sh = wbcontatti.sheet_by_index(0)
## Inizia a fare l'inserimento e la creazione dei partner
for rownum in range(sh.nrows):
if sh.cell_value(rownum,5)=='':
nome_persona_azienda=sh.cell_value(rownum,0)+' '+sh.cell_value(rownum,1)+' '+sh.cell_value(rownum,2)+' '+sh.cell_value(rownum,3)
else:
nome_persona_azienda=sh.cell_value(rownum,0)+' '+sh.cell_value(rownum,1)+' '+sh.cell_value(rownum,2)+' '+sh.cell_value(rownum,3)+' Azienda: '+sh.cell_value(rownum,5)
partner = {'name': nome_persona_azienda,
'comment': sh.cell_value(rownum,67),
'website': sh.cell_value(rownum,69),
'supplier': 0,
'customer': 1,
'active': 1,
}
partner_id = sock.execute(db, uid, pwd, 'res.partner', 'create', partner)
citta_partner=sh.cell_value(rownum,11)+' '+sh.cell_value(rownum,12)+' '+sh.cell_value(rownum,14)
telefono = sh.cell_value(rownum,31)+' '+sh.cell_value(rownum,40)
address = {'partner_id': partner_id,
'type': 'default',
'street': sh.cell_value(rownum,8),
'zip': sh.cell_value(rownum,13),
'city': citta_partner,
'phone': telefono,
'fax': sh.cell_value(rownum,30),
'email':sh.cell_value(rownum,71),
'mobile':sh.cell_value(rownum,40),
}
sock.execute(db, uid, pwd, 'res.partner.address', 'create', address)
## Visualizza l'id del partner
print 'Questo è il numero id del partner = ',partner_id
sigla='mle'
sigla=sigla+sh.cell_value(rownum,51)
print 'Questa è la sigla del gruppo associato numero id del partner = ',sigla
category_id = sock.execute(db, uid, pwd, 'res.partner.category', 'search', [('name', 'ilike', sigla)])
print 'Questo è il numero id della categoria = ',category_id
## Creo il file di esportazione per la tabella di collegamento fra partner e gruppi
writer.writerow( (partner_id, category_id) )
Come puoi bene vedere si basa sulle impostazioni e sui link che mi hai fornito, il problema è che non sono riuscito a capire come creare la relazione many-to-many mediante l'interfaccia XML-RPC, ho provato a mettere il client in debug, ma ho visto che vengono fatte una seri edi letture, quindi ho fatto in altro modo (direi molto sporco).
Mi farebbe comodo capire come inserire una relazione del tipo tramite comandi xml-rpc.
Ah fra l'altro (a sottolineare che è importante conoscere la struttura del db e dell'ORM) è necessario fare l'importazione dare una occhiata a come sono strutturate le tabelle e capirne le relazioni. (scusa se sono pedante, ma da questa cosa non mi smuovo facilmente )
Comunque by the way mi sono tirato giù anche il codice del progetto ETL, anche se un bel pò spartano rappresenta una bella sfida
Grazie comunque Paleo per le dritte,ma ci ho già sbattuto la testa, ora provo pesantemente in debug, debbo capire
|