7231_lxb_commit

This commit is contained in:
lixiaobin@jikimo.com
2025-07-10 14:29:06 +08:00
parent 3be1c4c529
commit 559c6bfb1d
3 changed files with 20 additions and 3 deletions

View File

@@ -72,6 +72,8 @@ class SfDemandPlan(models.Model):
('4', ''),
], string='优先级', default='3')
overdelivery_allowed = fields.Boolean('可超量发货', default=False)
hide_button_release_plan = fields.Boolean(
string='显示下达计划按钮',
compute='_compute_hide_button_release_plan',
@@ -194,7 +196,9 @@ class SfDemandPlan(models.Model):
def button_production_release_plan(self):
line_ids = self.line_ids.filtered(lambda p: p.status == '30')
sum_product_uom_qty = sum(line_ids.mapped('plan_uom_qty'))
if sum_product_uom_qty > self.product_uom_qty:
if sum_product_uom_qty > self.product_uom_qty and not self.overdelivery_allowed and line_ids.filtered(lambda p: p.location_id.name == '客户'):
raise ValidationError(f"已禁止向合作伙伴/客户超量发货,请更换“补货原因”或将“可超量发货”设置为“是”。")
elif sum_product_uom_qty > self.product_uom_qty:
return {
'name': _('需求计划'),
'type': 'ir.actions.act_window',

View File

@@ -592,6 +592,10 @@ class SfProductionDemandPlan(models.Model):
filtered_plan = self.filtered(lambda mo: mo.status == '30')
if not filtered_plan:
raise UserError(_("没有需要下达的计划!"))
check_overdelivery_allowed = False
if not self.demand_plan_id.overdelivery_allowed:
if self.location_id.name == '客户':
check_overdelivery_allowed = True
# 按产品分组并计算总数
product_data = {}
for plan in filtered_plan:
@@ -612,7 +616,9 @@ class SfProductionDemandPlan(models.Model):
_("您正在下达的产品 %s,计划量%s,需求数量为%s,已超过需求数量") %
(product.display_name, data['plan_uom_qty'], data['product_uom_qty'])
)
if warning_messages:
if warning_messages and check_overdelivery_allowed:
raise ValidationError(f"已禁止向合作伙伴/客户超量发货,请更换“补货原因”或将“可超量发货”设置为“是”。")
elif warning_messages:
warning_message = "\n".join(warning_messages)
return {
'name': _('需求计划'),
@@ -631,7 +637,13 @@ class SfProductionDemandPlan(models.Model):
self.ensure_one()
if not self.new_supply_method:
raise ValidationError(f"供货方式不能为空!")
if self.plan_uom_qty > self.product_uom_qty:
check_overdelivery_allowed = False
if not self.demand_plan_id.overdelivery_allowed:
if self.location_id.name == '客户':
check_overdelivery_allowed = True
if self.plan_uom_qty > self.product_uom_qty and check_overdelivery_allowed:
raise ValidationError(f"已禁止向合作伙伴/客户超量发货,请更换“补货原因”或将“可超量发货”设置为“是”。")
elif self.plan_uom_qty > self.product_uom_qty:
return {
'name': _('需求计划'),
'type': 'ir.actions.act_window',

View File

@@ -35,6 +35,7 @@
<field name="model_machining_precision"/>
<field name="inventory_quantity_auto_apply"/>
<field name="priority" attrs="{'readonly': [('state', 'in', ('40','50'))]}"/>
<field name="overdelivery_allowed"/>
</group>
</group>
<notebook>