From 5ce9482ac42a337f195c9e5e0f87329d9223ca39 Mon Sep 17 00:00:00 2001 From: wdvargas Date: Mon, 10 Mar 2025 16:45:01 +0000 Subject: [PATCH] Se agrega script para crear atributos y valores desde drive --- create_AttributesValues_DriveToOdoo.py | 65 ++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 create_AttributesValues_DriveToOdoo.py diff --git a/create_AttributesValues_DriveToOdoo.py b/create_AttributesValues_DriveToOdoo.py new file mode 100644 index 0000000..2d4526c --- /dev/null +++ b/create_AttributesValues_DriveToOdoo.py @@ -0,0 +1,65 @@ +import os +import odooly +import argparse +import pygsheets +import pandas as pd + +def create_values(attribute, df_attributes, odoo_value, values): + values_attribute = list(set(df_attributes.to_list())) + values_attribute.remove('') if '' in values_attribute else values_attribute + + for value in values_attribute: + value_exist = list(filter(lambda l: l.get('name') == str(value) and l.get('attribute_id')[1] == attribute.get('name'), values)) + + if value_exist: + continue + new_value = odoo_value.create({ + 'name': str(value), + 'attribute_id': attribute.get('id') + }) + print(f'El valor: {str(new_value.name)}, ha sido creado en el atributo: {new_value.attribute_id}') + +def main(odoo, filename, args): + + gc = pygsheets.authorize(service_file=os.path.expanduser('config/0a4abc985039aa.json')) # llave de credenciales para la api + ss = gc.open(filename) # Acceder al archivo + ws = ss.worksheet_by_title('Atributos') # Ingresa a la hoja especifica + df = ws.get_as_df(start=args.primer_atributo, end=args.ultimo_atributo) # Definir el rango de columnas que contienen los atributos !!!! Importante ¡¡¡¡¡¡¡ + attributes = list(df.columns) # Obtiene solo los atributos (Titulos) + + # Consulta los atributos y valores creados en Odoo + + Attribute = odoo.env['product.attribute'] + Value = odoo.env['product.attribute.value'] + odoo_attribute = Attribute.search_read([], ['id', 'name']) + odoo_value = Value.search_read([], ['id', 'name', 'attribute_id']) + + #Recorre cada atributo y a su vez los valores, en caso de que no existan los crea + + for attribute in attributes: + exist_attribute = list(filter(lambda l: l.get('name') == attribute, odoo_attribute)) + if not exist_attribute: + attribute_new = Attribute.create({'name': attribute}) + exist_attribute.append({'id': attribute_new.id, 'name': attribute_new.name}) + print(f'Nuevo atributo: {attribute}, creado en odoo') + if len(exist_attribute) > 1: + print(f'El atributo {exist_attribute} tiene mas de un registro duplicado') + continue + + values_odoo = list(filter(lambda l: l.get('attribute_id')[1] == attribute, odoo_value)) + create_values(exist_attribute[0], df[attribute], Value, values_odoo) + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description='Crear Atributos y Valores de Drive a Odoo.') + parser.add_argument('--primer_atributo', required=True, help='Primera Celda donde se lee los atributos, Ejem: G1') + parser.add_argument('--ultimo_atributo', required=True, help='Ultima Celda donde se lee los atributos, Ejem: R') + args = parser.parse_args() + + filename = 'Maestro de Productos' + + # Valida las credenciales del usuario y determina el servicio a conectarse + + odooly.Client._config_file = os.path.expanduser('config/odooly.ini') + odoo = odooly.Client.from_config('odootest25') + main(odoo, filename, args)