Merge branch 'refs/heads/develop' into feature/part_number
# Conflicts: # sf_manufacturing/models/purchase_order.py
This commit is contained in:
@@ -151,6 +151,12 @@ class JdEclp(models.Model):
|
|||||||
_logger.info('准备调接口1')
|
_logger.info('准备调接口1')
|
||||||
url1 = config['bfm_url_new'] + '/api/create/jd/order'
|
url1 = config['bfm_url_new'] + '/api/create/jd/order'
|
||||||
requests.post(url1, json=json1, data=None)
|
requests.post(url1, json=json1, data=None)
|
||||||
|
# ===============修改销售订单状态为【物流中】===================
|
||||||
|
item = self.env['sale.order'].sudo().search([('name', '=', self.origin)])
|
||||||
|
if not item:
|
||||||
|
raise ValidationError('没有查询到订单号为【%s】的销售订单!' % self.origin)
|
||||||
|
else:
|
||||||
|
item.write({'state': 'physical_distribution'})
|
||||||
_logger.info('调用成功1')
|
_logger.info('调用成功1')
|
||||||
_logger.info('准备调接口2')
|
_logger.info('准备调接口2')
|
||||||
json2 = {
|
json2 = {
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ class ManualProductModelTypeRoutingSort(models.Model):
|
|||||||
_description = '成品工序排序(人工线下加工)'
|
_description = '成品工序排序(人工线下加工)'
|
||||||
|
|
||||||
sequence = fields.Integer('Sequence')
|
sequence = fields.Integer('Sequence')
|
||||||
route_workcenter_id = fields.Many2one('mrp.routing.workcenter')
|
route_workcenter_id = fields.Many2one('mrp.routing.workcenter', domain=[('routing_type', 'in', ['人工线下加工'])])
|
||||||
is_repeat = fields.Boolean('重复', related='route_workcenter_id.is_repeat')
|
is_repeat = fields.Boolean('重复', related='route_workcenter_id.is_repeat')
|
||||||
routing_type = fields.Selection(string="工序类型", related='route_workcenter_id.routing_type')
|
routing_type = fields.Selection(string="工序类型", related='route_workcenter_id.routing_type')
|
||||||
workcenter_ids = fields.Many2many('mrp.workcenter', required=False, related='route_workcenter_id.workcenter_ids')
|
workcenter_ids = fields.Many2many('mrp.workcenter', required=False, related='route_workcenter_id.workcenter_ids')
|
||||||
|
|||||||
@@ -440,6 +440,18 @@ class MrpProduction(models.Model):
|
|||||||
process_parameters = []
|
process_parameters = []
|
||||||
account_moves = []
|
account_moves = []
|
||||||
parameters_not = []
|
parameters_not = []
|
||||||
|
# 获取原有的工单对应的工序
|
||||||
|
origin_designs = self.workorder_ids.technology_design_id
|
||||||
|
# 获取已删除的工序
|
||||||
|
deleted_designs = origin_designs - self.technology_design_ids
|
||||||
|
if deleted_designs:
|
||||||
|
for deleted_design in deleted_designs:
|
||||||
|
workorder = self.env['mrp.workorder'].search([('technology_design_id', '=', deleted_design.id)])
|
||||||
|
purchase = workorder._get_surface_technics_purchase_ids()
|
||||||
|
account = self.env['account.move'].search([('id', 'in', purchase.invoice_ids.ids)])
|
||||||
|
if account.state not in ['cancel', False]:
|
||||||
|
if purchase.name not in account_moves:
|
||||||
|
account_moves.append(purchase.name)
|
||||||
special_design = self.technology_design_ids.filtered(
|
special_design = self.technology_design_ids.filtered(
|
||||||
lambda a: a.routing_tag == 'special' and a.is_auto is False)
|
lambda a: a.routing_tag == 'special' and a.is_auto is False)
|
||||||
for special in special_design:
|
for special in special_design:
|
||||||
@@ -451,11 +463,7 @@ class MrpProduction(models.Model):
|
|||||||
if not product_production_process:
|
if not product_production_process:
|
||||||
if special.process_parameters_id not in process_parameters:
|
if special.process_parameters_id not in process_parameters:
|
||||||
process_parameters.append(special.process_parameters_id.display_name)
|
process_parameters.append(special.process_parameters_id.display_name)
|
||||||
purchase = self.env['purchase.order'].search([('origin', '=', special.production_id.name)])
|
|
||||||
account = self.env['account.move'].search([('id', 'in', purchase.invoice_ids)])
|
|
||||||
if account.state not in ['cancel', False]:
|
|
||||||
if purchase.name not in account_moves:
|
|
||||||
account_moves.append(purchase.name)
|
|
||||||
if account_moves:
|
if account_moves:
|
||||||
raise UserError(_("请联系工厂生产经理对采购订单为%s生成的账单进行取消", ", ".join(account_moves)))
|
raise UserError(_("请联系工厂生产经理对采购订单为%s生成的账单进行取消", ", ".join(account_moves)))
|
||||||
if parameters_not:
|
if parameters_not:
|
||||||
|
|||||||
@@ -94,4 +94,10 @@ class ResMrpRoutingWorkcenter(models.Model):
|
|||||||
route_ids.append(t.route_id.surface_technics_id.id)
|
route_ids.append(t.route_id.surface_technics_id.id)
|
||||||
domain = [('id', 'not in', route_ids), ('routing_tag', '=', 'special')]
|
domain = [('id', 'not in', route_ids), ('routing_tag', '=', 'special')]
|
||||||
return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
|
return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
|
||||||
|
if self._context.get('is_duplicate') and self._context.get('model_name'):
|
||||||
|
# 查询出已经选择的工序
|
||||||
|
model_type = self.env[self._context.get('model_name')].search_read([],['route_workcenter_id'])
|
||||||
|
route_workcenter_ids = [item['route_workcenter_id'][0] if item['route_workcenter_id'] else False for item in model_type]
|
||||||
|
domain = args + [('id', 'not in', route_workcenter_ids)]
|
||||||
|
return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
|
||||||
return super()._name_search(name, args, operator, limit, name_get_uid)
|
return super()._name_search(name, args, operator, limit, name_get_uid)
|
||||||
|
|||||||
@@ -1423,8 +1423,7 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
len(done_workorder) == len(record.production_id.workorder_ids)):
|
len(done_workorder) == len(record.production_id.workorder_ids)):
|
||||||
is_production_id = True
|
is_production_id = True
|
||||||
if record.routing_type in ['解除装夹'] or (
|
if record.routing_type in ['解除装夹'] or (
|
||||||
record.is_rework is True and record.routing_type in ['装夹预调']) or (
|
record.is_rework is True and record.routing_type in ['装夹预调']):
|
||||||
record.test_results in ['返工', '报废'] and record.routing_type in ['CNC加工']):
|
|
||||||
for workorder in record.production_id.workorder_ids:
|
for workorder in record.production_id.workorder_ids:
|
||||||
if workorder.processing_panel == record.processing_panel:
|
if workorder.processing_panel == record.processing_panel:
|
||||||
rfid_code = workorder.rfid_code
|
rfid_code = workorder.rfid_code
|
||||||
|
|||||||
@@ -1,7 +1,34 @@
|
|||||||
import logging
|
# -*- coding: utf-8 -*-
|
||||||
from odoo import models, fields, api
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
from collections import defaultdict
|
||||||
|
|
||||||
|
from odoo import api, fields, models, _
|
||||||
|
from odoo.tools import OrderedSet
|
||||||
|
|
||||||
|
|
||||||
|
# _get_surface_technics_purchase_ids
|
||||||
|
class PurchaseOrder(models.Model):
|
||||||
|
_inherit = 'purchase.order'
|
||||||
|
|
||||||
|
def button_confirm(self):
|
||||||
|
super().button_confirm()
|
||||||
|
workorders = self.env['mrp.workorder'].search([('purchase_id', '=', self.id)])
|
||||||
|
for workorder in workorders:
|
||||||
|
if workorder.routing_type == '表面工艺' and workorder.is_subcontract is True:
|
||||||
|
move_out = workorder.move_subcontract_workorder_ids[1]
|
||||||
|
# move_out = self.env['stock.move'].search(
|
||||||
|
# [('location_id', '=', self.env['stock.location'].search(
|
||||||
|
# [('barcode', 'ilike', 'WH-PREPRODUCTION')]).id),
|
||||||
|
# ('location_dest_id', '=', self.env['stock.location'].search(
|
||||||
|
# [('barcode', 'ilike', 'VL-SPOC')]).id),
|
||||||
|
# ('origin', '=', self.production_id.name), ('state', 'not in', ['cancel', 'done'])])
|
||||||
|
for mo in move_out:
|
||||||
|
if mo.state != 'done':
|
||||||
|
mo.write({'state': 'assigned', 'production_id': False})
|
||||||
|
if not mo.move_line_ids:
|
||||||
|
self.env['stock.move.line'].create(mo.get_move_line(workorder.production_id, workorder))
|
||||||
|
return True
|
||||||
class PurchaseOrderLine(models.Model):
|
class PurchaseOrderLine(models.Model):
|
||||||
_inherit = 'purchase.order.line'
|
_inherit = 'purchase.order.line'
|
||||||
part_number = fields.Char('零件图号', related='product_id.part_number', readonly=True)
|
part_number = fields.Char('零件图号', related='product_id.part_number', readonly=True)
|
||||||
|
|||||||
@@ -644,12 +644,19 @@ class StockPicking(models.Model):
|
|||||||
workorder = move_in.subcontract_workorder_id
|
workorder = move_in.subcontract_workorder_id
|
||||||
workorders = workorder.production_id.workorder_ids
|
workorders = workorder.production_id.workorder_ids
|
||||||
subcontract_workorders = workorders.filtered(lambda wo: wo.is_subcontract == True).sorted('sequence')
|
subcontract_workorders = workorders.filtered(lambda wo: wo.is_subcontract == True).sorted('sequence')
|
||||||
if workorder == subcontract_workorders[-1]:
|
if workorder == subcontract_workorders[-1]:
|
||||||
self.env['stock.quant']._update_reserved_quantity(
|
self.env['stock.quant']._update_reserved_quantity(
|
||||||
move_in.product_id, move_in.location_dest_id, move_in.product_uom_qty, lot_id=move_in.move_line_ids.lot_id,
|
move_in.product_id, move_in.location_dest_id, move_in.product_uom_qty,
|
||||||
|
lot_id=move_in.move_line_ids.lot_id,
|
||||||
package_id=False, owner_id=False, strict=False
|
package_id=False, owner_id=False, strict=False
|
||||||
)
|
)
|
||||||
|
workorder.button_finish()
|
||||||
|
picking_type_out = self.env.ref('sf_manufacturing.outcontract_picking_out').id
|
||||||
|
if res and self.picking_type_id.id == picking_type_out:
|
||||||
|
move_out = self.move_ids
|
||||||
|
if move_out:
|
||||||
|
workorder = move_out.subcontract_workorder_id
|
||||||
|
workorder.button_start()
|
||||||
return res
|
return res
|
||||||
|
|
||||||
# 创建 外协出库入单
|
# 创建 外协出库入单
|
||||||
@@ -671,14 +678,16 @@ class StockPicking(models.Model):
|
|||||||
else:
|
else:
|
||||||
# 从sorted_workorders中找到上一工单的move
|
# 从sorted_workorders中找到上一工单的move
|
||||||
if sorted_workorders.index(workorder) > 0:
|
if sorted_workorders.index(workorder) > 0:
|
||||||
move_dest_id = sorted_workorders[sorted_workorders.index(workorder) - 1].move_subcontract_workorder_ids[1].id
|
move_dest_id = \
|
||||||
|
sorted_workorders[sorted_workorders.index(workorder) - 1].move_subcontract_workorder_ids[1].id
|
||||||
new_picking = True
|
new_picking = True
|
||||||
outcontract_picking_type_in = self.env.ref(
|
outcontract_picking_type_in = self.env.ref(
|
||||||
'sf_manufacturing.outcontract_picking_in').id,
|
'sf_manufacturing.outcontract_picking_in').id,
|
||||||
outcontract_picking_type_out = self.env.ref(
|
outcontract_picking_type_out = self.env.ref(
|
||||||
'sf_manufacturing.outcontract_picking_out').id,
|
'sf_manufacturing.outcontract_picking_out').id,
|
||||||
moves_in = self.env['stock.move'].sudo().create(
|
moves_in = self.env['stock.move'].sudo().create(
|
||||||
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_in, procurement_group_id.id, move_dest_id))
|
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_in,
|
||||||
|
procurement_group_id.id, move_dest_id))
|
||||||
picking_in = self.create(
|
picking_in = self.create(
|
||||||
moves_in._get_new_picking_values_Res(item, workorder, 'WH/OCIN/'))
|
moves_in._get_new_picking_values_Res(item, workorder, 'WH/OCIN/'))
|
||||||
# pick_ids.append(picking_in.id)
|
# pick_ids.append(picking_in.id)
|
||||||
@@ -686,7 +695,8 @@ class StockPicking(models.Model):
|
|||||||
{'picking_id': picking_in.id, 'state': 'waiting'})
|
{'picking_id': picking_in.id, 'state': 'waiting'})
|
||||||
moves_in._assign_picking_post_process(new=new_picking)
|
moves_in._assign_picking_post_process(new=new_picking)
|
||||||
moves_out = self.env['stock.move'].sudo().create(
|
moves_out = self.env['stock.move'].sudo().create(
|
||||||
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_out, procurement_group_id.id, moves_in.id))
|
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_out,
|
||||||
|
procurement_group_id.id, moves_in.id))
|
||||||
workorder.write({'move_subcontract_workorder_ids': [(6, 0, [moves_in.id, moves_out.id])]})
|
workorder.write({'move_subcontract_workorder_ids': [(6, 0, [moves_in.id, moves_out.id])]})
|
||||||
picking_out = self.create(
|
picking_out = self.create(
|
||||||
moves_out._get_new_picking_values_Res(item, workorder, 'WH/OCOUT/'))
|
moves_out._get_new_picking_values_Res(item, workorder, 'WH/OCOUT/'))
|
||||||
@@ -694,8 +704,7 @@ class StockPicking(models.Model):
|
|||||||
moves_out.write(
|
moves_out.write(
|
||||||
{'picking_id': picking_out.id, 'state': 'waiting'})
|
{'picking_id': picking_out.id, 'state': 'waiting'})
|
||||||
moves_out._assign_picking_post_process(new=new_picking)
|
moves_out._assign_picking_post_process(new=new_picking)
|
||||||
|
|
||||||
|
|
||||||
@api.depends('move_type', 'immediate_transfer', 'move_ids.state', 'move_ids.picking_id')
|
@api.depends('move_type', 'immediate_transfer', 'move_ids.state', 'move_ids.picking_id')
|
||||||
def _compute_state(self):
|
def _compute_state(self):
|
||||||
super(StockPicking, self)._compute_state()
|
super(StockPicking, self)._compute_state()
|
||||||
@@ -706,7 +715,9 @@ class StockPicking(models.Model):
|
|||||||
if picking.move_ids:
|
if picking.move_ids:
|
||||||
workorder = picking.move_ids[0].subcontract_workorder_id
|
workorder = picking.move_ids[0].subcontract_workorder_id
|
||||||
if picking.state == 'assigned':
|
if picking.state == 'assigned':
|
||||||
if workorder.state in ['pending', 'waiting'] or workorder._get_surface_technics_purchase_ids().state in ['draft', 'sent']:
|
if workorder.state in ['pending',
|
||||||
|
'waiting'] or workorder._get_surface_technics_purchase_ids().state in [
|
||||||
|
'draft', 'sent']:
|
||||||
picking.state = 'waiting'
|
picking.state = 'waiting'
|
||||||
|
|
||||||
|
|
||||||
@@ -719,7 +730,8 @@ class ReStockMove(models.Model):
|
|||||||
|
|
||||||
def _get_stock_move_values_Res(self, item, picking_type_id, group_id, move_dest_ids=False):
|
def _get_stock_move_values_Res(self, item, picking_type_id, group_id, move_dest_ids=False):
|
||||||
route_id = self.env.ref('sf_manufacturing.route_surface_technology_outsourcing').id
|
route_id = self.env.ref('sf_manufacturing.route_surface_technology_outsourcing').id
|
||||||
stock_rule = self.env['stock.rule'].sudo().search([('route_id', '=', route_id), ('picking_type_id', '=', picking_type_id)])
|
stock_rule = self.env['stock.rule'].sudo().search(
|
||||||
|
[('route_id', '=', route_id), ('picking_type_id', '=', picking_type_id)])
|
||||||
move_values = {
|
move_values = {
|
||||||
'name': '推',
|
'name': '推',
|
||||||
'company_id': item.company_id.id,
|
'company_id': item.company_id.id,
|
||||||
@@ -997,8 +1009,9 @@ class ReStockMove(models.Model):
|
|||||||
res['origin'] = ','.join(productions.mapped('name'))
|
res['origin'] = ','.join(productions.mapped('name'))
|
||||||
res['retrospect_ref'] = production.product_id.name
|
res['retrospect_ref'] = production.product_id.name
|
||||||
return res
|
return res
|
||||||
|
|
||||||
subcontract_workorder_id = fields.Many2one('mrp.workorder', '外协工单组件', check_company=True, index='btree_not_null')
|
subcontract_workorder_id = fields.Many2one('mrp.workorder', '外协工单组件', check_company=True,
|
||||||
|
index='btree_not_null')
|
||||||
|
|
||||||
|
|
||||||
class ReStockQuant(models.Model):
|
class ReStockQuant(models.Model):
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<data>
|
<data>
|
||||||
#------------------模型类型------------------
|
#------------------模型类型------------------
|
||||||
|
|
||||||
<record model="ir.ui.view" id="search_sf_model_type_view">
|
<record model="ir.ui.view" id="search_sf_model_name_view">
|
||||||
<field name="name">search.sf.model.type</field>
|
<field name="name">search.sf.model.type</field>
|
||||||
<field name="model">sf.model.type</field>
|
<field name="model">sf.model.type</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="ir.ui.view" id="tree_sf_model_type_view">
|
<record model="ir.ui.view" id="tree_sf_model_name_view">
|
||||||
<field name="name">tree.sf.model.type</field>
|
<field name="name">tree.sf.model.type</field>
|
||||||
<field name="model">sf.model.type</field>
|
<field name="model">sf.model.type</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="ir.ui.view" id="form_sf_model_type">
|
<record model="ir.ui.view" id="form_sf_model_name">
|
||||||
<field name="name">form.sf.model.type</field>
|
<field name="name">form.sf.model.type</field>
|
||||||
<field name="model">sf.model.type</field>
|
<field name="model">sf.model.type</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
<field name='product_routing_tmpl_ids'>
|
<field name='product_routing_tmpl_ids'>
|
||||||
<tree editable='bottom'>
|
<tree editable='bottom'>
|
||||||
<field name="sequence" widget="handle" string="序号"/>
|
<field name="sequence" widget="handle" string="序号"/>
|
||||||
<field name="route_workcenter_id" string="工序" options="{'no_create': True}"/>
|
<field name="route_workcenter_id" string="工序" options="{'no_create': True}" context="{'is_duplicate': True, 'model_name': 'sf.product.model.type.routing.sort'}"/>
|
||||||
<field name="routing_type" string="类型"/>
|
<field name="routing_type" string="类型"/>
|
||||||
<field name="is_repeat" string="重复"/>
|
<field name="is_repeat" string="重复"/>
|
||||||
<field name="workcenter_ids" string="工作中心" widget="many2many_tags"/>
|
<field name="workcenter_ids" string="工作中心" widget="many2many_tags"/>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
<field name='manual_product_routing_tmpl_ids'>
|
<field name='manual_product_routing_tmpl_ids'>
|
||||||
<tree editable='bottom'>
|
<tree editable='bottom'>
|
||||||
<field name="sequence" widget="handle" string="序号"/>
|
<field name="sequence" widget="handle" string="序号"/>
|
||||||
<field name="route_workcenter_id" string="工序" options="{'no_create': True}"/>
|
<field name="route_workcenter_id" string="工序" options="{'no_create': True}" context="{'is_duplicate': True, 'model_name': 'sf.manual.product.model.type.routing.sort'}"/>
|
||||||
<field name="routing_type" string="类型"/>
|
<field name="routing_type" string="类型"/>
|
||||||
<field name="is_repeat" string="重复"/>
|
<field name="is_repeat" string="重复"/>
|
||||||
<field name="workcenter_ids" string="工作中心" widget="many2many_tags"/>
|
<field name="workcenter_ids" string="工作中心" widget="many2many_tags"/>
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
<field name='embryo_routing_tmpl_ids'>
|
<field name='embryo_routing_tmpl_ids'>
|
||||||
<tree editable='bottom'>
|
<tree editable='bottom'>
|
||||||
<field name="sequence" widget="handle" string="序号"/>
|
<field name="sequence" widget="handle" string="序号"/>
|
||||||
<field name="route_workcenter_id" string="工序" options="{'no_create': True}"/>
|
<field name="route_workcenter_id" string="工序" options="{'no_create': True}" context="{'is_duplicate': True, 'model_name': 'sf.embryo.model.type.routing.sort'}"/>
|
||||||
<field name="routing_type" string="类型"/>
|
<field name="routing_type" string="类型"/>
|
||||||
<field name="is_repeat" string="重复"/>
|
<field name="is_repeat" string="重复"/>
|
||||||
<field name="workcenter_ids" string="工作中心" widget="many2many_tags"/>
|
<field name="workcenter_ids" string="工作中心" widget="many2many_tags"/>
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
<field name='surface_technics_routing_tmpl_ids' style="white-space: pre-wrap;">
|
<field name='surface_technics_routing_tmpl_ids' style="white-space: pre-wrap;">
|
||||||
<tree editable='bottom'>
|
<tree editable='bottom'>
|
||||||
<field name="sequence" widget="handle" string="序号"/>
|
<field name="sequence" widget="handle" string="序号"/>
|
||||||
<field name="route_workcenter_id" string="工序" options="{'no_create': True}"/>
|
<field name="route_workcenter_id" string="工序" options="{'no_create': True}" context="{'is_duplicate': True, 'model_name': 'sf.surface_technics.model.type.routing.sort'}"/>
|
||||||
<field name="routing_type" string="类型"/>
|
<field name="routing_type" string="类型"/>
|
||||||
<field name="is_repeat" string="重复"/>
|
<field name="is_repeat" string="重复"/>
|
||||||
<field name="workcenter_ids" string="工作中心" widget="many2many_tags"/>
|
<field name="workcenter_ids" string="工作中心" widget="many2many_tags"/>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="action_sf_model_type" model="ir.actions.act_window">
|
<record id="action_sf_model_name" model="ir.actions.act_window">
|
||||||
<field name="name">模型类型</field>
|
<field name="name">模型类型</field>
|
||||||
<field name="type">ir.actions.act_window</field>
|
<field name="type">ir.actions.act_window</field>
|
||||||
<field name="res_model">sf.model.type</field>
|
<field name="res_model">sf.model.type</field>
|
||||||
@@ -96,11 +96,11 @@
|
|||||||
</record>
|
</record>
|
||||||
|
|
||||||
<menuitem
|
<menuitem
|
||||||
id="menu_sf_model_type"
|
id="menu_sf_model_name"
|
||||||
name="模型类型"
|
name="模型类型"
|
||||||
parent="mrp.menu_mrp_configuration"
|
parent="mrp.menu_mrp_configuration"
|
||||||
sequence="9"
|
sequence="9"
|
||||||
action="action_sf_model_type"
|
action="action_sf_model_name"
|
||||||
/>
|
/>
|
||||||
</data>
|
</data>
|
||||||
</odoo>
|
</odoo>
|
||||||
@@ -85,7 +85,8 @@ class ReworkWizard(models.TransientModel):
|
|||||||
# 2、当FM工单在CNC工单进行选择返工,并将已全部完成的ZM面工序全部勾选上时,FM工单上所有的已完成的工单(装夹预调工单)也必须进行勾选
|
# 2、当FM工单在CNC工单进行选择返工,并将已全部完成的ZM面工序全部勾选上时,FM工单上所有的已完成的工单(装夹预调工单)也必须进行勾选
|
||||||
if not wk_ids.filtered(lambda wk: wk.name == '装夹预调' and wk.processing_panel == panel):
|
if not wk_ids.filtered(lambda wk: wk.name == '装夹预调' and wk.processing_panel == panel):
|
||||||
if wk_ids.filtered(lambda wk: wk.name == 'CNC加工' and wk.processing_panel == panel):
|
if wk_ids.filtered(lambda wk: wk.name == 'CNC加工' and wk.processing_panel == panel):
|
||||||
sequence_max = wk_ids.filtered(lambda wk: wk.name == 'CNC加工' and wk.processing_panel == panel).sequence
|
sequence_max = wk_ids.filtered(
|
||||||
|
lambda wk: wk.name == 'CNC加工' and wk.processing_panel == panel).sequence
|
||||||
for wk_id in wk_ids.filtered(lambda wk: wk.sequence < sequence_max):
|
for wk_id in wk_ids.filtered(lambda wk: wk.sequence < sequence_max):
|
||||||
if len(wk_ids.filtered(lambda wk: wk.processing_panel == wk_id.processing_panel)) == 3:
|
if len(wk_ids.filtered(lambda wk: wk.processing_panel == wk_id.processing_panel)) == 3:
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
@@ -114,19 +115,17 @@ class ReworkWizard(models.TransientModel):
|
|||||||
else:
|
else:
|
||||||
raise ValidationError('请选择返工工单!!!')
|
raise ValidationError('请选择返工工单!!!')
|
||||||
if rework_workorder_ids:
|
if rework_workorder_ids:
|
||||||
clamp_workorder_ids = None
|
# 限制
|
||||||
if rework_workorder_ids:
|
# 1、单独返工CNC工单则不解绑托盘RFID,如单独返工装夹预调工单,则自动解绑托盘RFID;
|
||||||
# 限制
|
# 2、返工CNC工单和装夹预调工单则自动解绑RFID
|
||||||
# 1、单独返工CNC工单则不解绑托盘RFID,如单独返工装夹预调工单,则自动解绑托盘RFID;
|
clamp_workorder_ids = rework_workorder_ids.filtered(lambda rp: rp.routing_type == '装夹预调')
|
||||||
# 2、返工CNC工单和装夹预调工单则自动解绑RFID
|
if clamp_workorder_ids:
|
||||||
clamp_workorder_ids = rework_workorder_ids.filtered(lambda rp: rp.routing_type == '装夹预调')
|
for clamp_workorder_id in clamp_workorder_ids:
|
||||||
if clamp_workorder_ids:
|
self.production_id.workorder_ids.filtered(
|
||||||
for clamp_workorder_id in clamp_workorder_ids:
|
lambda wk: wk.processing_panel == clamp_workorder_id.processing_panel).write(
|
||||||
self.production_id.workorder_ids.filtered(
|
{'rfid_code': None})
|
||||||
lambda wk: wk.processing_panel == clamp_workorder_id.processing_panel).write(
|
# 返工工单状态设置为【返工】
|
||||||
{'rfid_code': None})
|
rework_workorder_ids.write({'state': 'rework'})
|
||||||
# 返工工单状态设置为【返工】
|
|
||||||
rework_workorder_ids.write({'state': 'rework'})
|
|
||||||
# 查询返工工单对应的工艺设计记录,并调用方法拼接数据,用于创建新的工单
|
# 查询返工工单对应的工艺设计记录,并调用方法拼接数据,用于创建新的工单
|
||||||
workorders_values = []
|
workorders_values = []
|
||||||
for work in rework_workorder_ids:
|
for work in rework_workorder_ids:
|
||||||
@@ -147,6 +146,11 @@ class ReworkWizard(models.TransientModel):
|
|||||||
new_pre_workorder_ids = self.production_id.workorder_ids.filtered(
|
new_pre_workorder_ids = self.production_id.workorder_ids.filtered(
|
||||||
lambda kw: kw.routing_type == '装夹预调' and kw.sequence == 0)
|
lambda kw: kw.routing_type == '装夹预调' and kw.sequence == 0)
|
||||||
self.production_id._reset_work_order_sequence()
|
self.production_id._reset_work_order_sequence()
|
||||||
|
# ====新工单绑定rfid===
|
||||||
|
for new_work_id in new_work_ids:
|
||||||
|
if new_work_id.routing_type in ['CNC加工', '解除装夹']:
|
||||||
|
new_work_id.write({'rfid_code': self.production_id.workorder_ids.filtered(
|
||||||
|
lambda wk: wk.sequence == new_work_id.sequence - 1).rfid_code})
|
||||||
self.production_id.detection_result_ids.filtered(
|
self.production_id.detection_result_ids.filtered(
|
||||||
lambda ap1: ap1.handle_result == '待处理').write({'handle_result': '已处理'})
|
lambda ap1: ap1.handle_result == '待处理').write({'handle_result': '已处理'})
|
||||||
panels = [] # 返工的加工面
|
panels = [] # 返工的加工面
|
||||||
|
|||||||
Reference in New Issue
Block a user