import xmlrpc.client url = 'http://localhost:16001' db = 'hazard_new' username = 'admin' password = '123' try: common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url)) uid = common.authenticate(db, username, 'admin', {}) models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url)) print("Iniciando creación de datos de prueba...") # 1. Buscar IDs de Categorías cat_insumo = models.execute_kw(db, uid, 'admin', 'product.category', 'search', [[['name', '=', 'Insumos / Materia Prima']]]) cat_custom = models.execute_kw(db, uid, 'admin', 'product.category', 'search', [[['name', '=', 'Producto Final Custom']]]) if not cat_insumo or not cat_custom: print("Error: No se encontraron las categorías. ¿Se ejecutó el paso 2?") exit(1) cat_insumo_id = cat_insumo[0] cat_custom_id = cat_custom[0] # 2. Crear Partners vendor_id = models.execute_kw(db, uid, 'admin', 'res.partner', 'create', [{ 'name': 'Fábrica China Test', 'is_company': True, 'supplier_rank': 1, }]) print("Vendor creado:", vendor_id) client_id = models.execute_kw(db, uid, 'admin', 'res.partner', 'create', [{ 'name': 'Club de Golf Test', 'is_company': True, 'customer_rank': 1, }]) print("Cliente creado:", client_id) # 3. Crear Productos insumo_id = models.execute_kw(db, uid, 'admin', 'product.product', 'create', [{ 'name': 'Tela Azul Premium (Test)', 'type': 'product', 'categ_id': cat_insumo_id, 'uom_id': 1, # Unidades 'uom_po_id': 1, 'standard_price': 50.0, }]) print("Insumo creado:", insumo_id) # Para el producto final, creamos primero la línea de proveedor (seller) seller_id = models.execute_kw(db, uid, 'admin', 'product.supplierinfo', 'create', [{ 'partner_id': vendor_id, 'price': 250.0, # Costo de maquila 'delay': 7, }]) product_id = models.execute_kw(db, uid, 'admin', 'product.product', 'create', [{ 'name': 'Camisa Custom Club de Golf (Test)', 'type': 'product', 'categ_id': cat_custom_id, 'list_price': 800.0, # Precio de venta 'seller_ids': [(4, seller_id)], }]) print("Producto Final creado:", product_id) # Obtener el product_tmpl_id para la BoM prod_data = models.execute_kw(db, uid, 'admin', 'product.product', 'read', [[product_id]], {'fields': ['product_tmpl_id']}) tmpl_id = prod_data[0]['product_tmpl_id'][0] # 4. Crear BoM de Subcontratación bom_id = models.execute_kw(db, uid, 'admin', 'mrp.bom', 'create', [{ 'product_tmpl_id': tmpl_id, 'type': 'subcontract', 'subcontractor_ids': [(4, vendor_id)], 'bom_line_ids': [ (0, 0, { 'product_id': insumo_id, 'product_qty': 1.5, }) ] }]) print("Lista de Materiales (BoM) creada:", bom_id) # 5. Agregar Inventario Inicial (100 unidades de Tela) wh_stock = models.execute_kw(db, uid, 'admin', 'stock.location', 'search', [[['usage', '=', 'internal'], ['name', '=', 'Stock']]]) if wh_stock: quant_id = models.execute_kw(db, uid, 'admin', 'stock.quant', 'create', [{ 'product_id': insumo_id, 'location_id': wh_stock[0], 'inventory_quantity': 100.0, }]) models.execute_kw(db, uid, 'admin', 'stock.quant', 'action_apply_inventory', [[quant_id]]) print("Inventario de Tela agregado (100 uds).") # 6. Crear Cotización (SO) so_id = models.execute_kw(db, uid, 'admin', 'sale.order', 'create', [{ 'partner_id': client_id, 'order_line': [ (0, 0, { 'product_id': product_id, 'product_uom_qty': 5.0, }) ] }]) print("Cotización de Venta Creada:", so_id) # 7. Crear Orden de Compra (PO) po_id = models.execute_kw(db, uid, 'admin', 'purchase.order', 'create', [{ 'partner_id': vendor_id, 'order_line': [ (0, 0, { 'product_id': product_id, 'product_qty': 5.0, 'price_unit': 250.0, }) ] }]) print("Orden de Compra Creada:", po_id) print("--- ¡Datos de prueba creados exitosamente! ---") except Exception as e: print("Error general:", e)