提交 56e68917 authored 作者: 贺阳's avatar 贺阳

Merge branch 'develop' into feature/PDA扫码揽收

# Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # Lines starting with '#' will be ignored, and an empty message aborts # the commit.
......@@ -24,8 +24,8 @@
'wizard/add_exception_info_wizard_views.xml',
'wizard/email_template.xml',
'data/data.xml',
'data/timer.xml',
'data/sequence.xml',
'views/menu_view.xml',
'views/cc_clearance_file_view.xml',
'views/cc_node_view.xml',
'views/cc_last_mile_provider_views.xml',
......@@ -37,6 +37,11 @@
'views/cc_node_exception_reason_view.xml',
'views/cc_bl_view.xml',
'views/res_config_setting.xml',
'views/cc_history_big_package_view.xml',
'views/cc_history_package_good_view.xml',
'views/cc_history_ship_package_view.xml',
'views/cc_history_package_sync_log_view.xml',
'views/menu_view.xml',
# 'views/cc_customers_declaration_order_view.xml',
'templates/login.xml',
],
......
<odoo>
<data>
<record id="cron_update_history_data" model="ir.cron">
<field name="name">同步历史数据</field>
<field name="model_id" ref="ccs_base.model_cc_bl"/>
<field name="state">code</field>
<field name="code">model.cron_update_history_data()</field>
<field name='interval_number'>1</field>
<field name='interval_type'>days</field>
<field name="numbercall">-1</field>
<field name="active" eval="False"/>
</record>
</data>
</odoo>
\ No newline at end of file
......@@ -3164,3 +3164,1113 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:ccs_base.res_config_settings_view_form_auto_push
msgid "自动推送配置"
msgstr ""
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view
msgid "<span class=\"o_stat_text\">Goods</span>"
msgstr "<span class=\"o_stat_text\">货物</span>"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view
msgid "<span class=\"o_stat_text\">Ship Packages</span>"
msgstr "<span class=\"o_stat_text\">小包</span>"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "ADD 1"
msgstr "地址1"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "ADD 2"
msgstr "地址2"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "ADD 3"
msgstr "地址3"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__actual_gst
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__actual_gst
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "Actual GST"
msgstr "实际消费税"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__actual_gst_rate
msgid "Actual GST Rate"
msgstr "实际消费税率"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__actual_tax
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__actual_tax
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "Actual Tax"
msgstr "实际税收"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__actual_tax_currency
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__actual_tax_currency
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "Actual Tax Currency"
msgstr "实际税收货币"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__actual_tax_date
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "Actual Tax Date"
msgstr "实际纳税日期"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__actual_tax_rate
msgid "Actual Tax Rate"
msgstr "实际税率"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__actual_tax_tz
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "Actual Tax Timezone"
msgstr "实际纳税时区"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__actual_vat
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__actual_vat
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "Actual VAT"
msgstr "实际增值税"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__actual_vat_rate
msgid "Actual VAT Rate"
msgstr "实际增值税率"
#. module: ccs_base
#. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view
#, python-format
msgid "Add Package Exception Information"
msgstr "添加包裹异常信息"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__message_attachment_count
msgid "Attachment Count"
msgstr "附件总数"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view
msgid "Base Info"
msgstr "基本信息"
#. module: ccs_base
#: 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_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.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.tree_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_ship_package_view
msgid "Big Package"
msgstr "大包"
#. module: ccs_base
#: model:ir.ui.menu,name:ccs_base.menu_cc_history_big_package
#: model:ir.actions.act_window,name:ccs_base.action_cc_history_big_package
msgid "History Big Package"
msgstr "历史大包"
#. module: ccs_base
#: model:ir.ui.menu,name:ccs_base.menu_cc_history_data
msgid "History Data"
msgstr "历史数据"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__big_package_no
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "Big Package No"
msgstr "大包号"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__big_package_no
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_big_package_view
msgid "Big Package No."
msgstr "大包号"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__bl_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__bl_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__bl_id
#: 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.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_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_ship_package_view
msgid "Bill of Loading"
msgstr "提单"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "Buyer Region"
msgstr "买方所在地区"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view
msgid "CC Info"
msgstr "清关信息"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "CC info"
msgstr "清关信息"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "CITY"
msgstr "城市"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__cod_amount
msgid "COD Amount"
msgstr "COD金额"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "COUNTRY"
msgstr "国家"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "COUNTY"
msgstr "区县"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "COUNTY(EN)"
msgstr "区县(EN)"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__cancel_reason
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "Cancel Reason"
msgstr "取消原因"
#. module: ccs_base
#: 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_ship_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_package_good_view
msgid "Cancelled"
msgstr "取消"
#. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_big_package__tally_state__checked_goods
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
msgid "Checked goods"
msgstr "已理货"
#. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_ship_package__receiver_type__company
msgid "Company"
msgstr "公司"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__company_code
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "Company Code"
msgstr "公司编码"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__container_no
msgid "Container No"
msgstr "集装箱编号"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__create_uid
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__create_uid
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__create_uid
msgid "Created by"
msgstr "创建人"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__create_date
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__create_date
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__create_date
msgid "Created on"
msgstr "创建时间"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__currency_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__actual_currency_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__currency
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__currency_id
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_package_good_view
msgid "Currency"
msgstr "货币"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__customer_ref
msgid "Customer Ref"
msgstr "客户参考"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__declare_price
msgid "Declare Price"
msgstr "申报价格"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__delivery_time
msgid "Delivery Time"
msgstr "尾程交货时间"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__delivery_user_id
msgid "Delivery User"
msgstr "尾程交货人"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__display_name
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__display_name
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__display_name
msgid "Display Name"
msgstr "显示名称"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "EMAIL"
msgstr "邮箱"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__exception_info_ids
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__exception_info_ids
msgid "Exception Information"
msgstr "异常信息"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__node_exception_reason_id
msgid "Exception Reason"
msgstr "异常原因"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__export_hs_code
msgid "Export HSCode"
msgstr "出口HSCode"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__freight
msgid "Freight"
msgstr "运费"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__customer_id
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "From Customer"
msgstr "来自客户"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__gross_weight
msgid "GROSS WEIGHT"
msgstr "毛重"
#. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_package_good__item_type__gift
msgid "Gift"
msgstr "赠品"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__item_type
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_good_view
msgid "Good Type"
msgstr "商品类型"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__item_vat
msgid "Good VAT"
msgstr "商品税号"
#. module: ccs_base
#: 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_ship_package__good_ids
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "Goods"
msgstr "商品信息"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_big_package_view
msgid "Goods Qty"
msgstr "商品数"
#. module: ccs_base
#: 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_ship_package_view
msgid "Group By"
msgstr "分组方式"
#. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_big_package__tally_state__handover_completed
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
msgid "Handover Completed"
msgstr "尾程交接"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__import_hs_code
msgid "Import HSCode"
msgstr "进口HSCode"
#. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_ship_package__receiver_type__individual
msgid "Individual"
msgstr "个人"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__internal_account_number
msgid "Internal Account Number"
msgstr "内部帐号"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__invoice_attachment_ids
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "Invoice Attachments"
msgstr "发票附件"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__is_cancel
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__is_cancel
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__is_cancel
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_good_view
msgid "Is Cancel"
msgstr "取消"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Is Cancelled"
msgstr "取消"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__item_id
msgid "Item ID"
msgstr "商品ID"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_package_good_view
msgid "Item VAT"
msgstr "商品税号"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
msgid "Last 10 days big package"
msgstr "近10日大包"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Last 30 days Ship Package"
msgstr "近30日小包"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
msgid "Last 30 days big Package"
msgstr "近30日大包"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
msgid "Last 7 days big package"
msgstr "近7日大包"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Last 7 days ship package"
msgstr "近7日小包"
#. module: ccs_bas
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package____last_update
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good____last_update
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package____last_update
msgid "Last Modified on"
msgstr "最后修改时间"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__write_uid
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__write_uid
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__write_uid
msgid "Last Updated by"
msgstr "最后更新人"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__write_date
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__write_date
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__write_date
msgid "Last Updated on"
msgstr "最后更新时间"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
msgid "Last week big package"
msgstr "上周大包"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Last week ship package"
msgstr "上周小包"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__item_link
msgid "Link"
msgstr "链接"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__logistic_order_no
msgid "Logistic Order No"
msgstr "物流订单号"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__message_main_attachment_id
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__message_main_attachment_id
msgid "Main Attachment"
msgstr "主附件"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "NAME"
msgstr "名称"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__item_name_cn
msgid "Name CN"
msgstr "中文名称"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__item_name_en
msgid "Name EN"
msgstr "英文名称"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_ship_package_view
msgid "Next Provider"
msgstr "下一阶段服务商"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__next_provider_name
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__next_provider_name
#: 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.search_cc_history_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Next Provider Name"
msgstr "下一阶段服务商名称"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "No Bill of Loading"
msgstr "提单号"
#. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_package_good__item_type__normal
msgid "Normal"
msgstr "正常"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Not Show Cancelled"
msgstr "不显示已取消的"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__operation_time
msgid "Operation Time"
msgstr "操作时间"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__origin_country
msgid "Origin Country"
msgstr "始发国"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "Other"
msgstr "其他信息"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "PHONE"
msgstr "电话"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "POSTCODE"
msgstr "邮政编码"
#. module: ccs_base
#: model:ir.model,name:ccs_base.model_cc_history_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.search_cc_history_package_good_view
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_package_good_view
msgid "Package Good"
msgstr "小包商品"
#. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_cc_history_package_good
#: model:ir.ui.menu,name:ccs_base.menu_cc_history_package_good
msgid "History Package Good"
msgstr "历史小包商品"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__goods_qty
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__ship_package_qty
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_big_package_view
msgid "Package Qty"
msgstr "小包数"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__buyer_region
msgid "Package Sell Country Code"
msgstr "包裹销售国家代码"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_big_package_view
msgid "Packages Qty"
msgstr "小包数"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__pallet_number
msgid "Pallet Number"
msgstr "托盘号"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__pallet_usage_date
msgid "Pallet Usage Date"
msgstr "托盘使用日期"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__process_time
msgid "Process Time"
msgstr "推送时间"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.tree_cc_history_ship_package_view
msgid "Progress"
msgstr "进度"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Progress Status"
msgstr "进度状态"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__state
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Progress state"
msgstr "进度状态"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__quantity
msgid "Quantity"
msgstr "数量"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__quantity_unit
msgid "Quantity Unit"
msgstr "数量单位"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_add_1
msgid "Receiver ADD 1"
msgstr "收件人地址1"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_add_2
msgid "Receiver ADD 2"
msgstr "收件人地址2"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_add_3
msgid "Receiver ADD 3"
msgstr "收件人地址3"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_city
msgid "Receiver CITY"
msgstr "收件人城市"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_county
msgid "Receiver COUNTY"
msgstr "收件人区县"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_county_translate
msgid "Receiver COUNTY(EN)"
msgstr "收件人区县(EN)"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_email
msgid "Receiver EMAIL"
msgstr "收件人邮件"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "Receiver Info"
msgstr "收件人信息"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_name
msgid "Receiver NAME"
msgstr "收件人名称"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_phone
msgid "Receiver PHONE"
msgstr "收件人电话"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_postcode
msgid "Receiver POSTCODE"
msgstr "收件人邮政编码"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_type
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Receiver TYPE"
msgstr "收件人类型"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__receiver_vat_no
msgid "Receiver VAT"
msgstr "收件人税号"
#. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_package_good__item_type__return
msgid "Return"
msgstr "退回"
#. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_package_good__item_type__sample
msgid "Sample"
msgstr "样品"
#. module: ccs_base
#: 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_ship_package_view
msgid "Search"
msgstr "模糊搜索"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__sender_add_1
msgid "Sender ADD 1"
msgstr "发货人地址1"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__sender_add_2
msgid "Sender ADD 2"
msgstr "发货人地址2"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__sender_add_3
msgid "Sender ADD 3"
msgstr "发货人地址3"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__sender_city
msgid "Sender CITY"
msgstr "发货人城市"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__sender_country
msgid "Sender COUNTRY"
msgstr "发货人国家"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "Sender Info"
msgstr "发货人信息"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__sender_name
msgid "Sender NAME"
msgstr "发货人名称"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__sender_phone
msgid "Sender PHONE"
msgstr "发货人电话"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__sender_postcode
msgid "Sender POSTCODE"
msgstr "发件人邮政编码"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__sender_state
msgid "Sender State"
msgstr "发货人省份"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__sender_vat_no
msgid "Sender VAT"
msgstr "发货人税号"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__bl_line_id
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_package_good_view
msgid "Ship Package"
msgstr "小包"
#. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_cc_history_ship_package
#: model:ir.ui.menu,name:ccs_base.menu_cc_history_ship_package
msgid "History Ship Package"
msgstr "历史小包"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__ship_package_ids
msgid "Ship Packages"
msgstr "小包"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__shipping_fee
msgid "Shipping_fee"
msgstr "运费"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "State"
msgstr "省份"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__state_explain
#: model:ir.model.fields,help:ccs_base.field_cc_history_ship_package__state_explain
msgid "State Explain"
msgstr "状态说明"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "TOTAL VALUE"
msgstr "总价值"
#. module: ccs_base
#: 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_history_ship_package_view
msgid "TYPE"
msgstr "类型"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__tally_state
msgid "Tally Status"
msgstr "理货状态"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__tally_time
msgid "Tally Time"
msgstr "理货时间"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_big_package__tally_user_id
msgid "Tally User"
msgstr "理货人"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__tax_mark
msgid "Tax Mark"
msgstr "税的状态"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__item_tax_status
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_good_view
msgid "Tax Status"
msgstr "商品交税情况"
#. module: ccs_base
#: model:ir.model.constraint,message:ccs_base.constraint_cc_history_package_good_item_id_uniq
msgid "The Item ID must be unique."
msgstr "商品号必须唯一。"
#. module: ccs_base
#: model:ir.model.constraint,message:ccs_base.constraint_cc_history_ship_package_logistic_order_no_uniq
msgid "The Logistic Order No must be unique."
msgstr "物流订单号必须唯一。"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
msgid "This week big package"
msgstr "本周大包"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "This week ship package"
msgstr "本周小包"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
msgid "Today's big package"
msgstr "今日大包"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Today's ship package"
msgstr "今日小包"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__item_total_price
msgid "Total Price"
msgstr "货物总价"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__total_value
msgid "Total Value"
msgstr "总价值"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__tracking_no
msgid "Tracking No"
msgstr "追踪号"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_ship_package_view
msgid "Tracking No."
msgstr "追踪号"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__trade_no
msgid "Trade No"
msgstr "交易单号"
#. module: ccs_base
#: model:ir.model.fields.selection,name:ccs_base.selection__cc_history_big_package__tally_state__unprocessed_goods
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
msgid "Unprocessed goods"
msgstr "未理货"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__user_track_note
msgid "User Tracking Note"
msgstr "用户发货备注"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "VAT"
msgstr "税号"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__vat_rate
msgid "VAT Rate"
msgstr "VAT税率"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Value > 135"
msgstr ""
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_good__weight
msgid "Weight"
msgstr "重量"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_ship_package__weight_unit
msgid "Weight Unit"
msgstr "重量单位"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_big_package_view
msgid "Yesterday's big package"
msgstr "昨日大包"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_ship_package_view
msgid "Yesterday's ship package"
msgstr "昨日小包"
#. module: ccs_base
#: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_big_package
msgid ""
"[History Big Package] Not yet! Click the Create button in the top left corner and "
"the sofa is yours!"
msgstr "【历史大包】 还没有!点击左上角的“创建”按钮,沙发就是你的了!"
#. module: ccs_base
#: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_package_good
msgid ""
"[History Package Good] Not yet! Click the Create button in the top left corner and "
"the sofa is yours!"
msgstr "【货物】 还没有!点击左上角的“创建”按钮,沙发就是你的了!"
#. module: ccs_base
#: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_ship_package
msgid ""
"[History Ship Package] Not yet! Click the Create button in the top left corner and "
"the sofa is yours!"
msgstr "【小包】 还没有!点击左上角的“创建”按钮,沙发就是你的了!"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "base_info"
msgstr "基本信息"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_ship_package_view
msgid "Sync Log"
msgstr "同步日志"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_sync_log__api_customer
msgid "Api Customer"
msgstr "接口客户"
#. module: ccs_base
#: model:ir.actions.act_window,name:ccs_base.action_cc_history_package_sync_log
#: model:ir.model,name:ccs_base.model_cc_history_package_sync_log
msgid "CC History Package Sync Log"
msgstr "清关小包同步日志"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.search_cc_history_package_sync_log_view
msgid "Group By"
msgstr "分组"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_sync_log__operate_remark
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_sync_log_view
msgid "Operate Remark"
msgstr "操作备注"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_sync_log__operate_time
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_package_sync_log_view
msgid "Operate Time"
msgstr "操作时间"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_sync_log__operate_user
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_package_sync_log_view
msgid "Operate User"
msgstr "操作人"
#. module: ccs_base
#: model:ir.model,name:ccs_base.model_cc_ship_package
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_sync_log__package_id
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_package_sync_log_view
msgid "Ship Package"
msgstr "小包"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_sync_log__sync_time
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_package_sync_log_view
msgid "Sync Time"
msgstr "同步时间"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_history_package_sync_log__process_code
#: model_terms:ir.ui.view,arch_db:ccs_base.form_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.tree_cc_history_package_sync_log_view
msgid "TK Process Code"
msgstr "进度编码"
#. module: ccs_base
#: model_terms:ir.actions.act_window,help:ccs_base.action_cc_history_package_sync_log
msgid ""
"[CC Ship Package Sync Log] Not yet! Click the Create button in the top left "
"corner and the sofa is yours!"
msgstr "[小包同步日志] 还没有!点击左上角的创建按钮,沙发就是你的了!"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_history_package_view
msgid "Sync Log"
msgstr "同步日志"
......@@ -11,3 +11,7 @@ from . import mail_thread
from . import order_state_change_rule
from . import res_config_setting
from . import cc_history_big_package
from . import cc_history_package_good
from . import cc_history_ship_package
from . import cc_history_package_sync_log
\ No newline at end of file
# 导入odoo
# 导入日志
import logging
from datetime import timedelta
from datetime import timedelta, datetime
import json
import pytz
from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError
......@@ -635,6 +635,19 @@ class CcBL(models.Model):
item.big_package_ids.filtered(
lambda package: package.tally_state == 'handover_completed' and not package.is_cancel))
def cron_update_history_data(self):
history_days = self.env['ir.config_parameter'].sudo().get_param('history_days') or 180
history_limit = self.env['ir.config_parameter'].sudo().get_param('history_limit') or 50
origin_delete = self.env['ir.config_parameter'].sudo().get_param('origin_delete') or 1
redis_conn = self.env['common.common'].sudo().get_redis()
vals = {
'history_days': history_days,
'history_limit': history_limit,
'origin_delete': origin_delete
}
redis_conn.lpush('history_data_list', json.dumps(vals))
is_history = fields.Boolean('历史单据', default=False)
# 提单号
bl_no = fields.Char(string='B/L No', index=True)
# 关务提单号
......
# 导入odoo
# 导入日志
import logging
from datetime import timedelta
import pytz
from odoo import models, fields, api, _
from odoo.exceptions import UserError
# 获取日志
_logger = logging.getLogger(__name__)
# 创建一个大包业务对象,用来管理包裹的信息.包裹信息包括所属提单、大包号、下一阶段服务商名称、包裹明细
class CcHistoryBigPackage(models.Model):
# 模型名称
_name = 'cc.history.big.package' # 历史大包
_inherit = ['mail.thread', 'mail.activity.mixin']
# 模型描述
_description = 'Big Package'
_rec_name = 'big_package_no'
# 定义模型字段
origin_id = fields.Integer(string='原大包id')
# 所属提单
bl_id = fields.Many2one('cc.bl', string='Bill of Loading', index=True)
# 大包号
big_package_no = fields.Char(string='Big Package No.', index=True)
# 下一阶段服务商名称
next_provider_name = fields.Char(string='Next Provider Name')
# 小包 包裹明细
ship_package_ids = fields.One2many('cc.history.ship.package', 'big_package_id', string='Ship Packages')
# 商品明细
goods_ids = fields.One2many('cc.history.package.good', 'big_package_id', string='Goods')
# 增加包裹数量字段, 用于显示包裹数量, 根据big_package_line_ids计算
# ship_package_qty = fields.Integer(string='Package Qty', compute='_compute_big_package_qty', store=True)
ship_package_qty = fields.Integer(string='Package Qty')
# 商品纪录数
# goods_qty = fields.Integer(string='Package Qty', compute='_compute_big_package_qty', store=True)
goods_qty = fields.Integer(string='Package Qty')
# New fields: pallet_number (char type), pallet_usage_date
# 托盘号(char型),托盘使用日期
pallet_number = fields.Char(string='Pallet Number')
pallet_usage_date = fields.Date(string='Pallet Usage Date')
# 增加is_cancel字段, 用于标识大包是否取消, 来自提单的is_cancel字段
# is_cancel = fields.Boolean(string='Is Cancel', related='bl_id.is_cancel', store=True)
is_cancel = fields.Boolean(string='Is Cancel')
tally_state = fields.Selection([
('unprocessed_goods', 'Unprocessed goods'),
('checked_goods', 'Checked goods'),
('handover_completed', 'Handover Completed')
], default='unprocessed_goods', string='Tally Status', index=True) # 理货状态 未理货/已理货/尾程交接
tally_user_id = fields.Many2one('res.users', 'Tally User', index=True) # 理货人
tally_time = fields.Datetime('Tally Time') # 理货时间
delivery_user_id = fields.Many2one('res.users', string='Delivery User', index=True) # 尾程交货人
delivery_time = fields.Datetime(string='Delivery Time') # 尾程交货时间
exception_info_ids = fields.Many2many('cc.exception.info', 'history_bigpackage_exception_info_rel',
string='Exception Information')
def action_show_ship_package(self):
# 返回一个action,显示包裹
return {
'name': _('Ship Package'),
'type': 'ir.actions.act_window',
'res_model': 'cc.history.ship.package',
'view_mode': 'tree,form',
'domain': [('big_package_id', '=', self.id), ('is_cancel', '=', False)],
}
# 创建显示商品的action
def action_show_package_good(self):
# 返回一个action,显示商品
return {
'name': _('Goods'),
'type': 'ir.actions.act_window',
'res_model': 'cc.history.package.good',
'view_mode': 'tree,form',
'domain': [('big_package_id', '=', self.id), ('is_cancel', '=', False)],
}
# 导入odoo
# 导入日志
import logging
from datetime import timedelta
import pytz
from odoo import models, fields, api, _
from odoo.exceptions import UserError
# 获取日志
_logger = logging.getLogger(__name__)
class CcPackageGood(models.Model):
# 模型名称
_name = 'cc.history.package.good' # 历史小包商品
# 模型描述
_description = 'Package Good'
_rec_name = 'item_id'
# 定义模型字段
origin_id = fields.Integer(string='原小包商品id')
# 所属小包裹
bl_line_id = fields.Many2one('cc.history.ship.package', string='Ship Package', index=True)
# 所属大包
big_package_id = fields.Many2one('cc.history.big.package')
# 增加一个提单对象的字段, 用于显示提单号,根据bl_line_id的bl_id字段
bl_id = fields.Many2one('cc.bl')
# 按item_id,唯一
_sql_constraints = [
('item_id_uniq', 'unique(item_id)', 'The Item ID must be unique.')
]
item_id = fields.Char(string='Item ID', index=True)
# SKU标识ID
sku_id = fields.Char(string='SKU ID', index=True)
# 商品中文名称
item_name_cn = fields.Char(string='Name CN', index=True)
# 商品英文名称
item_name_en = fields.Char(string='Name EN', index=True)
# 出口HSCode
export_hs_code = fields.Char(string='Export HSCode')
# 进口HSCode
import_hs_code = fields.Char(string='Import HSCode')
# 重量
weight = fields.Float(string='Weight')
# 数量
quantity = fields.Integer(string='Quantity')
# 数量单位
quantity_unit = fields.Char(string='Quantity Unit')
# 申报单价
declare_price = fields.Float(string='Declare Price')
# 运费
freight = fields.Float(string='Freight')
# COD金额
cod_amount = fields.Float(string='COD Amount')
# VAT税率
vat_rate = fields.Float(string='VAT Rate')
# 商品VAT
item_vat = fields.Float(string='Good VAT')
# 原产国
origin_country = fields.Char(string='Origin Country')
# 类型
item_type = fields.Selection(
[('gift', 'Gift'), ('normal', 'Normal'), ('sample', 'Sample'), ('return', 'Return')],
string='Good Type')
# 商品总价
item_total_price = fields.Float(string='Total Price')
# 商品链接
item_link = fields.Char(string='Link')
# 商品交税情况
item_tax_status = fields.Selection(
[('TTSTaxed', 'TTSTaxed'), ('Sentinel', 'Sentinel'), ('LSPTaxed', 'LSPTaxed'),
('SellerObligation', 'SellerObligation')],
string='Tax Status')
# 实缴代税总额
actual_tax = fields.Float(string='Actual Tax')
# 实缴关税税率
actual_tax_rate = fields.Float(string='Actual Tax Rate')
# 实缴关税币种
actual_tax_currency = fields.Char(string='Actual Tax Currency')
# 实缴增值税
actual_vat = fields.Float(string='Actual VAT')
# 实缴增值税税率
actual_vat_rate = fields.Float(string='Actual VAT Rate')
# 实缴GST
actual_gst = fields.Float(string='Actual GST')
# 实缴GST税率
actual_gst_rate = fields.Float(string='Actual GST Rate')
# 币种
currency_id = fields.Many2one('res.currency', string='Currency')
# 增加is_cancel字段, 用于标识是否取消, 来自小包的is_cancel字段
is_cancel = fields.Boolean(string='Is Cancel')
# 导入odoo
# 导入日志
import logging
from datetime import timedelta
import pytz
from odoo import models, fields, api, _
from odoo.exceptions import UserError
# 获取日志
_logger = logging.getLogger(__name__)
class CcHistoryPackageSyncLog(models.Model):
_name = 'cc.history.package.sync.log'
_description = 'CC Ship Package Sync Log'
package_id = fields.Many2one('cc.history.ship.package', 'Ship Package', required=True)
# 同步时间
sync_time = fields.Datetime('Sync Time', default=fields.Datetime.now)
# 增加接口客户
api_customer = fields.Char('Api Customer')
# 操作状态
process_code = fields.Char('TK Process Code')
# 操作时间
operate_time = fields.Datetime('Operate Time', default=fields.Datetime.now)
# 操作备注
operate_remark = fields.Text('Operate Remark')
# 同步操作人
operate_user = fields.Many2one('res.users', 'Operate User', default=lambda self: self.env.user)
# 导入odoo
# 导入日志
import logging
from datetime import timedelta
import pytz
from odoo import models, fields, api, _
from odoo.exceptions import UserError
# 获取日志
_logger = logging.getLogger(__name__)
class CcHistoryShipPackage(models.Model):
# 模型名称
_name = 'cc.history.ship.package' # 历史小包
# 模型描述
_description = 'Ship Package'
_rec_name = 'tracking_no'
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'bl_id, big_package_id,tracking_no'
customer_id = fields.Many2one('res.partner', string='From Customer', index=True)
origin_id = fields.Integer(string='原小包id')
# 定义模型字段
# 提单号
bl_id = fields.Many2one('cc.bl', string='Bill of Loading', index=True)
# 大包号
big_package_id = fields.Many2one('cc.history.big.package', string='Big Package', index=True)
# 物流订单号
logistic_order_no = fields.Char(string='Logistic Order No', index=True)
# 按logistic_order_no,唯一
_sql_constraints = [
('logistic_order_no_uniq', 'unique(logistic_order_no)', 'The Logistic Order No must be unique.')
]
# 运单号(面单号)
tracking_no = fields.Char(string='Tracking No', index=True) # 对应面单号
# 客户参考(申报订单号)
customer_ref = fields.Char(string='Customer Ref') # 对应申报订单号
# 内部账号
internal_account_number = fields.Char(string='Internal Account Number')
# 用户发货备注
user_track_note = fields.Char(string='User Tracking Note')
# 公司代码
company_code = fields.Char(string='Company Code')
# 交易单号
trade_no = fields.Char(string='Trade No')
# 大包号
big_package_no = fields.Char(string='Big Package No', index=True)
# 海运/铁路的集装箱号
container_no = fields.Char(string='Container No')
# 包裹售卖国家编码
buyer_region = fields.Char(string='Package Sell Country Code')
# 下一段服务商名称
next_provider_name = fields.Char(string='Next Provider Name')
# 发件人姓名
sender_name = fields.Char(string='Sender NAME')
# 发件人VAT税号/IOSS NO
sender_vat_no = fields.Char(string='Sender VAT')
# 发件人电话
sender_phone = fields.Char(string='Sender PHONE')
# 发件人地址1
sender_add_1 = fields.Char(string='Sender ADD 1')
# 发件人地址2
sender_add_2 = fields.Char(string='Sender ADD 2')
# 发件人地址3
sender_add_3 = fields.Char(string='Sender ADD 3')
# 发件人城市
sender_city = fields.Char(string='Sender CITY')
# 发件人州
sender_state = fields.Char(string='Sender State')
# 发件人邮编
sender_postcode = fields.Char(string='Sender POSTCODE')
# 发件人国家
sender_country = fields.Char(string='Sender COUNTRY')
# 收件人姓名
receiver_name = fields.Char(string='Receiver NAME', index=True)
# 收件人类型:公司/个人
receiver_type = fields.Selection([('company', 'Company'), ('individual', 'Individual')], string='Receiver TYPE')
# 收件人VAT税号/IOSS NO
receiver_vat_no = fields.Char(string='Receiver VAT')
# 收件人地址1
receiver_add_1 = fields.Char(string='Receiver ADD 1')
# 收件人地址2
receiver_add_2 = fields.Char(string='Receiver ADD 2')
# 收件人地址3
receiver_add_3 = fields.Char(string='Receiver ADD 3')
# 收件人城市
receiver_city = fields.Char(string='Receiver CITY')
# 收件人县
receiver_county = fields.Char(string='Receiver COUNTY')
receiver_county_translate = fields.Char(string='Receiver COUNTY(EN)')
# 收件人邮编
receiver_postcode = fields.Char(string='Receiver POSTCODE')
# 收件人邮件
receiver_email = fields.Char(string='Receiver EMAIL', index=True)
# 电话号码
receiver_phone = fields.Char(string='Receiver PHONE', index=True)
# 毛重
gross_weight = fields.Float(string='GROSS WEIGHT')
# 重量单位
weight_unit = fields.Char(string='Weight Unit')
# 货币
currency = fields.Char(string='Currency')
# 币种对象
currency_id = fields.Many2one('res.currency', string='Currency', index=True)
# 申报价格
total_value = fields.Float(string='Total Value')
# 运费
shipping_fee = fields.Float(string='Shipping_fee')
# 税的状态
tax_mark = fields.Selection(
[('TTSTaxed', 'TTSTaxed'), ('Sentinel', 'Sentinel'), ('LSPTaxed', 'LSPTaxed'),
('SellerObligation', 'SellerObligation')],
string='Tax Mark', index=True)
# 实际缴关税
actual_tax = fields.Float(string='Actual Tax')
# 实际缴VAT
actual_vat = fields.Float(string='Actual VAT')
# 实缴GST
actual_gst = fields.Float(string='Actual GST')
# 实际缴关税币种
actual_tax_currency = fields.Char(string='Actual Tax Currency')
# 币种
actual_currency_id = fields.Many2one('res.currency', string='Currency', index=True)
# 实际缴关税时间
actual_tax_date = fields.Char(string='Actual Tax Date')
# 实际缴关税时区
actual_tax_tz = fields.Char(string='Actual Tax Timezone')
# 商品明细
good_ids = fields.One2many('cc.history.package.good', 'bl_line_id', string='Goods')
# 是否取消
is_cancel = fields.Boolean(string='Is Cancel', default=False)
# 取消原因
cancel_reason = fields.Char(string='Cancel Reason')
# 发票附件
invoice_attachment_ids = fields.Many2many('ir.attachment', relation='history_package_invoice_attachment_rel',
string='Invoice Attachments')
# 进度状态, 包括已提货、 小包查验、海关放行、小包出库、小包入库、清关失败,包裹交接
state = fields.Many2one('cc.node', string='Progress state', domain="[('node_type', '=', 'package')]", index=True,
tracking=True,
default=lambda self: self.env['cc.node'].search(
[('node_type', '=', 'package'), ('is_default', '=', True)], limit=1))
node_exception_reason_id = fields.Many2one('cc.node.exception.reason', 'Exception Reason')
process_time = fields.Datetime('Process Time', index=True)
exception_info_ids = fields.Many2many('cc.exception.info', 'history_package_exception_info_rel',
string='Exception Information')
# 操作时间RFC3339格式
operation_time = fields.Char(string='Operation Time')
# 添加状态说明字段
state_explain = fields.Text('State Explain', help='State Explain')
is_sync = fields.Boolean('Is Sync', default=False, index=True)
tk_code = fields.Char(string='TK Code', help='TK Code')
# 增加同步日志纪录字段
sync_log_ids = fields.One2many('cc.history.package.sync.log', 'package_id', 'Sync Logs')
......@@ -69,3 +69,8 @@ access_cc_clearance_file_ccs_base.group_clearance_of_customs_manager,cc_clearanc
access_cc_clearance_file_ccs_base.group_clearance_of_customs_user,cc_clearance_file ccs_base.group_clearance_of_customs_user,ccs_base.model_cc_clearance_file,ccs_base.group_clearance_of_customs_user,1,0,0,0
order_state_change_rule_group_user,order_state_change_rule_group_user,ccs_base.model_order_state_change_rule,base.group_user,1,1,1,1
access_cc_history_big_package_base.group_user,cc_history_big_package base.group_user,ccs_base.model_cc_history_big_package,base.group_user,1,1,1,1
access_cc_history_package_good_base.group_user,cc_history_package_good base.group_user,ccs_base.model_cc_history_package_good,base.group_user,1,1,1,1
access_cc_history_ship_package_base.group_user,cc_history_ship_package base.group_user,ccs_base.model_cc_history_ship_package,base.group_user,1,1,1,1
access_cc_history_package_sync_log_base.group_user,cc_history_package_sync_log base.group_user,ccs_base.model_cc_history_package_sync_log,base.group_user,1,1,1,1
\ No newline at end of file
......@@ -106,7 +106,13 @@
</div>
<widget name="web_ribbon" bg_color="bg-warning" title="Cancelled"
attrs="{'invisible': [('is_cancel', '=', False)]}"/>
<br/>
<br/>
<br/>
<br/>
<widget name="web_ribbon" bg_color="bg-danger" title="历史提单"
attrs="{'invisible': [('is_history', '=', False)]}"/>
<field name="is_history" invisible="1"/>
<label for="bl_no"/>
<h1>
<field name="bl_no" readonly="True"/>
......
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record model="ir.ui.view" id="tree_cc_history_big_package_view">
<field name="name">tree.cc.history.big.package</field>
<field name="model">cc.history.big.package</field>
<field name="arch" type="xml">
<tree string="Big Package" decoration-warning="is_cancel==True">
<field optional="show" name="big_package_no" string="Big Package No."/>
<field optional="show" name="bl_id"/>
<field name="ship_package_qty" string="Packages Qty"/>
<field name="goods_qty" string="Goods Qty"/>
<field name="is_cancel" string="Cancelled"/>
<field name="pallet_number"/>
<field name="pallet_usage_date"/>
<field name="tally_state" optional="show"/>
<field name="tally_user_id" optional="show"/>
<field name="tally_time" optional="show"/>
<field name="delivery_user_id" optional="show"/>
<field name="delivery_time" optional="show"/>
<field optional="show" name="create_date"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="form_cc_history_big_package_view">
<field name="name">form.cc.history.big.package</field>
<field name="model">cc.history.big.package</field>
<field name="arch" type="xml">
<form string="Big Package">
<header>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_show_ship_package" type="object"
class="oe_stat_button" icon="fa-star">
<div class="o_stat_info">
<field name="ship_package_qty" class="o_stat_value"/>
<span class="o_stat_text">Ship Packages</span>
</div>
</button>
<button name="action_show_package_good" type="object"
class="oe_stat_button" icon="fa-star">
<div class="o_stat_info">
<field name="goods_qty" class="o_stat_value"/>
<span class="o_stat_text">Goods</span>
</div>
</button>
</div>
<widget name="web_ribbon" bg_color="bg-warning" title="Cancelled"
attrs="{'invisible': [('is_cancel', '=', False)]}"/>
<label for="big_package_no"/>
<h1>
<field name="big_package_no" readonly="True"/>
</h1>
<group>
<group>
<field name="big_package_no" string="Big Package No."/>
<field name="bl_id" string="Bill of Loading"/>
<field name="next_provider_name" string="Next Provider Name"/>
<field name="pallet_number" readonly="1"/>
<field name="pallet_usage_date" readonly="1"/>
<field name="exception_info_ids" readonly="1" widget="many2many_tags"/>
<field name="is_cancel" string="Cancelled"/>
<field name="tally_state" readonly="1"/>
<field name="tally_user_id" readonly="1" options="{'no_create':True}"/>
<field name="tally_time" readonly="1"/>
<field name="delivery_user_id" readonly="1" options="{'no_create':True}"/>
<field name="delivery_time" readonly="1"/>
</group>
<group>
<field name="ship_package_qty" string="Package Qty"/>
<field name="goods_qty" string="Goods Qty"/>
</group>
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids" options="{'post_refresh': 'recipients'}"/>
</div>
</form>
</field>
</record>
<record model="ir.ui.view" id="search_cc_history_big_package_view">
<field name="name">search.cc.history.big.package</field>
<field name="model">cc.history.big.package</field>
<field name="arch" type="xml">
<search string="Big Package">
<field name="big_package_no" string="Search"
filter_domain="['|', ('big_package_no', 'ilike', self), ('bl_id', 'ilike', self)]"/>
<separator/>
<filter string="Today's big package"
domain="[('create_date', '&gt;=', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))
, ('create_date', '&lt;', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc() + datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'))]"
name="today_ship"/>
<filter string="Yesterday's big package"
domain="[('create_date', '>=', (datetime.datetime.combine(context_today() - datetime.timedelta(days=1), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')), ('create_date', '&lt;', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))]"
name="yesterday_ship"/>
<filter string="Last 7 days big package"
domain="[('create_date', '>=', (datetime.datetime.combine(context_today() - datetime.timedelta(days=7), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')),('create_date', '&lt;', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc() + datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'))]"
name="last_7d"/>
<filter string="Last 10 days big package"
domain="[('create_date', '>=', (datetime.datetime.combine(context_today() - datetime.timedelta(days=10), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')),('create_date', '&lt;', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc() + datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'))]"
name="last_10d"/>
<filter string="This week big package" name="this_week_ship"
domain="[('create_date', '&gt;=', (datetime.datetime.combine(context_today() + relativedelta(weeks=-1,days=1,weekday=0), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')),
('create_date', '&lt;', (datetime.datetime.combine(context_today() + relativedelta(days=1,weekday=0), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))]"/>
<filter string="Last week big package" name="last_week_ship"
domain="[('create_date', '&gt;=', (datetime.datetime.combine(context_today() + relativedelta(weeks=-2,days=1,weekday=0), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')),
('create_date', '&lt;', (datetime.datetime.combine(context_today() + relativedelta(weeks=-1,days=1,weekday=0), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))]"/>
<!-- <filter string="This month ship package"-->
<!-- domain="[('create_date', '>=', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-01 00:00:00'))]"-->
<!-- name="this_month_ship"/>-->
<!-- <filter string=" Last month ship package"-->
<!-- domain="[('create_date','&lt;', (context_today().replace(day=1)).strftime('%Y-%m-%d 00:00:00')),('create_date','&gt;=',(context_today() -relativedelta(months=1)).replace(day=1).strftime('%Y-%m-%d 00:00:00'))]"-->
<!-- name="last_month_ship"/>-->
<filter string="Last 30 days big Package"
domain="[('create_date', '>=', (datetime.datetime.combine(context_today() - datetime.timedelta(days=30), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')),('create_date', '&lt;', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc() + datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'))]"
name="last_30d"/>
<separator/>
<field name="big_package_no" string="Big Package No."/>
<field name="bl_id" string="Bill of Loading"/>
<field name="next_provider_name" string="Next Provider Name"/>
<separator/>
<filter string="Unprocessed goods" name="filter_unprocessed_goods"
domain="[('tally_state', '=', 'unprocessed_goods')]"/>
<filter string="Checked goods" name="filter_checked_goods"
domain="[('tally_state', '=', 'checked_goods')]"/>
<filter string="Handover Completed" name="filter_handover_completed"
domain="[('tally_state', '=', 'handover_completed')]"/>
<separator/>
<group expand="0" string="Group By">
<filter domain="[]" name="groupby_bl_id" string="Bill of Loading" context="{'group_by': 'bl_id'}"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_cc_history_big_package">
<field name="name">History Big Package</field>
<field name="res_model">cc.history.big.package</field>
<field name="view_mode">tree,form,pivot,graph</field>
<field name="domain">[]</field>
<field name="context">{'search_default_last_30d':1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
[History Big Package] Not yet! Click the Create button in the top left corner and the sofa is yours!
</p>
<p>
</p>
</field>
</record>
<!-- <record id="big_package_add_exception_info_server_action" model="ir.actions.server">-->
<!-- <field name="name">Batch Add Package Exception Information</field>-->
<!-- <field name="model_id" ref="model_cc_big_package"/>-->
<!-- <field name="binding_model_id" ref="model_cc_big_package"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="binding_view_types">list</field>-->
<!-- <field name="groups_id" eval="[(4, ref('ccs_base.group_clearance_of_customs_manager'))]"/>-->
<!-- <field name="code">-->
<!-- if records:-->
<!-- action = records.action_package_exception_info()-->
<!-- </field>-->
<!-- </record>-->
<!-- <record id="action_cc_big_package_server" model="ir.actions.server">-->
<!-- <field name="name">全部航班</field>-->
<!-- <field name="model_id" ref="model_cc_big_package"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">-->
<!-- action = model.action_cc_big_package()-->
<!-- </field>-->
<!-- </record>-->
<!-- <menuitem id="menu_cc_big_package" name="Big Package" action="action_cc_big_package_server" sequence="13"/>-->
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
# ---------- History Package Good ------------
<record model="ir.ui.view" id="tree_cc_history_package_good_view">
<field name="name">tree.cc.history.package.good</field>
<field name="model">cc.history.package.good</field>
<field name="arch" type="xml">
<tree string="Package Good" decoration-warning="is_cancel==True">
<!-- # decoration-muted="opening_debit == 0 and opening_credit == 0" 根据条件显示每行的颜色 muted-->
<field optional="hide" name="item_id"/>
<field optional="show" name="sku_id" string="SKU ID"/>
<field optional="show" name="item_name_en"/>
<field optional="show" name="item_name_cn"/>
<field optional="hide" name="item_type"/>
<field optional="hide" name="origin_country"/>
<field optional="hide" name="freight"/>
<field optional="hide" name="weight"/>
<field optional="hide" name="quantity_unit"/>
<field optional="hide" name="quantity"/>
<field optional="show" name="item_total_price"/>
<field optional="hide" name="item_link"/>
<field optional="hide" name="bl_id"/>
<field optional="hide" name="bl_line_id" string="Ship Package"/>
<field optional="hide" name="export_hs_code"/>
<field optional="hide" name="import_hs_code"/>
<field optional="hide" name="currency_id" string="Currency"/>
<field optional="hide" name="cod_amount" widget="monetary"
options="{'currency_field': 'currency_id'}"/>
<field optional="show" name="declare_price" widget="monetary"
options="{'currency_field': 'currency_id'}"/>
<field optional="show" name="item_vat" string="Item VAT" widget="monetary"
options="{'currency_field': 'currency_id'}"/>
<field optional="show" name="vat_rate"/>
<field optional="hide" name="actual_tax_currency"/>
<field optional="show" name="actual_gst"/>
<field optional="hide" name="actual_gst_rate"/>
<field optional="show" name="actual_tax"/>
<field optional="hide" name="actual_tax_rate"/>
<field optional="show" name="actual_vat"/>
<field optional="hide" name="actual_vat_rate"/>
<field optional="show" name="item_tax_status"/>
<field optional="hide" name="is_cancel" string="Cancelled"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="form_cc_history_package_good_view">
<field name="name">form.cc.history.package.good</field>
<field name="model">cc.history.package.good</field>
<field name="arch" type="xml">
<form string="Package Good">
<header>
<field name="item_tax_status" widget="statusbar"/>
</header>
<sheet>
<widget name="web_ribbon" bg_color="bg-warning" title="Cancelled" attrs="{'invisible': [('is_cancel', '=', False)]}"/>
<label for="item_id"/>
<h1>
<field name="item_id"/>
</h1>
<group>
<field name="bl_id"/>
<field name="bl_line_id" string="Ship Package"/>
<field name="is_cancel" string="Is Cancel"/>
</group>
<group>
<group string="Base Info">
<field name="sku_id" string="SKU ID"/>
<field name="item_name_en"/>
<field name="item_name_cn"/>
<field name="item_type"/>
<field name="origin_country"/>
<field name="freight"/>
<field name="weight"/>
<field name="quantity_unit"/>
<field name="quantity"/>
<field name="item_total_price"/>
<field name="item_link"/>
</group>
<group string="CC Info">
<field name="export_hs_code"/>
<field name="import_hs_code"/>
<field name="currency_id" string="Currency"/>
<field name="cod_amount"/>
<field name="declare_price"/>
<field name="item_vat" string="Item VAT"/>
<field name="vat_rate"/>
<field name="actual_gst"/>
<field name="actual_gst_rate"/>
<field name="actual_tax"/>
<field name="actual_tax_currency"/>
<field name="actual_tax_rate"/>
<field name="actual_vat"/>
<field name="actual_vat_rate"/>
</group>
</group>
<notebook>
</notebook>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="search_cc_history_package_good_view">
<field name="name">search.cc.history.package.good</field>
<field name="model">cc.history.package.good</field>
<field name="arch" type="xml">
<search string="Package Good">
<field name="item_name_en" string="Search"
filter_domain="['|', ('item_id', 'ilike', self)'|', ('sku_id', 'ilike', self)'|', ('item_name_en', 'ilike', self), ('item_name_cn', 'ilike', self)]"/>
<separator/>
<field name="item_id"/>
<field name="sku_id" string="SKU ID"/>
<field name="item_name_en"/>
<field name="item_name_cn"/>
<field name="item_type"/>
<field name="origin_country"/>
<field name="freight"/>
<field name="weight"/>
<field name="quantity_unit"/>
<field name="quantity"/>
<field name="item_total_price"/>
<field name="item_link"/>
<field name="bl_id"/>
<field name="bl_line_id" string="Ship Package"/>
<field name="export_hs_code"/>
<field name="import_hs_code"/>
<field name="currency_id" string="Currency"/>
<field name="cod_amount"/>
<field name="declare_price"/>
<field name="item_vat" string="Item VAT"/>
<field name="vat_rate"/>
<field name="actual_gst"/>
<field name="actual_gst_rate"/>
<field name="actual_tax"/>
<field name="actual_tax_currency"/>
<field name="actual_tax_rate"/>
<field name="actual_vat"/>
<field name="actual_vat_rate"/>
<field name="item_tax_status"/>
<separator/>
<separator/>
<group expand="0" string="Group By">
<filter domain="[]" name="groupby_item_type" string="Good Type"
context="{'group_by': 'item_type'}"/>
<filter domain="[]" name="groupby_bl_id" string="Bill of Loading" context="{'group_by': 'bl_id'}"/>
<filter domain="[]" name="groupby_bl_line_id" string="Ship Package"
context="{'group_by': 'bl_line_id'}"/>
<filter domain="[]" name="groupby_currency_id" string="Currency"
context="{'group_by': 'currency_id'}"/>
<filter domain="[]" name="groupby_item_tax_status" string="Tax Status"
context="{'group_by': 'item_tax_status'}"/>
</group>
<searchpanel>
<field icon="fa-users" select="multi" name="item_type"/>
<field icon="fa-users" select="multi" name="item_tax_status"/>
</searchpanel>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_cc_history_package_good">
<field name="name">History Package Good</field>
<field name="res_model">cc.history.package.good</field>
<field name="view_mode">tree,form,pivot,graph</field>
<field name="domain">[]</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
[History Package Good] Not yet! Click the Create button in the top left corner and the sofa is yours!
</p>
<p>
</p>
</field>
</record>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<odoo>
# ---------- CC History Package Sync Log ------------
<record model="ir.ui.view" id="tree_cc_history_package_sync_log_view">
<field name="name">tree.cc.history.package.sync.log</field>
<field name="model">cc.history.package.sync.log</field>
<field name="arch" type="xml">
<tree string="CC History Package Sync Log">
<field optional="show" name="package_id"/>
<field optional="show" name="api_customer"/>
<field optional="show" name="process_code"/>
<field optional="show" name="operate_time"/>
<field optional="show" name="operate_user"/>
<field optional="show" name="sync_time"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="form_cc_history_package_sync_log_view">
<field name="name">form.cc.history.package.sync.log</field>
<field name="model">cc.history.package.sync.log</field>
<field name="arch" type="xml">
<form string="CC History Package Sync Log">
<sheet>
<group>
<group>
<field name="package_id"/>
<field name="api_customer"/>
<field name="process_code"/>
<field name="operate_time"/>
<field name="operate_user"/>
<field name="sync_time"/>
</group>
<group>
</group>
</group>
<notebook>
<page string="Operate Remark">
<field name="operate_remark"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="search_cc_history_package_sync_log_view">
<field name="name">search.cc.history.package.sync.log</field>
<field name="model">cc.history.package.sync.log</field>
<field name="arch" type="xml">
<search string="CC Ship Package Sync Log">
<field name="package_id"/>
<field name="api_customer"/>
<field name="process_code"/>
<field name="operate_time"/>
<field name="operate_user"/>
<field name="sync_time"/>
<separator/>
<filter name="filter_operate_time" string="Operate Time" date="operate_time"/>
<filter name="filter_sync_time" string="Sync Time" date="sync_time"/>
<separator/>
<group expand="0" string="Group By">
<filter domain="[]" name="groupby_package_id" string="Ship Package"
context="{'group_by': 'package_id'}"/>
<filter domain="[]" name="groupby_operate_user" string="Operate User"
context="{'group_by': 'operate_user'}"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_cc_history_package_sync_log">
<field name="name">CC History Package Sync Log</field>
<field name="res_model">cc.history.package.sync.log</field>
<field name="view_mode">tree</field>
<field name="domain">[]</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
[CC History Package Sync Log] Not yet! Click the Create button in the top left corner and the sofa is yours!
</p>
<p>
</p>
</field>
</record>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record model="ir.ui.view" id="tree_cc_history_ship_package_view">
<field name="name">tree.cc.history.ship.package</field>
<field name="model">cc.history.ship.package</field>
<field name="arch" type="xml">
<tree string="Ship Package" decoration-warning="is_cancel==True">
<field optional="show" name="state" string="Progress" widget="badge" decoration-info="1 == 1"/>
<field optional="show" name="process_time"/>
<field optional="show" name="tracking_no" string="Tracking No."/>
<field optional="show" name="trade_no"/>
<field optional="show" name="customer_id"/>
<field optional="hide" name="user_track_note"/>
<field optional="hide" name="container_no"/>
<field optional="hide" name="customer_ref"/>
<field optional="hide" name="company_code"/>
<field optional="hide" name="internal_account_number"/>
<field optional="hide" name="create_date"/>
<field optional="show" name="logistic_order_no"/>
<field optional="hide" name="buyer_region"/>
<field optional="show" name="big_package_no" string="Big Package No"/>
<field optional="hide" name="big_package_id" string="Big Package"/>
<field optional="show" name="bl_id" string="Bill of Loading"/>
<field optional="show" name="gross_weight"/>
<field optional="show" name="weight_unit"/>
<field optional="hide" name="currency_id" invisible="1"/>
<field optional="hide" name="currency"/>
<field optional="show" name="total_value" string="TOTAL VALUE" widget="monetary"
options="{'currency_field': 'currency_id'}"/>
<field optional="show" name="sender_country"/>
<field optional="hide" name="sender_city"/>
<field optional="hide" name="sender_state"/>
<field optional="show" name="sender_name"/>
<field optional="hide" name="sender_phone"/>
<field optional="hide" name="sender_postcode"/>
<field optional="hide" name="sender_vat_no"/>
<field optional="hide" name="sender_add_1"/>
<field optional="hide" name="sender_add_2"/>
<field optional="hide" name="sender_add_3"/>
<field optional="show" name="receiver_type"/>
<field optional="hide" name="receiver_vat_no"/>
<field optional="show" name="receiver_name"/>
<field optional="hide" name="receiver_phone"/>
<field optional="hide" name="receiver_email"/>
<field optional="hide" name="receiver_county"/>
<field optional="show" name="receiver_county_translate"/>
<field optional="hide" name="receiver_city"/>
<field optional="hide" name="receiver_postcode"/>
<field optional="hide" name="receiver_add_1"/>
<field optional="hide" name="receiver_add_2"/>
<field optional="hide" name="receiver_add_3"/>
<field optional="hide" name="actual_currency_id" invisible="1"/>
<field optional="show" name="actual_tax_currency" string="Actual Tax Currency"/>
<field optional="show" name="actual_gst" string="Actual GST" widget="monetary"
options="{'currency_field': 'actual_currency_id'}"/>
<field optional="show" name="actual_tax" string="Actual Tax" widget="monetary"
options="{'currency_field': 'actual_currency_id'}"/>
<field optional="hide" name="actual_tax_date" string="Actual Tax Date"/>
<field optional="show" name="actual_vat" string="Actual VAT" widget="monetary"
options="{'currency_field': 'actual_currency_id'}"/>
<field optional="show" name="actual_tax_tz" string="Actual Tax Timezone"/>
<field optional="show" name="is_cancel"/>
<field optional="hide" name="cancel_reason" string="Cancel Reason"/>
<field optional="hide" name="next_provider_name" string="Next Provider"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="form_cc_history_ship_package_view">
<field name="name">form.cc.history.ship.package</field>
<field name="model">cc.history.ship.package</field>
<field name="arch" type="xml">
<form string="Ship Package">
<header>
<field name="state" string="Progress Status" widget="statusbar"/>
</header>
<sheet>
<widget name="web_ribbon" bg_color="bg-warning" title="Cancelled"
attrs="{'invisible': [('is_cancel', '=', False)]}"/>
<label for="tracking_no"/>
<h1>
<field name="tracking_no" readonly="True"/>
</h1>
<group>
<field name="customer_id"/>
<field name="big_package_no" string="Big Package No" invisible="1"/>
<field name="big_package_id" string="Big Package"/>
<field name="bl_id" string="Bill of Loading"/>
<field name="next_provider_name" string="Next Provider Name"/>
<field name="exception_info_ids" readonly="1" widget="many2many_tags"/>
<field name="process_time" readonly="1"/>
</group>
<group>
<group string="base_info">
<field name="tracking_no" string="Tracking No."/>
<field name="trade_no"/>
<field name="user_track_note"/>
<field name="container_no"/>
<field name="customer_ref"/>
<field name="company_code" string="Company Code"/>
<field name="internal_account_number"/>
<field name="logistic_order_no"/>
<field name="buyer_region" string="Buyer Region"/>
<field name="node_exception_reason_id" readonly="1"
attrs="{'invisible':[('node_exception_reason_id','=',False)]}"/>
</group>
<group string="CC info">
<field name="gross_weight"/>
<field name="weight_unit"/>
<field name="currency_id" invisible="1"/>
<field name="currency"/>
<field name="total_value" string="TOTAL VALUE" widget="monetary"
options="{'currency_field': 'currency_id'}"/>
<separator/>
<field name="actual_tax_currency" string="Actual Tax Currency"/>
<field name="actual_currency_id" invisible="1"/>
<field name="actual_gst" string="Actual GST" widget="monetary"
options="{'currency_field': 'actual_currency_id'}"/>
<field name="actual_tax" string="Actual Tax" widget="monetary"
options="{'currency_field': 'actual_currency_id'}"/>
<field name="actual_tax_date" string="Actual Tax Date"/>
<field name="actual_vat" string="Actual VAT" widget="monetary"
options="{'currency_field': 'actual_currency_id'}"/>
<field name="actual_tax_tz" string="Actual Tax Timezone"/>
</group>
</group>
<group>
</group>
<notebook>
<page string="Goods">
<field name="good_ids" string="Goods"/>
</page>
<page string="Invoice Attachments">
<field name="invoice_attachment_ids" string="Invoice Attachments"
widget="many2many_binary"/>
</page>
<page string="Sender Info">
<group>
<field name="sender_name" string="NAME"/>
<field name="sender_phone" string="PHONE"/>
<field name="sender_vat_no" string="VAT"/>
<field name="sender_postcode" string="POSTCODE"/>
<field name="sender_country" string="COUNTRY"/>
<field name="sender_state" string="State"/>
<field name="sender_city" string="CITY"/>
<field name="sender_add_1" string="ADD 1"/>
<field name="sender_add_2" string="ADD 2"/>
<field name="sender_add_3" string="ADD 3"/>
</group>
</page>
<page string="Receiver Info">
<group>
<field name="receiver_name" string="NAME"/>
<field name="receiver_phone" string="PHONE"/>
<field name="receiver_email" string="EMAIL"/>
<field name="receiver_type" string="TYPE"/>
<field name="receiver_vat_no" string="VAT"/>
<field name="receiver_county" string="COUNTY"/>
<field name="receiver_county_translate" string="COUNTY(EN)"/>
<field name="receiver_city" string="CITY"/>
<field name="receiver_postcode" string="POSTCODE"/>
<field name="receiver_add_1" string="ADD 1"/>
<field name="receiver_add_2" string="ADD 2"/>
<field name="receiver_add_3" string="ADD 3"/>
</group>
</page>
<page string="Other">
<group>
<field name="is_cancel"/>
<field name="cancel_reason" string="Cancel Reason"/>
</group>
</page>
<page string="Sync Log">
<field name="sync_log_ids" widget="one2many_list"/>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids" options="{'post_refresh': 'recipients'}"/>
</div>
</form>
</field>
</record>
<record model="ir.ui.view" id="search_cc_history_ship_package_view">
<field name="name">search.cc.history.ship.package</field>
<field name="model">cc.history.ship.package</field>
<field name="arch" type="xml">
<search string="Ship Package">
<field name="tracking_no" string="Search"
filter_domain="['|', ('tracking_no', 'ilike', self), ('trade_no', 'ilike', self)]"/>
<separator/>
<filter string="Today's ship package"
domain="[('create_date', '&gt;=', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))
, ('create_date', '&lt;', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc() + datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'))]"
name="today_ship"/>
<filter string="Yesterday's ship package"
domain="[('create_date', '>=', (datetime.datetime.combine(context_today() - datetime.timedelta(days=1), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')), ('create_date', '&lt;', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))]"
name="yesterday_ship"/>
<filter string="Last 7 days ship package"
domain="[('create_date', '>=', (datetime.datetime.combine(context_today() - datetime.timedelta(days=7), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')),('create_date', '&lt;', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc() + datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'))]"
name="last_7d"/>
<filter string="This week ship package" name="this_week_ship"
domain="[('create_date', '&gt;=', (datetime.datetime.combine(context_today() + relativedelta(weeks=-1,days=1,weekday=0), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')),
('create_date', '&lt;', (datetime.datetime.combine(context_today() + relativedelta(days=1,weekday=0), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))]"/>
<filter string="Last week ship package" name="last_week_ship"
domain="[('create_date', '&gt;=', (datetime.datetime.combine(context_today() + relativedelta(weeks=-2,days=1,weekday=0), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')),
('create_date', '&lt;', (datetime.datetime.combine(context_today() + relativedelta(weeks=-1,days=1,weekday=0), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))]"/>
<!-- <filter string="This month ship package"-->
<!-- domain="[('create_date', '>=', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-01 00:00:00'))]"-->
<!-- name="this_month_ship"/>-->
<!-- <filter string=" Last month ship package"-->
<!-- domain="[('create_date','&lt;', (context_today().replace(day=1)).strftime('%Y-%m-%d 00:00:00')),('create_date','&gt;=',(context_today() -relativedelta(months=1)).replace(day=1).strftime('%Y-%m-%d 00:00:00'))]"-->
<!-- name="last_month_ship"/>-->
<filter string="Last 30 days Ship Package"
domain="[('create_date', '>=', (datetime.datetime.combine(context_today() - datetime.timedelta(days=30), datetime.time(0, 0, 0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')),('create_date', '&lt;', (datetime.datetime.combine(context_today(), datetime.time(0, 0, 0)).to_utc() + datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'))]"
name="last_30d"/>
<separator/>
<field name="tracking_no" string="Tracking No."/>
<field name="trade_no"/>
<field name="user_track_note"/>
<field name="container_no"/>
<field name="customer_ref"/>
<field name="company_code" string="Company Code"/>
<field name="internal_account_number"/>
<field name="logistic_order_no"/>
<field name="buyer_region"/>
<field name="big_package_no" string="Big Package No"/>
<field name="big_package_id" string="Big Package"/>
<field name="bl_id" string="Bill of Loading"/>
<field name="gross_weight"/>
<field name="weight_unit"/>
<field name="actual_currency_id"/>
<field name="currency_id"/>
<field name="currency"/>
<field name="total_value" string="TOTAL VALUE"/>
<field name="sender_city"/>
<field name="sender_country"/>
<field name="sender_name"/>
<field name="sender_phone" string="Sender PHONE"/>
<field name="sender_postcode"/>
<field name="sender_state"/>
<field name="sender_vat_no"/>
<field name="sender_add_1"/>
<field name="sender_add_2"/>
<field name="sender_add_3"/>
<field name="receiver_type"/>
<field name="receiver_vat_no"/>
<field name="receiver_name"/>
<field name="receiver_phone"/>
<field name="receiver_email"/>
<field name="receiver_city"/>
<field name="receiver_county"/>
<field name="receiver_county_translate"/>
<field name="receiver_postcode"/>
<field name="receiver_add_1"/>
<field name="receiver_add_2"/>
<field name="receiver_add_3"/>
<field name="actual_tax_currency" string="Actual Tax Currency"/>
<field name="actual_gst" string="Actual GST"/>
<field name="actual_tax" string="Actual Tax"/>
<field name="actual_tax_date" string="Actual Tax Date"/>
<field name="actual_vat" string="Actual VAT"/>
<field name="actual_tax_tz" string="Actual Tax Timezone"/>
<field name="state" string="Progress Status"/>
<field name="is_cancel"/>
<field name="cancel_reason" string="Cancel Reason"/>
<field name="next_provider_name" string="Next Provider Name"/>
<separator/>
<filter name="filter_no_bl" string="No Bill of Loading" domain="[('bl_id','=',False)]"/>
<separator/>
<!-- # 增加包裹货值大于135英镑的筛选条件-->
<filter name="filter_value_gt_135" string="Value > 135" domain="[('total_value','>',135)]"/>
<separator/>
<filter name="filter_is_cancel" string="Is Cancelled" domain="[('is_cancel','=',True)]"/>
<filter name="filter_not_cancel" string="Not Show Cancelled" domain="[('is_cancel','=',False)]"/>
<separator/>
<group expand="0" string="Group By">
<filter domain="[]" name="groupby_customer_id" string="From Customer"
context="{'group_by': 'customer_id'}"/>
<filter domain="[]" name="groupby_big_package_id" string="Big Package"
context="{'group_by': 'big_package_id'}"/>
<filter domain="[]" name="groupby_bl_id" string="Bill of Loading" context="{'group_by': 'bl_id'}"/>
<filter domain="[]" name="groupby_actual_currency_id" string="Currency"
context="{'group_by': 'actual_currency_id'}"/>
<filter domain="[]" name="groupby_currency_id" string="Currency"
context="{'group_by': 'currency_id'}"/>
<filter domain="[]" name="groupby_receiver_type" string="Receiver TYPE"
context="{'group_by': 'receiver_type'}"/>
<filter domain="[]" name="groupby_state" string="Progress state"
context="{'group_by': 'state'}"/>
</group>
<searchpanel>
<field icon="fa-users" select="multi" name="receiver_type"/>
<field icon="fa-users" select="multi" name="state"/>
</searchpanel>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_cc_history_ship_package">
<field name="name">History Ship Package</field>
<field name="res_model">cc.history.ship.package</field>
<field name="view_mode">tree,form,search,pivot,graph</field>
<field name="domain">[]</field>
<field name="context">{'search_default_last_30d':1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
[History Ship Package] Not yet! Click the Create button in the top left corner and the sofa is yours!
</p>
<p>
</p>
</field>
</record>
<!-- <record id="ship_package_add_exception_info_server_action" model="ir.actions.server">-->
<!-- <field name="name">Batch Add Package Exception Information</field>-->
<!-- <field name="model_id" ref="model_cc_ship_package"/>-->
<!-- <field name="binding_model_id" ref="model_cc_ship_package"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="binding_view_types">list</field>-->
<!-- <field name="groups_id" eval="[(4, ref('ccs_base.group_clearance_of_customs_manager'))]"/>-->
<!-- <field name="code">-->
<!-- if records:-->
<!-- action = records.action_package_exception_info()-->
<!-- </field>-->
<!-- </record>-->
</odoo>
\ No newline at end of file
......@@ -51,5 +51,15 @@
<menuitem sequence="20" name="Clearance Company" id="menu_cc_clearance_company"
action="action_cc_is_clearance_company"
parent="menu_ccs_base_main"/>
<menuitem sequence="25" name="History Data" id="menu_cc_history_data"
/>
<menuitem parent="menu_cc_history_data" sequence="1" name="History Big Package" id="menu_cc_history_big_package" action="action_cc_history_big_package"/>
<menuitem parent="menu_cc_history_data" sequence="5" name="History Package Goods" id="menu_cc_history_package_good" action="action_cc_history_package_good"/>
<menuitem parent="menu_cc_history_data" sequence="3" name="History Ship Package" id="menu_cc_history_ship_package" action="action_cc_history_ship_package"/>
</data>
</odoo>
\ No newline at end of file
......@@ -13,6 +13,14 @@ redis_options = dict(
db=0
)
postgresql_options = dict(
host="127.0.0.1",
port=5431,
database="hh_ccs_test",
user="odoo14",
password="qq166349",
)
# 测试
# db_ip = "121.199.167.133"
# db_port = "8369"
......
# coding=utf-8
import json
import logging
import psycopg2
import redis
from sqlalchemy import create_engine
import config
from datetime import timedelta, datetime
import pandas as pd
# from line_profiler import LineProfiler
# 创建一个 LineProfiler 实例
# profiler = LineProfiler()
# 默认字符gbk
logging.basicConfig(filename='logs/history_data_logger.log', level=logging.INFO)
# 设置文件字符为utf-8
# logging.basicConfig(handlers=[logging.FileHandler('logs/mail_push.log', 'a', 'utf-8')],
# format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO)
class Order_dispose(object):
def __init__(self):
print('new connection')
postgresql_options = config.postgresql_options
username = postgresql_options['user']
password = postgresql_options['password']
host = postgresql_options['host']
port = postgresql_options['port']
database = postgresql_options['database']
db_url = 'postgresql+psycopg2://{username}:{password}@{host}:{port}/{database}'.format(
username=username, password=password, host=host, port=port,
database=database)
self.conn_engine = create_engine(db_url)
self.pg_conn = psycopg2.connect(database=database, user=username,
password=password, host=host, port=port)
def get_init_data(self, days):
pg_conn = psycopg2.connect(**config.postgresql_options)
cursor = pg_conn.cursor()
db_handle = self.conn_engine
current_date = datetime.today()
# 计算180天之前的日期
past_date = current_date - timedelta(days=days)
return pg_conn, cursor, db_handle, past_date
def history_big_package(self, db_handle, big_package_data):
"""
创建历史大包数据
:param db_handle:
:param big_package_data: 原大包数据
:return: 历史大包id
"""
# 创建历史大包数据
big_package_vals = {
'origin_id': big_package_data.id,
'bl_id': big_package_data.bl_id,
'big_package_no': big_package_data.big_package_no,
'next_provider_name': big_package_data.next_provider_name,
'ship_package_qty': big_package_data.ship_package_qty,
'goods_qty': big_package_data.goods_qty,
'pallet_number': big_package_data.pallet_number,
'pallet_usage_date': big_package_data.pallet_usage_date,
'is_cancel': big_package_data.is_cancel,
'tally_state': big_package_data.tally_state,
'tally_user_id': big_package_data.tally_user_id,
'tally_time': big_package_data.tally_time,
'delivery_user_id': big_package_data.delivery_user_id,
'delivery_time': big_package_data.delivery_time,
# 'exception_info_ids': big_package_data.id,
# exception_info_ids
# goods_ids
# ship_package_ids
}
val_df = pd.DataFrame(big_package_vals, index=[0])
val_df.to_sql('cc_history_big_package', con=db_handle, if_exists='append', index=False)
sql = "select id from cc_history_big_package where origin_id=%s;" % big_package_data.id
new_order = pd.read_sql(sql, con=db_handle)
# logging.info("new_order:%s" % len(new_order))
history_big_package_id = new_order.to_dict()['id'][0]
insert_sql = 'insert into history_bigpackage_exception_info_rel (cc_history_big_package_id, cc_exception_info_id) ' \
'select %s, cc_exception_info_id from bigpackage_exception_info_rel where ' \
'cc_big_package_id=%s;' % (history_big_package_id, big_package_data.id)
pd.read_sql(insert_sql, con=db_handle, chunksize=100)
return history_big_package_id
def history_ship_package(self, db_handle, big_id, ship_package_data):
"""
创建历史小包数据
:param db_handle:
:param ship_package_data: 原小包数据
:param big_id: 历史大包id
:return: 历史小包id
"""
# 创建历史小包数据
history_ship_package_vals = {
'customer_id': ship_package_data.customer_id,
'origin_id': ship_package_data.id,
'bl_id': ship_package_data.bl_id,
'big_package_id': big_id,
'logistic_order_no': ship_package_data.logistic_order_no,
'tracking_no': ship_package_data.tracking_no,
'customer_ref': ship_package_data.customer_ref,
'internal_account_number': ship_package_data.internal_account_number,
'user_track_note': ship_package_data.user_track_note,
'company_code': ship_package_data.company_code,
'trade_no': ship_package_data.trade_no,
'big_package_no': ship_package_data.big_package_no,
'container_no': ship_package_data.container_no,
'buyer_region': ship_package_data.buyer_region,
'next_provider_name': ship_package_data.next_provider_name,
'sender_name': ship_package_data.sender_name,
'sender_vat_no': ship_package_data.sender_vat_no,
'sender_phone': ship_package_data.sender_phone,
'sender_add_1': ship_package_data.sender_add_1,
'sender_add_2': ship_package_data.sender_add_2,
'sender_add_3': ship_package_data.sender_add_3,
'sender_city': ship_package_data.sender_city,
'sender_state': ship_package_data.sender_state,
'sender_postcode': ship_package_data.sender_postcode,
'sender_country': ship_package_data.sender_country,
'receiver_name': ship_package_data.receiver_name,
'receiver_type': ship_package_data.receiver_type,
'receiver_vat_no': ship_package_data.receiver_vat_no,
'receiver_add_1': ship_package_data.receiver_add_1,
'receiver_add_2': ship_package_data.receiver_add_2,
'receiver_add_3': ship_package_data.receiver_add_3,
'receiver_city': ship_package_data.receiver_city,
'receiver_county': ship_package_data.receiver_county,
'receiver_county_translate': ship_package_data.receiver_county_translate,
'receiver_postcode': ship_package_data.receiver_postcode,
'receiver_email': ship_package_data.receiver_email,
'receiver_phone': ship_package_data.receiver_phone,
'gross_weight': ship_package_data.gross_weight,
'weight_unit': ship_package_data.weight_unit,
'currency': ship_package_data.currency,
'currency_id': ship_package_data.currency_id,
'total_value': ship_package_data.total_value,
'shipping_fee': ship_package_data.shipping_fee,
'tax_mark': ship_package_data.tax_mark,
'actual_tax': ship_package_data.actual_tax,
'actual_vat': ship_package_data.actual_vat,
'actual_gst': ship_package_data.actual_gst,
'actual_tax_currency': ship_package_data.actual_tax_currency,
'actual_currency_id': ship_package_data.actual_currency_id,
'actual_tax_date': ship_package_data.actual_tax_date,
'actual_tax_tz': ship_package_data.actual_tax_tz,
'is_cancel': ship_package_data.is_cancel,
'state': ship_package_data.state,
'node_exception_reason_id': ship_package_data.node_exception_reason_id,
'process_time': ship_package_data.process_time,
'cancel_reason': ship_package_data.cancel_reason,
# 'exception_info_ids': ship_package_obj.exception_info_ids,ship_package_data.id
# 'invoice_attachment_ids': ship_package_obj.invoice_attachment_ids,ship_package_data.id
# exception_info_ids
# invoice_attachment_ids
# good_ids
# sync_log_ids
'operation_time': ship_package_data.operation_time,
'state_explain': ship_package_data.state_explain,
'is_sync': ship_package_data.is_sync,
'tk_code': ship_package_data.tk_code,
}
val_df = pd.DataFrame(history_ship_package_vals, index=[0])
val_df.to_sql('cc_history_ship_package', con=db_handle, if_exists='append', index=False)
sql = "select id from cc_history_ship_package where origin_id=%s;" % ship_package_data.id
new_order = pd.read_sql(sql, con=db_handle)
# logging.info("new_order:%s" % len(new_order))
history_ship_package_id = new_order.to_dict()['id'][0]
insert_sql = 'insert into history_package_exception_info_rel (cc_history_ship_package_id, cc_exception_info_id) ' \
'select %s, cc_exception_info_id from shippackage_exception_info_rel where ' \
'cc_ship_package_id=%s;' % (history_ship_package_id, ship_package_data.id)
pd.read_sql(insert_sql, con=db_handle, chunksize=100)
insert_sql = 'insert into history_package_invoice_attachment_rel (cc_history_ship_package_id, ir_attachment_id) ' \
'select %s, ir_attachment_id from ship_package_invoice_attachment_rel where ' \
'cc_ship_package_id=%s;' % (history_ship_package_id, ship_package_data.id)
pd.read_sql(insert_sql, con=db_handle, chunksize=100)
return history_ship_package_id
def history_sync_log(self, db_handle, history_ship_package_id, ship_package_id):
"""
创建历史小包日志
:param db_handle:
:param history_ship_package_id: 历史小包id
:param ship_package_id: 原来小包id
:return:
"""
sync_sql = "SELECT id, sync_time, api_customer, process_code, operate_time, operate_remark, operate_user FROM cc_ship_package_sync_log WHERE package_id = %s;"
sync_log_result_arr = pd.read_sql(sync_sql, con=db_handle, params=(ship_package_id,))
sync_log_vals_list = []
for sync_log_result in sync_log_result_arr.itertuples():
sync_log_data = sync_log_result
# 创建历史小包日志数据
sync_log_vals = {
'package_id': history_ship_package_id,
'sync_time': sync_log_data.sync_time,
'api_customer': sync_log_data.api_customer,
'process_code': sync_log_data.process_code,
'operate_time': sync_log_data.operate_time,
'operate_remark': sync_log_data.operate_remark,
'operate_user': sync_log_data.operate_user,
}
sync_log_vals_list.append(sync_log_vals)
if sync_log_vals_list:
val_df = pd.DataFrame(sync_log_vals_list)
val_df.to_sql('cc_history_package_sync_log', con=db_handle, if_exists='append', index=False)
origin_log_ids = sync_log_result_arr['id'].tolist()
return origin_log_ids
def history_package_goods(self, db_handle, ship_package_id, history_ship_package_id, big_id, select_bl_id):
"""
创建历史小包商品
:param db_handle:
:param ship_package_id: 原小包id
:param history_ship_package_id: 历史小包id
:param big_id: 历史大包id
:param select_bl_id: 原提单id
:return:
"""
# 商品
package_good_sql = """select id, bl_line_id, big_package_id, bl_id, item_id, sku_id,
item_name_cn, item_name_en, export_hs_code, import_hs_code, weight,
quantity, quantity_unit, declare_price, freight, cod_amount, vat_rate,
item_vat, origin_country, item_type, item_total_price, item_link,
item_tax_status, actual_tax, actual_tax_rate, actual_tax_currency,
actual_vat, actual_vat_rate, actual_gst, actual_gst_rate, currency_id,
is_cancel from cc_package_good where bl_line_id=%s;""" % ship_package_id
package_good_result_arr = pd.read_sql(package_good_sql, con=db_handle)
# origin_goods_ids = []
package_good_vals_list = []
for package_good_data in package_good_result_arr.itertuples():
# 创建历史小包商品数据
package_good_vals = {
'origin_id': package_good_data.id,
'bl_line_id': history_ship_package_id,
'big_package_id': big_id,
'bl_id': select_bl_id,
'item_id': package_good_data.item_id,
'sku_id': package_good_data.sku_id,
'item_name_cn': package_good_data.item_name_cn,
'item_name_en': package_good_data.item_name_en,
'export_hs_code': package_good_data.export_hs_code,
'import_hs_code': package_good_data.import_hs_code,
'weight': package_good_data.weight,
'quantity': package_good_data.quantity,
'quantity_unit': package_good_data.quantity_unit,
'declare_price': package_good_data.declare_price,
'freight': package_good_data.freight,
'cod_amount': package_good_data.cod_amount,
'vat_rate': package_good_data.vat_rate,
'item_vat': package_good_data.item_vat,
'origin_country': package_good_data.origin_country,
'item_type': package_good_data.item_type,
'item_total_price': package_good_data.item_total_price,
'item_link': package_good_data.item_link,
'item_tax_status': package_good_data.item_tax_status,
'actual_tax': package_good_data.actual_tax,
'actual_tax_rate': package_good_data.actual_tax_rate,
'actual_tax_currency': package_good_data.actual_tax_currency,
'actual_vat': package_good_data.actual_vat,
'actual_vat_rate': package_good_data.actual_vat_rate,
'actual_gst': package_good_data.actual_gst,
'actual_gst_rate': package_good_data.actual_gst_rate,
'currency_id': package_good_data.currency_id,
'is_cancel': package_good_data.is_cancel,
}
package_good_vals_list.append(package_good_vals)
if package_good_vals_list:
val_df = pd.DataFrame(package_good_vals_list, index=[0])
val_df.to_sql('cc_history_package_good', con=db_handle, if_exists='append', index=False)
origin_goods_ids = package_good_result_arr['id'].tolist()
return origin_goods_ids
def delete_origin_data(self):
pass
# @profiler
def order_data(self, data):
res_data = []
try:
data = json.loads(data)
days = int(data.get('history_days', 180)) # 默认180天之前的数据
origin_delete = int(data.get('origin_delete', 1)) # 默认删除原数据
limit_num = int(data.get('history_limit', 50)) # 默认一次同步50个提单
pg_conn, cursor, db_handle, past_date = self.get_init_data(days)
# 获取历史提单
sql = 'select id,bl_no from cc_bl where (is_history=False or is_history is null) and create_date < %s order by create_date asc limit %s;'
result_arr = pd.read_sql(sql, con=db_handle, params=(past_date, int(limit_num)))
# sql = 'select id,bl_no from cc_bl where id = 14;'
# result_arr = pd.read_sql(sql, con=db_handle) # , params=(14,)
# 获取查询结果
# delete_order_ids = []
for res in result_arr.itertuples():
select_bl_id = res.id # 原提单id
select_bl_no = res.bl_no
delete_big_ids = []
delete_package_ids = []
delete_good_ids = []
delete_log_ids = []
# 查提单下的所有大包
big_sql = 'select id,bl_id,big_package_no,next_provider_name,ship_package_qty,goods_qty,' \
'pallet_number,pallet_usage_date,is_cancel,tally_state,tally_user_id,tally_time,' \
'delivery_user_id,delivery_time from cc_big_package where bl_id = %s;'
big_package_result_arr = pd.read_sql(big_sql, con=db_handle, params=(select_bl_id,))
for big_package_data in big_package_result_arr.itertuples():
origin_id = big_package_data.id
# 处理历史大包
history_big_id = self.history_big_package(db_handle, big_package_data) # 返回历史大包id
delete_big_ids.append(origin_id) # 添加删除大包
# 原大包中的小包
parcel_sql = "select * from cc_ship_package where big_package_id=%s;" % origin_id
ship_package_result_arr = pd.read_sql(parcel_sql, con=db_handle)
# 原小包数据
for ship_package_data in ship_package_result_arr.itertuples():
# 处理历史小包
history_ship_package_id = self.history_ship_package(db_handle, history_big_id, ship_package_data)
delete_package_ids.append(ship_package_data.id) # 添加删除小包
# 处理历史小包推送日志
origin_log_ids = self.history_sync_log(db_handle, history_ship_package_id, ship_package_data.id)
delete_log_ids += origin_log_ids
# 处理历史小包商品
origin_goods_ids = self.history_package_goods(db_handle, ship_package_data.id, history_ship_package_id, history_big_id,
select_bl_id)
delete_good_ids += origin_goods_ids
update_sql = 'update cc_bl set is_history=True where id=%s' % select_bl_id
pd.read_sql(update_sql, con=db_handle, chunksize=100)
if origin_delete:
# print('delete data')
if delete_big_ids: # 删除原大包
ids = '(%s)' % str(delete_big_ids)[1:-1]
delete_big_sql = 'delete from cc_big_package where id in %s' % ids
pd.read_sql(delete_big_sql, con=db_handle, chunksize=100)
if delete_package_ids: # 删除原小包
ids = '(%s)' % str(delete_package_ids)[1:-1]
delete_package_sql = 'delete from cc_ship_package where id in %s' % ids
pd.read_sql(delete_package_sql, con=db_handle, chunksize=100)
if delete_good_ids: # 删除原小包商品
ids = '(%s)' % str(delete_good_ids)[1:-1]
delete_goods_sql = 'delete from cc_package_good where id in %s' % ids
pd.read_sql(delete_goods_sql, con=db_handle, chunksize=100)
if delete_log_ids: # 删除原小包tiktok日志
ids = '(%s)' % str(delete_log_ids)[1:-1]
delete_log_sql = 'delete from cc_ship_package_sync_log where id in %s' % ids
pd.read_sql(delete_log_sql, con=db_handle, chunksize=100)
logging.info(f'同步提单:{select_bl_no},删除大包{len(delete_big_ids)}个,删除小包{len(delete_package_ids)}个,删除小包商品{len(delete_good_ids)}个,删除小包日志{len(delete_log_ids)}条')
except Exception as ex:
logging.error('create_history_data error:%s' % str(ex))
# profiler.print_stats(output_unit=1)
return res_data
try:
pool = redis.ConnectionPool(**config.redis_options)
r = redis.Redis(connection_pool=pool)
logging.info(u'redis连接成功')
Order_dispose = Order_dispose()
while 1:
try:
result = r.brpop('history_data_list', 0)
# print(result[1])
data1 = result[1]
response_data = Order_dispose.order_data(data1)
except Exception as e:
logging.error(e)
continue
except Exception as e:
logging.error("登录失败:%s" % e)
[program:history_data_consumer_1]
process_name=%(program_name)s_%(process_num)02d ; 进程名称
directory = /mnt/extra-addons ; 程序的启动目录
command = /usr/bin/python3 /mnt/extra-addons/history_data.py ; 启动命令
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = root ; 用哪个用户启动
numprocs=1 ; 进程数
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /var/log/supervisor/history_data.log
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论