1.修复工件配送扫描工件(坯料)时,同运工件显示的是坯料对应的制造订单号,修改配送时长字段类型及对应的时长方法,修复工件装夹岗不能修改配送工件

2.修复产品中计划总监岗和调度总监岗不能访问切削速度的权限
This commit is contained in:
jinling.yang
2024-02-01 17:37:41 +08:00
parent 56847c7a22
commit ab9fcf97e0
7 changed files with 47 additions and 43 deletions

View File

@@ -61,6 +61,8 @@ access_sf_cutting_speed,sf_cutting_speed,model_sf_cutting_speed,base.group_user,
access_sf_cutting_speed_admin,sf_cutting_speed_admin,model_sf_cutting_speed,base.group_system,1,1,1,0 access_sf_cutting_speed_admin,sf_cutting_speed_admin,model_sf_cutting_speed,base.group_system,1,1,1,0
access_sf_cutting_speed_group_purchase_director,sf_cutting_speed_group_purchase_director,model_sf_cutting_speed,sf_base.group_purchase_director,1,1,1,0 access_sf_cutting_speed_group_purchase_director,sf_cutting_speed_group_purchase_director,model_sf_cutting_speed,sf_base.group_purchase_director,1,1,1,0
access_sf_cutting_speed_group_sale_director,sf_cutting_speed_group_sale_director,model_sf_cutting_speed,sf_base.group_sale_director,1,1,1,0 access_sf_cutting_speed_group_sale_director,sf_cutting_speed_group_sale_director,model_sf_cutting_speed,sf_base.group_sale_director,1,1,1,0
access_sf_cutting_speed_group_sf_stock_manager,sf_cutting_speed_group_sf_stock_manager,model_sf_cutting_speed,sf_base.group_sf_stock_manager,1,1,1,0
access_sf_cutting_speed_group_plan_director,sf_cutting_speed_group_plan_director,model_sf_cutting_speed,sf_base.group_plan_director,1,1,1,0
access_sf_feed_per_tooth,sf_feed_per_tooth,model_sf_feed_per_tooth,base.group_user,1,1,1,0 access_sf_feed_per_tooth,sf_feed_per_tooth,model_sf_feed_per_tooth,base.group_user,1,1,1,0
access_sf_feed_per_tooth_admin,sf_feed_per_tooth_admin,model_sf_feed_per_tooth,base.group_system,1,1,1,0 access_sf_feed_per_tooth_admin,sf_feed_per_tooth_admin,model_sf_feed_per_tooth,base.group_system,1,1,1,0
access_sf_ramping_angle,sf_ramping_angle,model_sf_ramping_angle,base.group_user,1,1,1,1 access_sf_ramping_angle,sf_ramping_angle,model_sf_ramping_angle,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
61 access_sf_cutting_speed_admin sf_cutting_speed_admin model_sf_cutting_speed base.group_system 1 1 1 0
62 access_sf_cutting_speed_group_purchase_director sf_cutting_speed_group_purchase_director model_sf_cutting_speed sf_base.group_purchase_director 1 1 1 0
63 access_sf_cutting_speed_group_sale_director sf_cutting_speed_group_sale_director model_sf_cutting_speed sf_base.group_sale_director 1 1 1 0
64 access_sf_cutting_speed_group_sf_stock_manager sf_cutting_speed_group_sf_stock_manager model_sf_cutting_speed sf_base.group_sf_stock_manager 1 1 1 0
65 access_sf_cutting_speed_group_plan_director sf_cutting_speed_group_plan_director model_sf_cutting_speed sf_base.group_plan_director 1 1 1 0
66 access_sf_feed_per_tooth sf_feed_per_tooth model_sf_feed_per_tooth base.group_user 1 1 1 0
67 access_sf_feed_per_tooth_admin sf_feed_per_tooth_admin model_sf_feed_per_tooth base.group_system 1 1 1 0
68 access_sf_ramping_angle sf_ramping_angle model_sf_ramping_angle base.group_user 1 1 1 1

View File

@@ -132,7 +132,7 @@ class ResMrpWorkOrder(models.Model):
production_line = fields.Char(string="生产线") production_line = fields.Char(string="生产线")
preset_program_information = fields.Char(string="预调程序信息") preset_program_information = fields.Char(string="预调程序信息")
workpiece_delivery_ids = fields.One2many('sf.workpiece.delivery', 'workorder_id', '工件配送') workpiece_delivery_ids = fields.One2many('sf.workpiece.delivery', 'workorder_id', '工件配送')
is_delivery = fields.Boolean('是否配送完成',default=False) is_delivery = fields.Boolean('是否配送完成', default=False)
@api.onchange('is_ok') @api.onchange('is_ok')
def _onchange_inspection_user_id(self): def _onchange_inspection_user_id(self):
@@ -197,25 +197,19 @@ class ResMrpWorkOrder(models.Model):
work = workorder.production_id.workorder_ids work = workorder.production_id.workorder_ids
work.compensation_value_x = eval(self.material_center_point)[0] work.compensation_value_x = eval(self.material_center_point)[0]
work.compensation_value_y = eval(self.material_center_point)[1] work.compensation_value_y = eval(self.material_center_point)[1]
workorder.workpiece_delivery_ids[0].write({
'status': '待下发'
})
workorder.button_finish() workorder.button_finish()
except: except:
raise UserError("参数计算有误") raise UserError("参数计算有误")
def button_workpiece_delivery(self): def button_workpiece_delivery(self):
if self.routing_type == '装夹预调': if self.routing_type == '装夹预调':
if not self.workpiece_delivery_ids: for item in self.workpiece_delivery_ids:
raise UserError('请添加【工件配送】信息') if not item.feeder_station_start:
else: raise UserError('【工件配送】明细中请输入起点接驳站')
for item in self.workpiece_delivery_ids: # if not item.workpiece_code:
if not item.feeder_station_start: # raise UserError('请对【同运工件】进行扫描')
raise UserError('【工件配送】明细中请输入起点接驳站') else:
if not item.workpiece_code: item.write({'task_delivery_time': fields.Datetime.now(), 'status': '待配送'})
raise UserError('请对【同运工件】进行扫描')
else:
item.write({'task_delivery_time': fields.Datetime.now(), 'status': '待配送'})
# 拼接工单对象属性值 # 拼接工单对象属性值
def json_workorder_str(self, k, production, route): def json_workorder_str(self, k, production, route):
@@ -760,6 +754,13 @@ class SfWorkOrderBarcodes(models.Model):
'tray_model_id': stock_move_line.product_id.fixture_model_id.id 'tray_model_id': stock_move_line.product_id.fixture_model_id.id
}) })
workorder.button_start() workorder.button_start()
# return {
# 'type': 'ir.actions.act_window',
# 'res_model': 'mrp.workorder',
# 'view_mode': 'form',
# 'domain': [('id', 'in', workorder.id)],
# 'target': 'current'
# }
else: else:
embryo_stock_lot = self.env['stock.lot'].search([('name', '=', barcode)]) embryo_stock_lot = self.env['stock.lot'].search([('name', '=', barcode)])
if embryo_stock_lot: if embryo_stock_lot:
@@ -769,16 +770,20 @@ class SfWorkOrderBarcodes(models.Model):
('lot_id', '=', embryo_stock_lot.id), ('lot_id', '=', embryo_stock_lot.id),
('product_category_name', '=', '坯料')]) ('product_category_name', '=', '坯料')])
if embryo_stock_move_line: if embryo_stock_move_line:
bom_production = self.env['mrp.production'].search(
[('product_id', '=', embryo_stock_lot.product_id.id),
('origin', '=', workorder.production_id.name)], limit=1, order='id asc')
workpiece_delivery = self.env['sf.workpiece.delivery'].search( workpiece_delivery = self.env['sf.workpiece.delivery'].search(
[('workorder_id', '=', workorder.id)], limit=1, order='id asc') [('workorder_id', '=', workorder.id)], limit=1, order='id asc')
if workpiece_delivery: if workpiece_delivery:
embryo_workpiece_code = workpiece_delivery.workpiece_code embryo_workpiece_code = workpiece_delivery.workpiece_code
if workpiece_delivery.workpiece_code and embryo_stock_lot.name not in \ if bom_production:
workpiece_delivery.workpiece_code: if workpiece_delivery.workpiece_code and bom_production.name not in \
embryo_workpiece_code = workpiece_delivery.workpiece_code + ',' + \ workpiece_delivery.workpiece_code:
embryo_stock_lot.name embryo_workpiece_code = workpiece_delivery.workpiece_code + ',' + \
if not workpiece_delivery.workpiece_code: bom_production.name
embryo_workpiece_code = embryo_stock_lot.name if not workpiece_delivery.workpiece_code:
embryo_workpiece_code = bom_production.name
workpiece_delivery.write({'workpiece_code': embryo_workpiece_code}) workpiece_delivery.write({'workpiece_code': embryo_workpiece_code})
else: else:
raise UserError('工件生产线不一致,请重新确认') raise UserError('工件生产线不一致,请重新确认')
@@ -799,7 +804,7 @@ class WorkPieceDelivery(models.Model):
feeder_station_destination = fields.Char('目的接驳站') feeder_station_destination = fields.Char('目的接驳站')
task_delivery_time = fields.Datetime('任务下发时间') task_delivery_time = fields.Datetime('任务下发时间')
task_completion_time = fields.Datetime('任务完成时间') task_completion_time = fields.Datetime('任务完成时间')
delivery_time = fields.Char('配送时长', compute='_compute_delivery_time') delivery_duration = fields.Float('配送时长', compute='_compute_delivery_duration')
status = fields.Selection( status = fields.Selection(
[('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态', [('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态',
default='待下发') default='待下发')
@@ -830,14 +835,10 @@ class WorkPieceDelivery(models.Model):
self.plan_start_processing_time = self.production_id.plan_start_processing_time self.plan_start_processing_time = self.production_id.plan_start_processing_time
@api.depends('task_delivery_time', 'task_completion_time') @api.depends('task_delivery_time', 'task_completion_time')
def _compute_delivery_time(self): def _compute_delivery_duration(self):
for obj in self: for obj in self:
if obj.task_delivery_time and obj.task_completion_time: if obj.task_delivery_time and obj.task_completion_time:
delivery_duration = obj.task_completion_time - obj.task_delivery_time obj.delivery_duration = round(
hours, seconds = divmod(delivery_duration.total_seconds(), 3600) (obj.task_completion_time - obj.task_delivery_time).total_seconds() / 60.0, 2)
minutes, _ = divmod(seconds, 60)
delivery_time_str = "{:.0f}{:.0f}".format(hours, minutes)
obj.delivery_time = delivery_time_str
else: else:
obj.delivery_time = '' obj.delivery_duration = 0.0

View File

@@ -6,8 +6,8 @@ import os
from odoo import models, fields, api, _ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from odoo.modules import get_resource_path from odoo.modules import get_resource_path
from OCC.Extend.DataExchange import read_step_file # from OCC.Extend.DataExchange import read_step_file
from OCC.Extend.DataExchange import write_stl_file # from OCC.Extend.DataExchange import write_stl_file
class ResProductMo(models.Model): class ResProductMo(models.Model):

View File

@@ -22,10 +22,10 @@ access_mrp_workcenter,mrp_workcenter,model_mrp_workcenter,sf_base.group_sf_mrp_u
access_mrp_workcenter_manager,mrp_workcenter,model_mrp_workcenter,sf_base.group_sf_mrp_manager,1,1,1,0 access_mrp_workcenter_manager,mrp_workcenter,model_mrp_workcenter,sf_base.group_sf_mrp_manager,1,1,1,0
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,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_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_group_sf_order_user,sf_workpiece_delivery_group_sf_order_user,model_sf_workpiece_delivery,sf_base.group_sf_order_user,1,1,0,0
access_sf_workpiece_delivery_manager,sf_workpiece_delivery,model_sf_workpiece_delivery,sf_base.group_sf_mrp_manager,1,1,0,0 access_sf_workpiece_delivery_manager,sf_workpiece_delivery,model_sf_workpiece_delivery,sf_base.group_sf_mrp_manager,1,1,0,0
access_sf_workpiece_delivery_admin,sf_workpiece_delivery_admin,model_sf_workpiece_delivery,base.group_system,1,1,1,0 access_sf_workpiece_delivery_admin,sf_workpiece_delivery_admin,model_sf_workpiece_delivery,base.group_system,1,1,1,0
access_sf_workpiece_delivery_wizard,sf_workpiece_delivery_wizard,model_sf_workpiece_delivery_wizard,sf_base.group_sf_order_user,1,1,1,0 access_sf_workpiece_delivery_wizard_group_sf_order_user,sf_workpiece_delivery_wizard_group_sf_order_user,model_sf_workpiece_delivery_wizard,sf_base.group_sf_order_user,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_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,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 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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
22 access_mrp_workcenter_manager mrp_workcenter model_mrp_workcenter sf_base.group_sf_mrp_manager 1 1 1 0
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_sf_workpiece_delivery access_sf_workpiece_delivery_group_sf_order_user sf_workpiece_delivery sf_workpiece_delivery_group_sf_order_user model_sf_workpiece_delivery sf_base.group_sf_mrp_user sf_base.group_sf_order_user 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 0 0
27 access_sf_workpiece_delivery_admin sf_workpiece_delivery_admin model_sf_workpiece_delivery base.group_system 1 1 1 0
28 access_sf_workpiece_delivery_wizard access_sf_workpiece_delivery_wizard_group_sf_order_user sf_workpiece_delivery_wizard sf_workpiece_delivery_wizard_group_sf_order_user model_sf_workpiece_delivery_wizard sf_base.group_sf_order_user 1 1 1 0
29 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
30 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
31 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

View File

@@ -124,8 +124,8 @@
context="{'default_workcenter_id': workcenter_id}" class="btn-danger" context="{'default_workcenter_id': workcenter_id}" class="btn-danger"
groups="sf_base.group_sf_mrp_user" groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '!=', 'blocked'),('state','=','done')]}"/> attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '!=', 'blocked'),('state','=','done')]}"/>
<button name="button_workpiece_delivery" type="object" string="工件配送" <button name="button_workpiece_delivery" type="object" string="工件配送" class="btn-primary"
attrs="{'invisible': ['|',('routing_type','!=','装夹预调'),('is_delivery','=',true)]}"/> attrs="{'invisible': ['|',('routing_type','!=','装夹预调'),('is_delivery','=',True)]}"/>
</xpath> </xpath>
<xpath expr="//page[1]" position="before"> <xpath expr="//page[1]" position="before">
@@ -412,8 +412,8 @@
<field name="feeder_station_start" force_save="1"/> <field name="feeder_station_start" force_save="1"/>
<field name="feeder_station_destination"/> <field name="feeder_station_destination"/>
<field name="production_line_id"/> <field name="production_line_id"/>
<field name="task_delivery_time"/> <field name="task_delivery_time" readonly="1"/>
<field name="task_completion_time"/> <field name="task_completion_time" readonly="1"/>
</tree> </tree>
</field> </field>
</page> </page>
@@ -525,14 +525,14 @@
decoration-success="status == '已配送'" decoration-success="status == '已配送'"
decoration-warning="status == '待下发'" decoration-warning="status == '待下发'"
decoration-danger="status == '待配送'"/> decoration-danger="status == '待配送'"/>
<field name="production_id"/> <field name="production_id" string="工件编码"/>
<field name="workpiece_code"/> <field name="workpiece_code"/>
<field name="production_line_id"/> <field name="production_line_id"/>
<field name="feeder_station_start"/> <field name="feeder_station_start"/>
<field name="feeder_station_destination"/> <field name="feeder_station_destination"/>
<field name="task_delivery_time"/> <field name="task_delivery_time"/>
<field name="task_completion_time"/> <field name="task_completion_time"/>
<field name="delivery_time"/> <field name="delivery_duration" widget="float_time"/>
</tree> </tree>
</field> </field>
</record> </record>
@@ -549,7 +549,7 @@
<field name="task_delivery_time"/> <field name="task_delivery_time"/>
<field name="feeder_station_destination"/> <field name="feeder_station_destination"/>
<field name="task_completion_time"/> <field name="task_completion_time"/>
<field name="delivery_time"/> <field name="delivery_duration"/>
<field name="status"/> <field name="status"/>
<searchpanel> <searchpanel>
<field name="production_line_id" icon="fa-building" enable_counters="1"/> <field name="production_line_id" icon="fa-building" enable_counters="1"/>

View File

@@ -2,12 +2,13 @@
import logging import logging
from odoo.modules import get_resource_path from odoo.modules import get_resource_path
from odoo import fields, models, api from odoo import fields, models, api
from quatotion import readSql, feature_recognize, auto_quatotion # from quatotion import readSql, feature_recognize, auto_quatotion
__author__ = 'jinling.yang' __author__ = 'jinling.yang'
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
class AutoQuatotion(models.Model): class AutoQuatotion(models.Model):
_name = 'sf.auto_quatotion.common' _name = 'sf.auto_quatotion.common'
_description = u'自动报价公用类' _description = u'自动报价公用类'

View File

@@ -5,8 +5,8 @@ import os
import json import json
from datetime import datetime from datetime import datetime
import requests import requests
from OCC.Extend.DataExchange import read_step_file # from OCC.Extend.DataExchange import read_step_file
from OCC.Extend.DataExchange import write_stl_file # from OCC.Extend.DataExchange import write_stl_file
from odoo import models, fields, api from odoo import models, fields, api
from odoo.modules import get_resource_path from odoo.modules import get_resource_path
from odoo.exceptions import ValidationError, UserError from odoo.exceptions import ValidationError, UserError