功能刀具清单 bom添加查询排序与清单明细行删除校验
This commit is contained in:
@@ -11,3 +11,4 @@ from . import stock
|
|||||||
from . import jikimo_bom
|
from . import jikimo_bom
|
||||||
from . import tool_inventory
|
from . import tool_inventory
|
||||||
from . import functional_cutting_tool_model
|
from . import functional_cutting_tool_model
|
||||||
|
# from . import product_product
|
||||||
@@ -3,4 +3,4 @@ from odoo import models, fields
|
|||||||
|
|
||||||
class SyncFunctionalCuttingToolModel(models.Model):
|
class SyncFunctionalCuttingToolModel(models.Model):
|
||||||
_inherit = 'sf.functional.cutting.tool.model'
|
_inherit = 'sf.functional.cutting.tool.model'
|
||||||
cutting_tool_type_ids = fields.Many2many('sf.cutting.tool.type', string='刀具物料类型')
|
cutting_tool_type_ids = fields.Many2many('sf.cutting.tool.type', string='适用刀具物料类型', required=True)
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from collections import Counter
|
||||||
from xml import etree
|
from xml import etree
|
||||||
|
|
||||||
from odoo import models, fields, api, Command
|
from odoo import models, fields, api, Command
|
||||||
from odoo.exceptions import UserError
|
from odoo.exceptions import UserError, AccessError
|
||||||
from odoo.http import request
|
from odoo.http import request
|
||||||
|
|
||||||
|
|
||||||
@@ -28,6 +29,26 @@ class jikimo_bom(models.Model):
|
|||||||
result.append((bom.id, '功能刀具物料清单'))
|
result.append((bom.id, '功能刀具物料清单'))
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def check_types_in_list(self):
|
||||||
|
# 统计每个元素的类型
|
||||||
|
type_counts = Counter(item.cutting_tool_material_id.name for item in self.product_ids)
|
||||||
|
return all(count > 0 for count in type_counts.values()) and len(type_counts) == self.options.split('+')
|
||||||
|
|
||||||
|
def write(self, vals):
|
||||||
|
# 在更新模型时记录旧的 Many2many ID 列表
|
||||||
|
if 'product_ids' in vals:
|
||||||
|
old_product_counter = Counter(self.product_ids.ids)
|
||||||
|
super(jikimo_bom, self).write(vals)
|
||||||
|
new_product_counter = Counter(self.product_ids.ids)
|
||||||
|
delete_product_counter = old_product_counter - new_product_counter
|
||||||
|
if delete_product_counter:
|
||||||
|
# 删除操作
|
||||||
|
if self.check_types_in_list():
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
raise UserError('每种物料最少要有一个')
|
||||||
|
return super(jikimo_bom, self).write(vals)
|
||||||
|
|
||||||
def bom_product_domains(self, assembly_options):
|
def bom_product_domains(self, assembly_options):
|
||||||
self.options = assembly_options
|
self.options = assembly_options
|
||||||
cutting_tool_materials = self.env['sf.cutting.tool.material'].search(
|
cutting_tool_materials = self.env['sf.cutting.tool.material'].search(
|
||||||
@@ -65,6 +86,7 @@ class jikimo_bom(models.Model):
|
|||||||
# product = self.env['product.product'].search(domain)
|
# product = self.env['product.product'].search(domain)
|
||||||
# if product:
|
# if product:
|
||||||
# products = products + product
|
# products = products + product
|
||||||
|
domains = domains + [('stock_move_count', '>', 0)]
|
||||||
return domains
|
return domains
|
||||||
|
|
||||||
def generate_bill_materials(self, assembly_options):
|
def generate_bill_materials(self, assembly_options):
|
||||||
@@ -88,6 +110,16 @@ class jikimo_bom_line(models.Model):
|
|||||||
|
|
||||||
class ProductProduct(models.Model):
|
class ProductProduct(models.Model):
|
||||||
_inherit = 'product.product'
|
_inherit = 'product.product'
|
||||||
|
_order = 'cutting_tool_material_id, cutting_tool_type_id'
|
||||||
|
stock_move_count = fields.Integer(string='stock_move count', compute='_compute_stock_move_count', store=True)
|
||||||
|
|
||||||
|
@api.depends('stock_move_ids')
|
||||||
|
def _compute_stock_move_count(self):
|
||||||
|
for record in self:
|
||||||
|
if record.stock_move_ids:
|
||||||
|
record.stock_move_count = len(record.stock_move_ids)
|
||||||
|
else:
|
||||||
|
record.stock_move_count = 0
|
||||||
|
|
||||||
def search(self, args, offset=0, limit=None, order=None, count=False):
|
def search(self, args, offset=0, limit=None, order=None, count=False):
|
||||||
# 你可以在这里修改 `args` 以调整搜索条件
|
# 你可以在这里修改 `args` 以调整搜索条件
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ from odoo.http import request
|
|||||||
class ToolInventory(models.Model):
|
class ToolInventory(models.Model):
|
||||||
_inherit = 'sf.tool.inventory'
|
_inherit = 'sf.tool.inventory'
|
||||||
_description = '功能刀具清单'
|
_description = '功能刀具清单'
|
||||||
knife_handle_model = fields.Selection([('BT30', 'BT30'), ('BT40', 'BT40'), ('BT50', 'BT50'), ('GSK30', 'GSK30'), ('GSK40', 'GSK40'), ('GSK50', 'GSK50')], string='使用刀柄型号')
|
knife_handle_model = fields.Selection([('BT30', 'BT30'), ('BT40', 'BT40'), ('BT50', 'BT50'), ('GSK30', 'GSK30'), ('GSK40', 'GSK40'), ('GSK50', 'GSK50')], string='使用刀柄型号', required=True)
|
||||||
jikimo_bom_ids = fields.One2many('jikimo.bom','tool_inventory_id', 'bom单')
|
jikimo_bom_ids = fields.One2many('jikimo.bom','tool_inventory_id', 'bom单')
|
||||||
|
blade_length = fields.Float('刃长(mm)')
|
||||||
def bom_mainfest(self):
|
def bom_mainfest(self):
|
||||||
|
|
||||||
jikimo_bom_ids = self.mapped('jikimo_bom_ids')
|
jikimo_bom_ids = self.mapped('jikimo_bom_ids')
|
||||||
if not jikimo_bom_ids:
|
if not jikimo_bom_ids:
|
||||||
self._bom_mainfest()
|
self._bom_mainfest()
|
||||||
|
|||||||
@@ -35,11 +35,12 @@
|
|||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<!-- <field name="categ_id"/>-->
|
<!-- <field name="categ_id"/>-->
|
||||||
<field name="cutting_tool_material_id"/>
|
<field name="cutting_tool_material_id"/>
|
||||||
|
<field name="cutting_tool_type_id"/>
|
||||||
|
|
||||||
<field name="cutting_tool_model_id"/>
|
<field name="cutting_tool_model_id"/>
|
||||||
<field name="specification_id"/>
|
<field name="specification_id"/>
|
||||||
<field name="brand_id"/>
|
<field name="brand_id"/>
|
||||||
<field name="qty_available"/>
|
<field name="qty_available"/>
|
||||||
|
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</page>
|
</page>
|
||||||
|
|||||||
Reference in New Issue
Block a user