Aqui dejo los ejemplos que tengo para importar datos de foma masiva.
Antonio, vos me comentas que haga algo como lo que adjunte ?
Saludos
Saludos
El martes, 8 de marzo de 2016, 6:21:42 (UTC-3), Antonio Roncero escribió:
>
>
>
> El miércoles, 2 de marzo de 2016, 19:48:47 (UTC), Lucas Riccombene
> escribió:
>>
>> Si es muy buena idea . Es que no se hacer un script soy nuevo en esto de
>> tryton. Tengo un script para Entidades "clientes" y uno para Productos
>> pero aun no entiendo bien como es la onda para programarlos.
>> Puedo intercambiar el script de Producto o Entidades por el de lista de
>> precios por productos y sus formulas
>>
>>
> Con proteus [1] puedes trabajar con cualquier objeto de Tryton. Aqui un
> ejemplo [2] para importar desde csv y un ejemplo con list_price
>
> >>> PriceList = Model.get('product.price_list')
> >>> price_list = PriceList(name='Retail')
> >>> price_list_line = price_list.lines.new()
> >>> price_list_line.quantity = 10.0
> >>> price_list_line.product = product
> >>> price_list_line.formula = 'unit_price * 0.7'
> >>> price_list.save()
>
>
>
>
> [1]
> http://videos.tryton.org/tuba2015/NicolasEvrard-ANewbieIntroductionToProteus.html
> [2]
> http://javivf.alasombra.net/blog/2013/06/importar-datos-a-tryton-usando-proteus-desde-csv
>
>
>> Saludos
>>
>> El miércoles, 2 de marzo de 2016, 15:06:27 (UTC-3), Antonio Roncero
>> escribió:
>>>
>>>
>>>
>>> El miércoles, 2 de marzo de 2016, 17:34:25 (UTC), Lucas Riccombene
>>> escribió:
>>>>
>>>> Hola Jordi, las eh podido eliminar por aparecieron en la vista :) pero
>>>> no te imaginas de que manera fui al formulario de ventas y modifique el
>>>> nombre de una de las lista que no se mostraban y la guarde eso hizo que se
>>>> muestren en la grilla de lista de descuento. Asi que solucionado el tema
>>>> de
>>>> eliminar ahora me pregunto porque no las actualiza?
>>>> NO se pueden actualizar las debo cargar enteras tengo veintiún mil
>>>> artículos por lista de precio seria una locura cargar todos si modifico
>>>> solo quinientos?
>>>>
>>>> ¿Te has planteado hacer un script? A lo mejor es un poco mas de trabajo
>>> al principio pero luego podrias automatizar esa tarea si se repite muy a
>>> menudo.
>>>
>>>
>>>>
>>>>
>>>> El miércoles, 2 de marzo de 2016, 14:23:32 (UTC-3), Lucas Riccombene
>>>> escribió:
>>>>>
>>>>> Hola Jordi Esteve, eh realizado la modificación que indicas y me
>>>>> sale un mensaje de error que no puede detectar la columna pero ese
>>>>> inconveniente lo pude solucionar llamando la columna Líneas/Producto.
>>>>> Pero me genero un problema mas grande
>>>>> Que paso a contar me informa que se agrego con correctamente la lista
>>>>> de precios y no la veo desde el formulario de lista de precio pero si la
>>>>> veo en el formulario de venta en combo que se seleccionan las lista de
>>>>> precios lo cual es un problema porque ahora no las puedo borrar modificar
>>>>> adjunto imágenes donde muestra esta situación actual
>>>>>
>>>>> Alguna idea de como borrar las lista de precios que se ven desde
>>>>> ventas y no desde klista de precios?
>>>>> Lo extraño es que me deja importar varias listas de precios con los
>>>>> mismo nombres eso creo que esta mal ? No me actualiza las lista precios
>>>>> solo crea nueva listas :(
>>>>> Saludos
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> El miércoles, 2 de marzo de 2016, 13:08:21 (UTC-3), Jordi Esteve
>>>>> (Zikzakmedia) escribió:
>>>>>>
>>>>>> El 02/03/16 a les 16:57, Lucas Riccombene ha escrit:
>>>>>> > Hola Comunidad estoy trabajando con tryton 3.4 utilizando el modulo
>>>>>> > lista de precios y no puedo importar las lista de precios que
>>>>>> exporte
>>>>>> > de tryton.
>>>>>> > agrego imagen con la lista de precios, el .csv genero tryton .
>>>>>> > Paso que realizo
>>>>>> > 1 exporta de tryton las columnas (nombre, producto/nombre, formula)
>>>>>> > 2 guardo la exportacion
>>>>>> > 3 importo y no me detecta las columnas y si las selecciono a mano
>>>>>> me
>>>>>> > genera un error
>>>>>> >
>>>>>> > Consulta hay manera hay manera de importar lista de precios
>>>>>> detalladas
>>>>>> > por producto con su formula
>>>>>> >
>>>>>>
>>>>>> Yo diría que a la tercera columna le sobra la palabra Código, pues
>>>>>> esa
>>>>>> columna debe ser Producto a secas, las líneas de tarifa tienen el
>>>>>> campo
>>>>>> Producto (tryton ya te buscará el producto a partir del código o del
>>>>>> nombre o de lo que sea). O sea:
>>>>>>
>>>>>> Nombre,Líneas/Fórmula,Producto
>>>>>> lista 1,product.cost_price * 2.2,19889
>>>>>> ,product.cost_price * 2.2,92064
>>>>>> lista 2,product.cost_price * 2.0,92064
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Jordi Esteve
>>>>>> Consultor Zikzakmedia SL
>>>>>> [email protected]
>>>>>> Mòbil 679 170 693
>>>>>>
>>>>>> Zikzakmedia SL
>>>>>> St. Jaume, 9, baixos, 2a
>>>>>> 08720 Vilafranca del Penedès
>>>>>> Tel 93 890 2108
>>>>>>
>>>>>># coding=utf-8
#Copyright (C) 2014 ARATA, FRANCISCO JOSÉ – MONTAGNA AGUSTIN FRANCISCO
#Permission is granted to copy, distribute and/or modify this document under
#the terms of the GNU Free Documentation License, Version 1.3 or any later
#version published by the Free Software Foundation; with no Invariant
#Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the
#license is included in the section entitled "GNU Free Documentation
#License".
import random
from random import randrange
import os
import binascii
from datetime import datetime, timedelta
from proteus import config, Model, Wizard
import csv
config = config.set_trytond(database='prueba', language='es_ES', password='admin',
config_file='/home/bernalhnos/trytond.conf')
Party = Model.get('party.party')
Category = Model.get('party.category')
Address = Model.get ('party.address')
Contact = Model.get ('party.contact_mechanism')
Country = Model.get('country.country')
Lang = Model.get('ir.lang')
def PopulateDb():
# Funciones para leer desde archivo csv
archivo = 'MaestroEntidades.csv' #Ingrese el nombre de su archivo CSV (Debe estar en el mismo directorio que el script)
Lector = csv.reader(open(archivo, 'rb'))
inicio=int(input("INGRESE el NUMERO DE FILA EN LA QUE QUIERE COMENZAR A PROCESAR LA PLANILLA"))
if (inicio == 1): inicio = 2 #para evitar la cabezera del CSV
for i in range(inicio - 1):
Lector.next()
for index,row in enumerate(Lector):
Nombre = row[0]
Contacto = row[2]
Calle = row[3]
CalleBis = row[4]
Activo=row[5]
Factura=row[6]
Envio=row[7]
CodigoP = row[8]
Ciudad = row[9]
Pais = row[11]
Subdivicion = row[12]
Telefono = row[13]
Fax = row[14]
email=row[15]
Categoria = row[16]
CUIT=row[18]
CondIVA=row[17]
#VALIDAR CUIT
cuit=str(CUIT)
if(Envio=='1'):
envio=True
if(Factura=='1'):
factura=True
fila=inicio+index
print ("PROCESANDO FILA:",fila, Nombre, Contacto)
party = Party()
party.name=Nombre
if(Activo=='0'):
party.active = False
if CUIT != '':
party.vat_country='AR'
party.vat_number=(CUIT.replace("-","")).replace(' ','') #Validacion ingreso de - o / en el cuit
party.addresses.pop()
(coun,) = Country.find([('code', '=', 'AR')])
address = party.addresses.new(name=Contacto,street=Calle,streetbis=CalleBis, zip=CodigoP, country=coun,delivery=envio,invoice=factura,city=Ciudad)
(es,) = Lang.find([('code', '=', 'es_AR')])
party.lang = es
if(CondIVA == 'Responsable Inscripto'):
party.iva_condition='responsable_inscripto'
if(CondIVA == 'Exento'):
party.iva_condition='exento'
if(CondIVA == 'Consumidor Final'):
party.iva_condition='consumidor_final'
if(CondIVA == 'Monotributo'):
party.iva_condition='monotributo'
if(CondIVA == 'No alcanzado'):
party.iva_condition='no_alcanzado'
if (Telefono != ''):
contactmecanism = party.contact_mechanisms.new(type='phone', value=Telefono)
if (Fax != ''):
contactmecanism = party.contact_mechanisms.new(type='fax', value=Fax)
if (email != ''):
contactmecanism = party.contact_mechanisms.new(type='email', value=email)
(cat,) = Category.find([('name', '=', Categoria)])
party.categories.append(cat)
if (Factura=='1'):
party.invoice = True
party.save()
print "Creado"
if __name__ == "__main__":
PopulateDb()
print "Carga Masiva Entidades FINALIZADA"
#! /usr/bin/python
# coding=utf-8
#Copyright (C) 2014 ARATA, FRANCISCO JOSÉ – MONTAGNA AGUSTIN FRANCISCO
#Permission is granted to copy, distribute and/or modify this document under
#the terms of the GNU Free Documentation License, Version 1.3 or any later
#version published by the Free Software Foundation; with no Invariant
#Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the
#license is included in the section entitled "GNU Free Documentation
#License".
import random
from random import randrange
import os
import binascii
from datetime import datetime, timedelta
from proteus import config, Model, Wizard
from decimal import Decimal
import csv
from decimal import Decimal
import time
config = config.set_trytond(database='prueba', language='es_ES.UTF-8', password='admin',
config_file='/home/bernalhnos/trytond.conf')
Party = Model.get('party.party')
Category = Model.get('party.category')
Address = Model.get('party.address')
Contact = Model.get('party.contact_mechanism')
Country = Model.get('country.country')
Lang = Model.get('ir.lang')
Product = Model.get('product.product')
ProductTemplate = Model.get('product.template')
Category = Model.get('product.category')
ProductUom = Model.get('product.uom')
ProductSupplier = Model.get('purchase.product_supplier')
unit, = ProductUom.find([('symbol', '=', 'u')])
def PopulateDb():
#Leo Archivo CSV Con Los Productos
archivo = '/home/bernalhnos/Descargas/MaestroProductos.csv' #Ingrese el nombre de su archivo CSV (Debe estar en el mismo directorio que el script)
Lector = csv.reader(open(archivo, 'rb'))
inicio=int(input("INGRESE el NUMERO DE FILA EN LA QUE QUIERE COMENZAR A PROCESAR LA PLANILLA"))
if (inicio == 1): inicio = 2
for i in range(inicio - 1):
Lector.next()
for index,row in enumerate(Lector):
party = Party()
PS = ProductSupplier()
pt = ProductTemplate()
product = Product()
#Lprovedor = row[2]
pt.name = row[3]
nombreproducto=row[3]
Codigo=row[4]
tipo = row[5]
Categoria = row[6]
UnidadDefault=row[7]
UnidadCompra=row[8]
UnidadVenta=row[9]
Plista = row[10]
Pcosto=row[11]
comprable=row[12]
vendible=row[13]
Descripcion = row[14]
cuentaporcategoria = row[17]
fila=inicio+index
print ("PROCESANDO FILA:",fila, nombreproducto, Codigo)
costo = float(Pcosto.replace(',', '.')) #Me Convierte la , en . como separador decimal
lista = float(Plista.replace(',', '.')) #Me Convierte la , en . como separador decimal
pt.cost_price = Decimal(costo).quantize(Decimal('.001')) #Redondeo
pt.list_price = Decimal(lista).quantize(Decimal('.001')) #Redondeo
if len(Category.find([('name', '=', Categoria)])) == 1:
category, = Category.find([('name', '=', Categoria)])
pt.category = category
pt.default_uom = unit
if tipo != '':
if tipo == 'Bienes':
pt.type = 'goods'
if tipo == 'Servicios':
pt.type = 'service'
if (comprable == '1'):
pt.purchasable = True
else:
pt.purchasable = False
if (vendible == '1'):
pt.salable = True
else:
pt.salable = False
if (comprable=='0' and vendible=='0' and cuentaporcategoria=='0'):
pt.account_category = False
else:
pt.account_category = True
pt.taxes_category = True
pt.save()
if len(product.find([('name', '=',nombreproducto)])) == 1:
pd, = product.find([('name', '=',nombreproducto)])
pd.description = Descripcion
pd.code=Codigo
pd.save()
print "Creado"
#product.template = pt
#product.save()
#time.sleep(1)
if __name__ == "__main__":
PopulateDb()
print "Carga Masiva Productos FINALIZADA"