diff --git a/sf_manufacturing/models/model_type.py b/sf_manufacturing/models/model_type.py
index 48707939..29357d02 100644
--- a/sf_manufacturing/models/model_type.py
+++ b/sf_manufacturing/models/model_type.py
@@ -1,4 +1,4 @@
-from odoo import fields, models, api
+from odoo import fields, models
class ModelType(models.Model):
diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py
index 20bf2b2a..a3350a58 100644
--- a/sf_tool_management/__manifest__.py
+++ b/sf_tool_management/__manifest__.py
@@ -10,12 +10,10 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['sf_base', 'sf_manufacturing'],
+ 'depends': ['sf_manufacturing'],
'data': [
'security/group_security.xml',
'security/ir.model.access.csv',
- # 'views/tool_base_views.xml',
- # # 'views/menu_view.xml',
'wizard/wizard_view.xml',
'views/tool_base_views.xml',
'views/menu_view.xml',
diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py
index 35949f47..99a7f3d9 100644
--- a/sf_tool_management/models/base.py
+++ b/sf_tool_management/models/base.py
@@ -25,7 +25,7 @@ class FunctionalCuttingToolEntity(models.Model):
tool_loading_length = fields.Float(string='装刀长(mm)', readonly=True)
functional_tool_length = fields.Float(string='伸出长(mm)', readonly=True)
effective_length = fields.Float(string='有效长(mm)', readonly=True)
- tool_room_num = fields.Integer(string='刀具房数量', readonly=True, )
+ tool_room_num = fields.Integer(string='刀具房数量', readonly=True, compute='_compute_location_num')
line_edge_knife_library_num = fields.Integer(string='线边刀库数量', readonly=True)
machine_knife_library_num = fields.Integer(string='机内刀库数量', readonly=True)
max_lifetime_value = fields.Integer(string='最大寿命值(min)', readonly=True)
@@ -241,7 +241,7 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
record = self.env['sf.real.time.distribution.of.functional.tools'].search(
[('name', '=', vals['name']), ('sf_cutting_tool_type_id', '=', vals['sf_cutting_tool_type_id']),
('diameter', '=', vals['diameter']), ('knife_tip_r_angle', '=', vals['knife_tip_r_angle']),
- ('knife_tip_r_angle', '=', vals['knife_tip_r_angle'])])
+ ('coarse_middle_thin', '=', vals['coarse_middle_thin'])])
print(record)
if len(record) > 0:
for obj in record:
diff --git a/sf_tool_management/models/tool_material_search.py b/sf_tool_management/models/tool_material_search.py
index b89b76cd..2453aafb 100644
--- a/sf_tool_management/models/tool_material_search.py
+++ b/sf_tool_management/models/tool_material_search.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
from odoo import fields, models, api, SUPERUSER_ID
-from odoo.exceptions import ValidationError
+# from odoo.exceptions import ValidationError
# 刀具物料搜索
diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml
index a764b896..8ebb20d4 100644
--- a/sf_tool_management/views/tool_base_views.xml
+++ b/sf_tool_management/views/tool_base_views.xml
@@ -284,6 +284,7 @@
+
diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py
index 16ae5259..649d6b86 100644
--- a/sf_tool_management/wizard/wizard.py
+++ b/sf_tool_management/wizard/wizard.py
@@ -341,6 +341,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
功能刀具组装
:return:
"""
+ # 获取组装单对象
functional_tool_assembly = self.env['sf.functional.tool.assembly'].search([
('assembly_order_code', '=', self.assembly_order_code),
('machine_tool_name_id', '=', self.machine_tool_name_id.id),
@@ -349,20 +350,28 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
])
# 对物料做必填判断
self.materials_must_be_judged()
- # # 刀具物料出库
- # if self.integral_code_id:
- # print("已运行1111")
- # self.tool_material_out_of_store(self.integral_code_id)
+ product_id = self.env['product.product'].search([('name', '=', '功能刀具')])
# 创建组装入库单
# 创建功能刀具批次/序列号记录
- stock_lot = self.create_assemble_warehouse_receipt(functional_tool_assembly)
+ stock_lot = product_id.create_assemble_warehouse_receipt(self.id, functional_tool_assembly)
# 创建刀具组装入库单
self.create_stocking_picking(stock_lot)
- # 封装功能刀具数据
- desc_1 = self.get_desc_1(stock_lot)
+ # 刀具物料出库
+ if self.integral_code_id:
+ product_id.tool_material_stock_moves(self.integral_code_id)
+ if self.blade_code_id:
+ product_id.tool_material_stock_moves(self.blade_code_id)
+ if self.bar_code_id:
+ product_id.tool_material_stock_moves(self.bar_code_id)
+ if self.pad_code_id:
+ product_id.tool_material_stock_moves(self.pad_code_id)
+ if self.handle_code_id:
+ product_id.tool_material_stock_moves(self.handle_code_id)
+ if self.chuck_code_id:
+ product_id.tool_material_stock_moves(self.chuck_code_id)
- # 创建功能刀具列表记录
+ # ============================创建功能刀具列表、安全库存记录===============================
# 封装功能刀具数据
desc_2 = self.get_desc_2(stock_lot, functional_tool_assembly)
# 创建功能刀具列表记录
@@ -376,9 +385,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
'coarse_middle_thin': self.after_assembly_coarse_middle_thin,
}, record_1)
+ # =====================修改功能刀具组装单、机床换刀申请、CAM工单程序用刀计划的状态==============
+ # 封装功能刀具数据
+ desc_1 = self.get_desc_1(stock_lot)
# 修改功能刀具组装单信息
functional_tool_assembly.write(desc_1)
-
if functional_tool_assembly.sf_machine_table_tool_changing_apply_id:
# 修改机床换刀申请的状态
self.env['sf.machine.table.tool.changing.apply'].sudo().search([
@@ -422,103 +433,6 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
# 将刀具组装入库单的状态更改为就绪
picking_id.action_confirm()
- def create_assemble_warehouse_receipt(self, functional_tool_assembly):
- """
- 创建功能刀具批次/序列号记录
- """
- product_id = self.env['product.product'].search([('name', '=', '功能刀具')])
-
- stock_lot = self.env['stock.lot'].create({
- 'name': self.get_stock_lot_name(),
- 'product_id': product_id.id,
- 'company_id': self.env.company.id
- })
- # 创建功能刀具该批次/序列号 库存移动和移动历史
- self.create_stock_quant(product_id, stock_lot, functional_tool_assembly)
-
- return stock_lot
-
- # def tool_material_out_of_store(self, tool_material_serial_id):
- # """
- # 刀具物料出库
- # """
- # # 获取位置
- # location_id = self.env['stock.location'].search([('name', '=', 'Stock')])
- # location_dest_id = self.env['stock.location'].search([('name', '=', '刀具组装位置')])
- # print("已运行2222")
- # # 创建库存移动
- # stock_move_id = self.env['stock.move'].create({
- # 'name': '刀具物料出库',
- # 'lot_id': tool_material_serial_id.id,
- # 'product_id': tool_material_serial_id.product_id.id,
- # 'location_id': location_id.id,
- # 'location_dest_id': location_dest_id.id,
- # 'product_uom_qty': 1.00,
- # 'state': 'done'
- # })
- # print("已运行3333")
- # print(stock_move_id)
- # # 创建移动历史
- # stock_move_line_id = self.env['stock.move.line'].create({
- # 'product_id': tool_material_serial_id.product_id.id,
- # 'lot_id': tool_material_serial_id.id,
- # 'move_id': stock_move_id.id,
- # 'install_tool_time': fields.Datetime.now(),
- # 'qty_done': 1.0,
- # 'state': 'done'
- # })
- #
- # return stock_move_id, stock_move_line_id
-
- def create_stock_quant(self, product_id, stock_lot, functional_tool_assembly):
- """
- 创建功能刀具该批次/序列号 库存移动和移动历史
- """
- # 获取位置对象
- stock_location_id = self.env['stock.location'].search([('name', '=', '组装后')])
- location_inventory_id = self.env['stock.location'].search([('name', '=', 'Inventory adjustment')])
-
- # 创建库存移动
- stock_move_id = self.env['stock.move'].create({
- 'name': '功能刀具组装出库',
- 'product_id': product_id.id,
- 'location_id': location_inventory_id.id,
- 'location_dest_id': stock_location_id.id,
- 'product_uom_qty': 1.00,
- 'state': 'done'
- })
-
- # 创建移动历史
- stock_move_line_id = self.env['stock.move.line'].create({
- 'product_id': product_id.id,
- 'functional_tool_name_id': functional_tool_assembly.id,
- 'lot_id': stock_lot.id,
- 'move_id': stock_move_id.id,
- 'install_tool_time': fields.Datetime.now(),
- 'qty_done': 1.0,
- 'state': 'done'
- })
- return stock_move_id, stock_move_line_id
-
- def get_stock_lot_name(self):
- """
- 生成功能刀具序列号
- """
- code = 'JKM-T-' + str(self.functional_tool_type_id.code) + '-' + str(self.functional_tool_diameter) + '-'
- new_time = fields.Date.today()
- code += str(new_time) + '-'
- stock_lot_id = self.env['stock.lot'].sudo().search(
- [('name', 'like', new_time), ('product_id.name', '=', '功能刀具')],
- limit=1,
- order="id desc"
- )
- if not stock_lot_id:
- num = "%03d" % 1
- else:
- m = int(stock_lot_id.name[-3:]) + 1
- num = "%03d" % m
- return code + str(num)
-
def get_desc_1(self, stock_lot):
return {
'barcode_id': stock_lot.id,
@@ -583,3 +497,90 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
'cut_number': self.cut_number,
'current_location_id': stock_lot.quant_ids.location_id.ids[-1],
}
+
+
+class ProductProduct(models.Model):
+ _inherit = 'product.product'
+
+ def create_assemble_warehouse_receipt(self, tool_assembly_order_id, functional_tool_assembly):
+ """
+ 创建功能刀具批次/序列号记录
+ """
+ product_id = self.env['product.product'].search([('name', '=', '功能刀具')])
+
+ stock_lot = self.env['stock.lot'].create({
+ 'name': self.get_stock_lot_name(tool_assembly_order_id),
+ 'product_id': product_id.id,
+ 'company_id': self.env.company.id
+ })
+ # 获取位置对象
+ location_inventory_id = self.env['stock.location'].search([('name', '=', 'Production')])
+ stock_location_id = self.env['stock.location'].search([('name', '=', '组装后')])
+ # 创建功能刀具该批次/序列号 库存移动和移动历史
+ stock_lot.create_stock_quant(location_inventory_id, stock_location_id, functional_tool_assembly.id)
+
+ return stock_lot
+
+ def get_stock_lot_name(self, tool_assembly_order_id):
+ """
+ 生成功能刀具序列号
+ """
+ tool_assembly_order = self.env['sf.functional.tool.assembly.order'].search(
+ [('id', '=', tool_assembly_order_id)])
+ code = 'JKM-T-' + str(tool_assembly_order.after_assembly_functional_tool_type_id.code) + '-' + str(
+ tool_assembly_order.after_assembly_functional_tool_diameter) + '-'
+ new_time = fields.Date.today()
+ code += str(new_time) + '-'
+ stock_lot_id = self.env['stock.lot'].sudo().search(
+ [('name', 'like', new_time), ('product_id.name', '=', '功能刀具')],
+ limit=1,
+ order="id desc"
+ )
+ if not stock_lot_id:
+ num = "%03d" % 1
+ else:
+ m = int(stock_lot_id.name[-3:]) + 1
+ num = "%03d" % m
+ return code + str(num)
+
+ def tool_material_stock_moves(self, tool_material):
+ """
+ 对刀具物料进行库存移动到 刀具组装位置
+ """
+ # 获取位置对象
+ location_inventory_id = tool_material.quant_ids.location_id[-1]
+ print(location_inventory_id)
+ stock_location_id = self.env['stock.location'].search([('name', '=', '刀具组装位置')])
+ # 创建功能刀具该批次/序列号 库存移动和移动历史
+ tool_material.create_stock_quant(location_inventory_id, stock_location_id, None)
+
+
+class StockLot(models.Model):
+ _inherit = 'stock.lot'
+
+ def create_stock_quant(self, location_inventory_id, stock_location_id, functional_tool_assembly_id):
+ """
+ 对功能刀具组装过程的功能刀具和刀具物料进行库存移动,以及创建移动历史
+ """
+
+ # 创建库存移动记录
+ stock_move_id = self.env['stock.move'].create({
+ 'name': '功能刀具组装',
+ 'product_id': self.product_id.id,
+ 'location_id': location_inventory_id.id,
+ 'location_dest_id': stock_location_id.id,
+ 'product_uom_qty': 1.00,
+ 'state': 'done'
+ })
+
+ # 创建移动历史记录
+ stock_move_line_id = self.env['stock.move.line'].create({
+ 'product_id': self.product_id.id,
+ 'functional_tool_name_id': functional_tool_assembly_id,
+ 'lot_id': self.id,
+ 'move_id': stock_move_id.id,
+ 'install_tool_time': fields.Datetime.now(),
+ 'qty_done': 1.0,
+ 'state': 'done'
+ })
+ return stock_move_id, stock_move_line_id