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

pda扫码判断提单是否已有扫码记录且是否超时间

上级 ef681cb0
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json import json
import logging import logging
from datetime import datetime
from odoo import http, exceptions from odoo import http, exceptions
# from odoo.addons.queue_job import job # from odoo.addons.queue_job import job
from odoo.http import request from odoo.http import request
from odoo import fields
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
...@@ -163,7 +163,7 @@ class OrderController(http.Controller): ...@@ -163,7 +163,7 @@ class OrderController(http.Controller):
res['state'] = 400 res['state'] = 400
res['message'] = time_check_result['message'] res['message'] = time_check_result['message']
return res return res
# 继续原有的处理逻辑... # 继续原有的处理逻辑...
ship_packages = [] ship_packages = []
...@@ -313,10 +313,11 @@ class OrderController(http.Controller): ...@@ -313,10 +313,11 @@ class OrderController(http.Controller):
} }
res['message'] = null_msg_dic[pda_lang] res['message'] = null_msg_dic[pda_lang]
except Exception as e: except Exception as e:
logging.info('update_big_package_tally_detail error:%s' % e) error = str(e)
logging.info('update_big_package_tally_detail error:%s' % error)
exceptions_msg_dic = { exceptions_msg_dic = {
'en': 'System parsing error, the reason for the error is %s' % e, 'en': 'System parsing error, the reason for the error is %s' % error,
'zh': '系统解析错误,错误原因是%s' % e 'zh': '系统解析错误,错误原因是%s' % error
} }
res['message'] = exceptions_msg_dic[pda_lang] res['message'] = exceptions_msg_dic[pda_lang]
# 创建失败的pda扫码记录 # 创建失败的pda扫码记录
...@@ -327,9 +328,10 @@ class OrderController(http.Controller): ...@@ -327,9 +328,10 @@ class OrderController(http.Controller):
bill_number=bl_obj.bl_no, bill_number=bl_obj.bl_no,
transfer_number=bl_obj.transfer_bl_no, transfer_number=bl_obj.transfer_bl_no,
state='failed', state='failed',
bl_id=bl_obj.id) bl_id=bl_obj.id, failure_reason=error)
else: else:
request.env['pda.scan.record'].sudo().create_scan_record(operation, action_type, '', '', 'failed') request.env['pda.scan.record'].sudo().create_scan_record(operation, action_type, '', '', 'failed',
failure_reason=error)
logging.info('res:%s' % res) logging.info('res:%s' % res)
return res return res
...@@ -349,6 +351,31 @@ class OrderController(http.Controller): ...@@ -349,6 +351,31 @@ class OrderController(http.Controller):
try: try:
logging.info('update_pro_big_package_tally_detail kw:%s' % kwargs) logging.info('update_pro_big_package_tally_detail kw:%s' % kwargs)
if action_type and (kwargs.get('big_package_arr') or kwargs.get('ship_package_arr')): if action_type and (kwargs.get('big_package_arr') or kwargs.get('ship_package_arr')):
# 按尾程交货时,检查时间风险 大包或小包对应的提单是否已存在成功扫码记录
if action_type == 'handover':
all_bl_ids_in_request = set()
if kwargs.get('ship_package_arr'):
for pkg_item in kwargs['ship_package_arr']:
pkg_obj = request.env['cc.ship.package'].sudo().search(
[('logistic_order_no', '=', pkg_item.get('logistic_order_no'))], limit=1)
if pkg_obj and pkg_obj.bl_id:
all_bl_ids_in_request.add(pkg_obj.bl_id.id)
if kwargs.get('big_package_arr'):
for pkg_item in kwargs['big_package_arr']:
pkg_obj = request.env['cc.big.package'].sudo().search(
[('big_package_no', '=', pkg_item.get('big_package_no'))], limit=1)
if pkg_obj and pkg_obj.bl_id:
all_bl_ids_in_request.add(pkg_obj.bl_id.id)
if all_bl_ids_in_request:
for bl_id in all_bl_ids_in_request:
bl_obj = request.env['cc.bl'].sudo().browse(bl_id)
time_check_result = self._check_delivery_time_risk(bl_obj, pda_lang, 'tail_tally')
if time_check_result['has_risk']:
res['state'] = 400
res['message'] = time_check_result['message']
return res
logging.info(f"all_bl_ids_in_request: {all_bl_ids_in_request}")
# return res
big_package_exception_arr = {} big_package_exception_arr = {}
ship_package_exception_arr = {} ship_package_exception_arr = {}
...@@ -408,20 +435,6 @@ class OrderController(http.Controller): ...@@ -408,20 +435,6 @@ class OrderController(http.Controller):
error_no_set.add(package_no) error_no_set.add(package_no)
return error_no_set return error_no_set
# 按尾程交货时,检查时间风险
if action_type == 'handover' and ship_packages:
# 获取所有相关的提单对象
bl_ids = list(set([ship_package.get('bl_id') for ship_package in ship_packages]))
bl_objs = request.env['cc.bl'].sudo().search([('id', 'in', bl_ids)])
# 对每个提单进行时间风险检查
for bl_obj in bl_objs:
time_check_result = self._check_delivery_time_risk(bl_obj, pda_lang)
if time_check_result['has_risk']:
res['state'] = 400
res['message'] = time_check_result['message']
return res
# 处理小包、大包 # 处理小包、大包
if kwargs.get('ship_package_arr'): if kwargs.get('ship_package_arr'):
error_no_arr = process_packages( error_no_arr = process_packages(
...@@ -465,26 +478,23 @@ class OrderController(http.Controller): ...@@ -465,26 +478,23 @@ class OrderController(http.Controller):
email_language=lang) email_language=lang)
ship_wizard_obj.confirm() # 发送邮件 ship_wizard_obj.confirm() # 发送邮件
res['state'] = 200 res['state'] = 200
logging.info( logging.info('update_pro_big_package_tally_detail ship_packages:%s' % len(ship_packages))
'update_big_package_tally_detail ship_packages:%s' % len(ship_packages))
# 有小包 就更新小包状态和同步 # 有小包 就更新小包状态和同步
if ship_packages: if ship_packages:
# 在这里创建成功的pda扫码记录 # 在这里创建成功的pda扫码记录
bl_obj = request.env['cc.bl'].sudo().search( bl_obj = request.env['cc.bl'].sudo().search(
[('id', 'in', [ship_package.get('bl_id') for ship_package in ship_packages])], limit=1) [('id', 'in', [ship_package.get('bl_id') for ship_package in ship_packages])])
if bl_obj: logging.info(f"bl_obj: {bl_obj}")
for bl in bl_obj: for bl in bl_obj:
request.env['pda.scan.record'].sudo().create_scan_record( request.env['pda.scan.record'].sudo().create_scan_record(
operation=operation, operation=operation,
record_type=action_type, record_type=action_type,
bill_number=bl.bl_no, bill_number=bl.bl_no,
transfer_number=bl.transfer_bl_no, transfer_number=bl.transfer_bl_no,
state='success', state='success',
bl_id=bl.id) bl_id=bl.id)
redis_conn = request.env['common.common'].sudo().get_redis() redis_conn = request.env['common.common'].sudo().get_redis()
if redis_conn and redis_conn != 'no': if redis_conn and redis_conn != 'no':
# redis_conn.lpush('push_ship_package_state', json.dumps(
# {'bl_id': bl_obj.id, 'ship_package_ids': ship_package_ids}))
bl_ids = [ship_package.get('bl_id') for ship_package in ship_packages] bl_ids = [ship_package.get('bl_id') for ship_package in ship_packages]
logging.info('bl_ids:%s' % bl_ids) logging.info('bl_ids:%s' % bl_ids)
redis_conn.lpush('mail_push_package_list', json.dumps( redis_conn.lpush('mail_push_package_list', json.dumps(
...@@ -498,10 +508,11 @@ class OrderController(http.Controller): ...@@ -498,10 +508,11 @@ class OrderController(http.Controller):
} }
res['message'] = null_msg_dic[pda_lang] res['message'] = null_msg_dic[pda_lang]
except Exception as e: except Exception as e:
logging.info('update_pro_big_package_tally_detail error:%s' % e) error = str(e)
logging.info('update_pro_big_package_tally_detail error:%s' % error)
exceptions_msg_dic = { exceptions_msg_dic = {
'en': 'System parsing error, the reason for the error is %s' % e, 'en': 'System parsing error, the reason for the error is %s' % error,
'zh': '系统解析错误,错误原因是%s' % e 'zh': '系统解析错误,错误原因是%s' % error
} }
res['message'] = exceptions_msg_dic[pda_lang] res['message'] = exceptions_msg_dic[pda_lang]
# 在这里创建失败的pda扫码记录 # 在这里创建失败的pda扫码记录
...@@ -516,9 +527,11 @@ class OrderController(http.Controller): ...@@ -516,9 +527,11 @@ class OrderController(http.Controller):
bill_number=bl.bl_no, bill_number=bl.bl_no,
transfer_number=bl.transfer_bl_no, transfer_number=bl.transfer_bl_no,
state='failed', state='failed',
bl_id=bl.id) bl_id=bl.id,
failure_reason=error)
else: else:
request.env['pda.scan.record'].sudo().create_scan_record(operation, action_type, '', '', 'failed') request.env['pda.scan.record'].sudo().create_scan_record(operation, action_type, '', '', 'failed',
failure_reason=error)
logging.info('res:%s' % res) logging.info('res:%s' % res)
return res return res
...@@ -629,58 +642,51 @@ class OrderController(http.Controller): ...@@ -629,58 +642,51 @@ class OrderController(http.Controller):
provider_info_arr.sort(key=lambda x: x.get('name', '')) provider_info_arr.sort(key=lambda x: x.get('name', ''))
return {'provider_info_arr': provider_info_arr, 'state': 200} return {'provider_info_arr': provider_info_arr, 'state': 200}
def _check_delivery_time_risk(self, bl_obj, pda_lang='zh'): def _check_delivery_time_risk(self, bl_obj, pda_lang='zh', operation='bill_tally'):
""" """
检查提单交货时间倒序风险 检查提单交货时间倒序风险
:param bl_obj: 提单对象 :param bl_obj: 提单对象
:param pda_lang: 语言设置 :param pda_lang: 语言设置
:return: 检查结果字典 :return: 检查结果字典
""" """
try: # 获取配置的交货操作晚于提货操作的时间参数(分钟)
# 获取配置的交货操作晚于提货操作的时间参数(分钟) config_param = request.env['ir.config_parameter'].sudo().get_param(
config_param = request.env['ir.config_parameter'].sudo().get_param( 'delivery_time', '80' # 使用现有的delivery_time参数,默认80分钟
'delivery_time', '80' # 使用现有的delivery_time参数,默认80分钟 )
) allowed_minutes = int(config_param)
allowed_minutes = int(config_param) logging.info(f"allowed_minutes: {allowed_minutes}")
# 查找该提单的PDA扫码记录,类型为理货的
# 查找该提单的PDA扫码记录,类型为理货的 pda_records = request.env['pda.scan.record'].sudo().search([
pda_records = request.env['pda.scan.record'].sudo().search([ ('bl_id', '=', bl_obj.id),
('bl_id', '=', bl_obj.id), ('operation', '=', operation), # 理货类型
('operation', '=', 'bill_tally'), # 理货类型 ('state', '=', 'success') # 成功状态
('state', '=', 'success') # 成功状态 ], order='create_date desc', limit=1)
], order='create_date desc', limit=1)
if pda_records:
if pda_records: latest_tally_record = pda_records[0]
latest_tally_record = pda_records[0] current_time = request.env['common.common'].sudo().get_utc_time(datetime.now())
current_time = fields.Datetime.now() # Ensure create_date is also timezone-aware (UTC)
time_diff = (current_time - latest_tally_record.create_date).total_seconds() / 60 create_date = latest_tally_record.create_date
logging.info(f"current_time: {current_time}, latest_tally_record.create_date: {create_date}")
# 如果时间差小于等于配置的参数,则存在风险 time_diff = (datetime.strptime(current_time, '%Y-%m-%d %H:%M:%S') - create_date).total_seconds() / 60
if time_diff <= allowed_minutes: logging.info(f"time_diff: {time_diff}")
if pda_lang == 'en': # 如果时间差小于等于配置的参数,则存在风险
message = f"The bill of lading has not reached the delivery time, and there is a risk of flashback. Please scan the code after {allowed_minutes} minutes." if time_diff <= allowed_minutes:
else: if pda_lang == 'en':
message = f"该提单未到交货时间,有风险产生倒叙,请间隔{allowed_minutes}分钟后再扫码;" message = f"The bill of lading has not reached the delivery time, and there is a risk of flashback. Please scan the code after {allowed_minutes} minutes."
else:
return { message = f"该提单未到交货时间,有风险产生倒叙,请间隔{allowed_minutes}分钟后再扫码;"
'has_risk': True,
'message': message, return {
'time_diff': time_diff, 'has_risk': True,
'allowed_minutes': allowed_minutes 'message': message,
} 'time_diff': time_diff,
'allowed_minutes': allowed_minutes
return { }
'has_risk': False,
'message': '', return {
'time_diff': 0, 'has_risk': False,
'allowed_minutes': allowed_minutes 'message': '',
} 'time_diff': 0,
'allowed_minutes': allowed_minutes
except Exception as e: }
logging.error(f"检查交货时间风险时出错: {str(e)}")
return {
'has_risk': False,
'message': '',
'time_diff': 0,
'allowed_minutes': 0
}
...@@ -6,11 +6,11 @@ msgid "" ...@@ -6,11 +6,11 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 16.0\n" "Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-19 08:47+0000\n" "POT-Creation-Date: 2025-08-05 06:34+0000\n"
"PO-Revision-Date: 2025-03-19 16:51+0800\n" "PO-Revision-Date: 2025-08-05 14:38+0800\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: zh\n" "Language: zh_CN\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
...@@ -25,7 +25,7 @@ msgstr "<span class=\"o_stat_text\">小包</span>" ...@@ -25,7 +25,7 @@ msgstr "<span class=\"o_stat_text\">小包</span>"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_bl_view_inherit #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_bl_view_inherit
msgid "<span class=\"o_stat_text\">Ship Packages</span>" msgid "<span class=\"o_stat_text\">Ship Packages</span>"
msgstr "<span class=\"o_stat_text\">小包</span>" msgstr "Ship Package"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__api_customer #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__api_customer
...@@ -49,6 +49,11 @@ msgstr "" ...@@ -49,6 +49,11 @@ msgstr ""
msgid "AppSecret" msgid "AppSecret"
msgstr "" msgstr ""
#. module: ccs_connect_tiktok
#: model:ir.model,name:ccs_connect_tiktok.model_ir_attachment
msgid "Attachment"
msgstr "附件"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.actions.server,name:ccs_connect_tiktok.action_batch_sync_bl_status #: model:ir.actions.server,name:ccs_connect_tiktok.action_batch_sync_bl_status
msgid "Batch Sync Bill Of Loading Status" msgid "Batch Sync Bill Of Loading Status"
...@@ -69,11 +74,43 @@ msgstr "批量更新小包状态向导" ...@@ -69,11 +74,43 @@ msgstr "批量更新小包状态向导"
msgid "Big Package" msgid "Big Package"
msgstr "大包" msgstr "大包"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__bill_handover
#, python-format
msgid "Bill Handover"
msgstr "按提单交货"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__bill_number
#, python-format
msgid "Bill Number"
msgstr "提单号"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl__bl_sync_log_ids #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl__bl_sync_log_ids
msgid "Bill Of Loading Sync Logs" msgid "Bill Of Loading Sync Logs"
msgstr "关务提单状态同步日志" msgstr "关务提单状态同步日志"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__bill_tally
#, python-format
msgid "Bill Tally"
msgstr "按提单理货"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__bl_id
#, python-format
msgid "Bill of Lading"
msgstr "提单"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model,name:ccs_connect_tiktok.model_cc_bl #: model:ir.model,name:ccs_connect_tiktok.model_cc_bl
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__bl_id #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__bl_id
...@@ -134,21 +171,35 @@ msgstr "清关文件" ...@@ -134,21 +171,35 @@ msgstr "清关文件"
msgid "Config Settings" msgid "Config Settings"
msgstr "配置设置" msgstr "配置设置"
#. module: ccs_connect_tiktok
#: model_terms:ir.actions.act_window,help:ccs_connect_tiktok.action_pda_scan_record
msgid "Create your first PDA scan record"
msgstr "创建第一条PDA扫码记录"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api__create_uid #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api__create_uid
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__create_uid #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__create_uid
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__create_uid #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__create_uid
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__create_uid #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__create_uid
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__create_uid
msgid "Created by" msgid "Created by"
msgstr "" msgstr "创建人"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api__create_date #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api__create_date
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__create_date #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__create_date
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__create_date #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__create_date
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__create_date #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__create_date
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__create_date
msgid "Created on" msgid "Created on"
msgstr "" msgstr "创建时间"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#, python-format
msgid "Creation failed: %s"
msgstr "创建失败: %s"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model.fields,help:ccs_connect_tiktok.field_cc_node__interval_minutes #: model:ir.model.fields,help:ccs_connect_tiktok.field_cc_node__interval_minutes
...@@ -160,15 +211,46 @@ msgstr "前置节点之间的默认间隔时间(分钟)。" ...@@ -160,15 +211,46 @@ msgstr "前置节点之间的默认间隔时间(分钟)。"
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__display_name #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__display_name
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__display_name #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__display_name
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__display_name #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__display_name
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__display_name
msgid "Display Name" msgid "Display Name"
msgstr "" msgstr ""
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__state__failed
#, python-format
msgid "Failed"
msgstr "失败"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__failure_reason
#, python-format
msgid "Failure Reason"
msgstr "失败原因"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_cc_bl_sync_log_view #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_cc_bl_sync_log_view
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_cc_ship_package_sync_log_view #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_cc_ship_package_sync_log_view
msgid "Group By" msgid "Group By"
msgstr "分组" msgstr "分组"
#. module: ccs_connect_tiktok
#: model:ir.model,name:ccs_connect_tiktok.model_ir_http
msgid "HTTP Routing"
msgstr "HTTP 路由"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__record_type__handover
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.view_pda_scan_record_search
#, python-format
msgid "Handover"
msgstr "交货"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_batch_input_ship_package_status_wizard__ship_package_ids #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_batch_input_ship_package_status_wizard__ship_package_ids
msgid "Have Node Package" msgid "Have Node Package"
...@@ -179,6 +261,7 @@ msgstr "已更新节点" ...@@ -179,6 +261,7 @@ msgstr "已更新节点"
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__id #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__id
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__id #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__id
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__id #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__id
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__id
msgid "ID" msgid "ID"
msgstr "" msgstr ""
...@@ -198,6 +281,7 @@ msgstr "是否同步" ...@@ -198,6 +281,7 @@ msgstr "是否同步"
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log____last_update #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log____last_update
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log____last_update #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log____last_update
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log____last_update #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log____last_update
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record____last_update
msgid "Last Modified on" msgid "Last Modified on"
msgstr "" msgstr ""
...@@ -206,6 +290,7 @@ msgstr "" ...@@ -206,6 +290,7 @@ msgstr ""
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__write_uid #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__write_uid
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__write_uid #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__write_uid
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__write_uid #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__write_uid
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__write_uid
msgid "Last Updated by" msgid "Last Updated by"
msgstr "" msgstr ""
...@@ -214,6 +299,7 @@ msgstr "" ...@@ -214,6 +299,7 @@ msgstr ""
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__write_date #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__write_date
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__write_date #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl_sync_log__write_date
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__write_date #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__write_date
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__write_date
msgid "Last Updated on" msgid "Last Updated on"
msgstr "" msgstr ""
...@@ -225,8 +311,6 @@ msgstr "未同步" ...@@ -225,8 +311,6 @@ msgstr "未同步"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#. odoo-python #. odoo-python
#: code:addons/ccs_connect_tiktok/models/cc_bill_loading.py:0 #: code:addons/ccs_connect_tiktok/models/cc_bill_loading.py:0
#: code:addons/ccs_connect_tiktok/models/cc_bill_loading_new.py:0
#: code:addons/ccs_connect_tiktok/models/cc_bill_loading_old.py:0
#, python-format #, python-format
msgid "Not Sync Ship Packages" msgid "Not Sync Ship Packages"
msgstr "待同步小包" msgstr "待同步小包"
...@@ -263,6 +347,27 @@ msgstr "操作时间" ...@@ -263,6 +347,27 @@ msgstr "操作时间"
msgid "Operate User" msgid "Operate User"
msgstr "操作人" msgstr "操作人"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__operation
#, python-format
msgid "Operation"
msgstr "操作"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.actions.act_window,name:ccs_connect_tiktok.action_pda_scan_record
#: model:ir.model,name:ccs_connect_tiktok.model_pda_scan_record
#: model:ir.ui.menu,name:ccs_connect_tiktok.menu_pda_scan_record
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.view_pda_scan_record_form
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.view_pda_scan_record_search
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.view_pda_scan_record_tree
#, python-format
msgid "PDA Scan Record"
msgstr "PDA扫码记录"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_node__interval_minutes #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_node__interval_minutes
msgid "Predecessor Node Interval (Minutes)" msgid "Predecessor Node Interval (Minutes)"
...@@ -300,11 +405,34 @@ msgstr "小包" ...@@ -300,11 +405,34 @@ msgstr "小包"
msgid "Skip Check" msgid "Skip Check"
msgstr "跳过检查" msgstr "跳过检查"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/ir_attachment.py:0
#, python-format
msgid "Sorry, you are not allowed to access this document."
msgstr ""
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__state
#, python-format
msgid "State"
msgstr "状态"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_bl_view_inherit #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_bl_view_inherit
msgid "State Explain" msgid "State Explain"
msgstr "状态说明" msgstr "状态说明"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__state__success
#, python-format
msgid "Success"
msgstr "成功"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_bl_view_inherit #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_bl_view_inherit
msgid "Sync Bill Of Loading Status" msgid "Sync Bill Of Loading Status"
...@@ -377,6 +505,31 @@ msgstr "编码" ...@@ -377,6 +505,31 @@ msgstr "编码"
msgid "TK Process Code" msgid "TK Process Code"
msgstr "进度编码" msgstr "进度编码"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__tail_handover
#, python-format
msgid "Tail Handover"
msgstr "按尾程交货"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__tail_tally
#, python-format
msgid "Tail Tally"
msgstr "按尾程理货"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__record_type__tally
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.view_pda_scan_record_search
#, python-format
msgid "Tally"
msgstr "理货"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#. odoo-python #. odoo-python
#: code:addons/ccs_connect_tiktok/wizard/batch_input_ship_package_statu_wizard.py:0 #: code:addons/ccs_connect_tiktok/wizard/batch_input_ship_package_statu_wizard.py:0
...@@ -403,6 +556,22 @@ msgid "" ...@@ -403,6 +556,22 @@ msgid ""
"number!" "number!"
msgstr "单号【%s】需填写在排除单号中!" msgstr "单号【%s】需填写在排除单号中!"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__transfer_number
#, python-format
msgid "Transfer Number"
msgstr "转运单号"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__record_type
#, python-format
msgid "Type"
msgstr "类型"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.tree_cc_bl_view_inherit #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.tree_cc_bl_view_inherit
msgid "UnSync Package Count" msgid "UnSync Package Count"
...@@ -477,6 +646,11 @@ msgstr "" ...@@ -477,6 +646,11 @@ msgstr ""
msgid "业务信息" msgid "业务信息"
msgstr "" msgstr ""
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_res_config_settings__delivery_time
msgid "交货操作晚于提货操作X分钟"
msgstr ""
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__push_time #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__push_time
msgid "产生时间" msgid "产生时间"
...@@ -507,6 +681,12 @@ msgstr "" ...@@ -507,6 +681,12 @@ msgstr ""
msgid "失败原因" msgid "失败原因"
msgstr "" msgstr ""
#. module: ccs_connect_tiktok
#: model:ir.actions.server,name:ccs_connect_tiktok.cron_delete_log_ir_actions_server
#: model:ir.cron,cron_name:ccs_connect_tiktok.cron_delete_log
msgid "定时删除历史日志"
msgstr ""
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_res_config_settings__tt_customer_id #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_res_config_settings__tt_customer_id
msgid "客户" msgid "客户"
...@@ -542,6 +722,11 @@ msgstr "" ...@@ -542,6 +722,11 @@ msgstr ""
msgid "推出" msgid "推出"
msgstr "" msgstr ""
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__operator_id
msgid "操作人"
msgstr ""
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_ao_tt_api_log_view #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_ao_tt_api_log_view
msgid "昨日日志" msgid "昨日日志"
...@@ -578,93 +763,3 @@ msgstr "" ...@@ -578,93 +763,3 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_ao_tt_api_log_view #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_ao_tt_api_log_view
msgid "近7日日志" msgid "近7日日志"
msgstr "" msgstr ""
#. module: ccs_connect_tiktok
#: model:ir.model,name:ccs_connect_tiktok.model_pda_scan_record
msgid "PDA Scan Record"
msgstr "PDA扫码记录"
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__operation
msgid "Operation"
msgstr "操作"
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__record_type
msgid "Type"
msgstr "类型"
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__bill_number
msgid "Bill Number"
msgstr "提单号"
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__transfer_number
msgid "Transfer Number"
msgstr "转运单号"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__bill_tally
msgid "Bill Tally"
msgstr "按提单理货"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__tail_tally
msgid "Tail Tally"
msgstr "按尾程理货"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__bill_handover
msgid "Bill Handover"
msgstr "按提单交货"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__tail_handover
msgid "Tail Handover"
msgstr "按尾程交货"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__record_type__tally
msgid "Tally"
msgstr "理货"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__record_type__handover
msgid "Handover"
msgstr "交货"
#. module: ccs_connect_tiktok
#: model:ir.actions.act_window,name:ccs_connect_tiktok.action_pda_scan_record
#: model:ir.ui.menu,name:ccs_connect_tiktok.menu_pda_scan_record
msgid "PDA Scan Record"
msgstr "PDA扫码记录"
#. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.view_pda_scan_record_search
msgid "Tally"
msgstr "理货"
#. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.view_pda_scan_record_search
msgid "Handover"
msgstr "交货"
#. module: ccs_connect_tiktok
#: model_terms:ir.actions.act_window,help:ccs_connect_tiktok.action_pda_scan_record
msgid "Create your first PDA scan record"
msgstr "创建第一条PDA扫码记录"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#, python-format
msgid "Scan record created successfully"
msgstr "扫码记录创建成功"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#, python-format
msgid "Creation failed: %s"
msgstr "创建失败: %s"
...@@ -8,6 +8,7 @@ class PDAScanRecord(models.Model): ...@@ -8,6 +8,7 @@ class PDAScanRecord(models.Model):
_name = 'pda.scan.record' _name = 'pda.scan.record'
_description = _('PDA Scan Record') # PDA扫码记录 _description = _('PDA Scan Record') # PDA扫码记录
_order = 'create_date desc' _order = 'create_date desc'
_rec_name = 'bill_number'
@api.onchange('operation') @api.onchange('operation')
def _onchange_operation(self): def _onchange_operation(self):
...@@ -39,9 +40,10 @@ class PDAScanRecord(models.Model): ...@@ -39,9 +40,10 @@ class PDAScanRecord(models.Model):
('success', _('Success')), ('success', _('Success')),
('failed', _('Failed')) ('failed', _('Failed'))
], string=_('State'), required=True) ], string=_('State'), required=True)
failure_reason = fields.Char(string=_('Failure Reason')) # 失败原因
@api.model @api.model
def create_scan_record(self, operation, record_type, bill_number, transfer_number, state, operator_id=False, bl_id=False): def create_scan_record(self, operation, record_type, bill_number, transfer_number, state, operator_id=False, bl_id=False,failure_reason=False):
""" """
创建扫码记录的方法,供接口调用 创建扫码记录的方法,供接口调用
Create scan record method for API calls Create scan record method for API calls
...@@ -63,7 +65,8 @@ class PDAScanRecord(models.Model): ...@@ -63,7 +65,8 @@ class PDAScanRecord(models.Model):
'bill_number': bill_number, 'bill_number': bill_number,
'transfer_number': transfer_number, 'transfer_number': transfer_number,
'bl_id': bl_id, 'bl_id': bl_id,
'state': state 'state': state,
'failure_reason': failure_reason
}) })
return { return {
'success': True, 'success': True,
......
...@@ -16,7 +16,7 @@ class ResConfigSettings(models.TransientModel): ...@@ -16,7 +16,7 @@ class ResConfigSettings(models.TransientModel):
tt_version = fields.Char('接口版本', default='3.0') tt_version = fields.Char('接口版本', default='3.0')
tt_customer_id = fields.Many2one('res.partner', string='客户') tt_customer_id = fields.Many2one('res.partner', string='客户')
#交货操作晚于提货操作X分钟【默认80分钟】 #交货操作晚于提货操作X分钟【默认80分钟】
delivery_time = fields.Integer('交货操作晚于提货操作X分钟', default=80) delivery_time = fields.Integer('交货操作晚于提货操作X分钟', default=80,config_parameter='delivery_time')
@api.model @api.model
def get_values(self): def get_values(self):
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
<field name="transfer_number"/> <field name="transfer_number"/>
<field name="bl_id" invisible="1"/> <field name="bl_id" invisible="1"/>
<field name="state"/> <field name="state"/>
<field name="failure_reason" optional="hide"/>
</tree> </tree>
</field> </field>
</record> </record>
...@@ -45,6 +46,9 @@ ...@@ -45,6 +46,9 @@
<field name="transfer_number"/> <field name="transfer_number"/>
</group> </group>
</group> </group>
<group>
<field name="failure_reason" attrs="{'invisible': [('state', '=', 'success')]}" />
</group>
</sheet> </sheet>
</form> </form>
</field> </field>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论