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
|
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) {
|
export function jobColor (job, techColors, store) {
|
||||||
// Tech en pause/absent (statut interne 'off') → ses jobs en ROUGE vif (à réassigner) — priorité opérationnelle
|
// Tech en pause/absent (statut interne 'off') → ses jobs en ROUGE vif (à réassigner) — priorité opérationnelle
|
||||||
if (job.assignedTech && store) {
|
if (job.assignedTech && store) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { inject } from 'vue'
|
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'
|
import TagEditor from 'src/components/shared/TagEditor.vue'
|
||||||
|
|
||||||
const props = defineProps({
|
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 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">
|
<div v-if="panel.data?.job?.legacyTicketId" class="sb-rp-field">
|
||||||
<span class="sb-rp-lbl">Ticket legacy</span>
|
<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>
|
||||||
<div v-if="panel.data?.job?.note" class="sb-rp-field"><span class="sb-rp-lbl">Note</span>{{ panel.data.job.note }}</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">
|
<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-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('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>
|
<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>
|
<button v-if="panel.data?.job?.assignedTech" class="sb-rp-btn sb-ctx-warn" @click="emit('unassign', panel.data.job)">✕ Désaffecter</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user