Accept Merge Request #795: (feature/优化工件配送列表 -> develop)

Merge Request: 优化工件配送列表

Created By: @杨金灵
Reviewed By: @马广威
Approved By: @马广威 
Accepted By: @杨金灵
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/795
This commit is contained in:
杨金灵
2024-02-01 11:44:16 +08:00
committed by Coding
11 changed files with 98 additions and 22 deletions

View File

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

View File

@@ -15,6 +15,7 @@
'data/stock_data.xml',
'security/group_security.xml',
'security/ir.model.access.csv',
'wizard/workpiece_delivery_views.xml',
'views/mrp_views_menus.xml',
'views/mrp_production_addional_change.xml',
'views/mrp_routing_workcenter_view.xml',

View File

@@ -132,6 +132,7 @@ class ResMrpWorkOrder(models.Model):
production_line = fields.Char(string="生产线")
preset_program_information = fields.Char(string="预调程序信息")
workpiece_delivery_ids = fields.One2many('sf.workpiece.delivery', 'workorder_id', '工件配送')
is_delivery = fields.Boolean('是否配送完成',default=False)
@api.onchange('is_ok')
def _onchange_inspection_user_id(self):
@@ -196,8 +197,10 @@ class ResMrpWorkOrder(models.Model):
work = workorder.production_id.workorder_ids
work.compensation_value_x = eval(self.material_center_point)[0]
work.compensation_value_y = eval(self.material_center_point)[1]
workorder.workpiece_delivery_ids[0].write({
'status': '待下发'
})
workorder.button_finish()
except:
raise UserError("参数计算有误")
@@ -212,7 +215,7 @@ class ResMrpWorkOrder(models.Model):
if not item.workpiece_code:
raise UserError('请对【同运工件】进行扫描')
else:
item.write({'task_delivery_time': fields.Datetime.now()})
item.write({'task_delivery_time': fields.Datetime.now(), 'status': '待配送'})
# 拼接工单对象属性值
def json_workorder_str(self, k, production, route):
@@ -788,7 +791,7 @@ class WorkPieceDelivery(models.Model):
workorder_id = fields.Many2one('mrp.workorder', string='工单', readonly=True)
production_id = fields.Many2one('mrp.production', string='制造订单', readonly=True)
production_line_id = fields.Many2one('sf.production.line', compute='_compute_production_line_id',
string='生产线', readonly=True,
string='生产线', readonly=True,
store=True)
plan_start_processing_time = fields.Datetime('计划开始加工时间', readonly=True)
workpiece_code = fields.Char('同运工件编码')
@@ -797,8 +800,28 @@ class WorkPieceDelivery(models.Model):
task_delivery_time = fields.Datetime('任务下发时间')
task_completion_time = fields.Datetime('任务完成时间')
delivery_time = fields.Char('配送时长', compute='_compute_delivery_time')
status = fields.Selection([('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态',
default='待下发')
status = fields.Selection(
[('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态',
default='待下发')
# 工件配送
def button_delivery(self):
if self.status == '待下发':
return {
'name': _('确认'),
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'sf.workpiece.delivery.wizard',
'target': 'new',
'context': {
'default_delivery_id': self.id,
}}
else:
raise UserError('状态为【待下发】的工件记录可进行配送')
# 配送至avg小车
def _delivery_avg(self):
self.write({'task_delivery_time': fields.Datetime.now(), 'status': '待配送'})
@api.depends('production_id.production_line_id')
def _compute_production_line_id(self):

View File

@@ -22,12 +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_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_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_wizard,sf_workpiece_delivery_wizard,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,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
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
access_sf_workpiece_delivery sf_workpiece_delivery model_sf_workpiece_delivery sf_base.group_sf_mrp_user 1 0 0 0
25 access_sf_workpiece_delivery_manager access_sf_workpiece_delivery sf_workpiece_delivery model_sf_workpiece_delivery sf_base.group_sf_mrp_manager sf_base.group_sf_mrp_user 1 1 0 1 0 0
26 access_sf_workpiece_delivery_admin access_sf_workpiece_delivery_manager sf_workpiece_delivery_admin sf_workpiece_delivery model_sf_workpiece_delivery base.group_system sf_base.group_sf_mrp_manager 1 1 1 0 0
27 access_mrp_workcenter_productivity_loss_manager access_sf_workpiece_delivery_admin mrp.workcenter.productivity.loss sf_workpiece_delivery_admin mrp.model_mrp_workcenter_productivity_loss model_sf_workpiece_delivery sf_base.group_sf_mrp_user base.group_system 1 1 1 0
28 access_mrp_workcenter_productivity_loss access_sf_workpiece_delivery_wizard mrp.workcenter.productivity.loss sf_workpiece_delivery_wizard mrp.model_mrp_workcenter_productivity_loss model_sf_workpiece_delivery_wizard sf_base.group_sf_mrp_user sf_base.group_sf_order_user 1 0 1 0 1 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
29 access_mrp_workcenter_productivity access_mrp_workcenter_productivity_loss_manager mrp.workcenter.productivity mrp.workcenter.productivity.loss mrp.model_mrp_workcenter_productivity mrp.model_mrp_workcenter_productivity_loss sf_base.group_sf_mrp_user 1 1 1 0
30 access_mrp_workcenter access_mrp_workcenter_productivity_loss mrp.workcenter mrp.workcenter.productivity.loss mrp.model_mrp_workcenter mrp.model_mrp_workcenter_productivity_loss sf_base.group_sf_mrp_user 1 0 0 0
31 access_mrp_routing_workcenter access_mrp_workcenter_productivity_loss_type mrp.routing.workcenter mrp.workcenter.productivity.loss.type mrp.model_mrp_routing_workcenter mrp.model_mrp_workcenter_productivity_loss_type sf_base.group_sf_mrp_user 1 0 0 0

View File

@@ -104,27 +104,28 @@
<field name='user_permissions' invisible="1"/>
<field name='name' invisible="1"/>
<field name='routing_type' invisible="1"/>
<field name='is_delivery' invisible="1"/>
<button name="button_start" type="object" string="开始" class="btn-success"
attrs="{'invisible': ['|', '|', '|','|','|', ('production_state','in', ('draft', 'done',
attrs="{'invisible': ['|', '|', '|','|',('production_state','in', ('draft', 'done',
'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel')),
('is_user_working', '!=', False),('user_permissions','=',False),('name','=','获取CNC加工程序')]}"
('is_user_working', '!=', False),('user_permissions','=',False)]}"
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加工程序')]}"/>
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"/>
<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" comfirm="请确定是否停工?"
attrs="{'invisible': ['|', '|','|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'),('user_permissions','=',False),('name','=','获取CNC加工程序')]}"/>
groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|', '|','|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'),('user_permissions','=',False),('state','=','done')]}"/>
<button name="button_unblock" type="object" string="Unblock"
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加工程序')]}"/>
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '!=', 'blocked'),('state','=','done')]}"/>
<button name="button_workpiece_delivery" type="object" string="工件配送"
attrs="{'invisible': [('routing_type','!=','装夹预调')]}"/>
attrs="{'invisible': ['|',('routing_type','!=','装夹预调'),('is_delivery','=',true)]}"/>
</xpath>
<xpath expr="//page[1]" position="before">
@@ -516,16 +517,22 @@
<field name="name">工件配送</field>
<field name="model">sf.workpiece.delivery</field>
<field name="arch" type="xml">
<tree string="工件配送" editable="bottom">
<tree string="工件配送">
<header>
<button name="button_delivery" type="object" string="配送"/>
</header>
<field name="status" widget="badge"
decoration-success="status == '已配送'"
decoration-warning="status == '待下发'"
decoration-danger="status == '待配送'"/>
<field name="production_id"/>
<field name="workpiece_code"/>
<field name="feeder_station_start"/>
<field name="production_line_id"/>
<field name="task_delivery_time"/>
<field name="feeder_station_start"/>
<field name="feeder_station_destination"/>
<field name="task_delivery_time"/>
<field name="task_completion_time"/>
<field name="delivery_time"/>
<field name="status"/>
</tree>
</field>
</record>

View File

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

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.ui.view" id="workpiece_delivery_wizard_form_view">
<field name="name">sf.workpiece.delivery.wizard.form.view</field>
<field name="model">sf.workpiece.delivery.wizard</field>
<field name="arch" type="xml">
<form>
<field name="delivery_id" invisible="True"/>
<div>
是否确定配送?
</div>
<footer>
<button string="确认" name="confirm" type="object" class="oe_highlight"/>
<button string="取消" class="btn btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="action_workpiece_delivery_wizard" model="ir.actions.act_window">
<field name="name">工件配送向导</field>
<field name="res_model">sf.workpiece.delivery.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</odoo>

View File

@@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
# Part of YiZuo. See LICENSE file for full copyright and licensing details.
from odoo.exceptions import UserError, ValidationError
from datetime import datetime
from odoo import models, api, fields
class WorkpieceDeliveryWizard(models.TransientModel):
_name = 'sf.workpiece.delivery.wizard'
_description = '工件配送'
delivery_id = fields.Many2one('sf.workpiece.delivery', string='配送')
def confirm(self):
self.delivery_id._delivery_avg()

View File

@@ -14,6 +14,7 @@ class ResConfigSettings(models.TransientModel):
sf_secret_key = fields.Char(string='密钥', default='wBmxej38OkErKhD6')
sf_url = fields.Char(string='访问地址', default='https://sf.cs.jikimo.com')
bfm_url = fields.Char(string='业务平台后端访问地址', default='https://bfm.jikimo.com')
agv_url = fields.Char(string='avg访问地址', default='http://IP:PORT/rcms/services/rest')
ftp_host = fields.Char(string='FTP的ip')
ftp_port = fields.Char(string='FTP端口')
ftp_user = fields.Char(string='FTP用户')

View File

@@ -71,10 +71,11 @@ access_purchase_order_wizard_group_purchase,purchase_order_wizard_group_purchase
access_purchase_order_wizard_group_purchase_director,purchase_order_wizard_group_purchase_director,model_purchase_order_wizard,sf_base.group_purchase_director,1,1,1,0
access_crm_tag_group_sale_salemanager,crm_tag_group_sale_salemanager,sales_team.model_crm_tag,sf_base.group_sale_salemanager,1,0,0,0
access_crm_tag_group_sale_director,crm_tag_group_sale_director,sales_team.model_crm_tag,sf_base.group_sale_director,1,1,1,0
access_sale_order,sale.order,sale.model_sale_order,sf_base.group_plan_dispatch,1,1,0,0
access_res_partner_group_sale_salemanager,res_partner_group_sale_salemanager,base.model_res_partner,sf_base.group_sale_salemanager,1,0,1,0
access_res_partner_group_sale_director,res_partner_group_sale_director,base.model_res_partner,sf_base.group_sale_director,1,0,1,0
access_sale_order_cancel_group_sale_salemanager,sale_order_cancel_group_sale_salemanager,sale.model_sale_order_cancel,sf_base.group_sale_salemanager,1,1,1,0
access_sale_order_cancel_group_sale_director,sale_order_cancel_group_sale_director,sale.model_sale_order_cancel,sf_base.group_sale_director,1,1,1,0
access_res_partner_group_purchase,res_partner_group_purchase,base.model_res_partner,sf_base.group_purchase,1,0,1,0
access_res_partner_group_purchase_director,res_partner_group_purchase_director,base.model_res_partner,sf_base.group_purchase_director,1,0,1,0
access_sale_advance_payment_inv_group_sale_salemanager,sale_advance_payment_inv_group_sale_salemanager,sale.model_sale_advance_payment_inv,sf_base.group_sale_salemanager,1,1,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
71 access_purchase_order_wizard_group_purchase_director purchase_order_wizard_group_purchase_director model_purchase_order_wizard sf_base.group_purchase_director 1 1 1 0
72 access_crm_tag_group_sale_salemanager crm_tag_group_sale_salemanager sales_team.model_crm_tag sf_base.group_sale_salemanager 1 0 0 0
73 access_crm_tag_group_sale_director crm_tag_group_sale_director sales_team.model_crm_tag sf_base.group_sale_director 1 1 1 0
access_sale_order sale.order sale.model_sale_order sf_base.group_plan_dispatch 1 1 0 0
74 access_res_partner_group_sale_salemanager access_sale_order res_partner_group_sale_salemanager sale.order base.model_res_partner sale.model_sale_order sf_base.group_sale_salemanager sf_base.group_plan_dispatch 1 0 1 1 0 0
75 access_res_partner_group_sale_director access_res_partner_group_sale_salemanager res_partner_group_sale_director res_partner_group_sale_salemanager base.model_res_partner sf_base.group_sale_director sf_base.group_sale_salemanager 1 0 1 0
76 access_res_partner_group_purchase access_res_partner_group_sale_director res_partner_group_purchase res_partner_group_sale_director base.model_res_partner sf_base.group_purchase sf_base.group_sale_director 1 0 1 0
77 access_sale_order_cancel_group_sale_salemanager sale_order_cancel_group_sale_salemanager sale.model_sale_order_cancel sf_base.group_sale_salemanager 1 1 1 0
78 access_sale_order_cancel_group_sale_director sale_order_cancel_group_sale_director sale.model_sale_order_cancel sf_base.group_sale_director 1 1 1 0
79 access_res_partner_group_purchase_director access_res_partner_group_purchase res_partner_group_purchase_director res_partner_group_purchase base.model_res_partner sf_base.group_purchase_director sf_base.group_purchase 1 0 1 0
80 access_sale_advance_payment_inv_group_sale_salemanager access_res_partner_group_purchase_director sale_advance_payment_inv_group_sale_salemanager res_partner_group_purchase_director sale.model_sale_advance_payment_inv base.model_res_partner sf_base.group_sale_salemanager sf_base.group_purchase_director 1 1 0 1 0
81 access_sale_advance_payment_inv_group_sale_director access_sale_advance_payment_inv_group_sale_salemanager sale_advance_payment_inv_group_sale_director sale_advance_payment_inv_group_sale_salemanager sale.model_sale_advance_payment_inv sf_base.group_sale_director sf_base.group_sale_salemanager 1 1 1 0

View File

@@ -17,7 +17,7 @@
<xpath expr="//form/header/button[@name='action_rfq_send'][1]" position="after">
<button name="sf_sale.action_purchase_order_check_wizard" string="审核" type="action"
context="{'default_order_id':active_id}" groups="sf_base.group_purchase_director"
attrs="{'invisible': ['&amp;',('check_status','in', ['approved',False,'fail']),('state', 'in', ['purchase','draft'])]}"
attrs="{'invisible': ['&amp;',('check_status','in', ['approved','fail']),('state', 'in', ['purchase','draft'])]}"
class="oe_highlight"/>
</xpath>