下达生产

This commit is contained in:
guanhuan
2025-05-28 10:47:03 +08:00
parent 53a67d7c76
commit 9b01254b3c
11 changed files with 110 additions and 2 deletions

View File

@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
from . import models
from . import wizard

View File

@@ -14,6 +14,7 @@
'data': [
'security/ir.model.access.csv',
'views/demand_plan.xml',
'wizard/sf_demand_plan_print_wizard_view.xml',
],
'demo': [
],

View File

@@ -10,5 +10,14 @@ class ReSaleOrder(models.Model):
'sale_order_id': ret.order_id.id,
'sale_order_line_id': ret.id,
}
self.env['sf.production.demand.plan'].sudo().create(vals)
demand_plan = self.env['sf.production.demand.plan'].sudo().create(vals)
if demand_plan.product_id.machining_drawings_name:
filename_url = demand_plan.product_id.machining_drawings_name.rsplit('.', 1)[0]
wizard_vals = {
'demand_plan_id': demand_plan.id,
'model_id': demand_plan.model_id,
'filename_url': filename_url,
'type': '1',
}
self.env['sf.demand.plan.print.wizard'].sudo().create(wizard_vals)
return ret

View File

@@ -303,3 +303,13 @@ class sf_production_plan(models.Model):
pro_plan_list.date_planned_start = date_planned_start
for pro_plan in pro_plan_list:
pro_plan.do_production_schedule()
def button_action_print(self):
return {
'res_model': 'sf.demand.plan.print.wizard',
'type': 'ir.actions.act_window',
'name': _("打印"),
'domain': [('demand_plan_id', 'in', self.ids)],
'views': [[self.env.ref('sf_demand_plan.action_plan_print_tree').id, 'list']],
'target': 'new',
}

View File

@@ -1,3 +1,6 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sf_production_demand_plan,sf.production.demand.plan,model_sf_production_demand_plan,base.group_user,1,0,0,0
access_sf_production_demand_plan_for_dispatch,sf.production.demand.plan for dispatch,model_sf_production_demand_plan,sf_base.group_plan_dispatch,1,1,0,0
access_sf_demand_plan_print_wizard,sf.demand.plan.print.wizard,model_sf_demand_plan_print_wizard,base.group_user,1,0,0,0
access_sf_demand_plan_print_wizard_for_dispatch,sf.demand.plan.print.wizard for dispatch,model_sf_demand_plan_print_wizard,sf_base.group_plan_dispatch,1,1,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_sf_production_demand_plan sf.production.demand.plan model_sf_production_demand_plan base.group_user 1 0 0 0
3 access_sf_production_demand_plan_for_dispatch sf.production.demand.plan for dispatch model_sf_production_demand_plan sf_base.group_plan_dispatch 1 1 0 0
4 access_sf_demand_plan_print_wizard sf.demand.plan.print.wizard model_sf_demand_plan_print_wizard base.group_user 1 0 0 0
5 access_sf_demand_plan_print_wizard_for_dispatch sf.demand.plan.print.wizard for dispatch model_sf_demand_plan_print_wizard sf_base.group_plan_dispatch 1 1 0 0
6

View File

@@ -4,6 +4,10 @@
<field name="model">sf.production.demand.plan</field>
<field name="arch" type="xml">
<tree string="需求计划" default_order="create_date desc" editable="bottom" class="demand_plan_tree">
<header>
<button string="打印" name="button_action_print" type="object"
class="btn-primary"/>
</header>
<field name="sequence" widget="handle"/>
<field name="priority"/>
<field name="status"/>

View File

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

View File

@@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class Sf_Demand_Plan_Print_Wizard(models.TransientModel):
_name = 'sf.demand.plan.print.wizard'
_description = u'打印向导'
demand_plan_id = fields.Many2one('sf.production.demand.plan', string='需求计划ID')
product_id = fields.Many2one(
comodel_name='product.product',
related='demand_plan_id.product_id',
string='产品', store=True, index=True)
model_id = fields.Char('模型ID')
filename_url = fields.Char('文件名/URL')
type = fields.Selection([
('1', '图纸'),
('2', '程序单'),
], string='类型')
status = fields.Selection([
('not_start', '未开始'),
('success', '成功'),
('fail', '失败'),
], string='状态', default='not_start')
machining_drawings = fields.Binary('2D加工图纸', related='product_id.machining_drawings', store=True)
workorder_id = fields.Many2one('mrp.workorder', string='工单')
cnc_worksheet = fields.Binary('程序单')
class MrpWorkorder(models.Model):
_inherit = 'mrp.workorder'
def write(self, vals):
res = super(MrpWorkorder, self).write(vals)
for record in self:
if 'cnc_worksheet' in vals:
demand_plan_print = self.env['sf.demand.plan.print.wizard'].sudo().search(
[('workorder_id', '=', record.id)])
if demand_plan_print:
self.env['sf.demand.plan.print.wizard'].sudo().write(
{'cnc_worksheet': res.cnc_worksheet, 'filename_url': record.cnc_worksheet_name})
else:
demand_plan = self.env['sf.production.demand.plan'].sudo().search(
[('product_id', '=', record.product_id.id)])
if demand_plan:
wizard_vals = {
'demand_plan_id': demand_plan.id,
'model_id': demand_plan.model_id,
'type': '2',
'workorder_id': record.id,
'cnc_worksheet': record.cnc_worksheet,
'filename_url': record.cnc_worksheet_name
}
self.env['sf.demand.plan.print.wizard'].sudo().create(wizard_vals)
return res

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="action_plan_print_tree" model="ir.ui.view">
<field name="name">sf.demand.plan.print.wizard.tree</field>
<field name="model">sf.demand.plan.print.wizard</field>
<field name="arch" type="xml">
<tree string="打印">
<field name="model_id"/>
<field name="filename_url"/>
<field name="type"/>
<field name="machining_drawings" widget="adaptive_viewer"/>
<field name="cnc_worksheet" widget="pdf_viewer"/>
<field name="status"/>
</tree>
</field>
</record>
</odoo>

View File

@@ -326,6 +326,7 @@ class ResMrpWorkOrder(models.Model):
tag_type = fields.Selection([("重新加工", "重新加工")], string="标签", tracking=True)
technology_design_id = fields.Many2one('sf.technology.design')
cnc_worksheet_name = fields.Char('工作指令文件名', readonly=True)
def _compute_default_construction_period_status(self):
need_list = ['pending', 'waiting', 'ready', 'progress', 'to be detected', 'done']

View File

@@ -91,12 +91,15 @@ class Sf_Mrs_Connect(http.Controller, MultiInheritController):
program_path_tmp_panel = os.path.join('/tmp', ret['folder_name'], 'return', panel)
files_panel = os.listdir(program_path_tmp_panel)
panel_file_path = ''
panel_file_name = ''
if files_panel:
for file in files_panel:
file_extension = os.path.splitext(file)[1]
if file_extension.lower() == '.pdf':
panel_file_path = os.path.join(program_path_tmp_panel, file)
panel_file_name = os.path.splitext(file)[0]
logging.info('panel_file_path:%s' % panel_file_path)
logging.info('panel_file_name:%s' % panel_file_name)
# 向编程单中添加二维码
request.env['printing.utils'].add_qr_code_to_pdf(
@@ -105,7 +108,8 @@ class Sf_Mrs_Connect(http.Controller, MultiInheritController):
"模型ID%s" % model_id,
"零件图号:%s" % part_number if part_number else None
)
cnc_workorder.write({'cnc_worksheet': base64.b64encode(open(panel_file_path, 'rb').read())})
cnc_workorder.write({'cnc_worksheet': base64.b64encode(open(panel_file_path, 'rb').read()),
'cnc_worksheet_name': panel_file_name})
pre_workorder = productions.workorder_ids.filtered(
lambda ap: ap.routing_type in ['装夹预调', '人工线下加工'] and ap.state not in ['done', 'rework'
'cancel'] and ap.processing_panel == panel)