47 lines
2.1 KiB
Python
47 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, models, fields
|
|
|
|
|
|
class PurchaseOrder(models.Model):
|
|
_inherit = 'purchase.order'
|
|
|
|
dropship_picking_count = fields.Integer("Dropship Count", compute='_compute_incoming_picking_count')
|
|
|
|
@api.depends('picking_ids.is_dropship')
|
|
def _compute_incoming_picking_count(self):
|
|
super()._compute_incoming_picking_count()
|
|
for order in self:
|
|
dropship_count = len(order.picking_ids.filtered(lambda p: p.is_dropship))
|
|
order.incoming_picking_count -= dropship_count
|
|
order.dropship_picking_count = dropship_count
|
|
|
|
def action_view_picking(self):
|
|
return self._get_action_view_picking(self.picking_ids.filtered(lambda p: not p.is_dropship))
|
|
|
|
def action_view_dropship(self):
|
|
return self._get_action_view_picking(self.picking_ids.filtered(lambda p: p.is_dropship))
|
|
|
|
|
|
class PurchaseOrderLine(models.Model):
|
|
_inherit = 'purchase.order.line'
|
|
|
|
def _prepare_stock_moves(self, picking):
|
|
res = super(PurchaseOrderLine, self)._prepare_stock_moves(picking)
|
|
for re in res:
|
|
re['sale_line_id'] = self.sale_line_id.id
|
|
return res
|
|
|
|
def _find_candidate(self, product_id, product_qty, product_uom, location_id, name, origin, company_id, values):
|
|
# if this is defined, this is a dropshipping line, so no
|
|
# this is to correctly map delivered quantities to the so lines
|
|
lines = self.filtered(lambda po_line: po_line.sale_line_id.id == values['sale_line_id']) if values.get('sale_line_id') else self
|
|
return super(PurchaseOrderLine, lines)._find_candidate(product_id, product_qty, product_uom, location_id, name, origin, company_id, values)
|
|
|
|
@api.model
|
|
def _prepare_purchase_order_line_from_procurement(self, product_id, product_qty, product_uom, company_id, values, po):
|
|
res = super()._prepare_purchase_order_line_from_procurement(product_id, product_qty, product_uom, company_id, values, po)
|
|
res['sale_line_id'] = values.get('sale_line_id', False)
|
|
return res
|