提交 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 @@ ...@@ -24,8 +24,8 @@
'wizard/add_exception_info_wizard_views.xml', 'wizard/add_exception_info_wizard_views.xml',
'wizard/email_template.xml', 'wizard/email_template.xml',
'data/data.xml', 'data/data.xml',
'data/timer.xml',
'data/sequence.xml', 'data/sequence.xml',
'views/menu_view.xml',
'views/cc_clearance_file_view.xml', 'views/cc_clearance_file_view.xml',
'views/cc_node_view.xml', 'views/cc_node_view.xml',
'views/cc_last_mile_provider_views.xml', 'views/cc_last_mile_provider_views.xml',
...@@ -37,6 +37,11 @@ ...@@ -37,6 +37,11 @@
'views/cc_node_exception_reason_view.xml', 'views/cc_node_exception_reason_view.xml',
'views/cc_bl_view.xml', 'views/cc_bl_view.xml',
'views/res_config_setting.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', # 'views/cc_customers_declaration_order_view.xml',
'templates/login.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
差异被折叠。
...@@ -11,3 +11,7 @@ from . import mail_thread ...@@ -11,3 +11,7 @@ from . import mail_thread
from . import order_state_change_rule from . import order_state_change_rule
from . import res_config_setting 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 # 导入odoo
# 导入日志 # 导入日志
import logging import logging
from datetime import timedelta from datetime import timedelta, datetime
import json
import pytz import pytz
from odoo import models, fields, api, _ from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError from odoo.exceptions import UserError, ValidationError
...@@ -635,6 +635,19 @@ class CcBL(models.Model): ...@@ -635,6 +635,19 @@ class CcBL(models.Model):
item.big_package_ids.filtered( item.big_package_ids.filtered(
lambda package: package.tally_state == 'handover_completed' and not package.is_cancel)) 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) 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 ...@@ -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 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 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 @@ ...@@ -106,7 +106,13 @@
</div> </div>
<widget name="web_ribbon" bg_color="bg-warning" title="Cancelled" <widget name="web_ribbon" bg_color="bg-warning" title="Cancelled"
attrs="{'invisible': [('is_cancel', '=', False)]}"/> 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"/> <label for="bl_no"/>
<h1> <h1>
<field name="bl_no" readonly="True"/> <field name="bl_no" readonly="True"/>
......
差异被折叠。
<?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
...@@ -51,5 +51,15 @@ ...@@ -51,5 +51,15 @@
<menuitem sequence="20" name="Clearance Company" id="menu_cc_clearance_company" <menuitem sequence="20" name="Clearance Company" id="menu_cc_clearance_company"
action="action_cc_is_clearance_company" action="action_cc_is_clearance_company"
parent="menu_ccs_base_main"/> 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> </data>
</odoo> </odoo>
\ No newline at end of file
...@@ -13,6 +13,14 @@ redis_options = dict( ...@@ -13,6 +13,14 @@ redis_options = dict(
db=0 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_ip = "121.199.167.133"
# db_port = "8369" # db_port = "8369"
......
差异被折叠。
[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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论