old_contents: # -*- coding: utf-8 -*-
  # Part of Odoo. See LICENSE file for full copyright and licensing details.
  
  from odoo import api, models, fields
  
  
  class SaleOrderLine(models.Model):
      _inherit = "sale.order.line"
  
      purchase_line_ids = fields.One2many('purchase.order.line', 'sale_line_id')
  
      @api.multi
      def _get_qty_procurement(self):
          # People without purchase rights should be able to do this operation
          purchase_lines_sudo = self.sudo().purchase_line_ids
          if not self.move_ids.filtered(lambda r: r.state != 'cancel') and purchase_lines_sudo.filtered(lambda r: r.state != 'cancel'):
              qty = 0.0
              for po_line in purchase_lines_sudo.filtered(lambda r: r.state != 'cancel'):
                  qty += po_line.product_uom._compute_quantity(po_line.product_qty, self.product_uom, rounding_method='HALF-UP')
              return qty
          else:
              return super(SaleOrderLine, self)._get_qty_procurement()
  
  
new_contents: # -*- coding: utf-8 -*-
  # Part of Odoo. See LICENSE file for full copyright and licensing details.
  
  from odoo import api, models, fields
  
  
  class SaleOrderLine(models.Model):
      _inherit = "sale.order.line"
  
      purchase_line_ids = fields.One2many('purchase.order.line', 'sale_line_id')
  
      @api.multi
      def _get_qty_procurement(self):
          # People without purchase rights should be able to do this operation
          purchase_lines_sudo = self.sudo().purchase_line_ids
          if purchase_lines_sudo.filtered(lambda r: r.state != 'cancel'):
              qty = 0.0
              for po_line in purchase_lines_sudo.filtered(lambda r: r.state != 'cancel'):
                  qty += po_line.product_uom._compute_quantity(po_line.product_qty, self.product_uom, rounding_method='HALF-UP')
              return qty
          else:
              return super(SaleOrderLine, self)._get_qty_procurement()
  
  
subject: modify SO