# Conflicts:
#	sf_manufacturing/models/mrp_workorder.py
This commit is contained in:
gqh
2022-11-30 14:43:37 +08:00
5 changed files with 116 additions and 67 deletions

View File

@@ -9,7 +9,7 @@ class ResProductTemplate(models.Model):
model_long = fields.Float('模型长[mm]', digits=(16, 3)) model_long = fields.Float('模型长[mm]', digits=(16, 3))
model_width = fields.Float('模型宽[mm]', digits=(16, 3)) model_width = fields.Float('模型宽[mm]', digits=(16, 3))
model_height = fields.Float('模型高[mm]', digits=(16, 3)) model_height = fields.Float('模型高[mm]', digits=(16, 3))
model_volume = fields.Float('模型体积[mm³]', digits=(16, 3)) model_volume = fields.Float('模型体积[mm]', compute='_compute_model_volume', store=True)
model_machining_precision = fields.Selection([ model_machining_precision = fields.Selection([
('±0.10mm', '±0.10mm'), ('±0.10mm', '±0.10mm'),
('±0.05mm', '±0.05mm'), ('±0.05mm', '±0.05mm'),
@@ -22,9 +22,9 @@ class ResProductTemplate(models.Model):
model_process_parameters_id = fields.Many2one('sf.processing.technology', string='工艺参数') model_process_parameters_id = fields.Many2one('sf.processing.technology', string='工艺参数')
model_price = fields.Float('模型单价', digits=(16, 3)) model_price = fields.Float('模型单价', digits=(16, 3))
model_remark = fields.Char('模型备注说明') model_remark = fields.Char('模型备注说明')
long = fields.Float('长[mm]', digits=(16, 3), onchange='add_product_size') long = fields.Float('长[mm]', digits=(16, 3))
width = fields.Float('宽[mm]', digits=(16, 3), onchange='add_product_size') width = fields.Float('宽[mm]', digits=(16, 3))
height = fields.Float('高[mm]', digits=(16, 3), onchange='add_product_size') height = fields.Float('高[mm]', digits=(16, 3))
materials_id = fields.Many2one('sf.production.materials', string='材料') materials_id = fields.Many2one('sf.production.materials', string='材料')
materials_type_id = fields.Many2one('sf.materials.model', string='材料型号') materials_type_id = fields.Many2one('sf.materials.model', string='材料型号')
volume = fields.Float(compute='_compute_volume', store=True) volume = fields.Float(compute='_compute_volume', store=True)
@@ -34,6 +34,10 @@ class ResProductTemplate(models.Model):
def _compute_volume(self): def _compute_volume(self):
self.volume = self.long * self.width * self.height self.volume = self.long * self.width * self.height
@api.depends('model_long', 'model_width', 'model_height')
def _compute_model_volume(self):
self.model_volume = self.model_long * self.model_width * self.model_height
# 业务平台分配工厂后在智能工厂先创建销售订单再创建该产品 # 业务平台分配工厂后在智能工厂先创建销售订单再创建该产品
def product_create(self, product_id, item, order_id, order_number, i): def product_create(self, product_id, item, order_id, order_number, i):
copy_product_id = product_id.with_user(self.env.ref("base.user_admin")).copy() copy_product_id = product_id.with_user(self.env.ref("base.user_admin")).copy()
@@ -70,17 +74,20 @@ class ResProductTemplate(models.Model):
if not self.model_type_id: if not self.model_type_id:
return return
model_type = self.env['sf.model.type'].search( model_type = self.env['sf.model.type'].search(
[('id', '=', self.model_type_id.id)]) [('id', '=', self.model_type_id.id), ('embryo_tolerance', '=', True)])
print(self.model_long) if model_type:
print(self.model_width) self.model_long = self.model_long + 1
print(self.model_height) self.model_width = self.model_width + 1
for item in self: self.model_height = self.model_width + 1
print(item.model_long) # for item in self:
print(item.model_width) # print(item.model_long)
print(item.model_height) # print(item.model_width)
item.model_long = item.model_long + model_type.embryo_tolerance # print(item.model_height)
item.model_width = item.model_width + model_type.embryo_tolerance # item.model_long = item.model_long + 1
item.model_height = item.model_width + model_type.embryo_tolerance # item.model_width = item.model_width + 1
# item.model_height = item.model_width + 1
else:
return
class ResMrpBom(models.Model): class ResMrpBom(models.Model):

View File

@@ -35,8 +35,8 @@
<field name="model_width" string="宽[mm]"/> <field name="model_width" string="宽[mm]"/>
<field name="model_height" string="高[mm]"/> <field name="model_height" string="高[mm]"/>
<field name="model_volume" string="体积[mm]"/> <field name="model_volume" string="体积[mm]"/>
<field name="model_type_id" string="模类型"/> <field name="model_type_id" string="模类型"/>
<field name="model_processing_panel" placeholder="例如A,B" string="加工面板"/> <field name="model_processing_panel" placeholder="例如R,U" string="加工面板"/>
<field name="model_machining_precision" /> <field name="model_machining_precision" />
<field name="model_surface_process_id" string="表面工艺"/> <field name="model_surface_process_id" string="表面工艺"/>
<field name="model_process_parameters_id" string="工艺参数" <field name="model_process_parameters_id" string="工艺参数"

View File

@@ -6,7 +6,7 @@ class ModelType(models.Model):
_description = '模型类型' _description = '模型类型'
name = fields.Char('名称') name = fields.Char('名称')
embryo_tolerance = fields.Integer('胚料的容余量') embryo_tolerance = fields.Boolean('胚料的容余量', default=False)
routing_tmpl_ids = fields.One2many('sf.model.type.routing.sort', 'model_type_id', '工序模板') routing_tmpl_ids = fields.One2many('sf.model.type.routing.sort', 'model_type_id', '工序模板')

View File

@@ -6,8 +6,13 @@ import logging
from datetime import datetime from datetime import datetime
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, SUPERUSER_ID, _ from odoo import api, fields, models, SUPERUSER_ID, _
<<<<<<< HEAD
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from odoo.addons.sf_base.commons.common import Common from odoo.addons.sf_base.commons.common import Common
=======
from odoo.addons.sf_base.commons.common import Common
from odoo.exceptions import UserError
>>>>>>> b2d1e9ce8c5d8965ed09c3fbd6de543708223487
class ResMrpWorkOrder(models.Model): class ResMrpWorkOrder(models.Model):
@@ -97,6 +102,7 @@ class ResMrpWorkOrder(models.Model):
print("(%.2f,%.2f)" % (x, y)) print("(%.2f,%.2f)" % (x, y))
self.material_center_point = ("(%.2f,%.2f,%.2f)" % (x, y, z)) self.material_center_point = ("(%.2f,%.2f,%.2f)" % (x, y, z))
self.X_deviation_angle = jdz self.X_deviation_angle = jdz
return self.material_center_point
def json_workorder_str(self, k, production, route): def json_workorder_str(self, k, production, route):
workorders_values_str = [0, '', { workorders_values_str = [0, '', {
@@ -139,9 +145,9 @@ class ResMrpWorkOrder(models.Model):
values = self.env['sf.tray'].search([("code", "=", self.tray_code)]) values = self.env['sf.tray'].search([("code", "=", self.tray_code)])
if values: if values:
if values.state == "占用": if values.state == "占用":
raise ValidationError('该托盘已占用') raise UserError('该托盘已占用')
if values.state == "报损": if values.state == "报损":
raise ValidationError('该托盘已损坏') raise UserError('该托盘已损坏')
else: else:
values.update({ values.update({
'workorder_id': self, 'workorder_id': self,
@@ -149,7 +155,26 @@ class ResMrpWorkOrder(models.Model):
'state': '占用', 'state': '占用',
}) })
else: else:
raise ValidationError('该托盘编码已失效') raise UserError('该托盘编码已失效')
else:
return ""
def gettray_auto(self, barcode):
if barcode != False:
values = self.env['sf.tray'].search([("code", "=", barcode)])
if values:
if values.state == "占用":
raise UserError('该托盘已占用')
if values.state == "报损":
raise UserError('该托盘已损坏')
else:
values.update({
'workorder_id': self,
'production_id': self.production_id,
'state': '占用',
})
else:
raise UserError('该托盘编码已失效')
else: else:
return "" return ""
@@ -206,7 +231,8 @@ class ResMrpWorkOrder(models.Model):
# cnc程序获取 # cnc程序获取
def fetchCNC(self): def fetchCNC(self):
cnc = self.env['mrp.workorder'].search([('routing_type', '=', 'CNC加工')], limit=1) cnc = self.env['mrp.workorder'].search(
[('routing_type', '=', 'CNC加工'), ('production_id', '=', self.production_id.id)], limit=1)
res = {'model_code': cnc.product_id.barcode, 'production_no': self.production_id.name, res = {'model_code': cnc.product_id.barcode, 'production_no': self.production_id.name,
'machine_tool_code': cnc.workcenter_id.machine_tool_id.code, 'machine_tool_code': cnc.workcenter_id.machine_tool_id.code,
'material_code': cnc.env['sf.production.materials'].search( 'material_code': cnc.env['sf.production.materials'].search(
@@ -302,36 +328,52 @@ class CNCprocessing(models.Model):
_description = "CNC加工" _description = "CNC加工"
cnc_id = fields.Many2one('ir.attachment') cnc_id = fields.Many2one('ir.attachment')
FNo = fields.Char(string="序号") sequence_number = fields.Char('序号')
FPGName = fields.Char(string="程序名") program_name = fields.Char('程序名')
FKnifeName = fields.Char(string="刀具名称") cutting_tool_name = fields.Char('刀具名称')
FDNo = fields.Char(string="刀号") cutting_tool_no = fields.Char('刀号')
FWorkType = fields.Char(string="加工类型") processing_type = fields.Char('加工类型')
FXY = fields.Char(string="余量_X/Y") margin_x_y = fields.Char('余量_X/Y')
FZ = fields.Char(string="余量_Z") margin_z = fields.Char('余量_Z')
FJGSD = fields.Char(string="加工深度(Z)") depth_of_processing_z = fields.Char('加工深度(Z)')
FSCCD = fields.Char(string="刀具伸出长度") cutting_tool_extension_length = fields.Char('刀具伸出长度')
FDJSpec = fields.Char(string="刀柄型号") cutting_tool_handle_type = fields.Char('刀柄型号')
FJGDate = fields.Datetime(string="预计加工时间") estimated_processing_time = fields.Char('预计加工时间')
FComment = fields.Char(string="备注") remark = fields.Text('备注')
workorder_id = fields.Many2one('mrp.workorder', string="工单") workorder_id = fields.Many2one('mrp.workorder', string="工单")
# mrs下发编程单创建CNC加工 # mrs下发编程单创建CNC加工
def CNCprocessing_create(self, obj): def CNCprocessing_create(self, obj):
workorder = self.env['mrp.workorder'].search([('production_id', '=', obj['manufacturing_order_no']), workorder = self.env['mrp.workorder'].search([('production_id.name', '=', obj['manufacturing_order_no']),
('processing_panel', '=', obj['processing_panel']), ('processing_panel', '=', obj['processing_panel']),
('routing_type', '=', 'CNC加工')]) ('routing_type', '=', 'CNC加工')])
self.env['sf.cnc.processing'].create({ self.env['sf.cnc.processing'].create({
'workorder_id': workorder.id, 'workorder_id': workorder.id,
'FNo': obj['sequence_number'], 'sequence_number': obj['sequence_number'],
'FPGName': obj['program_name'], 'program_name': obj['program_name'],
'FKnifeName': obj['cutting_tool_name'], 'cutting_tool_name': obj['cutting_tool_name'],
'FDNo': obj['cutting_tool_no'], 'cutting_tool_no': obj['cutting_tool_no'],
'FWorkType': obj['processing_type'], 'processing_type': obj['processing_type'],
'FXY': obj['margin_x_y'], 'margin_x_y': obj['margin_x_y'],
'FZ': obj['margin_z'], 'margin_z': obj['margin_z'],
'FJGSD': obj['depth_of_processing_z'], 'depth_of_processing_z': obj['depth_of_processing_z'],
'FSCCD': obj['cutting_tool_extension_length'], 'cutting_tool_extension_length': obj['cutting_tool_extension_length'],
'FDJSpec': obj['cutting_tool_handle_type'], 'cutting_tool_handle_type': obj['cutting_tool_handle_type'],
'remark': obj['remark']
# 'FJGDate': obj[''] # 'FJGDate': obj['']
}) })
class SfWorkOrderBarcodes(models.Model):
"""
智能工厂工单处扫码绑定托盘
"""
_name = "mrp.workorder"
_inherit = ["mrp.workorder", "barcodes.barcode_events_mixin"]
def on_barcode_scanned(self, barcode):
tray_code = self.env['sf.tray'].search([('code', '=', barcode)])
self.tray_code = tray_code.code
workorder = self.env['mrp.workorder'].browse(self.ids)
workorder.gettray_auto(barcode)

View File

@@ -41,16 +41,16 @@
</field> </field>
</record> </record>
<record model="ir.ui.view" id="view_mrp_production_workorder_form_inherit_sf"> <!-- <record model="ir.ui.view" id="view_mrp_production_workorder_form_inherit_sf">-->
<field name="name">mrp.production.workorder.form.inherit.sf</field> <!-- <field name="name">mrp.production.workorder.form.inherit.sf</field>-->
<field name="model">mrp.workorder</field> <!-- <field name="model">mrp.workorder</field>-->
<field name="inherit_id" ref="mrp.mrp_production_workorder_form_view_inherit"/> <!-- <field name="inherit_id" ref="mrp.mrp_production_workorder_form_view_inherit"/>-->
<field name="arch" type="xml"> <!-- <field name="arch" type="xml">-->
<field name="production_id" position="after"> <!-- <field name="production_id" position="after">-->
<field name="processing_panel" readonly="1"/> <!-- <field name="processing_panel" readonly="1"/>-->
</field> <!-- </field>-->
</field> <!-- </field>-->
</record> <!-- </record>-->
<record id="view_mrp_production_workorder_tray_form_inherit_sf" model="ir.ui.view"> <record id="view_mrp_production_workorder_tray_form_inherit_sf" model="ir.ui.view">
<field name="name">mrp.production.workorder.tray.form.inherit.sf</field> <field name="name">mrp.production.workorder.tray.form.inherit.sf</field>
@@ -213,18 +213,18 @@
<field name="cnc_ids" widget="one2many"> <field name="cnc_ids" widget="one2many">
<tree> <tree>
<field name="cnc_id"/> <field name="cnc_id"/>
<field name="FNo"/> <field name="sequence_number"/>
<field name="FPGName"/> <field name="program_name"/>
<field name="FKnifeName"/> <field name="cutting_tool_name"/>
<field name="FDNo"/> <field name="cutting_tool_no"/>
<field name="FWorkType"/> <field name="processing_type"/>
<field name="FXY"/> <field name="margin_x_y"/>
<field name="FZ"/> <field name="margin_z"/>
<field name="FJGSD"/> <field name="depth_of_processing_z"/>
<field name="FSCCD"/> <field name="cutting_tool_extension_length"/>
<field name="FDJSpec"/> <field name="cutting_tool_handle_type"/>
<field name="FJGDate"/> <field name="estimated_processing_time"/>
<field name="FComment"/> <field name="remark"/>
</tree> </tree>
</field> </field>
</page> </page>