# -*- coding: utf-8 -*- import json import requests from odoo import models, fields, api from odoo.exceptions import UserError import logging from odoo.tools import date_utils _logger = logging.getLogger(__name__) class StockPicking(models.Model): _inherit = 'stock.picking' # 重写验证,下发发货到bfm def button_validate(self): info = super(StockPicking, self).button_validate() if self.picking_type_code == 'outgoing': self.send_to_bfm() return info def deal_move_ids(self, send_move_ids): move_ids = [] # 本次发货单 if send_move_ids: for item in send_move_ids: val = { 'name': item.product_id.upload_model_file.display_name, 'quantity_done': item.quantity_done, 'date': date_utils.json_default(item.date) if item.date else None, 'description_picking': item.description_picking, 'date_deadline': date_utils.json_default(item.date_deadline) if item.date_deadline else None, 'product_uom_qty': item.product_uom_qty, 'sequence': item.sequence, 'price_unit': item.price_unit, 'priority': item.priority } move_ids.append(val) return move_ids def deal_send_backorder_id(self, backorder_ids1): backorder_ids = [] if backorder_ids1: for item in backorder_ids1: val = { 'receiverName': item.receiverName, 'name': item.sale_id.default_code, 'send_no': item.name, 'scheduled_date': date_utils.json_default(item.scheduled_date) if item.scheduled_date else None, 'date': date_utils.json_default(item.date) if item.date else None, 'date_deadline': date_utils.json_default(item.date_deadline) if item.date_deadline else None, 'move_ids': self.deal_move_ids(item.move_ids), } backorder_ids.append(val) return backorder_ids def send_to_bfm(self): # 下发发货到bfm config = self.env['res.config.settings'].get_values() data = { 'params': { 'receiverName': self.receiverName, 'name': self.sale_id.default_code, 'send_no': self.name, 'scheduled_date': date_utils.json_default(self.scheduled_date) if self.scheduled_date else None, 'date': date_utils.json_default(self.date) if self.date else None, 'date_deadline': date_utils.json_default(self.date_deadline) if self.date_deadline else None, 'move_ids': self.deal_move_ids(self.move_ids), 'backorder_id': self.deal_send_backorder_id(self.backorder_id), 'backorder_ids': self.deal_send_backorder_id(self.backorder_ids) }, } url1 = config['bfm_url_new'] + '/api/stock/deliver_goods' r = requests.post(url1, json=data, data=None) if r.status_code == 200: result = json.loads(r.json()['result']) if result['code'] != 200: raise UserError(result['message'] or '工厂发货下发bfm失败') else: raise UserError('工厂发货下发bfm失败')