[UPD] add dokumentasi fucntion
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Package wizard untuk laporan bottleneck tiket Freshservice."""
|
||||
from . import gmn_freshservice_ticket_bottleneck_wizard_v01
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Wizard untuk generate laporan Excel analisis bottleneck tiket Freshservice.
|
||||
Bisa bikin 2 jenis laporan:
|
||||
1. Detail bottleneck satu tiket (breakdown per stage siapa yang lama)
|
||||
2. Ranking multi-tiket (perbandingan banyak tiket sekaligus)
|
||||
"""
|
||||
import io
|
||||
import re
|
||||
import base64
|
||||
@@ -11,7 +16,12 @@ from ..models.gmn_freshservice_ticket_stage_log_v01 import compute_calendar_days
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class FreshserviceTicketBottleneckWizard(models.TransientModel):
|
||||
"""Wizard popup untuk bikin laporan Excel bottleneck.
|
||||
User pilih tiket, filter tanggal/status, lalu klik Generate.
|
||||
Hasilnya file Excel yang bisa langsung diunduh.
|
||||
"""
|
||||
_name = 'freshservice.ticket.bottleneck.wizard'
|
||||
_description = 'Wizard Laporan Analisis Bottleneck & Ranking Tiket Freshservice (Excel)'
|
||||
|
||||
@@ -74,6 +84,7 @@ class FreshserviceTicketBottleneckWizard(models.TransientModel):
|
||||
|
||||
@api.onchange('ticket_id')
|
||||
def _onchange_ticket_id(self):
|
||||
"""Kalau user pilih tiket dari dropdown, otomatis isi nomor ID Freshservice-nya."""
|
||||
if self.ticket_id and self.ticket_id.external_ticket_id:
|
||||
self.external_ticket_id = self.ticket_id.external_ticket_id
|
||||
|
||||
@@ -86,11 +97,15 @@ class FreshserviceTicketBottleneckWizard(models.TransientModel):
|
||||
return clean
|
||||
|
||||
def _effective_responsibility(self, log):
|
||||
"""Return the reviewed classification when present, otherwise the automatic one."""
|
||||
"""Ambil tanggung jawab yang berlaku: pakai override kalau sudah di-review,
|
||||
kalau belum pakai hasil deteksi otomatis.
|
||||
"""
|
||||
return log.override_responsibility or log.responsibility
|
||||
|
||||
def _clipped_stage_interval(self, log, report_as_of):
|
||||
"""Return the reportable (start, end) interval, clipped at the report cut-off."""
|
||||
"""Potong interval stage log sesuai cut-off laporan.
|
||||
Kalau ada as_of, durasi dihitung hanya sampai tanggal cut-off itu.
|
||||
"""
|
||||
start = log.start_date
|
||||
if not start:
|
||||
return False, False
|
||||
@@ -132,6 +147,11 @@ class FreshserviceTicketBottleneckWizard(models.TransientModel):
|
||||
target_ticket.action_sync_from_freshservice()
|
||||
except Exception as e:
|
||||
raise UserError(_("Gagal mengambil data tiket #%s dari Freshservice: %s") % (clean_ext_id, str(e)))
|
||||
else :
|
||||
try:
|
||||
target_ticket.action_sync_from_freshservice()
|
||||
except Exception as e:
|
||||
raise UserError(_("Gagal mengambil data tiket #%s dari Freshservice: %s") % (clean_ext_id, str(e)))
|
||||
|
||||
if not target_ticket:
|
||||
raise UserError(_("Silakan pilih tiket atau masukkan Nomor ID Freshservice (contoh: 992)."))
|
||||
|
||||
Reference in New Issue
Block a user