diff --git a/apps/ops/src/api/dispatch.js b/apps/ops/src/api/dispatch.js index 70007ef..3a24bfb 100644 --- a/apps/ops/src/api/dispatch.js +++ b/apps/ops/src/api/dispatch.js @@ -98,6 +98,18 @@ export async function updateJob (name, payload) { return apiPut('Dispatch Job', name, payload) } +// Complète un job VIA le chaînage canonique du hub (déblocage dépendances + activation abonnement +// + facture prorata BROUILLON en bout de chaîne, gatée PRORATION_WRITE / BILLING_APPROVAL_GATE). +// Réutilisé par la complétion d'un ticket de VENTE/installation. Renvoie { activated, invoices, pending_approval? }. +export async function setJobStatusChain (job, status) { + const res = await fetch(`${HUB_URL}/dispatch/job-status`, { + method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ job, status }), + }) + const data = await res.json().catch(() => ({})) + if (!res.ok) throw new Error(data.error || ('Dispatch API ' + res.status)) + return data +} + export async function createJob (payload) { const res = await authFetch( `${BASE_URL}/api/resource/Dispatch%20Job`, diff --git a/apps/ops/src/components/shared/TicketStatusMenu.vue b/apps/ops/src/components/shared/TicketStatusMenu.vue new file mode 100644 index 0000000..507f98b --- /dev/null +++ b/apps/ops/src/components/shared/TicketStatusMenu.vue @@ -0,0 +1,39 @@ + + + diff --git a/apps/ops/src/components/shared/detail-sections/IssueDetail.vue b/apps/ops/src/components/shared/detail-sections/IssueDetail.vue index fbeb5c4..f972407 100644 --- a/apps/ops/src/components/shared/detail-sections/IssueDetail.vue +++ b/apps/ops/src/components/shared/detail-sections/IssueDetail.vue @@ -1,9 +1,14 @@