- Comms: sélecteur d'expéditeur « De: » (défaut groupe Support TARGO) via resolveSendFrom + alias vérifiés
- Notifs: prefs de feeds PAR utilisateur (/conversations/notif-prefs) + cloche à bascules ; boot tooltip-ux (clic prioritaire + anti-empilement)
- Courriel: invitation à évaluer = modèle Unlayer éditable (transactional-rating-invite-*) ; test-send via Gmail + expansion {{rating}} ; logo TARGO auto-hébergé sur le magasin d'actifs du hub
- Planif: bloc « sans déplacement » (damier, début de quart, alerte si pas de quart), quart éditable dans l'éditeur de jour, icônes de compétence en vue jour (TV pour télé), clic cellule → éditeur, clic gauche lane → liste / clic droit → menu quart, lien ↗ ticket par job
- Tickets: défaut « Non fermés » + correction du filtre « Mes tickets » (owner)
- Inbox: poll Gmail 1 min + rafraîchir à la demande (poll-now)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
56 lines
2.1 KiB
JavaScript
56 lines
2.1 KiB
JavaScript
export const statusOptions = [
|
|
{ label: 'Tous', value: 'all' },
|
|
{ label: 'Non fermes', value: 'not_closed' },
|
|
{ label: 'Ouverts', value: 'Open' },
|
|
{ label: 'Repondus', value: 'Replied' },
|
|
{ label: 'Resolus', value: 'Resolved' },
|
|
{ label: 'Fermes', value: 'Closed' },
|
|
]
|
|
|
|
export const priorityOptions = [
|
|
{ label: 'Urgent', value: 'Urgent' },
|
|
{ label: 'Haute', value: 'High' },
|
|
{ label: 'Moyenne', value: 'Medium' },
|
|
{ label: 'Basse', value: 'Low' },
|
|
]
|
|
|
|
export const columns = [
|
|
{ name: 'important', label: '', field: 'is_important', align: 'center', style: 'width:30px;padding:0' },
|
|
{ name: 'legacy_id', label: '#', field: 'legacy_ticket_id', align: 'left', sortable: true, style: 'width:70px' },
|
|
{ name: 'subject', label: 'Sujet', field: 'subject', align: 'left' },
|
|
{ name: 'customer_name', label: 'Client', field: 'customer_name', align: 'left', sortable: true },
|
|
{ name: 'issue_type', label: 'Type', field: 'issue_type', align: 'left' },
|
|
{ name: 'opening_date', label: 'Date', field: 'opening_date', align: 'left', sortable: true },
|
|
{ name: 'priority', label: 'Priorite', field: 'priority', align: 'center', sortable: true },
|
|
{ name: 'status', label: 'Statut', field: 'status', align: 'center' },
|
|
]
|
|
|
|
export function buildFilters ({ statusFilter, typeFilter, priorityFilter, search, ownerFilter, me }) {
|
|
const filters = {}
|
|
if (statusFilter === 'not_closed') {
|
|
filters.status = ['!=', 'Closed']
|
|
} else if (statusFilter !== 'all') {
|
|
filters.status = statusFilter
|
|
}
|
|
if (typeFilter) filters.issue_type = typeFilter
|
|
if (priorityFilter) filters.priority = priorityFilter
|
|
if (search?.trim()) {
|
|
const q = search.trim()
|
|
if (/^\d+$/.test(q)) {
|
|
filters.legacy_ticket_id = parseInt(q)
|
|
} else {
|
|
filters.subject = ['like', '%' + q + '%']
|
|
}
|
|
}
|
|
if (ownerFilter === 'mine' && me) {
|
|
filters.owner = me // « Mes tickets » = créés/possédés par l'agent connecté (champ owner, toujours requêtable)
|
|
}
|
|
return filters
|
|
}
|
|
|
|
export function getSortField (col) {
|
|
if (col === 'opening_date') return 'creation'
|
|
if (col === 'legacy_id') return 'legacy_ticket_id'
|
|
return col || 'creation'
|
|
}
|