Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/制造代码优化

This commit is contained in:
mgw
2023-12-17 10:50:18 +08:00
19 changed files with 185 additions and 43 deletions

View File

@@ -60,7 +60,6 @@
<record id="group_sale_director" model="res.groups">
<field name="name">销售总监</field>
<field name="category_id" ref="base.module_category_sales_sales"/>
<field name="implied_ids" eval="[(4, ref('sf_base.group_sale_salemanager'))]"/>
</record>
<record id="group_plan_dispatch" model="res.groups">
@@ -72,7 +71,7 @@
<record id="group_plan_director" model="res.groups">
<field name="name">计划总监</field>
<field name="category_id" ref="module_category_plan"/>
<field name="implied_ids" eval="[(4, ref('sf_base.group_plan_dispatch'))]"/>
<!-- <field name="implied_ids" eval="[(4, ref('sf_base.group_plan_dispatch'))]"/>-->
</record>
<record id="group_purchase" model="res.groups">

View File

@@ -13,7 +13,7 @@
'author': 'jikimo',
'website': 'https://sf.cs.jikimo.com',
# 此处依赖sf_manufacturing是因为我要重写其中的一个字段operation_id的string故需要sf_manufacturing先安装
'depends': ['quality_control', 'sf_maintenance'],
'depends': ['quality_control'],
'data': [
'security/ir.model.access.csv',
# 'views/view.xml'

View File

@@ -39,6 +39,20 @@ access_quality_alert_team_group_sf_tool_user,quality_alert_team_group_sf_tool_us
access_quality_alert_team_group_sf_order_user,quality_alert_team_group_sf_order_user,quality.model_quality_alert_team,sf_base.group_sf_order_user,1,0,0,0
access_quality_alert_team_group_sf_mrp_manager,quality_alert_team_group_sf_mrp_manager,quality.model_quality_alert_team,sf_base.group_sf_mrp_manager,1,0,0,0
access_product_template_group_quality,product_template_group_quality,product.model_product_template,sf_base.group_quality,1,0,0,0
access_product_template_group_quality_director,product_template_group_quality_director,product.model_product_template,sf_base.group_quality_director,1,0,0,0
access_product_template_group_plan_dispatch,product_template_group_plan_dispatch,product.model_product_template,sf_base.group_plan_dispatch,1,0,0,0
access_product_template_group_plan_director,product_template_group_plan_director,product.model_product_template,sf_base.group_plan_director,1,0,0,0
access_product_template_group_sf_equipment_user,product_template_group_sf_equipment_user,product.model_product_template,sf_base.group_sf_equipment_user,1,0,0,0
access_product_template_group_sf_tool_user,product_template_group_sf_tool_user,product.model_product_template,sf_base.group_sf_tool_user,1,0,0,0
access_product_template_group_sf_order_user,product_template_group_sf_order_user,product.model_product_template,sf_base.group_sf_order_user,1,0,0,0
access_product_template_group_sf_mrp_manager,product_template_group_sf_mrp_manager,product.model_product_template,sf_base.group_sf_mrp_manager,1,0,0,0
access_product_template_group_equipment_user,product_template_group_equipment_user,product.model_product_template,sf_maintenance.sf_group_equipment_user,1,0,0,0
access_product_template_group_equipment_manager,product_template_group_equipment_manager,product.model_product_template,sf_maintenance.sf_group_equipment_manager,1,0,0,0
access_quality_alert_stage_group_quality,quality_alert_stage_group_quality,quality.model_quality_alert_stage,sf_base.group_quality,1,0,0,0
access_quality_alert_stage_group_quality_director,quality_alert_stage_group_quality_director,quality.model_quality_alert_stage,sf_base.group_quality_director,1,0,0,0
access_quality_alert_stage,quality.alert.stage,quality.model_quality_alert_stage,sf_base.group_plan_dispatch,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
39 access_product_template_group_quality_director product_template_group_quality_director product.model_product_template sf_base.group_quality_director 1 0 0 0
40 access_product_template_group_plan_dispatch product_template_group_plan_dispatch product.model_product_template sf_base.group_plan_dispatch 1 0 0 0
41 access_product_template_group_plan_director product_template_group_plan_director product.model_product_template sf_base.group_plan_director 1 0 0 0
42 access_product_template_group_sf_equipment_user product_template_group_sf_equipment_user product.model_product_template sf_base.group_sf_equipment_user 1 0 0 0
43 access_product_template_group_sf_tool_user product_template_group_sf_tool_user product.model_product_template sf_base.group_sf_tool_user 1 0 0 0
44 access_product_template_group_sf_order_user product_template_group_sf_order_user product.model_product_template sf_base.group_sf_order_user 1 0 0 0
45 access_product_template_group_sf_mrp_manager product_template_group_sf_mrp_manager product.model_product_template sf_base.group_sf_mrp_manager 1 0 0 0
46 access_product_template_group_equipment_user product_template_group_equipment_user product.model_product_template sf_maintenance.sf_group_equipment_user 1 0 0 0
47 access_product_template_group_equipment_manager product_template_group_equipment_manager product.model_product_template sf_maintenance.sf_group_equipment_manager 1 0 0 0
48 access_quality_alert_stage_group_quality quality_alert_stage_group_quality quality.model_quality_alert_stage sf_base.group_quality 1 0 0 0
49 access_quality_alert_stage_group_quality_director quality_alert_stage_group_quality_director quality.model_quality_alert_stage sf_base.group_quality_director 1 0 0 0
50 access_quality_alert_stage quality.alert.stage quality.model_quality_alert_stage sf_base.group_plan_dispatch 1 0 0 0
51
52
53
54
55
56
57
58

View File

@@ -1 +1,3 @@
from . import models
from . import wizard

View File

@@ -14,6 +14,7 @@
'data': [
'security/group_security.xml',
'security/ir.model.access.csv',
'wizard/sale_order_wizard_views.xml',
'views/sale_team.xml',
'views/sale_order_view.xml',
'views/purchase_order_view.xml',

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,6 +1,7 @@
import datetime
import base64
from odoo import models, fields
from odoo import models, fields, api
from odoo.osv import expression
class ReSaleOrder(models.Model):
@@ -81,7 +82,16 @@ class RePurchaseOrder(models.Model):
check_status = fields.Selection([('unchecked', '未审核'), ('checked', '已审核')], '审核状态', default='unchecked')
# 审核
def action_check(self):
self.check_status = 'checked'
class ResPartnerToSale(models.Model):
_inherit = 'res.partner'
@api.model
def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
if self._context.get('is_customer'):
if self.env.user.has_group('sf_base.group_sale_director'):
domain = [('customer_rank', '=', 1)]
else:
domain = [('user_id', '=', self.env.user.id)]
return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
return super()._name_search(name, args, operator, limit, name_get_uid)

View File

@@ -11,7 +11,7 @@
</record>
<record model="ir.rule" id="crm_team_rule_director">
<field name="name">销售总监</field>
<field name="name">销售总监查看所有的订单</field>
<field name="model_id" ref="sales_team.model_crm_team"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('sf_base.group_sale_director'))]"/>
@@ -20,20 +20,30 @@
<field name="perm_create" eval="1"/>
</record>
<!-- <record model="ir.rule" id="sale_order_rule_director">-->
<!-- <field name="name">销售总监查看所有的订单</field>-->
<!-- <field name="model_id" ref="model_sale_order"/>-->
<!-- <field name="domain_force">[(1,'=',1)]</field>-->
<!-- <field name="groups" eval="[(4, ref('sf_base.group_sale_director'))]"/>-->
<!-- <field name="perm_read" eval="1"/>-->
<!-- <field name="perm_write" eval="1"/>-->
<!-- </record>-->
<record model="ir.rule" id="sale_customer_rule_director">
<field name="name">销售总监查看所有客户</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="domain_force">[(1,'=',1),('customer_rank','=',1)]</field>
<field name="groups" eval="[(4, ref('sf_base.group_sale_director'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
</record>
<record model="ir.rule" id="sale_customer_rule_my">
<field name="name">销售经理查看自己的客户</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="domain_force">['|',('user_id','=',user.id),('create_uid', '=',user.id)]</field>
<field name="groups" eval="[(4, ref('sf_base.group_sale_salemanager'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
</record>
<record model="ir.rule" id="sale_order_rule_salemanager">
<field name="name">销售经理查看自己的订单</field>
<field name="model_id" ref="model_sale_order"/>
<field name="domain_force">['|',('partner_id','=',user.partner_id.id),('create_uid', '=',user.id)]</field>
<field name="domain_force">[('user_id', '=',user.id)]</field>
<field name="groups" eval="[(4, ref('sf_base.group_sale_salemanager'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
@@ -60,7 +70,7 @@
</record>
<record model="ir.rule" id="purchase_supplier_rule_director">
<record model="ir.rule" id="purchase_supplier_rule_director">
<field name="name">采购总监查看所有供应商</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="domain_force">[(1,'=',1)]</field>

View File

@@ -8,6 +8,40 @@ access_sale_order_line_director,sale_order_line_director,model_sale_order_line,s
access_crm_team_member_manager,crm_team_manager,sales_team.model_crm_team,sf_base.group_sale_director,1,1,1,0
access_crm_team_member_director,crm_team_member_director,sales_team.model_crm_team_member,sf_base.group_sale_director,1,1,1,0
access_res_users,res_users,base.model_res_users,sf_base.group_sale_director,1,1,1,0
access_product_template_group_sale_salemanager,product_template_group_sale_salemanager,product.model_product_template,sf_base.group_sale_salemanager,1,0,0,0
access_product_template_group_sale_director,product_template_group_sale_director,product.model_product_template,sf_base.group_sale_director,1,0,0,0
access_product_template_group_purchase,product_template_group_purchase,product.model_product_template,sf_base.group_purchase,1,0,0,0
access_product_template_group_purchase_director,product_template_group_purchase_director,product.model_product_template,sf_base.group_purchase_director,1,0,0,0
access_stock_picking_group_sale_salemanager,stock_picking_group_sale_salemanager,stock.model_stock_picking,sf_base.group_sale_salemanager,1,0,0,0
access_stock_picking_group_sale_director,stock_picking_group_sale_director,stock.model_stock_picking,sf_base.group_sale_director,1,0,0,0
access_stock_picking_group_purchase,stock_picking_group_purchase,stock.model_stock_picking,sf_base.group_purchase,1,0,0,0
access_stock_picking_group_purchase_director,stock_picking_group_purchase_director,stock.model_stock_picking,sf_base.group_purchase_director,1,0,0,0
access_account_move_group_sale_salemanager,account_move_group_sale_salemanager,account.model_account_move,sf_base.group_sale_salemanager,1,0,0,0
access_account_move_group_sale_director,account_move_group_sale_director,account.model_account_move,sf_base.group_sale_director,1,0,0,0
access_resource_resource_group_sale_director,resource_resource_group_sale_director,resource.model_resource_resource,sf_base.group_sale_director,1,1,1,0
access_mrp_bom_group_purchase,mrp_bom_group_purchase,mrp.model_mrp_bom,sf_base.group_purchase,1,0,0,0
access_mrp_bom_group_purchase_director,mrp_bom_group_purchase_director,mrp.model_mrp_bom,sf_base.group_purchase_director,1,0,0,0
access_stock_move_group_purchase,stock_move_group_purchase,stock.model_stock_move,sf_base.group_purchase,1,0,0,0
access_stock_move_group_purchase_director,stock_move_group_purchase_director,stock.model_stock_move,sf_base.group_purchase_director,1,0,0,0
access_uom_uom_group_sale_salemanager,uom_uom_group_sale_salemanager,uom.model_uom_uom,sf_base.group_sale_salemanager,1,0,0,0
access_uom_uom_group_sale_director,uom_uom_group_sale_director,uom.model_uom_uom,sf_base.group_sale_director,1,1,1,0
access_uom_uom_group_purchase,uom_uom_group_purchase,uom.model_uom_uom,sf_base.group_purchase,1,0,0,0
access_uom_uom_group_purchase_director,uom_uom_group_purchase_director,uom.model_uom_uom,sf_base.group_purchase_director,1,0,0,0
access_uom_category_group_sale_salemanager,uom_category_group_sale_salemanager,uom.model_uom_category,sf_base.group_sale_salemanager,1,0,0,0
access_uom_category_group_sale_director,uom_category_group_sale_director,uom.model_uom_category,sf_base.group_sale_director,1,1,1,0
access_uom_category_group_purchase,uom_category_group_purchase,uom.model_uom_category,sf_base.group_purchase,1,0,0,0
access_uom_category_group_purchase_director,uom_category_group_purchase_director,uom.model_uom_category,sf_base.group_purchase_director,1,0,0,0
access_sale_order_check_wizard_group_sale_salemanager,sale_order_check_wizard_group_sale_salemanager,model_sale_order_check_wizard,sf_base.group_sale_salemanager,1,1,1,0
access_sale_order_check_wizard_group_sale_director,sale_order_check_wizard_group_sale_director,model_sale_order_check_wizard,sf_base.group_sale_director,1,1,1,0
access_sale_order,sale_order,model_sale_order,sf_base.group_plan_dispatch,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
8 access_crm_team_member_manager crm_team_manager sales_team.model_crm_team sf_base.group_sale_director 1 1 1 0
9 access_crm_team_member_director crm_team_member_director sales_team.model_crm_team_member sf_base.group_sale_director 1 1 1 0
10 access_res_users res_users base.model_res_users sf_base.group_sale_director 1 1 1 0
11 access_product_template_group_sale_salemanager product_template_group_sale_salemanager product.model_product_template sf_base.group_sale_salemanager 1 0 0 0
12 access_product_template_group_sale_director product_template_group_sale_director product.model_product_template sf_base.group_sale_director 1 0 0 0
13 access_product_template_group_purchase product_template_group_purchase product.model_product_template sf_base.group_purchase 1 0 0 0
14 access_product_template_group_purchase_director product_template_group_purchase_director product.model_product_template sf_base.group_purchase_director 1 0 0 0
15 access_stock_picking_group_sale_salemanager stock_picking_group_sale_salemanager stock.model_stock_picking sf_base.group_sale_salemanager 1 0 0 0
16 access_stock_picking_group_sale_director stock_picking_group_sale_director stock.model_stock_picking sf_base.group_sale_director 1 0 0 0
17 access_stock_picking_group_purchase stock_picking_group_purchase stock.model_stock_picking sf_base.group_purchase 1 0 0 0
18 access_stock_picking_group_purchase_director stock_picking_group_purchase_director stock.model_stock_picking sf_base.group_purchase_director 1 0 0 0
19 access_account_move_group_sale_salemanager account_move_group_sale_salemanager account.model_account_move sf_base.group_sale_salemanager 1 0 0 0
20 access_account_move_group_sale_director account_move_group_sale_director account.model_account_move sf_base.group_sale_director 1 0 0 0
21 access_resource_resource_group_sale_director resource_resource_group_sale_director resource.model_resource_resource sf_base.group_sale_director 1 1 1 0
22 access_mrp_bom_group_purchase mrp_bom_group_purchase mrp.model_mrp_bom sf_base.group_purchase 1 0 0 0
23 access_mrp_bom_group_purchase_director mrp_bom_group_purchase_director mrp.model_mrp_bom sf_base.group_purchase_director 1 0 0 0
24 access_stock_move_group_purchase stock_move_group_purchase stock.model_stock_move sf_base.group_purchase 1 0 0 0
25 access_stock_move_group_purchase_director stock_move_group_purchase_director stock.model_stock_move sf_base.group_purchase_director 1 0 0 0
26 access_uom_uom_group_sale_salemanager uom_uom_group_sale_salemanager uom.model_uom_uom sf_base.group_sale_salemanager 1 0 0 0
27 access_uom_uom_group_sale_director uom_uom_group_sale_director uom.model_uom_uom sf_base.group_sale_director 1 1 1 0
28 access_uom_uom_group_purchase uom_uom_group_purchase uom.model_uom_uom sf_base.group_purchase 1 0 0 0
29 access_uom_uom_group_purchase_director uom_uom_group_purchase_director uom.model_uom_uom sf_base.group_purchase_director 1 0 0 0
30 access_uom_category_group_sale_salemanager uom_category_group_sale_salemanager uom.model_uom_category sf_base.group_sale_salemanager 1 0 0 0
31 access_uom_category_group_sale_director uom_category_group_sale_director uom.model_uom_category sf_base.group_sale_director 1 1 1 0
32 access_uom_category_group_purchase uom_category_group_purchase uom.model_uom_category sf_base.group_purchase 1 0 0 0
33 access_uom_category_group_purchase_director uom_category_group_purchase_director uom.model_uom_category sf_base.group_purchase_director 1 0 0 0
34 access_sale_order_check_wizard_group_sale_salemanager sale_order_check_wizard_group_sale_salemanager model_sale_order_check_wizard sf_base.group_sale_salemanager 1 1 1 0
35 access_sale_order_check_wizard_group_sale_director sale_order_check_wizard_group_sale_director model_sale_order_check_wizard sf_base.group_sale_director 1 1 1 0
36 access_sale_order sale_order model_sale_order sf_base.group_plan_dispatch 1 0 0 0
37
38
39
40
41
42
43
44
45
46
47

View File

@@ -2,6 +2,25 @@
<odoo>
<data>
<!-- <record id="sale_order_view_search_inherit_quotation_inherit_sf" model="ir.ui.view">-->
<!-- <field name="name">sale.order.search.quotation.inherit.sf</field>-->
<!-- <field name="model">sale.order</field>-->
<!-- &lt;!&ndash; <field name="inherit_id" ref="sale.view_sales_order_filter"/>&ndash;&gt;-->
<!-- <field name="inherit_id" ref="sale.sale_order_view_search_inherit_quotation"/>-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//filter[@name='my_sale_orders_filter']" position="replace">-->
<!-- &lt;!&ndash; <field name="campaign_id"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <separator/>&ndash;&gt;-->
<!-- &lt;!&ndash; <filter string="Quotations" name="draft" domain="[('state','in',('draft', 'sent'))]"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <filter string="Sales Orders" name="sales" domain="[('state','in',('sale','done'))]"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <separator/>&ndash;&gt;-->
<!-- <filter string="Create Date" name="filter_create_date" date="create_date"/>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
<record model="ir.ui.view" id="view_sale_order_form_inherit_sf">
<field name="name">sale.order.form.inherit.sf</field>
<field name="model">sale.order</field>
@@ -9,13 +28,11 @@
<field name="arch" type="xml">
<xpath expr="//form/header/button[@name='action_confirm']" position="after">
<field name="check_status" invisible="1"/>
<button name="action_check" string="审核" type="object"
<button name="sf_sale.action_sale_order_check_wizard" string="审核" type="action"
context="{'default_order_id':active_id}"
attrs="{'invisible': [('check_status','=', 'checked')]}"
class="oe_highlight"/>
</xpath>
<xpath expr="//form/header/button[@name='action_check']" position="attributes">
<attribute name="groups">sf_base.group_sale_director</attribute>
</xpath>
<xpath expr="//form/header/button[@name='action_confirm'][1]" position="attributes">
<attribute name="attrs">{'invisible': [('check_status', '=', 'unchecked'),('state', 'not in',
['sent'])]}
@@ -26,6 +43,10 @@
['draft'])]}
</attribute>
</xpath>
<field name="partner_id" position="replace">
<field name="partner_id" widget="res_partner_many2one" context="{'is_customer': True }"
options='{"always_reload": True}'/>
</field>
<field name="payment_term_id" position="after">
<field name="deadline_of_delivery"/>
<field name="payments_way"/>

View File

@@ -0,0 +1 @@
from . import sale_order_wizard

View File

@@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
from odoo import models, api, fields
class saleOrderCheckWizard(models.TransientModel):
_name = 'sale.order.check.wizard'
_description = '报价/销售订单审核向导'
order_id = fields.Many2one('sale.order')
check_state = fields.Selection([('pass', '通过'), ('back', '退回')], '审核状态', default='pass')
check_audit = fields.Text('审核意见')
def submit(self):
self.order_id.check_status = 'unchecked' if not self.check_state == 'pass' else 'checked'
self.order_id.message_ids = '1'

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.ui.view" id="sale_order_check_wizard_form_view">
<field name="name">sale.order.check.wizard.form.view</field>
<field name="model">sale.order.check.wizard</field>
<field name="arch" type="xml">
<form>
<field name="order_id" invisible="True"/>
<group>
<field name="check_state" required="True"/>
<field name="check_audit" attrs="{'required': [('check_state', '=', 'back')]}"/>
</group>
<footer>
<button string="提交" name="submit" type="object" class="oe_highlight"/>
<button string="取消" class="btn btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="action_sale_order_check_wizard" model="ir.actions.act_window">
<field name="name">销售订单审核向导</field>
<field name="res_model">sale.order.check.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</odoo>

View File

@@ -1,20 +1,15 @@
# -*-coding:utf-8-*-
from . import models
from . import wizard
from odoo import api, SUPERUSER_ID
# from odoo import api, SUPERUSER_ID
# import logging
# _logger = logging.getLogger(__name__)
#
#
# def _sf_tool_management_post_install(cr, registry):
# # 这里执行你想要在安装模块时执行的操作,包括调用和执行模型的方法
# env = api.Environment(cr, SUPERUSER_ID, {})
#
# # 获取需要执行方法的模型
# model_obj = env['sf.machine.table.tool.changing.apply']
# logging.info('post_install方法执行了')
# print('post_install方法执行了')
#
# # 调用模型方法
# model_obj.create_tool_change_application()
def _post_install(cr, registry):
# 这里执行你想要在安装模块时执行的操作,包括调用和执行模型的方法
env = api.Environment(cr, SUPERUSER_ID, {})
# 获取需要执行方法的模型
model_obj = env['sf.machine.table.tool.changing.apply']
# 调用模型方法
model_obj.create_tool_change_application()

View File

@@ -21,6 +21,7 @@
],
'demo': [
],
'post_init_hook': '_post_install',
'assets': {
'web.assets_qweb': [

View File

@@ -477,7 +477,17 @@ class MachineTableToolChangingApply(models.Model):
[('name', '=', self.name.id)]).write({'status': '0'})
def create_tool_change_application(self):
print("调用了create_tool_change_application()")
maintenance_equipment_ids = self.env['maintenance.equipment'].sudo().search(
[('product_template_ids', '!=', False)])
tool_changing_apply = self.env['sf.machine.table.tool.changing.apply']
if maintenance_equipment_ids:
for maintenance_equipment_id in maintenance_equipment_ids:
if maintenance_equipment_id.product_template_ids:
for product_template_id in maintenance_equipment_id.product_template_ids:
tool_changing_apply.sudo().create({
'maintenance_equipment_id': product_template_id.equipment_id.id,
'cutter_spacing_code_id': product_template_id.id
})
class CAMWorkOrderProgramKnifePlan(models.Model):

View File

@@ -533,7 +533,7 @@
'default_replacement_extension_length': extension_length,
'default_replacement_effective_length': effective_length,
}"
attrs="{'invisible': ['|',('status', '!=', '0'), ('functional_tool_name_id', '=', False)]}"
attrs="{'invisible': [('status', '!=', '0')]}"
class="btn-primary"
/>
<button string="转移"
@@ -607,7 +607,7 @@
'default_replacement_extension_length': extension_length,
'default_replacement_effective_length': effective_length,
}"
attrs="{'invisible': ['|',('status', '!=', '0'), ('functional_tool_name_id', '=', False)]}"
attrs="{'invisible': [('status', '!=', '0')]}"
class="btn-primary"
/>
<button string="转移"
@@ -845,7 +845,7 @@
<field name="name">功能刀具组装</field>
<field name="model">sf.functional.tool.assembly</field>
<field name="arch" type="xml">
<tree create="0">
<tree create="0" delete="0">
<field name="assembly_order_code"/>
<field name="barcode_id" optional="hide"/>
<field name="functional_tool_name"/>
@@ -907,7 +907,7 @@
<field name="name">功能刀具组装</field>
<field name="model">sf.functional.tool.assembly</field>
<field name="arch" type="xml">
<form create="0">
<form create="0" delete="0">
<header>
<button string="组装"
name="%(sf_tool_management.sf_functional_tool_assembly_order_act)d"