Files
test/sf_bf_connect/models/jd_eclp.py
2023-11-27 21:30:45 +08:00

172 lines
7.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
_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)
check_out = fields.Char(string='查询是否为出库单', compute='_check_is_out')
@api.depends('name')
def _check_is_out(self):
"""
判断是否为出库单
"""
if self.name:
is_check_out = self.name.split('/')
self.check_out = is_check_out[1]
@api.depends('carrier_tracking_ref')
def query_bill_pdf(self):
"""
查询物流面单并赋值给bill
"""
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}")
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)