# WP3 — FE: remove the over-issue approve/reject section from the issue dialog + consume the 200 partial response

## Goal
Take the duplicate over-issue APPROVE/REJECT UI out of the production material-issue dialog (it now lives ONLY on the central «موافقات الصرف الزائد» screen — D1). Keep the over-issue REQUEST-with-reason dialog. Adapt the issue-submit flow to WP1's new 200 `{issued, held}` response: show success for the issued lines, and open the over-issue REQUEST dialog for the `held` materials (instead of the old 422 path).

## Exact files
- `/home/moonui2/public_html/moon-erp/src/app/features/production/orders/production-orders.component.ts`
  - **DELETE:** `approveOverIssue()` (~1327-1339), `rejectOverIssue()` (~1342-1354), `overIssueDecisionError()` (~1356-1364), `overIssueStatusSeverity()` (~1366-1371), `loadOverIssueRequests()` (~1312-1324); signals `overIssueRequests` (~234), `overIssueRequestsLoading` (~235); call-sites `loadOverIssueRequests(...)` at ~1000 and ~1291; the now-unused import `OverIssueApproval` (~54).
  - **KEEP:** `overIssueVisible/overIssueSaving/overIssueRows/overIssueReasonOptions` signals (~229-241), `openOverIssueRequest()` (~1254-1267), `canSubmitOverIssue()` (~1270-1273), `submitOverIssueRequests()` (~1276-1309, drop only its `:1291` loadOverIssueRequests call), imports `OverIssueReason`/`OverIssueBlockedMaterial` (~55-56).
  - **ADAPT:** the issue-submit handler (~1211-1245). Today the 422 branch (`:1227-1230`, `err.error.over_issue.materials`) opens the request dialog. With WP1, submit returns **200** `{issued, held}`. Read `res.held` on success: if non-empty, open the over-issue REQUEST dialog for those materials (reuse `openOverIssueRequest` with the held payload); still toast success for the issued draft. Keep a fallback for the 422 path if the BE still returns it in any case (defensive).
- `/home/moonui2/public_html/moon-erp/src/app/features/production/orders/production-orders.component.html`
  - **DELETE:** the `over-issue-section` block (~701-749) — the requests list + approve/reject buttons.
  - **KEEP:** the over-issue REQUEST dialog (~759-820) and the issue lines table/footer.
- Service `production-order.service.ts`: **do NOT change** — `approveOverIssueRequest/rejectOverIssueRequest` are shared with the central screen; `listOverIssueRequests` (per-order) becomes orphaned but harmless (leave or note).

## Interfaces (consumes WP1 — CONFIRMED from WP1 commit 3b757f0c9 + review)
- Issue submit success response is now **200** `{ issued: <ProductionOrderResource|null>, held: [...] }`.
  - **⚠️ M1 (review):** the order fields moved from `response.data` → `response.issued` (the JsonResource `data` wrapper is dropped because the resource is embedded in an array). The issue-submit SUCCESS handler MUST read `res.issued` (not `res.data`) — this affects the NORMAL/OFF-path issue too, not only over-issue. Update both the success handler and anywhere it read `res.data` for this endpoint.
  - `held[]` element keys (EXACT, mirror the old 422 `over_issue.materials`): `material_id`, `product_id`, `product`, `planned`, `consumed`, `requested`, `excess`, `approved_remaining`. The FE 422 handler at ts:1227-1266 already read `material_id`, `product`, `product_id`, `planned`, `consumed`, `excess` → zero key remapping; just swap the source from `err.error.over_issue.materials` → `res.held`.
  - **⚠️ M2 (review):** the old payload's `over_issue.permission` key was dropped. If the FE used it, hard-code `production.orders.approve_over_issue` FE-side.
- When `held` is non-empty → open `openOverIssueRequest(res.held)`. When empty → normal success. `issued:null` means all materials were held (no draft created).

## Acceptance criteria
- The issue dialog no longer shows any over-issue requests list or approve/reject buttons.
- Issuing within-plan materials → success, no request dialog.
- Issuing a mix (within + over plan) → success toast for the issued draft AND the over-issue REQUEST dialog opens prefilled for the over-plan material(s) with the mandatory reason.
- The central «موافقات الصرف الزائد» screen still works (approve/reject) — untouched.
- `ng build` green.

## Tests
- Angular has `skipTests` — no unit tests. Gate: `ng build` green + manual/e2e verify on `/app` (issue mixed → free issues + request dialog opens; central screen approve → keeper draft appears in أذون الصرف).

## Flags
- **[FIN]:** no. **migration:** none.

## Out of scope
- Any BE change (WP1/WP2). The central over-issue screen. The REQUEST dialog's internals (only drop the one loadOverIssueRequests call). Do NOT remove the shared service methods.
