diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py
index 44fe8c92..ed4786cd 100644
--- a/sf_manufacturing/models/mrp_workorder.py
+++ b/sf_manufacturing/models/mrp_workorder.py
@@ -933,7 +933,7 @@ class ResMrpWorkOrder(models.Model):
purchase_orders = self.env['purchase.order'].search(
[('origin', '=', ','.join(production_list))])
for line in purchase_orders.order_line:
- if line.product_id.server_product_process_parameters_id == order.surface_technics_parameters_id and line.product_qty == len(
+ if line.product_id.server_product_process_parameters_id == workorder.surface_technics_parameters_id and line.product_qty == len(
production_programming):
if purchase_orders.state == 'purchase':
workorder.state = 'ready'
diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py
index 721aa0a9..d4bdc1f2 100644
--- a/sf_manufacturing/models/product_template.py
+++ b/sf_manufacturing/models/product_template.py
@@ -9,8 +9,8 @@ from odoo.exceptions import ValidationError, UserError
from odoo.modules import get_resource_path
-# from OCC.Extend.DataExchange import read_step_file
-# from OCC.Extend.DataExchange import write_stl_file
+from OCC.Extend.DataExchange import read_step_file
+from OCC.Extend.DataExchange import write_stl_file
class ResProductMo(models.Model):
diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py
index f338924d..03dd861e 100644
--- a/sf_manufacturing/models/stock.py
+++ b/sf_manufacturing/models/stock.py
@@ -554,19 +554,19 @@ class StockPicking(models.Model):
raise UserError(
_('该入库单对应的单号为%s的出库单还未完成,不能进行验证操作!' % move_out.picking_id.name))
res = super().button_validate()
- # if res is True:
- # if self.id == move_out.picking_id.id:
- # # if move_out.move_line_ids.workorder_id.state == 'progress':
- # move_in = self.env['stock.move'].search(
- # [('location_dest_id', '=', self.env['stock.location'].search(
- # [('barcode', 'ilike', 'WH-PREPRODUCTION')]).id),
- # ('location_id', '=', self.env['stock.location'].search(
- # [('barcode', 'ilike', 'VL-SPOC')]).id),
- # ('origin', '=', self.origin)])
- # production = self.env['mrp.production'].search([('name', '=', self.origin)])
- # if move_in:
- # move_in.write({'state': 'assigned'})
- # self.env['stock.move.line'].create(move_in.get_move_line(production, None))
+ if res is True:
+ if self.id == move_out.picking_id.id:
+ # if move_out.move_line_ids.workorder_id.state == 'progress':
+ move_in = self.env['stock.move'].search(
+ [('location_dest_id', '=', self.env['stock.location'].search(
+ [('barcode', 'ilike', 'WH-PREPRODUCTION')]).id),
+ ('location_id', '=', self.env['stock.location'].search(
+ [('barcode', 'ilike', 'VL-SPOC')]).id),
+ ('origin', '=', self.origin)])
+ production = self.env['mrp.production'].search([('name', '=', self.origin)])
+ if move_in:
+ move_in.write({'state': 'assigned'})
+ self.env['stock.move.line'].create(move_in.get_move_line(production, None))
return res
diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml
index 23b61c66..0c4fcd38 100644
--- a/sf_manufacturing/views/mrp_workorder_view.xml
+++ b/sf_manufacturing/views/mrp_workorder_view.xml
@@ -118,11 +118,6 @@
statusbar_visible="pending,waiting,ready,progress,to be detected,done,rework"/>
-
+
diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py
index 72b5d026..ce342d4a 100644
--- a/sf_mrs_connect/controllers/controllers.py
+++ b/sf_mrs_connect/controllers/controllers.py
@@ -29,21 +29,21 @@ class Sf_Mrs_Connect(http.Controller):
[('programming_no', '=', ret['programming_no'])])
if productions:
# # 拉取所有加工面的程序文件
- # for r in ret['processing_panel'].split(','):
- # program_path_tmp_r = os.path.join('/tmp', ret['folder_name'], 'return', r)
- # if os.path.exists(program_path_tmp_r):
- # files_r = os.listdir(program_path_tmp_r)
- # if files_r:
- # for file_name in files_r:
- # file_path = os.path.join(program_path_tmp_r, file_name)
- # os.remove(file_path)
- # download_state = request.env['sf.cnc.processing'].with_user(
- # request.env.ref("base.user_admin")).download_file_tmp(
- # ret['folder_name'], r)
- # if download_state is False:
- # res['status'] = -2
- # res['message'] = '编程单号为%s的CNC程序文件从FTP拉取失败' % (ret['programming_no'])
- # return json.JSONEncoder().encode(res)
+ for r in ret['processing_panel'].split(','):
+ program_path_tmp_r = os.path.join('/tmp', ret['folder_name'], 'return', r)
+ if os.path.exists(program_path_tmp_r):
+ files_r = os.listdir(program_path_tmp_r)
+ if files_r:
+ for file_name in files_r:
+ file_path = os.path.join(program_path_tmp_r, file_name)
+ os.remove(file_path)
+ download_state = request.env['sf.cnc.processing'].with_user(
+ request.env.ref("base.user_admin")).download_file_tmp(
+ ret['folder_name'], r)
+ if download_state is False:
+ res['status'] = -2
+ res['message'] = '编程单号为%s的CNC程序文件从FTP拉取失败' % (ret['programming_no'])
+ return json.JSONEncoder().encode(res)
for production in productions:
if not production.workorder_ids:
production.product_id.model_processing_panel = ret['processing_panel']
@@ -82,31 +82,31 @@ class Sf_Mrs_Connect(http.Controller):
# if pre_workorder:
# pre_workorder.write(
# {'processing_drawing': base64.b64encode(open(panel_file_path, 'rb').read())})
- # for panel in ret['processing_panel'].split(','):
- # # 查询状态为进行中且工序类型为CNC加工的工单
- # cnc_workorder = productions.workorder_ids.filtered(
- # lambda ac: ac.routing_type == 'CNC加工' and ac.state not in ['progress', 'done',
- # 'cancel'] and ac.processing_panel == panel)
- # if cnc_workorder:
- # program_path_tmp_panel = os.path.join('C://Users//43484//Desktop//fsdownload//test',
- # panel)
- # program_path_tmp_panel = os.path.join('/tmp', ret['folder_name'], 'return', panel)
- # logging.info('program_path_tmp_panel:%s' % program_path_tmp_panel)
- # files_panel = os.listdir(program_path_tmp_panel)
- # if files_panel:
- # for file in files_panel:
- # file_extension = os.path.splitext(file)[1]
- # logging.info('file_extension:%s' % file_extension)
- # if file_extension.lower() == '.pdf':
- # panel_file_path = os.path.join(program_path_tmp_panel, file)
- # logging.info('panel_file_path:%s' % panel_file_path)
- # cnc_workorder.write({'cnc_worksheet': base64.b64encode(open(panel_file_path, 'rb').read())})
- # pre_workorder = productions.workorder_ids.filtered(
- # lambda ap: ap.routing_type == '装夹预调' and ap.state not in ['done',
- # 'cancel'] and ap.processing_panel == panel)
- # if pre_workorder:
- # pre_workorder.write(
- # {'processing_drawing': base64.b64encode(open(panel_file_path, 'rb').read())})
+ for panel in ret['processing_panel'].split(','):
+ # 查询状态为进行中且工序类型为CNC加工的工单
+ cnc_workorder = productions.workorder_ids.filtered(
+ lambda ac: ac.routing_type == 'CNC加工' and ac.state not in ['progress', 'done',
+ 'cancel'] and ac.processing_panel == panel)
+ if cnc_workorder:
+ program_path_tmp_panel = os.path.join('C://Users//43484//Desktop//fsdownload//test',
+ panel)
+ program_path_tmp_panel = os.path.join('/tmp', ret['folder_name'], 'return', panel)
+ logging.info('program_path_tmp_panel:%s' % program_path_tmp_panel)
+ files_panel = os.listdir(program_path_tmp_panel)
+ if files_panel:
+ for file in files_panel:
+ file_extension = os.path.splitext(file)[1]
+ logging.info('file_extension:%s' % file_extension)
+ if file_extension.lower() == '.pdf':
+ panel_file_path = os.path.join(program_path_tmp_panel, file)
+ logging.info('panel_file_path:%s' % panel_file_path)
+ cnc_workorder.write({'cnc_worksheet': base64.b64encode(open(panel_file_path, 'rb').read())})
+ pre_workorder = productions.workorder_ids.filtered(
+ lambda ap: ap.routing_type == '装夹预调' and ap.state not in ['done',
+ 'cancel'] and ap.processing_panel == panel)
+ if pre_workorder:
+ pre_workorder.write(
+ {'processing_drawing': base64.b64encode(open(panel_file_path, 'rb').read())})
productions.write({'programming_state': '已编程', 'work_state': '已编程'})
cnc_program_ids = [item.id for item in productions]
workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search(
diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py
index e8807707..b4ed6f31 100644
--- a/sf_sale/models/quick_easy_order.py
+++ b/sf_sale/models/quick_easy_order.py
@@ -8,8 +8,8 @@ from datetime import datetime
import requests
from odoo import http
from odoo.http import request
-# from OCC.Extend.DataExchange import read_step_file
-# from OCC.Extend.DataExchange import write_stl_file
+from OCC.Extend.DataExchange import read_step_file
+from OCC.Extend.DataExchange import write_stl_file
from odoo import models, fields, api
from odoo.modules import get_resource_path
from odoo.exceptions import ValidationError, UserError
diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py
index 92f6cda2..3ae65db3 100644
--- a/sf_sale/models/quick_easy_order_old.py
+++ b/sf_sale/models/quick_easy_order_old.py
@@ -6,8 +6,8 @@ import os
from datetime import datetime
from stl import mesh
# from OCC.Core.GProp import GProp_GProps
-# from OCC.Extend.DataExchange import read_step_file
-# from OCC.Extend.DataExchange import write_stl_file
+from OCC.Extend.DataExchange import read_step_file
+from OCC.Extend.DataExchange import write_stl_file
from odoo.addons.sf_base.commons.common import Common
from odoo import models, fields, api
from odoo.modules import get_resource_path
diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py
index 9a668e88..424f9bb5 100644
--- a/sf_sale/models/sale_order.py
+++ b/sf_sale/models/sale_order.py
@@ -271,6 +271,14 @@ class RePurchaseOrder(models.Model):
if picking_id.move_ids:
for move_id in picking_id.move_ids:
move_id.put_move_line()
+ for line in item.order_line:
+ if line.product_id.categ_type == '表面工艺':
+ for production_name in item.origin.split(','):
+ production = self.env['mrp.production'].search([('name', '=', production_name)])
+ for workorder in production.workorder_ids.filtered(
+ lambda wd: wd.routing_type == '表面工艺' and wd.state == 'waiting' and line.product_id.server_product_process_parameters_id == wd.surface_technics_parameters_id):
+ workorder.state = 'ready'
+
return result