判断外协工序是否连续有多个外协工序为同一个供应商(产品为表面工艺服务的供应商),

This commit is contained in:
jinling.yang
2023-04-14 17:54:20 +08:00
parent d80b4b6169
commit a5c707bf43
8 changed files with 89 additions and 59 deletions

View File

@@ -3,8 +3,9 @@ from collections import defaultdict, namedtuple
from odoo.addons.stock.models.stock_rule import ProcurementException
from re import findall as regex_findall
from re import split as regex_split
from odoo import SUPERUSER_ID, _, api, models
from odoo import SUPERUSER_ID, _, api, fields,models
from odoo.tools import float_compare
from odoo.exceptions import UserError
@@ -229,36 +230,29 @@ class ProductionLot(models.Model):
return "%s-%03d" % (product.name, 1)
class ResStockPicking(models.Model):
_inherit = 'stock.picking'
workorder_in_id = fields.Many2one('mrp.workorder')
workorder_out_id = fields.Many2one('mrp.workorder')
class ResPurchaseOrder(models.Model):
_inherit = 'purchase.order'
# def button_approve(self, force=False):
# result = super().button_approve(force=force)
# self._create_picking_RES()
# return result
# 外协出库、入库单
def _prepare_picking_outcontract(self, sequence_code):
# if not self.group_id:
# self.group_id = self.group_id.create({
# 'name': self.name,
# 'partner_id': self.partner_id.id
# })
# if not self.partner_id.property_stock_supplier.id:
# raise UserError(_("You must set a Vendor Location for this partner %s", self.partner_id.name))
# @api.depends('order_line.move_ids')
# def _compute_subcontracting_resupply_picking_count(self):
# for purchase in self:
# purchase.subcontracting_resupply_picking_count = len(purchase._get_subcontracting_resupplies_new())
#
# def _get_subcontracting_resupplies_new(self):
# moves_subcontracted = self.order_line.move_ids.filtered(lambda m: m.is_subcontract)
# # subcontracted_productions = moves_subcontracted.move_orig_ids.production_id
# return moves_subcontracted.picking_id
def _prepare_picking_RES(self):
if not self.group_id:
self.group_id = self.group_id.create({
'name': self.name,
'partner_id': self.partner_id.id
})
if not self.partner_id.property_stock_supplier.id:
raise UserError(_("You must set a Vendor Location for this partner %s", self.partner_id.name))
picking_type_id_res = self.env['stock.picking.type'].search(
[('sequence_code', '=', 'RES'), ('barcode', '=', 'WH-RESUPPLY')])
picking_type_id_oc = self.env['stock.picking.type'].search([('sequence_code', '=', sequence_code)])
return {
'picking_type_id': picking_type_id_res.id if picking_type_id_res else self.picking_type_id.id,
'picking_type_id': picking_type_id_oc.id if picking_type_id_oc else self.picking_type_id.id,
'partner_id': self.partner_id.id,
'user_id': False,
'date': self.date_order,
@@ -268,17 +262,14 @@ class ResPurchaseOrder(models.Model):
'company_id': self.company_id.id,
}
def _create_picking(self):
def _create_picking_outcontract(self):
StockPicking = self.env['stock.picking']
for order in self.filtered(lambda po: po.state in ('purchase', 'done')):
if any(product.type in ['product', 'consu'] for product in order.order_line.product_id):
order = order.with_company(order.company_id)
pickings = order.picking_ids.filtered(lambda x: x.state not in ('done', 'cancel'))
if not pickings:
if order.order_line.product_id.categ_type == '胚料':
res = order._prepare_picking_RES()
else:
res = order._prepare_picking()
res = order._prepare_picking_outcontract()
picking = StockPicking.with_user(SUPERUSER_ID).create(res)
pickings = picking
else: