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

还原以前Base模块关于托盘的功能

上级 1b8d84e6
......@@ -21,6 +21,7 @@
'wizard/update_bl_status_wizard.xml',
'wizard/export_bl_big_package_xlsx_wizard.xml',
'wizard/batch_update_transfer_bl_no_wizard_view.xml',
'wizard/associate_pallet_wizard_views.xml',
'wizard/add_exception_info_wizard_views.xml',
'wizard/email_template.xml',
'data/data.xml',
......@@ -57,7 +58,9 @@
'ccs_base/static/css/base.scss',
],
'web.assets_backend': [
'ccs_base/static/src/mixins/link_pallet.js',
'ccs_base/static/src/mixins/link_transfer_bl_no.js',
'ccs_base/static/src/views/big_package_list_controller.js',
'ccs_base/static/src/views/bl_list_controller.js',
'ccs_base/static/src/views/list.xml',
],
......
......@@ -67,6 +67,16 @@ class CcBigPackage(models.Model):
exception_info_ids = fields.Many2many('cc.exception.info', 'bigpackage_exception_info_rel',
string='Exception Information')
def update_pallet_info(self, pallet_number, pallet_usage_date):
"""
修改托盘信息
:param pallet_number:
:param pallet_usage_date:
:return:
"""
self.pallet_usage_date = pallet_usage_date
self.pallet_number = pallet_number
def update_exception_info(self, exception_info_ids, is_send=False, email_language='zh_CN'):
"""
大包回写异常原因,发送邮件
......@@ -100,6 +110,16 @@ class CcBigPackage(models.Model):
'domain': [('bl_line_id', 'in', self.ship_package_ids.ids), ('is_cancel', '=', False)],
}
def action_link_pallet(self):
return {
'name': _('Link Pallet'),
'type': 'ir.actions.act_window',
'views': [[False, "form"]],
'res_model': 'associate.pallet.wizard',
'target': 'new',
'context': {},
}
def action_cc_big_package(self):
"""
菜单 大包
......
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
batch_input_ship_package_status_wizard_group_user,batch_input_ship_package_status_wizard_group_user,ccs_base.model_batch_input_ship_package_status_wizard,base.group_user,1,1,1,1
export_bl_big_package_xlsx_wizard_group_user,export_bl_big_package_xlsx_wizard_group_user,ccs_base.model_export_bl_big_package_xlsx_wizard,base.group_user,1,1,1,1
associate_pallet_wizard_group_user,associate_pallet_wizard_group_user,model_associate_pallet_wizard,base.group_user,1,1,1,1
add_exception_info_wizard_group_user,add_exception_info_wizard_group_user,ccs_base.model_add_exception_info_wizard,base.group_user,1,1,1,1
update_bl_status_wizard_group_user,update_bl_status_wizard_group_user,ccs_base.model_update_bl_status_wizard,base.group_user,1,1,1,1
batch_update_transfer_bl_no_wizard_group_user,batch_update_transfer_bl_no_wizard_group_user,ccs_base.model_batch_update_transfer_bl_no_wizard,base.group_user,1,1,1,1
......
......@@ -21,7 +21,7 @@ export class BigPackageListController extends ListController {
this.isBigPackage = this.model.rootParams.resModel === "cc.big.package";
console.log('ccs isBigPackage:' + this.isBigPackage)
onWillStart(async () => {
this.is_link = await this.user.hasGroup("ccs_base.group_clearance_of_customs_manager") || await this.user.hasGroup("ccs_pallet.group_pallet_manager");
this.is_link = await this.user.hasGroup("ccs_base.group_clearance_of_customs_manager");
console.log('ccs is_link:' + this.is_link)
});
}
......@@ -32,8 +32,8 @@ export class BigPackageListController extends ListController {
return this.isBigPackage && this.is_link;
}
displayBatchCreatePallet() {
// 大包页面永远不显示“批量创建托盘”按钮
displayTransferBlNo() {
// 大包页面永远不显示“关联转单号”按钮
return false;
}
......@@ -43,6 +43,6 @@ patch(BigPackageListController.prototype, 'big_package_list_controller_link_pall
registry.category('views').add('cc_big_package_tree', {
...listView,
buttonTemplate: 'ccs_pallet.ListButtons',
buttonTemplate: 'ccs_base.ListButtons',
Controller: BigPackageListController
});
\ No newline at end of file
......@@ -26,10 +26,10 @@ export class BlListController extends ListController {
});
}
// displayLink() {
// // 提单页面永远不显示“关联托盘”按钮
// return false;
// }
displayLink() {
// 提单页面永远不显示“关联托盘”按钮
return false;
}
displayTransferBlNo() {
console.log('ccs flag:' + this.isBl && this.can_link_transfer_bl_no)
......
......@@ -2,6 +2,11 @@
<templates xml:space="preserve">
<t t-name="ccs_base.ListButtons" t-inherit="web.ListView.Buttons" t-inherit-mode="primary" owl="1">
<xpath expr="//button[hasclass('o_list_button_add')]" position="after">
<button t-if="displayLink()" type="button" class="d-none d-md-inline o_button_link_pallet btn btn-primary mx-1" t-on-click.prevent="onLinkPalletClick">
Link Pallet
</button>
</xpath>
<xpath expr="//button[hasclass('o_list_button_add')]" position="after">
<button t-if="displayTransferBlNo()" type="button" class="d-none d-md-inline o_button_transfer_bl_no btn btn-primary mx-1" t-on-click.prevent="onTransferBlNoClick">
Link Transfer B/L No
......
......@@ -6,7 +6,7 @@
<field name="name">tree.cc.big.package</field>
<field name="model">cc.big.package</field>
<field name="arch" type="xml">
<tree string="Big Package" decoration-warning="is_cancel==True">
<tree string="Big Package" js_class="cc_big_package_tree" decoration-warning="is_cancel==True">
<field optional="show" name="big_package_no" string="Big Package No."/>
<field optional="show" name="bl_id" string="Bill of Loading"/>
<field name="ship_package_qty" string="Packages Qty"/>
......@@ -30,6 +30,9 @@
<field name="arch" type="xml">
<form string="Big Package">
<header>
<!-- <button name="action_link_pallet" type="object"-->
<!-- string="Link Pallet"-->
<!-- groups="ccs_base.group_clearance_of_customs_manager"/>&lt;!&ndash; 关联托盘 &ndash;&gt;-->
<button name="action_package_exception_info" type="object"
string="Add Package Exception Information"
groups="ccs_base.group_clearance_of_customs_manager"/><!-- 添加包裹异常信息 -->
......
......@@ -2,6 +2,7 @@
from . import batch_input_ship_package_statu_wizard
from . import export_bl_big_package_xlsx_wizard
from . import associate_pallet_wizard
from . import add_exception_info_wizard
from . import update_bl_status_wizard
from . import batch_update_transfer_bl_no_wizard
......
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from datetime import date
from odoo import models, fields, api, _
from odoo.exceptions import Warning, ValidationError
class AssociatePalletWizard(models.TransientModel):
_name = 'associate.pallet.wizard'
_description = 'Associate Pallet Wizard'
@api.onchange('usage_date')
def change_usage_date(self):
for item in self:
if item.usage_date:
item.pallet_number = item.get_pallet_number(item.usage_date)
def get_pallet_number(self, usage_date):
"""
生成托盘号 从001开始,如果
:return: 新的托盘号
"""
try:
# 查找大包中最新的托盘号
latest_pallet = self.env['cc.big.package'].search([('pallet_usage_date', '=', str(usage_date))],
order='pallet_number desc', limit=1)
# 生成新的托盘号
if latest_pallet:
new_pallet_number = int(latest_pallet.pallet_number) + 1
else:
new_pallet_number = 1 # 如果没有找到,默认从1开始
return str(new_pallet_number).zfill(3) # 返回格式化的托盘号
except Exception as e:
raise ValidationError(str(e))
usage_date = fields.Date(string='Usage Date', default=fields.Date.today) # 使用日期
pallet_number = fields.Char(string='Pallet Number', required=True) # 托盘号
big_package_numbers = fields.Text(string='Big Package Numbers') # 大包号(可输入多个)
def confirm(self):
for record in self:
if not record.pallet_number.isdigit():
raise ValidationError(_('The pallet number can only be entered as a number!')) # 托盘号只能输入数字!
if record.usage_date > fields.Date.today():
raise ValidationError(_('The usage date cannot be later than the current date!')) # 使用日期不能大于当前日期!
# 处理大包号
big_package_ids = record.big_package_numbers.splitlines()
success_package = []
fail_package = []
for package_number in big_package_ids:
package = self.env['cc.big.package'].search([('big_package_no', '=', package_number)], limit=1)
if package:
success_package.append(package)
else:
fail_package.append(package_number)
if fail_package:
raise ValidationError(_('%s The package does not exist, please check the input information!') % (
'\n'.join(fail_package))) # 不存在该大包,请检查输入信息
if success_package:
for package in success_package:
# 回写大包的托盘号和使用日期
old_pallet_number = package.pallet_number
new_pallet_number = record.pallet_number # 修改的托盘号
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
related_package.pallet_usage_date != record.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))) # 大包号关联的同一提单,同一托盘号,使用日期必须一致
package.update_pallet_info(new_pallet_number, record.usage_date)
if old_pallet_number:
# %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,
record.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, record.usage_date)
package.message_post(body=body)
<odoo>
<record id="view_associate_pallet_wizard" model="ir.ui.view">
<field name="name">associate.pallet.wizard.form</field>
<field name="model">associate.pallet.wizard</field>
<field name="arch" type="xml">
<form string="Associate Pallet">
<sheet>
<group>
<field name="usage_date" required="1"/> <!-- 使用日期 -->
<field name="pallet_number" required="1"/> <!-- 托盘号 -->
<field name="big_package_numbers" required="1"
placeholder="Multiple can be entered, one large package number per line"/> <!-- 大包号 可输入多个,一行一个大包号 -->
</group>
<footer>
<button string="Confirm" type="object" name="confirm" class="btn-primary"/>
<button string="Close" special="cancel"/>
</footer>
</sheet>
</form>
</field>
</record>
<record id="action_associate_pallet" model="ir.actions.act_window">
<field name="name">Associate Pallet</field>
<field name="res_model">associate.pallet.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</odoo>
\ No newline at end of file
......@@ -20,17 +20,15 @@
'wizard/associate_pallet_wizard_views.xml',
'reports/pallet_label_report.xml',
'views/cc_pallet_view.xml',
'views/cc_big_package_view.xml',
# 'views/cc_big_package_view.xml',
'views/menu_view.xml',
],
'installable': True,
'application': True,
'assets': {
'web.assets_backend': [
'ccs_pallet/static/src/mixins/link_pallet.js',
'ccs_pallet/static/src/mixins/batch_create_pallet.js',
'ccs_pallet/static/src/views/bl_list_pallet_controller.js',
'ccs_pallet/static/src/views/big_package_list_controller.js',
'ccs_pallet/static/src/views/list.xml',
],
},
......
......@@ -390,26 +390,9 @@ msgstr ""
msgid "Please select a pallet!"
msgstr "请选择托盘!"
#. module: ccs_pallet
#. odoo-python
#: code:addons/ccs_pallet/wizard/associate_pallet_wizard.py:0
#: model:ir.model.fields,field_description:ccs_pallet.field_associate_pallet_wizard__pallet_id
#: model_terms:ir.ui.view,arch_db:ccs_pallet.view_associate_pallet_wizard
#, python-format
msgid "Pallet"
msgstr "托盘"
#. module: ccs_pallet
#. odoo-python
#: code:addons/ccs_pallet/wizard/associate_pallet_wizard.py:0
#, python-format
msgid "%s at %s associated %d packages to pallet %s"
msgstr "%s 在 %s 将 %d 个大包关联到托盘 %s"
#. module: ccs_pallet
#. odoo-python
#: code:addons/ccs_pallet/models/cc_big_package.py:0
#: model:ir.model.fields,field_description:ccs_pallet.field_cc_big_package__pallet_id
#, python-format
msgid "Pallet"
msgstr "托盘"
......@@ -73,8 +73,7 @@ class CcPallet(models.Model):
pallet.delivery_time = False
# 托盘号(年月+4位数,不能重复生成)
name = fields.Char(string=_('Pallet Number'), required=True, readonly=True, 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)
# 使用状态
......
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
pallet_batch_wizard_group_user,pallet_batch_wizard_group_user,model_pallet_batch_wizard,base.group_user,1,1,1,1
pallet_print_wizard_group_user,pallet_print_wizard_group_user,model_pallet_print_wizard,base.group_user,1,1,1,1
associate_pallet_wizard_group_user,associate_pallet_wizard_group_user,model_associate_pallet_wizard,base.group_user,1,1,1,1
cc_pallet_group_user,cc_pallet_group_user,model_cc_pallet,base.group_user,1,1,1,0
cc_pallet_group_system,cc_pallet_group_system,model_cc_pallet,base.group_system,1,1,1,1
......
<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
<t t-name="ccs_pallet.ListButtons" t-inherit="web.ListView.Buttons" t-inherit-mode="primary" owl="1">
<xpath expr="//button[hasclass('o_list_button_add')]" position="after">
<button t-if="displayLink()" type="button" class="d-none d-md-inline o_button_link_pallet btn btn-primary mx-1" t-on-click.prevent="onLinkPalletClick">
Link Pallet
</button>
</xpath>
<xpath expr="//button[hasclass('o_list_button_add')]" position="after">
<button t-if="displayBatchCreatePallet()" type="button" class="d-none d-md-inline o_button_batch_create_pallet btn btn-primary mx-1" t-on-click.prevent="onBatchCreatePalletClick">
Batch Create Pallet
......
......@@ -24,19 +24,19 @@
</div>
<group>
<group string="Basic Information">
<field name="express_company_id" required="1"/>
<field name="partner_id"/>
<field name="express_company_id" required="1" options="{'no_create': True, 'no_quick_create': True}"/>
<field name="partner_id" options="{'no_create': True, 'no_quick_create': True}"/>
<field name="delivery_plate_number"/>
</group>
<group string="Status Information">
<field name="print_state"/>
<field name="sorting_time"/>
<field name="delivery_time"/>
<field name="print_state" readonly="1"/>
<field name="sorting_time" readonly="1"/>
<field name="delivery_time" readonly="1"/>
</group>
</group>
<notebook>
<page string="Package Information" name="packages">
<field name="package_ids"/>
<field name="package_ids" readonly="1"/>
</page>
</notebook>
</sheet>
......@@ -51,16 +51,16 @@
<field name="model">cc.pallet</field>
<field name="arch" type="xml">
<tree string="Pallet Management" js_class="cc_pallet_tree">
<field name="name" string="Pallet Number"/>
<field name="express_company_id" string="Express Company"/>
<field name="usage_state" string="Usage State" decoration-success="usage_state == 'unused'"
<field name="name"/>
<field name="express_company_id"/>
<field name="usage_state" decoration-success="usage_state == 'unused'"
decoration-warning="usage_state == 'used'"/>
<field name="print_state" string="Print State" decoration-info="print_state == 'unprinted'"
<field name="print_state" decoration-info="print_state == 'unprinted'"
decoration-success="print_state == 'printed'"/>
<field name="sorting_time" string="Sorting Time"/>
<field name="delivery_time" string="Delivery Time"/>
<field name="package_count" string="Package Count"/>
<field name="delivery_plate_number" string="Delivery Plate Number"/>
<field name="sorting_time"/>
<field name="delivery_time"/>
<field name="package_count"/>
<field name="delivery_plate_number"/>
</tree>
</field>
</record>
......@@ -71,10 +71,10 @@
<field name="model">cc.pallet</field>
<field name="arch" type="xml">
<search string="Pallet Search">
<field name="name" string="Pallet Number" filter_domain="[('name', 'ilike', self)]"/>
<field name="express_company_id" string="Express Company"/>
<field name="partner_id" string="Customer"/>
<field name="delivery_plate_number" string="Plate Number"/>
<field name="name" filter_domain="[('name', 'ilike', self)]"/>
<field name="express_company_id"/>
<field name="partner_id"/>
<field name="delivery_plate_number"/>
<separator/>
<filter name="filter_unused" string="Unused" domain="[('usage_state', '=', 'unused')]"/>
......
......@@ -3,3 +3,4 @@
from . import pallet_batch_wizard
from . import pallet_print_wizard
from . import associate_pallet_wizard
......@@ -7,12 +7,11 @@ from odoo.exceptions import Warning, ValidationError
class AssociatePalletWizard(models.TransientModel):
_name = 'associate.pallet.wizard'
_inherit = 'associate.pallet.wizard'
_description = 'Associate Pallet Wizard'
usage_date = fields.Date(string='Usage Date', default=fields.Date.today) # 使用日期
pallet_id = fields.Many2one('cc.pallet', string='Pallet') # 托盘选择
big_package_numbers = fields.Text(string='Big Package Numbers') # 大包号(可输入多个)
# 字段定义
pallet_id = fields.Many2one('cc.pallet', string='Pallet', index=True)
def confirm(self):
for record in self:
......
......@@ -2,29 +2,15 @@
<record id="view_associate_pallet_wizard" model="ir.ui.view">
<field name="name">associate.pallet.wizard.form</field>
<field name="model">associate.pallet.wizard</field>
<field name="inherit_id" ref="ccs_base.view_associate_pallet_wizard"/>
<field name="arch" type="xml">
<form string="Associate Pallet">
<sheet>
<group>
<field name="usage_date" required="1"/> <!-- 使用日期 -->
<field name="pallet_id" required="1" options="{'no_create': True, 'no_quick_create': True}"/> <!-- 托盘选择 -->
<field name="big_package_numbers" required="1"
placeholder="Multiple can be entered, one large package number per line"/> <!-- 大包号 可输入多个,一行一个大包号 -->
</group>
<footer>
<button string="Confirm" type="object" name="confirm" class="btn-primary"/>
<button string="Close" special="cancel"/>
</footer>
</sheet>
</form>
<xpath expr="//field[@name='pallet_number']" position="after">
<field name="pallet_id" required="1" options="{'no_create': True, 'no_quick_create': True}"/>
</xpath>
<field name="pallet_number" position="attributes">
<attribute name="invisible">1</attribute>
</field>
</field>
</record>
<record id="action_associate_pallet" model="ir.actions.act_window">
<field name="name">Associate Pallet</field>
<field name="res_model">associate.pallet.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</odoo>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论