Build Seth's changes C1 to C11 (Gitea issues 1, 8, 18, 23, 24, 25, 27, 31, 32, 33, 36)
- C1 (issue 1): over target follows VISUAL ticket hours, not the timer. - C2 (issue 24): a Q.C. reject always needs a reason; accept needs an NCR number after a reject without one. - C3 (issue 25): an incomplete unit ITP blocks filing. - C4 (issue 27): prints open the print dialog on the page, no new tab. - C5 (issue 31): filing is blocked while VISUAL shows a work order open; the feed sets vclosed on VISUAL packets. - C6 (issue 8): the data book leaves out the history pages. - C7 (issue 18): the supervisor approves each received short; accept and filing wait for it. - C8 (issue 23): per-department checklists, edited by the department supervisor or Admin, frozen at START. - C9 (issue 32): Q.C. and Clerical may run the stamp check. - C10 (issue 33): the PM screen and reports are for PS-ProjectMgmt and Admin only. - C11 (issue 36): the Stall screen lists the packets assigned to the welder, at the supervisor's stall. Migration 0011. Docs: PLAN (also issue 9 confirmed, issue 4 asked), POLICY, SECURITY, SCHEMA, FEED, README, CHANGELOG. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -289,16 +289,20 @@ def test_reject_with_reason_only(shop: Shop) -> None:
|
||||
assert out["qc_last"]["ncr"] is None and out["qc_last"]["rejected_welds"] == [f"W{w2}"]
|
||||
|
||||
|
||||
def test_reject_with_ncr_only(shop: Shop) -> None:
|
||||
def test_reject_needs_a_reason_even_with_an_ncr(shop: Shop) -> None:
|
||||
"""C2: an NCR number no longer stands in for the reason."""
|
||||
pkt = at_qc(shop)
|
||||
q = shop("qc.quinn")
|
||||
refused(reject(shop, pkt, ncr="NCR-26-1"), 422, "invalid_ncr", "Enter an NCR number like NCR-2026-0021.")
|
||||
refused(reject(shop, pkt, REASON, ncr="NCR-26-1"), 422, "invalid_ncr", "Enter an NCR number like NCR-2026-0021.")
|
||||
refused(reject(shop, pkt), 400, "reason_required")
|
||||
refused(reject(shop, pkt, "bad"), 400, "reason_required")
|
||||
refused(reject(shop, pkt, ncr=NCR), 400, "reason_required", "Give a reason of at least 8 characters.")
|
||||
refused(reject(shop, pkt, "bad", ncr=NCR), 400, "reason_required")
|
||||
assert fresh(q, pkt["id"])["status"] == "qc"
|
||||
out = ok(reject(shop, pkt, ncr=" ncr-2026-0021 "))
|
||||
_rejected(shop, pkt, out, NCR, NCR)
|
||||
out = ok(reject(shop, pkt, REASON, ncr=" ncr-2026-0021 "))
|
||||
_rejected(shop, pkt, out, f"{NCR} · {REASON}", f"{NCR} · {REASON}")
|
||||
assert out["qc_last"]["ncr"] == NCR and out["qc_last"]["rejected_welds"] == []
|
||||
assert out["ncr_required"] is False
|
||||
row = one(
|
||||
shop.settings, "SELECT ncr FROM qc_inspections WHERE packet_id = %s ORDER BY id DESC LIMIT 1", (pkt["id"],)
|
||||
)
|
||||
@@ -361,7 +365,7 @@ def test_qc_home(shop: Shop) -> None:
|
||||
assert "itp_hold_count" in card
|
||||
assert home["columns"]["accepted"] == [] and home["columns"]["rejected"] == []
|
||||
|
||||
ok(reject(shop, to_reject, ncr=NCR))
|
||||
ok(reject(shop, to_reject, REASON, ncr=NCR))
|
||||
accepted = ok(accept(shop, finish_inspection(shop, waiting), "databook"))
|
||||
home = ok(q.get("/api/qc/home"))
|
||||
assert home["kpis"] == {"waiting": 0, "accepted_7d": 1, "rejected_7d": 1}
|
||||
|
||||
Reference in New Issue
Block a user