# -*- coding: utf-8 -*- import json import logging from datetime import date, timedelta from odoo import http from odoo.http import request class Sf_Bf_Connect(http.Controller): @http.route('/api/bfm_process_order/list', type='http', auth='none', methods=['GET', 'POST'], csrf=False, cors="*") def get_bfm_process_order_list(self, **kw): """ 获取业务平台传送来的订单 :param kw: :return: """ res = {'status': 1, 'factory_order_no': ''} logging.info('get_bfm_process_order_list:%s' % kw) try: # datas = request.httprequest.data # ret = json.loads(datas) # ret = json.loads(ret['result']) product_id = request.env.ref('sf_dlm.product_template_sf').sudo() self_machining_id = request.env.ref('sf_dlm.product_embryo_sf_self_machining').sudo() outsource_id = request.env.ref('sf_dlm.product_embryo_sf_outsource').sudo() purchase_id = request.env.ref('sf_dlm.product_embryo_sf_purchase').sudo() company_id = request.env.ref('base.main_company').sudo() user_id = request.env.ref('base.user_admin').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'], user_id) i = 1 for item in bfm_process_order_list: # product_has = request.env['product.template'].with_user(request.env.ref("base.user_admin")).search([('barcode','=', item['barcode'])]) # if product_has: # logging.info('product_has:%s' % product_has) # logging.info('barcode:%s' % item['barcode']) # order_id.with_user(request.env.ref("base.user_admin")).sale_order_create_line(product_has, item) # else: product = request.env['product.template'].sudo().product_create(product_id, item, order_id, kw['order_number'], i) bom_data = request.env['mrp.bom'].with_user(request.env.ref("base.user_admin")).get_bom(product) logging.info('bom_data:%s' % bom_data) if bom_data: bom = request.env['mrp.bom'].with_user(request.env.ref("base.user_admin")).bom_create(product, 'normal', False) bom.with_user(request.env.ref("base.user_admin")).bom_create_line_has(bom_data) else: if product.materials_type_id.gain_way == '自加工': # 创建胚料 self_machining_embryo = request.env['product.template'].sudo().no_bom_product_create( self_machining_id, item, order_id, 'self_machining', i) # 创建胚料的bom self_machining_bom = request.env['mrp.bom'].with_user( request.env.ref("base.user_admin")).bom_create( self_machining_embryo, 'normal', False) # 创建胚料里bom的组件 self_machining_bom.with_user(request.env.ref("base.user_admin")).bom_create_line( self_machining_embryo) # 产品配置bom product_bom_self_machining = request.env['mrp.bom'].with_user( request.env.ref("base.user_admin")).bom_create( product, 'normal', False) product_bom_self_machining.with_user(request.env.ref("base.user_admin")).bom_create_line_has( self_machining_embryo) elif product.materials_type_id.gain_way == '外协': # 创建胚料 outsource_embryo = request.env['product.template'].sudo().no_bom_product_create(outsource_id, item, order_id, 'subcontract', i) # 创建胚料的bom outsource_bom = request.env['mrp.bom'].with_user(request.env.ref("base.user_admin")).bom_create( outsource_embryo, 'subcontract', True) # 创建胚料的bom的组件 outsource_bom.with_user(request.env.ref("base.user_admin")).bom_create_line(outsource_embryo) # 产品配置bom product_bom_outsource = request.env['mrp.bom'].with_user( request.env.ref("base.user_admin")).bom_create(product, 'normal', False) product_bom_outsource.with_user(request.env.ref("base.user_admin")).bom_create_line_has( outsource_embryo) elif product.materials_type_id.gain_way == '采购': purchase_embryo = request.env['product.template'].sudo().no_bom_product_create(purchase_id, item, order_id, 'purchase', i) # 产品配置bom product_bom_purchase = request.env['mrp.bom'].with_user( request.env.ref("base.user_admin")).bom_create(product, 'normal', False) product_bom_purchase.with_user(request.env.ref("base.user_admin")).bom_create_line_has( purchase_embryo) order_id.with_user(request.env.ref("base.user_admin")).sale_order_create_line(product, item) i += 1 res['factory_order_no'] = order_id.name except Exception as e: logging.info('get_bfm_process_order_list error:%s' % e) res['status'] = -1 res['message'] = '工厂创建销售订单和产品失败,请联系管理员' return json.JSONEncoder().encode(res)