diff --git a/sf_dlm/models/product_template.py b/sf_dlm/models/product_template.py index 1364c76e..d37e2887 100644 --- a/sf_dlm/models/product_template.py +++ b/sf_dlm/models/product_template.py @@ -31,8 +31,9 @@ class ResProductTemplate(models.Model): embryo_model_type_id = fields.Many2one('sf.model.type', string='胚料模型类型') model_processing_panel = fields.Char('模型加工面板') # model_surface_process_category_id = fields.Many2one('sf.production.process.category', string='表面工艺类别') - model_surface_process_id = fields.Many2many('sf.production.process', 'rel_product_process', string='表面工艺') - model_process_parameters_id = fields.Many2many('sf.processing.technology', 'rel_product_technology', string='工艺参数') + model_surface_process_ids = fields.Many2many('sf.production.process', 'rel_product_process', string='表面工艺') + model_process_parameters_ids = fields.Many2many('sf.production.process.parameter', 'rel_product_parameter', + string='工艺参数') # model_price = fields.Float('模型单价', digits=(16, 3)) model_remark = fields.Char('模型备注说明') length = fields.Float('长[mm]', digits=(16, 3)) @@ -99,6 +100,7 @@ class ResProductTemplate(models.Model): 'model_file': '' if not item['model_file'] else base64.b64decode(item['model_file']), 'model_name': attachment.name, 'upload_model_file': [(6, 0, [attachment.id])], + # 'tag_ids': [(6, 0, [t.id for t in account_template.tag_ids])], # 'single_manufacturing': True, # 'tracking': 'serial', 'list_price': item['price'], @@ -107,10 +109,8 @@ class ResProductTemplate(models.Model): [('materials_no', '=', item['texture_code'])]).id, 'materials_type_id': self.env['sf.materials.model'].search( [('materials_no', '=', item['texture_type_code'])]).id, - 'model_surface_process_id': self.env['sf.production.process'].search( - [('process_encode', '=', item['surface_process_code'])]).id, - 'model_process_parameters_id': self.env['sf.processing.technology'].search( - [('process_encode', '=', item['process_parameters_code'])]).id, + 'model_surface_process_ids': self.get_production_process_id(item['surface_process_code']), + 'model_process_parameters_ids': self.get_process_parameters_id(item['process_parameters_code']), 'model_remark': item['remark'], 'default_code': '%s-%s' % (order_number, i), # 'barcode': item['barcode'], @@ -121,6 +121,20 @@ class ResProductTemplate(models.Model): # product_id.product_tmpl_id.active = False return copy_product_id + def get_production_process_id(self, surface_process_code): + production_process_ids = [] + for item in surface_process_code: + production_process = self.env['sf.production.process'].search([('process_encode', '=', item)]) + production_process_ids.append(production_process.id) + return [(6, 0, production_process_ids)] + + def get_process_parameters_id(self, process_parameters_code): + process_parameters_ids = [] + for item in process_parameters_code: + process_parameters = self.env['sf.production.process.parameter'].search([('code', '=', item)]) + process_parameters_ids.append(process_parameters.id) + return [(6, 0, process_parameters_ids)] + def attachment_create(self, name, data): attachment = self.env['ir.attachment'].create({ 'datas': base64.b64decode(data), @@ -226,7 +240,7 @@ class ResProductTemplate(models.Model): item.model_file = self.transition_glb_file(report_path, model_code) # 将attach的datas内容转为glb文件 - def transition_glb_file(self,report_path, code): + def transition_glb_file(self, report_path, code): shapes = read_step_file(report_path) output_file = os.path.join('/tmp', str(code) + '.stl') write_stl_file(shapes, output_file, 'binary', 0.03, 0.5) diff --git a/sf_dlm/views/product_template_view.xml b/sf_dlm/views/product_template_view.xml index 176a4669..aeb4ee63 100644 --- a/sf_dlm/views/product_template_view.xml +++ b/sf_dlm/views/product_template_view.xml @@ -25,8 +25,10 @@ - - + + @@ -67,9 +69,8 @@ - - + + diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 03095ad4..abd7fad8 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -3,8 +3,9 @@ from collections import defaultdict, namedtuple from odoo.addons.stock.models.stock_rule import ProcurementException from re import findall as regex_findall from re import split as regex_split -from odoo import SUPERUSER_ID, _, api, models +from odoo import SUPERUSER_ID, _, api, models from odoo.tools import float_compare +from odoo.exceptions import UserError class StockRule(models.Model): @@ -226,3 +227,87 @@ class ProductionLot(models.Model): return self.env['stock.lot'].generate_lot_names1(product.name, last_serial.name, 2)[ 1] return "%s-%03d" % (product.name, 1) + + +# class ResPurchaseOrder(models.Model): +# _inherit = 'purchase.order' +# +# # def button_approve(self, force=False): +# # result = super().button_approve(force=force) +# # self._create_picking_RES() +# # return result +# +# # @api.depends('order_line.move_ids') +# # def _compute_subcontracting_resupply_picking_count(self): +# # for purchase in self: +# # purchase.subcontracting_resupply_picking_count = len(purchase._get_subcontracting_resupplies_new()) +# # +# # def _get_subcontracting_resupplies_new(self): +# # moves_subcontracted = self.order_line.move_ids.filtered(lambda m: m.is_subcontract) +# # # subcontracted_productions = moves_subcontracted.move_orig_ids.production_id +# # return moves_subcontracted.picking_id +# +# def _prepare_picking_RES(self): +# if not self.group_id: +# self.group_id = self.group_id.create({ +# 'name': self.name, +# 'partner_id': self.partner_id.id +# }) +# if not self.partner_id.property_stock_supplier.id: +# raise UserError(_("You must set a Vendor Location for this partner %s", self.partner_id.name)) +# picking_type_id_res = self.env['stock.picking.type'].search( +# [('sequence_code', '=', 'RES'), ('barcode', '=', 'WH-RESUPPLY')]) +# return { +# 'picking_type_id': picking_type_id_res.id if picking_type_id_res else self.picking_type_id.id, +# 'partner_id': self.partner_id.id, +# 'user_id': False, +# 'date': self.date_order, +# 'origin': self.name, +# 'location_dest_id': self._get_destination_location(), +# 'location_id': self.partner_id.property_stock_supplier.id, +# 'company_id': self.company_id.id, +# } +# +# def _create_picking(self): +# StockPicking = self.env['stock.picking'] +# for order in self.filtered(lambda po: po.state in ('purchase', 'done')): +# if any(product.type in ['product', 'consu'] for product in order.order_line.product_id): +# order = order.with_company(order.company_id) +# pickings = order.picking_ids.filtered(lambda x: x.state not in ('done', 'cancel')) +# if not pickings: +# if order.order_line.product_id.categ_type == '胚料': +# res = order._prepare_picking_RES() +# else: +# res = order._prepare_picking() +# picking = StockPicking.with_user(SUPERUSER_ID).create(res) +# pickings = picking +# else: +# picking = pickings[0] +# moves = order.order_line._create_stock_moves(picking) +# moves = moves.filtered(lambda x: x.state not in ('done', 'cancel'))._action_confirm() +# seq = 0 +# for move in sorted(moves, key=lambda move: move.date): +# seq += 5 +# move.sequence = seq +# moves._action_assign() +# # Get following pickings (created by push rules) to confirm them as well. +# forward_pickings = self.env['stock.picking']._get_impacted_pickings(moves) +# (pickings | forward_pickings).action_confirm() +# picking.message_post_with_view('mail.message_origin_link', +# values={'self': picking, 'origin': order}, +# subtype_id=self.env.ref('mail.mt_note').id) +# return True +# +# +# class ResPurchaseOrderLine(models.Model): +# _inherit = 'purchase.order.line' +# +# def _create_stock_moves(self, picking): +# values = [] +# for line in self.filtered(lambda l: not l.display_type): +# for val in line._prepare_stock_moves(picking): +# val['production_id'] = 10 +# values.append(val) +# line.move_dest_ids.created_purchase_line_id = False +# +# return self.env['stock.move'].create(values)