提交 276c59df authored 作者: 贺阳's avatar 贺阳

导出报关数据

上级 847e9d52
from . import wizard
from . import models
from . import controllers
......@@ -18,6 +18,7 @@
'security/account_security.xml',
'security/ir.model.access.csv',
'wizard/batch_input_ship_package_statu_wizard.xml',
'wizard/export_bl_big_package_xlsx_wizard.xml',
'data/data.xml',
'views/menu_view.xml',
'views/cc_clearance_file_view.xml',
......
......@@ -10,5 +10,9 @@
<field name="value">{'https': 'socks5://192.168.0.254:1080'}</field>
</record>
<record id="parcel_export_num" model="ir.config_parameter">
<field name="key">parcel_export_num</field>
<field name="value">50000</field>
</record>
</data>
</odoo>
\ No newline at end of file
......@@ -373,7 +373,7 @@ class CcShipPackage(models.Model):
def action_show_package_good(self):
# 返回一个action,显示商品
return {
'name': 'Goods',
'name': _('Goods'),
'type': 'ir.actions.act_window',
'res_model': 'cc.package.good',
'view_mode': 'tree,form',
......@@ -523,6 +523,31 @@ class CcBL(models.Model):
else:
raise UserError(reason)
def action_batch_export_package(self):
"""
导出报关文件
"""
# error_order = []
# for item in order_obj:
# # item.ship_package_ids
# parcel_ids = item.big_package_ids.mapped('ship_package_ids')
# if not parcel_ids:
# error_order.append(item.bl_no)
# continue
# good_parcels = parcel_ids.mapped('good_ids')
# if len(good_parcels) == 0:
# error_order.append(item.bl_no)
# if error_order:
# raise ValidationError(f"{','.join(error_order)},没有任何商品信息可导出报关数据")
return {
'name': _('导出报关文件'),
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'export.bl.big.package.xlsx.wizard',
'target': 'new',
'context': {'active_id': self.ids, },
}
# # 添加报关单字段
# cdo_ids = fields.One2many('cc.customers.declaration.order', 'bl_id', string='Customers Declaration Order')
#
......
......@@ -173,7 +173,7 @@
<field name="model">cc.bl</field>
<field name="arch" type="xml">
<search string="Bill of Loading">
<field name="bl_no" string="模糊搜索"
<field name="bl_no" string="Search"
filter_domain="['|', ('bl_no', 'ilike', self), ('customs_bl_no', 'ilike', self)]"/>
<separator/>
......@@ -243,9 +243,6 @@
<field name="domain">[]</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
[Bill of Loading] 还没有哦!点左上角的[创建]按钮,沙发归你了!
</p>
<p>
</p>
</field>
......@@ -319,15 +316,15 @@
<!-- </field>-->
<!-- </record>-->
<!-- <menuitem sequence="10" name="Bill of Loading" id="menu_cc_bl" action="action_cc_bl" web_icon="ccs_base,static/description/icon3.png"/>-->
<!-- 导出报关数据 <menuitem sequence="10" name="Bill of Loading" id="menu_cc_bl" action="action_cc_bl" web_icon="ccs_base,static/description/icon3.png"/>-->
<record id="export_order_big_package_xls_server" model="ir.actions.server">
<field name="name">导出报关数据</field>
<field name="name">Export customs declaration data</field>
<field name="model_id" ref="model_cc_bl"/>
<field name="binding_model_id" ref="model_cc_bl"/>
<field name="state">code</field>
<field name="code">
if records:
action = records.export_order_big_package_xls_action()
action = records.action_batch_export_package()
</field>
</record>
......
......@@ -21,7 +21,7 @@ PUSH_TYPE = [
# 包括以下字段,提单, 当前节点, 更新节点, 排除面单号, 排除状态
class BatchInputShipPackageStatusWizard(models.TransientModel):
_name = 'batch.input.ship.package.status.wizard'
_description = '批量更新小包状态向导'
_description = 'Batch Update the status of the small package'#批量更新小包状态向导
@api.onchange('select_type', 'current_status')
def onchange_select_type(self):
......@@ -68,25 +68,25 @@ class BatchInputShipPackageStatusWizard(models.TransientModel):
def submit(self):
# 确认数据
if not self.is_ok:
raise ValidationError('请确认以上数据正确.')
raise ValidationError('Please confirm that the above data is correct.') # 请确认以上数据正确
parcels = self.get_process_package()
if not parcels:
raise ValidationError('没有找到要更新的小包.')
raise ValidationError('No package to update found.') # 没有找到要更新的小包
# 判断异常状态是否选择了异常原因
reason_obj = self.env['cc.node.exception.reason'].search([('code_id', '=', self.update_status.id)])
if reason_obj and not self.node_exception_reason_id:
raise ValidationError('请选择异常原因!')
raise ValidationError('Please select the reason for the exception!') # 请选择异常原因
# 更新状态
parcels.write(
{'state': self.update_status.id, 'node_exception_reason_id': self.node_exception_reason_id.id,
'process_time': self.process_time, 'state_explain': self.state_explain, 'is_sync': False})
# 生成sns日志
# self.bl_id.message_post(body='%s更新为%s' % (self.current_status.name or '', self.update_status.name or ''))
# 跳转显示本次更新状态的小包
# 跳转显示本次更新状态的小包 更新小包状态
return {
'name': '更新小包状态',
'name': _('Update the status of the small package'),
'type': 'ir.actions.act_window',
'res_model': 'cc.ship.package',
'view_mode': 'tree,form',
......
......@@ -4,62 +4,32 @@
from odoo import models, api, fields
from odoo.exceptions import Warning, ValidationError
class ExportBlBigPackageXlsxWizard(models.TransientModel):
_name = 'export.bl.big.package.xlsx.wizard'
_description = '导出报关文件'
def get_order(self):
"""
得到单据
:return:
"""
order_id = self._context.get('active_id')
if type(order_id) != list:
order_id = [self._context.get('active_id')]
return self.env['cc.bl'].sudo().browse(order_id)
# 增加选择类型字段, 按节点和按面单号(多条)
select_type = fields.Selection([
('yes', 'YES'),
('no', 'NO')
], string='Whether to export in Big packages')
# 增加选择类型字段, 是否分大包导出
select_type = fields.Selection([('yes', 'YES'), ('no', 'NO')], string='Whether to export in Big packages')
# 批量更新小包状态
def submit(self):
# 确认数据
if not self.is_ok:
raise ValidationError('请确认以上数据正确.')
parcels = self.get_process_package()
if not parcels:
raise ValidationError('没有找到要更新的小包.')
# 判断异常状态是否选择了异常原因
reason_obj = self.env['cc.node.exception.reason'].search([('code_id', '=', self.update_status.id)])
if reason_obj and not self.node_exception_reason_id:
raise ValidationError('请选择异常原因!')
# 更新状态
parcels.write(
{'state': self.update_status.id, 'node_exception_reason_id': self.node_exception_reason_id.id,
'process_time': self.process_time, 'state_explain': self.state_explain, 'is_sync': False})
# 生成sns日志
# self.bl_id.message_post(body='%s更新为%s' % (self.current_status.name or '', self.update_status.name or ''))
# 跳转显示本次更新状态的小包
return {
'name': '更新小包状态',
'type': 'ir.actions.act_window',
'res_model': 'cc.ship.package',
'view_mode': 'tree,form',
'domain': [('id', 'in', parcels.ids)],
}
def export_order_big_package_xls_action(self):
error_order = []
for item in self:
item.ship_package_ids
parcel_ids = item.big_package_ids.mapped('ship_package_ids')
if not parcel_ids:
error_order.append(item.master_business_no)
continue
good_parcels = parcel_ids.filtered(lambda x: x.item_text)
if len(good_parcels) == 0:
error_order.append(item.master_business_no)
if error_order:
raise ValidationError(f"{','.join(error_order)},没有任何商品信息可导出报关数据")
arr = [item.id for item in self]
"""
是否分大包,如果不分,就是提单一个文件,命名 提单号;如果分,一个提单一个大包一个文件,命名 提单号➕大包号
"""
order_obj = self.get_order()
arr = [item.id for item in order_obj]
return {
'type': 'ir.actions.act_url',
'url': '/export/flight_package/xls/%s/%s' % (arr,self.select_type),
'url': '/export/bl/package/xls/%s/%s' % (arr, self.select_type),
'target': 'new',
}
<?xml version="1.0" encoding="utf-8"?>
<!-- © <2016> <heyang>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -->
<odoo>
<data>
<record id="view_export_bl_big_package_xlsx_wizard" model="ir.ui.view">
<field name="name">导出报关文件</field>
<field name="model">export.bl.big.package.xlsx.wizard</field>
<field name="arch" type="xml">
<form string="导出报关文件">
<sheet>
<group>
<field name="select_type" required="1"/>
</group>
<footer>
<button name="submit" type="object" string="Submit" class="oe_highlight"/>
<button string="Close" special="cancel"/>
</footer>
</sheet>
</form>
</field>
</record>
<!--定义视图动作-->
<record model="ir.actions.act_window" id="action_export_bl_big_package_xlsx_wizard">
<field name="name">导出报关文件</field>
<field name="res_model">export.bl.big.package.xlsx.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
</odoo>
\ No newline at end of file
......@@ -5,11 +5,8 @@ from odoo import models, api, fields
from odoo.exceptions import Warning, ValidationError
# 定义一个批量更新小包状态的向导, 用于批量更新小包状态
# 包括以下字段,提单, 当前节点, 更新节点, 排除面单号, 排除状态
class BatchInputShipPackageStatusWizard(models.TransientModel):
_inherit = 'batch.input.ship.package.status.wizard'
_description = '批量更新小包状态向导'
is_skip_check = fields.Boolean('Skip Check', default=False)
......@@ -61,7 +58,8 @@ class BatchInputShipPackageStatusWizard(models.TransientModel):
if len(state_arr) > 0:
state_arr = set(state_arr)
if len(state_arr) > 1:
raise ValidationError('填写的小包单号状态必须一致!')
# 填写的小包单号状态必须一致
raise ValidationError(_('The status of the small package number filled in must be consistent!'))
else:
# 获取所有的小包
if item.current_status:
......@@ -90,15 +88,19 @@ class BatchInputShipPackageStatusWizard(models.TransientModel):
exclude_waybill_no_list = [i.strip() for i in exclude_waybill_no_list if i.strip()]
package_obj = self.ship_package_ids.filtered(lambda r: r.tracking_no not in exclude_waybill_no_list)
if len(package_obj) > 0:
# 单号[%s]需填写在排除单号中
raise ValidationError(
'单号[%s]需填写在排除单号中' % '\n'.join([package.tracking_no for package in package_obj]))
_('The tracking number [%s] needs to be filled in the exclusion tracking number!') % '\n'.join(
[package.tracking_no for package in package_obj]))
else:
if len(self.ship_package_ids) > 0:
# 检查小包%s是否存在还未推送或 小包已经推送过将更变更的状态
raise ValidationError(
'单号[%s]不能更新' % '\n'.join([package.tracking_no for package in self.ship_package_ids]))
_('Check if the package [%s] has a status that has not been pushed yet or if the package has already been pushed and will be updated!') % '\n'.join(
[package.tracking_no for package in self.ship_package_ids]))
obj = super(BatchInputShipPackageStatusWizard, self).submit()
# 生成sns日志
self.bl_id.message_post(body='[%s]%s更新为[%s]%s' % (
self.bl_id.message_post(body=_('[%s]%sUpdate to[%s]%s') % (
self.current_status.tk_code or '', self.current_status.name or '', self.update_status.tk_code or '',
self.update_status.name or ''))
return obj
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论