1、采购入库作业详情的目标位置字段关闭创建功能,关闭货位的创建功能;2、优化入库到货位流程(进行中);
This commit is contained in:
@@ -10,6 +10,7 @@
|
|||||||
<field name='categ_id' class="custom_required" attrs="{'readonly': [('id', '!=', False)]}"/>
|
<field name='categ_id' class="custom_required" attrs="{'readonly': [('id', '!=', False)]}"/>
|
||||||
<field name='is_bfm' invisible="1"/>
|
<field name='is_bfm' invisible="1"/>
|
||||||
<field name='categ_type' invisible="1"/>
|
<field name='categ_type' invisible="1"/>
|
||||||
|
<field name='manual_quotation' attrs="{'invisible':[('upload_model_file', '=', [])]}"/>
|
||||||
<field name="upload_model_file"
|
<field name="upload_model_file"
|
||||||
widget="many2many_binary"
|
widget="many2many_binary"
|
||||||
attrs="{'invisible': ['|', '|',('categ_type', '!=', '成品'),('categ_type', '=', False),('is_bfm','=', True)]}"/>
|
attrs="{'invisible': ['|', '|',('categ_type', '!=', '成品'),('categ_type', '=', False),('is_bfm','=', True)]}"/>
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class MrpProduction(models.Model):
|
|||||||
production_line_state = fields.Selection([('待上产线', '待上产线'), ('已上产线', '已上产线'), ('已下产线', '已下产线')],
|
production_line_state = fields.Selection([('待上产线', '待上产线'), ('已上产线', '已上产线'), ('已下产线', '已下产线')],
|
||||||
string='上/下产线', default='待上产线')
|
string='上/下产线', default='待上产线')
|
||||||
|
|
||||||
manual_quotation = fields.Boolean('人工编程', default=False)
|
manual_quotation = fields.Boolean('人工编程', default=False, readonly=True)
|
||||||
|
|
||||||
@api.depends(
|
@api.depends(
|
||||||
'move_raw_ids.state', 'move_raw_ids.quantity_done', 'move_finished_ids.state',
|
'move_raw_ids.state', 'move_raw_ids.quantity_done', 'move_finished_ids.state',
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
], string="工序类型")
|
], string="工序类型")
|
||||||
results = fields.Char('结果')
|
results = fields.Char('结果')
|
||||||
|
|
||||||
manual_quotation = fields.Boolean('人工编程', default=False)
|
manual_quotation = fields.Boolean('人工编程', default=False, readonly=True)
|
||||||
|
|
||||||
@api.onchange('users_ids')
|
@api.onchange('users_ids')
|
||||||
def get_user_permissions(self):
|
def get_user_permissions(self):
|
||||||
|
|||||||
@@ -521,6 +521,9 @@ class ResProductMo(models.Model):
|
|||||||
string='注册状态', default='未注册')
|
string='注册状态', default='未注册')
|
||||||
industry_code = fields.Char('行业编码', readonly=True)
|
industry_code = fields.Char('行业编码', readonly=True)
|
||||||
|
|
||||||
|
# bfm下单
|
||||||
|
manual_quotation = fields.Boolean('人工编程', default=False, readonly=True)
|
||||||
|
|
||||||
@api.constrains('tool_length')
|
@api.constrains('tool_length')
|
||||||
def _check_tool_length_size(self):
|
def _check_tool_length_size(self):
|
||||||
if self.tool_length > 1000000:
|
if self.tool_length > 1000000:
|
||||||
|
|||||||
@@ -142,12 +142,6 @@ class ResaleOrderLine(models.Model):
|
|||||||
check_status = fields.Selection(related='order_id.check_status')
|
check_status = fields.Selection(related='order_id.check_status')
|
||||||
|
|
||||||
|
|
||||||
class ProductTemplate(models.Model):
|
|
||||||
_inherit = 'product.template'
|
|
||||||
|
|
||||||
manual_quotation = fields.Boolean('人工编程', default=False)
|
|
||||||
|
|
||||||
|
|
||||||
class RePurchaseOrder(models.Model):
|
class RePurchaseOrder(models.Model):
|
||||||
_inherit = 'purchase.order'
|
_inherit = 'purchase.order'
|
||||||
|
|
||||||
|
|||||||
@@ -191,6 +191,7 @@ class SfLocation(models.Model):
|
|||||||
# return res
|
# return res
|
||||||
|
|
||||||
# 生成货位
|
# 生成货位
|
||||||
|
|
||||||
def create_location(self):
|
def create_location(self):
|
||||||
"""
|
"""
|
||||||
当仓库类型为货架时,自动生成其下面的货位,数量为货架层数*层数容量
|
当仓库类型为货架时,自动生成其下面的货位,数量为货架层数*层数容量
|
||||||
@@ -429,7 +430,6 @@ class ShelfLocation(models.Model):
|
|||||||
}
|
}
|
||||||
return action
|
return action
|
||||||
|
|
||||||
|
|
||||||
# # 仓库类别(selection:库区、库位、货位)
|
# # 仓库类别(selection:库区、库位、货位)
|
||||||
# location_type = fields.Selection([
|
# location_type = fields.Selection([
|
||||||
# ('货架', '货架'),
|
# ('货架', '货架'),
|
||||||
@@ -516,6 +516,19 @@ class ShelfLocation(models.Model):
|
|||||||
else:
|
else:
|
||||||
raise UserError("该库位无产品")
|
raise UserError("该库位无产品")
|
||||||
|
|
||||||
|
@api.model_create_multi
|
||||||
|
def create(self, vals_list):
|
||||||
|
# 编码重复校验
|
||||||
|
barcode_list = []
|
||||||
|
for val in vals_list:
|
||||||
|
location = self.search([('barcode', '=', val['barcode'])])
|
||||||
|
if location:
|
||||||
|
barcode_list.append(val['name'])
|
||||||
|
if barcode_list:
|
||||||
|
raise UserError("货位编码【%s】存在重复" % barcode_list)
|
||||||
|
records = super(ShelfLocation, self).create(vals_list)
|
||||||
|
return records
|
||||||
|
|
||||||
|
|
||||||
class Sf_stock_move_line(models.Model):
|
class Sf_stock_move_line(models.Model):
|
||||||
_name = 'stock.move.line'
|
_name = 'stock.move.line'
|
||||||
@@ -812,35 +825,42 @@ class Sf_stock_move_line(models.Model):
|
|||||||
destination_location_id = fields.Many2one(
|
destination_location_id = fields.Many2one(
|
||||||
'sf.shelf.location', string='目标货位')
|
'sf.shelf.location', string='目标货位')
|
||||||
|
|
||||||
@api.onchange('destination_location_id')
|
def compute_destination_location_id(self):
|
||||||
def _compute_destination_location_id(self):
|
|
||||||
for record in self:
|
for record in self:
|
||||||
|
obj = self.env['sf.shelf.location'].search([('name', '=',
|
||||||
|
self.destination_location_id.name)])
|
||||||
|
# if obj.product_id and obj.product_id != record.product_id:
|
||||||
|
# # 判断货位产品和将入到该货位的产品是否是同一种
|
||||||
|
# raise ValidationError(
|
||||||
|
# '【%s】产品和【%s】货位的【%s】产品不同,请重新选择【%s】产品的货位!!!' %
|
||||||
|
# (record.product_id, obj.name, obj.product_id, record.product_id))
|
||||||
if record.lot_id:
|
if record.lot_id:
|
||||||
shelf_location_obj = self.env['sf.shelf.location'].search(
|
shelf_location_obj = self.env['sf.shelf.location'].search(
|
||||||
[('product_sn_id', '=', record.lot_id.id)])
|
[('product_sn_id', '=', record.lot_id.id)])
|
||||||
if shelf_location_obj:
|
if shelf_location_obj:
|
||||||
shelf_location_obj.product_sn_id = False
|
shelf_location_obj.product_sn_id = False
|
||||||
# obj = self.env['sf.shelf.location'].search([('location_id', '=',
|
|
||||||
# self.destination_location_id.id)])
|
|
||||||
obj = self.env['sf.shelf.location'].search([('name', '=',
|
|
||||||
self.destination_location_id.name)])
|
|
||||||
if obj:
|
if obj:
|
||||||
obj.product_sn_id = record.lot_id.id
|
obj.product_sn_id = record.lot_id.id
|
||||||
else:
|
else:
|
||||||
pass
|
|
||||||
else:
|
|
||||||
obj = self.env['sf.shelf.location'].search([('name', '=',
|
|
||||||
self.destination_location_id.name)])
|
|
||||||
if obj:
|
if obj:
|
||||||
obj.product_sn_id = record.lot_id.id
|
obj.product_sn_id = record.lot_id.id
|
||||||
else:
|
else:
|
||||||
obj = self.env['sf.shelf.location'].search([('name', '=',
|
|
||||||
self.destination_location_id.name)])
|
|
||||||
if obj:
|
if obj:
|
||||||
obj.product_id = record.product_id.id
|
obj.product_id = record.product_id.id
|
||||||
# obj.location_status = '占用'
|
# obj.location_status = '占用'
|
||||||
obj.product_num += record.reserved_uom_qty
|
obj.product_num += record.reserved_uom_qty
|
||||||
|
|
||||||
|
@api.onchange('destination_location_id')
|
||||||
|
def _check_destination_location_id(self):
|
||||||
|
for item in self:
|
||||||
|
if item:
|
||||||
|
line_destination_location_ids = []
|
||||||
|
for obj in item.picking_id.move_line_ids:
|
||||||
|
if obj.destination_location_id:
|
||||||
|
line_destination_location_ids.append(obj.destination_location_id.barcode)
|
||||||
|
if item.destination_location_id.barcode in line_destination_location_ids:
|
||||||
|
raise ValidationError('【%s】货位已经被占用,请重新选择!!!' % item.destination_location_id.barcode)
|
||||||
|
|
||||||
|
|
||||||
class SfStockPicking(models.Model):
|
class SfStockPicking(models.Model):
|
||||||
_inherit = 'stock.picking'
|
_inherit = 'stock.picking'
|
||||||
@@ -863,12 +883,15 @@ class SfStockPicking(models.Model):
|
|||||||
res = super(SfStockPicking, self).button_validate()
|
res = super(SfStockPicking, self).button_validate()
|
||||||
for line in self.move_line_ids:
|
for line in self.move_line_ids:
|
||||||
if line:
|
if line:
|
||||||
|
# 调用入库方法进行入库
|
||||||
|
line.compute_destination_location_id()
|
||||||
if line.current_location_id:
|
if line.current_location_id:
|
||||||
if line.current_location_id.product_sn_id:
|
if line.current_location_id.product_sn_id:
|
||||||
line.current_location_id.product_sn_id = False
|
line.current_location_id.product_sn_id = False
|
||||||
# line.current_location_id.location_status = '空闲'
|
# line.current_location_id.location_status = '空闲'
|
||||||
line.current_location_id.product_num = 0
|
line.current_location_id.product_num = 0
|
||||||
|
|
||||||
|
# 对入库作业的刀柄和托盘进行Rfid绑定校验
|
||||||
for move in self.move_ids:
|
for move in self.move_ids:
|
||||||
if move and move.product_id.cutting_tool_material_id.name == '刀柄' or '托盘' in (
|
if move and move.product_id.cutting_tool_material_id.name == '刀柄' or '托盘' in (
|
||||||
move.product_id.fixture_material_id.name or ''):
|
move.product_id.fixture_material_id.name or ''):
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<!-- ]"/> -->
|
<!-- ]"/> -->
|
||||||
<field name="destination_location_id" domain="[('location_id', '=', location_dest_id_value), '|',
|
<field name="destination_location_id" domain="[('location_id', '=', location_dest_id_value), '|',
|
||||||
('location_status', '=', '空闲'), ('product_id', '=', current_product_id), ('product_sn_id',
|
('location_status', '=', '空闲'), ('product_id', '=', current_product_id), ('product_sn_id',
|
||||||
'=', there_is_no_sn)]"/>
|
'=', there_is_no_sn)]" options="{'no_create': True,'no_create_edit':True}"/>
|
||||||
<field name="rfid_barcode" string="Rfid"/>
|
<field name="rfid_barcode" string="Rfid"/>
|
||||||
|
|
||||||
<!-- <field name="location_dest_id_product_type"/> -->
|
<!-- <field name="location_dest_id_product_type"/> -->
|
||||||
|
|||||||
@@ -126,7 +126,7 @@
|
|||||||
<field name="name">Shelf Location form</field>
|
<field name="name">Shelf Location form</field>
|
||||||
<field name="model">sf.shelf.location</field>
|
<field name="model">sf.shelf.location</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Shelf Location">
|
<form string="Shelf Location" create="0">
|
||||||
<header>
|
<header>
|
||||||
|
|
||||||
<field name="location_status" invisible="1"/>
|
<field name="location_status" invisible="1"/>
|
||||||
@@ -175,7 +175,7 @@
|
|||||||
<field name="name">shelf.location.kanban</field>
|
<field name="name">shelf.location.kanban</field>
|
||||||
<field name="model">sf.shelf.location</field>
|
<field name="model">sf.shelf.location</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<kanban class="o_kanban_mobile" js_class="custom_kanban">
|
<kanban class="o_kanban_mobile" js_class="custom_kanban" create="0">
|
||||||
<templates>
|
<templates>
|
||||||
<t t-name="kanban-box">
|
<t t-name="kanban-box">
|
||||||
<div t-attf-class="oe_kanban_card oe_kanban_global_click
|
<div t-attf-class="oe_kanban_card oe_kanban_global_click
|
||||||
|
|||||||
Reference in New Issue
Block a user