from datetime import datetime from odoo import models import logging import base64 import hashlib _logger = logging.getLogger(__name__) class QuickEasyOrder(models.Model): _inherit = 'quick.easy.order' def distribute_to_factory(self, obj): """ 多供货方式,重写派单到工厂 :return: """ try: _logger.info('---------派单到工厂-------') res = {'bfm_process_order_list': []} for item in obj: attachment = item.upload_model_file[0] base64_data = base64.b64encode(attachment.datas) base64_datas = base64_data.decode('utf-8') barcode = hashlib.sha1(base64_datas.encode('utf-8')).hexdigest() # logging.info('model_file-size: %s' % len(item.model_file)) res['bfm_process_order_list'].append({ 'model_long': item.model_length, 'model_width': item.model_width, 'model_height': item.model_height, 'model_volume': item.model_volume, 'model_machining_precision': item.machining_precision, 'model_name': attachment.name, 'model_data': base64_datas, 'model_file': base64.b64encode(item.model_file).decode('utf-8'), 'texture_code': item.material_id.materials_no, 'texture_type_code': item.material_model_id.materials_no, # 'surface_process_code': self.env['jikimo.surface.process']._json_surface_process_code(item), 'process_parameters_code': self.env[ 'sf.production.process.parameter']._json_production_process_item_code( item), 'price': item.price, 'number': item.quantity, 'total_amount': item.price, 'remark': '', 'manual_quotation': True, 'barcode': barcode, 'part_number': item.part_drawing_number, 'machining_drawings_name': '', 'quality_standard_name': '', 'machining_drawings_mimetype': '', 'quality_standard_mimetype': '', 'machining_drawings': item.machining_drawings, 'quality_standard': '', 'part_name': '', }) company_id = self.env.ref('base.main_company').sudo() product_id = self.env.ref('jikimo_sale_multiple_supply_methods.product_template_default').sudo().with_context(active_test=False).product_variant_id # user_id = request.env.ref('base.user_admin').sudo() order_id = self.env['sale.order'].sale_order_create(company_id, 'XXXXX', 'XXXXX', 'XXXXX', str(datetime.now()), '现结', '支付宝', state='draft') order_id.default_code = obj.name i = 1 for item in res['bfm_process_order_list']: product = self.env['product.template'].sudo().product_create(product_id, item, order_id, obj.name, i) order_id.with_user(self.env.ref("base.user_admin")).sale_order_create_line(product, item) return order_id except Exception as e: return UserError('工厂创建销售订单和产品失败,请联系管理员')