import logging import json import traceback from odoo import http from odoo.http import request from odoo.addons.sf_bf_connect.controllers.controllers import Sf_Bf_Connect _logger = logging.getLogger(__name__) class JikimoSaleRoutePicking(Sf_Bf_Connect): @http.route('/api/bfm_process_order/list', type='http', auth='sf_token', methods=['GET', 'POST'], csrf=False, cors="*") def get_bfm_process_order_list(self, **kw): """ 接收业务平台加工订单分配工厂时传送来的订单数据并生成销售订单和产品及坯料 :param kw: :return: """ res = {'status': 1, 'factory_order_no': ''} # _logger.info('get_bfm_process_order_list:%s' % kw['order_number']) try: product_id = request.env.ref('jikimo_sale_multiple_supply_methods.product_template_default').with_context(active_test=False).sudo().product_variant_id _logger.info('product_id:%s' % product_id) company_id = request.env.ref('base.main_company').sudo() bfm_process_order_list = json.loads(kw['bfm_process_order_list']) order_id = request.env['sale.order'].with_user(request.env.ref("base.user_admin")).sale_order_create( company_id, kw['delivery_name'], kw['delivery_telephone'], kw['delivery_address'], kw['delivery_end_date'], kw['payments_way'], kw['pay_way'], kw['order_number'], kw['remark'], state='draft', model_display_version=kw.get('model_display_version')) i = 1 # 给sale_order的default_code字段赋值 # aa = request.env['sale.order'].sudo().search([('name', '=', order_id.name)]) # _logger.info('get_bfm_process_or===================================:%s' % order_id.name) order_id.default_code = kw['order_number'] if kw.get('logistics_way'): order_id.logistics_way = kw['logistics_way'] for item in bfm_process_order_list: if item.get('embryo_redundancy_id'): item['embryo_redundancy'] = request.env['sf.embryo.redundancy'].sudo().search([('code', '=', item['embryo_redundancy_id'])], limit=1) item['embryo_redundancy_id'] = item['embryo_redundancy'].id product = request.env['product.template'].sudo().product_create(product_id, item, order_id, kw['order_number'], i) product.product_tmpl_id.is_customer_provided = True if item['embryo_redundancy_id'] else False order_id.with_user(request.env.ref("base.user_admin")).sale_order_create_line(product, item) i += 1 if kw.get('contract_file_name') and kw.get('contract_file') and kw.get('contract_code'): order_id.create_sale_documents(kw.get('contract_file_name'), kw.get('contract_file')) order_id.write({'contract_code': kw.get('contract_code'), 'contract_date': kw.get('contract_date')}) res['factory_order_no'] = order_id.name order_id.confirm_to_supply_method() except Exception as e: traceback_error = traceback.format_exc() logging.error('get_bfm_process_order_list error: %s' % traceback_error) res['status'] = -1 res['message'] = '工厂创建销售订单和产品失败,请联系管理员' request.cr.rollback() return json.JSONEncoder().encode(res)