97 lines
4.7 KiB
Python
97 lines
4.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
from xml import etree
|
|
|
|
from odoo import models, fields, api, Command
|
|
from odoo.http import request
|
|
|
|
|
|
class jikimo_bom(models.Model):
|
|
_name = 'jikimo.bom'
|
|
_description = '功能刀具物料清单'
|
|
tool_inventory_id = fields.Many2one('sf.tool.inventory', '功能刀具清单')
|
|
tool_name = fields.Char(related="tool_inventory_id.name", string='功能刀具名称')
|
|
functional_cutting_tool_model_id = fields.Many2one(related='tool_inventory_id.functional_cutting_tool_model_id',
|
|
string='功能刀具类型')
|
|
tool_groups_id = fields.Many2one(related='tool_inventory_id.tool_groups_id', string='刀具组')
|
|
tool_length = fields.Float(related='tool_inventory_id.tool_length', string='刀具总长(mm)')
|
|
diameter = fields.Float(related='tool_inventory_id.diameter', string='直径(mm)')
|
|
angle = fields.Float(related='tool_inventory_id.angle', string='R角(mm)')
|
|
extension = fields.Float(related='tool_inventory_id.extension', string='伸出长度(mm)')
|
|
product_ids = fields.Many2many('product.product', string='产品')
|
|
knife_handle_model = fields.Selection(related='tool_inventory_id.knife_handle_model', string='使用刀柄型号')
|
|
options = fields.Char('产品清单')
|
|
|
|
def name_get(self):
|
|
result = []
|
|
for bom in self:
|
|
result.append((bom.id, '功能刀具物料清单'))
|
|
return result
|
|
def bom_product_domains(self, assembly_options):
|
|
self.options = assembly_options
|
|
cutting_tool_materials = self.env['sf.cutting.tool.material'].search(
|
|
[('name', 'in', assembly_options.split('+'))])
|
|
domains = []
|
|
for index, option in enumerate(cutting_tool_materials):
|
|
domain = ['&',('cutting_tool_material_id', '=', option.id),
|
|
("cutting_tool_type_id", "in",
|
|
self.tool_inventory_id.functional_cutting_tool_model_id.cutting_tool_type_ids.ids)]
|
|
if option.name == '刀柄':
|
|
domain = ['&']+domain+[ ("cutting_tool_taper_shank_model", "=", self.tool_inventory_id.knife_handle_model)]
|
|
|
|
if option.name == '整体式刀具':
|
|
domain=['&']+domain+[
|
|
'|',
|
|
# 刀具直径
|
|
('cutting_tool_blade_diameter', '=', self.tool_inventory_id.diameter),
|
|
|
|
# r角
|
|
('cutting_tool_blade_tip_working_size', '=', self.tool_inventory_id.angle)]
|
|
if option.name == '刀杆':
|
|
domain = ['&'] + domain + [
|
|
("cutting_tool_cutter_arbor_diameter", "=", self.tool_inventory_id.diameter)]
|
|
if option.name == '刀片':
|
|
domain = ['&'] + domain + [
|
|
("cutting_tool_blade_tip_circular_arc_radius", "=", self.tool_inventory_id.angle)]
|
|
if option.name == '刀盘':
|
|
domain = ['&'] + domain + [
|
|
("cutting_tool_cutter_head_diameter", "=", self.tool_inventory_id.diameter)]
|
|
domains=domains+domain
|
|
if index != 0:
|
|
domains = ['|'] + domains
|
|
# wqwqwe = self.env['product.product'].search(ddd)
|
|
# product = self.env['product.product'].search(domain)
|
|
# if product:
|
|
# products = products + product
|
|
return domains
|
|
|
|
def generate_bill_materials(self, assembly_options):
|
|
domains=self.bom_product_domains(assembly_options)
|
|
products = self.env['product.product'].search(domains)
|
|
if products:
|
|
self.product_ids = [Command.set(products.ids)]
|
|
# if option.name == '刀盘':
|
|
# hilt = self.env['product.product'].search(
|
|
# [('cutting_tool_blade_diameter', '=', self.tool_inventory_id.diameter),
|
|
# ('cutting_tool_material_id', '=', option.id)])
|
|
# self.product_ids = [Command.set(hilt.ids)]k
|
|
|
|
|
|
class jikimo_bom_line(models.Model):
|
|
_name = 'jikimo.bom.line'
|
|
_description = 'jikimo.bom.line'
|
|
|
|
name = fields.Char()
|
|
|
|
|
|
class ProductProduct(models.Model):
|
|
_inherit = 'product.product'
|
|
|
|
def search(self, args, offset=0, limit=None, order=None, count=False):
|
|
# 你可以在这里修改 `args` 以调整搜索条件
|
|
# 例如,添加额外的搜索条件
|
|
if self.env.context.get('jikimo_bom_product'):
|
|
bom_id = self.env['jikimo.bom'].browse(request.session.get('jikimo_bom_product').get('bom_id'))
|
|
domains = bom_id.bom_product_domains(bom_id.options)
|
|
args=args+domains
|
|
return super(ProductProduct, self).search(args, offset=offset, limit=limit, order=order, count=count)
|