sf的销售订单生成制造订单的方法,该方法内,需让制造订单和工单的数据入数据库,以便生成表面外协工艺相关的外协出入库单及关联的库存(stock.move)记录的代码可转移至生成工单的该行代码production.workorder_ids = workorders_values前后左右

This commit is contained in:
jinling.yang
2023-04-19 18:05:41 +08:00
parent 5a639d6f55
commit 4e2947c107
5 changed files with 122 additions and 27 deletions

View File

@@ -3,7 +3,7 @@ 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, fields,models
from odoo import SUPERUSER_ID, _, api, fields, models
from odoo.tools import float_compare
from odoo.exceptions import UserError
@@ -12,6 +12,13 @@ from odoo.exceptions import UserError
class StockRule(models.Model):
_inherit = 'stock.rule'
# @api.model
# def _run_pull(self, procurements):
# res = super(StockRule, self)._run_pull(procurements)
# # process_parameter_workorder = self.env['mrp.workorder'].search(
# # [('surface_technics_parameters_id', '!=', False), ('production_id', '=', self.production_id)])
# stock_move = self.env['stock.move'].search([('raw_material_production_id', '=', self.id)])
@api.model
def _run_pull(self, procurements):
moves_values_by_company = defaultdict(list)
@@ -183,6 +190,54 @@ class StockRule(models.Model):
subtype_id=self.env.ref('mail.mt_note').id)
return True
def create_outcontract_stock_move(self, sorted_workorders, item):
outcontract_stock_move = self.env['stock.move'].search(
[('workorder_id', '=', sorted_workorders.id), ('production_id', '=', item.id)])
if not outcontract_stock_move:
location_id = self.env.ref(
'sf_manufacturing.stock_location_locations_virtual_outcontract').id,
location_dest_id = self.env['stock.location'].search(
[('barcode', '=', 'WH-PREPRODUCTION')]).id,
outcontract_picking_in = self.env['stock.rule'].create_outcontract_picking(item,
location_id,
location_dest_id)
outcontract_picking_in.write({'workorder_id': outcontract_picking_in.id})
outcontract_picking_out = self.env['stock.rule'].create_outcontract_picking(item,
location_dest_id,
location_id)
outcontract_picking_out.write({'workorder_id': outcontract_picking_out.id})
# 生成外协出入库单
def create_outcontract_picking(self, item, location_src_id, location_dest_id):
moves_values_by_company = defaultdict(list)
list2 = []
Procurement = namedtuple('Procurement', ['product_id', 'product_qty',
'product_uom', 'location_id', 'location_dest_id', 'name', 'origin',
'company_id',
'values'])
s = Procurement(product_id=item.bom_id.product_id, product_qty=1.0, product_uom=item.product_uom,
location_id=location_src_id,
location_dest_id=location_dest_id,
name=item.name,
origin=item.origin,
company_id=item.company_id,
values=item.values,
)
item1 = list(item)
item1[0] = s
list2.append(tuple(item1))
for procurement in list2:
move_values = self.env['stock.rule']._get_stock_move_values(*procurement)
moves_values_by_company[procurement.company_id.id].append(move_values)
for company_id, moves_values in moves_values_by_company.items():
moves = self.env['stock.move'].with_user(SUPERUSER_ID).sudo().with_company(company_id).create(
moves_values)
new_picking = True
picking = self.env['stock.picking'].create(moves._get_new_picking_values())
moves.write({'picking_id': picking.id})
moves._assign_picking_post_process(new=new_picking)
return picking
class ProductionLot(models.Model):
_inherit = 'stock.lot'
@@ -233,8 +288,7 @@ class ProductionLot(models.Model):
class ResStockPicking(models.Model):
_inherit = 'stock.picking'
workorder_in_id = fields.Many2one('mrp.workorder')
workorder_out_id = fields.Many2one('mrp.workorder')
workorder_id = fields.One2many('mrp.workorder', 'picking_id')
class ResPurchaseOrder(models.Model):