Files
test/sf_bf_connect/models/jd_eclp.py

158 lines
7.4 KiB
Python

#import cpca
import logging
import base64
import requests
from datetime import datetime
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 == '京东物流':
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 = 'https://bfm.cs.jikimo.com/api/create/jd/order'
requests.post(url1, json=json1, data=None)
_logger.info('调用成功1')
_logger.info('准备调接口2')
json2 = {
'params': {
'orderNo': self.origin,
},
}
url2 = 'https://bfm.cs.jikimo.com/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):
json1 = {
'params': {
'no': self.origin,
},
}
url1 = 'https://bfm.cs.jikimo.com/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)
# _logger.info(attachment.datas)
# _logger.info(attachment.datas_fname)