#!/usr/bin/python
# -*- encoding: utf-8 -*-
import csv, string, sys

# o comando deve ser corrido da seguinte forma
# python csv2xml.py file_in.csv file_out.xml modelo
#o nome do cabeçalho do csv tem que ser os mesmos da tabela

file_in = sys.argv[1]
file_out = sys.argv[2]
modelo = sys.argv[3]

print '\n file_in: '+ str(file_in)
print '\n file_out: '+ str(file_out)
print '\n modelo: '+ str(modelo)

#função que formata o ID
def prepara_id(id):
	unsafe_chars = "ãõçéèóòáàÇôâêÊÂÔÕÃíÌÍìúùÚÙÁÀ.:;"
	alt_chars = "aoceeooaaCoaeEAOOAiIIiuuUUAA___"
	#alt_chars = "AAiIIiAOOAEeaoCaaooeecoauuUU"
	table = string.maketrans(unsafe_chars, alt_chars)
	id_ok=id.translate(table)
	id_ok=id_ok.replace(' ','')
	return id_ok

#formatação dos numeros substitui virgulas por ponto
def formata_numero(numero):
	out=numero.replace(',','.')
	#out=unicode(out,'utf8')
	return out

#função procurar que separa o conteudo modelo, campo, valor
def separa_string(linha):
    search=str(linha).split(':')
    return search[1], search[2], search[3]
    
def separa_string2(linha):
    search=str(linha).split(':')
    return search[0], search[1]


#############################  CITA data import #####################################
#cria na memória o arquivo xml em modo de escrita
log=open('log.txt','w')
log.write('#################Log de erros############\n')

x=open (file_out,'w')
#x=open ('ccis_data.xml','w')
x.write('<?xml version="1.0" encoding="utf-8"?>\n')
#Estrutura de xml para o openERP
x.write('<openerp>\n')
x.write('    <data noupdate="0">\n')

#leitura do ficheiro csv

reader = csv.DictReader(open(file_in), delimiter=';')
#variavel temporario
i = 1
for linha in reader:
    #print 'modelo=%s id=%s\n'%(modelo,"name")
    
    x.write('        <record id="%s"  model="%s" >\n'%(linha['id'],modelo))
    for chave in linha.keys():
        #print 'chave: ' + str(linha[chave])[0:6]
	try:
		if str(linha[chave])[0:6]=="search":
		    model, campo, valor = separa_string(linha[chave])
		    x.write('                <field name="%s" model="%s" search="[(' %(chave, model) + "'%s','=','%s')]" %(campo, valor) + '"></field>\n')
		elif chave == 'parent_id':
		    #print '<field name="%s" %s></field>\n'%(chave, prepara_id(linha[chave]))
		    if str(linha[chave])[0:3] == 'ref':
		    	campo, valor = separa_string2(linha[chave])
		    	x.write('                <field ref="%s" name="%s"></field>\n'%(valor, chave))
		    #x.write('                <field name="%s" %s></field>\n'%(chave, prepara_id(linha[chave])))
		elif str(linha[chave])[0:4]=="eval":
		    x.write('                <field name="%s" %s></field>\n'%(chave, prepara_id(linha[chave])))
		elif chave=="user_type":
		    x.write('                <field name="%s" %s/>\n'%(chave,linha[chave]))
		elif str(linha[chave])=="" or chave=='id':
		    #log.write('Chave:[%s valor:%s]\n'%(chave, linha[chave]))
		    pass 
		else:
		    x.write('                <field name="%s" >%s</field>\n'%(chave, linha[chave]))
	except:
		log.write('Chave:[%s valor:%s]\n'%(chave, linha[chave]))
    i+=1 
    x.write('        </record>\n')    
x.write('    </data>\n')
x.write('</openerp>\n')
x.close()

################################

log.close()
