Como actualizar precios con un archivo de texto

17 de junio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Anda a saber porque motivos tuvimos que desarrollar un módulo que permite actualizar los precios en base a los contenidos de un archivo CSV. Podría haber sido en base a un archivo Excel... pero bueno, terminó siendo CSV por las circumstancias. Este módulo lo pueden descargar de nuestro repositorio y se llama upload_product_prices.

Como funciona? Este módulo trabaja asumiendo que la estructura del archivo tiene tres columnas:

  • código del artículo: para mapearlo con el campo default_code
  • precio de ventas del artículo: para mapearlo con el campo list_price
  • costo del artículo: para mapearlo con el campo standard_price

Tambien se agrega un menu en la aplicación de Ventas, al que se puede acceder mediante Ventas > Productos > Archivos de precios



Que presenta una lista de objetos, cada uno almacenando un archivo que se utilizó para actualizar los precios y costos
 



Aqui creamos un nuevo registro y procedemos a darle un nombre y seleccionar el archivo a procesar. Seguidamente se deberá clickear procesar para actualizar los costos/precios:



Una vez procesado, el archivo completa no solo los datos de los productos a procesar, sino ademas completa dos campos: los contenidos del archivo y las lineas no procesadas. Por que esto? Se necesita una auditoría de cada actualización de precios y costos. Estas actualizaciones quedan a modo de registro. 

Los motivos por los cuales no se pueden actualizar los precios de los artículos son: 

  • código de producto inexistente
  • costo con mal formato (por ejemplo caracteres en lugar de números)
  • precio de venta mal formado.



    Por que usar este módulo en lugar de usar las facilidades de Odoo para importar archivo? 
  • Los usuarios no tienen la disciplina necesaria para hacer bien una acción repetitiva mediante el wizard de importación. Esperar que los usuarios importen bien un archivo decenas de veces, es un punto de vista muy optimista sobre la raza humana
  • Uno necesita tener un log de auditoría de los cambios a los precios de los productos. Quiza no es perfecto, pero este módulo es un avance en ese sentido

Notas técnicas

El primer punto interesante de destacar es como hace el módulo para leer los contenidos de un campo binario, y procesarlos como si fuesen las líneas de un archivo CSV

        self.file_content = base64.decodestring(self.product_file)
lines = self.file_content.split('\n')
for line in lines:
lista = line.split(self.delimiter)

Como podrán ver, primero se lee los contenidos del campo binario y se lo transforma a texto, y luego se los separa en líneas (chequeando el separador \n). Seguidamente, se separa cada una de las líneas en columnas utilizando el comando split (que permite generar una lista a partir de un string)

lista = line.split(self.delimiter)

Luego lo que hacemos es asignar cada una de las columnas a la variable correspondiente, buscar el producto y lo actualiza. Si no puede actualizar el producto (porque no lo encuentra o el precio/costo está mal formado) loguea el error. 


Gustavo Orrillo 17 de junio de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario