OCA/sale-workflow

sale_procurement_group_by_line: No "Purchases" button in SO from sale_purchase_stock module

Opened this issue · 3 comments

module: sale_procurement_group_by_line
version: 15.0

Steps to reproduce

  • Install sale_procurement_group_by_line and sale_purchase_stock
  • Unarchive "Replenish on Order (MTO)" route
    Screenshot 2023-07-06 at 12-54-42 Odoo - Replenish on Order (MTO)
  • Configure product with MTO and Buy.
    Screenshot 2023-07-07 at 11-54-56 Odoo - test MTO
  • Confirm SO with MTO product
  • Check if there is a new PO

Current behavior
In the SO there is no smart button with the related PO
Screenshot 2023-07-07 at 11-37-34 Odoo - S00035

Expected behavior
Additional smart button on the SO with the related PO
Screenshot 2023-07-07 at 11-52-57 Odoo - S00038

Hello TelmoSuarezConinpe,

Did you find a workaround for this problem ? I have encountered it too and I can't find how to make this work.

Thanks.

I finally found a correction for this problem. For V14, you need to update the file sale_procurement_group_by_line/model/sale.py

First, you need to import odoo.api :
from odoo import fields, models, **api**

Then you need to override SaleOrder class by adding this code before the SaleOrderLine class definition :

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    @api.depends('order_line.procurement_group_id.stock_move_ids.created_purchase_line_id.order_id', 'order_line.procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id')
    def _compute_purchase_order_count(self):
        super(SaleOrder, self)._compute_purchase_order_count()

    def _get_purchase_orders(self):
        return super(SaleOrder, self)._get_purchase_orders() | self.order_line.procurement_group_id.stock_move_ids.created_purchase_line_id.order_id | self.order_line.procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id

Explanation :
In module sale_purchase_stock, the method _get_purchase_orders uses the property procurement_group_id of the SaleOrder class to retrieve purchase orders. But when module sale_delivery_split_by_date is installed, procurement_group_id is not used anymore on the SaleOrder. Instead, procurement groups are linked to purchase order lines. So without the fix, _get_purchase_orders returns an empty list of PO.

The fix adds the PO from self.order_line.procurement_group_id the same way that module sale_purchase_stock adds it from self.procurement_group_id. With it, when you confirm a SO the corresponding PO is properly linked and the smart button appears correctly.

I will try to propose a pull request so that this fix is integrated into the module.

@TelmoSuarezConinpe would you mind reviewing/testing this PR? #2613

It should solve this issue.