表面工艺类别拖动排序
This commit is contained in:
@@ -45,6 +45,7 @@ class MrsProductionProcessCategory(models.Model):
|
||||
|
||||
name = fields.Char('名称')
|
||||
code = fields.Char("编码")
|
||||
sequence = fields.Integer('排序')
|
||||
production_process_ids = fields.One2many('sf.production.process', 'category_id', string="表面工艺")
|
||||
active = fields.Boolean('有效', default=True)
|
||||
|
||||
@@ -61,9 +62,8 @@ class MrsProductionProcess(models.Model):
|
||||
partner_process_ids = fields.Many2many('res.partner', 'process_ids', '加工工厂')
|
||||
active = fields.Boolean('有效', default=True)
|
||||
parameter_ids = fields.One2many('sf.production.process.parameter', 'process_id', string='可选参数')
|
||||
gain_way = fields.Selection([("自加工", "自加工"), ("外协", "外协")], default="", string="获取方式")
|
||||
category_id = fields.Many2one('sf.production.process.category')
|
||||
workcenter_ids = fields.Many2many('mrp.workcenter', 'rel_workcenter_process', required=True)
|
||||
# workcenter_ids = fields.Many2many('mrp.workcenter', 'rel_workcenter_process', required=True)
|
||||
|
||||
|
||||
|
||||
@@ -112,12 +112,15 @@ class SupplierSort(models.Model):
|
||||
('supplier_sort_uniq', 'unique (partner_id,materials_model_id)', '排序不能重复!')
|
||||
]
|
||||
|
||||
|
||||
class MrsProductionProcessParameter(models.Model):
|
||||
_name = 'sf.production.process.parameter'
|
||||
_description = '可选参数'
|
||||
name = fields.Char('参数名')
|
||||
active = fields.Boolean('有效', default=True)
|
||||
price = fields.Float('单价')
|
||||
|
||||
code = fields.Char("编码")
|
||||
name = fields.Char('名称')
|
||||
gain_way = fields.Selection([("自加工", "自加工"), ("外协", "外协")], default="", string="获取方式")
|
||||
# price = fields.Float('单价')
|
||||
process_id = fields.Many2one('sf.production.process', string='表面工艺')
|
||||
materials_model_ids = fields.Many2many('sf.materials.model', 'applicable_material', string='适用材料')
|
||||
code = fields.Char("编码")
|
||||
active = fields.Boolean('有效', default=True)
|
||||
@@ -49,6 +49,7 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="code" readonly="1"/>
|
||||
<field name="sequence"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="name" required="1"/>
|
||||
@@ -74,8 +75,9 @@
|
||||
<record model="ir.ui.view" id="sf_production_process_category_tree">
|
||||
<field name="model">sf.production.process.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="表面工艺类别">
|
||||
<field name="code"/>
|
||||
<tree string="表面工艺类别" default_order="sequence, id" >
|
||||
<field name="sequence" widget="handle" string="序号"/>
|
||||
<field name="code" readonly="1"/>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -112,22 +114,38 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="process_encode" readonly="1"/>
|
||||
<field name="gain_way" required="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="name" required="1"/>
|
||||
<field name="workcenter_ids" widget="many2many_tags" string="工作中心" required="0"/>
|
||||
</group>
|
||||
|
||||
<notebook>
|
||||
<page string="可选参数">
|
||||
<field name="parameter_ids">
|
||||
<tree force_save="1">
|
||||
<field name="code" readonly="1" force_save="1"/>
|
||||
<field name="name"/>
|
||||
<field name="price"/>
|
||||
<field name='process_id' default="default" invisible="1"/>
|
||||
<field name="gain_way"/>
|
||||
<field name='process_id' default="default"/>
|
||||
</tree>
|
||||
<form>
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="code" readonly="1"/>
|
||||
<field name="name" string="参数名"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name='process_id'/>
|
||||
<field name="gain_way"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="适用材料">
|
||||
<field name="materials_model_ids"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
<page string="工序">
|
||||
|
||||
@@ -26,7 +26,11 @@
|
||||
<field name="materials_type_id" string="型号"
|
||||
domain="[('materials_id', '=', materials_id)]"/>
|
||||
<field name="model_surface_process_ids" string="表面工艺" widget="many2many_tags"
|
||||
options="{'no_create': True}"/>
|
||||
>
|
||||
<tree>
|
||||
<field name="name"></field>
|
||||
</tree>
|
||||
</field>
|
||||
<field name="model_process_parameters_ids" string="工艺参数" widget="many2many_tags"
|
||||
options="{'no_create': True}"/>
|
||||
</field>
|
||||
|
||||
@@ -127,6 +127,10 @@ class MrpProduction(models.Model):
|
||||
if i == processing_panel_len and route.routing_type == '解除装夹':
|
||||
workorders_values.append(
|
||||
self.env['mrp.workorder'].json_workorder_str(k, production, route))
|
||||
# 表面工艺
|
||||
# for item in production.product_id.product_model_type_id.surface_technics_routing_tmpl_ids:
|
||||
# workorders_values.append(
|
||||
# self.env['mrp.workorder']._json_workorder_surface_process_str(production, item))
|
||||
elif production.product_id.categ_id.type == '胚料':
|
||||
embryo_routing_workcenter = self.env['sf.embryo.model.type.routing.sort'].search(
|
||||
[('embryo_model_type_id', '=', production.product_id.embryo_model_type_id.id)],
|
||||
|
||||
@@ -157,6 +157,24 @@ class ResMrpWorkOrder(models.Model):
|
||||
}]
|
||||
return workorders_values_str
|
||||
|
||||
# 拼接工单对象属性值(表面工艺)
|
||||
def _json_workorder_surface_process_str(self, production, route):
|
||||
workorders_values_str = [0, '', {
|
||||
'product_uom_id': production.product_uom_id.id,
|
||||
'qty_producing': 0,
|
||||
'operation_id': False,
|
||||
'name': route.name,
|
||||
'processing_panel': '',
|
||||
'routing_type': '绑定表面工艺',
|
||||
'work_state': '',
|
||||
'workcenter_id': '',
|
||||
'date_planned_start': False,
|
||||
'date_planned_finished': False,
|
||||
'duration_expected': 60,
|
||||
'duration': 0
|
||||
}]
|
||||
return workorders_values_str
|
||||
|
||||
# 维修模块按钮
|
||||
def button_maintenance_req(self):
|
||||
self.ensure_one()
|
||||
|
||||
@@ -229,85 +229,86 @@ class ProductionLot(models.Model):
|
||||
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)
|
||||
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
|
||||
val['is_subcontract'] = True
|
||||
values.append(val)
|
||||
line.move_dest_ids.created_purchase_line_id = False
|
||||
|
||||
return self.env['stock.move'].create(values)
|
||||
|
||||
@@ -1037,13 +1037,13 @@ class sfProductionProcessParameter(models.Model):
|
||||
brand.name = item['name'],
|
||||
brand.code = item['code'],
|
||||
brand.active = item['active'],
|
||||
brand.price = item['price'],
|
||||
# brand.price = item['price'],
|
||||
else:
|
||||
self.env['sf.production.process.parameter'].create({
|
||||
"name": item['name'],
|
||||
"code": item['code'],
|
||||
"active": item['active'],
|
||||
"price": item['price'],
|
||||
# "price": item['price'],
|
||||
"process_id": self.env['sf.production.process'].search(
|
||||
[('process_encode', '=', item['process_id_code'])]).id,
|
||||
'materials_model_ids': self.env['sf.materials.model'].search(
|
||||
@@ -1073,7 +1073,7 @@ class sfProductionProcessParameter(models.Model):
|
||||
self.env['sf.production.process.parameter'].create({
|
||||
"name": item['name'],
|
||||
"code": item['code'],
|
||||
"price": item['price'],
|
||||
# "price": item['price'],
|
||||
"active": item['active'],
|
||||
"process_id": self.env['sf.production.process'].search(
|
||||
[('process_encode', '=', item['process_id_code'])]).id,
|
||||
|
||||
Reference in New Issue
Block a user