feat(dispatch): bouton « Répondre dans legacy » (lien reply_ticket.php du tech)
- useHelpers.legacyReplyUrl(job, staffId?) → https://store.targo.ca/targo/reply_ticket.php?ticket=<legacy_ticket_id>&staff=<3301 par défaut = Tech Targo> - RightPanel : n° ticket legacy cliquable + bouton d'action « 📝 Répondre dans legacy » - permet au tech d'écrire dans le ticket legacy depuis ERPNext (lecture seule de notre côté) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
67395cd35e
commit
15976342e4
|
|
@ -94,6 +94,16 @@ export function legacyDeptColor (dept) {
|
|||
return null
|
||||
}
|
||||
|
||||
// Lien « Répondre au ticket » du serveur legacy (osTicket custom) — celui que les techs reçoivent
|
||||
// pour écrire dans le ticket. Format observé : reply_ticket.php?ticket=<id>&staff=<staffId>.
|
||||
// staff par défaut = 3301 (compte « Tech Targo » sous lequel le ticket est assigné dans legacy).
|
||||
export const LEGACY_REPLY_BASE = 'https://store.targo.ca/targo/reply_ticket.php'
|
||||
export function legacyReplyUrl (job, staffId) {
|
||||
const id = job && job.legacyTicketId
|
||||
if (!id) return null
|
||||
return `${LEGACY_REPLY_BASE}?ticket=${encodeURIComponent(id)}&staff=${staffId || 3301}`
|
||||
}
|
||||
|
||||
export function jobColor (job, techColors, store) {
|
||||
// Tech en pause/absent (statut interne 'off') → ses jobs en ROUGE vif (à réassigner) — priorité opérationnelle
|
||||
if (job.assignedTech && store) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<script setup>
|
||||
import { inject } from 'vue'
|
||||
import { fmtDur, prioLabel, prioClass, ICON } from 'src/composables/useHelpers'
|
||||
import { fmtDur, prioLabel, prioClass, ICON, legacyReplyUrl } from 'src/composables/useHelpers'
|
||||
import TagEditor from 'src/components/shared/TagEditor.vue'
|
||||
|
||||
const props = defineProps({
|
||||
|
|
@ -84,7 +84,11 @@ const onDeleteTag = inject('onDeleteTag')
|
|||
<div class="sb-rp-field"><span class="sb-rp-lbl">Statut</span>{{ panel.data?.job?.status }}</div>
|
||||
<div v-if="panel.data?.job?.legacyTicketId" class="sb-rp-field">
|
||||
<span class="sb-rp-lbl">Ticket legacy</span>
|
||||
<span>#{{ panel.data.job.legacyTicketId }}<span v-if="panel.data?.job?.legacyDept"> · {{ panel.data.job.legacyDept }}</span></span>
|
||||
<a class="sb-rp-link" :href="legacyReplyUrl(panel.data.job)" target="_blank" rel="noopener"
|
||||
:title="'Répondre / écrire dans le ticket #' + panel.data.job.legacyTicketId + ' (serveur legacy)'">
|
||||
#{{ panel.data.job.legacyTicketId }}<span v-if="panel.data?.job?.legacyDept"> · {{ panel.data.job.legacyDept }}</span>
|
||||
<span class="sb-rp-link-icon">↗</span>
|
||||
</a>
|
||||
</div>
|
||||
<div v-if="panel.data?.job?.note" class="sb-rp-field"><span class="sb-rp-lbl">Note</span>{{ panel.data.job.note }}</div>
|
||||
<div class="sb-rp-field">
|
||||
|
|
@ -111,6 +115,7 @@ const onDeleteTag = inject('onDeleteTag')
|
|||
<button class="sb-rp-primary" @click="emit('edit', panel.data.job)">✏ Modifier</button>
|
||||
<button class="sb-rp-btn" @click="emit('move', panel.data.job, panel.data.tech?.id)">↔ Déplacer / Réassigner</button>
|
||||
<button class="sb-rp-btn" @click="emit('geofix', panel.data.job)">📍 Géofixer sur la carte</button>
|
||||
<a v-if="legacyReplyUrl(panel.data?.job)" class="sb-rp-btn" :href="legacyReplyUrl(panel.data.job)" target="_blank" rel="noopener" style="text-decoration:none;text-align:center">📝 Répondre dans legacy</a>
|
||||
<button v-if="panel.data?.job?.assignedTech" class="sb-rp-btn sb-ctx-warn" @click="emit('unassign', panel.data.job)">✕ Désaffecter</button>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user