[UPD] update colot template and logic UI

This commit is contained in:
Madanil
2026-10-19 10:15:38 +07:00
parent a44219a8f2
commit ef5ba7f159
15 changed files with 203 additions and 116 deletions

View File

@@ -13,9 +13,10 @@
<field name="stage_name" widget="badge"/>
<field name="responsibility"
widget="badge"
decoration-danger="responsibility == 'internal'"
decoration-danger="responsibility in ('internal','on_hold','internal_discussion')"
decoration-warning="responsibility == 'customer'"
decoration-muted="responsibility in ('on_hold','third_party','internal_discussion','scheduled_meeting','external_activity','resolved_idle')"/>
decoration-info="responsibility == 'scheduled_meeting'"
decoration-muted="responsibility in ('third_party','external_activity','resolved_idle')"/>
<field name="actor_name"/>
<field name="actor_type"/>
<field name="start_date" string="Waktu Mulai (UTC)"/>
@@ -75,11 +76,11 @@
<field name="stage_name"/>
<field name="actor_name"/>
<filter name="filter_internal" string="Waiting on Us (Internal)" domain="[('responsibility', '=', 'internal')]"/>
<filter name="filter_customer" string="Waiting on User (Customer)" domain="[('responsibility', '=', 'customer')]"/>
<filter name="filter_customer" string="Waiting on User (Requester)" domain="[('responsibility', '=', 'customer')]"/>
<filter name="filter_on_hold" string="On Hold (SLA Paused)" domain="[('responsibility', '=', 'on_hold')]"/>
<filter name="filter_third_party" string="Waiting on Third Party (SLA Paused)" domain="[('responsibility', '=', 'third_party')]"/>
<filter name="filter_internal_discussion" string="Internal Discussion (SLA Paused)" domain="[('responsibility', '=', 'internal_discussion')]"/>
<filter name="filter_scheduled_meeting" string="Tunggu Bersama (Scheduled Meeting)" domain="[('responsibility', '=', 'scheduled_meeting')]"/>
<filter name="filter_scheduled_meeting" string="Scheduled Meeting (Waiting Together)" domain="[('responsibility', '=', 'scheduled_meeting')]"/>
<filter name="filter_external_activity" string="External Activity (SLA Paused)" domain="[('responsibility', '=', 'external_activity')]"/>
<filter name="filter_resolved_idle" string="Resolved (Ticket Closed/Idle)" domain="[('responsibility', '=', 'resolved_idle')]"/>
<filter name="filter_sla_paused" string="Semua SLA Paused" domain="[('responsibility', 'in', ['on_hold','third_party','internal_discussion','scheduled_meeting','external_activity'])]"/>

View File

@@ -17,21 +17,10 @@
string="Laporan Bottleneck (Excel)"
class="btn-outline-success"
icon="fa-file-excel-o"/>
<!-- <button name="action_assign_to_me"
type="object"
string="Tugaskan ke Saya"
class="btn-outline-primary"
icon="fa-user-check"/>
<button name="action_toggle_mock_mode"
type="object"
string="Ganti Mode (Mock / Live)"
class="btn-secondary"
icon="fa-exchange"/> -->
<field name="status" widget="statusbar" statusbar_visible="open,pending,resolved,closed"/>
</header>
<sheet>
<field name="is_detail_synced" invisible="1"/>
<widget name="web_ribbon" title="SIMULASI MOCK DATA" bg_color="text-bg-info" invisible="not is_mock_data"/>
<div class="oe_title">
<label for="name" string="Judul / Masalah Tiket"/>
@@ -43,47 +32,53 @@
<field name="current_responsibility" widget="badge"
decoration-danger="current_responsibility == 'internal'"
decoration-warning="current_responsibility == 'customer'"
decoration-info="current_responsibility == 'scheduled_meeting'"
decoration-muted="current_responsibility == 'third_party'"
decoration-success="current_responsibility == 'closed'"/>
</div>
</div>
<!-- KPI METRIC CARDS SECTION -->
<div class="row mt-4 mb-4">
<div class="col-md-3">
<div class="col-md-2">
<div class="card text-center p-3 shadow-sm border-primary">
<small class="text-muted fw-bold text-uppercase">First Response</small>
<h4 class="mb-0 text-primary mt-1">
<field name="first_response_time_display" readonly="1"/>
</h4>
<small class="text-secondary mt-1">
Oleh: <field name="first_responder_name" readonly="1"/>
</small>
<h4 class="mb-0 text-primary mt-1"><field name="first_response_time_display" readonly="1"/></h4>
<small class="text-secondary mt-1">Oleh: <field name="first_responder_name" readonly="1"/></small>
</div>
</div>
<div class="col-md-3">
<div class="col-md-2">
<div class="card text-center p-3 shadow-sm border-danger">
<small class="text-muted fw-bold text-uppercase">Agent</small>
<h4 class="mb-0 text-danger mt-1">
<field name="total_agent_time_display" readonly="1"/>
</h4>
<h4 class="mb-0 text-danger mt-1"><field name="total_agent_time_display" readonly="1"/></h4>
<small class="text-secondary mt-1">Waiting on Us</small>
</div>
</div>
<div class="col-md-3">
<div class="col-md-2">
<div class="card text-center p-3 shadow-sm border-warning">
<small class="text-muted fw-bold text-uppercase">User</small>
<h4 class="mb-0 text-warning mt-1">
<field name="total_customer_time_display" readonly="1"/>
</h4>
<h4 class="mb-0 text-warning mt-1"><field name="total_customer_time_display" readonly="1"/></h4>
<small class="text-secondary mt-1">Waiting on Customer</small>
</div>
</div>
<div class="col-md-3">
<div class="col-md-2">
<div class="card text-center p-3 shadow-sm border-info">
<small class="text-muted fw-bold text-uppercase">Scheduled Meeting</small>
<h4 class="mb-0 text-info mt-1"><field name="shared_wait_time_display" readonly="1"/></h4>
<small class="text-secondary mt-1">Waiting Together</small>
</div>
</div>
<div class="col-md-2">
<div class="card text-center p-3 shadow-sm border-secondary">
<small class="text-muted fw-bold text-uppercase">Third Party</small>
<h4 class="mb-0 text-secondary mt-1"><field name="third_party_time_display" readonly="1"/></h4>
<small class="text-secondary mt-1">Waiting on Vendor</small>
</div>
</div>
<div class="col-md-2">
<div class="card text-center p-3 shadow-sm border-success">
<small class="text-muted fw-bold text-uppercase">Waktu Selesai</small>
<h4 class="mb-0 text-success mt-1">
<field name="resolution_time_display" readonly="1"/>
</h4>
<h4 class="mb-0 text-success mt-1"><field name="resolution_time_display" readonly="1"/></h4>
<small class="text-secondary mt-1">Total Resolution</small>
</div>
</div>
@@ -115,9 +110,10 @@
decoration-muted="not is_active or responsibility in ('on_hold','third_party','internal_discussion','scheduled_meeting','external_activity','resolved_idle')">
<field name="stage_name" widget="badge"/>
<field name="responsibility" widget="badge"
decoration-danger="responsibility == 'internal'"
decoration-danger="responsibility in ('internal','on_hold','internal_discussion')"
decoration-warning="responsibility == 'customer'"
decoration-muted="responsibility in ('on_hold','third_party','internal_discussion','scheduled_meeting','external_activity','resolved_idle')"/>
decoration-info="responsibility == 'scheduled_meeting'"
decoration-muted="responsibility in ('third_party','external_activity','resolved_idle')"/>
<field name="actor_name"/>
<field name="actor_type"/>
<field name="start_date" string="Waktu Mulai (UTC)"/>
@@ -159,7 +155,11 @@
<field name="first_response_time_days" readonly="1"/>
<field name="total_agent_time_days" readonly="1"/>
<field name="total_customer_time_days" readonly="1"/>
<field name="shared_wait_time_days" readonly="1"/>
<field name="third_party_time_days" readonly="1"/>
<field name="resolution_time_days" readonly="1"/>
<field name="shared_wait_time_hours" invisible="1"/>
<field name="third_party_time_hours" invisible="1"/>
<!-- Field jam disembunyikan (hide) -->
<field name="first_response_time_hours" invisible="1"/>
<field name="total_agent_time_hours" invisible="1"/>
@@ -204,6 +204,8 @@
decoration-success="current_responsibility == 'closed'"/>
<field name="total_agent_time_display"/>
<field name="total_customer_time_display"/>
<field name="shared_wait_time_display" optional="show"/>
<field name="third_party_time_display" optional="show"/>
<field name="first_response_time_display"/>
<field name="responder_name"/>
<field name="requester_name"/>

View File

@@ -7,7 +7,7 @@
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//form" position="inside">
<app data-string="Freshservice Audit" string="Freshservice Audit" name="freshservice_ticket_audit">
<app data-string="Freshservice Audit" string="Freshservice Audit" name="gmn_freshservice">
<block title="Konfigurasi Integrasi Freshservice" name="freshservice_settings_block">
<setting id="freshservice_url_setting" help="URL Portal Freshservice perusahaan Anda">
<field name="freshservice_url"/>
@@ -21,12 +21,11 @@
<field name="freshservice_sync_limit"/>
</setting>
<setting id="freshservice_mock_setting" help="Gunakan mock data sesuai format resmi Freshservice API untuk testing tanpa API Key asli">
<field name="freshservice_use_mock"/>
<setting id="freshservice_connection_setting" help="Uji koneksi ke Live Freshservice API">
<div class="mt8">
<button name="action_test_freshservice_connection"
type="object"
string="Tes Koneksi / Cek Status"
string="Tes Koneksi Live API"
class="btn-primary"
icon="fa-plug"/>
</div>
@@ -42,6 +41,6 @@
<field name="res_model">res.config.settings</field>
<field name="view_mode">form</field>
<field name="target">main</field>
<field name="context">{'module': 'freshservice_ticket_audit'}</field>
<field name="context">{'module': 'gmn_freshservice'}</field>
</record>
</odoo>