feat: 生产订单每个 BOM 生产数量限制为 1–9 的个位正整数
- 前端: 数量输入框改为 text/inputmode=numeric/maxlength=1,新增 capQty 实时拦截非个位(去非数字、限1位、超范围清空) - 后端: 新增 _bom_qty_invalid 校验,order_new/order_edit 拒绝非个位数量并回显已填内容,提示「每个 BOM 的生产数量需为 1–9 的个位正整数」 Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
This commit is contained in:
@@ -1499,6 +1499,10 @@ def order_new():
|
||||
factory_id = int(fid_raw) if fid_raw.isdigit() else None
|
||||
if not pairs:
|
||||
flash("请至少选择一个 BOM 并填写大于 0 的生产数量", "error")
|
||||
elif _bom_qty_invalid(pairs):
|
||||
flash("每个 BOM 的生产数量需为 1–9 的个位正整数", "error")
|
||||
return render_template("order_form.html", boms=boms_all, factories=factories,
|
||||
o=None, initial_lines=[[bid, qv] for bid, qv in pairs])
|
||||
else:
|
||||
order_no = request.form.get("order_no", "").strip() or _gen_order_no()
|
||||
if db.session.scalar(db.select(ProdOrder).where(ProdOrder.order_no == order_no)):
|
||||
@@ -1646,6 +1650,10 @@ def order_edit(oid):
|
||||
flash("请至少选择一个 BOM 并填写大于 0 的生产数量", "error")
|
||||
return render_template("order_form.html", boms=boms_all, factories=factories,
|
||||
o=o, initial_lines=[[b.id, q] for b, q in order_bom_lines(o)])
|
||||
if _bom_qty_invalid(pairs):
|
||||
flash("每个 BOM 的生产数量需为 1–9 的个位正整数", "error")
|
||||
return render_template("order_form.html", boms=boms_all, factories=factories,
|
||||
o=o, initial_lines=[[bid, qv] for bid, qv in pairs])
|
||||
old_no = o.order_no
|
||||
order_no = request.form.get("order_no", "").strip() or o.order_no
|
||||
if order_no != o.order_no and db.session.scalar(
|
||||
@@ -1779,6 +1787,18 @@ def _parse_bom_pairs(form):
|
||||
return pairs
|
||||
|
||||
|
||||
def _bom_qty_invalid(pairs):
|
||||
"""返回 pairs 中不符合『1–9 个位正整数』的 qty 列表; 空列表表示全部合法。
|
||||
|
||||
生产订单每个 BOM 的生产数量限定为个位正整数(1~9), 不允许 0、小数或超过个位。
|
||||
"""
|
||||
bad = []
|
||||
for _, q in pairs:
|
||||
if not (1 <= q <= 9 and float(q).is_integer()):
|
||||
bad.append(q)
|
||||
return bad
|
||||
|
||||
|
||||
def _find_posted_flows(order_no, material_id):
|
||||
"""返回某生产订单某物料已入账调入流水(源厂出库 + 生产厂入库)。"""
|
||||
outs = db.session.scalars(db.select(Outbound).where(
|
||||
|
||||
Reference in New Issue
Block a user