提交 a525b72b authored 作者: 贺阳's avatar 贺阳

导出报关资料新增字段

DETAILED ADDRESS,LAST MILE SERVICE PROVIDER,GOODS VALUE,HSCODE IMPORT;
上级 81199473
...@@ -31,7 +31,7 @@ class ExportBlAndPackageXlsx(http.Controller): ...@@ -31,7 +31,7 @@ class ExportBlAndPackageXlsx(http.Controller):
if good_ids: if good_ids:
for good_item in good_ids: for good_item in good_ids:
good_index += 1 good_index += 1
sheet1.write(good_index, 0, package_item.logistic_order_no or '') # 物流订单号 CUSTOMS PROVIDER ORDER ID sheet1.write(good_index, 0, package_item.logistic_order_no or '') # 物流订单号 ITEM ID
sheet1.write(good_index, 1, package_item.big_package_id.big_package_no or '') # 小包商品对应的大包号 BIG BAG NO sheet1.write(good_index, 1, package_item.big_package_id.big_package_no or '') # 小包商品对应的大包号 BIG BAG NO
sheet1.write(good_index, 2, package_item.tracking_no or '') # 小包追踪号 TRACKING NO sheet1.write(good_index, 2, package_item.tracking_no or '') # 小包追踪号 TRACKING NO
sheet1.write(good_index, 3, package_item.customer_ref or '') # CUSTOMER REF sheet1.write(good_index, 3, package_item.customer_ref or '') # CUSTOMER REF
...@@ -68,6 +68,10 @@ class ExportBlAndPackageXlsx(http.Controller): ...@@ -68,6 +68,10 @@ class ExportBlAndPackageXlsx(http.Controller):
sheet1.write(good_index, 34, '') # LENGTH sheet1.write(good_index, 34, '') # LENGTH
sheet1.write(good_index, 35, '') # WIDTH sheet1.write(good_index, 35, '') # WIDTH
sheet1.write(good_index, 36, '') # HEIGHT sheet1.write(good_index, 36, '') # HEIGHT
sheet1.write(good_index, 37, package_item.receiver_detailed_address or '') # Detailed Address
sheet1.write(good_index, 38, package_item.next_provider_name or '') # Last Mile Service Provider 关联的小包的下一个服务商名称
sheet1.write(good_index, 39, sum(package_item.good_ids.mapped('item_total_price'))) # GOODS VALUE 小包上的所有商品的货物总价之和
sheet1.write(good_index, 40, good_item.import_hs_code or '') # HSCODE IMPORT 取商品上的进口hscode
if good_index == int(parcel_export_num): if good_index == int(parcel_export_num):
num += 1 num += 1
sheet1 = self.get_package_title(worksheet, font_style, num) sheet1 = self.get_package_title(worksheet, font_style, num)
...@@ -80,10 +84,10 @@ class ExportBlAndPackageXlsx(http.Controller): ...@@ -80,10 +84,10 @@ class ExportBlAndPackageXlsx(http.Controller):
""" """
sheet1 = worksheet.add_sheet('Sheet(%s)' % num, cell_overwrite_ok=True) sheet1 = worksheet.add_sheet('Sheet(%s)' % num, cell_overwrite_ok=True)
index = 0 index = 0
for i in range(37): for i in range(41):
sheet1.col(i).width = 500 * 11 sheet1.col(i).width = 500 * 11
sheet1.col(8).width = 600 * 11 sheet1.col(8).width = 600 * 11
sheet1.write(index, 0, u'CUSTOMS PROVIDER ORDER ID', font_style) # CUSTOMS PROVIDER ORDER ID sheet1.write(index, 0, u'ITEM ID', font_style) # ITEM ID
sheet1.write(index, 1, u'BIG BAG NO', font_style) # BIG BAG NO sheet1.write(index, 1, u'BIG BAG NO', font_style) # BIG BAG NO
sheet1.write(index, 2, u'TRACKING NO', font_style) # TRACKING NO sheet1.write(index, 2, u'TRACKING NO', font_style) # TRACKING NO
sheet1.write(index, 3, u'CUSTOMER REF', font_style) # CUSTOMER REF sheet1.write(index, 3, u'CUSTOMER REF', font_style) # CUSTOMER REF
...@@ -120,6 +124,10 @@ class ExportBlAndPackageXlsx(http.Controller): ...@@ -120,6 +124,10 @@ class ExportBlAndPackageXlsx(http.Controller):
sheet1.write(index, 34, u'LENGTH', font_style) # LENGTH sheet1.write(index, 34, u'LENGTH', font_style) # LENGTH
sheet1.write(index, 35, u'WIDTH', font_style) # WIDTH sheet1.write(index, 35, u'WIDTH', font_style) # WIDTH
sheet1.write(index, 36, u'HEIGHT', font_style) # HEIGHT sheet1.write(index, 36, u'HEIGHT', font_style) # HEIGHT
sheet1.write(index, 37, u'Detailed Address', font_style) # Detailed Address
sheet1.write(index, 38, u'Last Mile Service Provider', font_style) # Last Mile Service Provider
sheet1.write(index, 39, u'GOODS VALUE', font_style) # GOODS VALUE
sheet1.write(index, 40, u'HSCODE IMPORT', font_style) # HSCODE IMPORT
return sheet1 return sheet1
# 运单导出包裹清关数据 每个运单导出一个文件 生成压缩包 # 运单导出包裹清关数据 每个运单导出一个文件 生成压缩包
......
...@@ -343,7 +343,8 @@ class CcShipPackage(models.Model): ...@@ -343,7 +343,8 @@ class CcShipPackage(models.Model):
receiver_email = fields.Char(string='Receiver EMAIL', index=True) receiver_email = fields.Char(string='Receiver EMAIL', index=True)
# 电话号码 # 电话号码
receiver_phone = fields.Char(string='Receiver PHONE', index=True) receiver_phone = fields.Char(string='Receiver PHONE', index=True)
#消费者地址
receiver_detailed_address = fields.Char(string='Detailed Address',index=True)
# 毛重 # 毛重
gross_weight = fields.Float(string='GROSS WEIGHT') gross_weight = fields.Float(string='GROSS WEIGHT')
# 重量单位 # 重量单位
...@@ -758,195 +759,6 @@ class CcBL(models.Model): ...@@ -758,195 +759,6 @@ class CcBL(models.Model):
'context': {'active_id': self.ids, }, 'context': {'active_id': self.ids, },
} }
# # 添加报关单字段
# cdo_ids = fields.One2many('cc.customers.declaration.order', 'bl_id', string='Customers Declaration Order')
#
# # 添加报关单数量字段, 用于显示报关单数量, 根据cdo_ids计算
# cdo_total = fields.Integer(string='Customers Declaration Order Total', compute='_compute_cdo_total', store=True)
# 计算报关单数量
# @api.depends('cdo_ids')
# def _compute_cdo_total(self):
# for bl in self:
# bl.cdo_total = len(bl.cdo_ids)
# 增加提单显示相关报关单的方法
# def action_show_cdo(self):
# # 返回一个action,显示报关单
# return {
# 'name': 'Customers Declaration Order',
# 'type': 'ir.actions.act_window',
# 'res_model': 'cc.customers.declaration.order',
# 'view_mode': 'tree,form',
# 'domain': [('bl_id', '=', self.id)],
# }
# def process_excel(self):
#
# # 检查是否已经上传了BOM文件
# if not self.bl_file:
# raise UserError('请先上传BOM文件')
#
# # 清空BOM导入明细
# self.bl_line_ids.unlink()
#
# # BOM文件打开,并获得第一个sheet
# wb = xlrd.open_workbook(file_contents=base64.b64decode(self.bl_file))
# sheet = wb.sheet_by_index(0)
#
# # 读取第一行,并将第一行的内容作为第二个每列的值的key, 以便于后面的读取
# first_row = sheet.row_values(0)
# first_row_dict = {}
# for i in range(len(first_row)):
# first_row_dict[first_row[i].replace(' ', '')] = i
#
# # 从第二行开始读取数据
# number = 1
# bom_line_id = False
# level_list = None
# for i in range(1, sheet.nrows):
# row = sheet.row_values(i)
# # 读取每行的数据, 数据包括TRACKING NO. CUSTOMER REF Internal Account Number Sender NAME SHIPPER ADD 1 SHIPPER ADD 2 SHIPPER ADD 3 Sender CITY Ship State Sender POSTCODE Sender COUNTRY Receiver NAME Receiver ADD 1 Receiver ADD 2 Receiver ADD 3 Receiver CITY Receiver COUNTY Receiver POSTCODE RECEPIENT EMAIL PHONE NUMBER GROSS WEIGHT (KG) NET WEIGHT (KG) Currency SKU NUMBER ITEM DESCRIPTION ITEM HS CODE ITEM QUANTITY UNIT VALUE TOTAL VALUE VAT ONLINE SELLING PLACE PRODUCT LINK LENGTH WIDTH HEIGHT
# # 将读取的数据生成一个字典, keyBOM明细的字段, value为读取的数据
# try:
#
# if row[first_row_dict['TRACKINGNO.']] and row[first_row_dict['CUSTOMERREF']]:
# bom_import_dict = {}
# bom_import_dict['bl_id'] = self.id
#
# # 从Excel生成cc.ship.package的数据, excel的名字采用字段的string
# bom_import_dict['tracking_no'] = row[first_row_dict['TRACKINGNO.']] or ''
# bom_import_dict['customer_ref'] = row[first_row_dict['CUSTOMERREF']] or ''
# bom_import_dict['internal_account_number'] = row[first_row_dict['InternalAccountNumber']] or ''
# bom_import_dict['sender_name'] = row[first_row_dict['SenderNAME']] or ''
# bom_import_dict['shipper_add_1'] = row[first_row_dict['SHIPPERADD1']] or ''
# bom_import_dict['shipper_add_2'] = row[first_row_dict['SHIPPERADD2']] or ''
# bom_import_dict['shipper_add_3'] = row[first_row_dict['SHIPPERADD3']] or ''
# bom_import_dict['sender_city'] = row[first_row_dict['SenderCITY']] or ''
# bom_import_dict['ship_state'] = row[first_row_dict['ShipState']] or ''
# bom_import_dict['sender_postcode'] = row[first_row_dict['SenderPOSTCODE']] or ''
# bom_import_dict['sender_country'] = row[first_row_dict['SenderCOUNTRY']] or ''
# bom_import_dict['receiver_name'] = row[first_row_dict['ReceiverNAME']] or ''
# bom_import_dict['receiver_add_1'] = row[first_row_dict['ReceiverADD1']] or ''
# bom_import_dict['receiver_add_2'] = row[first_row_dict['ReceiverADD2']] or ''
# bom_import_dict['receiver_add_3'] = row[first_row_dict['ReceiverADD3']] or ''
# bom_import_dict['receiver_city'] = row[first_row_dict['ReceiverCITY']] or ''
# bom_import_dict['receiver_county'] = row[first_row_dict['ReceiverCOUNTY']] or ''
# bom_import_dict['receiver_postcode'] = row[first_row_dict['ReceiverPOSTCODE']] or ''
# bom_import_dict['recepient_email'] = row[first_row_dict['RECEPIENTEMAIL']] or ''
# bom_import_dict['phone_number'] = row[first_row_dict['PHONENUMBER']] or ''
# bom_import_dict['gross_weight'] = row[first_row_dict['GROSSWEIGHT(KG)']] or 0.0
# bom_import_dict['net_weight'] = row[first_row_dict['NETWEIGHT(KG)']] or 0.0
# bom_import_dict['currency'] = row[first_row_dict['Currency']] or ''
# bom_import_dict['sku_number'] = row[first_row_dict['SKUNUMBER']] or ''
# bom_import_dict['item_description'] = row[first_row_dict['ITEMDESCRIPTION']] or ''
# bom_import_dict['item_hs_code'] = row[first_row_dict['ITEMHSCODE']] or ''
# bom_import_dict['item_quantity'] = row[first_row_dict['ITEMQUANTITY']] or 0.0
# bom_import_dict['unit_value'] = row[first_row_dict['UNITVALUE']] or 0.0
# bom_import_dict['total_value'] = row[first_row_dict['TOTALVALUE']] or 0.0
# bom_import_dict['vat'] = row[first_row_dict['VAT']] or ''
# bom_import_dict['online_selling_place'] = row[first_row_dict['ONLINESELLINGPLACE']] or ''
# bom_import_dict['product_link'] = row[first_row_dict['PRODUCTLINK']] or ''
# bom_import_dict['length'] = row[first_row_dict['LENGTH']] or 0.0
# bom_import_dict['width'] = row[first_row_dict['WIDTH']] or 0.0
# bom_import_dict['height'] = row[first_row_dict['HEIGHT']] or 0.0
#
# # 创建cc.ship.package导入明细
# _logger.debug('cc.ship.package: %s' % bom_import_dict)
# bom_line_id = self.env['cc.ship.package'].create(bom_import_dict)
# number += 1
#
# except Exception as e:
# _logger.error(_('Failed to import package details in line %s: %s') % (i, e))
# wb.release_resources()
# raise UserError(_('Failed to import package details in line %s: %s') % (i, e))
#
# # 关闭文件
# wb.release_resources()
# 添加一个方法,根据bl_file字段,生成cc.ship.package数据
# def action_import_lines(self):
# self.process_excel()
# return self.action_show_lines()
#
# # 添加方法,根据bl_line_ids生成报关单, 相同email的生成一个报关单, 明细为不同的提单明细中的产品相关信息
# def action_generate_customs_declaration_order(self):
# # 删除原来的报关单
# self.cdo_ids.unlink()
#
# # 获取提单的所有明细
# bl_lines = self.bl_line_ids
# # 根据email分组, 生成报关单的字典List
# email_dict_list = {}
# for bl_line in bl_lines:
# cc_key = bl_line.receiver_name + bl_line.receiver_postcode + bl_line.receiver_add_1
# if cc_key in email_dict_list:
# email_dict_list[cc_key].append(bl_line)
# else:
# email_dict_list[cc_key] = [bl_line]
#
# # 生成报关单
# for cc_key in email_dict_list:
# # 在bl_lines中过滤出有相同email的明细
# email_lines = bl_lines.filtered(
# lambda line: line.receiver_name + line.receiver_postcode + line.receiver_add_1 == cc_key)
# # 生成报关单的数据
# cdo_dict = {
# 'bl_id': self.id,
# 'recepient_email': email_lines[0].recepient_email,
# 'phone_number': email_lines[0].phone_number,
# 'receiver_name': email_lines[0].receiver_name,
# 'receiver_add_1': email_lines[0].receiver_add_1,
# 'receiver_add_2': email_lines[0].receiver_add_2,
# 'receiver_add_3': email_lines[0].receiver_add_3,
# 'receiver_city': email_lines[0].receiver_city,
# 'receiver_county': email_lines[0].receiver_county_translate or email_lines[0].receiver_county,
# 'receiver_postcode': email_lines[0].receiver_postcode,
# 'sender_name': email_lines[0].sender_name,
# 'shipper_add_1': email_lines[0].shipper_add_1,
# 'shipper_add_2': email_lines[0].shipper_add_2,
# 'shipper_add_3': email_lines[0].shipper_add_3,
# 'sender_city': email_lines[0].sender_city,
# 'sender_country': email_lines[0].sender_country,
# 'sender_postcode': email_lines[0].sender_postcode,
# 'ship_state': email_lines[0].ship_state,
# 'internal_account_number': email_lines[0].internal_account_number,
# 'tracking_no': email_lines[0].tracking_no,
# 'customer_ref': email_lines[0].customer_ref,
# }
# # 根据email_lines生成报关单明细
# cdo_lines = []
# for email_line in email_lines:
# cdo_line_dict = {
# 'gross_weight': email_line.gross_weight,
# 'net_weight': email_line.net_weight,
# 'currency': email_line.currency,
# 'sku_number': email_line.sku_number,
# 'item_description': email_line.item_description_translate or email_line.item_description,
# 'item_hs_code': email_line.item_hs_code,
# 'item_quantity': email_line.item_quantity,
# 'unit_value': email_line.unit_value,
# 'total_value': email_line.total_value,
# 'vat': email_line.vat,
# 'online_selling_place': email_line.online_selling_place,
# 'product_link': email_line.product_link,
# 'length': email_line.length,
# 'width': email_line.width,
# 'height': email_line.height,
# }
# cdo_lines.append((0, 0, cdo_line_dict))
# cdo_dict['cdo_line_ids'] = cdo_lines
# # 创建报关单
# self.env['cc.customers.declaration.order'].create(cdo_dict)
# # 返回一个action,显示报关单
# return {
# 'name': 'Customers Declaration Order',
# 'type': 'ir.actions.act_window',
# 'res_model': 'cc.customers.declaration.order',
# 'view_mode': 'tree,form',
# 'domain': [('bl_id', '=', self.id)],
# }
# 添加计算方法,根据bl_line_ids计算bl_total_line,bl_total_qty,bl_total_amount # 添加计算方法,根据bl_line_ids计算bl_total_line,bl_total_qty,bl_total_amount
@api.depends('ship_package_ids', 'big_package_ids', 'good_ids', 'ship_package_ids.is_cancel', @api.depends('ship_package_ids', 'big_package_ids', 'good_ids', 'ship_package_ids.is_cancel',
'big_package_ids.is_cancel', 'good_ids.is_cancel', 'ship_package_ids.total_value') 'big_package_ids.is_cancel', 'good_ids.is_cancel', 'ship_package_ids.total_value')
......
...@@ -180,6 +180,7 @@ ...@@ -180,6 +180,7 @@
<field name="receiver_add_1" string="ADD 1"/> <field name="receiver_add_1" string="ADD 1"/>
<field name="receiver_add_2" string="ADD 2"/> <field name="receiver_add_2" string="ADD 2"/>
<field name="receiver_add_3" string="ADD 3"/> <field name="receiver_add_3" string="ADD 3"/>
<field name="receiver_detailed_address" string="Detailed Address"/>
</group> </group>
</page> </page>
<page string="Other"> <page string="Other">
......
...@@ -26,15 +26,18 @@ def check_customer(func): ...@@ -26,15 +26,18 @@ def check_customer(func):
request_time = datetime.utcnow() request_time = datetime.utcnow()
current_timestamp = int(time.time()) current_timestamp = int(time.time())
res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S") res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S")
res['requestID'] = request_time.strftime("%Y%m%d%H%M%S") + str(current_timestamp) res['requestID'] = request_time.strftime(
"%Y%m%d%H%M%S") + str(current_timestamp)
# 获取传输的值 # 获取传输的值
sign = kw['sign'] if kw.get('sign') else "" sign = kw['sign'] if kw.get('sign') else ""
param_json_str = kw['param_json'] if kw.get('param_json') else "{}" param_json_str = kw['param_json'] if kw.get('param_json') else "{}"
timestamp = kw['timestamp'] if kw.get('timestamp') else "" timestamp = kw['timestamp'] if kw.get('timestamp') else ""
version = kw['version'] if kw.get('version') else "" version = kw['version'] if kw.get('version') else ""
app_key = kw['app_key'] if kw.get('app_key') else "" app_key = kw['app_key'] if kw.get('app_key') else ""
app_secret = request.env["ir.config_parameter"].sudo().get_param('tt_app_secret') or '' app_secret = request.env["ir.config_parameter"].sudo(
customer_id = request.env["ir.config_parameter"].sudo().get_param('tt_customer_id') or False ).get_param('tt_app_secret') or ''
customer_id = request.env["ir.config_parameter"].sudo(
).get_param('tt_customer_id') or False
kw['customer_id'] = customer_id kw['customer_id'] = customer_id
_logger.info('request_data:%s' % kw) _logger.info('request_data:%s' % kw)
if kw.get('param_json'): if kw.get('param_json'):
...@@ -96,7 +99,8 @@ class TTApi(http.Controller): ...@@ -96,7 +99,8 @@ class TTApi(http.Controller):
request_time = datetime.utcnow() request_time = datetime.utcnow()
timestamp = int(time.time()) timestamp = int(time.time())
res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S") res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S")
res['requestID'] = request_time.strftime("%Y%m%d%H%M%S") + str(timestamp) res['requestID'] = request_time.strftime(
"%Y%m%d%H%M%S") + str(timestamp)
logistic_order_no = '' logistic_order_no = ''
data_text = '' data_text = ''
try: try:
...@@ -118,38 +122,57 @@ class TTApi(http.Controller): ...@@ -118,38 +122,57 @@ class TTApi(http.Controller):
if (ship_pachage_obj and (not ship_pachage_obj.bl_id or if (ship_pachage_obj and (not ship_pachage_obj.bl_id or
ship_pachage_obj.bl_id.is_cancel)) or not ship_pachage_obj: ship_pachage_obj.bl_id.is_cancel)) or not ship_pachage_obj:
ship_package = dict(is_cancel=False, cancel_reason=False, ship_package = dict(is_cancel=False, cancel_reason=False,
logistic_order_no=package.get('provider_order_id'), logistic_order_no=package.get(
tracking_no=package.get('tracking_no'), 'provider_order_id'),
customer_ref=package.get('declaretion_bill_id'), tracking_no=package.get(
'tracking_no'),
customer_ref=package.get(
'declaretion_bill_id'),
internal_account_number="", internal_account_number="",
user_track_note=package.get('remark'), user_track_note=package.get(
company_code=package.get('entity_code'), 'remark'),
trade_no=package.get('order_no'), company_code=package.get(
'entity_code'),
trade_no=package.get(
'order_no'),
# 需要将时间搓转换为时间 # 需要将时间搓转换为时间
operation_time=fields.Datetime.from_string(datetime.fromtimestamp( operation_time=fields.Datetime.from_string(datetime.fromtimestamp(
int(package.get('operate_time')) / 1000).strftime( int(package.get('operate_time')) / 1000).strftime(
'%Y-%m-%d %H:%M:%S')), '%Y-%m-%d %H:%M:%S')),
big_package_no=package.get('big_bag_no'), big_package_no=package.get(
container_no=package.get('container_no'), 'big_bag_no'),
buyer_region=package.get('buyer_region'), container_no=package.get(
next_provider_name=package.get('next_provider_name'), 'container_no'),
sender_name=package.get('sender_info').get('name'), buyer_region=package.get(
sender_vat_no=package.get('sender_info').get('shipping_tax_id'), 'buyer_region'),
sender_phone=package.get('sender_info').get('phone'), next_provider_name=package.get(
'next_provider_name'),
sender_name=package.get(
'sender_info').get('name'),
sender_vat_no=package.get(
'sender_info').get('shipping_tax_id'),
sender_phone=package.get(
'sender_info').get('phone'),
sender_country=package.get('sender_info').get('address').get( sender_country=package.get('sender_info').get('address').get(
'address_l0'), 'address_l0'),
sender_state=package.get('sender_info').get('address').get( sender_state=package.get('sender_info').get('address').get(
'address_l1'), 'address_l1'),
sender_city=package.get('sender_info').get('address').get('address_l2'), sender_city=package.get('sender_info').get(
'address').get('address_l2'),
sender_add_1=package.get('sender_info').get('address').get( sender_add_1=package.get('sender_info').get('address').get(
'address_l3'), 'address_l3'),
sender_add_2=package.get('sender_info').get('address').get( sender_add_2=package.get('sender_info').get('address').get(
'address_l4'), 'address_l4'),
sender_add_3=package.get('sender_info').get('address').get('details'), sender_add_3=package.get('sender_info').get(
sender_postcode=package.get('sender_info').get('postcode'), 'address').get('details'),
receiver_name=package.get('receiver_info').get('name'), sender_postcode=package.get(
receiver_phone=package.get('receiver_info').get('phone'), 'sender_info').get('postcode'),
receiver_postcode=package.get('receiver_info').get('postcode'), receiver_name=package.get(
'receiver_info').get('name'),
receiver_phone=package.get(
'receiver_info').get('phone'),
receiver_postcode=package.get(
'receiver_info').get('postcode'),
receiver_add_1=package.get('receiver_info').get('address').get( receiver_add_1=package.get('receiver_info').get('address').get(
'address_l0'), 'address_l0'),
receiver_add_2=package.get('receiver_info').get('address').get( receiver_add_2=package.get('receiver_info').get('address').get(
...@@ -160,11 +183,18 @@ class TTApi(http.Controller): ...@@ -160,11 +183,18 @@ class TTApi(http.Controller):
'address_l3'), 'address_l3'),
receiver_county=package.get('receiver_info').get('address').get( receiver_county=package.get('receiver_info').get('address').get(
'address_l4'), 'address_l4'),
receiver_vat_no=package.get('receiver_info').get('tax_id'), receiver_detailed_address=package.get(
currency=package.get('currency'), 'receiver_info').get('address').get('details'),
gross_weight=package.get('package').get('real_weight'), receiver_vat_no=package.get(
weight_unit=package.get('package').get('weight_unit'), 'receiver_info').get('tax_id'),
total_value=package.get('value').get('goods_value'), currency=package.get(
'currency'),
gross_weight=package.get(
'package').get('real_weight'),
weight_unit=package.get(
'package').get('weight_unit'),
total_value=package.get(
'value').get('goods_value'),
customer_id=request.env["ir.config_parameter"].sudo().get_param( customer_id=request.env["ir.config_parameter"].sudo().get_param(
'tt_customer_id') or False) # 增加客户信息 'tt_customer_id') or False) # 增加客户信息
# 生成package good # 生成package good
...@@ -178,41 +208,61 @@ class TTApi(http.Controller): ...@@ -178,41 +208,61 @@ class TTApi(http.Controller):
package_good_obj = request.env['cc.package.good'].sudo().search( package_good_obj = request.env['cc.package.good'].sudo().search(
[('item_id', '=', item_id), ('create_date', '>=', date)]) [('item_id', '=', item_id), ('create_date', '>=', date)])
package_good = dict(item_id=item_id, package_good = dict(item_id=item_id,
sku_id=item.get('sku_id'), sku_id=item.get(
item_name_cn=item.get('product_name_cn'), 'sku_id'),
item_name_en=item.get('product_name'), item_name_cn=item.get(
export_hs_code=item.get('export_hscode'), 'product_name_cn'),
import_hs_code=item.get('import_hscode'), item_name_en=item.get(
weight=item.get('weight'), 'product_name'),
quantity=item.get('qty'), export_hs_code=item.get(
quantity_unit=item.get('unit'), 'export_hscode'),
declare_price=item.get('unit_price'), import_hs_code=item.get(
freight=item.get('shipping_fee'), 'import_hscode'),
cod_amount=item.get('cod_fee'), weight=item.get(
vat_rate=item.get('vat_rate'), 'weight'),
item_vat=item.get('vat_fee'), quantity=item.get(
origin_country=item.get('origin_country'), 'qty'),
item_type=item.get('item_type'), quantity_unit=item.get(
item_total_price=item.get('unit_price'), 'unit'),
item_link=item.get('item_url'), declare_price=item.get(
'unit_price'),
freight=item.get(
'shipping_fee'),
cod_amount=item.get(
'cod_fee'),
vat_rate=item.get(
'vat_rate'),
item_vat=item.get(
'vat_fee'),
origin_country=item.get(
'origin_country'),
item_type=item.get(
'item_type'),
item_total_price=item.get(
'unit_price'),
item_link=item.get(
'item_url'),
item_tax_status=item.get('tax_mark')) item_tax_status=item.get('tax_mark'))
# _logger.info('package_good:%s' % package_good) # _logger.info('package_good:%s' % package_good)
if package_good: if package_good:
package_vals.append((0, 0, package_good)) package_vals.append(
(0, 0, package_good))
# _logger.info('package_vals:%s' % package_vals) # _logger.info('package_vals:%s' % package_vals)
if package_vals and len(package_vals) > 0: if package_vals and len(package_vals) > 0:
ship_package['good_ids'] = package_vals ship_package['good_ids'] = package_vals
if not ship_pachage_obj: if not ship_pachage_obj:
# 用ship_package生成cc.ship.package # 用ship_package生成cc.ship.package
request.env['cc.ship.package'].sudo().create(ship_package) request.env['cc.ship.package'].sudo().create(
ship_package)
else: else:
good_ids = ship_pachage_obj.good_ids good_ids = ship_pachage_obj.good_ids
where_sql = "" if len(good_ids) <= 0 else ( where_sql = "" if len(good_ids) <= 0 else (
"where id=%s" % good_ids[0].id if len( "where id=%s" % good_ids[0].id if len(
good_ids) == 1 else "where id in {0}".format(tuple( good_ids) == 1 else "where id in {0}".format(tuple(
good_ids.ids))) good_ids.ids)))
if where_sql and len(good_ids) > 0: if where_sql and len(good_ids) > 0:
good_del_sql = "delete from cc_package_good {0}".format(where_sql) good_del_sql = "delete from cc_package_good {0}".format(
where_sql)
request._cr.execute(good_del_sql) request._cr.execute(good_del_sql)
request._cr.commit() request._cr.commit()
# for good in ship_pachage_obj.good_ids: # for good in ship_pachage_obj.good_ids:
...@@ -224,9 +274,12 @@ class TTApi(http.Controller): ...@@ -224,9 +274,12 @@ class TTApi(http.Controller):
request._cr.commit() request._cr.commit()
except Exception as e_package: except Exception as e_package:
res['data']['all_result'] = False res['data']['all_result'] = False
res['data']['failed_provider_order_ids'].append(package.get('provider_order_id')) res['data']['failed_provider_order_ids'].append(
res['data']['err_msg'].update({package.get('provider_order_id'): str(e_package)}) package.get('provider_order_id'))
_logger.error('package_declare error:%s' % str(e_package)) res['data']['err_msg'].update(
{package.get('provider_order_id'): str(e_package)})
_logger.error('package_declare error:%s' %
str(e_package))
request._cr.rollback() request._cr.rollback()
except Exception as e: except Exception as e:
...@@ -252,7 +305,8 @@ class TTApi(http.Controller): ...@@ -252,7 +305,8 @@ class TTApi(http.Controller):
request_time = datetime.utcnow() request_time = datetime.utcnow()
timestamp = int(time.time()) timestamp = int(time.time())
res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S") res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S")
res['requestID'] = request_time.strftime("%Y%m%d%H%M%S") + str(timestamp) res['requestID'] = request_time.strftime(
"%Y%m%d%H%M%S") + str(timestamp)
data_text = '' data_text = ''
master_waybill_no = '' master_waybill_no = ''
try: try:
...@@ -268,13 +322,18 @@ class TTApi(http.Controller): ...@@ -268,13 +322,18 @@ class TTApi(http.Controller):
customs_bl_no=kws.get('customs_waybill_id'), customs_bl_no=kws.get('customs_waybill_id'),
trade_type=kws.get('trade_type'), trade_type=kws.get('trade_type'),
big_package_qty=kws.get('big_bag_quantity'), big_package_qty=kws.get('big_bag_quantity'),
big_package_sell_country=kws.get('buyer_region'), big_package_sell_country=kws.get(
'buyer_region'),
declare_type=kws.get('declare_type'), declare_type=kws.get('declare_type'),
transport_tool_code=mawb_info.get('transport_code'), transport_tool_code=mawb_info.get(
transport_tool_name=mawb_info.get('transport_name'), 'transport_code'),
start_port_code=mawb_info.get('depart_port_code'), transport_tool_name=mawb_info.get(
'transport_name'),
start_port_code=mawb_info.get(
'depart_port_code'),
end_port_code=mawb_info.get('arrive_port_code'), end_port_code=mawb_info.get('arrive_port_code'),
billing_weight=mawb_info.get('chargable_weight'), billing_weight=mawb_info.get(
'chargable_weight'),
actual_weight=mawb_info.get('real_weight'), actual_weight=mawb_info.get('real_weight'),
etd=mawb_info.get('etd'), etd=mawb_info.get('etd'),
eta=mawb_info.get('eta'), eta=mawb_info.get('eta'),
...@@ -306,7 +365,8 @@ class TTApi(http.Controller): ...@@ -306,7 +365,8 @@ class TTApi(http.Controller):
file_name_arr = ['主单', '货站提货POD', file_name_arr = ['主单', '货站提货POD',
'Manifest格式和数据(cvs/excel格式,系统目前不支持,线下提供或保留现有方式)', 'Manifest格式和数据(cvs/excel格式,系统目前不支持,线下提供或保留现有方式)',
'海关CDS申报单(import和授权方式检查拉齐等)', '尾程交接POD(待大包数量和箱号)'] '海关CDS申报单(import和授权方式检查拉齐等)', '尾程交接POD(待大包数量和箱号)']
request.env['cc.clearance.file'].sudo().create_clearance_file_func(file_name_arr, bl.id) request.env['cc.clearance.file'].sudo(
).create_clearance_file_func(file_name_arr, bl.id)
else: else:
if declare_type == 'update' and bl.state == 'draft': if declare_type == 'update' and bl.state == 'draft':
bl.write(bl_vals) bl.write(bl_vals)
...@@ -320,9 +380,10 @@ class TTApi(http.Controller): ...@@ -320,9 +380,10 @@ class TTApi(http.Controller):
where_sql = "" if len(big_package_ids) <= 0 else ( where_sql = "" if len(big_package_ids) <= 0 else (
"where id=%s" % big_package_ids[0].id if len( "where id=%s" % big_package_ids[0].id if len(
big_package_ids) == 1 else "where id in {0}".format(tuple( big_package_ids) == 1 else "where id in {0}".format(tuple(
big_package_ids.ids))) big_package_ids.ids)))
if where_sql and len(big_package_ids) > 0: if where_sql and len(big_package_ids) > 0:
del_sql = "delete from cc_big_package {0}".format(where_sql) del_sql = "delete from cc_big_package {0}".format(
where_sql)
request._cr.execute(del_sql) request._cr.execute(del_sql)
request._cr.commit() request._cr.commit()
# for package in bl.big_package_ids: # for package in bl.big_package_ids:
...@@ -336,18 +397,22 @@ class TTApi(http.Controller): ...@@ -336,18 +397,22 @@ class TTApi(http.Controller):
big_bag_no = big_bag.get('big_bag_no') big_bag_no = big_bag.get('big_bag_no')
# 检查big_bag_no是否已经存在 # 检查big_bag_no是否已经存在
big_package_vals = dict(bl_id=bl.id, big_package_vals = dict(bl_id=bl.id,
big_package_no=big_bag.get('big_bag_no'), big_package_no=big_bag.get(
'big_bag_no'),
next_provider_name=big_bag.get('next_provider_name')) next_provider_name=big_bag.get('next_provider_name'))
big_package = request.env['cc.big.package'].sudo().search( big_package = request.env['cc.big.package'].sudo().search(
[('big_package_no', '=', big_bag_no), ('create_date', '>=', date)], limit=1) [('big_package_no', '=', big_bag_no), ('create_date', '>=', date)], limit=1)
if not big_package: if not big_package:
big_package = request.env['cc.big.package'].sudo().create(big_package_vals) big_package = request.env['cc.big.package'].sudo().create(
big_package_vals)
else: else:
big_package.write(big_package_vals) big_package.write(big_package_vals)
# 生成cc.ship.package # 生成cc.ship.package
package_list = big_bag.get('package_list') # 大包下的小包 package_list = big_bag.get(
'package_list') # 大包下的小包
if package_list and len(package_list) > 0: if package_list and len(package_list) > 0:
package_ids = [package.get('provider_order_id') for package in package_list] package_ids = [package.get(
'provider_order_id') for package in package_list]
ship_packages = request.env['cc.ship.package'].sudo().search( ship_packages = request.env['cc.ship.package'].sudo().search(
[('logistic_order_no', 'in', package_ids), ('create_date', '>=', date)]) [('logistic_order_no', 'in', package_ids), ('create_date', '>=', date)])
if ship_packages and len(ship_packages) > 0: if ship_packages and len(ship_packages) > 0:
...@@ -362,7 +427,8 @@ class TTApi(http.Controller): ...@@ -362,7 +427,8 @@ class TTApi(http.Controller):
diff_ids = package_ids - ship_package_ids diff_ids = package_ids - ship_package_ids
_logger.info('diff_ids:%s' % diff_ids) _logger.info('diff_ids:%s' % diff_ids)
else: else:
res['msg'] = 'Big bag [%s] not include any package. ' % big_bag.get('big_bag_no') res['msg'] = 'Big bag [%s] not include any package. ' % big_bag.get(
'big_bag_no')
else: else:
res['msg'] = 'Big bag list is empty.' res['msg'] = 'Big bag list is empty.'
except Exception as e: except Exception as e:
...@@ -390,7 +456,8 @@ class TTApi(http.Controller): ...@@ -390,7 +456,8 @@ class TTApi(http.Controller):
request_time = datetime.utcnow() request_time = datetime.utcnow()
timestamp = int(time.time()) timestamp = int(time.time())
res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S") res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S")
res['requestID'] = request_time.strftime("%Y%m%d%H%M%S") + str(timestamp) res['requestID'] = request_time.strftime(
"%Y%m%d%H%M%S") + str(timestamp)
master_waybill_no = '' master_waybill_no = ''
data_text = '' data_text = ''
try: try:
...@@ -422,20 +489,23 @@ class TTApi(http.Controller): ...@@ -422,20 +489,23 @@ class TTApi(http.Controller):
img_file_code = kws.get('img_detail').get('img_file_code') img_file_code = kws.get('img_detail').get('img_file_code')
img_file_type = kws.get('img_detail').get('img_file_type') img_file_type = kws.get('img_detail').get('img_file_type')
file_name = '%s.%s' % (kws.get('master_waybill_no'), img_file_type) file_name = '%s.%s' % (
kws.get('master_waybill_no'), img_file_type)
img_file_vals = dict(name=file_name, img_file_vals = dict(name=file_name,
res_model='cc.bl', res_model='cc.bl',
res_id=bl.id, res_id=bl.id,
type='binary', type='binary',
datas=img_file_code, datas=img_file_code,
mimetype='image/%s' % img_file_type) mimetype='image/%s' % img_file_type)
img_file = request.env['ir.attachment'].sudo().create(img_file_vals) img_file = request.env['ir.attachment'].sudo().create(
img_file_vals)
if img_file: if img_file:
vals['bl_attachment_ids'] = [(6, 0, img_file.ids)] vals['bl_attachment_ids'] = [(6, 0, img_file.ids)]
bl.write(vals) bl.write(vals)
else: else:
res['code'] = 1009 res['code'] = 1009
res['msg'] = 'master_waybill_no [%s] not found.' % kws.get('master_waybill_no') res['msg'] = 'master_waybill_no [%s] not found.' % kws.get(
'master_waybill_no')
except Exception as e: except Exception as e:
res['code'] = 5000 res['code'] = 5000
...@@ -462,7 +532,8 @@ class TTApi(http.Controller): ...@@ -462,7 +532,8 @@ class TTApi(http.Controller):
request_time = datetime.utcnow() request_time = datetime.utcnow()
timestamp = int(time.time()) timestamp = int(time.time())
res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S") res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S")
res['requestID'] = request_time.strftime("%Y%m%d%H%M%S") + str(timestamp) res['requestID'] = request_time.strftime(
"%Y%m%d%H%M%S") + str(timestamp)
logistic_order_no = '' logistic_order_no = ''
data_text = '' data_text = ''
try: try:
...@@ -486,13 +557,15 @@ class TTApi(http.Controller): ...@@ -486,13 +557,15 @@ class TTApi(http.Controller):
# 后续需要补充提单是否允许取消小包的逻辑的调用. # 后续需要补充提单是否允许取消小包的逻辑的调用.
allow_cancel, not_msg = ship_package.check_cancel() allow_cancel, not_msg = ship_package.check_cancel()
if allow_cancel: if allow_cancel:
ship_package.action_cancel(cancel_reason=kws.get('remark')) ship_package.action_cancel(
cancel_reason=kws.get('remark'))
else: else:
res['code'] = 1003103 res['code'] = 1003103
res['msg'] = not_msg res['msg'] = not_msg
else: else:
res['code'] = 101011 res['code'] = 101011
res['msg'] = 'provider_order_id [%s] not found.' % kws.get('provider_order_id') res['msg'] = 'provider_order_id [%s] not found.' % kws.get(
'provider_order_id')
except Exception as e: except Exception as e:
res['code'] = 5000 res['code'] = 5000
...@@ -519,7 +592,8 @@ class TTApi(http.Controller): ...@@ -519,7 +592,8 @@ class TTApi(http.Controller):
request_time = datetime.utcnow() request_time = datetime.utcnow()
timestamp = int(time.time()) timestamp = int(time.time())
res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S") res['ts'] = request_time.strftime("%Y-%m-%d %H:%M:%S")
res['requestID'] = request_time.strftime("%Y%m%d%H%M%S") + str(timestamp) res['requestID'] = request_time.strftime(
"%Y%m%d%H%M%S") + str(timestamp)
master_waybill_no = '' master_waybill_no = ''
data_text = '' data_text = ''
try: try:
...@@ -550,8 +624,8 @@ class TTApi(http.Controller): ...@@ -550,8 +624,8 @@ class TTApi(http.Controller):
res['msg'] = not_msg res['msg'] = not_msg
else: else:
res['code'] = 101011 res['code'] = 101011
res['msg'] = 'master_waybill_no [%s] not found.' % kws.get('master_waybill_no') res['msg'] = 'master_waybill_no [%s] not found.' % kws.get(
'master_waybill_no')
except Exception as e: except Exception as e:
res['code'] = 5000 res['code'] = 5000
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论