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

1、提单增加已交货大包数量,右上角增加已交货大包的查看

2、查询提单信息的接口优化,理货的已扫大包:大包理货状态为已理货和尾程交接的数量 交货的已扫大包:大包理货状态为尾程交接的数量
上级 d06ed2a2
...@@ -6,8 +6,8 @@ msgid "" ...@@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 16.0\n" "Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 02:14+0000\n" "POT-Creation-Date: 2025-02-10 08:06+0000\n"
"PO-Revision-Date: 2025-02-10 10:24+0800\n" "PO-Revision-Date: 2025-02-10 16:06+0800\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: zh_CN\n" "Language: zh_CN\n"
...@@ -148,6 +148,11 @@ msgstr "" ...@@ -148,6 +148,11 @@ msgstr ""
msgid "<span class=\"o_stat_text\">Big Packages</span>" msgid "<span class=\"o_stat_text\">Big Packages</span>"
msgstr "<span class=\"o_stat_text\">大包</span>" msgstr "<span class=\"o_stat_text\">大包</span>"
#. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
msgid "<span class=\"o_stat_text\">Delivered Big Packages</span>"
msgstr "<span class=\"o_stat_text\">已交货大包</span>"
#. module: ccs_base #. module: ccs_base
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_big_package_view
#: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view #: model_terms:ir.ui.view,arch_db:ccs_base.form_cc_bl_view
...@@ -944,6 +949,18 @@ msgstr "申报价格" ...@@ -944,6 +949,18 @@ msgstr "申报价格"
msgid "Declare Type" msgid "Declare Type"
msgstr "申报类型" msgstr "申报类型"
#. module: ccs_base
#. odoo-python
#: code:addons/ccs_base/models/cc_bill_loading.py:0
#, python-format
msgid "Delivered Big Package"
msgstr "已交货大包"
#. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_bl__delivered_big_package_qty
msgid "Delivered Big Package Qty"
msgstr "已交货大包数量"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_big_package__delivery_time #: model:ir.model.fields,field_description:ccs_base.field_cc_big_package__delivery_time
msgid "Delivery Time" msgid "Delivery Time"
...@@ -952,7 +969,7 @@ msgstr "尾程交货时间" ...@@ -952,7 +969,7 @@ msgstr "尾程交货时间"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_big_package__delivery_user_id #: model:ir.model.fields,field_description:ccs_base.field_cc_big_package__delivery_user_id
msgid "Delivery User" msgid "Delivery User"
msgstr "尾程交人" msgstr "尾程交人"
#. module: ccs_base #. module: ccs_base
#: model:ir.model.fields,field_description:ccs_base.field_cc_node__desc #: model:ir.model.fields,field_description:ccs_base.field_cc_node__desc
......
...@@ -604,6 +604,16 @@ class CcBL(models.Model): ...@@ -604,6 +604,16 @@ class CcBL(models.Model):
item.big_package_ids.filtered( item.big_package_ids.filtered(
lambda package: package.tally_state == 'checked_goods' and not package.is_cancel)) lambda package: package.tally_state == 'checked_goods' and not package.is_cancel))
@api.depends('big_package_ids', 'big_package_ids.tally_state', 'big_package_ids.is_cancel')
def cal_delivered_big_package_qty(self):
"""
已交货的大包数量
"""
for item in self:
item.delivered_big_package_qty = len(
item.big_package_ids.filtered(
lambda package: package.tally_state == 'handover_completed' and not package.is_cancel))
# 提单号 # 提单号
bl_no = fields.Char(string='B/L No', index=True) bl_no = fields.Char(string='B/L No', index=True)
# 关务提单号 # 关务提单号
...@@ -618,6 +628,11 @@ class CcBL(models.Model): ...@@ -618,6 +628,11 @@ class CcBL(models.Model):
# 理货大包数量 # 理货大包数量
tally_big_package_qty = fields.Integer(string='Tally Big Package Qty', compute='cal_tally_big_package_qty', tally_big_package_qty = fields.Integer(string='Tally Big Package Qty', compute='cal_tally_big_package_qty',
store=True) store=True)
# 已交货大包数量
delivered_big_package_qty = fields.Integer(string='Delivered Big Package Qty',
compute='cal_delivered_big_package_qty',
store=True)
# 大包售卖国家 # 大包售卖国家
big_package_sell_country = fields.Char(string='Sell Country') big_package_sell_country = fields.Char(string='Sell Country')
...@@ -967,6 +982,16 @@ class CcBL(models.Model): ...@@ -967,6 +982,16 @@ class CcBL(models.Model):
'domain': [('bl_id', '=', self.id), ('is_cancel', '=', False), ('tally_state', '=', 'checked_goods')], 'domain': [('bl_id', '=', self.id), ('is_cancel', '=', False), ('tally_state', '=', 'checked_goods')],
} }
def action_show_big_package_delivered(self):
# 返回一个action,显示已交货的大包
return {
'name': _('Delivered Big Package'),
'type': 'ir.actions.act_window',
'res_model': 'cc.big.package',
'view_mode': 'tree,form',
'domain': [('bl_id', '=', self.id), ('is_cancel', '=', False), ('tally_state', '=', 'handover_completed')],
}
# 创建显示包裹的action # 创建显示包裹的action
def action_show_ship_package(self): def action_show_ship_package(self):
# 返回一个action,显示包裹 # 返回一个action,显示包裹
......
...@@ -8,7 +8,8 @@ ...@@ -8,7 +8,8 @@
<field name="model">cc.bl</field> <field name="model">cc.bl</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Bill of Loading" decoration-warning="is_cancel==True"> <tree string="Bill of Loading" decoration-warning="is_cancel==True">
<field optional="show" name="state" string="Status" widget="badge" decoration-info="state=='draft'" decoration-primary="state=='ccing'" decoration-success="state=='done'"/> <field optional="show" name="state" string="Status" widget="badge" decoration-info="state=='draft'"
decoration-primary="state=='ccing'" decoration-success="state=='done'"/>
<field optional="show" name="bl_no" string="Bill of Loading No."/> <field optional="show" name="bl_no" string="Bill of Loading No."/>
<field optional="show" name="bl_date" string="B/L Date"/> <field optional="show" name="bl_date" string="B/L Date"/>
<field optional="show" name="customer_id" string="Customer"/> <field optional="show" name="customer_id" string="Customer"/>
...@@ -47,7 +48,8 @@ ...@@ -47,7 +48,8 @@
<header> <header>
<!-- # 为action_batch_input_ship_package_wizard添加一个按钮, 上下文中添加bl_id--> <!-- # 为action_batch_input_ship_package_wizard添加一个按钮, 上下文中添加bl_id-->
<button name="%(action_batch_input_ship_package_wizard)d" type="action" class="oe_highlight" <button name="%(action_batch_input_ship_package_wizard)d" type="action" class="oe_highlight"
string="Update Ship Package Status" context="{'default_bl_id': active_id, 'active_id': id}"/> string="Update Ship Package Status"
context="{'default_bl_id': active_id, 'active_id': id}"/>
<field name="state" widget="statusbar" options="{'clickable': '1'}"/> <field name="state" widget="statusbar" options="{'clickable': '1'}"/>
</header> </header>
...@@ -68,6 +70,15 @@ ...@@ -68,6 +70,15 @@
<span class="o_stat_text">Tally Big Packages</span> <span class="o_stat_text">Tally Big Packages</span>
</div> </div>
</button> </button>
<button name="action_show_big_package_delivered" type="object"
class="oe_stat_button" icon="fa-cube">
<div class="o_stat_info">
<field name="delivered_big_package_qty" class="o_stat_value"/>
<span class="o_stat_text">Delivered Big Packages</span>
</div>
</button>
<button name="action_show_ship_package" type="object" <button name="action_show_ship_package" type="object"
class="oe_stat_button" icon="fa-cubes"> class="oe_stat_button" icon="fa-cubes">
<div class="o_stat_info"> <div class="o_stat_info">
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import aiohttp
import asyncio
import certifi
import json import json
import logging import logging
import math import math
import random import random
import re import re
import ssl
import threading
from datetime import datetime, timedelta from datetime import datetime, timedelta
from odoo import http, fields, exceptions, _ from odoo import http, fields, exceptions, _
from odoo.addons.queue_job import job
from odoo.http import request from odoo.http import request
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
...@@ -79,6 +85,7 @@ class OrderController(http.Controller): ...@@ -79,6 +85,7 @@ class OrderController(http.Controller):
""" """
kwargs = json.loads(request.httprequest.data) kwargs = json.loads(request.httprequest.data)
pda_lang = kwargs.get('pda_lang') or 'zh' pda_lang = kwargs.get('pda_lang') or 'zh'
action_type = kwargs.get('action_type') or 'tally' # tally / handover
res = {'state': 201, 'message': ''} res = {'state': 201, 'message': ''}
try: try:
logging.info('bl_info kwargs:%s' % kwargs) logging.info('bl_info kwargs:%s' % kwargs)
...@@ -89,7 +96,7 @@ class OrderController(http.Controller): ...@@ -89,7 +96,7 @@ class OrderController(http.Controller):
bl_obj = request.env['cc.bl'].sudo().deal_bl_no(bl_no) # 提单号去掉杠和空格,并转换为小写 bl_obj = request.env['cc.bl'].sudo().deal_bl_no(bl_no) # 提单号去掉杠和空格,并转换为小写
if bl_obj: if bl_obj:
if bl_obj.state in state_arr: if bl_obj.state in state_arr:
res['bl_info'] = bl_obj.search_bl_info(pda_lang=pda_lang) res['bl_info'] = bl_obj.search_bl_info(pda_lang=pda_lang, type=action_type)
res['state'] = 200 res['state'] = 200
else: else:
res['message'] = bill_state_msg_dic[pda_lang] # 没有在系统中找到未完成清关的该提单信息 res['message'] = bill_state_msg_dic[pda_lang] # 没有在系统中找到未完成清关的该提单信息
...@@ -166,10 +173,12 @@ class OrderController(http.Controller): ...@@ -166,10 +173,12 @@ class OrderController(http.Controller):
'id': package_obj, 'id': package_obj,
'tally_time': tally_time}) 'tally_time': tally_time})
else: else:
# if package.tally_state == 'unprocessed_goods'
for package in package_obj:
ship_packages += [{ ship_packages += [{
'id': ship_package, 'id': ship_package,
'tally_time': tally_time} for ship_package in package_obj.ship_package_ids 'tally_time': tally_time} for ship_package in package.ship_package_ids
if ship_package.tally_state == 'unprocessed_goods'] # 小包 if package.tally_state == 'unprocessed_goods'] # 小包
package_obj.update_big_package_info(action_type=action_type, package_obj.update_big_package_info(action_type=action_type,
tally_state=package_item.get('tally_state'), tally_state=package_item.get('tally_state'),
tally_user_id=package_item.get( tally_user_id=package_item.get(
...@@ -253,10 +262,27 @@ class OrderController(http.Controller): ...@@ -253,10 +262,27 @@ class OrderController(http.Controller):
'state_explain': node.desc, 'state_explain': node.desc,
'is_sync': True if node.is_default else False 'is_sync': True if node.is_default else False
}) })
is_ok = bl_obj.package_callback_func(ship_package)
if bl_obj.state == 'draft' and bl_obj.ship_package_ids.filtered( if bl_obj.state == 'draft' and bl_obj.ship_package_ids.filtered(
lambda line: line.state.tk_code == 'cb_imcustoms_start'): lambda line: line.state.tk_code == 'cb_imcustoms_start'):
bl_obj.ccing_func() bl_obj.ccing_func()
ship_package_ids = tuple(
ship_package_dict['id'].id for ship_package_dict in ship_packages if
ship_package_dict['id'])
ship_package_objs = request.env['cc.ship.package'].sudo().search(
[('id', 'in', ship_package_ids)])
bl_obj.package_callback_func(ship_package_objs)
# asyncio.create_task(bl_obj.package_callback_func(ship_package_objs)) # 异步执行 报错 没有什么loop
# threading.Thread(target=bl_obj.package_callback_func, args=(ship_package_objs,)).start()#方法里报错
# # 定义一个函数来在新线程中执行异步任务
# def run_async_task():
# loop = asyncio.new_event_loop() # 创建新的事件循环
# asyncio.set_event_loop(loop) # 设置事件循环
# loop.run_until_complete(bl_obj.package_callback_func(ship_package_objs)) # 运行异步函数
# loop.close() # 关闭事件循环
#
# # 创建并启动新线程
# threading.Thread(target=run_async_task).start()
# bl_obj.with_delay(description=bl_obj.bl_no).package_callback_func(ship_package_objs) # 不执行了
res['state'] = 200 res['state'] = 200
else: else:
res['message'] = bill_noexist_msg_dic[pda_lang] # 提单不存在 res['message'] = bill_noexist_msg_dic[pda_lang] # 提单不存在
......
...@@ -338,13 +338,13 @@ class CcBl(models.Model): ...@@ -338,13 +338,13 @@ class CcBl(models.Model):
'domain': [('bl_id', '=', self.id), ('is_sync', '=', False)], 'domain': [('bl_id', '=', self.id), ('is_sync', '=', False)],
} }
def search_bl_info(self, pda_lang=False): def search_bl_info(self, pda_lang=False, type='tally'):
""" """
查询提单信息 查询提单信息
""" """
vals = { vals = {
'bl_no': self.bl_no or '', # 提单号 'bl_no': self.bl_no or '', # 提单号
'scan_big_package_qty': self.tally_big_package_qty, 'scan_big_package_qty': self.tally_big_package_qty + self.delivered_big_package_qty if type == 'tally' else self.delivered_big_package_qty,
# 已扫大包数量 # 已扫大包数量
'big_package_arr': [big_package_item.search_big_package_info(pda_lang=pda_lang) for big_package_item in 'big_package_arr': [big_package_item.search_big_package_info(pda_lang=pda_lang) for big_package_item in
self.big_package_ids], self.big_package_ids],
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论