ODOO通过XMLRPC批量更新产品在手数量

最近在初始化ODOO数据的时候,批量导入产品后需要批量更新产品库存, 可以始用以下方式更新产品库存,这种方式是在原有基础上增加相应数量。

models.execute_kw(db, uid, password, 'stock.quant', 'create', [{
    'company_id': company_id,
    'product_id': product_id,
    'location_id': location_id,
    'qty': qty
    }])

 经过各种查找,终于找到了别外一种方式来更新库存,就是通过盘点,代码如下:

1  product = models.execute_kw(db, uid, password, 'product.product', 'search', [[('default_code', '=', sku)]])
2  change_id = models.execute_kw(db, uid, password, 'stock.change.product.qty', 'create', [{
3             'product_id': product[0],
4             'location_id': 15,
5             'new_quantity': 20,
6             }])
7  print change_id
8  #print models.execute_kw(db, uid, password, 'stock.change.product.qty', 'read', [change_id])
9 #注意下面这段代码一定要添加,不然后是不会生成库存盘点的 10 models.execute_kw(db, uid, password, 'stock.change.product.qty', 'change_product_qty', [change_id])

 

转载于:https://www.cnblogs.com/wiisoft/p/6769082.html

Odoo中实现批量新增功能,需要注意以下逻辑: 1. 数据导入:需要提供数据导入的功能,允许用户上传 Excel 或 CSV 格式的数据文件,并提供数据校验和数据重复性检查。 2. 数据校验:需要对上传的数据进行校验,确保数据符合要求,避免因为数据错误导致新增失败或者出现脏数据的情况。 3. 批量处理:使用循环语句进行批量处理,避免单条数据新增的效率低下。 4. 数据回滚:如果在批量新增过程中出现异常或者新增失败,需要对已经新增的数据进行回滚,避免出现脏数据。 5. 日志记录:在批量新增的过程中,需要记录相应的日志信息,方便查找问题和进行数据分析。 以下是一个简单的示例代码,实现在Odoo中批量新增产品的功能: ```python import base64 import io import pandas as pd from odoo import models, fields, api class Product(models.Model): _name = 'product.product' _description = 'Product' name = fields.Char(string='Name', required=True) description = fields.Text(string='Description') list_price = fields.Float(string='Price') class ProductBatchInsertWizard(models.TransientModel): _name = 'product.batch_insert_wizard' _description = 'Product Batch Insert Wizard' data_file = fields.Binary(string='Data File', required=True) @api.multi def batch_insert(self): # 读取数据文件 data = pd.read_excel(io.BytesIO(base64.b64decode(self.data_file)), sheet_name='Sheet1') # 数据校验 if not self.validate_data(data): return {'type': 'ir.actions.act_window_close'} # 批量新增 for index, row in data.iterrows(): product = self.env['product.product'].create({ 'name': row['Name'], 'description': row['Description'], 'list_price': row['Price'] }) return {'type': 'ir.actions.act_window_close'} @api.model def validate_data(self, data): # 数据去重 existing_data = self.env['product.product'].search([('name', 'in', data['Name'].tolist())]) if existing_data: existing_names = existing_data.mapped('name') data = data[~data['Name'].isin(existing_names)] self.env['product.batch_insert.log'].create({ 'message': f'以下产品名称已存在,已被过滤:{", ".join(existing_names)}' }) # 数据校验 if not data.empty: missing_fields = data.isna().any() if missing_fields.any(): missing_fields_str = ", ".join(missing_fields.index[missing_fields]) self.env['product.batch_insert.log'].create({ 'message': f'以下字段缺失,请补充:{missing_fields_str}' }) invalid_prices = data['Price'] <= 0 if invalid_prices.any(): invalid_prices_str = ", ".join(data.loc[invalid_prices, 'Name'].tolist()) self.env['product.batch_insert.log'].create({ 'message': f'以下产品价格不合法,请检查:{invalid_prices_str}' }) return not data.empty class ProductBatchInsertLog(models.Model): _name = 'product.batch_insert.log' _description = 'Product Batch Insert Log' message = fields.Char(string='Message', required=True) date = fields.Datetime(string='Date', default=fields.Datetime.now()) ``` 在以上示例代码中,我们定义了一个产品模型 Product 和一个批量新增向导 ProductBatchInsertWizard。批量新增向导中包含一个数据文件字段 data_file,用于上传批量新增的数据文件,和一个批量新增函数 batch_insert,用于执行批量新增操作。 在批量新增函数中,我们使用 pandas 库读取上传的 Excel 文件,并使用 iterrows() 方法遍历每一行数据,依次调用 create() 方法创建产品,并将产品数据存储到数据库中。同时,我们也定义了一个 validate_data 函数,用于对上传的数据进行校验。在校验函数中,我们先使用 search() 方法查询已存在的产品数据,去重并记录日志。然后,我们对数据进行校验,检查缺失字段和不合法价格,并记录日志。最后,我们返回一个布尔值,示是否校验通过。 需要注意的是,以上代码仅为示例代码,实际应用中需要根据具体业务需求进行适当修改。同时,我们也定义了一个 ProductBatchInsertLog 模型,用于记录批量新增日志。这样可以方便我们查找问题和进行数据分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值