ODOO11 报价单到入库单流程解析:_run_move操作

4星 · 超过85%的资源 需积分: 9 6 下载量 154 浏览量 更新于2024-09-07 收藏 374KB PDF 举报
"了解Odoo11中从报价单确认到订单创建入库单的流程,重点关注_run_move函数在其中的作用。" 在Odoo11中,报价单确认订单并创建入库单的过程涉及到一系列的函数调用和技术操作。这个过程主要发生在sale_stock模块中,通过Python编程实现。下面是对整个流程的详细解析: 1. **报价单确认订单** 当用户点击报价单(quotation)的确认按钮时,会触发`action_confirm`方法。这个方法位于`sale_stock`模块的`sale_order.py`文件中的`sale.order`模型。`action_confirm`方法负责将报价单转化为销售订单,并执行后续的操作。 2. **创建补货组** 在`action_confirm()`方法中,会调用`_action_launch_procurement_rule()`。这个方法检查销售订单是否存在补货组,如果没有,则会自动生成一个。补货组的信息来源于与销售订单行(sale.order.line)关联的数据。 3. **准备采购值** `_action_launch_procurement_rule()`方法进一步调用`_prepare_procurement_values()`。这个函数的作用是为补货组的运行准备必要的参数,这些参数来源于`sale.order.line`模型。你可以通过继承并重写此函数,添加自定义的产品额外信息到传递给出库单(stock.picking)的值中。 4. **运行补货组** `procurement.group`模型的`run()`方法在`stock`模块的`procurement.py`文件中被调用。`run()`方法使用`getattr()`根据产品的采购策略,如路线,来决定执行`_run_move`或其他相关方法。在这个过程中,之前`_prepare_procurement_values()`中提取的值作为参数传递,以完成批量处理。 5. **执行入库操作** `_run_move`方法是关键步骤,它处理实际的库存移动操作。当`_run_move`被调用时,会利用之前收集的销售订单行信息,如产品、数量、库存位置等,来创建和执行入库单。这一步确保了库存的更新,反映了销售订单的履行情况。 通过以上流程,我们可以看到Odoo11如何从报价单的确认开始,直到完成订单的入库处理。理解这个过程对于开发者来说至关重要,因为可以据此定制和扩展Odoo的业务逻辑,满足特定的业务需求。例如,可以通过修改相关函数来实现特殊库存策略、自定义采购规则或优化入库流程。

class ApprovalFlow(models.Model): _name = 'approval.flow' _description = u'审批流程' def _compute_domain(self): all_cls = inspect.getmembers(sys.modules[__name__], inspect.isclass) odoo_cls = [getattr(cls[1], '_name') for cls in all_cls if cls[1].__bases__[0].__name__ == 'Model'] # 排除当前的对象 odoo_cls += [model.model for model in self.env['ir.model'].search([('transient', '=', True)])] # 排除临时对象 return [('model', 'not in', odoo_cls)] name = fields.Char(u'名称') model_id = fields.Many2one('ir.model', u'模型', domain=_compute_domain, index=1) model_name = fields.Char(related="model_id.model", string='模型名称') condition = fields.Char(u'条件', help=u'请遵循odoo的domain的写法,如:[("field_name", "=", value)]',store=True) on_create = fields.Boolean(u'创建时', default=False, help=u'记录创建时创建审批流程') company_ids = fields.Many2many('res.company', 'approval_flow_company_rel', 'flow_id', 'company_id', u'适用公司', default=lambda self: [self.env.company.id]) node_ids = fields.One2many('approval.flow.node', 'flow_id', u'流程节点', copy=False) action_ids = fields.One2many('approval.flow.node.action', 'flow_id', u'节点动作', copy=False) commit_approval_group_id = fields.Many2one('res.groups', u'提交审批组', help=u'执行提交审批的组,如果未指定,则记录所属公司的所有用户都可以提交审批') approval_can_run_id = fields.Many2one('execute.function.list', u'完成后能执行方法', help=u'审批流程完成后才能执行的功能,比如确认订单等') approval_can_run = fields.Char(u'完成后能执行方法', help=u'审批流程完成后才能执行的功能,比如确认订单等',related='approval_can_run_id.fun_name',store=True) approval_cannot_run_id = fields.Many2many('execute.function.not.list', 'function_not_rel', u'完成后不能执行操作', help=u'审批流程完成后不能能执行的操作,修改,删除') approval_cannot_run = fields.Char(u'完成后不能执行操作', help=u'审批流程完成后不能能执行的操作,修改,删除',store=True) def unlink(self): audit = self.env['approval.flow'] for record in audit: if record.approval_can_run_id == '删除': raise UserError("不能删除") return super(Rokedispatchordermanagement, self).unlink() 重新删除方法不能删除approval_can_run_id值等于删除的怎么写

2023-06-09 上传