Files
test/sf_bf_connect/models/jd_eclp.py
2023-11-27 12:17:57 +08:00

160 lines
7.5 KiB
Python

import base64
import logging
from datetime import datetime
import requests
import cpca
from odoo.exceptions import UserError
from odoo.exceptions import ValidationError
from odoo import api, fields, models, SUPERUSER_ID, _
_logger = logging.getLogger(__name__)
class JdEclp(models.Model):
_inherit = 'stock.picking'
senderNickName = fields.Char(string='寄件工厂简称', required=True, default='MW')
# receiverName = fields.Char(string='收件人姓名')
# receiverMobile = fields.Char(string='收件人电话')
# receiverProvinceName = fields.Char(string='收件人省')
# receiverCityName = fields.Char(string='收件人市')
# receiverCountyName = fields.Char(string='收件人县')
# receiverTownName = fields.Char(string='收件人详细地址')
receiverName = fields.Char(string='收件人姓名', compute='_truck_info')
receiverMobile = fields.Char(string='收件人电话', compute='_truck_info')
receiverProvinceName = fields.Char(string='收件人省', compute='_truck_info')
receiverCityName = fields.Char(string='收件人市', compute='_truck_info')
receiverCountyName = fields.Char(string='收件人县', compute='_truck_info')
receiverTownName = fields.Char(string='收件人详细地址', compute='_truck_info')
receiverCompany = fields.Char(string='收货人公司', required=True, default=1)
remark = fields.Char(string='物流面单备注', default='')
grossWeight = fields.Char(string='总重量', required=True, default=0)
grossVolume = fields.Char(string='总体积', default=0)
expressItemName = fields.Char(string='货物名称', required=True, default='非标工件')
pickupBeginTime = fields.Char(string='期望取件时间')
deliveryType = fields.Selection([('6', '特快零担'), ('25', '特快重货')], string='运输类型', default='25')
# bill = fields.Char(string='物流面单')
# bill = fields.Many2one('ir.attachment', string='物流面单', compute='query_bill_pdf')
# bill_show = fields.Binary(string='物流面单展示', readonly=True, related='self.bill.datas')
bill_show = fields.Binary(string='物流面单展示', readonly=True)
@api.depends('carrier_tracking_ref')
def query_bill_pdf(self):
self.bill = self.env['ir.attachment'].sudo().search([('name', '=', self.carrier_tracking_ref)])
@api.depends('origin')
def _truck_info(self):
# if 'S' in self.origin:
# if self.receiverName and self.receiverMobile and self.receiverProvinceName and self.receiverCityName and
# self.receiverCountyName and self.receiverTownName:
sale_order_id = self.env['sale.order'].search([('name', '=', self.origin)])
# stock_picking_type_id = self.enc['stock.picking.type'].search([('picking_type_id', '=', '')])
# if sale_order_id.address_of_delivery != False:
try:
if 'OUT' in self.name:
raw_addres = sale_order_id.address_of_delivery.split('这是一个标志位,用来不分隔字符串')
# _logger.info('=================dddd====', sale_order_id.address_of_delivery)
# _logger.info('========================================', raw_addres)
# _logger.info('=================dddd====', self.display_name)
# _logger.info('=================dddd====', type(self.display_name))
# # _logger.info(self.receiverName, self.receiverMobile)
# _logger.info(1111111111111111111111111111111111111111111111)
self.receiverName = sale_order_id.person_of_delivery
self.receiverMobile = sale_order_id.telephone_of_delivery
self.receiverProvinceName = cpca.transform(raw_addres).values.tolist()[0][0]
self.receiverCityName = cpca.transform(raw_addres).values.tolist()[0][1]
self.receiverCountyName = cpca.transform(raw_addres).values.tolist()[0][2]
self.receiverTownName = cpca.transform(raw_addres).values.tolist()[0][3]
else:
self.receiverName = self.receiverName
self.receiverMobile = self.receiverMobile
self.receiverProvinceName = self.receiverProvinceName
self.receiverCityName = self.receiverCityName
self.receiverCountyName = self.receiverCountyName
self.receiverTownName = self.receiverTownName
except Exception as e:
print(f"Error address is none: {e}")
pass
def create_order(self):
# sale_order_id = self.env['sale.order'].search([('name', '=', self.origin)])
# if self.carrier_id == '京东物流':
config = self.env['res.config.settings'].get_values()
createTime = str(datetime.now())
json1 = {
'params': {
'orderNo': self.origin,
'senderNickName': self.senderNickName,
'receiverName': self.receiverName,
'receiverMobile': self.receiverMobile,
'receiverProvinceName': self.receiverProvinceName,
'receiverCityName': self.receiverCityName,
'receiverCountyName': self.receiverCountyName,
'receiverTownName': self.receiverTownName,
'remark': self.remark,
'grossWeight': self.grossWeight,
'grossVolume': self.grossVolume,
'createTime': createTime,
# 'createUser': self.user_id,
'expressItemName': self.expressItemName,
'pickupBeginTime': self.pickupBeginTime,
'deliveryType': self.deliveryType,
'receiverCompany': self.receiverCompany,
},
}
_logger.info('准备调接口1')
url1 = config['bfm_url'] + '/api/create/jd/order'
requests.post(url1, json=json1, data=None)
_logger.info('调用成功1')
_logger.info('准备调接口2')
json2 = {
'params': {
'orderNo': self.origin,
},
}
url2 = config['bfm_url'] + '/api/get/jd/no'
response = requests.post(url2, json=json2, data=None)
# _logger.info('调用成功2', response.json()['result']['wbNo'])
self.carrier_tracking_ref = response.json()['result']['wbNo']
# else:
# raise UserError("选择京东物流才能下单呦")
def get_bill(self):
"""
获取物流面单
"""
config = self.env['res.config.settings'].get_values()
json1 = {
'params': {
'no': self.origin,
},
}
url1 = config['bfm_url'] + '/api/create/jd/bill'
response = requests.post(url1, json=json1, data=None)
# _logger.info('调用成功2', response.json())
# _logger.info('调用成功2', response.text)
bill_url_str = response.json()['result']['jingdong_eclp_co_generateBdWayBillFile_responce']['result']['content']
bill_url = 'http:' + bill_url_str
data = base64.b64encode(requests.get(bill_url).content)
# self.bill = ''
self.bill_show = data
_logger.info('调用成功2')
attachment = self.env['ir.attachment'].sudo().create({
'datas': data,
'type': 'binary',
'description': '快递面单',
'name': self.carrier_tracking_ref,
# 'res_id': invoice.id,
# 'res_model': 'stock.picking',
'public': True,
'mimetype': 'application/pdf',
# 'model_name': 'stock.picking',
})
_logger.info(attachment)