61 lines
2.4 KiB
Python
61 lines
2.4 KiB
Python
from odoo import fields, api, models, _
|
|
|
|
|
|
class StockPicking(models.Model):
|
|
_inherit = "stock.picking"
|
|
|
|
purchase_request_count = fields.Integer('采购订单数量', compute='_compute_purchase_request')
|
|
|
|
@api.depends('name')
|
|
def _compute_purchase_request(self):
|
|
for record in self:
|
|
purchase_request_ids = self.env['purchase.request'].search([('origin', '=', record.name)])
|
|
record.purchase_request_count = len(purchase_request_ids)
|
|
|
|
def action_view_purchase_request(self):
|
|
self.ensure_one()
|
|
|
|
purchase_request_ids = self.env['purchase.request'].search([('origin', '=', self.name)])
|
|
|
|
action = {
|
|
'res_model': 'purchase.request',
|
|
'type': 'ir.actions.act_window',
|
|
}
|
|
if len(purchase_request_ids) == 1:
|
|
action.update({
|
|
'view_mode': 'form',
|
|
'res_id': purchase_request_ids[0].id,
|
|
})
|
|
else:
|
|
action.update({
|
|
'name': _("从 %s生成采购请求单", self.name),
|
|
'domain': [('id', 'in', purchase_request_ids.ids)],
|
|
'view_mode': 'tree,form',
|
|
})
|
|
return action
|
|
|
|
def _action_done(self):
|
|
res = super(StockPicking, self)._action_done()
|
|
# 将新产生的backorder对应上原来的采购申请明细行
|
|
backorder_ids = self.backorder_ids
|
|
if backorder_ids:
|
|
purchase_request_lines = self.move_ids.move_orig_ids.purchase_line_id.purchase_request_lines
|
|
if purchase_request_lines:
|
|
purchase_request_lines.move_dest_ids = [
|
|
(4, x.id) for x in backorder_ids.move_ids if
|
|
x.product_id.id in purchase_request_lines.mapped('product_id.id') and \
|
|
not x.created_purchase_request_line_id
|
|
]
|
|
return res
|
|
|
|
def _subcontracted_produce(self, subcontract_details):
|
|
super()._subcontracted_produce(subcontract_details)
|
|
|
|
# 判断是否根据规则生成新的采购申请单据,如果生成则修改状态为 approved
|
|
if self:
|
|
pr_ids = self.env["purchase.request"].sudo().search(
|
|
[('origin', 'like', self.name), ('rule_purchase_to_request', '=', True), ('state', '=', 'draft')])
|
|
if pr_ids:
|
|
pr_ids.write({'need_validation': False})
|
|
pr_ids.write({"state": "approved", 'need_validation': True, 'rule_new_add': False})
|