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

1、按托盘理货和交货的接口

上级 24b04c21
...@@ -24,10 +24,10 @@ class CcPallet(models.Model): ...@@ -24,10 +24,10 @@ class CcPallet(models.Model):
'express_company_name': self.express_company_id.name,#快递公司名称 'express_company_name': self.express_company_id.name,#快递公司名称
'usage_state': self.usage_state,#使用状态 unused未使用 used已使用 'usage_state': self.usage_state,#使用状态 unused未使用 used已使用
'print_state': self.print_state,#打印状态 unprinted未打印 printed已打印 'print_state': self.print_state,#打印状态 unprinted未打印 printed已打印
'sorting_time': self.sorting_time,#托盘理货时间 'sorting_time': str(self.sorting_time) if self.sorting_time else '',#托盘理货时间
'delivery_time': self.delivery_time,#托盘交货时间 'delivery_time': str(self.delivery_time) if self.delivery_time else '',#托盘交货时间
'package_count': self.package_count,#大包数量 'package_count': self.package_count,#大包数量
'partner_id': self.partner_id.id,#使用客户id 'partner_id': self.partner_id.id,#使用客户id
'partner_name': self.partner_id.name,#使用客户名称 'partner_name': self.partner_id.name,#使用客户名称
'delivery_plate_number': self.delivery_plate_number,#托盘交付车牌号 'delivery_plate_number': self.delivery_plate_number or '',#托盘交付车牌号
} }
\ No newline at end of file
...@@ -9,6 +9,7 @@ from odoo import models, fields, api, _ ...@@ -9,6 +9,7 @@ from odoo import models, fields, api, _
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
class CcPallet(models.Model): class CcPallet(models.Model):
# 模型名称 # 模型名称
_name = 'cc.pallet' _name = 'cc.pallet'
...@@ -43,7 +44,7 @@ class CcPallet(models.Model): ...@@ -43,7 +44,7 @@ class CcPallet(models.Model):
默认给值,随机选一个未存档的客户 默认给值,随机选一个未存档的客户
""" """
return self.env['res.partner'].search([('is_customer', '=', True), ('active', '=', True)], limit=1).id return self.env['res.partner'].search([('is_customer', '=', True), ('active', '=', True)], limit=1).id
# 计算字段:大包数量 # 计算字段:大包数量
@api.depends('package_ids') @api.depends('package_ids')
def _compute_package_count(self): def _compute_package_count(self):
...@@ -61,7 +62,7 @@ class CcPallet(models.Model): ...@@ -61,7 +62,7 @@ class CcPallet(models.Model):
pallet.sorting_time = max(sorting_times) pallet.sorting_time = max(sorting_times)
else: else:
pallet.sorting_time = False pallet.sorting_time = False
# 获取所有关联大包的尾程交货时间,取最晚的时间 # 获取所有关联大包的尾程交货时间,取最晚的时间
delivery_times = pallet.package_ids.filtered('delivery_time').mapped('delivery_time') delivery_times = pallet.package_ids.filtered('delivery_time').mapped('delivery_time')
if delivery_times: if delivery_times:
...@@ -73,7 +74,7 @@ class CcPallet(models.Model): ...@@ -73,7 +74,7 @@ class CcPallet(models.Model):
pallet.delivery_time = False pallet.delivery_time = False
# 托盘号(年月+4位数,不能重复生成) # 托盘号(年月+4位数,不能重复生成)
name = fields.Char(string=_('Pallet Number'), copy=False,help=_('Pallet number format: YYYYMM + 4 digits')) name = fields.Char(string=_('Pallet Number'), copy=False, help=_('Pallet number format: YYYYMM + 4 digits'))
# 托盘归属快递 # 托盘归属快递
express_company_id = fields.Many2one('cc.last.mile.provider', string=_('Express Company'), index=True) express_company_id = fields.Many2one('cc.last.mile.provider', string=_('Express Company'), index=True)
# 使用状态 # 使用状态
...@@ -98,56 +99,57 @@ class CcPallet(models.Model): ...@@ -98,56 +99,57 @@ class CcPallet(models.Model):
# 使用客户 # 使用客户
partner_id = fields.Many2one('res.partner', string=_('Customer'), default=get_partner_id, partner_id = fields.Many2one('res.partner', string=_('Customer'), default=get_partner_id,
domain=[('is_customer', '=', True)]) domain=[('is_customer', '=', True)])
# 托盘交付车牌号 # 托盘交付车牌号
delivery_plate_number = fields.Char(string=_('Delivery Plate Number')) delivery_plate_number = fields.Char(string=_('Delivery Plate Number'))
def update_pallet_info(self, **kwargs):
"""更新托盘信息"""
if kwargs.get('delivery_plate_number', ''):
self.delivery_plate_number = kwargs['delivery_plate_number']
# 当大包关联到托盘时,自动更新使用状态 # 当大包关联到托盘时,自动更新使用状态
def update_usage_state(self,success_package,usage_date): def update_usage_state(self, success_package, usage_date):
"""更新托盘使用状态""" """更新托盘使用状态"""
for pallet in self: for pallet in self:
if pallet.package_ids: pallet.usage_state = 'used'
pallet.usage_state = 'used' # 关联大包到托盘
# 关联大包到托盘 pallet.package_ids = [(4, package_id.id, 0) for package_id in success_package]
pallet.package_ids = [(4, package_id.id, 0) for package_id in success_package] # 更新大包的托盘信息
for package in success_package:
old_pallet_number = package.pallet_number
new_pallet_number = pallet.name # 使用托盘的编号
old_usage_date = package.pallet_usage_date
# 同一提单,同一托盘号,使用日期必须一致
related_packages = package.bl_id.big_package_ids.filtered(
lambda p: p.pallet_number == new_pallet_number) # 查找对应提单下相同托盘号的所有大包
warning_package_arr = [related_package.big_package_no for related_package in related_packages if
str(related_package.pallet_usage_date) != usage_date]
if warning_package_arr:
raise ValidationError(
_('Big Package No :%s ,The same bill of lading, same pallet number, and usage date must be consistent!') % (
'\n'.join(warning_package_arr))) # 大包号关联的同一提单,同一托盘号,使用日期必须一致
# 更新大包的托盘信息 # 更新大包的托盘信息
for package in success_package: package.update_pallet_info(new_pallet_number, usage_date, pallet.id)
old_pallet_number = package.pallet_number
new_pallet_number = pallet.name # 使用托盘的编号 if old_pallet_number:
old_usage_date = package.pallet_usage_date # %s %s更改了托盘号,由%s变更为%s,托盘使用日期%s变更为%s
body = _(
# 同一提单,同一托盘号,使用日期必须一致 '%s at %s changed the pallet number from %s to %s, and the pallet usage date from %s to %s') % (
related_packages = package.bl_id.big_package_ids.filtered( self.env.user.name, fields.Datetime.now(), old_pallet_number, new_pallet_number,
lambda p: p.pallet_number == new_pallet_number) # 查找对应提单下相同托盘号的所有大包 old_usage_date,
warning_package_arr = [related_package.big_package_no for related_package in related_packages if usage_date)
related_package.pallet_usage_date != usage_date] else:
if warning_package_arr: # 某人某时关联了托盘xxx,托盘使用日期xxxx
raise ValidationError( body = _('%s at %s associated tray %s, with a tray usage date of %s') % (
_('Big Package No :%s ,The same bill of lading, same pallet number, and usage date must be consistent!') % ( self.env.user.name, fields.Datetime.now(), new_pallet_number, usage_date)
'\n'.join(warning_package_arr))) # 大包号关联的同一提单,同一托盘号,使用日期必须一致 package.message_post(body=body)
# 更新大包的托盘信息 # 记录托盘关联日志
package.update_pallet_info(new_pallet_number, usage_date,pallet.id) body = _('%s at %s associated %d packages to pallet %s') % (
self.env.user.name, fields.Datetime.now(), len(success_package), pallet.name)
if old_pallet_number: pallet.message_post(body=body)
# %s %s更改了托盘号,由%s变更为%s,托盘使用日期%s变更为%s
body = _(
'%s at %s changed the pallet number from %s to %s, and the pallet usage date from %s to %s') % (
self.env.user.name, fields.Datetime.now(), old_pallet_number, new_pallet_number,
old_usage_date,
usage_date)
else:
# 某人某时关联了托盘xxx,托盘使用日期xxxx
body = _('%s at %s associated tray %s, with a tray usage date of %s') % (
self.env.user.name, fields.Datetime.now(), new_pallet_number, usage_date)
package.message_post(body=body)
# 记录托盘关联日志
body = _('%s at %s associated %d packages to pallet %s') % (
self.env.user.name, fields.Datetime.now(), len(success_package), pallet.name)
pallet.message_post(body=body)
else:
pallet.usage_state = 'unused'
def action_print_labels(self): def action_print_labels(self):
"""打印标签动作""" """打印标签动作"""
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论