Accept Merge Request #2274: (feature/7231 -> develop)
Merge Request: 7231_lxb_commit--控制物料需求计划在客户位置的计划量不允许超过需求量 Created By: @李晓斌 Reviewed By: @胡尧 Approved By: @胡尧 Accepted By: @李晓斌 URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/2274
This commit is contained in:
@@ -72,6 +72,8 @@ class SfDemandPlan(models.Model):
|
|||||||
('4', '低'),
|
('4', '低'),
|
||||||
], string='优先级', default='3')
|
], string='优先级', default='3')
|
||||||
|
|
||||||
|
overdelivery_allowed = fields.Boolean('可超量发货', default=False)
|
||||||
|
|
||||||
hide_button_release_plan = fields.Boolean(
|
hide_button_release_plan = fields.Boolean(
|
||||||
string='显示下达计划按钮',
|
string='显示下达计划按钮',
|
||||||
compute='_compute_hide_button_release_plan',
|
compute='_compute_hide_button_release_plan',
|
||||||
@@ -211,7 +213,13 @@ class SfDemandPlan(models.Model):
|
|||||||
def button_production_release_plan(self):
|
def button_production_release_plan(self):
|
||||||
line_ids = self.line_ids.filtered(lambda p: p.status == '30')
|
line_ids = self.line_ids.filtered(lambda p: p.status == '30')
|
||||||
sum_product_uom_qty = sum(line_ids.mapped('plan_uom_qty'))
|
sum_product_uom_qty = sum(line_ids.mapped('plan_uom_qty'))
|
||||||
if sum_product_uom_qty > self.product_uom_qty:
|
customer_location_id = self.env['ir.model.data']._xmlid_to_res_id('stock.stock_location_customers')
|
||||||
|
if not self.overdelivery_allowed and line_ids.filtered(lambda p: p.location_id.id == customer_location_id):
|
||||||
|
if float_compare(sum_product_uom_qty, self.product_uom_qty,
|
||||||
|
precision_rounding=self.product_id.uom_id.rounding) == 1:
|
||||||
|
raise ValidationError(f"已禁止向合作伙伴/客户超量发货,请更换“补货原因”或将“可超量发货”设置为“是”。")
|
||||||
|
elif float_compare(sum_product_uom_qty, self.product_uom_qty,
|
||||||
|
precision_rounding=self.product_id.uom_id.rounding) == 1:
|
||||||
return {
|
return {
|
||||||
'name': _('需求计划'),
|
'name': _('需求计划'),
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
|
|||||||
@@ -595,6 +595,11 @@ class SfProductionDemandPlan(models.Model):
|
|||||||
filtered_plan = self.filtered(lambda mo: mo.status == '30')
|
filtered_plan = self.filtered(lambda mo: mo.status == '30')
|
||||||
if not filtered_plan:
|
if not filtered_plan:
|
||||||
raise UserError(_("没有需要下达的计划!"))
|
raise UserError(_("没有需要下达的计划!"))
|
||||||
|
check_overdelivery_allowed = False
|
||||||
|
if not self.demand_plan_id.overdelivery_allowed:
|
||||||
|
customer_location_id = self.env['ir.model.data']._xmlid_to_res_id('stock.stock_location_customers')
|
||||||
|
if self.location_id.id == customer_location_id:
|
||||||
|
check_overdelivery_allowed = True
|
||||||
# 按产品分组并计算总数
|
# 按产品分组并计算总数
|
||||||
product_data = {}
|
product_data = {}
|
||||||
for plan in filtered_plan:
|
for plan in filtered_plan:
|
||||||
@@ -610,12 +615,15 @@ class SfProductionDemandPlan(models.Model):
|
|||||||
# 检查需求超过计划数量的产品
|
# 检查需求超过计划数量的产品
|
||||||
warning_messages = []
|
warning_messages = []
|
||||||
for product, data in product_data.items():
|
for product, data in product_data.items():
|
||||||
if data['plan_uom_qty'] > data['product_uom_qty']:
|
if float_compare(data['plan_uom_qty'], data['product_uom_qty'],
|
||||||
|
precision_rounding=product.uom_id.rounding) == 1:
|
||||||
warning_messages.append(
|
warning_messages.append(
|
||||||
_("您正在下达的产品 %s,计划量%s,需求数量为%s,已超过需求数量") %
|
_("您正在下达的产品 %s,计划量%s,需求数量为%s,已超过需求数量") %
|
||||||
(product.display_name, data['plan_uom_qty'], data['product_uom_qty'])
|
(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)
|
warning_message = "\n".join(warning_messages)
|
||||||
return {
|
return {
|
||||||
'name': _('需求计划'),
|
'name': _('需求计划'),
|
||||||
@@ -634,7 +642,15 @@ class SfProductionDemandPlan(models.Model):
|
|||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
if not self.new_supply_method:
|
if not self.new_supply_method:
|
||||||
raise ValidationError(f"供货方式不能为空!")
|
raise ValidationError(f"供货方式不能为空!")
|
||||||
if self.plan_uom_qty > self.product_uom_qty:
|
check_overdelivery_allowed = False
|
||||||
|
if not self.demand_plan_id.overdelivery_allowed:
|
||||||
|
customer_location_id = self.env['ir.model.data']._xmlid_to_res_id('stock.stock_location_customers')
|
||||||
|
if self.location_id.id == customer_location_id:
|
||||||
|
check_overdelivery_allowed = True
|
||||||
|
if check_overdelivery_allowed:
|
||||||
|
if float_compare(self.plan_uom_qty, self.product_uom_qty,precision_rounding=self.product_id.uom_id.rounding) == 1:
|
||||||
|
raise ValidationError(f"已禁止向合作伙伴/客户超量发货,请更换“补货原因”或将“可超量发货”设置为“是”。")
|
||||||
|
elif float_compare(self.plan_uom_qty, self.product_uom_qty,precision_rounding=self.product_id.uom_id.rounding) == 1:
|
||||||
return {
|
return {
|
||||||
'name': _('需求计划'),
|
'name': _('需求计划'),
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
<field name="model_machining_precision"/>
|
<field name="model_machining_precision"/>
|
||||||
<field name="inventory_quantity_auto_apply"/>
|
<field name="inventory_quantity_auto_apply"/>
|
||||||
<field name="priority" attrs="{'readonly': [('state', 'in', ('40','50'))]}"/>
|
<field name="priority" attrs="{'readonly': [('state', 'in', ('40','50'))]}"/>
|
||||||
|
<field name="overdelivery_allowed"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
<notebook>
|
<notebook>
|
||||||
|
|||||||
Reference in New Issue
Block a user