提交 2fe1df61 authored 作者: 贺阳's avatar 贺阳

更新状态的时候判断上一个状态是否推送过以及更新的状态是否已推送过,回写到排除的字段

如果根据单号 每个单号的状态不一样,提示必须要状态一样 增加是否跳过检查的标准,勾上,不做检查上一个状态是否推送过或更改的状态已推送过
上级 d5f56c8e
......@@ -18,9 +18,9 @@
attrs="{'invisible':[('select_type','=','tracking_no')],'required':[('select_type','=','node')]}"
domain="[('node_type','=','package')]"/>
<field name="next_code_ids" invisible="1"/>
<field name="exclude_tracking_no"
<field name="exclude_tracking_no" placeholder="多个单号 换行隔开"
attrs="{'invisible':[('select_type','=','tracking_no')]}"/>
<field name="select_tracking_no"
<field name="select_tracking_no" placeholder="多个单号用‘,’符隔开"
attrs="{'invisible':[('select_type','=','node')],'required':[('select_type','=','tracking_no')]}"/>
<field name="update_package_count"/>
<separator/>
......
......@@ -11,12 +11,42 @@ class BatchInputShipPackageStatusWizard(models.TransientModel):
_inherit = 'batch.input.ship.package.status.wizard'
_description = '批量更新小包状态向导'
@api.depends('select_type', 'update_status', 'current_status')
is_skip_check = fields.Boolean('Skip Check', default=False)
@api.depends('select_type', 'select_tracking_no', 'update_status', 'current_status', 'is_skip_check')
def cal_ship_package_ids(self):
"""
比如 已提货 --- 清关开始,选择了清关开始之后 把已提货状态的小包且更新日志明细包含了 清关开始 的编码的 小包显示出来
比如有10个小包 有3个是推过的,7个没推过的 要把3个推送给的放到排除里
已提货的判断是否推送过
如果根据单号 每个单号的状态不一样,提示必须要状态一样
"""
for item in self:
package_ids = item.get_exception_ship_package()
item.ship_package_ids = [(6, 0, package_ids)]
@api.onchange('ship_package_ids')
def change_ship_package_ids(self):
"""
给排除单号的字段赋值
"""
for item in self:
exclude_tracking_no = ''
if item.ship_package_ids:
exclude_tracking_no = ','.join([line.tracking_no for line in item.ship_package_ids])
item.exclude_tracking_no = exclude_tracking_no
ship_package_ids = fields.Many2many('cc.ship.package', '_update_state_package_wizard_rel', 'wizard_id',
'package_id', 'Have Node Package', compute='cal_ship_package_ids')
def get_exception_ship_package(self):
"""
比如 已提货 --- 清关开始,选择了清关开始之后 把已提货状态的小包且更新日志明细包含了 清关开始 的编码的 小包显示出来
比如有10个小包 有3个是推过的,7个没推过的 要把3个推送给的放到排除里
已提货的判断是否推送过
如果根据单号 每个单号的状态不一样,提示必须要状态一样
"""
item = self
package_ids = []
package_obj = False
package_model = self.env['cc.ship.package']
......@@ -26,26 +56,49 @@ class BatchInputShipPackageStatusWizard(models.TransientModel):
tracking_no_list = [i.strip() for i in tracking_no_list if i.strip()]
package_obj = package_model.search(
[('bl_id', '=', item.bl_id.id), ('tracking_no', 'in', tracking_no_list)])
# 如果不是同一个状态 进行提示
state_arr = [package.state.id for package in package_obj]
if len(state_arr) > 0:
state_arr = set(state_arr)
if len(state_arr) > 1:
raise ValidationError('填写的小包单号状态必须一致!')
else:
# 获取所有的小包
if item.current_status:
package_obj = package_model.search(
[('bl_id', '=', item.bl_id.id), ('state', '=', item.current_status.id)])
if package_obj:
if package_obj and not item.is_skip_check:
# 更新日志里没有已提货的小包
for package_item in package_obj:
current_state_log_obj = self.env['cc.ship.package.sync.log'].search(
[('package_id', '=', package_item.id), ('process_code', '=', item.current_status.tk_code)])
if not current_state_log_obj:
package_ids += package_item.ids
# 更新日志明细包含了 清关开始 的 小包
log_obj = self.env['cc.ship.package.sync.log'].search(
update_state_log_obj = self.env['cc.ship.package.sync.log'].search(
[('package_id', 'in', package_obj.ids), ('process_code', '=', item.update_status.tk_code)])
package_ids = log_obj.mapped('package_id').ids
item.ship_package_ids = [(6, 0, package_ids)]
ship_package_ids = fields.Many2many('cc.ship.package', '_update_state_package_wizard_rel', 'wizard_id',
'package_id', 'Have Node Package', compute='cal_ship_package_ids')
package_ids += update_state_log_obj.mapped('package_id').ids
return package_ids
def submit(self):
# 判断排除的面单号是否都存在 异常小包中
if not self.is_skip_check:
if self.select_type == 'node':
exclude_waybill_no_list = []
if self.exclude_tracking_no:
exclude_waybill_no_list = self.exclude_tracking_no.split('\n')
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:
raise ValidationError(
'单号[%s]需填写在排除单号中' % '\n'.join([package.tracking_no for package in package_obj]))
else:
if len(self.ship_package_ids) > 0:
raise ValidationError(
'单号[%s]不能更新' % ','.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.current_status.tk_code or '', self.current_status.name or '', self.update_status.tk_code or '',
self.update_status.name or ''))
# 跳转显示本次更新状态的小包
return obj
......@@ -10,8 +10,12 @@
<field name="model">batch.input.ship.package.status.wizard</field>
<field name="inherit_id" ref="ccs_base.view_batch_input_ship_package_wizard"/>
<field name="arch" type="xml">
<field name="bl_id" position="after">
<field name="is_skip_check"/>
</field>
<field name="update_status" position="after">
<field name="ship_package_ids" widget="one2many" readonly="1">
<field name="ship_package_ids" widget="one2many" readonly="1" invisible="1">
<tree>
<field name="logistic_order_no"/>
<field name="tracking_no"/>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论