提交 71f8dcbf authored 作者: 贺阳's avatar 贺阳

生成Pda扫码记录

上级 47f45379
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
'views/cc_node_view.xml', 'views/cc_node_view.xml',
'views/cc_ship_package_view.xml', 'views/cc_ship_package_view.xml',
'views/cc_bl_view.xml', 'views/cc_bl_view.xml',
'views/pda_scan_record_views.xml',
], ],
'demo': [ 'demo': [
......
...@@ -143,6 +143,8 @@ class OrderController(http.Controller): ...@@ -143,6 +143,8 @@ class OrderController(http.Controller):
pda_lang = kwargs.get('pda_lang') or 'zh' pda_lang = kwargs.get('pda_lang') or 'zh'
res = {'state': 201, 'message': ''} res = {'state': 201, 'message': ''}
action_type = kwargs.get('action_type') or 'tally' # tally / handover action_type = kwargs.get('action_type') or 'tally' # tally / handover
operation = 'bill_tally' if action_type == 'tally' else 'bill_handover'
bl_obj = False
try: try:
logging.info('update_big_package_tally_detail kw:%s' % kwargs) logging.info('update_big_package_tally_detail kw:%s' % kwargs)
if kwargs.get('bl_no') and action_type and ( if kwargs.get('bl_no') and action_type and (
...@@ -270,6 +272,13 @@ class OrderController(http.Controller): ...@@ -270,6 +272,13 @@ class OrderController(http.Controller):
email_language=lang) email_language=lang)
ship_wizard_obj.confirm() # 发送邮件 ship_wizard_obj.confirm() # 发送邮件
res['state'] = 200 res['state'] = 200
# 创建成功的pda扫码记录
request.env['pda.scan.record'].sudo().create_scan_record(
operation=operation,
record_type=action_type,
bill_number=bl_obj.bl_no,
transfer_number=bl_obj.transfer_bl_no,
state='success')
logging.info( logging.info(
'update_big_package_tally_detail ship_packages:%s' % len(ship_packages)) 'update_big_package_tally_detail ship_packages:%s' % len(ship_packages))
# 有小包 就更新小包状态和同步 # 有小包 就更新小包状态和同步
...@@ -297,6 +306,16 @@ class OrderController(http.Controller): ...@@ -297,6 +306,16 @@ class OrderController(http.Controller):
'zh': '系统解析错误,错误原因是%s' % e 'zh': '系统解析错误,错误原因是%s' % e
} }
res['message'] = exceptions_msg_dic[pda_lang] res['message'] = exceptions_msg_dic[pda_lang]
# 创建失败的pda扫码记录
if bl_obj:
request.env['pda.scan.record'].sudo().create_scan_record(
operation=operation,
record_type=action_type,
bill_number=bl_obj.bl_no,
transfer_number=bl_obj.transfer_bl_no,
state='failed')
else:
request.env['pda.scan.record'].sudo().create_scan_record(operation, action_type, '', '', 'failed')
logging.info('res:%s' % res) logging.info('res:%s' % res)
return res return res
...@@ -311,10 +330,11 @@ class OrderController(http.Controller): ...@@ -311,10 +330,11 @@ class OrderController(http.Controller):
pda_lang = kwargs.get('pda_lang') or 'zh' pda_lang = kwargs.get('pda_lang') or 'zh'
res = {'state': 201, 'message': ''} res = {'state': 201, 'message': ''}
action_type = kwargs.get('action_type') or 'tally' # tally / handover action_type = kwargs.get('action_type') or 'tally' # tally / handover
operation = 'tail_tally' if action_type == 'tally' else 'tail_handover'
ship_packages = []
try: try:
logging.info('update_pro_big_package_tally_detail kw:%s' % kwargs) logging.info('update_pro_big_package_tally_detail kw:%s' % kwargs)
if action_type and (kwargs.get('big_package_arr') or kwargs.get('ship_package_arr')): if action_type and (kwargs.get('big_package_arr') or kwargs.get('ship_package_arr')):
ship_packages = []
big_package_exception_arr = {} big_package_exception_arr = {}
ship_package_exception_arr = {} ship_package_exception_arr = {}
...@@ -421,6 +441,17 @@ class OrderController(http.Controller): ...@@ -421,6 +441,17 @@ class OrderController(http.Controller):
'update_big_package_tally_detail ship_packages:%s' % len(ship_packages)) 'update_big_package_tally_detail ship_packages:%s' % len(ship_packages))
# 有小包 就更新小包状态和同步 # 有小包 就更新小包状态和同步
if ship_packages: if ship_packages:
# 在这里创建成功的pda扫码记录
bl_obj = request.env['cc.bl'].sudo().search(
[('id', 'in', [ship_package.get('bl_id') for ship_package in ship_packages])], limit=1)
if bl_obj:
for bl in bl_obj:
request.env['pda.scan.record'].sudo().create_scan_record(
operation=operation,
record_type=action_type,
bill_number=bl.bl_no,
transfer_number=bl.transfer_bl_no,
state='success')
redis_conn = request.env['common.common'].sudo().get_redis() redis_conn = request.env['common.common'].sudo().get_redis()
if redis_conn and redis_conn != 'no': if redis_conn and redis_conn != 'no':
# redis_conn.lpush('push_ship_package_state', json.dumps( # redis_conn.lpush('push_ship_package_state', json.dumps(
...@@ -444,6 +475,21 @@ class OrderController(http.Controller): ...@@ -444,6 +475,21 @@ class OrderController(http.Controller):
'zh': '系统解析错误,错误原因是%s' % e 'zh': '系统解析错误,错误原因是%s' % e
} }
res['message'] = exceptions_msg_dic[pda_lang] res['message'] = exceptions_msg_dic[pda_lang]
# 在这里创建失败的pda扫码记录
if ship_packages:
bl_obj = request.env['cc.bl'].sudo().search(
[('id', 'in', [ship_package.get('bl_id') for ship_package in ship_packages])], limit=1)
if bl_obj:
for bl in bl_obj:
request.env['pda.scan.record'].sudo().create_scan_record(
operation=operation,
record_type=action_type,
bill_number=bl.bl_no,
transfer_number=bl.transfer_bl_no,
state='failed')
else:
request.env['pda.scan.record'].sudo().create_scan_record(operation, action_type, '', '', 'failed')
logging.info('res:%s' % res) logging.info('res:%s' % res)
return res return res
......
...@@ -578,3 +578,93 @@ msgstr "" ...@@ -578,3 +578,93 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_ao_tt_api_log_view #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_ao_tt_api_log_view
msgid "近7日日志" msgid "近7日日志"
msgstr "" msgstr ""
#. module: ccs_connect_tiktok
#: model:ir.model,name:ccs_connect_tiktok.model_pda_scan_record
msgid "PDA Scan Record"
msgstr "PDA扫码记录"
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__operation
msgid "Operation"
msgstr "操作"
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__record_type
msgid "Type"
msgstr "类型"
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__bill_number
msgid "Bill Number"
msgstr "提单号"
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_pda_scan_record__transfer_number
msgid "Transfer Number"
msgstr "转运单号"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__bill_tally
msgid "Bill Tally"
msgstr "按提单理货"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__tail_tally
msgid "Tail Tally"
msgstr "按尾程理货"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__bill_handover
msgid "Bill Handover"
msgstr "按提单交货"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__operation__tail_handover
msgid "Tail Handover"
msgstr "按尾程交货"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__record_type__tally
msgid "Tally"
msgstr "理货"
#. module: ccs_connect_tiktok
#: model:ir.model.fields.selection,name:ccs_connect_tiktok.selection__pda_scan_record__record_type__handover
msgid "Handover"
msgstr "交货"
#. module: ccs_connect_tiktok
#: model:ir.actions.act_window,name:ccs_connect_tiktok.action_pda_scan_record
#: model:ir.ui.menu,name:ccs_connect_tiktok.menu_pda_scan_record
msgid "PDA Scan Record"
msgstr "PDA扫码记录"
#. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.view_pda_scan_record_search
msgid "Tally"
msgstr "理货"
#. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.view_pda_scan_record_search
msgid "Handover"
msgstr "交货"
#. module: ccs_connect_tiktok
#: model_terms:ir.actions.act_window,help:ccs_connect_tiktok.action_pda_scan_record
msgid "Create your first PDA scan record"
msgstr "创建第一条PDA扫码记录"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#, python-format
msgid "Scan record created successfully"
msgstr "扫码记录创建成功"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/pda_scan_record.py:0
#, python-format
msgid "Creation failed: %s"
msgstr "创建失败: %s"
...@@ -8,6 +8,7 @@ from . import cc_node ...@@ -8,6 +8,7 @@ from . import cc_node
from . import cc_bill_loading from . import cc_bill_loading
from . import ir_attachment from . import ir_attachment
from . import http from . import http
from . import pda_scan_record
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class PDAScanRecord(models.Model):
_name = 'pda.scan.record'
_description = _('PDA Scan Record') # PDA扫码记录
_order = 'create_date desc'
@api.onchange('operation')
def _onchange_operation(self):
"""根据操作自动设置类型"""
if self.operation:
if 'tally' in self.operation:
self.record_type = 'tally'
elif 'handover' in self.operation:
self.record_type = 'handover'
operator_id = fields.Many2one('res.users', string='操作人', required=True)
# operation_time = fields.Datetime(string='操作时间', required=True, default=fields.Datetime.now)
operation = fields.Selection([
('bill_tally', _('Bill Tally')), # 按提单理货
('tail_tally', _('Tail Tally')), # 按尾程理货
('bill_handover', _('Bill Handover')), # 按提单交货
('tail_handover', _('Tail Handover')) # 按尾程交货
], string=_('Operation'), required=True) # 操作
record_type = fields.Selection([
('tally', _('Tally')), # 理货
('handover', _('Handover')) # 交货
], string=_('Type'), required=True) # 类型
bill_number = fields.Char(string=_('Bill Number')) # 提单号
transfer_number = fields.Char(string=_('Transfer Number')) # 转运单号
#增加状态 成功 失败
state = fields.Selection([
('success', _('Success')),
('failed', _('Failed'))
], string=_('State'), required=True)
@api.model
def create_scan_record(self, operation, record_type, bill_number, transfer_number,state,operator_id=False):
"""
创建扫码记录的方法,供接口调用
Create scan record method for API calls
"""
try:
if not operator_id:
operator_id = self.env['res.users'].search([('login', '=', 'pda')], limit=1).id
record = self.create({
'operator_id': operator_id,
'operation': operation,
'record_type': record_type,
'bill_number': bill_number,
'transfer_number': transfer_number,
'state': state
})
return {
'success': True,
'record_id': record.id,
'message': ''
}
except Exception as e:
return {
'success': False,
'message': _('Creation failed: %s') % str(e) # 创建失败
}
\ No newline at end of file
...@@ -15,6 +15,8 @@ class ResConfigSettings(models.TransientModel): ...@@ -15,6 +15,8 @@ class ResConfigSettings(models.TransientModel):
tt_app_secret = fields.Char('AppSecret', default='') tt_app_secret = fields.Char('AppSecret', default='')
tt_version = fields.Char('接口版本', default='3.0') tt_version = fields.Char('接口版本', default='3.0')
tt_customer_id = fields.Many2one('res.partner', string='客户') tt_customer_id = fields.Many2one('res.partner', string='客户')
#交货操作晚于提货操作X分钟【默认80分钟】
delivery_time = fields.Integer('交货操作晚于提货操作X分钟', default=80)
@api.model @api.model
def get_values(self): def get_values(self):
...@@ -29,13 +31,15 @@ class ResConfigSettings(models.TransientModel): ...@@ -29,13 +31,15 @@ class ResConfigSettings(models.TransientModel):
tt_app_secret = config.get_param('tt_app_secret', default='') tt_app_secret = config.get_param('tt_app_secret', default='')
tt_version = config.get_param('tt_version', default='') tt_version = config.get_param('tt_version', default='')
tt_customer_id = config.get_param('tt_customer_id', default=False) tt_customer_id = config.get_param('tt_customer_id', default=False)
delivery_time = config.get_param('delivery_time', default=80)
customer = self.env['res.partner'].sudo().search([('id', '=', tt_customer_id)]) customer = self.env['res.partner'].sudo().search([('id', '=', tt_customer_id)])
values.update( values.update(
tt_url=tt_url, tt_url=tt_url,
tt_app_key=tt_app_key, tt_app_key=tt_app_key,
tt_app_secret=tt_app_secret, tt_app_secret=tt_app_secret,
tt_version=tt_version, tt_version=tt_version,
tt_customer_id=customer tt_customer_id=customer,
delivery_time=delivery_time
) )
return values return values
...@@ -47,3 +51,4 @@ class ResConfigSettings(models.TransientModel): ...@@ -47,3 +51,4 @@ class ResConfigSettings(models.TransientModel):
ir_config.set_param("tt_app_secret", self.tt_app_secret or "") ir_config.set_param("tt_app_secret", self.tt_app_secret or "")
ir_config.set_param("tt_version", self.tt_version or "") ir_config.set_param("tt_version", self.tt_version or "")
ir_config.set_param("tt_customer_id", self.tt_customer_id.id or False) ir_config.set_param("tt_customer_id", self.tt_customer_id.id or False)
ir_config.set_param("delivery_time", self.delivery_time or 80)
\ No newline at end of file
...@@ -12,3 +12,6 @@ access_cc_bl_sync_log_base.group_erp_manager,cc_bl_sync_log base.group_erp_manag ...@@ -12,3 +12,6 @@ access_cc_bl_sync_log_base.group_erp_manager,cc_bl_sync_log base.group_erp_manag
access_cc_bl_sync_log_ccs_base.group_clearance_of_customs_manager,cc_bl_sync_log ccs_base.group_clearance_of_customs_manager,ccs_connect_tiktok.model_cc_bl_sync_log,ccs_base.group_clearance_of_customs_manager,1,0,0,0 access_cc_bl_sync_log_ccs_base.group_clearance_of_customs_manager,cc_bl_sync_log ccs_base.group_clearance_of_customs_manager,ccs_connect_tiktok.model_cc_bl_sync_log,ccs_base.group_clearance_of_customs_manager,1,0,0,0
access_cc_bl_sync_log_ccs_base.group_clearance_of_customs_user,cc_bl_sync_log ccs_base.group_clearance_of_customs_user,ccs_connect_tiktok.model_cc_bl_sync_log,ccs_base.group_clearance_of_customs_user,1,0,0,0 access_cc_bl_sync_log_ccs_base.group_clearance_of_customs_user,cc_bl_sync_log ccs_base.group_clearance_of_customs_user,ccs_connect_tiktok.model_cc_bl_sync_log,ccs_base.group_clearance_of_customs_user,1,0,0,0
access_pda_scan_record_user,pda.scan.record.user,model_pda_scan_record,base.group_user,1,1,1,0
access_pda_scan_record_manager,pda.scan.record.manager,model_pda_scan_record,base.group_system,1,1,1,1
...@@ -25,6 +25,10 @@ ...@@ -25,6 +25,10 @@
<label for="tt_customer_id"/> <label for="tt_customer_id"/>
<field name="tt_customer_id"/> <field name="tt_customer_id"/>
</div> </div>
<div class="text-muted">
<label for="delivery_time"/>
<field name="delivery_time"/>
</div>
</div> </div>
</div> </div>
<div class="col-12 col-lg-6 o_setting_box"> <div class="col-12 col-lg-6 o_setting_box">
......
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- PDA扫码记录列表视图 -->
<record id="view_pda_scan_record_tree" model="ir.ui.view">
<field name="name">pda.scan.record.tree</field>
<field name="model">pda.scan.record</field>
<field name="arch" type="xml">
<tree string="PDA Scan Record" decoration-info="state == 'success'" decoration-danger="state == 'failed'">
<field name="create_uid" />
<field name="create_date"/>
<!-- <field name="operator_id"/>
<field name="operation_time"/> -->
<field name="operation"/>
<field name="record_type"/>
<field name="bill_number"/>
<field name="transfer_number"/>
<field name="state"/>
</tree>
</field>
</record>
<!-- PDA扫码记录表单视图 -->
<record id="view_pda_scan_record_form" model="ir.ui.view">
<field name="name">pda.scan.record.form</field>
<field name="model">pda.scan.record</field>
<field name="arch" type="xml">
<form string="PDA Scan Record">
<header>
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<group>
<field name="create_uid" />
<field name="create_date"/>
<!-- <field name="operator_id"/>
<field name="operation_time"/> -->
<field name="operation"/>
</group>
<group>
<field name="record_type"/>
<field name="bill_number"/>
<field name="transfer_number"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<!-- PDA扫码记录搜索视图 -->
<record id="view_pda_scan_record_search" model="ir.ui.view">
<field name="name">pda.scan.record.search</field>
<field name="model">pda.scan.record</field>
<field name="arch" type="xml">
<search string="PDA Scan Record">
<field name="create_uid"/>
<field name="create_date"/>
<field name="operation"/>
<field name="record_type"/>
<field name="bill_number"/>
<field name="transfer_number"/>
<filter string="Tally" name="tally" domain="[('record_type', '=', 'tally')]"/>
<filter string="Handover" name="handover" domain="[('record_type', '=', 'handover')]"/>
</search>
</field>
</record>
<!-- PDA扫码记录动作 -->
<record id="action_pda_scan_record" model="ir.actions.act_window">
<field name="name">PDA Scan Record</field>
<field name="res_model">pda.scan.record</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_pda_scan_record_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create your first PDA scan record
</p>
</field>
</record>
<!-- 菜单项 -->
<menuitem id="menu_pda_scan_record"
name="PDA Scan Record"
action="action_pda_scan_record"
sequence="21"/>
</odoo>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论