Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/优化下发编程单的同时拉取CMM程序

This commit is contained in:
jinling.yang
2024-03-29 16:47:18 +08:00
23 changed files with 164 additions and 67 deletions

View File

@@ -42,6 +42,8 @@ const filedRequiredList = {
// 制造大模块 // 制造大模块
'production_line_id': { multiple: false, noLabel: false }, 'production_line_id': { multiple: false, noLabel: false },
'date_approve': { multiple: false, noLabel: false }, 'date_approve': { multiple: false, noLabel: false },
'date_planned_start': { multiple: false, noLabel: false },
'date_planned_finished': { multiple: false, noLabel: false },
} }
patch(FormStatusIndicator.prototype, 'jikimo_frontend.FormStatusIndicator', { patch(FormStatusIndicator.prototype, 'jikimo_frontend.FormStatusIndicator', {
// 你可以重写或者添加一些方法和属性 // 你可以重写或者添加一些方法和属性

View File

@@ -65,7 +65,7 @@
<record id="group_plan_dispatch" model="res.groups"> <record id="group_plan_dispatch" model="res.groups">
<field name="name">计划调度岗</field> <field name="name">计划调度岗</field>
<field name="category_id" ref="module_category_plan"/> <field name="category_id" ref="module_category_plan"/>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> <!-- <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> -->
</record> </record>
<record id="group_plan_director" model="res.groups"> <record id="group_plan_director" model="res.groups">

View File

@@ -145,6 +145,7 @@ access_purchase_order_group_purchase,access_purchase_order_group_purchase,purcha
access_purchase_order_line_group_purchase,access_purchase_order_line_group_purchase,purchase.model_purchase_order_line,sf_base.group_purchase,1,1,1,0 access_purchase_order_line_group_purchase,access_purchase_order_line_group_purchase,purchase.model_purchase_order_line,sf_base.group_purchase,1,1,1,0
access_spindle_taper_type,spindle_taper_type,model_spindle_taper_type,base.group_user,1,1,1,1 access_spindle_taper_type,spindle_taper_type,model_spindle_taper_type,base.group_user,1,1,1,1
access_sf_tool_groups_group_plan_dispatch,sf_tool_groups,model_sf_tool_groups,sf_base.group_plan_dispatch,1,0,0,0 access_sf_tool_groups_group_plan_dispatch,sf_tool_groups,model_sf_tool_groups,sf_base.group_plan_dispatch,1,0,0,0
access_sf_tool_groups_group_plan_director,sf_tool_groups,model_sf_tool_groups,sf_base.group_plan_director,1,1,1,0
access_sf_tool_groups_group_sf_tool_user,sf_tool_groups,model_sf_tool_groups,sf_base.group_sf_tool_user,1,1,1,1 access_sf_tool_groups_group_sf_tool_user,sf_tool_groups,model_sf_tool_groups,sf_base.group_sf_tool_user,1,1,1,1
access_purchase_order,purchase.order,purchase.model_purchase_order,sf_base.group_plan_dispatch,1,0,0,0 access_purchase_order,purchase.order,purchase.model_purchase_order,sf_base.group_plan_dispatch,1,0,0,0
access_res_partner,res.partner,base.model_res_partner,sf_base.group_plan_dispatch,1,0,0,0 access_res_partner,res.partner,base.model_res_partner,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
145 access_sf_tool_groups_group_plan_dispatch sf_tool_groups model_sf_tool_groups sf_base.group_plan_dispatch 1 0 0 0
146 access_sf_tool_groups_group_sf_tool_user access_sf_tool_groups_group_plan_director sf_tool_groups model_sf_tool_groups sf_base.group_sf_tool_user sf_base.group_plan_director 1 1 1 1 0
147 access_purchase_order access_sf_tool_groups_group_sf_tool_user purchase.order sf_tool_groups purchase.model_purchase_order model_sf_tool_groups sf_base.group_plan_dispatch sf_base.group_sf_tool_user 1 0 1 0 1 0 1
148 access_purchase_order purchase.order purchase.model_purchase_order sf_base.group_plan_dispatch 1 0 0 0
149 access_res_partner res.partner base.model_res_partner sf_base.group_plan_dispatch 1 0 0 0
150 access_purchase_order_line purchase.order.line purchase.model_purchase_order_line sf_base.group_plan_dispatch 1 0 0 0
151 access_account_move_line account.move.line account.model_account_move_line sf_base.group_plan_dispatch 1 0 0 0

View File

@@ -27,7 +27,7 @@
<group> <group>
<field name="code" readonly="1"/> <field name="code" readonly="1"/>
<field name="process_id" readonly="1"/> <field name="process_id" readonly="1"/>
<field name="gain_way" /> <field name="gain_way"/>
</group> </group>
</group> </group>
@@ -231,6 +231,9 @@
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/> <field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/>
<field name="code" string="编码搜索" filter_domain="[('code','ilike',self)]"/> <field name="code" string="编码搜索" filter_domain="[('code','ilike',self)]"/>
<filter name="filter_active" string="已归档" domain="[('active','=',False)]"/> <filter name="filter_active" string="已归档" domain="[('active','=',False)]"/>
<searchpanel>
<field name="category_id" icon="fa-building" enable_counters="1"/>
</searchpanel>
</search> </search>
</field> </field>
</record> </record>

View File

@@ -41,14 +41,15 @@
context="{'default_cutting_tool_type': cutting_tool_type,'default_standard_library_id':cutting_tool_model_id}" context="{'default_cutting_tool_type': cutting_tool_type,'default_standard_library_id':cutting_tool_model_id}"
attrs="{'invisible': [('categ_type', '!=', '刀具')],'required': [('categ_type', '=', '刀具')],'readonly': [('id', '!=', False)]}" attrs="{'invisible': [('categ_type', '!=', '刀具')],'required': [('categ_type', '=', '刀具')],'readonly': [('id', '!=', False)]}"
domain="[('standard_library_id','=',cutting_tool_model_id)]"/> domain="[('standard_library_id','=',cutting_tool_model_id)]"/>
<field name="fixture_material_id" attrs="{'invisible': [('categ_type', '!=', '夹具')]}" <field name="fixture_material_id"
attrs="{'invisible': [('categ_type', '!=', '夹具')],'required': [('categ_type', '=', '夹具')]}"
placeholder="请选择" options="{'no_create': True}"/> placeholder="请选择" options="{'no_create': True}"/>
<field name="fixture_model_id" string="型号" placeholder="请选择" options="{'no_create': True}" <field name="fixture_model_id" string="型号" placeholder="请选择" options="{'no_create': True}"
attrs="{'invisible': [('categ_type', '!=', '夹具')],'required': [('categ_type', '=', '夹具')]}" attrs="{'invisible': [('categ_type', '!=', '夹具')],'required': [('categ_type', '=', '夹具')]}"
domain="[('fixture_material_id','=',fixture_material_id)]"/> domain="[('fixture_material_id','=',fixture_material_id)]"/>
<field name="specification_fixture_id" string="规格" placeholder="请选择" <field name="specification_fixture_id" string="规格" placeholder="请选择"
options="{'no_create': True}" options="{'no_create': True}"
attrs="{'invisible': [('categ_type', '!=', '夹具')]}" attrs="{'invisible': [('categ_type', '!=', '夹具')],'required': [('categ_type', '=', '夹具')]}"
domain="[('fixture_model_id','=',fixture_model_id)]"/> domain="[('fixture_model_id','=',fixture_model_id)]"/>
</field> </field>
<xpath expr="//label[@for='volume']" position="before"> <xpath expr="//label[@for='volume']" position="before">

View File

@@ -778,7 +778,7 @@ class CNCprocessing(models.Model):
# 将nc文件存到attach的datas里 # 将nc文件存到attach的datas里
def write_file(self, nc_file_path, cnc): def write_file(self, nc_file_path, cnc):
nc_file_name = nc_file_path.split('/') nc_file_name = nc_file_path.split('/')
logging.info('nc_file_name:%s' % nc_file_name[-1]) logging.info('file_name:%s' % nc_file_name[-1])
if os.path.exists(nc_file_path): if os.path.exists(nc_file_path):
with open(nc_file_path, 'rb') as file: with open(nc_file_path, 'rb') as file:
data_bytes = file.read() data_bytes = file.read()
@@ -910,7 +910,8 @@ class WorkPieceDelivery(models.Model):
# 配送至avg小车 # 配送至avg小车
def _delivery_avg(self): def _delivery_avg(self):
res = {'reqCode': urllib.parse.quote(self.production_id.name), 'reqTime': '', 'clientCode': '', 'tokenCode': '', res = {'reqCode': urllib.parse.quote(self.production_id.name), 'reqTime': '', 'clientCode': '', 'tokenCode': '',
'taskTyp': 'F01', 'ctnrTyp': '', 'ctnrCode': '', 'wbCode': '006848AB006774', 'positionCodePath': [], 'podCode': '', 'taskTyp': 'F01', 'ctnrTyp': '', 'ctnrCode': '', 'wbCode': '006848AB006774', 'positionCodePath': [],
'podCode': '',
'podDir': '', 'materialLot': '', 'priority': '', 'taskCode': '', 'agvCode': '', 'materialLot': '', 'podDir': '', 'materialLot': '', 'priority': '', 'taskCode': '', 'agvCode': '', 'materialLot': '',
'data': ''} 'data': ''}
config = self.env['res.config.settings'].get_values() config = self.env['res.config.settings'].get_values()
@@ -951,7 +952,77 @@ class CMMprogram(models.Model):
_name = 'sf.cmm.program' _name = 'sf.cmm.program'
_description = "CMM程序" _description = "CMM程序"
program_path = fields.Char('程序文件路径') cmm_id = fields.Many2one('ir.attachment')
post_processing_name = fields.Char('后处理名称') sequence_number = fields.Integer('序号')
program_date = fields.Datetime('程序日期') program_name = fields.Char('程序')
cutting_tool_name = fields.Char('刀具名称')
cutting_tool_no = fields.Char('刀号')
processing_type = fields.Char('加工类型')
margin_x_y = fields.Char('余量_X/Y')
margin_z = fields.Char('余量_Z')
depth_of_processing_z = fields.Char('加工深度(Z)')
cutting_tool_extension_length = fields.Char('刀具伸出长度')
cutting_tool_handle_type = fields.Char('刀柄型号')
estimated_processing_time = fields.Char('预计加工时间')
remark = fields.Text('备注')
workorder_id = fields.Many2one('mrp.workorder', string="工单") workorder_id = fields.Many2one('mrp.workorder', string="工单")
production_id = fields.Many2one('mrp.production', string="制造订单")
program_path = fields.Char('程序文件路径')
def cmm_program_create(self, ret, program_path, program_path_tmp):
for obj in ret['programming_list']:
workorder = self.env['mrp.workorder'].search([('production_id.name', '=', ret['production_order_no']),
('processing_panel', '=', obj['processing_panel']),
('routing_type', '=', 'CNC加工')])
if obj['program_name'] in program_path:
logging.info('obj:%s' % obj['program_name'])
cmm_program = self.sudo().create({
'workorder_id': workorder.id,
'sequence_number': obj['sequence_number'],
'program_name': obj['program_name'],
'cutting_tool_name': obj['cutting_tool_name'],
'cutting_tool_no': obj['cutting_tool_no'],
'processing_type': obj['processing_type'],
'margin_x_y': obj['margin_x_y'],
'margin_z': obj['margin_z'],
'depth_of_processing_z': obj['depth_of_processing_z'],
'cutting_tool_extension_length': obj['cutting_tool_extension_length'],
'cutting_tool_handle_type': obj['cutting_tool_handle_type'],
'estimated_processing_time': obj['estimated_processing_time'],
'remark': obj['remark'],
'program_path': program_path.replace('/tmp', '')
})
cmm_program.get_cmm_program_file(program_path_tmp, cmm_program, program_path)
# 根据程序名和加工面匹配到ftp里对应的cmm程序名
def get_cmm_program_file(self, serverdir, cmm_program, program_path):
logging.info('cmm-serverdir:%s' % serverdir)
for root, dirs, files in os.walk(serverdir):
for f in files:
if f in program_path:
cmm_program_file_path = os.path.join(serverdir, root, f)
self.write_file_cmm(cmm_program_file_path, cmm_program)
# 创建附件(nc文件)
def attachment_create(self, name, data):
attachment = self.env['ir.attachment'].create({
'datas': base64.b64encode(data),
'type': 'binary',
'public': True,
'description': '程序文件',
'name': name
})
return attachment
# 将cmm文件存到attach的datas里
def write_file_cmm(self, cmm_file_path, cnc):
cmm_file_name = cmm_file_path.split('/')
logging.info('cmm_file_name:%s' % cmm_file_name[-1])
if os.path.exists(cmm_file_path):
with open(cmm_file_path, 'rb') as file:
data_bytes = file.read()
attachment = self.attachment_create(cnc.program_name + cmm_file_name[-1], data_bytes)
cnc.write({'cmm_id': attachment.id})
file.close()
else:
return False

View File

@@ -366,10 +366,10 @@ class StockPicking(models.Model):
# 设置外协出入单的名称 # 设置外协出入单的名称
def _get_name_Res(self, rescode): def _get_name_Res(self, rescode):
last_picking = self.sudo().search([('name', 'like', rescode)], order='create_date DESC', limit=1) last_picking = self.sudo().search([('name', 'like', rescode)], order='create_date DESC', limit=1)
logging.info('编号:' + last_picking.name)
if not last_picking: if not last_picking:
num = "%04d" % 1 num = "%04d" % 1
else: else:
logging.info('编号:' + last_picking.name)
m = int(last_picking.name[-3:]) + 1 m = int(last_picking.name[-3:]) + 1
num = "%04d" % m num = "%04d" % m
return '%s%s' % (rescode, num) return '%s%s' % (rescode, num)
@@ -419,7 +419,7 @@ class StockPicking(models.Model):
location_id = self.env.ref( location_id = self.env.ref(
'sf_manufacturing.stock_location_locations_virtual_outcontract').id, 'sf_manufacturing.stock_location_locations_virtual_outcontract').id,
location_dest_id = self.env['stock.location'].search( location_dest_id = self.env['stock.location'].search(
[('barcode', '=', 'WH-PREPRODUCTION')]).id, [('barcode', 'ilike', 'WH-PREPRODUCTION')]).id,
outcontract_picking_type_in = self.env.ref( outcontract_picking_type_in = self.env.ref(
'sf_manufacturing.outcontract_picking_in').id, 'sf_manufacturing.outcontract_picking_in').id,
outcontract_picking_type_out = self.env.ref( outcontract_picking_type_out = self.env.ref(

View File

@@ -476,9 +476,19 @@
<page string="CMM程序" attrs='{"invisible": [("routing_type","!=","CNC加工")]}'> <page string="CMM程序" attrs='{"invisible": [("routing_type","!=","CNC加工")]}'>
<field name="cmm_ids" widget="one2many" string="CMM程序"> <field name="cmm_ids" widget="one2many" string="CMM程序">
<tree> <tree>
<field name="program_path"/> <field name="sequence_number"/>
<field name="program_date"/> <field name="program_name"/>
<field name="post_processing_name"/> <field name="cmm_id" string="文件"/>
<field name="cutting_tool_name"/>
<field name="cutting_tool_no"/>
<field name="processing_type"/>
<field name="margin_x_y"/>
<field name="margin_z"/>
<field name="depth_of_processing_z"/>
<field name="cutting_tool_extension_length"/>
<field name="cutting_tool_handle_type"/>
<field name="estimated_processing_time"/>
<field name="remark"/>
</tree> </tree>
</field> </field>
</page> </page>

View File

@@ -44,12 +44,18 @@ class Sf_Mrs_Connect(http.Controller):
return json.JSONEncoder().encode(res) return json.JSONEncoder().encode(res)
logging.info('创建cnc工单') logging.info('创建cnc工单')
program_path_tmp = os.path.join('/tmp', ret['folder_name'], 'return', r) program_path_tmp = os.path.join('/tmp', ret['folder_name'], 'return', r)
# program_path_tmp = "C://Users//43484//Desktop//机企猫工作文档//其他//model_analysis"
files = os.listdir(program_path_tmp) files = os.listdir(program_path_tmp)
for f in files: for f in files:
program_path = os.path.join(program_path_tmp, f) program_path = os.path.join(program_path_tmp, f)
logging.info('cnc程序路径 :%s' % program_path) logging.info('cnc程序路径 :%s' % program_path)
if f.endswith(".doc"):
# 插入cmm程序数据
request.env['sf.cmm.program'].with_user(
request.env.ref("base.user_admin")).cmm_program_create(ret, program_path, program_path_tmp)
request.env['sf.cnc.processing'].with_user( request.env['sf.cnc.processing'].with_user(
request.env.ref("base.user_admin")).cnc_processing_create(cnc_production, ret, program_path,program_path_tmp) request.env.ref("base.user_admin")).cnc_processing_create(cnc_production, ret, program_path,
program_path_tmp)
return json.JSONEncoder().encode(res) return json.JSONEncoder().encode(res)
else: else:
res = {'status': 0, 'message': '该制造订单暂未开始'} res = {'status': 0, 'message': '该制造订单暂未开始'}

View File

@@ -71,7 +71,7 @@
<field name="order_deadline"/> <field name="order_deadline"/>
<!-- <field name="process_time"/> --> <!-- <field name="process_time"/> -->
<field name="schedule_setting"/> <field name="schedule_setting"/>
<field name="production_line_id"/> <field name="production_line_id" domain="[('name', 'ilike', 'CNC')]"/>
<!-- Chatter --> <!-- Chatter -->

View File

@@ -6,7 +6,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form> <form>
<group> <group>
<field name="production_line_id"/> <field name="production_line_id" domain="[('name', 'ilike', 'CNC')]"/>
</group> </group>
<footer> <footer>
<button string="确认排程" name="action_plan_all" type="object" class="btn-primary"/> <button string="确认排程" name="action_plan_all" type="object" class="btn-primary"/>

View File

@@ -43,8 +43,6 @@ access_quality_alert_team_group_sf_mrp_manager,quality_alert_team_group_sf_mrp_m
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,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_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_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_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_order_user,product_template_group_sf_order_user,product.model_product_template,sf_base.group_sf_order_user,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
43 access_product_template_group_plan_director access_product_template_group_sf_tool_user product_template_group_plan_director product_template_group_sf_tool_user product.model_product_template sf_base.group_plan_director sf_base.group_sf_tool_user 1 0 0 0
44 access_product_template_group_sf_equipment_user access_product_template_group_sf_order_user product_template_group_sf_equipment_user product_template_group_sf_order_user product.model_product_template sf_base.group_sf_equipment_user sf_base.group_sf_order_user 1 0 0 0
45 access_product_template_group_sf_tool_user access_product_template_group_sf_mrp_manager product_template_group_sf_tool_user product_template_group_sf_mrp_manager product.model_product_template sf_base.group_sf_tool_user sf_base.group_sf_mrp_manager 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
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

View File

@@ -14,6 +14,8 @@ access_product_product_group_sale_salemanager,product_product_group_sale_saleman
access_product_product_group_sale_director,product_product_group_sale_director,product.model_product_product,sf_base.group_sale_director,1,1,1,0 access_product_product_group_sale_director,product_product_group_sale_director,product.model_product_product,sf_base.group_sale_director,1,1,1,0
access_product_product_group_purchase,product_product_group_purchase,product.model_product_product,sf_base.group_purchase,1,0,0,0 access_product_product_group_purchase,product_product_group_purchase,product.model_product_product,sf_base.group_purchase,1,0,0,0
access_product_product_group_purchase_director,product_product_group_purchase_director,product.model_product_product,sf_base.group_purchase_director,1,1,1,0 access_product_product_group_purchase_director,product_product_group_purchase_director,product.model_product_product,sf_base.group_purchase_director,1,1,1,0
access_product_product_group_plan_dispatch,product_product_group_plan_dispatch,product.model_product_product,sf_base.group_plan_dispatch,1,0,0,0
access_product_product_group_plan_director,product_product_group_plan_director,product.model_product_product,sf_base.group_plan_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_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,1,1,0 access_product_template_group_sale_director,product_template_group_sale_director,product.model_product_template,sf_base.group_sale_director,1,1,1,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,product_template_group_purchase,product.model_product_template,sf_base.group_purchase,1,0,0,0
@@ -90,6 +92,9 @@ access_sale_report_group_sale_director,sale_report_group_sale_director,sale.mode
access_product_supplierinfo_group_purchase_director,product.supplierinfo group_purchase_director,product.model_product_supplierinfo,sf_base.group_purchase_director,1,1,1,0 access_product_supplierinfo_group_purchase_director,product.supplierinfo group_purchase_director,product.model_product_supplierinfo,sf_base.group_purchase_director,1,1,1,0
access_product_category_group_purchase_director,product.category group_purchase_director,product.model_product_category,sf_base.group_purchase_director,1,1,1,0 access_product_category_group_purchase_director,product.category group_purchase_director,product.model_product_category,sf_base.group_purchase_director,1,1,1,0
access_product_supplierinfo_group_plan_director,product.supplierinfo user,product.model_product_supplierinfo,sf_base.group_plan_director,1,1,1,0
access_product_category_group_plan_director,product.category user,product.model_product_category,sf_base.group_plan_director,1,1,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
14 access_product_product_group_sale_director product_product_group_sale_director product.model_product_product sf_base.group_sale_director 1 1 1 0
15 access_product_product_group_purchase product_product_group_purchase product.model_product_product sf_base.group_purchase 1 0 0 0
16 access_product_product_group_purchase_director product_product_group_purchase_director product.model_product_product sf_base.group_purchase_director 1 1 1 0
17 access_product_product_group_plan_dispatch product_product_group_plan_dispatch product.model_product_product sf_base.group_plan_dispatch 1 0 0 0
18 access_product_product_group_plan_director product_product_group_plan_director product.model_product_product sf_base.group_plan_director 1 1 1 0
19 access_product_template_group_sale_salemanager product_template_group_sale_salemanager product.model_product_template sf_base.group_sale_salemanager 1 0 0 0
20 access_product_template_group_sale_director product_template_group_sale_director product.model_product_template sf_base.group_sale_director 1 1 1 0
21 access_product_template_group_purchase product_template_group_purchase product.model_product_template sf_base.group_purchase 1 0 0 0
92 access_product_category_group_purchase_director product.category group_purchase_director product.model_product_category sf_base.group_purchase_director 1 1 1 0
93 access_product_supplierinfo_group_plan_director product.supplierinfo user product.model_product_supplierinfo sf_base.group_plan_director 1 1 1 0
94 access_product_category_group_plan_director product.category user product.model_product_category sf_base.group_plan_director 1 1 1 0
95
96
97
98
99
100

View File

@@ -471,14 +471,6 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
records = super(RealTimeDistributionOfFunctionalTools, self).create(vals_list) records = super(RealTimeDistributionOfFunctionalTools, self).create(vals_list)
return records return records
def write(self, vals):
res = super().write(vals)
for item in self:
if item:
if vals.get('min_stock_num') or vals.get('max_stock_num'):
item.enroll_functional_tool_real_time_distribution()
return res
class MachineTableToolChangingApply(models.Model): class MachineTableToolChangingApply(models.Model):
_name = 'sf.machine.table.tool.changing.apply' _name = 'sf.machine.table.tool.changing.apply'
@@ -830,7 +822,7 @@ class FunctionalToolAssembly(models.Model):
code = fields.Char('功能刀具编码', readonly=True) code = fields.Char('功能刀具编码', readonly=True)
rfid = fields.Char('Rfid', readonly=True) rfid = fields.Char('Rfid', readonly=True)
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', readonly=True) tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', readonly=True)
name = fields.Char(string='名称', readonly=True, compute='_compute_name') name = fields.Char(string='名称', readonly=True, compute='_compute_name', store=True)
assembly_order_code = fields.Char(string='组装单编码', readonly=True) assembly_order_code = fields.Char(string='组装单编码', readonly=True)
functional_tool_name_id = fields.Many2one('product.product', string='功能刀具', readonly=True) functional_tool_name_id = fields.Many2one('product.product', string='功能刀具', readonly=True)

View File

@@ -362,3 +362,9 @@ class RealTimeDistributionFunctionalTools(models.Model):
if record: if record:
record.enroll_functional_tool_real_time_distribution() record.enroll_functional_tool_real_time_distribution()
return records return records
def write(self, vals):
res = super().write(vals)
if vals.get('sf_functional_cutting_tool_entity_ids') or vals.get('min_stock_num') or vals.get('max_stock_num'):
self.enroll_functional_tool_real_time_distribution()
return res

View File

@@ -1,33 +1,33 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sf_functional_cutting_tool_entity,sf.functional.cutting.tool.entity,model_sf_functional_cutting_tool_entity,sf_base.group_sf_tool_user,1,1,1,0 access_sf_functional_cutting_tool_entity,sf.functional.cutting.tool.entity,model_sf_functional_cutting_tool_entity,sf_base.group_sf_tool_user,1,1,1,0
access_sf_functional_tool_warning,sf.functional.tool.warning,model_sf_functional_tool_warning,sf_base.group_sf_tool_user,1,1,1,0
access_sf_real_time_distribution_of_functional_tools,sf.real.time.distribution.of.functional.tools,model_sf_real_time_distribution_of_functional_tools,sf_base.group_sf_tool_user,1,1,1,0
access_sf_cam_work_order_program_knife_plan,sf.cam.work.order.program.knife.plan,model_sf_cam_work_order_program_knife_plan,sf_base.group_sf_tool_user,1,1,1,0
access_sf_machine_table_tool_changing_apply,sf.machine.table.tool.changing.apply,model_sf_machine_table_tool_changing_apply,sf_base.group_sf_tool_user,1,1,1,0
access_sf_tool_change_requirement_information,sf.tool.change.requirement.information,model_sf_tool_change_requirement_information,sf_base.group_sf_tool_user,1,1,1,0
access_sf_tool_transfer_request_information,sf.tool.transfer.request.information,model_sf_tool_transfer_request_information,sf_base.group_sf_tool_user,1,1,1,0
access_sf_functional_tool_assembly,sf.functional.tool.assembly,model_sf_functional_tool_assembly,sf_base.group_sf_tool_user,1,1,1,0
access_sf_functional_tool_assembly_order,sf.functional.tool.assembly.order,model_sf_functional_tool_assembly_order,sf_base.group_sf_tool_user,1,1,1,0
access_sf_tool_material_search,sf.tool.material.search,model_sf_tool_material_search,sf_base.group_sf_tool_user,1,1,1,0
access_sf_fixture_material_search,sf.fixture.material.search,model_sf_fixture_material_search,sf_base.group_sf_tool_user,1,1,1,0
access_sf_functional_cutting_tool_entity_group_plan_dispatch,sf.functional.cutting.tool.entity,model_sf_functional_cutting_tool_entity,sf_base.group_plan_dispatch,1,0,0,0 access_sf_functional_cutting_tool_entity_group_plan_dispatch,sf.functional.cutting.tool.entity,model_sf_functional_cutting_tool_entity,sf_base.group_plan_dispatch,1,0,0,0
access_sf_functional_tool_warning,sf.functional.tool.warning,model_sf_functional_tool_warning,sf_base.group_sf_tool_user,1,1,1,0
access_sf_functional_tool_warning_group_plan_dispatch,sf.functional.tool.warning,model_sf_functional_tool_warning,sf_base.group_plan_dispatch,1,0,0,0 access_sf_functional_tool_warning_group_plan_dispatch,sf.functional.tool.warning,model_sf_functional_tool_warning,sf_base.group_plan_dispatch,1,0,0,0
access_sf_real_time_distribution_of_functional_tools,sf.real.time.distribution.of.functional.tools,model_sf_real_time_distribution_of_functional_tools,sf_base.group_sf_tool_user,1,1,1,0
access_sf_real_time_distribution_of_functional_tools_group_plan_dispatch,sf.real.time.distribution.of.functional.tools,model_sf_real_time_distribution_of_functional_tools,sf_base.group_plan_dispatch,1,0,0,0 access_sf_real_time_distribution_of_functional_tools_group_plan_dispatch,sf.real.time.distribution.of.functional.tools,model_sf_real_time_distribution_of_functional_tools,sf_base.group_plan_dispatch,1,0,0,0
access_sf_cam_work_order_program_knife_plan,sf.cam.work.order.program.knife.plan,model_sf_cam_work_order_program_knife_plan,sf_base.group_sf_tool_user,1,1,1,0
access_sf_cam_work_order_program_knife_plan_group_plan_dispatch,sf.cam.work.order.program.knife.plan,model_sf_cam_work_order_program_knife_plan,sf_base.group_plan_dispatch,1,0,0,0 access_sf_cam_work_order_program_knife_plan_group_plan_dispatch,sf.cam.work.order.program.knife.plan,model_sf_cam_work_order_program_knife_plan,sf_base.group_plan_dispatch,1,0,0,0
access_sf_machine_table_tool_changing_apply,sf.machine.table.tool.changing.apply,model_sf_machine_table_tool_changing_apply,sf_base.group_sf_tool_user,1,1,1,0
access_sf_machine_table_tool_changing_apply_group_plan_dispatch,sf.machine.table.tool.changing.apply,model_sf_machine_table_tool_changing_apply,sf_base.group_plan_dispatch,1,0,0,0 access_sf_machine_table_tool_changing_apply_group_plan_dispatch,sf.machine.table.tool.changing.apply,model_sf_machine_table_tool_changing_apply,sf_base.group_plan_dispatch,1,0,0,0
access_sf_tool_change_requirement_information,sf.tool.change.requirement.information,model_sf_tool_change_requirement_information,sf_base.group_sf_tool_user,1,1,1,0
access_sf_tool_change_requirement_information_group_plan_dispatch,sf.tool.change.requirement.information,model_sf_tool_change_requirement_information,sf_base.group_plan_dispatch,1,0,0,0 access_sf_tool_change_requirement_information_group_plan_dispatch,sf.tool.change.requirement.information,model_sf_tool_change_requirement_information,sf_base.group_plan_dispatch,1,0,0,0
access_sf_tool_transfer_request_information,sf.tool.transfer.request.information,model_sf_tool_transfer_request_information,sf_base.group_sf_tool_user,1,1,1,0
access_sf_tool_transfer_request_information_group_plan_dispatch,sf.tool.transfer.request.information,model_sf_tool_transfer_request_information,sf_base.group_plan_dispatch,1,0,0,0 access_sf_tool_transfer_request_information_group_plan_dispatch,sf.tool.transfer.request.information,model_sf_tool_transfer_request_information,sf_base.group_plan_dispatch,1,0,0,0
access_sf_functional_tool_assembly,sf.functional.tool.assembly,model_sf_functional_tool_assembly,sf_base.group_sf_tool_user,1,1,1,0
access_sf_functional_tool_assembly_group_plan_dispatch,sf.functional.tool.assembly,model_sf_functional_tool_assembly,sf_base.group_plan_dispatch,1,0,0,0 access_sf_functional_tool_assembly_group_plan_dispatch,sf.functional.tool.assembly,model_sf_functional_tool_assembly,sf_base.group_plan_dispatch,1,0,0,0
access_sf_functional_tool_assembly_order,sf.functional.tool.assembly.order,model_sf_functional_tool_assembly_order,sf_base.group_sf_tool_user,1,1,1,0
access_sf_functional_tool_assembly_order_group_plan_dispatch,sf.functional.tool.assembly.order,model_sf_functional_tool_assembly_order,sf_base.group_plan_dispatch,1,0,0,0 access_sf_functional_tool_assembly_order_group_plan_dispatch,sf.functional.tool.assembly.order,model_sf_functional_tool_assembly_order,sf_base.group_plan_dispatch,1,0,0,0
access_sf_tool_material_search,sf.tool.material.search,model_sf_tool_material_search,sf_base.group_sf_tool_user,1,1,1,0
access_sf_tool_material_search_group_plan_dispatch,sf.tool.material.search,model_sf_tool_material_search,sf_base.group_plan_dispatch,1,0,0,0 access_sf_tool_material_search_group_plan_dispatch,sf.tool.material.search,model_sf_tool_material_search,sf_base.group_plan_dispatch,1,0,0,0
access_sf_fixture_material_search,sf.fixture.material.search,model_sf_fixture_material_search,sf_base.group_sf_order_user,1,0,0,0
access_sf_fixture_material_search_group_plan_dispatch,sf.fixture.material.search,model_sf_fixture_material_search,sf_base.group_plan_dispatch,1,0,0,0 access_sf_fixture_material_search_group_plan_dispatch,sf.fixture.material.search,model_sf_fixture_material_search,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
2 access_sf_functional_cutting_tool_entity sf.functional.cutting.tool.entity model_sf_functional_cutting_tool_entity sf_base.group_sf_tool_user 1 1 1 0
access_sf_functional_tool_warning sf.functional.tool.warning model_sf_functional_tool_warning sf_base.group_sf_tool_user 1 1 1 0
access_sf_real_time_distribution_of_functional_tools sf.real.time.distribution.of.functional.tools model_sf_real_time_distribution_of_functional_tools sf_base.group_sf_tool_user 1 1 1 0
access_sf_cam_work_order_program_knife_plan sf.cam.work.order.program.knife.plan model_sf_cam_work_order_program_knife_plan sf_base.group_sf_tool_user 1 1 1 0
access_sf_machine_table_tool_changing_apply sf.machine.table.tool.changing.apply model_sf_machine_table_tool_changing_apply sf_base.group_sf_tool_user 1 1 1 0
access_sf_tool_change_requirement_information sf.tool.change.requirement.information model_sf_tool_change_requirement_information sf_base.group_sf_tool_user 1 1 1 0
access_sf_tool_transfer_request_information sf.tool.transfer.request.information model_sf_tool_transfer_request_information sf_base.group_sf_tool_user 1 1 1 0
access_sf_functional_tool_assembly sf.functional.tool.assembly model_sf_functional_tool_assembly sf_base.group_sf_tool_user 1 1 1 0
access_sf_functional_tool_assembly_order sf.functional.tool.assembly.order model_sf_functional_tool_assembly_order sf_base.group_sf_tool_user 1 1 1 0
access_sf_tool_material_search sf.tool.material.search model_sf_tool_material_search sf_base.group_sf_tool_user 1 1 1 0
access_sf_fixture_material_search sf.fixture.material.search model_sf_fixture_material_search sf_base.group_sf_tool_user 1 1 1 0
access_sf_functional_cutting_tool_entity_group_plan_dispatch sf.functional.cutting.tool.entity model_sf_functional_cutting_tool_entity sf_base.group_plan_dispatch 1 0 0 0
access_sf_functional_tool_warning_group_plan_dispatch sf.functional.tool.warning model_sf_functional_tool_warning sf_base.group_plan_dispatch 1 0 0 0
access_sf_real_time_distribution_of_functional_tools_group_plan_dispatch sf.real.time.distribution.of.functional.tools model_sf_real_time_distribution_of_functional_tools sf_base.group_plan_dispatch 1 0 0 0
access_sf_cam_work_order_program_knife_plan_group_plan_dispatch sf.cam.work.order.program.knife.plan model_sf_cam_work_order_program_knife_plan sf_base.group_plan_dispatch 1 0 0 0
access_sf_machine_table_tool_changing_apply_group_plan_dispatch sf.machine.table.tool.changing.apply model_sf_machine_table_tool_changing_apply sf_base.group_plan_dispatch 1 0 0 0
access_sf_tool_change_requirement_information_group_plan_dispatch sf.tool.change.requirement.information model_sf_tool_change_requirement_information sf_base.group_plan_dispatch 1 0 0 0
3 access_sf_tool_transfer_request_information_group_plan_dispatch access_sf_functional_cutting_tool_entity_group_plan_dispatch sf.tool.transfer.request.information sf.functional.cutting.tool.entity model_sf_tool_transfer_request_information model_sf_functional_cutting_tool_entity sf_base.group_plan_dispatch 1 0 0 0
4 access_sf_functional_tool_warning sf.functional.tool.warning model_sf_functional_tool_warning sf_base.group_sf_tool_user 1 1 1 0
5 access_sf_functional_tool_warning_group_plan_dispatch sf.functional.tool.warning model_sf_functional_tool_warning sf_base.group_plan_dispatch 1 0 0 0
6 access_sf_functional_tool_assembly_group_plan_dispatch access_sf_real_time_distribution_of_functional_tools sf.functional.tool.assembly sf.real.time.distribution.of.functional.tools model_sf_functional_tool_assembly model_sf_real_time_distribution_of_functional_tools sf_base.group_plan_dispatch sf_base.group_sf_tool_user 1 0 1 0 1 0
7 access_sf_real_time_distribution_of_functional_tools_group_plan_dispatch sf.real.time.distribution.of.functional.tools model_sf_real_time_distribution_of_functional_tools sf_base.group_plan_dispatch 1 0 0 0
8 access_sf_cam_work_order_program_knife_plan sf.cam.work.order.program.knife.plan model_sf_cam_work_order_program_knife_plan sf_base.group_sf_tool_user 1 1 1 0
9 access_sf_functional_tool_assembly_order_group_plan_dispatch access_sf_cam_work_order_program_knife_plan_group_plan_dispatch sf.functional.tool.assembly.order sf.cam.work.order.program.knife.plan model_sf_functional_tool_assembly_order model_sf_cam_work_order_program_knife_plan sf_base.group_plan_dispatch 1 0 0 0
10 access_sf_tool_material_search_group_plan_dispatch access_sf_machine_table_tool_changing_apply sf.tool.material.search sf.machine.table.tool.changing.apply model_sf_tool_material_search model_sf_machine_table_tool_changing_apply sf_base.group_plan_dispatch sf_base.group_sf_tool_user 1 0 1 0 1 0
11 access_sf_machine_table_tool_changing_apply_group_plan_dispatch sf.machine.table.tool.changing.apply model_sf_machine_table_tool_changing_apply sf_base.group_plan_dispatch 1 0 0 0
12 access_sf_fixture_material_search_group_plan_dispatch access_sf_tool_change_requirement_information sf.fixture.material.search sf.tool.change.requirement.information model_sf_fixture_material_search model_sf_tool_change_requirement_information sf_base.group_plan_dispatch sf_base.group_sf_tool_user 1 0 1 0 1 0
13 access_sf_tool_change_requirement_information_group_plan_dispatch sf.tool.change.requirement.information model_sf_tool_change_requirement_information sf_base.group_plan_dispatch 1 0 0 0
14 access_sf_tool_transfer_request_information sf.tool.transfer.request.information model_sf_tool_transfer_request_information sf_base.group_sf_tool_user 1 1 1 0
15 access_sf_tool_transfer_request_information_group_plan_dispatch sf.tool.transfer.request.information model_sf_tool_transfer_request_information sf_base.group_plan_dispatch 1 0 0 0
16 access_sf_functional_tool_assembly sf.functional.tool.assembly model_sf_functional_tool_assembly sf_base.group_sf_tool_user 1 1 1 0
17 access_sf_functional_tool_assembly_group_plan_dispatch sf.functional.tool.assembly model_sf_functional_tool_assembly sf_base.group_plan_dispatch 1 0 0 0
18 access_sf_functional_tool_assembly_order sf.functional.tool.assembly.order model_sf_functional_tool_assembly_order sf_base.group_sf_tool_user 1 1 1 0
19 access_sf_functional_tool_assembly_order_group_plan_dispatch sf.functional.tool.assembly.order model_sf_functional_tool_assembly_order sf_base.group_plan_dispatch 1 0 0 0
20 access_sf_tool_material_search sf.tool.material.search model_sf_tool_material_search sf_base.group_sf_tool_user 1 1 1 0
21 access_sf_tool_material_search_group_plan_dispatch sf.tool.material.search model_sf_tool_material_search sf_base.group_plan_dispatch 1 0 0 0
22 access_sf_fixture_material_search sf.fixture.material.search model_sf_fixture_material_search sf_base.group_sf_order_user 1 0 0 0
23 access_sf_fixture_material_search_group_plan_dispatch sf.fixture.material.search model_sf_fixture_material_search sf_base.group_plan_dispatch 1 0 0 0
24
25
26
27
28
29
30
31
32
33

View File

@@ -100,6 +100,6 @@
name="夹具物料查询" name="夹具物料查询"
id="menu_sf_fixture_material_search" id="menu_sf_fixture_material_search"
action="action_sf_fixture_material_search" action="action_sf_fixture_material_search"
parent="menu_sf_tool_manage" parent="menu_sf_fixture"
/> />
</odoo> </odoo>

View File

@@ -7,6 +7,13 @@
groups="mrp.group_mrp_routings" groups="mrp.group_mrp_routings"
parent="mrp.menu_mrp_root" parent="mrp.menu_mrp_root"
sequence="20"/> sequence="20"/>
<menuitem id="menu_sf_fixture"
name="夹具管理"
groups="sf_base.group_sf_order_user"
parent="mrp.menu_mrp_root"
sequence="20"/>
<menuitem <menuitem
id="menu_sf_functional_cutting_tool" id="menu_sf_functional_cutting_tool"
parent="menu_sf_tool_manage" parent="menu_sf_tool_manage"

View File

@@ -40,8 +40,8 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form create="0" edit="0" delete="0"> <form create="0" edit="0" delete="0">
<header> <header>
<!-- <button name="enroll_functional_tool_entity" string="功能刀具注册" type="object"--> <!-- <button name="enroll_functional_tool_entity" string="功能刀具注册" type="object"-->
<!-- class="btn-primary"/>--> <!-- class="btn-primary"/>-->
<field name="functional_tool_status" widget="statusbar" statusbar_visible="正常,报警,已拆除"/> <field name="functional_tool_status" widget="statusbar" statusbar_visible="正常,报警,已拆除"/>
</header> </header>
<sheet> <sheet>
@@ -245,8 +245,8 @@
<field name="dispose_user"/> <field name="dispose_user"/>
<field name="dispose_time"/> <field name="dispose_time"/>
<field name="dispose_func"/> <field name="dispose_func"/>
<!-- <button name="enroll_functional_tool_warning" string="刀具预警注册" type="object"--> <!-- <button name="enroll_functional_tool_warning" string="刀具预警注册" type="object"-->
<!-- class="btn-primary"/>--> <!-- class="btn-primary"/>-->
</tree> </tree>
</field> </field>
</record> </record>
@@ -322,10 +322,10 @@
<field name="model">sf.real.time.distribution.of.functional.tools</field> <field name="model">sf.real.time.distribution.of.functional.tools</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form> <form>
<!-- <header>--> <!-- <header>-->
<!-- <button name="enroll_functional_tool_real_time_distribution" string="安全库存注册" type="object"--> <!-- <button name="enroll_functional_tool_real_time_distribution" string="安全库存注册" type="object"-->
<!-- class="btn-primary"/>--> <!-- class="btn-primary"/>-->
<!-- </header>--> <!-- </header>-->
<sheet> <sheet>
<div class="oe_title"> <div class="oe_title">
<h1> <h1>
@@ -337,7 +337,7 @@
<group> <group>
<field name="sf_cutting_tool_type_id" class="custom_required" <field name="sf_cutting_tool_type_id" class="custom_required"
attrs="{'readonly': [('status_create', '=', False)]}"/> attrs="{'readonly': [('status_create', '=', False)]}"/>
<field name="tool_groups_id" class="custom_required" <field name="tool_groups_id" class="custom_required" options="{'no_create': True}"
attrs="{'readonly': [('status_create', '=', False)]}"/> attrs="{'readonly': [('status_create', '=', False)]}"/>
<field name="diameter" class="custom_required" <field name="diameter" class="custom_required"
attrs="{'readonly': [('status_create', '=', False)]}"/> attrs="{'readonly': [('status_create', '=', False)]}"/>
@@ -462,7 +462,7 @@
<field name="date"/> <field name="date"/>
<field name="qty_done" string="数量"/> <field name="qty_done" string="数量"/>
<field name="functional_tool_type_id" invisible="True"/> <field name="functional_tool_type_id" invisible="True"/>
<!-- <button name="enroll_functional_tool_move" string="安全库存注册" type="object" class="btn-primary"/>--> <!-- <button name="enroll_functional_tool_move" string="安全库存注册" type="object" class="btn-primary"/>-->
</tree> </tree>
</field> </field>
</record> </record>

View File

@@ -540,6 +540,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
return { return {
'barcode_id': stock_lot.id, 'barcode_id': stock_lot.id,
'code': self.tool_code, 'code': self.tool_code,
'name': self.after_assembly_functional_tool_name,
'rfid': self.rfid, 'rfid': self.rfid,
'tool_groups_id': self.tool_groups_id.id, 'tool_groups_id': self.tool_groups_id.id,
'integral_code_id': self.integral_code_id.id, 'integral_code_id': self.integral_code_id.id,

View File

@@ -229,7 +229,7 @@ class SfLocation(models.Model):
class SfShelf(models.Model): class SfShelf(models.Model):
_name = 'sf.shelf' _name = 'sf.shelf'
_description = '货架' _description = '货架'
_order = 'name' _order = 'create_date desc'
name = fields.Char('货架名称', required=True, size=20) name = fields.Char('货架名称', required=True, size=20)
barcode = fields.Char('编码', copy=False, size=15, required=True) barcode = fields.Char('编码', copy=False, size=15, required=True)
@@ -310,7 +310,7 @@ class SfShelf(models.Model):
class ShelfLocation(models.Model): class ShelfLocation(models.Model):
_name = 'sf.shelf.location' _name = 'sf.shelf.location'
_description = '货位' _description = '货位'
_order = 'name, id' _order = 'create_date desc'
# current_location_id = fields.Many2one('sf.shelf.location', string='当前位置') # current_location_id = fields.Many2one('sf.shelf.location', string='当前位置')
# # 目的位置 # # 目的位置

View File

@@ -102,17 +102,11 @@ access_mrp_production_group_sf_stock_user,mrp.production,mrp.model_mrp_productio
access_sf_shelf_location_group_plan_dispatch,sf.shelf.location,model_sf_shelf_location,sf_base.group_plan_dispatch,1,0,0,0 access_sf_shelf_location_group_plan_dispatch,sf.shelf.location,model_sf_shelf_location,sf_base.group_plan_dispatch,1,0,0,0
access_stock_move,stock.move,stock.model_stock_move,sf_base.group_plan_dispatch,1,1,1,0 access_stock_move,stock.move,stock.model_stock_move,sf_base.group_plan_dispatch,1,1,1,0
access_stock_picking,stock.picking,stock.model_stock_picking,sf_base.group_plan_dispatch,1,0,0,0 access_stock_picking_group_plan_dispatch,stock.picking,stock.model_stock_picking,sf_base.group_plan_dispatch,1,0,0,0
access_stock_lot_group_plan_dispatch,stock.lot,stock.model_stock_lot,sf_base.group_plan_dispatch,1,0,0,0 access_stock_lot_group_plan_dispatch,stock.lot,stock.model_stock_lot,sf_base.group_plan_dispatch,1,0,0,0
access_stock_lot_group_plan_director,stock.lot,stock.model_stock_lot,sf_base.group_plan_director,1,1,1,0 access_stock_lot_group_plan_director,stock.lot,stock.model_stock_lot,sf_base.group_plan_director,1,1,1,0
access_stock_warehouse_orderpoint,stock.warehouse.orderpoint,stock.model_stock_warehouse_orderpoint,sf_base.group_plan_dispatch,1,1,0,0 access_stock_warehouse_orderpoint,stock.warehouse.orderpoint,stock.model_stock_warehouse_orderpoint,sf_base.group_plan_dispatch,1,1,0,0
access_product_product,product.product,product.model_product_product,sf_base.group_plan_dispatch,1,0,0,0
access_product_template,product.template,product.model_product_template,sf_base.group_plan_dispatch,1,0,0,0
access_product_product,product.product,product.model_product_product,sf_base.group_plan_director,1,1,1,0
access_product_template,product.template,product.model_product_template,sf_base.group_plan_director,1,1,1,0
access_stock_inventory_conflict,stock.inventory.conflict,stock.model_stock_inventory_conflict,sf_base.group_plan_dispatch,1,0,0,0 access_stock_inventory_conflict,stock.inventory.conflict,stock.model_stock_inventory_conflict,sf_base.group_plan_dispatch,1,0,0,0
access_stock_inventory_warning,stock.inventory.warning,stock.model_stock_inventory_warning,sf_base.group_plan_dispatch,1,0,0,0 access_stock_inventory_warning,stock.inventory.warning,stock.model_stock_inventory_warning,sf_base.group_plan_dispatch,1,0,0,0
access_stock_inventory_adjustment_name,stock.inventory.adjustment.name,stock.model_stock_inventory_adjustment_name,sf_base.group_plan_dispatch,1,0,0,0 access_stock_inventory_adjustment_name,stock.inventory.adjustment.name,stock.model_stock_inventory_adjustment_name,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
102 access_stock_lot_group_plan_dispatch stock.lot stock.model_stock_lot sf_base.group_plan_dispatch 1 0 0 0
103 access_stock_lot_group_plan_director stock.lot stock.model_stock_lot sf_base.group_plan_director 1 1 1 0
104 access_stock_warehouse_orderpoint stock.warehouse.orderpoint stock.model_stock_warehouse_orderpoint sf_base.group_plan_dispatch 1 1 0 0
105 access_product_product access_stock_inventory_conflict product.product stock.inventory.conflict product.model_product_product stock.model_stock_inventory_conflict sf_base.group_plan_dispatch 1 0 0 0
106 access_product_template access_stock_inventory_warning product.template stock.inventory.warning product.model_product_template stock.model_stock_inventory_warning sf_base.group_plan_dispatch 1 0 0 0
107 access_product_product access_stock_inventory_adjustment_name product.product stock.inventory.adjustment.name product.model_product_product stock.model_stock_inventory_adjustment_name sf_base.group_plan_director sf_base.group_plan_dispatch 1 1 0 1 0 0
108 access_product_template access_mrp_production_group_purchase product.template mrp_production_group_purchase product.model_product_template mrp.model_mrp_production sf_base.group_plan_director sf_base.group_purchase 1 1 0 1 0 0
109 access_stock_inventory_conflict access_mrp_production_group_purchase_director stock.inventory.conflict mrp_production_group_purchase_director stock.model_stock_inventory_conflict mrp.model_mrp_production sf_base.group_plan_dispatch sf_base.group_purchase_director 1 0 0 0
access_stock_inventory_warning stock.inventory.warning stock.model_stock_inventory_warning sf_base.group_plan_dispatch 1 0 0 0
access_stock_inventory_adjustment_name stock.inventory.adjustment.name stock.model_stock_inventory_adjustment_name sf_base.group_plan_dispatch 1 0 0 0
access_mrp_production_group_purchase mrp_production_group_purchase mrp.model_mrp_production sf_base.group_purchase 1 0 0 0
access_mrp_production_group_purchase_director mrp_production_group_purchase_director mrp.model_mrp_production sf_base.group_purchase_director 1 0 0 0
access_mrp_workorder_group_purchase mrp_workorder_group_purchase mrp.model_mrp_workorder sf_base.group_purchase 1 0 0 0
access_mrp_workorder_group_purchase_director mrp_workorder_group_purchase_director mrp.model_mrp_workorder sf_base.group_purchase_director 1 0 0 0
110 access_mrp_unbuild_group_purchase access_mrp_workorder_group_purchase mrp_unbuild_group_purchase mrp_workorder_group_purchase mrp.model_mrp_unbuild mrp.model_mrp_workorder sf_base.group_purchase 1 0 0 0
111 access_mrp_unbuild_group_purchase_director access_mrp_workorder_group_purchase_director mrp_unbuild_group_purchase_director mrp_workorder_group_purchase_director mrp.model_mrp_unbuild mrp.model_mrp_workorder sf_base.group_purchase_director 1 0 0 0
112 access_stock_scrap_group_purchase access_mrp_unbuild_group_purchase stock_scrap_group_purchase mrp_unbuild_group_purchase stock.model_stock_scrap mrp.model_mrp_unbuild sf_base.group_purchase 1 0 0 0

View File

@@ -117,7 +117,7 @@
<field name="inherit_id" ref="stock.stock_scrap_form_view"/> <field name="inherit_id" ref="stock.stock_scrap_form_view"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//header//button[@name='action_validate']" position="replace"> <xpath expr="//header//button[@name='action_validate']" position="replace">
<button name="action_validate" states="draft" string="Validate" type="object" class="oe_highlight" <button name="action_validate" states="draft" string="确认" type="object" class="oe_highlight"
context="{'not_unlink_on_discard': True}" data-hotkey="v" context="{'not_unlink_on_discard': True}" data-hotkey="v"
groups="sf_warehouse.group_sf_stock_user"/> groups="sf_warehouse.group_sf_stock_user"/>
</xpath> </xpath>