下达生产

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>