修改表面工艺外协字段类型
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -25,8 +25,10 @@
|
||||
<field name="materials_id" string="材料"/>
|
||||
<field name="materials_type_id" string="型号"
|
||||
domain="[('materials_id', '=', materials_id)]"/>
|
||||
<field name="model_surface_process_id" string="表面工艺" widget="many2many_tags"/>
|
||||
<field name="model_process_parameters_id" string="工艺参数" widget="many2many_tags"/>
|
||||
<field name="model_surface_process_ids" string="表面工艺" widget="many2many_tags"
|
||||
options="{'no_create': True}"/>
|
||||
<field name="model_process_parameters_ids" string="工艺参数" widget="many2many_tags"
|
||||
options="{'no_create': True}"/>
|
||||
</field>
|
||||
|
||||
<xpath expr="//label[@for='volume']" position="before">
|
||||
@@ -67,9 +69,8 @@
|
||||
<field name="product_model_type_id" string="模型类型"/>
|
||||
<field name="model_processing_panel" placeholder="例如R,U" string="加工面板"/>
|
||||
<field name="model_machining_precision"/>
|
||||
<field name="model_surface_process_id" string="表面工艺"/>
|
||||
<field name="model_process_parameters_id" string="工艺参数"
|
||||
domain="[('processing_order_ids', '=', model_surface_process_id)]"/>
|
||||
<field name="model_surface_process_ids" string="表面工艺"/>
|
||||
<field name="model_process_parameters_ids" string="工艺参数"/>
|
||||
<field name="model_remark" string="备注说明"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user