提交 0e5f03fb authored 作者: 伍姿英's avatar 伍姿英

Merge branch 'release/3.8.0'

...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
'wizard/email_template.xml', 'wizard/email_template.xml',
'wizard/bl_done_wizard_views.xml', 'wizard/bl_done_wizard_views.xml',
'wizard/batch_get_pod_info_wizard_views.xml', 'wizard/batch_get_pod_info_wizard_views.xml',
'wizard/batch_get_lastmile_pod_info_wizard_views.xml',
'data/data.xml', 'data/data.xml',
'data/timer.xml', 'data/timer.xml',
'data/sequence.xml', 'data/sequence.xml',
......
...@@ -68,6 +68,10 @@ ...@@ -68,6 +68,10 @@
# OCR可能将:识别为多个空格,如"DATETIMEOFRELEASE 1623420-SEP-2025"把:识别成了2 1333113-NOV-2025,把:识别成了3 # OCR可能将:识别为多个空格,如"DATETIMEOFRELEASE 1623420-SEP-2025"把:识别成了2 1333113-NOV-2025,把:识别成了3
r'DATETIMEOFRELEASE\s+(\d)(\d)[2,3](\d{2})(\d{2})-([A-Z]{3})-(\d{4})', r'DATETIMEOFRELEASE\s+(\d)(\d)[2,3](\d{2})(\d{2})-([A-Z]{3})-(\d{4})',
r'DATETIMEQFRELEASE\s+(\d)(\d)[2,3](\d{2})(\d{2})-([A-Z]{3})-(\d{4})', r'DATETIMEQFRELEASE\s+(\d)(\d)[2,3](\d{2})(\d{2})-([A-Z]{3})-(\d{4})',
r'DATE\.?TIME\.?OF\.?RELEASE[^\n]*?(\d{2}:\d{2})\s+(\d{2}-[A-Z]{3}-\d{4})',
r'DATETIME\.OFRELEASE(\d{2}:\d{2})\s+(\d{2}-[A-Z]{3}-\d{4})',
r'DATETIME\.OFRELEASE(\d)(\d)(\d{2})(\d{2})-([A-Z]{3})-(\d{4})',
r'DATETIME\.OFRELEASE\s+(\d)(\d)(\d{2})(\d{2})-([A-Z]{3})-(\d{4})',
]</field> ]</field>
</record> </record>
</data> </data>
......
...@@ -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-12-04 01:28+0000\n" "POT-Creation-Date: 2025-12-18 02:22+0000\n"
"PO-Revision-Date: 2025-12-04 09:36+0800\n" "PO-Revision-Date: 2025-12-18 10:25+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"
...@@ -49,8 +49,7 @@ msgstr "%s %s 操作了异常信息,异常原因:%s,%s%s邮件" ...@@ -49,8 +49,7 @@ msgstr "%s %s 操作了异常信息,异常原因:%s,%s%s邮件"
#. odoo-python #. odoo-python
#: code:addons/ccs_base/wizard/add_exception_info_wizard.py:0 #: code:addons/ccs_base/wizard/add_exception_info_wizard.py:0
#, python-format #, python-format
msgid "" msgid "%s at %s manipulated abnormal information, the reason for the abnormality is: %s, not sent %s email"
"%s at %s manipulated abnormal information, the reason for the abnormality is: %s, not sent %s email"
msgstr "%s %s 操作了异常信息,异常原因:%s,未发送%s邮件" msgstr "%s %s 操作了异常信息,异常原因:%s,未发送%s邮件"
#. module: ccs_base #. module: ccs_base
...@@ -122,8 +121,7 @@ msgid "" ...@@ -122,8 +121,7 @@ msgid ""
" </t>\n" " </t>\n"
" <div>出现异常,异常原因:\n" " <div>出现异常,异常原因:\n"
" <t t-if=\"object.exception_ids\">\n" " <t t-if=\"object.exception_ids\">\n"
" <t t-esc=\"'/'.join([ex.reason for ex in object.exception_ids])\"></t>," " <t t-esc=\"'/'.join([ex.reason for ex in object.exception_ids])\"></t>,请知晓。\n"
"请知晓。\n"
" </t>\n" " </t>\n"
" <t t-if=\"not object.exception_ids\">\n" " <t t-if=\"not object.exception_ids\">\n"
" 无异常,请知晓。\n" " 无异常,请知晓。\n"
...@@ -139,8 +137,8 @@ msgstr "" ...@@ -139,8 +137,8 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_update_transfer_bl_no_wizard #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_update_transfer_bl_no_wizard
msgid "" msgid ""
"<span class=\"label label-warning\">\n" "<span class=\"label label-warning\">\n"
" If there is abnormal data, please download the error file, fix the " " If there is abnormal data, please download the error file, fix the data as prompted, and re-"
"data as prompted, and re-import!\n" "import!\n"
" </span>" " </span>"
msgstr "" msgstr ""
"<span class=\"label label-warning\">\n" "<span class=\"label label-warning\">\n"
...@@ -158,8 +156,7 @@ msgid "<span class=\"o_stat_text\">Delivered Big Packages</span>" ...@@ -158,8 +156,7 @@ msgid "<span class=\"o_stat_text\">Delivered Big Packages</span>"
msgstr "<span class=\"o_stat_text\">已交货大包</span>" msgstr "<span class=\"o_stat_text\">已交货大包</span>"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view
msgid "<span class=\"o_stat_text\">Goods</span>" msgid "<span class=\"o_stat_text\">Goods</span>"
msgstr "<span class=\"o_stat_text\">货物</span>" msgstr "<span class=\"o_stat_text\">货物</span>"
...@@ -170,8 +167,7 @@ msgid "<span class=\"o_stat_text\">Picked Up Big Packages</span>" ...@@ -170,8 +167,7 @@ msgid "<span class=\"o_stat_text\">Picked Up Big Packages</span>"
msgstr "<span class=\"o_stat_text\">已提货大包</span>" msgstr "<span class=\"o_stat_text\">已提货大包</span>"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view
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 "<span class=\"o_stat_text\">小包</span>"
...@@ -184,8 +180,8 @@ msgstr "<span class=\"o_stat_text\">已理货大包</span>" ...@@ -184,8 +180,8 @@ msgstr "<span class=\"o_stat_text\">已理货大包</span>"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_update_transfer_bl_no_wizard #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_update_transfer_bl_no_wizard
msgid "" msgid ""
"<span style=\"color:red;font-size:15px;\">Tip: Please fill in the information strictly according to " "<span style=\"color:red;font-size:15px;\">Tip: Please fill in the information strictly according to the template, otherwise the "
"the template, otherwise the system will not recognize it.\n" "system will not recognize it.\n"
" </span>" " </span>"
msgstr "" msgstr ""
"<span style=\"color:red;font-size:15px;\">提示:请务必按照模板填写信息,否则系统无法识别。\n" "<span style=\"color:red;font-size:15px;\">提示:请务必按照模板填写信息,否则系统无法识别。\n"
...@@ -193,6 +189,7 @@ msgstr "" ...@@ -193,6 +189,7 @@ msgstr ""
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_lastmile_pod_info_wizard_form
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form
msgid "<strong>Description:</strong>" msgid "<strong>Description:</strong>"
msgstr "<strong>说明:</strong>" msgstr "<strong>说明:</strong>"
...@@ -200,11 +197,9 @@ msgstr "<strong>说明:</strong>" ...@@ -200,11 +197,9 @@ msgstr "<strong>说明:</strong>"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form
msgid "" msgid ""
"<strong>Get Last Mile POD:</strong>\n" "<strong>Get Cargo Terminal Pickup POD:</strong>\n"
" Generate a last mile POD (Proof of Delivery) attachment " " Generate a attachment information of the POD for picking up goods cargo station"
"information, including\n" msgstr "<strong>获取货运站提货POD:</strong>生成用于货站提货POD附件信息"
" big package quantities and container numbers"
msgstr "<strong>获取尾程POD:</strong>生成一条尾程交接POD(待大包数量和箱号)的附件信息"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form
...@@ -217,21 +212,33 @@ msgstr "<strong>删除指定文本:</strong>从 PDF 文件中删除指定文 ...@@ -217,21 +212,33 @@ msgstr "<strong>删除指定文本:</strong>从 PDF 文件中删除指定文
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form
msgid "" msgid ""
"<strong>Sync Last Mile POD:</strong>\n" "<strong>Sync Cargo Terminal Pickup POD:</strong>\n"
" Synchronize POD (Proof of Delivery) attachment information with " " Synchronize the attachment information of the POD for picking up goods from TK cargo station"
"TK system, including\n" msgstr "<strong>同步货站提货POD:</strong>向TK同步货站提货POD的附件信息"
" big package quantities and container numbers"
msgstr "同步尾程POD:向TK同步尾程交接POD(待大包数量和箱号)的附件信息"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form
msgid "" msgid ""
"<strong>Sync Push Match Node:</strong>\n" "<strong>Sync Push Match Node:</strong>\n"
" Synchronize and push matched node information based on POD file, " " Synchronize and push matched node information based on POD file, extract time from\n"
"extract time from\n"
" red boxes as node operation time" " red boxes as node operation time"
msgstr "<strong>同步推送匹配节点:</strong>根据 POD 文件同步推送匹配的节点信息,提取时间作为节点运行时间"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_lastmile_pod_info_wizard_form
msgid ""
"<strong>Sync to TK:</strong>\n"
" Sync the attachment information to TK."
msgstr "<strong>同步至TK:</strong>将附件信息同步至TK。"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_lastmile_pod_info_wizard_form
msgid ""
"<strong>Upload to Last Mile POD:</strong>\n"
" Write fetched PDF to BL attachments with name \"Last Mile POD (pending big package\n"
" count and box no.)\""
msgstr "" msgstr ""
"<strong>同步推送匹配节点:</strong>根据 POD 文件同步推送匹配的节点信息,提取时间作为节点运行时间" "<strong>上传到尾程交接POD(待大包数量和箱号):</strong>将获取的PDF写入提单附件,文件名为\"上传到尾程交接POD(待大包数量和箱号)\""
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,help:ccs_base.field_batch_input_ship_package_status_wizard__exclude_tracking_no #: model:ir.model.fields,help:ccs_base.field_batch_input_ship_package_status_wizard__exclude_tracking_no
...@@ -259,28 +266,28 @@ msgstr "地址3" ...@@ -259,28 +266,28 @@ msgstr "地址3"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0 #: code:addons/ccs_base/wizard/batch_get_lastmile_pod_info_wizard.py:0 code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0
#, python-format #, python-format
msgid "API URL not configured" msgid "API URL not configured"
msgstr "未配置 API URL" msgstr "未配置 API URL"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0 #: code:addons/ccs_base/wizard/batch_get_lastmile_pod_info_wizard.py:0 code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0
#, python-format #, python-format
msgid "API request failed: %s" msgid "API request failed: %s"
msgstr "API 请求失败:%s" msgstr "API 请求失败:%s"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0 #: code:addons/ccs_base/wizard/batch_get_lastmile_pod_info_wizard.py:0 code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0
#, python-format #, python-format
msgid "API returned empty response" msgid "API returned empty response"
msgstr "API 返回空响应" msgstr "API 返回空响应"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0 #: code:addons/ccs_base/wizard/batch_get_lastmile_pod_info_wizard.py:0 code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0
#, python-format #, python-format
msgid "API returned error: %s" msgid "API returned error: %s"
msgstr "API 返回错误:%s" msgstr "API 返回错误:%s"
...@@ -468,8 +475,7 @@ msgid "Actual VAT Rate" ...@@ -468,8 +475,7 @@ msgid "Actual VAT Rate"
msgstr "实际增值税率" msgstr "实际增值税率"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Actual Weight" msgid "Actual Weight"
msgstr "实际重量" msgstr "实际重量"
...@@ -481,8 +487,7 @@ msgstr "添加异常信息" ...@@ -481,8 +487,7 @@ msgstr "添加异常信息"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0 model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view
#, python-format #, python-format
msgid "Add Package Exception Information" msgid "Add Package Exception Information"
...@@ -530,16 +535,13 @@ msgid "B/L Attachments" ...@@ -530,16 +535,13 @@ msgid "B/L Attachments"
msgstr "提货单附件" msgstr "提货单附件"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__bl_date #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__bl_date model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "B/L Date" msgid "B/L Date"
msgstr "提单日期" msgstr "提单日期"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__bl_file #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__bl_file model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
msgid "B/L File" msgid "B/L File"
msgstr "提货单文件" msgstr "提货单文件"
...@@ -573,8 +575,7 @@ msgid "B/L No is required" ...@@ -573,8 +575,7 @@ msgid "B/L No is required"
msgstr "提单号必填" msgstr "提单号必填"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__bl_type #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__bl_type model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
msgid "B/L Type" msgid "B/L Type"
msgstr "提单类型" msgstr "提单类型"
...@@ -620,28 +621,58 @@ msgstr "批量创建提单" ...@@ -620,28 +621,58 @@ msgstr "批量创建提单"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form
msgid "Batch Create and Get POD Info" msgid "Batch Create and Get POD Info"
msgstr "批量创建提单并获取尾程POD信息" msgstr "批量创建提单并获取货站提货POD信息"
#. module: ccs_base
#: model:ir.actions.server,name:ccs_base.bl_download_delivery_pod_server_action
msgid "Batch Download Last Mile POD"
msgstr "批量下载尾程快递POD"
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.server,name:ccs_base.bl_download_pod_server_action #: model:ir.actions.server,name:ccs_base.bl_download_pod_server_action
msgid "Batch Download POD" msgid "Batch Download PickUp POD"
msgstr "批量下载POD" msgstr "批量下载货站提货POD"
#. module: ccs_base
#. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 model:ir.actions.server,name:ccs_base.bl_get_delivery_pod_info_server_action
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_lastmile_pod_info_wizard_form
#, python-format
msgid "Batch Get Last Mile POD Info"
msgstr "获取尾程快递POD"
#. module: ccs_base
#. odoo-python
#: code:addons/ccs_base/wizard/batch_get_lastmile_pod_info_wizard.py:0
#, python-format
msgid "Batch Get Last Mile POD Info Preview"
msgstr "批量获取尾程POD信息预览"
#. module: ccs_base
#: model:ir.model,name:ccs_base.model_batch_get_lastmile_pod_info_wizard
msgid "Batch Get Last Mile POD Info Wizard"
msgstr "批量获取尾程POD向导"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0
#: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0 #: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0
#: model:ir.actions.act_window,name:ccs_base.action_batch_get_pod_info_wizard #: model:ir.actions.act_window,name:ccs_base.action_batch_get_pod_info_wizard
#: model:ir.actions.server,name:ccs_base.bl_get_pod_info_server_action
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form
#, python-format #, python-format
msgid "Batch Get POD Info" msgid "Batch Get POD Info"
msgstr "批量获取尾程POD" msgstr "批量获取货站提货POD"
#. module: ccs_base #. module: ccs_base
#: model:ir.model,name:ccs_base.model_batch_get_pod_info_wizard #: model:ir.model,name:ccs_base.model_batch_get_pod_info_wizard
msgid "Batch Get POD Info Wizard" msgid "Batch Get POD Info Wizard"
msgstr "批量获取尾程POD向导" msgstr "批量获取POD向导"
#. module: ccs_base
#. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 model:ir.actions.server,name:ccs_base.bl_get_pod_info_server_action
#, python-format
msgid "Batch Get PickUp POD Info"
msgstr "批量获取货站提货POD"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_update_transfer_bl_no_wizard #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_update_transfer_bl_no_wizard
...@@ -660,16 +691,13 @@ msgstr "批量更新小包状态向导" ...@@ -660,16 +691,13 @@ msgstr "批量更新小包状态向导"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0 model:ir.actions.act_window,name:ccs_base.action_cc_big_package
#: model:ir.actions.act_window,name:ccs_base.action_cc_big_package #: model:ir.model,name:ccs_base.model_cc_big_package model:ir.model,name:ccs_base.model_cc_history_big_package
#: model:ir.model,name:ccs_base.model_cc_big_package
#: model:ir.model,name:ccs_base.model_cc_history_big_package
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__big_package_id #: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__big_package_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__big_package_id #: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__big_package_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_package_good__big_package_id #: model:ir.model.fields,field_description:ccs_base.field_cc_package_good__big_package_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_ship_package__big_package_id #: model:ir.model.fields,field_description:ccs_base.field_cc_ship_package__big_package_id
#: model:ir.ui.menu,name:ccs_base.menu_cc_big_package #: model:ir.ui.menu,name:ccs_base.menu_cc_big_package model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view
...@@ -677,8 +705,7 @@ msgstr "批量更新小包状态向导" ...@@ -677,8 +705,7 @@ msgstr "批量更新小包状态向导"
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_big_package_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_ship_package_view
...@@ -718,8 +745,7 @@ msgstr "大包号" ...@@ -718,8 +745,7 @@ msgstr "大包号"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__big_package_qty #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__big_package_qty
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__bl_total_big_qty #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__bl_total_big_qty
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
msgid "Big Package Qty" msgid "Big Package Qty"
msgstr "大包数" msgstr "大包数"
...@@ -753,16 +779,13 @@ msgstr "提单最后推送时间" ...@@ -753,16 +779,13 @@ msgstr "提单最后推送时间"
#: model:ir.model.fields,field_description:ccs_base.field_cc_ship_package__bl_id #: model:ir.model.fields,field_description:ccs_base.field_cc_ship_package__bl_id
#: model:ir.model.fields,field_description:ccs_base.field_update_bl_status_wizard__bl_id #: model:ir.model.fields,field_description:ccs_base.field_update_bl_status_wizard__bl_id
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_node__node_type__bl #: model:ir.model.fields.selection,name:ccs_base.selection__cc_node__node_type__bl
#: model_terms:ir.ui.view,arch_db:ccs_base.calendar_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.calendar_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.form_cc_clearance_file_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_clearance_file_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_big_package_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_clearance_file_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_clearance_file_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_good_view
...@@ -773,21 +796,18 @@ msgstr "提单最后推送时间" ...@@ -773,21 +796,18 @@ msgstr "提单最后推送时间"
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_clearance_file_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_clearance_file_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_package_good_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_progress_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_progress_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_ship_package_view
msgid "Bill of Loading" msgid "Bill of Loading"
msgstr "提单" msgstr "提单"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Bill of Loading No." msgid "Bill of Loading No."
msgstr "提单号" msgstr "提单号"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Billing Weight" msgid "Billing Weight"
msgstr "提单重量" msgstr "提单重量"
...@@ -844,24 +864,21 @@ msgstr "清关文件" ...@@ -844,24 +864,21 @@ msgstr "清关文件"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__cc_company_id #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__cc_company_id
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "CC Company" msgid "CC Company"
msgstr "清关公司" msgstr "清关公司"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__cc_country_id #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__cc_country_id
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "CC Country" msgid "CC Country"
msgstr "清关国家" msgstr "清关国家"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__cc_deadline #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__cc_deadline
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "CC Deadline" msgid "CC Deadline"
msgstr "清关截止日期" msgstr "清关截止日期"
...@@ -886,28 +903,23 @@ msgstr "清关经理" ...@@ -886,28 +903,23 @@ msgstr "清关经理"
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_cc_node model:ir.model,name:ccs_base.model_cc_node #: model:ir.actions.act_window,name:ccs_base.action_cc_node model:ir.model,name:ccs_base.model_cc_node
#: model:ir.model.fields,field_description:ccs_base.field_cc_progress__cc_node_id #: model:ir.model.fields,field_description:ccs_base.field_cc_progress__cc_node_id model:ir.ui.menu,name:ccs_base.menu_cc_node
#: model:ir.ui.menu,name:ccs_base.menu_cc_node #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_progress_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_node_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_progress_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_node_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_progress_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_progress_view
msgid "CC Node" msgid "CC Node"
msgstr "清关进度节点" msgstr "清关进度节点"
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_cc_node_exception_reason #: model:ir.actions.act_window,name:ccs_base.action_cc_node_exception_reason
#: model:ir.model,name:ccs_base.model_cc_node_exception_reason #: model:ir.model,name:ccs_base.model_cc_node_exception_reason model:ir.ui.menu,name:ccs_base.menu_cc_node_exception_reason
#: model:ir.ui.menu,name:ccs_base.menu_cc_node_exception_reason
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_node_exception_reason_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_node_exception_reason_view
msgid "CC Node Exception Reason" msgid "CC Node Exception Reason"
msgstr "节点异常原因" msgstr "节点异常原因"
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_cc_progress #: model:ir.actions.act_window,name:ccs_base.action_cc_progress model:ir.model,name:ccs_base.model_cc_progress
#: model:ir.model,name:ccs_base.model_cc_progress
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__cc_progress_ids #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__cc_progress_ids
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_progress_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_progress_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_progress_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_progress_view
msgid "CC Progress" msgid "CC Progress"
msgstr "清关进度" msgstr "清关进度"
...@@ -975,16 +987,14 @@ msgstr "区县(EN)" ...@@ -975,16 +987,14 @@ msgstr "区县(EN)"
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_ship_package_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_ship_package_view
msgid "Cancel Reason" msgid "Cancel Reason"
msgstr "取消原因" msgstr "取消原因"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
...@@ -1026,8 +1036,7 @@ msgid "Clearance Company" ...@@ -1026,8 +1036,7 @@ msgid "Clearance Company"
msgstr "清关公司" msgstr "清关公司"
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_cc_clearance_file #: model:ir.actions.act_window,name:ccs_base.action_cc_clearance_file model:ir.model,name:ccs_base.model_cc_clearance_file
#: model:ir.model,name:ccs_base.model_cc_clearance_file
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_clearance_file_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_clearance_file_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_clearance_file_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_clearance_file_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_clearance_file_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_clearance_file_view
...@@ -1039,6 +1048,11 @@ msgstr "清关文件" ...@@ -1039,6 +1048,11 @@ msgstr "清关文件"
msgid "Clearance Files" msgid "Clearance Files"
msgstr "清关文件" msgstr "清关文件"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_lastmile_pod_info_wizard_form
msgid "Click to preview and start downloading the file"
msgstr "点击预览开始获取文件"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_add_exception_info_wizard #: model_terms:ir.ui.view,arch_db:ccs_base.view_add_exception_info_wizard
#: model_terms:ir.ui.view,arch_db:ccs_base.view_associate_pallet_wizard #: model_terms:ir.ui.view,arch_db:ccs_base.view_associate_pallet_wizard
...@@ -1083,6 +1097,7 @@ msgstr "配置设置" ...@@ -1083,6 +1097,7 @@ msgstr "配置设置"
#: model_terms:ir.ui.view,arch_db:ccs_base.view_add_exception_info_wizard #: model_terms:ir.ui.view,arch_db:ccs_base.view_add_exception_info_wizard
#: model_terms:ir.ui.view,arch_db:ccs_base.view_associate_pallet_wizard #: model_terms:ir.ui.view,arch_db:ccs_base.view_associate_pallet_wizard
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_lastmile_pod_info_wizard_form
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form
#: model_terms:ir.ui.view,arch_db:ccs_base.view_bl_done_wizard #: model_terms:ir.ui.view,arch_db:ccs_base.view_bl_done_wizard
msgid "Confirm" msgid "Confirm"
...@@ -1130,8 +1145,7 @@ msgstr "快递名称" ...@@ -1130,8 +1145,7 @@ msgstr "快递名称"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0 code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0
#: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0
#, python-format #, python-format
msgid "Create TEMU Bill of Loading" msgid "Create TEMU Bill of Loading"
msgstr "创建TEMU提单" msgstr "创建TEMU提单"
...@@ -1139,6 +1153,7 @@ msgstr "创建TEMU提单" ...@@ -1139,6 +1153,7 @@ msgstr "创建TEMU提单"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__create_uid #: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__create_uid
#: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__create_uid #: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__create_uid
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__create_uid
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__create_uid #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__create_uid
#: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__create_uid #: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__create_uid
#: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__create_uid #: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__create_uid
...@@ -1170,6 +1185,7 @@ msgstr "创建人" ...@@ -1170,6 +1185,7 @@ msgstr "创建人"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__create_date #: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__create_date
#: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__create_date #: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__create_date
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__create_date
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__create_date #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__create_date
#: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__create_date #: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__create_date
#: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__create_date #: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__create_date
...@@ -1241,8 +1257,7 @@ msgstr "当前状态" ...@@ -1241,8 +1257,7 @@ msgstr "当前状态"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__partner_id #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__partner_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__customer_id #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__customer_id
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Customer" msgid "Customer"
msgstr "客户" msgstr "客户"
...@@ -1258,8 +1273,7 @@ msgid "Customer Ref" ...@@ -1258,8 +1273,7 @@ msgid "Customer Ref"
msgstr "客户参考" msgstr "客户参考"
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_cc_partner #: model:ir.actions.act_window,name:ccs_base.action_cc_partner model:ir.ui.menu,name:ccs_base.menu_cc_partner
#: model:ir.ui.menu,name:ccs_base.menu_cc_partner
msgid "Customers" msgid "Customers"
msgstr "客户" msgstr "客户"
...@@ -1280,8 +1294,7 @@ msgid "Customs B/L No" ...@@ -1280,8 +1294,7 @@ msgid "Customs B/L No"
msgstr "海关提单号" msgstr "海关提单号"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Customs Bill of Loading No." msgid "Customs Bill of Loading No."
msgstr "海关装货单号" msgstr "海关装货单号"
...@@ -1293,8 +1306,7 @@ msgid "Customs Clearance Status" ...@@ -1293,8 +1306,7 @@ msgid "Customs Clearance Status"
msgstr "关务提单状态" msgstr "关务提单状态"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.view_update_bl_status_wizard
#: model_terms:ir.ui.view,arch_db:ccs_base.view_update_bl_status_wizard
msgid "Customs Clearance Status Process Time" msgid "Customs Clearance Status Process Time"
msgstr "关务提单推送时间" msgstr "关务提单推送时间"
...@@ -1362,6 +1374,7 @@ msgstr "消费者地址" ...@@ -1362,6 +1374,7 @@ msgstr "消费者地址"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__display_name #: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__display_name
#: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__display_name #: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__display_name
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__display_name
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__display_name #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__display_name
#: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__display_name #: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__display_name
#: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__display_name #: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__display_name
...@@ -1414,18 +1427,14 @@ msgid "EMAIL" ...@@ -1414,18 +1427,14 @@ msgid "EMAIL"
msgstr "邮箱" msgstr "邮箱"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__eta #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__eta model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "ETA" msgid "ETA"
msgstr "预计到达时间" msgstr "预计到达时间"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__etd #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__etd model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "ETD" msgid "ETD"
msgstr "预计离开时间" msgstr "预计离开时间"
...@@ -1453,8 +1462,7 @@ msgstr "目的地港口" ...@@ -1453,8 +1462,7 @@ msgstr "目的地港口"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__end_port_code #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__end_port_code
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "End Port Code" msgid "End Port Code"
msgstr "目的地港口代码" msgstr "目的地港口代码"
...@@ -1569,7 +1577,7 @@ msgstr "导出报关文件" ...@@ -1569,7 +1577,7 @@ msgstr "导出报关文件"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0 #: code:addons/ccs_base/wizard/batch_get_lastmile_pod_info_wizard.py:0 code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0
#, python-format #, python-format
msgid "Failed to get PDF file from API: %s" msgid "Failed to get PDF file from API: %s"
msgstr "从 API 获取 PDF 文件失败: %s" msgstr "从 API 获取 PDF 文件失败: %s"
...@@ -1665,10 +1673,15 @@ msgstr "毛重" ...@@ -1665,10 +1673,15 @@ msgstr "毛重"
msgid "GROSS WEIGHT (KG)" msgid "GROSS WEIGHT (KG)"
msgstr "毛重(公斤)" msgstr "毛重(公斤)"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__generate_successful_processed
msgid "Generate successful processed"
msgstr "生成处理成功的数据"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__get_last_mile_pod #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__get_last_mile_pod
msgid "Get Last Mile POD" msgid "Get PickUp POD"
msgstr "获取尾程POD" msgstr "获取货站提货POD"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_package_good__item_type__gift #: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_package_good__item_type__gift
...@@ -1694,8 +1707,7 @@ msgstr "商品税号" ...@@ -1694,8 +1707,7 @@ msgstr "商品税号"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0 code:addons/ccs_base/models/cc_history_big_package.py:0
#: code:addons/ccs_base/models/cc_history_big_package.py:0
#: model:ir.model.fields,field_description:ccs_base.field_cc_big_package__goods_ids #: model:ir.model.fields,field_description:ccs_base.field_cc_big_package__goods_ids
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__good_ids #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__good_ids
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__goods_ids #: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__goods_ids
...@@ -1716,16 +1728,14 @@ msgid "Goods Qty" ...@@ -1716,16 +1728,14 @@ msgid "Goods Qty"
msgstr "商品数" msgstr "商品数"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_big_package_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_clearance_file_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_clearance_file_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_sync_log_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_sync_log_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_node_exception_reason_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_node_exception_reason_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_node_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_node_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_progress_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_progress_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_ship_package_view
msgid "Group By" msgid "Group By"
...@@ -1790,6 +1800,7 @@ msgstr "历史小包" ...@@ -1790,6 +1800,7 @@ msgstr "历史小包"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__id #: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__id
#: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__id #: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__id
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__id
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__id #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__id
#: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__id #: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__id
#: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__id #: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__id
...@@ -1941,8 +1952,7 @@ msgstr "提单是否同步" ...@@ -1941,8 +1952,7 @@ msgstr "提单是否同步"
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_ship_package_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_ship_package_view
msgid "Is Cancel" msgid "Is Cancel"
msgstr "取消" msgstr "取消"
...@@ -2100,8 +2110,7 @@ msgid "Last Mile PickUp" ...@@ -2100,8 +2110,7 @@ msgid "Last Mile PickUp"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:ir.model,name:ccs_base.model_cc_last_mile_provider #: model:ir.model,name:ccs_base.model_cc_last_mile_provider model_terms:ir.ui.view,arch_db:ccs_base.view_last_mile_provider_form
#: model_terms:ir.ui.view,arch_db:ccs_base.view_last_mile_provider_form
#: model_terms:ir.ui.view,arch_db:ccs_base.view_last_mile_provider_search #: model_terms:ir.ui.view,arch_db:ccs_base.view_last_mile_provider_search
#: model_terms:ir.ui.view,arch_db:ccs_base.view_last_mile_provider_tree #: model_terms:ir.ui.view,arch_db:ccs_base.view_last_mile_provider_tree
msgid "Last Mile Provider" msgid "Last Mile Provider"
...@@ -2110,8 +2119,7 @@ msgstr "尾程服务商" ...@@ -2110,8 +2119,7 @@ msgstr "尾程服务商"
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_last_mile_provider #: model:ir.actions.act_window,name:ccs_base.action_last_mile_provider
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__last_mile_provider_ids #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__last_mile_provider_ids
#: model:ir.ui.menu,name:ccs_base.menu_last_mile_provider #: model:ir.ui.menu,name:ccs_base.menu_last_mile_provider model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Last Mile Providers" msgid "Last Mile Providers"
msgstr "尾程服务商" msgstr "尾程服务商"
...@@ -2119,6 +2127,7 @@ msgstr "尾程服务商" ...@@ -2119,6 +2127,7 @@ msgstr "尾程服务商"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard____last_update #: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard____last_update
#: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard____last_update #: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard____last_update
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard____last_update
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard____last_update #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard____last_update
#: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard____last_update #: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard____last_update
#: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard____last_update #: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard____last_update
...@@ -2156,6 +2165,7 @@ msgstr "最近操作时间" ...@@ -2156,6 +2165,7 @@ msgstr "最近操作时间"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__write_uid #: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__write_uid
#: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__write_uid #: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__write_uid
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__write_uid
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__write_uid #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__write_uid
#: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__write_uid #: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__write_uid
#: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__write_uid #: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__write_uid
...@@ -2187,6 +2197,7 @@ msgstr "最后更新人" ...@@ -2187,6 +2197,7 @@ msgstr "最后更新人"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__write_date #: model:ir.model.fields,field_description:ccs_base.field_add_exception_info_wizard__write_date
#: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__write_date #: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__write_date
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__write_date
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__write_date #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__write_date
#: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__write_date #: model:ir.model.fields,field_description:ccs_base.field_batch_input_ship_package_status_wizard__write_date
#: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__write_date #: model:ir.model.fields,field_description:ccs_base.field_batch_update_transfer_bl_no_wizard__write_date
...@@ -2451,7 +2462,7 @@ msgstr "提单号" ...@@ -2451,7 +2462,7 @@ msgstr "提单号"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0 #: code:addons/ccs_base/wizard/batch_get_lastmile_pod_info_wizard.py:0 code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0
#, python-format #, python-format
msgid "No PDF files found in API response" msgid "No PDF files found in API response"
msgstr "API调用成功,但没有PDF文件" msgstr "API调用成功,但没有PDF文件"
...@@ -2470,14 +2481,12 @@ msgid "Node" ...@@ -2470,14 +2481,12 @@ msgid "Node"
msgstr "节点" msgstr "节点"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_node_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_node_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_node_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_node_view
msgid "Node Description" msgid "Node Description"
msgstr "节点描述" msgstr "节点描述"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_node_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_node_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_node_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_node_view
msgid "Node Name" msgid "Node Name"
msgstr "节点名称" msgstr "节点名称"
...@@ -2489,8 +2498,7 @@ msgstr "节点序号" ...@@ -2489,8 +2498,7 @@ msgstr "节点序号"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_node__node_type #: model:ir.model.fields,field_description:ccs_base.field_cc_node__node_type
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_node_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_node_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_node_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_node_view
msgid "Node Type" msgid "Node Type"
msgstr "节点类型" msgstr "节点类型"
...@@ -2639,11 +2647,13 @@ msgid "PDF File" ...@@ -2639,11 +2647,13 @@ msgid "PDF File"
msgstr "PDF文件" msgstr "PDF文件"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__pdf_file
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__pdf_file #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__pdf_file
msgid "PDF文件" msgid "PDF文件"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__pdf_filename
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__pdf_filename #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__pdf_filename
msgid "PDF文件名称" msgid "PDF文件名称"
msgstr "" msgstr ""
...@@ -2676,20 +2686,16 @@ msgid "Package" ...@@ -2676,20 +2686,16 @@ msgid "Package"
msgstr "小包" msgstr "小包"
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_exception_info #: model:ir.actions.act_window,name:ccs_base.action_exception_info model:ir.model,name:ccs_base.model_cc_exception_info
#: model:ir.model,name:ccs_base.model_cc_exception_info #: model:ir.ui.menu,name:ccs_base.menu_exception_info model_terms:ir.ui.view,arch_db:ccs_base.view_exception_info_form
#: model:ir.ui.menu,name:ccs_base.menu_exception_info
#: model_terms:ir.ui.view,arch_db:ccs_base.view_exception_info_form
#: model_terms:ir.ui.view,arch_db:ccs_base.view_exception_info_search #: model_terms:ir.ui.view,arch_db:ccs_base.view_exception_info_search
#: model_terms:ir.ui.view,arch_db:ccs_base.view_exception_info_tree #: model_terms:ir.ui.view,arch_db:ccs_base.view_exception_info_tree
msgid "Package Exception Information" msgid "Package Exception Information"
msgstr "包裹异常信息" msgstr "包裹异常信息"
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_cc_package_good #: model:ir.actions.act_window,name:ccs_base.action_cc_package_good model:ir.model,name:ccs_base.model_cc_history_package_good
#: model:ir.model,name:ccs_base.model_cc_history_package_good #: model:ir.model,name:ccs_base.model_cc_package_good model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view
#: model:ir.model,name:ccs_base.model_cc_package_good
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_package_good_view
...@@ -2795,23 +2801,22 @@ msgstr "平台类型" ...@@ -2795,23 +2801,22 @@ msgstr "平台类型"
#. odoo-python #. odoo-python
#: code:addons/ccs_base/wizard/batch_update_transfer_bl_no_wizard.py:0 #: code:addons/ccs_base/wizard/batch_update_transfer_bl_no_wizard.py:0
#, python-format #, python-format
msgid "" msgid "Please check if the import file and content are correct, and import according to the template file!"
"Please check if the import file and content are correct, and import according to the template file!"
msgstr "请检查导入文件和内容是否正确,请根据模板文件导入!" msgstr "请检查导入文件和内容是否正确,请根据模板文件导入!"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0
#, python-format #, python-format
msgid "Please configure the default customs clearance status of the bill of loading node type first." msgid "Please configure %s file of the bill of loading first."
msgstr "请先配置默认的提单节点类型的清关节点" msgstr "请先配置提单的 %s 文件。 "
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0
#, python-format #, python-format
msgid "Please configure the tail-end handover POD file of the bill of loading first." msgid "Please configure the default customs clearance status of the bill of loading node type first."
msgstr "请先配置提单的尾部交接POD文件。" msgstr "请先配置默认的提单节点类型的清关节点"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form
...@@ -2841,6 +2846,7 @@ msgstr "请先上传需要更新的提单数据文件!" ...@@ -2841,6 +2846,7 @@ msgstr "请先上传需要更新的提单数据文件!"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_create_and_get_pod_info_wizard_form
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_lastmile_pod_info_wizard_form
#: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form #: model_terms:ir.ui.view,arch_db:ccs_base.view_batch_get_pod_info_wizard_form
msgid "Preview" msgid "Preview"
msgstr "预览" msgstr "预览"
...@@ -2863,8 +2869,7 @@ msgstr "进度" ...@@ -2863,8 +2869,7 @@ msgstr "进度"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_progress__progress_date #: model:ir.model.fields,field_description:ccs_base.field_cc_progress__progress_date
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_progress_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_progress_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_progress_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_progress_view
msgid "Progress Date" msgid "Progress Date"
msgstr "进度时间" msgstr "进度时间"
...@@ -2979,8 +2984,7 @@ msgid "Receive Big Package Qty" ...@@ -2979,8 +2984,7 @@ msgid "Receive Big Package Qty"
msgstr "提单总大包数" msgstr "提单总大包数"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Receive Goods Qty" msgid "Receive Goods Qty"
msgstr "提单总大包数" msgstr "提单总大包数"
...@@ -3176,8 +3180,7 @@ msgid "Sample" ...@@ -3176,8 +3180,7 @@ msgid "Sample"
msgstr "样品" msgstr "样品"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_big_package_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
...@@ -3214,8 +3217,7 @@ msgstr "选择类型" ...@@ -3214,8 +3217,7 @@ msgstr "选择类型"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__big_package_sell_country #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__big_package_sell_country
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Sell Country" msgid "Sell Country"
msgstr "包裹销售国家代码" msgstr "包裹销售国家代码"
...@@ -3359,16 +3361,13 @@ msgstr "节点序号" ...@@ -3359,16 +3361,13 @@ msgstr "节点序号"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0 code:addons/ccs_base/models/cc_history_big_package.py:0
#: code:addons/ccs_base/models/cc_history_big_package.py:0 #: model:ir.actions.act_window,name:ccs_base.action_cc_ship_package model:ir.model,name:ccs_base.model_cc_history_ship_package
#: model:ir.actions.act_window,name:ccs_base.action_cc_ship_package
#: model:ir.model,name:ccs_base.model_cc_history_ship_package
#: model:ir.model,name:ccs_base.model_cc_ship_package #: model:ir.model,name:ccs_base.model_cc_ship_package
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__bl_line_id #: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__bl_line_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_sync_log__package_id #: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_sync_log__package_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_package_good__bl_line_id #: model:ir.model.fields,field_description:ccs_base.field_cc_package_good__bl_line_id
#: model:ir.ui.menu,name:ccs_base.menu_cc_ship_package #: model:ir.ui.menu,name:ccs_base.menu_cc_ship_package model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_package_good_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_ship_package_view
...@@ -3411,11 +3410,23 @@ msgid "Shipping_fee" ...@@ -3411,11 +3410,23 @@ msgid "Shipping_fee"
msgstr "运费" msgstr "运费"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__show_error_message
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__show_error_message #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__show_error_message
msgid "Show Error Message" msgid "Show Error Message"
msgstr "显示错误消息" msgstr "显示错误消息"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__show_sync_last_mile_pod
msgid "Show Sync Last Mile POD"
msgstr "显示同步尾程pod"
#. module: ccs_base
#: model:ir.model.fields,help:ccs_base.field_batch_get_lastmile_pod_info_wizard__generate_successful_processed
msgid "Show confirm button when there are successful processed files"
msgstr "显示确认按钮"
#. module: ccs_base
#: model:ir.model.fields,help:ccs_base.field_batch_get_lastmile_pod_info_wizard__show_error_message
#: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__show_error_message #: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__show_error_message
msgid "Show error message" msgid "Show error message"
msgstr "显示错误消息" msgstr "显示错误消息"
...@@ -3432,8 +3443,7 @@ msgstr "始发地港口" ...@@ -3432,8 +3443,7 @@ msgstr "始发地港口"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__start_port_code #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__start_port_code
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Start Port Code" msgid "Start Port Code"
msgstr "始发地港口代码" msgstr "始发地港口代码"
...@@ -3458,8 +3468,7 @@ msgid "State Explain" ...@@ -3458,8 +3468,7 @@ msgid "State Explain"
msgstr "状态说明" msgstr "状态说明"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__state #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__state model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Status" msgid "Status"
msgstr "状态" msgstr "状态"
...@@ -3485,7 +3494,7 @@ msgid "Submit" ...@@ -3485,7 +3494,7 @@ msgid "Submit"
msgstr "提交" msgstr "提交"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__sync_last_mile_pod #: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__sync_last_mile_pod
msgid "Sync Last Mile POD" msgid "Sync Last Mile POD"
msgstr "同步尾程POD" msgstr "同步尾程POD"
...@@ -3499,6 +3508,11 @@ msgstr "同步日志" ...@@ -3499,6 +3508,11 @@ msgstr "同步日志"
msgid "Sync Logs" msgid "Sync Logs"
msgstr "同步日志" msgstr "同步日志"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__sync_last_mile_pod
msgid "Sync PickUp POD"
msgstr "同步货站提货POD"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__sync_match_node #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__sync_match_node
msgid "Sync Push Match Node" msgid "Sync Push Match Node"
...@@ -3519,10 +3533,8 @@ msgstr "同步" ...@@ -3519,10 +3533,8 @@ msgstr "同步"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0 #: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0 model:ir.actions.act_window,name:ccs_base.action_temu_bl
#: model:ir.actions.act_window,name:ccs_base.action_temu_bl #: model:ir.model.fields.selection,name:ccs_base.selection__cc_bl__bl_type__temu model:ir.ui.menu,name:ccs_base.menu_temu_cc_bl
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_bl__bl_type__temu
#: model:ir.ui.menu,name:ccs_base.menu_temu_cc_bl
#, python-format #, python-format
msgid "TEMU Bill of Loading" msgid "TEMU Bill of Loading"
msgstr "TEMU提单" msgstr "TEMU提单"
...@@ -3532,6 +3544,13 @@ msgstr "TEMU提单" ...@@ -3532,6 +3544,13 @@ msgstr "TEMU提单"
msgid "TEMU Platform" msgid "TEMU Platform"
msgstr "TEMU 平台" msgstr "TEMU 平台"
#. module: ccs_base
#. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0
#, python-format
msgid "TEMU提单不支持获取货站提货POD信息,请点击批量创建提单!"
msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_history_tt_api_log #: model:ir.actions.act_window,name:ccs_base.action_history_tt_api_log
#: model:ir.ui.menu,name:ccs_base.menu_history_flight_tt_api_log #: model:ir.ui.menu,name:ccs_base.menu_history_flight_tt_api_log
...@@ -3543,8 +3562,8 @@ msgstr "" ...@@ -3543,8 +3562,8 @@ msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_cc_bl #: model:ir.actions.act_window,name:ccs_base.action_cc_bl
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_bl__bl_type__tk #: model:ir.model.fields.selection,name:ccs_base.selection__cc_bl__bl_type__tk model:ir.ui.menu,name:ccs_base.menu_cc_bl
#: model:ir.ui.menu,name:ccs_base.menu_cc_bl model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "TK Bill of Loading" msgid "TK Bill of Loading"
msgstr "TK提单" msgstr "TK提单"
...@@ -3725,8 +3744,8 @@ msgstr "所选操作时间超过 %s 小时,请重新确认操作时间" ...@@ -3725,8 +3744,8 @@ msgstr "所选操作时间超过 %s 小时,请重新确认操作时间"
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0
#, python-format #, python-format
msgid "" msgid ""
"The small package node or bill of lading node is not in the completed node, and the bill of lading " "The small package node or bill of lading node is not in the completed node, and the bill of lading cannot be changed to "
"cannot be changed to completed!" "completed!"
msgstr "小包节点或提单节点不在已完成节点,提单不能变为已完成!" msgstr "小包节点或提单节点不在已完成节点,提单不能变为已完成!"
#. module: ccs_base #. module: ccs_base
...@@ -3789,8 +3808,7 @@ msgstr "今日小包" ...@@ -3789,8 +3808,7 @@ msgstr "今日小包"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__bl_total_amount #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__bl_total_amount
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Total Amount" msgid "Total Amount"
msgstr "提单总金额" msgstr "提单总金额"
...@@ -3844,8 +3862,7 @@ msgstr "交易单号" ...@@ -3844,8 +3862,7 @@ msgstr "交易单号"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__trade_type #: model:ir.model.fields,field_description:ccs_base.field_cc_bl__trade_type
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Trade Type" msgid "Trade Type"
msgstr "交易类型" msgstr "交易类型"
...@@ -3868,16 +3885,14 @@ msgstr "转单号必填" ...@@ -3868,16 +3885,14 @@ msgstr "转单号必填"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0 code:addons/ccs_base/wizard/batch_update_transfer_bl_no_wizard.py:0
#: code:addons/ccs_base/wizard/batch_update_transfer_bl_no_wizard.py:0
#, python-format #, python-format
msgid "Transfer B/L No. cannot be the same as B/L No." msgid "Transfer B/L No. cannot be the same as B/L No."
msgstr "转单号不能与提单号相同。" msgstr "转单号不能与提单号相同。"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0 code:addons/ccs_base/wizard/batch_update_transfer_bl_no_wizard.py:0
#: code:addons/ccs_base/wizard/batch_update_transfer_bl_no_wizard.py:0
#, python-format #, python-format
msgid "Transfer B/L No. cannot be the same as B/L No. or Transfer B/L No." msgid "Transfer B/L No. cannot be the same as B/L No. or Transfer B/L No."
msgstr "转单号不能与提单号或转单号相同。" msgstr "转单号不能与提单号或转单号相同。"
...@@ -3900,14 +3915,12 @@ msgid "Transport Name" ...@@ -3900,14 +3915,12 @@ msgid "Transport Name"
msgstr "运输工具名称" msgstr "运输工具名称"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Transport Tool Code" msgid "Transport Tool Code"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_bl_view
msgid "Transport Tool Name" msgid "Transport Tool Name"
msgstr "" msgstr ""
...@@ -3946,8 +3959,7 @@ msgstr "未同步" ...@@ -3946,8 +3959,7 @@ msgstr "未同步"
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_batch_input_bl_status_wizard #: model:ir.actions.act_window,name:ccs_base.action_batch_input_bl_status_wizard
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view model_terms:ir.ui.view,arch_db:ccs_base.view_update_bl_status_wizard
#: model_terms:ir.ui.view,arch_db:ccs_base.view_update_bl_status_wizard
msgid "Update Bill Of Loading Status" msgid "Update Bill Of Loading Status"
msgstr "更新提单状态" msgstr "更新提单状态"
...@@ -3980,8 +3992,7 @@ msgstr "更新包裹进度" ...@@ -3980,8 +3992,7 @@ msgstr "更新包裹进度"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0 model:ir.model,name:ccs_base.model_update_bl_status_wizard
#: model:ir.model,name:ccs_base.model_update_bl_status_wizard
#, python-format #, python-format
msgid "Update the status of the bill of loading" msgid "Update the status of the bill of loading"
msgstr "更新提单状态" msgstr "更新提单状态"
...@@ -3993,13 +4004,17 @@ msgstr "更新提单状态" ...@@ -3993,13 +4004,17 @@ msgstr "更新提单状态"
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0 #: code:addons/ccs_base/models/cc_bill_loading.py:0 code:addons/ccs_base/wizard/batch_input_ship_package_statu_wizard.py:0
#: code:addons/ccs_base/wizard/batch_input_ship_package_statu_wizard.py:0
#: model:ir.actions.server,name:ccs_base.batch_input_ship_package_status_server #: model:ir.actions.server,name:ccs_base.batch_input_ship_package_status_server
#, python-format #, python-format
msgid "Update the status of the small package" msgid "Update the status of the small package"
msgstr "更新小包状态" msgstr "更新小包状态"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__get_last_mile_pod
msgid "Upload Last Mile POD"
msgstr "上传到尾程交接POD(待大包数量和箱号)"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__usage_date #: model:ir.model.fields,field_description:ccs_base.field_associate_pallet_wizard__usage_date
msgid "Usage Date" msgid "Usage Date"
...@@ -4066,8 +4081,8 @@ msgstr "是否分大包导出" ...@@ -4066,8 +4081,8 @@ msgstr "是否分大包导出"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__get_last_mile_pod #: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__get_last_mile_pod
msgid "Whether to get last mile POD information" msgid "Whether to get pickup POD information"
msgstr "" msgstr "是否获取货站提货POD"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__remove_specified_text #: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__remove_specified_text
...@@ -4085,10 +4100,15 @@ msgid "Whether to sync and push matched node information" ...@@ -4085,10 +4100,15 @@ msgid "Whether to sync and push matched node information"
msgstr "是否同步推送匹配节点信息" msgstr "是否同步推送匹配节点信息"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__sync_last_mile_pod #: model:ir.model.fields,help:ccs_base.field_batch_get_lastmile_pod_info_wizard__sync_last_mile_pod
msgid "Whether to sync last mile POD information" msgid "Whether to sync last mile POD information"
msgstr "是否同步尾程POD信息" msgstr "是否同步尾程POD信息"
#. module: ccs_base
#: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__sync_last_mile_pod
msgid "Whether to sync pickup POD information"
msgstr "是否同步货站提货POD信息"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__export_bl_big_package_xlsx_wizard__select_type__yes #: model:ir.model.fields.selection,name:ccs_base.selection__export_bl_big_package_xlsx_wizard__select_type__yes
msgid "YES" msgid "YES"
...@@ -4118,9 +4138,7 @@ msgstr "【大包】 还没有!点击左上角的“创建”按钮,沙发 ...@@ -4118,9 +4138,7 @@ msgstr "【大包】 还没有!点击左上角的“创建”按钮,沙发
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_package_sync_log #: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_package_sync_log
msgid "" msgid "[CC History Package Sync Log] Not yet! Click the Create button in the top left corner and the sofa is yours!"
"[CC History Package Sync Log] Not yet! Click the Create button in the top left corner and the sofa "
"is yours!"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
...@@ -4135,8 +4153,7 @@ msgstr "【清关进度】 还没有!点击左上角的“创建”按钮, ...@@ -4135,8 +4153,7 @@ msgstr "【清关进度】 还没有!点击左上角的“创建”按钮,
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.actions.act_window,help:ccs_base.action_cc_is_clearance_company #: model_terms:ir.actions.act_window,help:ccs_base.action_cc_is_clearance_company
msgid "" msgid "[Clearance Company] Not yet! Click the Create button in the top left corner and the sofa is yours!"
"[Clearance Company] Not yet! Click the Create button in the top left corner and the sofa is yours!"
msgstr "【清关公司】还没!点击左上角的创建按钮,沙发就是你的了!" msgstr "【清关公司】还没!点击左上角的创建按钮,沙发就是你的了!"
#. module: ccs_base #. module: ccs_base
...@@ -4151,20 +4168,17 @@ msgstr "【客户】 还没有!点击左上角的“创建”按钮,沙发 ...@@ -4151,20 +4168,17 @@ msgstr "【客户】 还没有!点击左上角的“创建”按钮,沙发
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_big_package #: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_big_package
msgid "" msgid "[History Big Package] Not yet! Click the Create button in the top left corner and the sofa is yours!"
"[History Big Package] Not yet! Click the Create button in the top left corner and the sofa is yours!"
msgstr "【历史大包】 还没有!点击左上角的“创建”按钮,沙发就是你的了!" msgstr "【历史大包】 还没有!点击左上角的“创建”按钮,沙发就是你的了!"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_package_good #: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_package_good
msgid "" msgid "[History Package Good] Not yet! Click the Create button in the top left corner and the sofa is yours!"
"[History Package Good] Not yet! Click the Create button in the top left corner and the sofa is yours!"
msgstr "【货物】 还没有!点击左上角的“创建”按钮,沙发就是你的了!" msgstr "【货物】 还没有!点击左上角的“创建”按钮,沙发就是你的了!"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_ship_package #: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_ship_package
msgid "" msgid "[History Ship Package] Not yet! Click the Create button in the top left corner and the sofa is yours!"
"[History Ship Package] Not yet! Click the Create button in the top left corner and the sofa is yours!"
msgstr "【小包】 还没有!点击左上角的“创建”按钮,沙发就是你的了!" msgstr "【小包】 还没有!点击左上角的“创建”按钮,沙发就是你的了!"
#. module: ccs_base #. module: ccs_base
...@@ -4200,8 +4214,7 @@ msgstr "" ...@@ -4200,8 +4214,7 @@ msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:mail.template,subject:ccs_base.email_template_exception_notification_en #: model:mail.template,subject:ccs_base.email_template_exception_notification_en
msgid "" msgid "{{ ('Big Package Exception' if object.action_type == 'big package' else 'Ship Package Exception') }}"
"{{ ('Big Package Exception' if object.action_type == 'big package' else 'Ship Package Exception') }}"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
...@@ -4262,7 +4275,7 @@ msgstr "" ...@@ -4262,7 +4275,7 @@ msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__sync_successful_processed #: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__sync_successful_processed
msgid "勾选后显示同步尾程POD和同步匹配节点的字段以及确定按钮" msgid "勾选后显示同步货站提货POD和同步匹配节点的字段以及确定按钮"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
...@@ -4312,6 +4325,7 @@ msgid "失败原因" ...@@ -4312,6 +4325,7 @@ msgid "失败原因"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,help:ccs_base.field_batch_get_lastmile_pod_info_wizard__processed_files_data
#: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__processed_files_data #: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__processed_files_data
msgid "存储已处理的文件信息(JSON格式)" msgid "存储已处理的文件信息(JSON格式)"
msgstr "" msgstr ""
...@@ -4324,6 +4338,7 @@ msgid "导出报关文件" ...@@ -4324,6 +4338,7 @@ msgid "导出报关文件"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_lastmile_pod_info_wizard__processed_files_data
#: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__processed_files_data #: model:ir.model.fields,field_description:ccs_base.field_batch_get_pod_info_wizard__processed_files_data
msgid "已处理的文件数据" msgid "已处理的文件数据"
msgstr "" msgstr ""
...@@ -4380,6 +4395,7 @@ msgid "本周日志" ...@@ -4380,6 +4395,7 @@ msgid "本周日志"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,help:ccs_base.field_batch_get_lastmile_pod_info_wizard__pdf_file
#: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__pdf_file #: model:ir.model.fields,help:ccs_base.field_batch_get_pod_info_wizard__pdf_file
msgid "涂抹后的所有pdf文件合并为一个pdf文件" msgid "涂抹后的所有pdf文件合并为一个pdf文件"
msgstr "" msgstr ""
...@@ -4412,14 +4428,13 @@ msgid "自动推送配置" ...@@ -4412,14 +4428,13 @@ msgid "自动推送配置"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:ir.actions.server,name:ccs_base.cron_get_pod_ir_actions_server #: model:ir.actions.server,name:ccs_base.cron_get_pod_ir_actions_server model:ir.cron,cron_name:ccs_base.cron_get_pod
#: model:ir.cron,cron_name:ccs_base.cron_get_pod
msgid "自动获取尾程POD" msgid "自动获取尾程POD"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__batch_get_pod_info_wizard__action_type__获取尾程pod信息 #: model:ir.model.fields.selection,name:ccs_base.selection__batch_get_pod_info_wizard__action_type__获取货站提货pod信息
msgid "获取尾程POD信息" msgid "获取货站提货POD信息"
msgstr "" msgstr ""
#. module: ccs_base #. module: ccs_base
...@@ -4444,7 +4459,7 @@ msgstr "" ...@@ -4444,7 +4459,7 @@ msgstr ""
#. module: ccs_base #. module: ccs_base
#. odoo-python #. odoo-python
#: code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0 #: code:addons/ccs_base/wizard/batch_get_lastmile_pod_info_wizard.py:0 code:addons/ccs_base/wizard/batch_get_pod_info_wizard.py:0
#, python-format #, python-format
msgid "预览操作失败: %s" msgid "预览操作失败: %s"
msgstr "" msgstr ""
...@@ -722,7 +722,7 @@ class CcBL(models.Model): ...@@ -722,7 +722,7 @@ class CcBL(models.Model):
def cron_get_pod(self): def cron_get_pod(self):
""" """
状态为清关中且附件信息尾程交接POD(待大包数量和箱号),为空的提单,自动获取尾程POD信息 状态为清关中且附件信息尾程交接POD(待大包数量和箱号),为空的提单,自动获取尾程POD信息 暂时不用
""" """
fix_name = '尾程交接POD(待大包数量和箱号)' fix_name = '尾程交接POD(待大包数量和箱号)'
bl_objs = self.env['cc.bl'].search( bl_objs = self.env['cc.bl'].search(
...@@ -741,8 +741,7 @@ class CcBL(models.Model): ...@@ -741,8 +741,7 @@ class CcBL(models.Model):
}) })
wizard_obj.confirm() wizard_obj.confirm()
def _get_pod_files(self): def _get_pod_files(self, fix_name):
fix_name = '尾程交接POD(待大包数量和箱号)'
res = [] res = []
for bl in self: for bl in self:
files = self.env['cc.clearance.file'].sudo().search( files = self.env['cc.clearance.file'].sudo().search(
...@@ -762,8 +761,13 @@ class CcBL(models.Model): ...@@ -762,8 +761,13 @@ class CcBL(models.Model):
res.append((name, f.file)) res.append((name, f.file))
return res return res
def action_download_pod(self): def action_download_pod(self, pod_name):
files = self._get_pod_files() """
下载POD
:return:
"""
files = self._get_pod_files(pod_name)
if not files: if not files:
return {'type': 'ir.actions.act_window_close'} return {'type': 'ir.actions.act_window_close'}
if len(self) == 1 and len(files) == 1: if len(self) == 1 and len(files) == 1:
...@@ -1239,20 +1243,32 @@ class CcBL(models.Model): ...@@ -1239,20 +1243,32 @@ class CcBL(models.Model):
} }
def action_batch_get_pod_info(self): def action_batch_get_pod_info(self):
"""批量获取尾程POD信息""" """批量获取货站提货POD信息"""
is_temp = self.filtered(lambda x: x.bl_type == 'temu') is_temp = self.filtered(lambda x: x.bl_type == 'temu')
if is_temp: if is_temp:
raise ValidationError(_('TEMU提单不支持获取尾程POD信息,请点击批量创建提单!')) raise ValidationError(_('TEMU提单不支持获取货站提货POD信息,请点击批量创建提单!'))
return { return {
'name': _('Batch Get POD Info'), 'name': _('Batch Get PickUp POD Info'),
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',
'view_mode': 'form', 'view_mode': 'form',
'res_model': 'batch.get.pod.info.wizard', 'res_model': 'batch.get.pod.info.wizard',
'context': {'active_id': self.ids, 'default_action_type': '获取尾程POD信息'}, 'context': {'active_id': self.ids, 'default_action_type': '获取货站提货POD信息'},
'views': [[self.env.ref('ccs_base.view_batch_get_pod_info_wizard_form').id, "form"]], 'views': [[self.env.ref('ccs_base.view_batch_get_pod_info_wizard_form').id, "form"]],
'target': 'new', 'target': 'new',
} }
def action_batch_get_last_mile_pod_info(self):
"""批量获取尾程POD信息"""
return {
'name': _('Batch Get Last Mile POD Info'),
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'batch.get.lastmile.pod.info.wizard',
'context': {'active_id': self.ids},
'views': [[self.env.ref('ccs_base.view_batch_get_lastmile_pod_info_wizard_form').id, "form"]],
'target': 'new',
}
def action_create_temu_bl(self): def action_create_temu_bl(self):
""" """
创建temu提单 创建temu提单
...@@ -1267,20 +1283,19 @@ class CcBL(models.Model): ...@@ -1267,20 +1283,19 @@ class CcBL(models.Model):
'target': 'new' 'target': 'new'
} }
def action_batch_download_pod(self): def action_batch_download_pod(self, pod_name=''):
""" """
将选中的提单以提单号命名下载尾程交接POD文件,若文件有多个则以提单-1/-2进行命名下载,若选择多个提单,则将所有文件打包成zip,zip命名则以POD进行命名 将选中的提单以提单号命名下载尾程交接POD文件,若文件有多个则以提单-1/-2进行命名下载,若选择多个提单,则将所有文件打包成zip,zip命名则以POD进行命名
""" """
# 检查是否有选中的提单 # 检查是否有选中的提单
if not self: if not self:
raise UserError(_('Please select at least one bill of loading.')) raise UserError(_('Please select at least one bill of loading.'))
# 检查是否有尾程交接POD文件 # 检查是否有尾程交接POD文件或货站提货POD文件
fix_name = '尾程交接POD(待大包数量和箱号)'
has_files = self.env['cc.clearance.file'].search_count( has_files = self.env['cc.clearance.file'].search_count(
[('bl_id', 'in', self.ids), ('file_name', '=', fix_name), ('file', '!=', False)]) [('bl_id', 'in', self.ids), ('file_name', '=', pod_name), ('file', '!=', False)])
if not has_files: if not has_files:
raise UserError(_('Please configure the tail-end handover POD file of the bill of loading first.')) raise UserError(_('Please configure %s file of the bill of loading first.') % pod_name)
return self.action_download_pod() return self.action_download_pod(pod_name)
# 增加一个清关进度的业务对象,继承自models.Model, 用于管理业务数据.业务数据包括提单号、清关节点(业务对象)、进度日期、进度描述、更新人 # 增加一个清关进度的业务对象,继承自models.Model, 用于管理业务数据.业务数据包括提单号、清关节点(业务对象)、进度日期、进度描述、更新人
......
...@@ -118,19 +118,17 @@ class OrderStateChangeRule(models.Model): ...@@ -118,19 +118,17 @@ class OrderStateChangeRule(models.Model):
file_obj.is_upload = False file_obj.is_upload = False
file_obj.action_sync() file_obj.action_sync()
def upload_pod_attachment(self, bl_obj, name, data): def upload_pod_attachment(self, bl_obj, name, data,file_name='货站提货POD'):
"""尾程交接POD(待大包数量和箱号) 文件上传与同步""" """尾程交接POD(待大包数量和箱号)/货站提货POD 文件上传与同步"""
arr = [ arr = [
{ {
'file_name': '尾程交接POD(待大包数量和箱号)', 'file_name': file_name,
'file': base64.encodebytes(data), 'file': base64.encodebytes(data),
'attachment_name': name, 'attachment_name': name,
'is_upload': False, 'is_upload': False,
'bl_id': bl.id 'bl_id': bl.id
} for bl in bl_obj } for bl in bl_obj
] ]
# file_objs = self.env['cc.clearance.file'].sudo().search([('file_name', '=', '尾程交接POD(待大包数量和箱号)'),
# ('bl_id', 'in', bl_obj.ids)])
file_objs = self.env['cc.clearance.file'].sudo().create(arr) file_objs = self.env['cc.clearance.file'].sudo().create(arr)
# 最大重试次数 # 最大重试次数
max_retries = 2 max_retries = 2
...@@ -138,10 +136,6 @@ class OrderStateChangeRule(models.Model): ...@@ -138,10 +136,6 @@ class OrderStateChangeRule(models.Model):
retries = 0 retries = 0
while retries <= max_retries: while retries <= max_retries:
try: try:
# 设置文件内容
# file_obj.file = base64.encodebytes(data)
# file_obj.attachment_name = name
# file_obj.is_upload = False # 确保文件状态是未上传
# 尝试上传操作 # 尝试上传操作
file_obj.action_sync() file_obj.action_sync()
# 检查是否上传成功,假设 is_upload 为 False 表示上传失败 # 检查是否上传成功,假设 is_upload 为 False 表示上传失败
......
...@@ -8,6 +8,7 @@ batch_update_transfer_bl_no_wizard_group_user,batch_update_transfer_bl_no_wizard ...@@ -8,6 +8,7 @@ batch_update_transfer_bl_no_wizard_group_user,batch_update_transfer_bl_no_wizard
bl_done_wizard_group_user,bl_done_wizard_group_user,ccs_base.model_bl_done_wizard,base.group_user,1,1,1,1 bl_done_wizard_group_user,bl_done_wizard_group_user,ccs_base.model_bl_done_wizard,base.group_user,1,1,1,1
batch_get_pod_info_wizard_group_user,batch_get_pod_info_wizard_group_user,ccs_base.model_batch_get_pod_info_wizard,base.group_user,1,1,1,1 batch_get_pod_info_wizard_group_user,batch_get_pod_info_wizard_group_user,ccs_base.model_batch_get_pod_info_wizard,base.group_user,1,1,1,1
access_group_user_common_common,access_group_user_common_common,model_common_common,base.group_user,1,1,1,1 access_group_user_common_common,access_group_user_common_common,model_common_common,base.group_user,1,1,1,1
batch_get_lastmile_pod_info_wizard_group_user,batch_get_lastmile_pod_info_wizard_group_user,ccs_base.model_batch_get_lastmile_pod_info_wizard,base.group_user,1,1,1,1
access_cc_node_base.group_user,cc_node base.group_user,ccs_base.model_cc_node,base.group_user,1,0,0,0 access_cc_node_base.group_user,cc_node base.group_user,ccs_base.model_cc_node,base.group_user,1,0,0,0
......
...@@ -412,9 +412,9 @@ ...@@ -412,9 +412,9 @@
</field> </field>
</record> </record>
<!-- 获取尾程POD --> <!-- 获取货站提货POD -->
<record id="bl_get_pod_info_server_action" model="ir.actions.server"> <record id="bl_get_pod_info_server_action" model="ir.actions.server">
<field name="name">Batch Get POD Info</field> <field name="name">Batch Get PickUp POD Info</field>
<field name="model_id" ref="model_cc_bl"/> <field name="model_id" ref="model_cc_bl"/>
<field name="binding_model_id" ref="model_cc_bl"/> <field name="binding_model_id" ref="model_cc_bl"/>
<field name="state">code</field> <field name="state">code</field>
...@@ -426,10 +426,23 @@ ...@@ -426,10 +426,23 @@
</field> </field>
</record> </record>
<!-- 获取尾程快递POD -->
<record id="bl_get_delivery_pod_info_server_action" model="ir.actions.server">
<field name="name">Batch Get Last Mile POD Info</field>
<field name="model_id" ref="model_cc_bl"/>
<field name="binding_model_id" ref="model_cc_bl"/>
<field name="state">code</field>
<field name="binding_view_types">list,form</field>
<field name="groups_id" eval="[(4, ref('ccs_base.group_clearance_of_customs_user'))]"/>
<field name="code">
if records:
action = records.action_batch_get_last_mile_pod_info()
</field>
</record>
<!-- 下载POD --> <!-- 下载货站提货POD-->
<record id="bl_download_pod_server_action" model="ir.actions.server"> <record id="bl_download_pod_server_action" model="ir.actions.server">
<field name="name">Batch Download POD</field> <field name="name">Batch Download PickUp POD</field>
<field name="model_id" ref="model_cc_bl"/> <field name="model_id" ref="model_cc_bl"/>
<field name="binding_model_id" ref="model_cc_bl"/> <field name="binding_model_id" ref="model_cc_bl"/>
<field name="state">code</field> <field name="state">code</field>
...@@ -437,8 +450,21 @@ ...@@ -437,8 +450,21 @@
<field name="groups_id" eval="[(4, ref('ccs_base.group_clearance_of_customs_user'))]"/> <field name="groups_id" eval="[(4, ref('ccs_base.group_clearance_of_customs_user'))]"/>
<field name="code"> <field name="code">
if records: if records:
action = records.action_batch_download_pod() action = records.action_batch_download_pod('货站提货POD')
</field> </field>
</record> </record>
<!-- 下载尾程交接POD -->
<record id="bl_download_delivery_pod_server_action" model="ir.actions.server">
<field name="name">Batch Download Last Mile POD</field>
<field name="model_id" ref="model_cc_bl"/>
<field name="binding_model_id" ref="model_cc_bl"/>
<field name="state">code</field>
<field name="binding_view_types">list,form</field>
<field name="groups_id" eval="[(4, ref('ccs_base.group_clearance_of_customs_user'))]"/>
<field name="code">
if records:
action = records.action_batch_download_pod(pod_name='尾程交接POD(待大包数量和箱号)')
</field>
</record>
</odoo> </odoo>
\ No newline at end of file
...@@ -8,4 +8,6 @@ from . import update_bl_status_wizard ...@@ -8,4 +8,6 @@ from . import update_bl_status_wizard
from . import batch_update_transfer_bl_no_wizard from . import batch_update_transfer_bl_no_wizard
from . import bl_done_wizard from . import bl_done_wizard
from . import batch_get_pod_info_wizard from . import batch_get_pod_info_wizard
from . import batch_get_lastmile_pod_info_wizard
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import base64
import json
import logging
import time
from datetime import datetime, timedelta
import requests
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
_logger = logging.getLogger(__name__)
class BatchGetLastMilePodInfoWizard(models.TransientModel):
_name = 'batch.get.lastmile.pod.info.wizard'
_description = 'Batch Get Last Mile POD Info Wizard' # 批量获取尾程POD信息向导
def get_order(self):
"""
得到单据
:return:
"""
order_id = self._context.get('active_id')
if type(order_id) != list:
order_id = [self._context.get('active_id')]
return self.env['cc.bl'].browse(order_id)
get_last_mile_pod = fields.Boolean(
string='Upload Last Mile POD', # 上传到尾程交接POD(待大包数量和箱号)
default=True
)
sync_last_mile_pod = fields.Boolean(
string='Sync Last Mile POD',
default=True,
help='Whether to sync last mile POD information'
)
show_sync_last_mile_pod = fields.Boolean(
string='Show Sync Last Mile POD',
compute='_compute_show_sync_last_mile_pod',
store=False
)
generate_successful_processed = fields.Boolean(
string='Generate successful processed',
default=False,
help='Show confirm button when there are successful processed files'
)
show_error_message = fields.Text(
string='Show Error Message',
help='Show error message'
)
# PDF相关字段
pdf_file = fields.Binary(string='PDF文件', help='涂抹后的所有pdf文件合并为一个pdf文件')
pdf_filename = fields.Char(string='PDF文件名称')
processed_files_data = fields.Text(string='已处理的文件数据', help='存储已处理的文件信息(JSON格式)')
def _get_bill_numbers(self, bl_objs):
_logger.info(f"开始预览操作,提单数量: {len(bl_objs)}")
# 调用接口获取提单pdf文件
pdf_file_arr = self._get_pdf_file_arr(bl_objs)
# 处理PDF文件,匹配提单对象
processed_files = self._match_bl_by_file_name(pdf_file_arr, bl_objs)
# 把没有匹配到文件的进行提示
error_bl = []
matched_bl_ids = [f['bl'].id for f in processed_files if f.get('bl')]
for bl in bl_objs:
if bl.id not in matched_bl_ids:
error_bl.append(bl)
if error_bl:
logging.info('%s个提单没有获取到尾程快递POD文件' % len(error_bl))
if not self._context.get('is_skip_raise_error'):
self.show_error_message = '%s 没有获取到尾程快递POD文件' % (
', '.join([bl.bl_no for bl in error_bl]))
return processed_files
def action_preview(self):
"""
预览操作:获取PDF、合并PDF并显示
"""
self.show_error_message = False
try:
bl_objs = self.get_order() # 获取提单
# 处理PDF文件,匹配提单对象
processed_files = self._get_bill_numbers(bl_objs)
if processed_files:
self.processed_files_data = self._serialize_processed_files(processed_files)
successful_bl_data = []
for file_info in processed_files:
if file_info.get('bl_no'):
bl_no = file_info['bl_no']
successful_bl_data.append({
'bl_no': bl_no
})
self._merge_pdf_files(processed_files)
# 返回表单视图
return {
'type': 'ir.actions.act_window',
'name': _('Batch Get Last Mile POD Info Preview'),
'res_model': 'batch.get.lastmile.pod.info.wizard',
'view_mode': 'form',
'res_id': self.id,
'target': 'new',
'context': {'active_id': bl_objs.ids if bl_objs else False},
}
except Exception as e:
_logger.error(f"预览操作失败: {str(e)}")
self.show_error_message = _('预览操作失败: %s') % str(e)
return {
'type': 'ir.actions.act_window',
'name': _('Batch Get Last Mile POD Info Preview'),
'res_model': 'batch.get.lastmile.pod.info.wizard',
'view_mode': 'form',
'res_id': self.id,
'target': 'new',
'context': {'active_id': self._context.get('active_id', [])},
}
def confirm(self):
"""
Confirm operation # 确认操作
"""
# 计算整个过程的耗时
start_time = time.time()
self.show_error_message = False
bl_objs = self.get_order()
if self.get_last_mile_pod:
# 优先使用已处理的文件数据(预览时已处理)
processed_files = None
if self.processed_files_data:
processed_files = self._deserialize_processed_files(self.processed_files_data)
_logger.info(f"使用已处理的文件数据,共 {len(processed_files)} 个文件")
# 检查文件数据是否完整
valid_files = []
for file_info in processed_files:
if file_info.get('file_data'):
valid_files.append(file_info)
else:
_logger.warning(f"提单 {file_info.get('bl', {}).get('bl_no', 'Unknown')} 的文件数据为空")
processed_files = valid_files
_logger.info(f"有效文件数量: {len(processed_files)}")
# 直接根据processed_files中的processing_failed标志筛选成功处理的文件,无需从文本解析
successful_processed_files = []
if processed_files:
for file_info in processed_files:
# 检查是否有bl对象和有文件数据
if not file_info.get('bl'):
continue
file_data = file_info.get('file_data', '')
# 检查处理是否失败(通过processing_failed标记)
processing_failed = file_info.get('processing_failed', False)
# 如果有文件数据且未标记为失败,则认为处理成功
if file_data and not processing_failed:
successful_processed_files.append(file_info)
_logger.info(f"从{len(processed_files)}个文件中筛选出{len(successful_processed_files)}个成功处理的文件")
else:
_logger.warning("没有找到已处理的文件数据")
# 回写到附件信息
if successful_processed_files and (self.sync_last_mile_pod or self.get_last_mile_pod):
# 回写PDF文件到清关文件
self._write_pdf_file(successful_processed_files)
# 再同步和回写
if self.sync_last_mile_pod and successful_processed_files:
self._sync_last_mile_pod(successful_processed_files)
# 清理所有临时文件(包括数据库记录和物理文件),不能删,不然回写的时候没有文件了
self._cleanup_temp_attachments(bl_objs)
end_time = time.time()
_logger.info(f"批量获取POD信息操作完成,耗时: {end_time - start_time}秒")
if self.show_error_message and not self._context.get('is_skip_raise_error'):
return {
'type': 'ir.actions.act_window',
'res_model': 'batch.get.lastmile.pod.info.wizard',
'name': _('Batch Get Last Mile POD Info Preview'),
'view_mode': 'form',
'res_id': self.id,
'target': 'new',
'context': {'default_show_error_message': self.show_error_message,
'active_id': bl_objs.ids if bl_objs else False},
}
# 写一个方法调接口获取提单pdf文件
def _get_pdf_file_arr(self, bl_objs):
"""
从API获取PDF文件
"""
bill_numbers = [self.env['common.common'].sudo().process_match_str(bl.bl_no) for bl in bl_objs]
# 调用API获取PDF文件
api_url = self.env['ir.config_parameter'].sudo().get_param('last_mile_pod_api_url',
'http://172.104.52.150:7002')
if not api_url:
raise ValidationError(_('API URL not configured'))
# 构建请求数据
request_data = {
"bill_numbers": bill_numbers
}
try:
response = requests.post(
f"{api_url}/api/pod/pdfs",
headers={'Content-Type': 'application/json', 'Accept': 'application/json'},
json=request_data,
timeout=30
)
if response.status_code == 200:
result = response.json()
# 检查API响应结构
if not result:
raise ValidationError(_('API returned empty response'))
if not result.get('success'):
error_msg = result.get('message', 'Unknown error')
raise ValidationError(_('API returned error: %s') % error_msg)
# 处理结果数据
results = result.get('results', [])
if not results:
raise ValidationError(_('No PDF files found in API response'))
# 构建PDF文件数组
pdf_file_arr = []
for result_item in results:
if result_item.get('success'):
# 验证必要字段
bill_number = result_item.get('bill_number')
filename = result_item.get('filename')
base64_data = result_item.get('base64')
pdf_file_arr.append({
'bl_no': bill_number,
'file_name': filename,
'file_data': base64_data
})
return pdf_file_arr
else:
raise ValidationError(_('Failed to get PDF file from API: %s') % response.text)
except requests.exceptions.RequestException as e:
raise ValidationError(_('API request failed: %s') % str(e))
def _write_pdf_file(self, processed_files, fix_name='尾程交接POD(待大包数量和箱号)'):
"""
Write PDF file to clearance files # 回写PDF文件到清关文件
:param processed_files: 处理后的文件数组
:param fix_name:
"""
for file_info in processed_files:
if not file_info.get('bl'):
_logger.warning("跳过没有提单信息的文件")
continue
bl = file_info['bl']
file_name = file_info.get('file_name', '')
file_data = file_info.get('file_data', '')
if not file_data:
continue
# 如果有文件为空的就回写,否则就创建新的清关文件记录
clearance_file = self.env['cc.clearance.file'].search(
[('bl_id', '=', bl.id), ('file_name', '=', fix_name), ('file', '=', False)], limit=1)
if clearance_file:
clearance_file.write({
'attachment_name': file_name,
'file': file_data
})
_logger.info(f"更新清关文件记录: 提单 {bl.bl_no}")
else:
# 创建新的清关文件记录
clearance_file = self.env['cc.clearance.file'].create({
'bl_id': bl.id,
'file_name': fix_name,
'attachment_name': file_name,
'file': file_data
})
_logger.info(f"创建新的清关文件记录: 提单 {bl.bl_no}")
file_info['clearance_file'] = clearance_file
def _merge_pdf_files(self, processed_files):
"""
合并所有涂抹后的PDF文件为一个PDF并保存到pdf_file字段
使用临时文件方式减少内存占用
:param processed_files: 处理后的文件数组
"""
import fitz # PyMuPDF
from datetime import datetime
import tempfile
import os
import gc
temp_file_path = None
try:
# 过滤有效的PDF文件
valid_files = []
for file_info in processed_files:
if file_info.get('bl_no') and file_info.get('file_data'):
valid_files.append(file_info)
if not valid_files:
_logger.warning("没有有效的PDF文件可以合并")
return
# 如果只有一个PDF文件,直接使用,不需要合并
if len(valid_files) == 1:
file_info = valid_files[0]
bl = file_info['bl']
bl_no = bl.bl_no
file_data = file_info['file_data']
file_name = file_info.get('file_name', f"{bl_no}.pdf")
# 生成文件名(包含提单号和日期)
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
pdf_filename = f"POD文件_{bl_no}_{timestamp}.pdf"
# 直接保存到字段
self.write({
'pdf_file': file_data,
'pdf_filename': pdf_filename
})
_logger.info(f"单个PDF文件直接保存: {pdf_filename}")
return
# 多个PDF文件需要合并
_logger.info(f"开始合并 {len(valid_files)} 个PDF文件")
# 使用临时文件方式合并,避免内存占用过大
temp_file_path = tempfile.mktemp(suffix='.pdf')
merged_pdf = fitz.open()
bl_numbers = []
# 遍历所有处理后的PDF文件,分批处理以减少内存占用
batch_size = 5 # 每批处理5个PDF
for batch_start in range(0, len(valid_files), batch_size):
batch_files = valid_files[batch_start:batch_start + batch_size]
_logger.info(f"处理第 {batch_start // batch_size + 1} 批,共 {len(batch_files)} 个PDF")
for file_info in batch_files:
bl = file_info['bl']
bl_no = bl.bl_no
file_data = file_info['file_data']
bl_numbers.append(bl_no)
source_pdf = None
try:
# 将base64数据转换为二进制
pdf_binary = base64.b64decode(file_data)
# 打开PDF文档
source_pdf = fitz.open(stream=pdf_binary, filetype="pdf")
# 将源PDF的所有页面插入到合并的PDF中
merged_pdf.insert_pdf(source_pdf)
_logger.info(f"已添加提单 {bl_no} 的PDF到合并文档({len(source_pdf)} 页)")
except Exception as e:
_logger.error(f"合并提单 {bl_no} 的PDF失败: {str(e)}")
continue
finally:
# 立即释放资源
if source_pdf:
source_pdf.close()
gc.collect() # 强制垃圾回收
# 每批处理完后,保存到临时文件并释放内存
if batch_start + batch_size < len(valid_files):
# 保存当前合并结果到临时文件
merged_pdf.save(temp_file_path, garbage=4, deflate=True, clean=True)
merged_pdf.close()
# 重新打开临时文件继续合并
merged_pdf = fitz.open(temp_file_path)
gc.collect()
# 如果有页面,保存合并后的PDF
if len(merged_pdf) > 0:
# 使用临时文件保存,减少内存占用
if not temp_file_path:
temp_file_path = tempfile.mktemp(suffix='.pdf')
merged_pdf.save(temp_file_path, garbage=4, deflate=True, clean=True)
merged_pdf.close()
# 从临时文件读取并转换为base64
with open(temp_file_path, 'rb') as f:
pdf_data = f.read()
# 转换为base64
merged_pdf_base64 = base64.b64encode(pdf_data).decode('utf-8')
# 清理临时数据
del pdf_data
gc.collect()
# 生成文件名(包含提单号和日期)
bl_numbers_str = '_'.join(bl_numbers[:5]) # 最多显示5个提单号
if len(bl_numbers) > 5:
bl_numbers_str += f'_等{len(bl_numbers)}个'
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
pdf_filename = f"合并POD文件_{bl_numbers_str}_{timestamp}.pdf"
# 保存到字段
self.write({
'pdf_file': merged_pdf_base64,
'pdf_filename': pdf_filename
})
# 清理base64数据
del merged_pdf_base64
gc.collect()
_logger.info(f"成功合并 {len(bl_numbers)} 个PDF文件,文件名: {pdf_filename}")
else:
_logger.warning("没有有效的PDF文件可以合并")
except Exception as e:
_logger.error(f"合并PDF文件失败: {str(e)}")
finally:
# 清理临时文件
if temp_file_path and os.path.exists(temp_file_path):
try:
os.remove(temp_file_path)
_logger.info(f"已删除临时文件: {temp_file_path}")
except Exception as e:
_logger.warning(f"删除临时文件失败: {str(e)}")
def _match_bl_by_file_name(self, pdf_file_arr, bl_obj):
"""
Match BL by file name and return processed array # 根据文件名匹配提单并返回处理后的数组
:param pdf_file_arr: PDF文件数组 [{'bill_number':'', 'filename':'', 'file_data':''}]
:return: 处理后的数组 [{'bl': bl_obj, 'file_name': 'xxx.pdf', 'file_data': 'xxx', 'matched': True/False}]
"""
processed_files = []
for bl in bl_obj:
select_bl_no = self.env['common.common'].sudo().process_match_str(bl.bl_no)
for pdf_file in pdf_file_arr:
file_name = pdf_file.get('file_name') # 获取文件名
file_data = pdf_file.get('file_data') # 获取文件数据
bl_no = self.env['common.common'].sudo().process_match_str(pdf_file.get('bl_no')) # 获取提单号
if bl_no and select_bl_no == bl_no:
# 构建处理后的文件信息
processed_file = {
'bl': bl,
'file_name': file_name,
'file_data': file_data,
'bl_no': bl.bl_no,
'processing_failed': False,
}
processed_files.append(processed_file)
break
return processed_files
def _sync_last_mile_pod(self, processed_files):
"""
Sync last mile POD information
:param processed_files: 处理后的文件数组
"""
is_fail = [] # 同步失败
for file_info in processed_files:
if not file_info['bl']:
continue
bl = file_info['bl']
if bl.bl_type == 'temu':
continue
# 查找清关文件并执行同步
clearance_file = file_info.get('clearance_file')
if clearance_file:
try:
clearance_file.action_sync() # 同步尾程交接POD
except Exception as e:
logging.info('_sync_last_mile_pod:%s' % e)
is_fail = True
break
_logger.info(f"Successfully synced POD for BL {bl.bl_no}")
if is_fail:
raise ValidationError('本次同步失败,请重试!')
def get_date_sync_match_node(self, processed_files):
"""
Sync matched node based on POD file, extract time from red boxes # 根据POD文件同步匹配节点
:param processed_files: 处理后的文件数组
"""
ship_packages, pod_node_id = self.get_detail_info(processed_files)
self._sync_match_node(ship_packages, pod_node_id)
def get_detail_info(self, processed_files):
"""
获取提单对应的节点以及时间
:param processed_files: 处理后的文件数组(应该已经包含valid_packages字段,只包含满足条件的小包)
:return: 提单对应的节点以及节点操作时间
"""
ship_packages = []
# 查找对应的清关节点(勾选了POD节点匹配的节点)
pod_node = self.env['cc.node'].search([
('is_pod_node', '=', True),
('node_type', '=', 'package')
], limit=1)
for file_info in processed_files:
if not file_info.get('bl'):
continue
bl = file_info['bl']
if not pod_node:
continue
# 只使用满足条件的小包(经过验证的valid_packages)
valid_packages = file_info.get('valid_packages', [])
if not valid_packages:
_logger.warning(f"提单 {bl.bl_no} 没有满足条件的小包,跳过节点推送")
continue
# 从valid_packages中提取小包ID(记录集对象或列表)
if hasattr(valid_packages, 'ids'):
# 如果是记录集对象,直接获取IDs
valid_package_ids = valid_packages.ids
elif isinstance(valid_packages, list):
# 如果是列表,提取每个对象的ID
valid_package_ids = [p.id for p in valid_packages if hasattr(p, 'id')]
else:
_logger.warning(f"提单 {bl.bl_no} valid_packages格式不正确: {type(valid_packages)}")
valid_package_ids = []
_logger.info(f"提单 {bl.bl_no} 满足条件的小包ID: {valid_package_ids} (共 {len(valid_package_ids)} 个)")
if not valid_package_ids:
_logger.warning(f"提单 {bl.bl_no} 满足条件的小包ID为空,跳过节点推送")
continue
# 从PDF文件提取红色框的时间
file_data = file_info.get('file_data')
if not file_data:
logging.info(f"提单 {bl.bl_no} 没有文件数据")
continue
ship_packages.append({
'bl_id': bl.id,
'id': valid_package_ids, # 只包含满足条件的小包ID
'tally_time': str(file_info.get('tally_time'))
})
return ship_packages, pod_node.id
def _sync_match_node(self, ship_packages, pod_node_id):
"""
同步匹配节点
:param ship_packages: 提单对应的小包以及节点信息
:param pod_node_id: 尾程POD节点匹配的节点ID
"""
# 若该提单里已有对应的小包已有节点推送日志,则不再重新推送;
_logger.info(f"同步匹配节点,提单: {ship_packages}, 节点: {pod_node_id}")
if ship_packages:
bl_objs = self.env['cc.bl'].sudo().search(
[('id', 'in', [ship_package.get('bl_id') for ship_package in ship_packages])])
redis_conn = self.env['common.common'].sudo().get_redis()
if redis_conn and redis_conn != 'no' and pod_node_id:
redis_conn.lpush('mail_push_package_list', json.dumps(
{'ids': bl_objs.ids, 'ship_packages': str(ship_packages), 'action_type': 'push_match_node',
'user_login': self.env.user.login,
'pod_node_id': pod_node_id}))
def _cleanup_temp_attachments(self, bl_objs=None):
"""
清理与当前向导相关的临时附件,包括服务器和本地开发环境的物理文件
"""
try:
attachments = self.env['ir.attachment'].search([
('res_model', '=', bl_objs[0]._name),
('res_id', 'in', bl_objs.ids),
('name', 'like', 'temp_pod_%')
])
if attachments:
# 删除数据库记录
attachments.unlink()
except Exception as e:
_logger.error(f"清理临时附件失败: {str(e)}")
def _serialize_processed_files(self, processed_files):
"""
将processed_files序列化为JSON字符串,文件数据存储到临时附件中
:param processed_files: 处理后的文件数组
:return: JSON字符串(只包含引用信息,不包含文件数据)
"""
# 注意:不在这里清理临时附件,因为预览时需要保留附件数据
# 只有在确认操作完成后才清理临时附件
serialized_data = []
for file_info in processed_files:
if not file_info.get('bl'):
continue
bl = file_info['bl']
file_data = file_info.get('file_data', '')
file_name = file_info.get('file_name', f"{bl.bl_no}.pdf")
# 将文件数据存储到临时附件中
attachment_id = None
if file_data:
try:
attachment = self.env['ir.attachment'].create({
'name': f"temp_pod_{bl.bl_no}_{int(time.time())}.pdf",
'datas': file_data,
'type': 'binary',
'res_model': bl._name,
'res_id': bl.id,
})
attachment_id = attachment.id
_logger.info(f"已创建临时附件存储文件: {attachment.name}, ID: {attachment_id}")
except Exception as e:
_logger.error(f"创建临时附件失败: {str(e)}")
else:
_logger.warning(f"提单 {bl.bl_no} 的文件数据为空,无法创建附件")
data = {
'bl_id': bl.id,
'bl_no': bl.bl_no,
'file_name': file_name,
'attachment_id': attachment_id, # 存储附件ID而不是文件数据
}
# OCR文本数据量小,可以直接存储
if 'ocr_texts' in file_info:
data['ocr_texts'] = file_info['ocr_texts']
# 保存valid_packages的ID列表(记录集对象无法直接序列化)
if 'valid_packages' in file_info and file_info['valid_packages']:
valid_packages = file_info['valid_packages']
# 如果是记录集对象,提取ID列表
if hasattr(valid_packages, 'ids'):
data['valid_package_ids'] = valid_packages.ids
elif isinstance(valid_packages, list):
# 如果是列表,提取每个对象的ID
data['valid_package_ids'] = [p.id for p in valid_packages if hasattr(p, 'id')]
else:
data['valid_package_ids'] = []
_logger.info(
f"序列化时保存valid_packages: 提单 {bl.bl_no}, 满足条件的小包ID: {data['valid_package_ids']}")
serialized_data.append(data)
return json.dumps(serialized_data, ensure_ascii=False)
def _deserialize_processed_files(self, json_data):
"""
将JSON字符串反序列化为processed_files(从附件中读取文件数据)
:param json_data: JSON字符串
:return: 处理后的文件数组
"""
if not json_data:
return []
try:
serialized_data = json.loads(json_data)
processed_files = []
for data in serialized_data:
bl_id = data.get('bl_id')
attachment_id = data.get('attachment_id')
if bl_id:
bl = self.env['cc.bl'].browse(bl_id)
if bl.exists():
# 从附件中读取文件数据
file_data = ''
if attachment_id:
try:
attachment = self.env['ir.attachment'].browse(attachment_id)
if attachment.exists():
# attachment.datas 已经是 base64 编码的字符串
file_data = attachment.datas
_logger.info(
f"从附件读取文件: {attachment.name}, ID: {attachment_id}, 数据长度: {len(file_data) if file_data else 0}")
else:
_logger.warning(f"附件不存在: {attachment_id}")
except Exception as e:
_logger.error(f"读取附件失败: {str(e)}")
else:
_logger.warning(f"提单 {bl.bl_no} 没有附件ID,无法读取文件数据")
file_info = {
'bl': bl,
'bl_no': data.get('bl_no', ''),
'file_name': data.get('file_name', ''),
'file_data': file_data,
}
# 如果有OCR文本,也恢复
if 'ocr_texts' in data:
file_info['ocr_texts'] = data['ocr_texts']
# 恢复valid_packages(从ID列表重建记录集对象)
if 'valid_package_ids' in data and data['valid_package_ids']:
valid_package_ids = data['valid_package_ids']
# 重建记录集对象
valid_packages = self.env['cc.ship.package'].browse(valid_package_ids)
file_info['valid_packages'] = valid_packages
_logger.info(
f"反序列化时恢复valid_packages: 提单 {bl.bl_no}, 满足条件的小包ID: {valid_package_ids}, 数量: {len(valid_packages)}")
processed_files.append(file_info)
return processed_files
except Exception as e:
_logger.error(f"反序列化processed_files失败: {str(e)}")
return []
@api.model
def cron_cleanup_temp_attachments(self):
"""
定时清理向导生成的临时附件
每天早上8点执行,删除1天之前创建的temp_pod_开头的附件
"""
try:
# 计算1天前的时间(前一天23:59:59)
today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
one_day_ago = today + timedelta(days=2) - timedelta(seconds=1) # 前一天23:59:59
_logger.info(f"开始执行定时清理临时附件任务,清理时间点: {one_day_ago.strftime('%Y-%m-%d %H:%M:%S')}")
# 构建SQL查询
sql_query = """
SELECT id, name, res_model, res_id, create_date, store_fname
FROM ir_attachment
WHERE res_model = 'batch.get.pod.info.wizard'
AND create_date < '%s'
ORDER BY create_date DESC
""" % (one_day_ago.strftime('%Y-%m-%d %H:%M:%S'))
# 执行SQL查询
self.env.cr.execute(sql_query)
sql_results = self.env.cr.fetchall()
# 将SQL结果转换为Odoo记录集
if sql_results:
attachment_ids = [result[0] for result in sql_results]
temp_attachments = self.env['ir.attachment'].sudo().browse(attachment_ids)
attachment_count = len(temp_attachments)
_logger.info(f"找到 {attachment_count} 个{one_day_ago.strftime('%Y-%m-%d')}之前创建的临时附件,开始清理")
# 删除物理文件
for attachment in temp_attachments:
try:
# 获取附件的物理文件路径
if hasattr(attachment, 'store_fname') and attachment.store_fname:
# Odoo 12+ 使用 store_fname
file_path = attachment.store_fname
elif hasattr(attachment, 'datas_fname') and attachment.datas_fname:
# 旧版本使用 datas_fname
file_path = attachment.datas_fname
else:
# 尝试从 name 字段构建路径
file_path = attachment.name
# 构建完整的文件路径
import os
from odoo.tools import config
# 获取 Odoo 数据目录
data_dir = config.filestore(self.env.cr.dbname)
if data_dir and file_path:
full_path = os.path.join(data_dir, file_path)
if os.path.exists(full_path):
os.remove(full_path)
except Exception as file_e:
_logger.warning(f"删除物理文件失败 {attachment.name}: {str(file_e)}")
# 删除数据库记录
temp_attachments.unlink()
except Exception as e:
_logger.error(f"定时清理临时附件失败: {str(e)}")
@api.depends()
def _compute_show_sync_last_mile_pod(self):
for wizard in self:
bls = wizard.get_order()
if not bls:
wizard.show_sync_last_mile_pod = False
continue
has_non_temu = any(bl.bl_type != 'temu' for bl in bls)
wizard.show_sync_last_mile_pod = has_non_temu
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Batch Get Last Mile POD Info Wizard Form View 批量获取尾程POD信息向导表单视图 -->
<record id="view_batch_get_lastmile_pod_info_wizard_form" model="ir.ui.view">
<field name="name">batch.get.lastmile.pod.info.wizard.form</field>
<field name="model">batch.get.lastmile.pod.info.wizard</field>
<field name="arch" type="xml">
<form string="Batch Get Last Mile POD Info"> <!-- 批量获取尾程POD信息 -->
<sheet>
<div class="oe_title" attrs="{'invisible': [('pdf_file','!=',False)]}">
<h3>Click to preview and start downloading the file</h3> <!-- 点击预览开始获取文件 -->
</div>
<group>
<group>
<field name="get_last_mile_pod" widget="boolean_toggle"
attrs="{'invisible': [('pdf_file','=',False)]}"/>
<field name="sync_last_mile_pod" widget="boolean_toggle"
attrs="{'invisible': ['|', ('pdf_file','=',False), ('show_sync_last_mile_pod','=',False)]}"/>
<field name="show_sync_last_mile_pod" invisible="1"/>
</group>
</group>
<group attrs="{'invisible': ['|', ('pdf_file', '=', False), ('show_error_message', '=', False)]}">
<field name="generate_successful_processed" widget="boolean_toggle"/>
</group>
<div class="alert alert-info" role="alert" attrs="{'invisible': [('pdf_file', '=', False)]}">
<strong>Description:</strong> <!-- 说明: -->
<ul>
<li>
<strong>Upload to Last Mile POD:</strong>
Write fetched PDF to BL attachments with name "Last Mile POD (pending big package
count and box no.)"
</li>
<li attrs="{'invisible': [('show_sync_last_mile_pod','=',False)]}">
<strong>Sync to TK:</strong>
Sync the attachment information to TK.
</li>
</ul>
</div>
<div class="alert alert-danger" role="alert"
attrs="{'invisible': [('show_error_message', '=', False)]}">
<field name="show_error_message"/>
</div>
<div>
<field name="pdf_file" filename="pdf_filename" widget="pdf_viewer" readonly="1"
attrs="{'invisible': [('pdf_file', '=', False)]}"/>
</div>
<footer>
<!-- 预览按钮:处理PDF并显示合并后的文件 -->
<button string="Preview" type="object" name="action_preview" class="btn-primary"
attrs="{'invisible': [('pdf_file', '!=', False)]}"/>
<!-- 确认按钮:使用已处理的文件数据进行回写 -->
<!-- 勾了上传或同步尾程POD信息,才显示确认按钮 -->
<button string="Confirm" type="object" name="confirm" class="btn-primary"
attrs="{'invisible': ['|', ('pdf_file','=',False), '&amp;', ('get_last_mile_pod','=',False), ('sync_last_mile_pod','=',False)]}"/>
</footer>
</sheet>
</form>
</field>
</record>
</data>
</odoo>
...@@ -19,7 +19,7 @@ _logger = logging.getLogger(__name__) ...@@ -19,7 +19,7 @@ _logger = logging.getLogger(__name__)
class BatchGetPodInfoWizard(models.TransientModel): class BatchGetPodInfoWizard(models.TransientModel):
_name = 'batch.get.pod.info.wizard' _name = 'batch.get.pod.info.wizard'
_description = 'Batch Get POD Info Wizard' # 批量获取POD信息向导 _description = 'Batch Get POD Info Wizard' # 批量获取货站提货POD信息向导
def get_order(self): def get_order(self):
""" """
...@@ -32,9 +32,9 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -32,9 +32,9 @@ class BatchGetPodInfoWizard(models.TransientModel):
return self.env['cc.bl'].browse(order_id) return self.env['cc.bl'].browse(order_id)
action_type = fields.Selection([ action_type = fields.Selection([
('获取尾程POD信息', '获取尾程POD信息'), ('获取货站提货POD信息', '获取货站提货POD信息'),
('创建temu提单', '创建temu提单'), ('创建temu提单', '创建temu提单'),
], string='Action Type', default='获取尾程POD信息') ], string='Action Type', default='获取货站提货POD信息')
# ============temu提单 批量创建操作相关字段============ # ============temu提单 批量创建操作相关字段============
# 客户:默认TEMU平台客户,任一一个,可修改 # 客户:默认TEMU平台客户,任一一个,可修改
...@@ -49,11 +49,11 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -49,11 +49,11 @@ class BatchGetPodInfoWizard(models.TransientModel):
string='BL Number', # 提单号 string='BL Number', # 提单号
help='Enter multiple BL numbers, one per line' # 输入多个BL号,每行一个 help='Enter multiple BL numbers, one per line' # 输入多个BL号,每行一个
) )
# 获取尾程POD信息☑️(默认勾选) # 获取货站提货POD信息☑️(默认勾选)
get_last_mile_pod = fields.Boolean( get_last_mile_pod = fields.Boolean(
string='Get Last Mile POD', # 获取尾程POD信息 string='Get PickUp POD', # 获取货站提货POD信息
default=True, default=True,
help='Whether to get last mile POD information' # 是否获取尾程POD信息 help='Whether to get pickup POD information' # 是否获取货站提货POD信息
) )
generate_successful_processed = fields.Boolean( generate_successful_processed = fields.Boolean(
string='生成成功涂抹的提单附件信息', # 生成成功涂抹的提单附件信息 string='生成成功涂抹的提单附件信息', # 生成成功涂抹的提单附件信息
...@@ -61,11 +61,11 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -61,11 +61,11 @@ class BatchGetPodInfoWizard(models.TransientModel):
help='勾选后显示确定按钮' help='勾选后显示确定按钮'
) )
# ===========提单获取尾程pod操作相关字段============ # ===========提单获取货站提货POD操作相关字段============
sync_last_mile_pod = fields.Boolean( sync_last_mile_pod = fields.Boolean(
string='Sync Last Mile POD', # 同步尾程POD string='Sync PickUp POD', # 同步货站提货POD
default=False, default=False,
help='Whether to sync last mile POD information' # 是否同步尾程POD信息 help='Whether to sync pickup POD information' # 是否同步货站提货POD信息
) )
remove_specified_text = fields.Boolean( remove_specified_text = fields.Boolean(
...@@ -90,7 +90,7 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -90,7 +90,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
sync_successful_processed = fields.Boolean( sync_successful_processed = fields.Boolean(
string='是否同步成功涂抹的提单', # 是否同步成功涂抹的提单 string='是否同步成功涂抹的提单', # 是否同步成功涂抹的提单
default=False, default=False,
help='勾选后显示同步尾程POD和同步匹配节点的字段以及确定按钮' # 勾选后显示同步尾程POD和同步匹配节点的字段以及确定按钮 help='勾选后显示同步货站提货POD和同步匹配节点的字段以及确定按钮' # 勾选后显示同步货站提货POD和同步匹配节点的字段以及确定按钮
) )
show_error_message = fields.Text( show_error_message = fields.Text(
...@@ -126,10 +126,10 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -126,10 +126,10 @@ class BatchGetPodInfoWizard(models.TransientModel):
预览操作:获取PDF、处理涂抹、合并PDF并显示 预览操作:获取PDF、处理涂抹、合并PDF并显示
""" """
action_type = self.action_type action_type = self.action_type
wizard_name = _('Batch Get POD Info') if action_type == '获取尾程POD信息' else _( wizard_name = _('Batch Get POD Info') if action_type == '获取货站提货POD信息' else _(
'Create TEMU Bill of Loading') 'Create TEMU Bill of Loading')
wizard_form_view = [[self.env.ref('ccs_base.view_batch_get_pod_info_wizard_form').id, wizard_form_view = [[self.env.ref('ccs_base.view_batch_get_pod_info_wizard_form').id,
"form"]] if action_type == '获取尾程POD信息' else [ "form"]] if action_type == '获取货站提货POD信息' else [
[self.env.ref('ccs_base.view_batch_create_and_get_pod_info_wizard_form').id, "form"]] [self.env.ref('ccs_base.view_batch_create_and_get_pod_info_wizard_form').id, "form"]]
self.show_error_message = False self.show_error_message = False
try: try:
...@@ -168,7 +168,7 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -168,7 +168,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
# 如果所有文件都成功了(没有失败的文件),自动勾选"是否同步成功涂抹的提单" # 如果所有文件都成功了(没有失败的文件),自动勾选"是否同步成功涂抹的提单"
if len(successful_files) == len(processed_files) and not failed_files and not self.show_error_message: if len(successful_files) == len(processed_files) and not failed_files and not self.show_error_message:
if action_type == '获取尾程POD信息': if action_type == '获取货站提货POD信息':
self.sync_successful_processed = True self.sync_successful_processed = True
_logger.info(f"所有提单都处理成功,自动勾选同步选项") _logger.info(f"所有提单都处理成功,自动勾选同步选项")
else: else:
...@@ -189,7 +189,7 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -189,7 +189,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
self.show_error_message = f"{existing_error}{success_msg}" self.show_error_message = f"{existing_error}{success_msg}"
_logger.info( _logger.info(
f"部分提单处理失败(成功:{len(successful_files)},失败:{len(failed_files)}),成功处理的提单号已显示") f"部分提单处理失败(成功:{len(successful_files)},失败:{len(failed_files)}),成功处理的提单号已显示")
if action_type == '获取尾程POD信息': if action_type == '获取货站提货POD信息':
self.sync_successful_processed = False self.sync_successful_processed = False
else: else:
self.generate_successful_processed = False self.generate_successful_processed = False
...@@ -211,14 +211,14 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -211,14 +211,14 @@ class BatchGetPodInfoWizard(models.TransientModel):
'bl_no': bl_no 'bl_no': bl_no
}) })
# 没有涂抹文字,所有文件都成功,自动勾选 # 没有涂抹文字,所有文件都成功,自动勾选
if action_type == '获取尾程POD信息': if action_type == '获取货站提货POD信息':
self.sync_successful_processed = True self.sync_successful_processed = True
_logger.info(f"未启用涂抹文字,所有提单都成功,自动勾选同步选项") _logger.info(f"未启用涂抹文字,所有提单都成功,自动勾选同步选项")
else: else:
self.generate_successful_processed = True self.generate_successful_processed = True
else: else:
self.processed_files_data = '' self.processed_files_data = ''
if action_type == '获取尾程POD信息': if action_type == '获取货站提货POD信息':
self.sync_successful_processed = False self.sync_successful_processed = False
else: else:
self.generate_successful_processed = False self.generate_successful_processed = False
...@@ -256,13 +256,13 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -256,13 +256,13 @@ class BatchGetPodInfoWizard(models.TransientModel):
start_time = time.time() start_time = time.time()
self.show_error_message = False self.show_error_message = False
action_type = self.action_type action_type = self.action_type
wizard_name = _('Batch Get POD Info') if action_type == '获取尾程POD信息' else _( wizard_name = _('Batch Get POD Info') if action_type == '获取货站提货POD信息' else _(
'Create TEMU Bill of Loading') 'Create TEMU Bill of Loading')
wizard_form_view = [[self.env.ref('ccs_base.view_batch_get_pod_info_wizard_form').id, wizard_form_view = [[self.env.ref('ccs_base.view_batch_get_pod_info_wizard_form').id,
"form"]] if action_type == '获取尾程POD信息' else [ "form"]] if action_type == '获取货站提货POD信息' else [
[self.env.ref('ccs_base.view_batch_create_and_get_pod_info_wizard_form').id, "form"]] [self.env.ref('ccs_base.view_batch_create_and_get_pod_info_wizard_form').id, "form"]]
bl_objs = self.get_bl_objs() bl_objs = self.get_bl_objs()
if action_type == '获取尾程POD信息' or (action_type == '创建temu提单' and self.get_last_mile_pod): if action_type == '获取货站提货POD信息' or (action_type == '创建temu提单' and self.get_last_mile_pod):
# 优先使用已处理的文件数据(预览时已处理) # 优先使用已处理的文件数据(预览时已处理)
processed_files = None processed_files = None
if self.processed_files_data: if self.processed_files_data:
...@@ -346,7 +346,7 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -346,7 +346,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
self._write_pdf_file(successful_processed_files) self._write_pdf_file(successful_processed_files)
# 再同步和回写 # 再同步和回写
if action_type == '获取尾程POD信息': if action_type == '获取货站提货POD信息':
if self.sync_last_mile_pod and successful_processed_files: if self.sync_last_mile_pod and successful_processed_files:
self._sync_last_mile_pod(successful_processed_files) self._sync_last_mile_pod(successful_processed_files)
...@@ -391,7 +391,7 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -391,7 +391,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
} }
def get_bl_objs(self): def get_bl_objs(self):
if self.action_type == '获取尾程POD信息': if self.action_type == '获取货站提货POD信息':
bl_objs = self.get_order() bl_objs = self.get_order()
else: else:
raw_lines = [i.strip() for i in self.bl_numbers.splitlines() if i.strip()] raw_lines = [i.strip() for i in self.bl_numbers.splitlines() if i.strip()]
...@@ -512,10 +512,11 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -512,10 +512,11 @@ class BatchGetPodInfoWizard(models.TransientModel):
except requests.exceptions.RequestException as e: except requests.exceptions.RequestException as e:
raise ValidationError(_('API request failed: %s') % str(e)) raise ValidationError(_('API request failed: %s') % str(e))
def _write_pdf_file(self, processed_files): def _write_pdf_file(self, processed_files, fix_name='货站提货POD'):
""" """
Write PDF file to clearance files # 回写PDF文件到清关文件 Write PDF file to clearance files # 回写PDF文件到清关文件
:param processed_files: 处理后的文件数组 :param processed_files: 处理后的文件数组
:param fix_name:
""" """
for file_info in processed_files: for file_info in processed_files:
if not file_info.get('bl'): if not file_info.get('bl'):
...@@ -529,7 +530,6 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -529,7 +530,6 @@ class BatchGetPodInfoWizard(models.TransientModel):
continue continue
# 如果有文件为空的就回写,否则就创建新的清关文件记录 # 如果有文件为空的就回写,否则就创建新的清关文件记录
fix_name = '尾程交接POD(待大包数量和箱号)'
clearance_file = self.env['cc.clearance.file'].search( clearance_file = self.env['cc.clearance.file'].search(
[('bl_id', '=', bl.id), ('file_name', '=', fix_name), ('file', '=', False)], limit=1) [('bl_id', '=', bl.id), ('file_name', '=', fix_name), ('file', '=', False)], limit=1)
if clearance_file: if clearance_file:
...@@ -542,7 +542,7 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -542,7 +542,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
# 创建新的清关文件记录 # 创建新的清关文件记录
clearance_file = self.env['cc.clearance.file'].create({ clearance_file = self.env['cc.clearance.file'].create({
'bl_id': bl.id, 'bl_id': bl.id,
'file_name': '尾程交接POD(待大包数量和箱号)', 'file_name': fix_name,
'attachment_name': file_name, 'attachment_name': file_name,
'file': file_data 'file': file_data
}) })
...@@ -723,11 +723,11 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -723,11 +723,11 @@ class BatchGetPodInfoWizard(models.TransientModel):
def _sync_last_mile_pod(self, processed_files): def _sync_last_mile_pod(self, processed_files):
""" """
Sync last mile POD information # 同步尾程POD信息 Sync pickup POD information # 同步货站提货POD信息
:param processed_files: 处理后的文件数组 :param processed_files: 处理后的文件数组
""" """
# return False#测试 先不同步 # return False#测试 先不同步
# 同步尾程POD信息 # 同步货站提货POD信息
is_fail = [] # 同步失败 is_fail = [] # 同步失败
for file_info in processed_files: for file_info in processed_files:
if not file_info['bl']: if not file_info['bl']:
...@@ -737,7 +737,7 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -737,7 +737,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
clearance_file = file_info.get('clearance_file') clearance_file = file_info.get('clearance_file')
if clearance_file: if clearance_file:
try: try:
clearance_file.action_sync() # 同步尾程POD clearance_file.action_sync() # 同步货站提货POD
except Exception as e: except Exception as e:
logging.info('_sync_last_mile_pod:%s' % e) logging.info('_sync_last_mile_pod:%s' % e)
is_fail = True is_fail = True
...@@ -1882,7 +1882,6 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -1882,7 +1882,6 @@ class BatchGetPodInfoWizard(models.TransientModel):
:return: 提单对应的节点以及节点操作时间 :return: 提单对应的节点以及节点操作时间
""" """
ship_packages = [] ship_packages = []
error_bl = []
# 查找对应的清关节点(勾选了POD节点匹配的节点) # 查找对应的清关节点(勾选了POD节点匹配的节点)
pod_node = self.env['cc.node'].search([ pod_node = self.env['cc.node'].search([
('is_pod_node', '=', True), ('is_pod_node', '=', True),
...@@ -1893,7 +1892,6 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -1893,7 +1892,6 @@ class BatchGetPodInfoWizard(models.TransientModel):
continue continue
bl = file_info['bl'] bl = file_info['bl']
if not pod_node: if not pod_node:
_logger.info(f"未找到尾程POD节点匹配的节点,提单号: {bl.bl_no}")
continue continue
# 只使用满足条件的小包(经过验证的valid_packages) # 只使用满足条件的小包(经过验证的valid_packages)
...@@ -2410,25 +2408,6 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -2410,25 +2408,6 @@ class BatchGetPodInfoWizard(models.TransientModel):
}) })
attachment_id = attachment.id attachment_id = attachment.id
_logger.info(f"已创建临时附件存储文件: {attachment.name}, ID: {attachment_id}") _logger.info(f"已创建临时附件存储文件: {attachment.name}, ID: {attachment_id}")
# 验证附件创建后数据是否正确
created_attachment = self.env['ir.attachment'].browse(attachment_id)
if created_attachment.datas:
# 比较解码后的数据长度,而不是直接比较字符串
try:
original_decoded = base64.b64decode(file_data)
attachment_decoded = base64.b64decode(created_attachment.datas)
if len(original_decoded) == len(attachment_decoded):
_logger.info(f"附件数据验证成功,解码后长度: {len(original_decoded)}")
else:
_logger.warning(
f"附件数据长度不匹配: 原始={len(original_decoded)}, 附件={len(attachment_decoded)}")
except Exception as e:
_logger.warning(f"附件数据验证失败: {str(e)}")
else:
_logger.error(f"附件数据为空")
except Exception as e: except Exception as e:
_logger.error(f"创建临时附件失败: {str(e)}") _logger.error(f"创建临时附件失败: {str(e)}")
else: else:
...@@ -2486,20 +2465,6 @@ class BatchGetPodInfoWizard(models.TransientModel): ...@@ -2486,20 +2465,6 @@ class BatchGetPodInfoWizard(models.TransientModel):
file_data = attachment.datas file_data = attachment.datas
_logger.info( _logger.info(
f"从附件读取文件: {attachment.name}, ID: {attachment_id}, 数据长度: {len(file_data) if file_data else 0}") f"从附件读取文件: {attachment.name}, ID: {attachment_id}, 数据长度: {len(file_data) if file_data else 0}")
# 验证数据格式
if file_data:
_logger.info(f"附件数据格式: 前100个字符: {file_data[:100]}")
# 验证是否为有效的 base64 数据
try:
import base64
# 尝试解码验证 base64 格式
decoded = base64.b64decode(file_data)
_logger.info(f"Base64 解码成功,解码后数据长度: {len(decoded)}")
except Exception as e:
_logger.error(f"Base64 解码失败: {str(e)}")
else:
_logger.warning(f"附件 {attachment_id} 的数据为空")
else: else:
_logger.warning(f"附件不存在: {attachment_id}") _logger.warning(f"附件不存在: {attachment_id}")
except Exception as e: except Exception as e:
......
...@@ -36,10 +36,9 @@ ...@@ -36,10 +36,9 @@
Remove specified text (AGN, UCLINK LOGISITICS LTD) from PDF files Remove specified text (AGN, UCLINK LOGISITICS LTD) from PDF files
</li> <!-- 涂抹指定文字:对PDF文件中的指定文字进行涂抹处理 --> </li> <!-- 涂抹指定文字:对PDF文件中的指定文字进行涂抹处理 -->
<li attrs="{'invisible': [('sync_successful_processed', '=', False)]}"> <li attrs="{'invisible': [('sync_successful_processed', '=', False)]}">
<strong>Sync Last Mile POD:</strong> <strong>Sync Cargo Terminal Pickup POD:</strong>
Synchronize POD (Proof of Delivery) attachment information with TK system, including Synchronize the attachment information of the POD for picking up goods from TK cargo station
big package quantities and container numbers </li> <!-- 同步货站提货POD:向TK同步货站提货POD的附件信息 -->
</li> <!-- 同步尾程POD:向TK同步尾程交接POD(待大包数量和箱号)的附件信息 -->
<li attrs="{'invisible': [('sync_successful_processed', '=', False)]}"> <li attrs="{'invisible': [('sync_successful_processed', '=', False)]}">
<strong>Sync Push Match Node:</strong> <strong>Sync Push Match Node:</strong>
...@@ -106,10 +105,9 @@ ...@@ -106,10 +105,9 @@
<strong>Description:</strong> <!-- 说明: --> <strong>Description:</strong> <!-- 说明: -->
<ul> <ul>
<li> <li>
<strong>Get Last Mile POD:</strong> <strong>Get Cargo Terminal Pickup POD:</strong>
Generate a last mile POD (Proof of Delivery) attachment information, including Generate a attachment information of the POD for picking up goods cargo station
big package quantities and container numbers </li> <!-- 获取货站提货POD:生成一条货站提货POD的附件信息 -->
</li> <!-- 获取尾程POD:生成一条尾程交接POD(待大包数量和箱号)的附件信息 -->
<li attrs="{'invisible': [('get_last_mile_pod', '=', False)]}"> <li attrs="{'invisible': [('get_last_mile_pod', '=', False)]}">
<strong>Remove Specified Text:</strong> <strong>Remove Specified Text:</strong>
Remove specified text (AGN, UCLINK LOGISITICS LTD) from PDF files Remove specified text (AGN, UCLINK LOGISITICS LTD) from PDF files
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论