diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py
index 964f34fe..0f26a6d7 100644
--- a/sf_manufacturing/models/mrp_production.py
+++ b/sf_manufacturing/models/mrp_production.py
@@ -126,6 +126,31 @@ class MrpProduction(models.Model):
manual_quotation = fields.Boolean('人工编程', default=False, readonly=True)
is_scrap = fields.Boolean('是否报废', default=False)
is_remanufacture = fields.Boolean('是否重新制造', default=False)
+ remanufacture_count = fields.Integer("重新制造订单数量", compute='_compute_remanufacture_production_ids')
+ remanufacture_production_id = fields.Many2one('mrp.production', string='')
+
+ @api.depends('remanufacture_production_id')
+ def _compute_remanufacture_production_ids(self):
+ for production in self:
+ if production.remanufacture_production_id:
+ remanufacture_production = self.env['mrp.production'].search(
+ [('id', '=', production.remanufacture_production_id.id)])
+ if remanufacture_production:
+ production.remanufacture_count = len(remanufacture_production)
+ else:
+ production.remanufacture_count = 0
+
+ def action_view_remanufacture_productions(self):
+ self.ensure_one()
+ mrp_production_ids = self.env['mrp.production'].search(
+ [('id', '=', self.remanufacture_production_id.id)])
+ action = {
+ 'res_model': 'mrp.production',
+ 'type': 'ir.actions.act_window',
+ 'view_mode': 'form',
+ 'res_id': mrp_production_ids[0],
+ }
+ return action
@api.depends(
'move_raw_ids.state', 'move_raw_ids.quantity_done', 'move_finished_ids.state', 'tool_state',
@@ -242,9 +267,9 @@ class MrpProduction(models.Model):
logging.info('res=%s:' % res)
configsettings = self.env['res.config.settings'].get_values()
configsettings['token'] = 'ba301c9b-2216-11ef-9d97-f8b54deb92c1'
- # configsettings['sf_secret_key'] = 'rAalgsVOhDpxIWzR'
- # configsettings['sf_url'] = 'http://localhost:7069'
- # config_header = Common.get_headers(self, configsettings['token'], configsettings['sf_secret_key'])
+ configsettings['sf_secret_key'] = 'rAalgsVOhDpxIWzR'
+ configsettings['sf_url'] = 'http://localhost:7069'
+ config_header = Common.get_headers(self, configsettings['token'], configsettings['sf_secret_key'])
url = '/api/intelligent_programming/get_state'
config_url = configsettings['sf_url'] + url
ret = requests.post(config_url, json=res, data=None, headers=config_header)
@@ -812,7 +837,7 @@ class MrpProduction(models.Model):
'context': {
'default_production_id': self.id,
'default_reprogramming_num': cloud_programming['reprogramming_num'],
- 'default_programming_state': cloud_programming['programming_state'],
+ 'default_programming_states': cloud_programming['programming_state'],
'default_is_reprogramming': True if cloud_programming['programming_state'] in ['已下发'] else False
}
}
@@ -959,32 +984,19 @@ class MrpProduction(models.Model):
move_values = {'product_description_variants': '',
'date_planned': datetime.now(),
'date_deadline': datetime.now(),
- # 'move_dest_ids': self.env['stock.move'].search([('id', '=', move.id)]),
'move_dest_ids': move,
- 'group_id': False,
+ 'group_id': move.group_id,
'route_ids': [],
'warehouse_id': self.warehouse_id,
'priority': 0,
'orderpoint_id': False,
'product_packaging_id': False}
- rule = self.env['stock.rule'].search(
- [('action', '=', 'pull'), ('procure_method', '=', 'mts_else_mto'), (
- 'location_dest_id', '=', self.env['stock.location'].search([('parent_path', '=', '2/5/')]).id),
- ('location_src_id', '=', self.env['stock.location'].search(
- [('barcode', '=', 'CP')]).id)])
- # origin = move._prepare_procurement_origin()
procurement_requests.append(self.env['procurement.group'].Procurement(
move.product_id, 1.0, move.product_uom,
- self.env['stock.location'].search([('barcode', '=', 'CP')]),
- rule and rule.name or "/",
+ move.location_id, move.rule_id and move.rule_id.name or "/",
sale_order.name, move.company_id, move_values))
self.env['procurement.group'].run(procurement_requests,
raise_user_error=not self.env.context.get('from_orderpoint'))
- # self.env['stock.move'].sudo().create(productions._get_moves_finished_values())
- # productions.filtered(lambda p: (not p.orderpoint_id and p.move_raw_ids) or \
- # (
- # p.move_dest_ids.procure_method != 'make_to_order' and
- # not p.move_raw_ids and not p.workorder_ids)).action_confirm()
productions = self.env['mrp.production'].sudo().search(
[('origin', '=', self.origin)], order='id desc', limit=1)
move = self.env['stock.move'].search([('origin', '=', productions.name)], order='id desc')
@@ -1012,8 +1024,29 @@ class MrpProduction(models.Model):
'picking_id': sfp_move.picking_id.id, 'picking_type_id': sfp_move.picking_type_id.id,
'production_id': False})
productions.write({'programming_no': self.programming_no, 'is_remanufacture': True})
- productions.procurement_group_id.mrp_production_ids.move_dest_ids.write(
- {'group_id': self.env['procurement.group'].search([('name', '=', sale_order.name)])})
+ # productions.procurement_group_id.mrp_production_ids.move_dest_ids.write(
+ # {'group_id': self.env['procurement.group'].search([('name', '=', sale_order.name)])})
+ stock_picking = None
+ pc_picking = self.env['stock.picking'].search(
+ [('origin', '=', productions.name), ('name', 'ilike', 'WH/PC/')])
+ stock_picking = pc_picking
+ int_picking = self.env['stock.picking'].search(
+ [('origin', '=', productions.name), ('name', 'ilike', 'WH/INT/')])
+ stock_picking |= int_picking
+ for pick in stock_picking:
+ if pick.move_ids:
+ product_type_id = pick.move_ids[0].product_id.categ_id
+ if product_type_id.name == '坯料':
+ location_id = self.env['stock.location'].search([('name', '=', '坯料存货区')])
+ if not location_id:
+ logging.info(f'没有搜索到【坯料存货区】: {location_id}')
+ break
+ if pick.picking_type_id.name == '内部调拨':
+ if pick.location_dest_id.product_type != product_type_id:
+ pick.location_dest_id = location_id.id
+ elif pick.picking_type_id.name == '生产发料':
+ if pick.location_id.product_type != product_type_id:
+ pick.location_id = location_id.id
scarp_process_parameter_workorder = self.env['mrp.workorder'].search(
[('surface_technics_parameters_id', '!=', False), ('production_id', '=', self.id),
('is_subcontract', '=', True)])
diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py
index a6aa3e96..a0da7ba3 100644
--- a/sf_manufacturing/models/stock.py
+++ b/sf_manufacturing/models/stock.py
@@ -184,7 +184,6 @@ class StockRule(models.Model):
logging.info(moves)
# Since action_confirm launch following procurement_group we should activate it.
moves._action_confirm()
-
return True
@api.model
@@ -351,17 +350,17 @@ class StockRule(models.Model):
product_id_to_production_names)
# # 同一个产品多个制造订单对应一个编程单和模型库
# # 只调用一次fetchCNC,并将所有生产订单的名称作为字符串传递
- # if not production_item.programming_no:
- # production_programming = self.env['mrp.production'].search(
- # [('product_id.id', '=', production_item.product_id.id),
- # ('origin', '=', production_item.origin)],
- # limit=1, order='id asc')
- # if not production_programming.programming_no:
- # production_item.fetchCNC(
- # ', '.join(product_id_to_production_names[production_item.product_id.id]))
- # else:
- # production_item.write({'programming_no': production_programming.programming_no,
- # 'programming_state': '编程中'})
+ if not production_item.programming_no:
+ production_programming = self.env['mrp.production'].search(
+ [('product_id.id', '=', production_item.product_id.id),
+ ('origin', '=', production_item.origin)],
+ limit=1, order='id asc')
+ if not production_programming.programming_no:
+ production_item.fetchCNC(
+ ', '.join(product_id_to_production_names[production_item.product_id.id]))
+ else:
+ production_item.write({'programming_no': production_programming.programming_no,
+ 'programming_state': '编程中'})
return True
diff --git a/sf_manufacturing/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml
index 99d27576..8213f483 100644
--- a/sf_manufacturing/views/mrp_production_addional_change.xml
+++ b/sf_manufacturing/views/mrp_production_addional_change.xml
@@ -201,6 +201,19 @@
data-hotkey="l"/>
+
+
+
+
+
+
+
+
+
+
+
+
+