1、优化销售订单状态;2、优化夹具物料查询的托盘可用状态;3、优化工单开始按键;4、优化采购订单的采购类型,根据销售订单的供货方式和工艺确认时是否外协自动选择对应采购类型;
This commit is contained in:
@@ -36,6 +36,8 @@ class StatusChange(models.Model):
|
|||||||
# 使用super()来调用原始方法(在本例中为'sale.order'模型的'action_confirm'方法)
|
# 使用super()来调用原始方法(在本例中为'sale.order'模型的'action_confirm'方法)
|
||||||
try:
|
try:
|
||||||
res = super(StatusChange, self).action_confirm()
|
res = super(StatusChange, self).action_confirm()
|
||||||
|
# 修改销售订单状态为【加工中】
|
||||||
|
self.write({'state': 'processing'})
|
||||||
logging.info('原生方法返回结果:%s' % res)
|
logging.info('原生方法返回结果:%s' % res)
|
||||||
# 原有方法执行后,进行额外的操作(如调用外部API)
|
# 原有方法执行后,进行额外的操作(如调用外部API)
|
||||||
process_start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
process_start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|||||||
@@ -138,7 +138,8 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
is_subcontract = fields.Boolean(string='是否外协')
|
is_subcontract = fields.Boolean(string='是否外协')
|
||||||
surface_technics_parameters_id = fields.Many2one('sf.production.process.parameter', string="表面工艺可选参数")
|
surface_technics_parameters_id = fields.Many2one('sf.production.process.parameter', string="表面工艺可选参数")
|
||||||
|
|
||||||
picking_ids = fields.Many2many('stock.picking', string='外协出入库单', compute='_compute_surface_technics_picking_ids')
|
picking_ids = fields.Many2many('stock.picking', string='外协出入库单',
|
||||||
|
compute='_compute_surface_technics_picking_ids')
|
||||||
|
|
||||||
purchase_id = fields.Many2many('purchase.order', string='外协采购单')
|
purchase_id = fields.Many2many('purchase.order', string='外协采购单')
|
||||||
surface_technics_picking_count = fields.Integer("外协出入库", compute='_compute_surface_technics_picking_ids')
|
surface_technics_picking_count = fields.Integer("外协出入库", compute='_compute_surface_technics_picking_ids')
|
||||||
@@ -1429,6 +1430,8 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
rfid_code = workorder.rfid_code
|
rfid_code = workorder.rfid_code
|
||||||
workorder.write({'rfid_code_old': rfid_code,
|
workorder.write({'rfid_code_old': rfid_code,
|
||||||
'rfid_code': False})
|
'rfid_code': False})
|
||||||
|
self.env['stock.lot'].sudo().search([('rfid', '=', rfid_code)]).write(
|
||||||
|
{'tool_material_status': '可用'})
|
||||||
if workorder.rfid_code:
|
if workorder.rfid_code:
|
||||||
raise ValidationError(f'【{workorder.name}】工单解绑失败,请重新点击完成按钮!!!')
|
raise ValidationError(f'【{workorder.name}】工单解绑失败,请重新点击完成按钮!!!')
|
||||||
# workorder.rfid_code_old = rfid_code
|
# workorder.rfid_code_old = rfid_code
|
||||||
@@ -1778,6 +1781,7 @@ class SfWorkOrderBarcodes(models.Model):
|
|||||||
if workorder_rfid:
|
if workorder_rfid:
|
||||||
for item in workorder_rfid:
|
for item in workorder_rfid:
|
||||||
item.write({'rfid_code': barcode})
|
item.write({'rfid_code': barcode})
|
||||||
|
lot.sudo().write({'tool_material_status': '在用'})
|
||||||
logging.info("Rfid[%s]绑定成功!!!" % barcode)
|
logging.info("Rfid[%s]绑定成功!!!" % barcode)
|
||||||
else:
|
else:
|
||||||
raise UserError('该Rfid【%s】绑定的是【%s】, 不是托盘!!!' % (barcode, lot.product_id.name))
|
raise UserError('该Rfid【%s】绑定的是【%s】, 不是托盘!!!' % (barcode, lot.product_id.name))
|
||||||
|
|||||||
@@ -441,9 +441,7 @@
|
|||||||
<xpath expr="//tree//button[@name='button_start']" position="replace">
|
<xpath expr="//tree//button[@name='button_start']" position="replace">
|
||||||
<field name="routing_type" invisible="True"/>
|
<field name="routing_type" invisible="True"/>
|
||||||
<button name="button_start" type="object" string="开始" class="btn-success" confirm="是否确认开始?"
|
<button name="button_start" type="object" string="开始" class="btn-success" confirm="是否确认开始?"
|
||||||
attrs="{'invisible': ['|', '|', '|','|', ('production_state','in', ('draft', 'done', 'cancel')),
|
attrs="{'invisible': [('state', '!=', 'ready')]}"
|
||||||
('working_state', '=', 'blocked'), ('state', 'in', ('done','rework', 'cancel')), ('is_user_working', '!=',
|
|
||||||
False), ('routing_type', '=', 'CNC加工')]}"
|
|
||||||
groups="sf_base.group_sf_mrp_user"/>
|
groups="sf_base.group_sf_mrp_user"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//tree//button[@name='button_pending']" position="replace">
|
<xpath expr="//tree//button[@name='button_pending']" position="replace">
|
||||||
|
|||||||
@@ -53,10 +53,7 @@
|
|||||||
<!-- 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel')),-->
|
<!-- 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel')),-->
|
||||||
<!-- ('is_user_working', '!=', False),("user_permissions","=",False),("name","=","CNC加工")]}-->
|
<!-- ('is_user_working', '!=', False),("user_permissions","=",False),("name","=","CNC加工")]}-->
|
||||||
<!-- </attribute>-->
|
<!-- </attribute>-->
|
||||||
<attribute name="attrs">{'invisible': ['|', '|', '|','|','|', ('production_state','in', ('draft',
|
<attribute name="attrs">{'invisible': [('state', '!=', 'ready')]}
|
||||||
'done',
|
|
||||||
'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done','rework', 'cancel')),
|
|
||||||
('is_user_working', '!=', False),("user_permissions","=",False),("name","in",("CNC加工","解除装夹"))]}
|
|
||||||
</attribute>
|
</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='%(mrp.act_mrp_block_workcenter_wo)d']" position="attributes">
|
<xpath expr="//button[@name='%(mrp.act_mrp_block_workcenter_wo)d']" position="attributes">
|
||||||
@@ -174,9 +171,9 @@
|
|||||||
<!-- <button name="button_start" type="object" string="开始" class="btn-success" confirm="是否确认开始"-->
|
<!-- <button name="button_start" type="object" string="开始" class="btn-success" confirm="是否确认开始"-->
|
||||||
<!-- attrs="{'invisible': ['|', '|', '|', ('production_state','in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel','to be detected')), ('is_user_working', '!=', False)]}"/>-->
|
<!-- attrs="{'invisible': ['|', '|', '|', ('production_state','in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel','to be detected')), ('is_user_working', '!=', False)]}"/>-->
|
||||||
<button name="button_start" type="object" string="开始" class="btn-success" confirm="是否确认开始"
|
<button name="button_start" type="object" string="开始" class="btn-success" confirm="是否确认开始"
|
||||||
attrs="{'invisible': ['|', '|', '|', '|', '|', ('routing_type', '=', '装夹预调'), ('routing_type', '=', '解除装夹'), ('production_state','in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done','rework', 'cancel','to be detected')), ('is_user_working', '!=', False)]}"/>
|
attrs="{'invisible': [('state', '!=', 'ready')]}"/>
|
||||||
<button name="button_start" type="object" string="开始" class="btn-success"
|
<button name="button_start" type="object" string="开始" class="btn-success"
|
||||||
attrs="{'invisible': ['|', '|', '|', '|', ('routing_type', '!=', '装夹预调'), ('production_state','in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done','rework', 'cancel','to be detected')), ('is_user_working', '!=', False)]}"/>
|
attrs="{'invisible': [('state', '!=', 'ready')]}"/>
|
||||||
<button name="button_pending" type="object" string="暂停" class="btn-warning"
|
<button name="button_pending" type="object" string="暂停" class="btn-warning"
|
||||||
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"/>
|
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"/>
|
||||||
<button name="button_finish" type="object" string="完成" class="btn-success" confirm="是否确认完工"
|
<button name="button_finish" type="object" string="完成" class="btn-success" confirm="是否确认完工"
|
||||||
|
|||||||
@@ -282,12 +282,28 @@ class RePurchaseOrder(models.Model):
|
|||||||
|
|
||||||
purchase_type = fields.Selection(
|
purchase_type = fields.Selection(
|
||||||
[('standard', '标准采购'), ('consignment', '委外加工'), ('outsourcing', '工序外协'), ('outside', '外购订单')],
|
[('standard', '标准采购'), ('consignment', '委外加工'), ('outsourcing', '工序外协'), ('outside', '外购订单')],
|
||||||
string='采购类型', default='standard')
|
string='采购类型', default='standard', store=True, compute='_compute_purchase_type')
|
||||||
|
|
||||||
origin_sale_id = fields.Many2one('sale.order', string='销售订单号', compute='_compute_origin_sale_id')
|
origin_sale_id = fields.Many2one('sale.order', string='销售订单号', compute='_compute_origin_sale_id')
|
||||||
|
|
||||||
|
@api.depends('origin')
|
||||||
|
def _compute_purchase_type(self):
|
||||||
|
for purchase in self:
|
||||||
|
order_id = self.env['sale.order'].sudo().search([('name', '=', purchase.origin)])
|
||||||
|
if order_id:
|
||||||
|
product_list = [line.product_id.id for line in purchase.order_line]
|
||||||
|
for order_line in order_id.order_line:
|
||||||
|
if order_line.supply_method == 'purchase':
|
||||||
|
if order_line.product_id.id in product_list:
|
||||||
|
purchase.purchase_type = 'outside'
|
||||||
|
break
|
||||||
|
elif order_line.supply_method == 'outsourcing':
|
||||||
|
if order_line.product_id.id in product_list:
|
||||||
|
purchase.purchase_type = 'consignment'
|
||||||
|
break
|
||||||
|
|
||||||
@api.depends('order_line.move_dest_ids.group_id.mrp_production_ids',
|
@api.depends('order_line.move_dest_ids.group_id.mrp_production_ids',
|
||||||
'order_line.move_ids.move_dest_ids.group_id.mrp_production_ids')
|
'order_line.move_ids.move_dest_ids.group_id.mrp_production_ids', 'origin')
|
||||||
def _compute_origin_sale_id(self):
|
def _compute_origin_sale_id(self):
|
||||||
for purchase in self:
|
for purchase in self:
|
||||||
productions_ids = purchase._get_mrp_productions()
|
productions_ids = purchase._get_mrp_productions()
|
||||||
@@ -295,6 +311,10 @@ class RePurchaseOrder(models.Model):
|
|||||||
if productions_ids[0].sale_order_id:
|
if productions_ids[0].sale_order_id:
|
||||||
purchase.origin_sale_id = productions_ids[0].sale_order_id.id
|
purchase.origin_sale_id = productions_ids[0].sale_order_id.id
|
||||||
continue
|
continue
|
||||||
|
order_id = self.env['sale.order'].sudo().search([('name', '=', purchase.origin)])
|
||||||
|
if order_id:
|
||||||
|
purchase.origin_sale_id = order_id.id
|
||||||
|
continue
|
||||||
purchase.origin_sale_id = False
|
purchase.origin_sale_id = False
|
||||||
|
|
||||||
@api.depends('partner_id')
|
@api.depends('partner_id')
|
||||||
@@ -344,7 +364,7 @@ class RePurchaseOrder(models.Model):
|
|||||||
'partner_id': server_template.seller_ids[0].partner_id.id,
|
'partner_id': server_template.seller_ids[0].partner_id.id,
|
||||||
'origin': production.name,
|
'origin': production.name,
|
||||||
'state': 'draft',
|
'state': 'draft',
|
||||||
'purchase_type': 'consignment',
|
'purchase_type': 'outsourcing',
|
||||||
'order_line': server_product_process})
|
'order_line': server_product_process})
|
||||||
pp.purchase_id = [(6, 0, [purchase_order.id])]
|
pp.purchase_id = [(6, 0, [purchase_order.id])]
|
||||||
# self.env.cr.commit()
|
# self.env.cr.commit()
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ class StockLot(models.Model):
|
|||||||
tool_material_search_id = fields.Many2one('sf.tool.material.search', string='刀具物料搜索')
|
tool_material_search_id = fields.Many2one('sf.tool.material.search', string='刀具物料搜索')
|
||||||
fixture_material_search_id = fields.Many2one('sf.fixture.material.search', string='夹具物料搜索')
|
fixture_material_search_id = fields.Many2one('sf.fixture.material.search', string='夹具物料搜索')
|
||||||
tool_material_status = fields.Selection(
|
tool_material_status = fields.Selection(
|
||||||
[('未入库', '未入库'), ('可用', '可用'), ('在用', '在用'), ('报废', '报废')], string='状态',
|
[('未入库', '未入库'), ('可用', '可用'), ('在用', '空闲'), ('报废', '报废')], string='状态',
|
||||||
compute='_compute_tool_material_status', store=True)
|
compute='_compute_tool_material_status', store=True)
|
||||||
|
|
||||||
@api.depends('quant_ids')
|
@api.depends('quant_ids')
|
||||||
|
|||||||
Reference in New Issue
Block a user