This commit is contained in:
jinling.yang
2024-01-23 15:33:37 +08:00
8 changed files with 152 additions and 43 deletions

View File

@@ -277,13 +277,13 @@ class ToolGroups(models.Model):
else:
raise ValidationError("机床刀具组发送失败")
def write(self, vals):
obj = super().write(vals)
self._register_tool_groups(obj)
return obj
@api.model_create_multi
def create(self, vals_list):
records = super(ToolGroups, self).create(vals_list)
self._register_tool_groups(records)
return records
# def write(self, vals):
# obj = super().write(vals)
# self._register_tool_groups(obj)
# return obj
#
# @api.model_create_multi
# def create(self, vals_list):
# records = super(ToolGroups, self).create(vals_list)
# self._register_tool_groups(records)
# return records

View File

@@ -772,3 +772,34 @@ class SfWorkOrderBarcodes(models.Model):
#
# else:
# self.pro_code_ok = workorder.pro_code_is_ok(barcode)
class WorkpieceDelivery(models.Model):
_name = 'sf.workpiece.delivery'
_description = '工件配送单列表'
name = fields.Char('工件编码/任务编码')
mrp_workorder_id = fields.Many2one('mrp.workorder', string='工件编码/任务编码',
domain=[('name', 'in', ('装夹', '解除装夹'))])
workpiece_code = fields.Char('同运工件编码')
feeder_station_start = fields.Char('起点接驳站')
feeder_station_destination = fields.Char('目的接驳站')
production_line_id = fields.Many2one('sf.production.line', string='目标生产线')
task_delivery_time = fields.Datetime('任务下发时间')
task_completion_time = fields.Datetime('任务完成时间')
delivery_time = fields.Char('配送时长', compute='_compute_delivery_time')
status = fields.Selection([('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态',
default='待下发')
@api.depends('task_delivery_time', 'task_completion_time')
def _compute_delivery_time(self):
for obj in self:
if obj.task_delivery_time and obj.task_completion_time:
delivery_duration = obj.task_completion_time - obj.task_delivery_time
hours, seconds = divmod(delivery_duration.total_seconds(), 3600)
minutes, _ = divmod(seconds, 60)
delivery_time_str = "{:.0f}{:.0f}".format(hours, minutes)
obj.delivery_time = delivery_time_str
else:
obj.delivery_time = ''

View File

@@ -874,6 +874,20 @@ class SfMaintenanceEquipmentTool(models.Model):
code = fields.Char('机床刀位号')
name = fields.Char('刀位号', compute='_compute_name')
# 待删除字段
product_template_id = fields.Many2one('product.template', string='功能刀具名称',
domain="[('categ_type', '=', '刀具')]")
image_1920 = fields.Binary('图片', related='product_template_id.image_1920')
categ_type = fields.Char(string='功能刀具类型')
diameter = fields.Char('直径')
precision = fields.Char('\\')
tool_code = fields.Char('功能刀具编码')
hilt_name = fields.Char('刀柄名称')
hilt_code = fields.Char('刀柄编码')
life_value_max = fields.Char('最大寿命值')
alarm_value = fields.Char('报警值')
used_value = fields.Char('已使用值')
@api.depends('code')
def _compute_name(self):
for record in self:

View File

@@ -23,6 +23,9 @@ access_mrp_workcenter_manager,mrp_workcenter,model_mrp_workcenter,sf_base.group_
access_mrp_workcenter_productivity,mrp_workcenter_productivity,model_mrp_workcenter_productivity,sf_base.group_sf_mrp_user,1,0,0,0
access_mrp_workcenter_productivity_manager,mrp_workcenter_productivity,model_mrp_workcenter_productivity,sf_base.group_sf_mrp_manager,1,1,1,0
access_sf_workpiece_delivery,sf_workpiece_delivery,model_sf_workpiece_delivery,sf_base.group_sf_mrp_user,1,0,0,0
access_sf_workpiece_delivery_manager,sf_workpiece_delivery,model_sf_workpiece_delivery,sf_base.group_sf_mrp_manager,1,1,1,0
access_mrp_workcenter_productivity_loss_manager,mrp.workcenter.productivity.loss,mrp.model_mrp_workcenter_productivity_loss,sf_base.group_sf_mrp_user,1,1,1,0
access_mrp_workcenter_productivity_loss,mrp.workcenter.productivity.loss,mrp.model_mrp_workcenter_productivity_loss,sf_base.group_sf_mrp_user,1,0,0,0
access_mrp_workcenter_productivity_loss_type,mrp.workcenter.productivity.loss.type,mrp.model_mrp_workcenter_productivity_loss_type,sf_base.group_sf_mrp_user,1,0,0,0
@@ -87,6 +90,7 @@ access_mrp_production_split,access.mrp.production.split,mrp.model_mrp_production
access_mrp_production_split_line,access.mrp.production.split.line,mrp.model_mrp_production_split_line,sf_base.group_sf_mrp_user,1,1,1,0
access_mrp_workcenter_capacity_manager,mrp.workcenter.capacity.manager,mrp.model_mrp_workcenter_capacity,sf_base.group_sf_mrp_user,1,1,1,0
access_mrp_production_group_plan_dispatch,mrp_production,model_mrp_production,sf_base.group_plan_dispatch,1,0,0,0
access_mrp_workorder,mrp_workorder,model_mrp_workorder,sf_base.group_plan_dispatch,1,1,1,0
access_sf_production_line_group_plan_dispatch,sf.production.line,model_sf_production_line,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
23 access_mrp_workcenter_productivity mrp_workcenter_productivity model_mrp_workcenter_productivity sf_base.group_sf_mrp_user 1 0 0 0
24 access_mrp_workcenter_productivity_manager mrp_workcenter_productivity model_mrp_workcenter_productivity sf_base.group_sf_mrp_manager 1 1 1 0
25 access_mrp_workcenter_productivity_loss_manager access_sf_workpiece_delivery mrp.workcenter.productivity.loss sf_workpiece_delivery mrp.model_mrp_workcenter_productivity_loss model_sf_workpiece_delivery sf_base.group_sf_mrp_user 1 1 0 1 0 0
26 access_sf_workpiece_delivery_manager sf_workpiece_delivery model_sf_workpiece_delivery sf_base.group_sf_mrp_manager 1 1 1 0
27 access_mrp_workcenter_productivity_loss_manager mrp.workcenter.productivity.loss mrp.model_mrp_workcenter_productivity_loss sf_base.group_sf_mrp_user 1 1 1 0
28 access_mrp_workcenter_productivity_loss mrp.workcenter.productivity.loss mrp.model_mrp_workcenter_productivity_loss sf_base.group_sf_mrp_user 1 0 0 0
29 access_mrp_workcenter_productivity_loss access_mrp_workcenter_productivity_loss_type mrp.workcenter.productivity.loss mrp.workcenter.productivity.loss.type mrp.model_mrp_workcenter_productivity_loss mrp.model_mrp_workcenter_productivity_loss_type sf_base.group_sf_mrp_user 1 0 0 0
30 access_mrp_workcenter_productivity_loss_type access_mrp_workcenter_productivity mrp.workcenter.productivity.loss.type mrp.workcenter.productivity mrp.model_mrp_workcenter_productivity_loss_type mrp.model_mrp_workcenter_productivity sf_base.group_sf_mrp_user 1 0 1 0 1 0
31 access_mrp_workcenter_productivity access_mrp_workcenter mrp.workcenter.productivity mrp.workcenter mrp.model_mrp_workcenter_productivity mrp.model_mrp_workcenter sf_base.group_sf_mrp_user 1 1 0 1 0 0
90 access_mrp_workcenter_capacity_manager access_mrp_production_group_plan_dispatch mrp.workcenter.capacity.manager mrp_production mrp.model_mrp_workcenter_capacity model_mrp_production sf_base.group_sf_mrp_user sf_base.group_plan_dispatch 1 1 0 1 0 0
91 access_mrp_production_group_plan_dispatch access_mrp_workorder mrp_production mrp_workorder model_mrp_production model_mrp_workorder sf_base.group_plan_dispatch 1 0 1 0 1 0
92 access_mrp_workorder access_sf_production_line_group_plan_dispatch mrp_workorder sf.production.line model_mrp_workorder model_sf_production_line sf_base.group_plan_dispatch 1 1 0 1 0 0
93 access_sf_production_line_group_plan_director sf.production.line model_sf_production_line sf_base.group_plan_director 1 1 1 0
94 access_sf_production_line_group_plan_dispatch access_sf_production_line sf.production.line model_sf_production_line sf_base.group_plan_dispatch sf_maintenance.sf_group_equipment_user 1 0 1 0 1 0
95 access_sf_production_line_group_plan_director access_mrp_workcenter sf.production.line mrp_workcenter model_sf_production_line model_mrp_workcenter sf_base.group_plan_director sf_base.group_plan_dispatch 1 1 1 0
96 access_sf_production_line access_mrp_bom sf.production.line mrp.bom model_sf_production_line mrp.model_mrp_bom sf_maintenance.sf_group_equipment_user sf_base.group_plan_dispatch 1 1 1 0

View File

@@ -107,16 +107,21 @@
<button name="button_start" type="object" string="开始" class="btn-success"
attrs="{'invisible': ['|', '|', '|','|','|', ('production_state','in', ('draft', 'done',
'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel')),
('is_user_working', '!=', False),('user_permissions','=',False),('name','=','获取CNC加工程序')]}" groups="sf_base.group_sf_mrp_user"/>
<button name="button_pending" type="object" string="暂停" class="btn-warning" groups="sf_base.group_sf_mrp_user"
('is_user_working', '!=', False),('user_permissions','=',False),('name','=','获取CNC加工程序')]}"
groups="sf_base.group_sf_mrp_user"/>
<button name="button_pending" type="object" string="暂停" class="btn-warning"
groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|', '|','|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False),('name','=','获取CNC加工程序')]}"/>
<button name="button_finish" type="object" string="完成" class="btn-success" groups="sf_base.group_sf_mrp_user"
<button name="button_finish" type="object" string="完成" class="btn-success"
groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"/>
<button name="%(mrp.act_mrp_block_workcenter_wo)d" type="action" string="停工"
context="{'default_workcenter_id': workcenter_id}" class="btn-danger" groups="sf_base.group_sf_mrp_user"
context="{'default_workcenter_id': workcenter_id}" class="btn-danger"
groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|', '|','|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'),('user_permissions','=',False),('name','=','获取CNC加工程序')]}"/>
<button name="button_unblock" type="object" string="Unblock"
context="{'default_workcenter_id': workcenter_id}" class="btn-danger" groups="sf_base.group_sf_mrp_user"
context="{'default_workcenter_id': workcenter_id}" class="btn-danger"
groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '!=', 'blocked'),('name','=','获取CNC加工程序')]}"/>
</xpath>
<xpath expr="//page[1]" position="before">
@@ -398,7 +403,6 @@
</xpath>
<xpath expr="//page[1]" position="before">
<field name="results" invisible="1"/>
<page string="后置三元检测" attrs='{"invisible": [("routing_type","!=","CNC加工")]}'>
@@ -488,5 +492,53 @@
<record id="mrp.menu_mrp_workorder_todo" model="ir.ui.menu">
<field name="active" eval="False"/>
</record>
<!--=========================================工件配送单列表======================================-->
<record id="sf_workpiece_delivery_tree" model="ir.ui.view">
<field name="name">工件配送单列表</field>
<field name="model">sf.workpiece.delivery</field>
<field name="arch" type="xml">
<tree string="工件配送单列表" editable="bottom">
<field name="mrp_workorder_id"/>
<field name="workpiece_code"/>
<field name="feeder_station_start"/>
<field name="production_line_id"/>
<field name="task_delivery_time"/>
<field name="feeder_station_destination"/>
<field name="task_completion_time"/>
<field name="delivery_time"/>
<field name="status"/>
</tree>
</field>
</record>
<record id="sf_workpiece_delivery_search" model="ir.ui.view">
<field name="name">工件配送单列表</field>
<field name="model">sf.workpiece.delivery</field>
<field name="arch" type="xml">
<search string="工件配送单列表">
<field name="mrp_workorder_id"/>
<field name="workpiece_code"/>
<field name="feeder_station_start"/>
<field name="production_line_id"/>
<field name="task_delivery_time"/>
<field name="feeder_station_destination"/>
<field name="task_completion_time"/>
<field name="delivery_time"/>
<field name="status"/>
<searchpanel>
<field name="production_line_id" icon="fa-building" enable_counters="1"/>
<field name="status" icon="fa-building" enable_counters="1"/>
</searchpanel>
</search>
</field>
</record>
<record id="sf_workpiece_delivery_act" model="ir.actions.act_window">
<field name="name">工件配送单列表</field>
<field name="res_model">sf.workpiece.delivery</field>
<field name="view_mode">tree,search</field>
</record>
</odoo>

View File

@@ -327,6 +327,14 @@
action="mrp_custom_action"
parent="sf_production_plan_menu"
/>
<menuitem
id="sf_workpiece_delivery_menu"
name="工件配送单列表"
sequence="10"
action="sf_manufacturing.sf_workpiece_delivery_act"
parent="mrp.menu_mrp_manufacturing"
/>
<!-- <menuitem -->
<!-- id="sale_custom_menu" -->
<!-- name="报价单" -->

View File

@@ -28,7 +28,7 @@ class QualityCheck(models.Model):
else:
raise ValidationError("零件特采发送失败")
@api.onchange('quality_state')
def _onchange_quality_state(self):
if self.quality_state in ['pass', 'fail']:
self._register_tool_groups()
# @api.onchange('quality_state')
# def _onchange_quality_state(self):
# if self.quality_state in ['pass', 'fail']:
# self._register_tool_groups()

View File

@@ -198,12 +198,12 @@ class FunctionalCuttingToolEntity(models.Model):
else:
raise ValidationError("刀具组发送失败")
@api.model_create_multi
def create(self, vals):
obj = super(FunctionalCuttingToolEntity, self).create(vals)
# 调用刀具组接口
self._register_functional_tool_groups(obj)
return obj
# @api.model_create_multi
# def create(self, vals):
# obj = super(FunctionalCuttingToolEntity, self).create(vals)
# # 调用刀具组接口
# self._register_functional_tool_groups(obj)
# return obj
class FunctionalToolWarning(models.Model):
@@ -753,7 +753,7 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
if functional_tools:
for functional_tool in functional_tools:
if functional_tool.on_tool_stock_num == 0:
self.env['sf.cnc.processing'].register_cnc_processing(cnc_processing)
# self.env['sf.cnc.processing'].register_cnc_processing(cnc_processing)
if functional_tool.tool_stock_num == 0 and functional_tool.side_shelf_num == 0:
status = True
else: