如何在Odoo 15.2中通过XML-RPC为租赁订单创建发票
Odoo 15.2 租赁订单XML-RPC创建发票方案
我在Odoo 15.2中有一个租赁对象,尝试通过XML-RPC以编程方式为租赁订单创建发票。我看到顶部有一个“Create Invoice”按钮,hover时显示以下信息:Object: sale.order, Modifiers: {"invisible":[["invoice_status","=","to invoice"]]}, Button type: action, Action ID: 296
是否可以像以下通过execute_kw方法验证采购订单那样,用XML-RPC创建发票?
# 验证采购订单 execute_kw('purchase.order', 'button_confirm', [purchase_order_id]) # 如何通过Odoo XML-RPC为销售订单创建发票? execute_kw('account.invoice', '???????', [purchase_order_id])
我需要了解如何在Odoo 15.2中通过XML-RPC为租赁订单创建发票,以及应调用的具体方法或操作,恳请帮助!
补充解决方案(适用于Odoo 17 SaaS)
给搜索的用户参考:已通过以下代码实现需求,希望能帮助社区。
@app.route('/createInvoice', methods=['POST']) def createInvoice(): try: models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url)) data = request.get_json() if not data: return jsonify({'message': '未接收到数据。'}), 400 sale_order_id = int(data.get('sale_order_id')) product_id = int(data.get('product_variant_id')) if not sale_order_id or not product_id: return jsonify({'message': '输入数据无效。'}), 400 # 获取销售订单相关数据 sale_order_data = models.execute_kw(db, uid, password, 'sale.order', 'read', [sale_order_id], {'fields': ['partner_id', 'invoice_status', 'name', 'order_line', 'picking_ids']}) if not sale_order_data: return jsonify({'message': '未找到销售订单。'}), 404 invoice_id = None # 遍历销售订单关联的所有拣货单 for picking_line in sale_order_data[0].get('picking_ids', []): picking_line_data = models.execute_kw(db, uid, password, 'stock.picking', 'search_read', [[['id', '=', int(picking_line)],['product_id','=', int(product_id)]]], {}) # 如果找到拣货数据则完成验证 if picking_line_data: stock_picking_validate = models.execute_kw(db, uid, password, 'stock.picking', 'button_validate', [[picking_line]]) # 遍历销售订单的所有行 for lineId in sale_order_data[0].get('order_line', []): sale_order_line = models.execute_kw(db, uid, password, 'sale.order.line', 'search_read', [[["id", "=", lineId],['product_id','=', product_id]]], {}) if sale_order_line: # 为销售订单行生成发票 current_date = datetime.now().strftime('%Y-%m-%d') invoice_context = { 'move_type': 'out_invoice', 'partner_id': sale_order_data[0]['partner_id'][0], 'invoice_origin': sale_order_data[0]['name'], 'invoice_date': current_date, 'partner_bank_id': 164, # 替换为你的银行ID 'l10n_in_gst_treatment': 'consumer', # 替换为你的GST处理类型(消费者/供应商) 'ref': '', 'l10n_in_type_id': 1, # 电子运单文档类型ID 'l10n_in_mode': '1', # 运输方式ID 'l10n_in_distance': 11, # 车辆行驶距离 'l10n_in_vehicle_type': 'R', # 车辆类型 'l10n_in_vehicle_no': 'AP00AA0000' # 车辆号码 } # 在系统中创建发票 invoice_id = models.execute_kw(db, uid, password, 'account.move', 'create', [invoice_context]) invoice_lines = [] # 填充发票行数据 for lineId in sale_order_data[0].get('order_line', []): sale_order_line = models.execute_kw(db, uid, password, 'sale.order.line', 'read', [lineId], {}) invoice_lines.append((0, 0, { 'move_id': int(invoice_id), 'product_id': int(sale_order_line[0]['product_id'][0]), 'quantity': float(sale_order_line[0]['product_uom_qty']), 'price_unit': float(sale_order_line[0]['price_unit']), 'name': sale_order_line[0]['name'] })) # 将发票行写入发票 models.execute_kw(db, uid, password, 'account.move', 'write', [invoice_id, {'invoice_line_ids': invoice_lines}]) # 过账发票 models.execute_kw(db, uid, password, 'account.move', 'action_post', [invoice_id]) # 查找对应发票行ID inv_line_id = models.execute_kw(db, uid, password, 'account.move.line', 'search', [[['product_id', '=', sale_order_line[0]['product_id'][0]], ['move_id', '=', invoice_id], ['quantity', '=', sale_order_line[0]['product_uom_qty']]]]) # 更新销售订单行的发票关联和状态 models.execute_kw(db, uid, password, 'sale.order.line', 'write', [lineId, {'invoice_lines': [(4, inv_line_id[0])], 'invoice_status': 'invoiced'}]) # 更新销售订单的发票关联和状态 models.execute_kw(db, uid, password, 'sale.order', 'write', [[sale_order_id], {'invoice_ids': [(4, invoice_id)], 'invoice_status': 'invoiced'}]) # 返回创建成功响应 if invoice_id: return jsonify({'invoice_id': invoice_id, 'message':'发票创建成功。'}), 200 else: return jsonify({'message': '未满足创建条件,未生成发票。'}), 200 # 未找到可创建发票的行 return jsonify({'message': '未创建发票。'}), 404 except Exception as e: print(f"发生错误: {e}") return jsonify({'message': '处理请求时发生错误。'}), 500
内容的提问来源于stack exchange,提问作者Aditya Irri
相关产品推荐
相关产品推荐

