下达生产
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import models
|
||||
from . import wizard
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'views/demand_plan.xml',
|
||||
'wizard/sf_demand_plan_print_wizard_view.xml',
|
||||
],
|
||||
'demo': [
|
||||
],
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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',
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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"/>
|
||||
|
||||
1
sf_demand_plan/wizard/__init__.py
Normal file
1
sf_demand_plan/wizard/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import sf_demand_plan_print_wizard
|
||||
57
sf_demand_plan/wizard/sf_demand_plan_print_wizard.py
Normal file
57
sf_demand_plan/wizard/sf_demand_plan_print_wizard.py
Normal 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
|
||||
17
sf_demand_plan/wizard/sf_demand_plan_print_wizard_view.xml
Normal file
17
sf_demand_plan/wizard/sf_demand_plan_print_wizard_view.xml
Normal 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>
|
||||
@@ -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']
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user