Add total_durasi_response and total_durasi_recovery fields to api.graphql.ts
This commit is contained in:
		
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,14 +1,31 @@ | ||||
| <template> | ||||
|   <Filters @reset-form="data = []" :report-button="true" @run-search="() => filterData(filters)" | ||||
|     @run-report="() => exportToPDF(reportMeta, data, true)" class="mb-4"> | ||||
|   <Filters | ||||
|     @reset-form="data = []" | ||||
|     :report-button="true" | ||||
|     @run-search="() => filterData(filters)" | ||||
|     @run-report="() => exportToPDF(reportMeta, data, true)" | ||||
|     class="mb-4" | ||||
|   > | ||||
|     <Type1 @update:filters="(value) => (filters = value)" /> | ||||
|   </Filters> | ||||
|  | ||||
|   <div id="data"> | ||||
|     <DxDataGrid ref="dataGridRef" :allow-column-reordering="true" class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||
|       :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="onDataSelectionChanged" | ||||
|       @exporting="onExporting" :allow-column-resizing="true" column-resizing-mode="widget" :word-wrap-enabled="true"> | ||||
|     <DxDataGrid | ||||
|       ref="dataGridRef" | ||||
|       :allow-column-reordering="true" | ||||
|       class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" | ||||
|       :show-column-lines="true" | ||||
|       :show-row-lines="false" | ||||
|       :show-borders="true" | ||||
|       :row-alternation-enabled="true" | ||||
|       :hover-state-enabled="true" | ||||
|       @selection-changed="onDataSelectionChanged" | ||||
|       @exporting="onExporting" | ||||
|       :allow-column-resizing="true" | ||||
|       column-resizing-mode="widget" | ||||
|       :word-wrap-enabled="true" | ||||
|     > | ||||
|       <DxGrouping expand-mode="rowClick" /> | ||||
|       <DxSelection mode="single" /> | ||||
|       <DxPaging :enabled="false" /> | ||||
| @@ -16,30 +33,86 @@ | ||||
|       <!--  --> | ||||
|  | ||||
|       <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|       <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|       <DxExport | ||||
|         :enabled="true" | ||||
|         :formats="['pdf', 'xlsx', 'document']" | ||||
|         :allow-export-selected-data="false" | ||||
|       /> | ||||
|       <DxColumnFixing :enabled="true" /> | ||||
|  | ||||
|       <DxColumn css-class="custom-table-column" :width="50" alignment="center" data-field="number" caption="No" | ||||
|         cell-template="formatNumber" /> | ||||
|       <DxColumn alignment="center" :min-width="180" data-field="nama_up3" caption="Nama UP3" | ||||
|         css-class="custom-table-column" cell-template="formatText" /> | ||||
|       <DxColumn alignment="center" :min-width="180" data-field="nama_uid" caption="Nama UID" | ||||
|         css-class="custom-table-column" :group-index="0" /> | ||||
|       <DxColumn | ||||
|         css-class="custom-table-column" | ||||
|         :width="50" | ||||
|         alignment="center" | ||||
|         data-field="number" | ||||
|         caption="No" | ||||
|         cell-template="formatNumber" | ||||
|       /> | ||||
|       <DxColumn | ||||
|         alignment="center" | ||||
|         :min-width="180" | ||||
|         data-field="nama_up3" | ||||
|         caption="Nama UP3" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatText" | ||||
|       /> | ||||
|       <DxColumn | ||||
|         alignment="center" | ||||
|         :min-width="180" | ||||
|         data-field="nama_uid" | ||||
|         caption="Nama UID" | ||||
|         css-class="custom-table-column" | ||||
|         :group-index="0" | ||||
|       /> | ||||
|  | ||||
|       <DxColumn alignment="center" :min-width="180" data-field="nama_posko" caption="Nama Posko" | ||||
|         css-class="custom-table-column" cell-template="formatText" /> | ||||
|       <DxColumn :width="180" alignment="center" data-field="posko_in" caption="Posko IN" css-class="custom-table-column" | ||||
|         cell-template="formatNumberPoskoIn" /> | ||||
|       <DxColumn :width="180" alignment="center" data-field="posko_out" caption="Posko OUT" | ||||
|         css-class="custom-table-column" cell-template="formatNumberPoskoOut" /> | ||||
|       <DxColumn | ||||
|         alignment="center" | ||||
|         :min-width="180" | ||||
|         data-field="nama_posko" | ||||
|         caption="Nama Posko" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatText" | ||||
|       /> | ||||
|       <DxColumn | ||||
|         :width="180" | ||||
|         alignment="center" | ||||
|         data-field="posko_in" | ||||
|         caption="Posko IN" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatNumberPoskoIn" | ||||
|       /> | ||||
|       <DxColumn | ||||
|         :width="180" | ||||
|         alignment="center" | ||||
|         data-field="posko_out" | ||||
|         caption="Posko OUT" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatNumberPoskoOut" | ||||
|       /> | ||||
|  | ||||
|       <DxSummary> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="number" display-format="Total" css-class="!text-left" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="posko_in" summary-type="sum" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="posko_out" summary-type="sum" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="nama_up3" | ||||
|           display-format="Total" | ||||
|           css-class="!text-left" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="posko_in" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="posko_out" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|       </DxSummary> | ||||
|  | ||||
|       <template #formatText="{ data }"> | ||||
| @@ -51,94 +124,227 @@ | ||||
|       <template #formatNumber="{ data }"> | ||||
|         <p class="text-right cursor-pointer" @click="setPoskoSelected('')"> | ||||
|           {{ | ||||
|     isNumber(data.text) | ||||
|       ? data.column.caption == '%' | ||||
|         ? formatPercentage(data.text) | ||||
|         : formatNumber(data.text) | ||||
|       : data.text | ||||
|   }} | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|  | ||||
|       <template #formatNumberPoskoIn="{ data }"> | ||||
|         <p class="text-right cursor-pointer" @click="setPoskoSelected('in')"> | ||||
|           {{ | ||||
|     isNumber(data.text) | ||||
|       ? data.column.caption == '%' | ||||
|         ? formatPercentage(data.text) | ||||
|         : formatNumber(data.text) | ||||
|       : data.text | ||||
|   }} | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|  | ||||
|       <template #formatNumberPoskoOut="{ data }"> | ||||
|         <p class="text-right cursor-pointer" @click="setPoskoSelected('out')"> | ||||
|           {{ | ||||
|     isNumber(data.text) | ||||
|       ? data.column.caption == '%' | ||||
|         ? formatPercentage(data.text) | ||||
|         : formatNumber(data.text) | ||||
|       : data.text | ||||
|   }} | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|     </DxDataGrid> | ||||
|   </div> | ||||
|  | ||||
|   <DetailDialog :open="dialogDetail" title="Detail Rekapitulasi Gangguan Alih Posko" @on-close="closeDialog" | ||||
|     :full-width="true"> | ||||
|   <DetailDialog | ||||
|     :open="dialogDetail" | ||||
|     title="Detail Rekapitulasi Gangguan Alih Posko" | ||||
|     @on-close="closeDialog" | ||||
|     :full-width="true" | ||||
|   > | ||||
|     <div class="w-full mb-4 lg:w-[70%] lg:float-left"> | ||||
|       <div class="p-4 bg-white rounded-xl lg:mr-4"> | ||||
|         <DxDataGrid :allow-column-reordering="true" class="max-h-[calc(100vh-140px)]" :data-source="dataSub" | ||||
|           :show-column-lines="true" :show-row-lines="false" :show-borders="true" :row-alternation-enabled="true" | ||||
|           :hover-state-enabled="true" @selection-changed="onDataSubSelectionChanged" :column-width="100" | ||||
|           @exporting="onExportingDetail" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||
|         <DxDataGrid | ||||
|           :allow-column-reordering="true" | ||||
|           class="max-h-[calc(100vh-140px)]" | ||||
|           :data-source="dataSub" | ||||
|           :show-column-lines="true" | ||||
|           :show-row-lines="false" | ||||
|           :show-borders="true" | ||||
|           :row-alternation-enabled="true" | ||||
|           :hover-state-enabled="true" | ||||
|           @selection-changed="onDataSubSelectionChanged" | ||||
|           :column-width="100" | ||||
|           @exporting="onExportingDetail" | ||||
|           :allow-column-resizing="true" | ||||
|           column-resizing-mode="widget" | ||||
|         > | ||||
|           <DxSelection mode="single" /> | ||||
|           <DxPaging :page-size="20" :enabled="true" /> | ||||
|           <DxPager :visible="true" :allowed-page-sizes="[20, 50, 100]" display-mode="full" | ||||
|             :show-page-size-selector="true" :show-info="true" :show-navigation-buttons="true" /> | ||||
|           <DxPager | ||||
|             :visible="true" | ||||
|             :allowed-page-sizes="[20, 50, 100]" | ||||
|             display-mode="full" | ||||
|             :show-page-size-selector="true" | ||||
|             :show-info="true" | ||||
|             :show-navigation-buttons="true" | ||||
|           /> | ||||
|           <!--  --> | ||||
|           <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|           <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|           <DxExport | ||||
|             :enabled="true" | ||||
|             :formats="['pdf', 'xlsx', 'document']" | ||||
|             :allow-export-selected-data="false" | ||||
|           /> | ||||
|  | ||||
|           <DxColumn css-class="custom-table-column" :width="50" alignment="center" | ||||
|             :calculate-display-value="(item: any) => dataSub.findIndex((i) => i == item) + 1" data-type="number" | ||||
|             caption="No" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="no_laporan" caption="No Laporan" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="waktu_lapor" caption="Tgl Lapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="waktu_response" caption="Tgl Datang" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="waktu_recovery" caption="Tgl Nyala" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="durasi_response_time" caption="Durasi Response Time" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="durasi_recovery_time" caption="Durasi Recovery Time" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="status_akhir" caption="Status" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="idpel_nometer" caption="IDPEL/NO METER" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="nama_pelapor" caption="Nama Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="alamat_pelapor" caption="Alamat Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="no_telp_pelapor" caption="No Telp Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="200" alignment="center" data-field="keterangan_pelapor" caption="Keterangan Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="nama_posko" caption="Posko" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="media" caption="Sumber Lapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="" caption="Nama Petugas" css-class="custom-table-column" | ||||
|             cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="" caption="Posko Asal" css-class="custom-table-column" | ||||
|             cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="" caption="Posko Tujuan" css-class="custom-table-column" | ||||
|             cell-template="formatText" /> | ||||
|           <DxColumn | ||||
|             css-class="custom-table-column" | ||||
|             :width="50" | ||||
|             alignment="center" | ||||
|             :calculate-display-value="(item: any) => dataSub.findIndex((i) => i == item) + 1" | ||||
|             data-type="number" | ||||
|             caption="No" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="no_laporan" | ||||
|             caption="No Laporan" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="waktu_lapor" | ||||
|             caption="Tgl Lapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="waktu_response" | ||||
|             caption="Tgl Datang" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="waktu_recovery" | ||||
|             caption="Tgl Nyala" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="durasi_response_time" | ||||
|             caption="Durasi Response Time" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="durasi_recovery_time" | ||||
|             caption="Durasi Recovery Time" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="status_akhir" | ||||
|             caption="Status" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="idpel_nometer" | ||||
|             caption="IDPEL/NO METER" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="nama_pelapor" | ||||
|             caption="Nama Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="alamat_pelapor" | ||||
|             caption="Alamat Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="no_telp_pelapor" | ||||
|             caption="No Telp Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="200" | ||||
|             alignment="center" | ||||
|             data-field="keterangan_pelapor" | ||||
|             caption="Keterangan Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="nama_posko" | ||||
|             caption="Posko" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="media" | ||||
|             caption="Sumber Lapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="" | ||||
|             caption="Nama Petugas" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="" | ||||
|             caption="Posko Asal" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="" | ||||
|             caption="Posko Tujuan" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|  | ||||
|           <template #formatText="{ data }"> | ||||
|             <p class="text-left cursor-pointer"> | ||||
| @@ -174,28 +380,46 @@ | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Tgl Datang:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.waktu_response" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.waktu_response" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Tgl Nyala:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.waktu_recovery" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.waktu_recovery" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Durasi Response Time:</h3> | ||||
|           <InputText :readonly="true" :value="parseInt(dataSubSelected?.durasi_response_time) | ||||
|     ? formatWaktu(dataSubSelected?.durasi_response_time) | ||||
|     : '-' | ||||
|     " class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value=" | ||||
|               parseInt(dataSubSelected?.durasi_response_time) | ||||
|                 ? formatWaktu(dataSubSelected?.durasi_response_time) | ||||
|                 : '-' | ||||
|             " | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Durasi Recovery Time:</h3> | ||||
|           <InputText :readonly="true" :value="parseInt(dataSubSelected?.durasi_recovery_time) | ||||
|     ? formatWaktu(dataSubSelected?.durasi_recovery_time) | ||||
|     : '-' | ||||
|     " class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value=" | ||||
|               parseInt(dataSubSelected?.durasi_recovery_time) | ||||
|                 ? formatWaktu(dataSubSelected?.durasi_recovery_time) | ||||
|                 : '-' | ||||
|             " | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
| @@ -215,17 +439,29 @@ | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Alamat Pelapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.alamat_pelapor" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.alamat_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">No Telp Pelapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.no_telp_pelapor" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.no_telp_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Keterangan Pelapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.keterangan_pelapor" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.keterangan_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
| @@ -268,7 +504,6 @@ import { | ||||
|   DxColumn, | ||||
|   DxColumnFixing, | ||||
|   DxExport, | ||||
|   DxLoadPanel, | ||||
|   DxPaging, | ||||
|   DxScrolling, | ||||
|   DxSearchPanel, | ||||
|   | ||||
| @@ -1,50 +1,162 @@ | ||||
| <template> | ||||
|   <Filters @run-report="() => exportToPDF(reportMeta, data, true)" @reset-form="data = []" | ||||
|     @run-search="() => filterData(filters)" :report-button="true" class="mb-4"> | ||||
|   <Filters | ||||
|     @run-report="() => exportToPDF(reportMeta, data, true)" | ||||
|     @reset-form="data = []" | ||||
|     @run-search="() => filterData(filters)" | ||||
|     :report-button="true" | ||||
|     class="mb-4" | ||||
|   > | ||||
|     <Type1 @update:filters="(value) => (filters = value)" /> | ||||
|   </Filters> | ||||
|  | ||||
|   <div id="data"> | ||||
|     <DxDataGrid ref="dataGridRef" :allow-column-reordering="true" class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||
|       :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="onDataSelectionChanged" | ||||
|       @exporting="onExporting" :allow-column-resizing="true" column-resizing-mode="widget" :word-wrap-enabled="true"> | ||||
|     <DxDataGrid | ||||
|       ref="dataGridRef" | ||||
|       :allow-column-reordering="true" | ||||
|       class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" | ||||
|       :show-column-lines="true" | ||||
|       :show-row-lines="false" | ||||
|       :show-borders="true" | ||||
|       :row-alternation-enabled="true" | ||||
|       :hover-state-enabled="true" | ||||
|       @selection-changed="onDataSelectionChanged" | ||||
|       @exporting="onExporting" | ||||
|       :allow-column-resizing="true" | ||||
|       column-resizing-mode="widget" | ||||
|       :word-wrap-enabled="true" | ||||
|     > | ||||
|       <DxGrouping :auto-expand-all="false" expand-mode="rowClick" /> | ||||
|       <DxSelection mode="single" /> | ||||
|       <DxPaging :enabled="false" /> | ||||
|       <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||
|       <!--  --> | ||||
|  | ||||
|       <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|       <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|       <DxExport | ||||
|         :enabled="true" | ||||
|         :formats="['pdf', 'xlsx', 'document']" | ||||
|         :allow-export-selected-data="false" | ||||
|       /> | ||||
|       <DxColumnFixing :enabled="true" /> | ||||
|  | ||||
|       <DxColumn width="200" alignment="center" data-field="nama_ulp" caption="Nama Unit" css-class="custom-table-column" | ||||
|         cell-template="formatText" /> | ||||
|       <DxColumn | ||||
|         v-if="grouping.length > 0" | ||||
|         v-for="(group, index) in grouping" | ||||
|         :width="150" | ||||
|         alignment="center" | ||||
|         :data-field="group.data" | ||||
|         :caption="group.caption" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatText" | ||||
|         :group-index="index" | ||||
|       /> | ||||
|  | ||||
|       <DxColumn | ||||
|         width="200" | ||||
|         alignment="center" | ||||
|         data-field="nama_ulp" | ||||
|         caption="Nama Unit" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatText" | ||||
|       /> | ||||
|       <DxColumn alignment="center" caption="Bulan" css-class="custom-table-column"> | ||||
|         <DxColumn alignment="center" data-field="month1" data-type="number" caption="Januari" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month2" data-type="number" caption="Februari" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month3" data-type="number" caption="Maret" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month4" data-type="number" caption="April" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month5" data-type="number" caption="Mei" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month6" data-type="number" caption="Juni" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month7" data-type="number" caption="Juli" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month8" data-type="number" caption="Agustus" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month9" data-type="number" caption="September" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month10" data-type="number" caption="Oktober" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month11" data-type="number" caption="November" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn alignment="center" data-field="month12" data-type="number" caption="Desember" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month1" | ||||
|           data-type="number" | ||||
|           caption="Januari" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month2" | ||||
|           data-type="number" | ||||
|           caption="Februari" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month3" | ||||
|           data-type="number" | ||||
|           caption="Maret" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month4" | ||||
|           data-type="number" | ||||
|           caption="April" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month5" | ||||
|           data-type="number" | ||||
|           caption="Mei" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month6" | ||||
|           data-type="number" | ||||
|           caption="Juni" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month7" | ||||
|           data-type="number" | ||||
|           caption="Juli" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month8" | ||||
|           data-type="number" | ||||
|           caption="Agustus" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month9" | ||||
|           data-type="number" | ||||
|           caption="September" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month10" | ||||
|           data-type="number" | ||||
|           caption="Oktober" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month11" | ||||
|           data-type="number" | ||||
|           caption="November" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           data-field="month12" | ||||
|           data-type="number" | ||||
|           caption="Desember" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|       </DxColumn> | ||||
|  | ||||
|       <template #formatText="{ data }"> | ||||
| @@ -56,56 +168,165 @@ | ||||
|       <template #formatNumber="{ data }"> | ||||
|         <p class="text-right cursor-pointer" @click="setMonth(data.column.caption)"> | ||||
|           {{ | ||||
|       isNumber(data.text) | ||||
|         ? data.column.caption == '%' | ||||
|           ? formatPercentage(data.text) | ||||
|           : formatNumber(data.text) | ||||
|         : data.text | ||||
|     }} | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|  | ||||
|       <DxSummary> | ||||
|         <DxGroupItem | ||||
|           v-for="i in 12" | ||||
|           :show-in-group-footer="false" | ||||
|           :align-by-column="true" | ||||
|           :column="`month${i}`" | ||||
|           summary-type="sum" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|       </DxSummary> | ||||
|     </DxDataGrid> | ||||
|   </div> | ||||
|  | ||||
|   <DetailDialog :open="dialogDetail" title="Data Detail Cleansing Transaksi TM" @on-close="closedialogDetail" | ||||
|     :full-width="true"> | ||||
|   <DetailDialog | ||||
|     :open="dialogDetail" | ||||
|     title="Data Detail Cleansing Transaksi TM" | ||||
|     @on-close="closedialogDetail" | ||||
|     :full-width="true" | ||||
|   > | ||||
|     <div class="w-full mb-4 lg:w-[70%] lg:float-left"> | ||||
|       <div class="p-4 bg-white rounded-xl lg:mr-4"> | ||||
|         <DxDataGrid :allow-column-reordering="true" class="max-h-[calc(100vh-140px)]" :data-source="dataSub" | ||||
|           :show-column-lines="true" :show-row-lines="false" :show-borders="true" :row-alternation-enabled="true" | ||||
|           :hover-state-enabled="true" @selection-changed="onDataSubSelectionChanged" :column-width="100" | ||||
|           @exporting="onExportingDetail" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||
|         <DxDataGrid | ||||
|           :allow-column-reordering="true" | ||||
|           class="max-h-[calc(100vh-140px)]" | ||||
|           :data-source="dataSub" | ||||
|           :show-column-lines="true" | ||||
|           :show-row-lines="false" | ||||
|           :show-borders="true" | ||||
|           :row-alternation-enabled="true" | ||||
|           :hover-state-enabled="true" | ||||
|           @selection-changed="onDataSubSelectionChanged" | ||||
|           :column-width="100" | ||||
|           @exporting="onExportingDetail" | ||||
|           :allow-column-resizing="true" | ||||
|           column-resizing-mode="widget" | ||||
|         > | ||||
|           <DxSelection mode="single" /> | ||||
|           <DxPaging :page-size="20" :enabled="true" /> | ||||
|           <DxPager :visible="true" :allowed-page-sizes="[20, 50, 100]" display-mode="full" | ||||
|             :show-page-size-selector="true" :show-info="true" :show-navigation-buttons="true" /> | ||||
|           <DxPager | ||||
|             :visible="true" | ||||
|             :allowed-page-sizes="[20, 50, 100]" | ||||
|             display-mode="full" | ||||
|             :show-page-size-selector="true" | ||||
|             :show-info="true" | ||||
|             :show-navigation-buttons="true" | ||||
|           /> | ||||
|           <!--  --> | ||||
|           <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|           <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|           <DxExport | ||||
|             :enabled="true" | ||||
|             :formats="['pdf', 'xlsx', 'document']" | ||||
|             :allow-export-selected-data="false" | ||||
|           /> | ||||
|  | ||||
|           <DxColumn css-class="custom-table-column" :width="50" alignment="center" | ||||
|             :calculate-display-value="(item: any) => dataSub.findIndex((i) => i == item) + 1" data-type="number" | ||||
|             caption="No" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="no_laporan" caption="No Laporan" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="tgl_catat" caption="Tgl Catat" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="tgl_pekerjaan" caption="Tgl Pekerjaan" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="tgl_nyala" caption="Tgl Nyala" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="durasi_pencatatan" caption="Durasi Pencatatan" | ||||
|             :allow-resizing="false" css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="durasi_recovery_time" caption="Durasi Recovery Time" | ||||
|             :allow-resizing="false" css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="keterangan_cleansing" caption="Keterangan Cleansing" | ||||
|             :allow-resizing="false" css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="nama_posko" caption="Posko" :allow-resizing="false" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="tindakan" caption="Tindakan" :allow-resizing="false" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="penyebab" caption="Penyebab" :allow-resizing="false" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn | ||||
|             css-class="custom-table-column" | ||||
|             :width="50" | ||||
|             alignment="center" | ||||
|             :calculate-display-value="(item: any) => dataSub.findIndex((i) => i == item) + 1" | ||||
|             data-type="number" | ||||
|             caption="No" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="no_laporan" | ||||
|             caption="No Laporan" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="tgl_catat" | ||||
|             caption="Tgl Catat" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="tgl_pekerjaan" | ||||
|             caption="Tgl Pekerjaan" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="tgl_nyala" | ||||
|             caption="Tgl Nyala" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="durasi_pencatatan" | ||||
|             caption="Durasi Pencatatan" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="durasi_recovery_time" | ||||
|             caption="Durasi Recovery Time" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="keterangan_cleansing" | ||||
|             caption="Keterangan Cleansing" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="nama_posko" | ||||
|             caption="Posko" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="tindakan" | ||||
|             caption="Tindakan" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="penyebab" | ||||
|             caption="Penyebab" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|  | ||||
|           <template #formatText="{ data }"> | ||||
|             <p class="text-left cursor-pointer"> | ||||
| @@ -152,23 +373,37 @@ | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Durasi Pencatatan:</h3> | ||||
|           <InputText :readonly="true" :value="parseInt(dataSubSelected?.durasi_pencatatan) | ||||
|         ? formatWaktu(dataSubSelected?.durasi_pencatatan) | ||||
|         : '-' | ||||
|       " class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value=" | ||||
|               parseInt(dataSubSelected?.durasi_pencatatan) | ||||
|                 ? formatWaktu(dataSubSelected?.durasi_pencatatan) | ||||
|                 : '-' | ||||
|             " | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Durasi Recovery Time:</h3> | ||||
|           <InputText :readonly="true" :value="parseInt(dataSubSelected?.durasi_recovery_time) | ||||
|         ? formatWaktu(dataSubSelected?.durasi_recovery_time) | ||||
|         : '-' | ||||
|       " class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value=" | ||||
|               parseInt(dataSubSelected?.durasi_recovery_time) | ||||
|                 ? formatWaktu(dataSubSelected?.durasi_recovery_time) | ||||
|                 : '-' | ||||
|             " | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Keterangan CLeansing:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.keterangan_cleansing" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.keterangan_cleansing" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
| @@ -203,15 +438,17 @@ import { | ||||
|   DxColumn, | ||||
|   DxColumnFixing, | ||||
|   DxExport, | ||||
|   DxLoadPanel, | ||||
|   DxGroupItem, | ||||
|   DxGrouping, | ||||
|   DxPaging, | ||||
|   DxScrolling, | ||||
|   DxSearchPanel, | ||||
|   DxSelection | ||||
|   DxSelection, | ||||
|   DxSummary | ||||
| } from 'devextreme-vue/data-grid' | ||||
| import { queries, requestGraphQl } from '@/utils/api/api.graphql' | ||||
| import { formatNumber, formatPercentage, isNumber } from '@/utils/numbers' | ||||
| import { formatWaktu, years } from '@/components/Form/FiltersType/reference' | ||||
| import { formatWaktu } from '@/components/Form/FiltersType/reference' | ||||
| import { apolloClient } from '@/utils/api/api.graphql' | ||||
| import { provideApolloClient } from '@vue/apollo-composable' | ||||
| import { getMonthNumber } from '@/utils/texts' | ||||
| @@ -247,6 +484,24 @@ const reportMeta = ref({ | ||||
|   posko: { id: 0, name: 'Semua Posko' }, | ||||
|   periode: '' | ||||
| }) | ||||
| const grouping = ref<any[]>([ | ||||
|   { | ||||
|     data: '', | ||||
|     caption: 'Semua Unit' | ||||
|   }, | ||||
|   { | ||||
|     data: 'nama_regional', | ||||
|     caption: 'Regional' | ||||
|   }, | ||||
|   { | ||||
|     data: 'nama_uid', | ||||
|     caption: 'UID' | ||||
|   }, | ||||
|   { | ||||
|     data: 'nama_up3', | ||||
|     caption: 'UP3' | ||||
|   } | ||||
| ]) | ||||
|  | ||||
| const setMonth = (month: any) => { | ||||
|   if (month != '') { | ||||
| @@ -266,6 +521,50 @@ const filterData = async (params: any) => { | ||||
|   const dateValue = params.periode.split(' s/d ') | ||||
|   const { posko, uid, up3 } = params | ||||
|  | ||||
|   var groupList: any[] = [ | ||||
|     { | ||||
|       data: '', | ||||
|       caption: 'Semua Unit' | ||||
|     }, | ||||
|     { | ||||
|       data: 'nama_regional', | ||||
|       caption: 'Regional' | ||||
|     }, | ||||
|     { | ||||
|       data: 'nama_uid', | ||||
|       caption: 'UID' | ||||
|     }, | ||||
|     { | ||||
|       data: 'nama_up3', | ||||
|       caption: 'UP3' | ||||
|     } | ||||
|   ] | ||||
|  | ||||
|   if (uid?.id != 0) { | ||||
|     groupList.forEach((item, index) => { | ||||
|       if (item.caption == 'Semua Unit' || item.caption == 'Regional') { | ||||
|         groupList.splice(index, 1) | ||||
|       } | ||||
|     }) | ||||
|  | ||||
|     if (up3?.id != 0) { | ||||
|       groupList.forEach((item, index) => { | ||||
|         if (item.caption == 'UID') { | ||||
|           groupList.splice(index, 1) | ||||
|         } | ||||
|       }) | ||||
|  | ||||
|       if (posko?.id != 0) { | ||||
|         groupList.forEach((item, index) => { | ||||
|           if (item.caption == 'UP3') { | ||||
|             groupList.splice(index, 1) | ||||
|           } | ||||
|         }) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   grouping.value = groupList | ||||
|  | ||||
|   const query = { | ||||
|     dateFrom: dateValue[0] | ||||
|       ? dateValue[0].split('-').reverse().join('-') | ||||
|   | ||||
| @@ -1,60 +1,135 @@ | ||||
| <template> | ||||
|   <Filters @reset-form="data = []" @run-report="() => exportToPDF(reportMeta, data, true)" | ||||
|     @run-search="() => filterData(filters)" :report-button="true" class="mb-4"> | ||||
|   <Filters | ||||
|     @reset-form="data = []" | ||||
|     @run-report="() => exportToPDF(reportMeta, data, true)" | ||||
|     @run-search="() => filterData(filters)" | ||||
|     :report-button="true" | ||||
|     class="mb-4" | ||||
|   > | ||||
|     <Type1 @update:filters="(value) => (filters = value)" /> | ||||
|   </Filters> | ||||
|  | ||||
|   <div id="data"> | ||||
|     <DxDataGrid ref="dataGridRef" :allow-column-reordering="true" class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||
|       :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="onDataSelectionChanged" | ||||
|       @exporting="onExporting" :allow-column-resizing="true" column-resizing-mode="widget" :word-wrap-enabled="true"> | ||||
|     <DxDataGrid | ||||
|       ref="dataGridRef" | ||||
|       :allow-column-reordering="true" | ||||
|       class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" | ||||
|       :show-column-lines="true" | ||||
|       :show-row-lines="false" | ||||
|       :show-borders="true" | ||||
|       :row-alternation-enabled="true" | ||||
|       :hover-state-enabled="true" | ||||
|       @selection-changed="onDataSelectionChanged" | ||||
|       @exporting="onExporting" | ||||
|       :allow-column-resizing="true" | ||||
|       column-resizing-mode="widget" | ||||
|       :word-wrap-enabled="true" | ||||
|     > | ||||
|       <DxSelection mode="single" /> | ||||
|       <DxPaging :enabled="false" /> | ||||
|       <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||
|       <!--  --> | ||||
|  | ||||
|       <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|       <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|       <DxExport | ||||
|         :enabled="true" | ||||
|         :formats="['pdf', 'xlsx', 'document']" | ||||
|         :allow-export-selected-data="false" | ||||
|       /> | ||||
|       <DxColumnFixing :enabled="true" /> | ||||
|  | ||||
|       <DxColumn :width="50" alignment="center" caption="NO" css-class="custom-table-column" rowspan="4" colspan="2"> | ||||
|         <DxColumn :width="50" alignment="center" | ||||
|           :calculate-display-value="(item: any) => data.findIndex((i) => i == item) + 1" caption="a" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|       <DxColumn | ||||
|         :width="50" | ||||
|         alignment="center" | ||||
|         caption="NO" | ||||
|         css-class="custom-table-column" | ||||
|         rowspan="4" | ||||
|         colspan="2" | ||||
|       > | ||||
|         <DxColumn | ||||
|           :width="50" | ||||
|           alignment="center" | ||||
|           :calculate-display-value="(item: any) => data.findIndex((i) => i == item) + 1" | ||||
|           caption="a" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|       </DxColumn> | ||||
|       <DxColumn :width="150" alignment="center" caption="Nama Regu" css-class="custom-table-column"> | ||||
|         <DxColumn :width="150" alignment="center" data-field="nama_regu" caption="b" css-class="custom-table-column" | ||||
|           cell-template="formatText" /> | ||||
|         <DxColumn | ||||
|           :width="150" | ||||
|           alignment="center" | ||||
|           data-field="nama_regu" | ||||
|           caption="b" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatText" | ||||
|         /> | ||||
|       </DxColumn> | ||||
|       <DxColumn :width="150" alignment="center" caption="Kode Regu" css-class="custom-table-column"> | ||||
|         <DxColumn :width="150" alignment="center" data-field="kode_regu" caption="c" css-class="custom-table-column" | ||||
|           cell-template="formatText" /> | ||||
|         <DxColumn | ||||
|           :width="150" | ||||
|           alignment="center" | ||||
|           data-field="kode_regu" | ||||
|           caption="c" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatText" | ||||
|         /> | ||||
|       </DxColumn> | ||||
|  | ||||
|       <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|         <DxColumn alignment="center" caption="Total" css-class="custom-table-column"> | ||||
|           <DxColumn :width="150" alignment="center" data-field="total" caption="d=(e+g)" css-class="custom-table-column" | ||||
|             cell-template="formatNumber" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total" | ||||
|             caption="d=(e+g)" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Sudah Selesai" css-class="custom-table-column"> | ||||
|           <DxColumn alignment="center" caption="Jml" css-class="custom-table-column"> | ||||
|             <DxColumn :width="150" alignment="center" data-field="total_selesai" caption="e" | ||||
|               css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|             <DxColumn | ||||
|               :width="150" | ||||
|               alignment="center" | ||||
|               data-field="total_selesai" | ||||
|               caption="e" | ||||
|               css-class="custom-table-column" | ||||
|               cell-template="formatNumber" | ||||
|             /> | ||||
|           </DxColumn> | ||||
|           <DxColumn alignment="center" caption="%" css-class="custom-table-column"> | ||||
|             <DxColumn :width="150" alignment="center" data-field="persen_selesai" caption="f=(e/d)*100" | ||||
|               css-class="custom-table-column" cell-template="formatPercentage" /> | ||||
|             <DxColumn | ||||
|               :width="150" | ||||
|               alignment="center" | ||||
|               data-field="persen_selesai" | ||||
|               caption="f=(e/d)*100" | ||||
|               css-class="custom-table-column" | ||||
|               cell-template="formatPercentage" | ||||
|             /> | ||||
|           </DxColumn> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Belum Selesai" css-class="custom-table-column"> | ||||
|           <DxColumn alignment="center" caption="Jml" css-class="custom-table-column"> | ||||
|             <DxColumn :width="150" alignment="center" data-field="total_inproses" caption="g" | ||||
|               css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|             <DxColumn | ||||
|               :width="150" | ||||
|               alignment="center" | ||||
|               data-field="total_inproses" | ||||
|               caption="g" | ||||
|               css-class="custom-table-column" | ||||
|               cell-template="formatNumber" | ||||
|             /> | ||||
|           </DxColumn> | ||||
|           <DxColumn alignment="center" caption="%" css-class="custom-table-column"> | ||||
|             <DxColumn :width="150" alignment="center" data-field="persen_inproses" caption="h=(g/d)*100" | ||||
|               css-class="custom-table-column" cell-template="formatPercentage" /> | ||||
|             <DxColumn | ||||
|               :width="150" | ||||
|               alignment="center" | ||||
|               data-field="persen_inproses" | ||||
|               caption="h=(g/d)*100" | ||||
|               css-class="custom-table-column" | ||||
|               cell-template="formatPercentage" | ||||
|             /> | ||||
|           </DxColumn> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
| @@ -64,23 +139,47 @@ | ||||
|           <DxColumn alignment="center" caption="Non Marking" css-class="custom-table-column"> | ||||
|             <DxColumn alignment="center" caption="Total" css-class="custom-table-column"> | ||||
|               <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="total_mobile_nonmarking" caption="i" | ||||
|                   css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="total_mobile_nonmarking" | ||||
|                   caption="i" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|               <DxColumn alignment="center" caption="%" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="" caption="j=(i/d)*100" | ||||
|                   css-class="custom-table-column" cell-template="formatPercentage" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="" | ||||
|                   caption="j=(i/d)*100" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatPercentage" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|             </DxColumn> | ||||
|  | ||||
|             <DxColumn alignment="center" caption="Waktu Rata-Rata" css-class="custom-table-column"> | ||||
|               <DxColumn alignment="center" caption="Response" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="avg_durasi_response_time_mobile_nonmarking" | ||||
|                   caption="k" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="avg_durasi_response_time_mobile_nonmarking" | ||||
|                   caption="k" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|               <DxColumn alignment="center" caption="Recovery" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="avg_durasi_recovery_time_mobile_nonmarking" | ||||
|                   caption="l" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="avg_durasi_recovery_time_mobile_nonmarking" | ||||
|                   caption="l" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|             </DxColumn> | ||||
|           </DxColumn> | ||||
| @@ -88,23 +187,47 @@ | ||||
|           <DxColumn alignment="center" caption="Marking" css-class="custom-table-column"> | ||||
|             <DxColumn alignment="center" caption="Total" css-class="custom-table-column"> | ||||
|               <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="total_mobile_marking" caption="m" | ||||
|                   css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="total_mobile_marking" | ||||
|                   caption="m" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|               <DxColumn alignment="center" caption="%" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="" caption="n=(m/d)*100" | ||||
|                   css-class="custom-table-column" cell-template="formatPercentage" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="" | ||||
|                   caption="n=(m/d)*100" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatPercentage" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|             </DxColumn> | ||||
|  | ||||
|             <DxColumn alignment="center" caption="Waktu Rata-Rata" css-class="custom-table-column"> | ||||
|               <DxColumn alignment="center" caption="Response" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="avg_durasi_response_time_mobile_marking" | ||||
|                   caption="o" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="avg_durasi_response_time_mobile_marking" | ||||
|                   caption="o" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|               <DxColumn alignment="center" caption="Recovery" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="avg_durasi_recovery_time_mobile_marking" | ||||
|                   caption="p" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="avg_durasi_recovery_time_mobile_marking" | ||||
|                   caption="p" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|             </DxColumn> | ||||
|           </DxColumn> | ||||
| @@ -114,23 +237,47 @@ | ||||
|           <DxColumn alignment="center" caption="Non Marking" css-class="custom-table-column"> | ||||
|             <DxColumn alignment="center" caption="Total" css-class="custom-table-column"> | ||||
|               <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="total_nonmobile_nonmarking" caption="q" | ||||
|                   css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="total_nonmobile_nonmarking" | ||||
|                   caption="q" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|               <DxColumn alignment="center" caption="%" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="" caption="r=(q/d)*100" | ||||
|                   css-class="custom-table-column" cell-template="formatPercentage" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="" | ||||
|                   caption="r=(q/d)*100" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatPercentage" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|             </DxColumn> | ||||
|  | ||||
|             <DxColumn alignment="center" caption="Waktu Rata-Rata" css-class="custom-table-column"> | ||||
|               <DxColumn alignment="center" caption="Response" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="avg_durasi_response_time_nonmobile_nonmarking" | ||||
|                   caption="s" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="avg_durasi_response_time_nonmobile_nonmarking" | ||||
|                   caption="s" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|               <DxColumn alignment="center" caption="Recovery" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="avg_durasi_recovery_time_nonmobile_nonmarking" | ||||
|                   caption="t" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="avg_durasi_recovery_time_nonmobile_nonmarking" | ||||
|                   caption="t" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|             </DxColumn> | ||||
|           </DxColumn> | ||||
| @@ -138,23 +285,47 @@ | ||||
|           <DxColumn alignment="center" caption="Marking" css-class="custom-table-column"> | ||||
|             <DxColumn alignment="center" caption="Total" css-class="custom-table-column"> | ||||
|               <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="total_nonmobile_marking" caption="u" | ||||
|                   css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="total_nonmobile_marking" | ||||
|                   caption="u" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|               <DxColumn alignment="center" caption="%" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="" caption="v=(u/d)*100" | ||||
|                   css-class="custom-table-column" cell-template="formatPercentage" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="" | ||||
|                   caption="v=(u/d)*100" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatPercentage" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|             </DxColumn> | ||||
|  | ||||
|             <DxColumn alignment="center" caption="Waktu Rata-Rata" css-class="custom-table-column"> | ||||
|               <DxColumn alignment="center" caption="Response" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="avg_durasi_response_time_nonmobile_marking" | ||||
|                   caption="w" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="avg_durasi_response_time_nonmobile_marking" | ||||
|                   caption="w" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|               <DxColumn alignment="center" caption="Recovery" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="150" alignment="center" data-field="avg_durasi_recovery_time_nonmobile_marking" | ||||
|                   caption="x" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|                 <DxColumn | ||||
|                   :width="150" | ||||
|                   alignment="center" | ||||
|                   data-field="avg_durasi_recovery_time_nonmobile_marking" | ||||
|                   caption="x" | ||||
|                   css-class="custom-table-column" | ||||
|                   cell-template="formatNumber" | ||||
|                 /> | ||||
|               </DxColumn> | ||||
|             </DxColumn> | ||||
|           </DxColumn> | ||||
| @@ -170,12 +341,12 @@ | ||||
|       <template #formatNumber="{ data }"> | ||||
|         <p class="text-right cursor-pointer"> | ||||
|           {{ | ||||
|       isNumber(data.text) | ||||
|         ? data.column.caption == '%' | ||||
|           ? formatPercentage(data.text) | ||||
|           : formatNumber(data.text) | ||||
|         : data.text | ||||
|     }} | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|  | ||||
| @@ -192,74 +363,242 @@ | ||||
|       </template> | ||||
|  | ||||
|       <DxSummary> | ||||
|         <DxTotalItem display-format="TOTAL" show-in-column="nama_regu" css-class="text-white !text-right" /> | ||||
|         <DxTotalItem column="total" summary-type="sum" display-format="{0}" css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="total_selesai" summary-type="sum" display-format="{0}" css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="total_mobile_marking" summary-type="sum" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="total_mobile_nonmarking" summary-type="sum" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="total_nonmobile_marking" summary-type="sum" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="total_nonmobile_nonmarking" summary-type="sum" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem | ||||
|           display-format="TOTAL" | ||||
|           show-in-column="nama_regu" | ||||
|           css-class="text-white !text-left" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_selesai" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_inproses" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_mobile_marking" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_mobile_nonmarking" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_nonmobile_marking" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_nonmobile_nonmarking" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|       </DxSummary> | ||||
|     </DxDataGrid> | ||||
|   </div> | ||||
|  | ||||
|   <DetailDialog :open="dialogDetail" title="Detail Rekapitulasi Gangguan Diselesaikan Mobile APKT" | ||||
|     @on-close="closeDialog" :full-width="true"> | ||||
|   <DetailDialog | ||||
|     :open="dialogDetail" | ||||
|     title="Detail Rekapitulasi Gangguan Diselesaikan Mobile APKT" | ||||
|     @on-close="closeDialog" | ||||
|     :full-width="true" | ||||
|   > | ||||
|     <div class="w-full mb-4 lg:w-[70%] lg:float-left"> | ||||
|       <div class="p-4 bg-white rounded-xl lg:mr-4"> | ||||
|         <DxDataGrid :allow-column-reordering="true" class="max-h-[calc(100vh-140px)]" :data-source="dataSub" | ||||
|           :show-column-lines="true" :show-row-lines="false" :show-borders="true" :row-alternation-enabled="true" | ||||
|           :hover-state-enabled="true" @selection-changed="onDataSubSelectionChanged" :column-width="100" | ||||
|           @exporting="onExportingDetail" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||
|         <DxDataGrid | ||||
|           :allow-column-reordering="true" | ||||
|           class="max-h-[calc(100vh-140px)]" | ||||
|           :data-source="dataSub" | ||||
|           :show-column-lines="true" | ||||
|           :show-row-lines="false" | ||||
|           :show-borders="true" | ||||
|           :row-alternation-enabled="true" | ||||
|           :hover-state-enabled="true" | ||||
|           @selection-changed="onDataSubSelectionChanged" | ||||
|           :column-width="100" | ||||
|           @exporting="onExportingDetail" | ||||
|           :allow-column-resizing="true" | ||||
|           column-resizing-mode="widget" | ||||
|         > | ||||
|           <DxSelection mode="single" /> | ||||
|           <DxPaging :page-size="20" :enabled="true" /> | ||||
|           <DxPager :visible="true" :allowed-page-sizes="[20, 50, 100]" display-mode="full" | ||||
|             :show-page-size-selector="true" :show-info="true" :show-navigation-buttons="true" /> | ||||
|           <DxPager | ||||
|             :visible="true" | ||||
|             :allowed-page-sizes="[20, 50, 100]" | ||||
|             display-mode="full" | ||||
|             :show-page-size-selector="true" | ||||
|             :show-info="true" | ||||
|             :show-navigation-buttons="true" | ||||
|           /> | ||||
|           <!--  --> | ||||
|           <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|           <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|           <DxExport | ||||
|             :enabled="true" | ||||
|             :formats="['pdf', 'xlsx', 'document']" | ||||
|             :allow-export-selected-data="false" | ||||
|           /> | ||||
|  | ||||
|           <DxColumn css-class="custom-table-column" :width="50" alignment="center" | ||||
|             :calculate-display-value="(item: any) => dataSub.findIndex((i) => i == item) + 1" data-type="number" | ||||
|             caption="No" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="no_laporan" caption="No Laporan" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="waktu_lapor" caption="Tgl Lapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="waktu_response" caption="Tgl Datang" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="waktu_recovery" caption="Tgl Nyala" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="durasi_response_time" caption="Durasi Response Time" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="durasi_recovery_time" caption="Durasi Recovery Time" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="status_akhir" caption="Status" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="referensi_marking" caption="Referensi Marking" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="idpel_nometer" caption="IDPEL/NO METER" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="nama_pelapor" caption="Nama Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="alamat_pelapor" caption="Alamat Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="no_telp_pelapor" caption="No Telp Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="200" alignment="center" data-field="keterangan_pelapor" caption="Keterangan Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="nama_posko" caption="Posko" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="tindakan" caption="Tidakan" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="penyebab" caption="Penyebab" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn | ||||
|             css-class="custom-table-column" | ||||
|             :width="50" | ||||
|             alignment="center" | ||||
|             :calculate-display-value="(item: any) => dataSub.findIndex((i) => i == item) + 1" | ||||
|             data-type="number" | ||||
|             caption="No" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="no_laporan" | ||||
|             caption="No Laporan" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="waktu_lapor" | ||||
|             caption="Tgl Lapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="waktu_response" | ||||
|             caption="Tgl Datang" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="waktu_recovery" | ||||
|             caption="Tgl Nyala" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="durasi_response_time" | ||||
|             caption="Durasi Response Time" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="durasi_recovery_time" | ||||
|             caption="Durasi Recovery Time" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="status_akhir" | ||||
|             caption="Status" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="referensi_marking" | ||||
|             caption="Referensi Marking" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="idpel_nometer" | ||||
|             caption="IDPEL/NO METER" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="nama_pelapor" | ||||
|             caption="Nama Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="alamat_pelapor" | ||||
|             caption="Alamat Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="no_telp_pelapor" | ||||
|             caption="No Telp Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="200" | ||||
|             alignment="center" | ||||
|             data-field="keterangan_pelapor" | ||||
|             caption="Keterangan Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="nama_posko" | ||||
|             caption="Posko" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="tindakan" | ||||
|             caption="Tidakan" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="penyebab" | ||||
|             caption="Penyebab" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|  | ||||
|           <template #formatText="{ data }"> | ||||
|             <p class="text-left cursor-pointer"> | ||||
| @@ -295,28 +634,46 @@ | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Tgl Datang:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.waktu_response" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.waktu_response" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Tgl Nyala:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.waktu_recovery" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.waktu_recovery" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Durasi Response Time:</h3> | ||||
|           <InputText :readonly="true" :value="parseInt(dataSubSelected?.durasi_response_time) | ||||
|       ? formatWaktu(dataSubSelected?.durasi_response_time) | ||||
|       : '-' | ||||
|       " class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value=" | ||||
|               parseInt(dataSubSelected?.durasi_response_time) | ||||
|                 ? formatWaktu(dataSubSelected?.durasi_response_time) | ||||
|                 : '-' | ||||
|             " | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Durasi Recovery Time:</h3> | ||||
|           <InputText :readonly="true" :value="parseInt(dataSubSelected?.durasi_recovery_time) | ||||
|       ? formatWaktu(dataSubSelected?.durasi_recovery_time) | ||||
|       : '-' | ||||
|       " class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value=" | ||||
|               parseInt(dataSubSelected?.durasi_recovery_time) | ||||
|                 ? formatWaktu(dataSubSelected?.durasi_recovery_time) | ||||
|                 : '-' | ||||
|             " | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
| @@ -326,7 +683,11 @@ | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Referensi Marking:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.referensi_marking" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.referensi_marking" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
| @@ -341,17 +702,29 @@ | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Alamat Pelapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.alamat_pelapor" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.alamat_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">No Telp Pelapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.no_telp_pelapor" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.no_telp_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Keterangan Pelapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.keterangan_pelapor" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.keterangan_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
| @@ -384,7 +757,6 @@ import { | ||||
|   DxColumn, | ||||
|   DxColumnFixing, | ||||
|   DxExport, | ||||
|   DxLoadPanel, | ||||
|   DxPager, | ||||
|   DxPaging, | ||||
|   DxScrolling, | ||||
|   | ||||
| @@ -1,123 +1,558 @@ | ||||
| <!-- Rekapitulasi Gangguan/Jenis Gangguan --> | ||||
|  | ||||
| <template> | ||||
|   <Filters :report-button="true" @reset-form="data = []" @run-search="() => filterData(filters)" | ||||
|     @run-report="() => exportToPDF(reportMeta, data, true)" class="mb-4"> | ||||
|   <Filters | ||||
|     :report-button="true" | ||||
|     @reset-form="data = []" | ||||
|     @run-search="() => filterData(filters)" | ||||
|     @run-report="() => exportToPDF(reportMeta, data, true)" | ||||
|     class="mb-4" | ||||
|   > | ||||
|     <Type1 @update:filters="(value) => (filters = value)" /> | ||||
|   </Filters> | ||||
|  | ||||
|   <div id="data"> | ||||
|     <DxDataGrid ref="dataGridRef" :allow-column-reordering="true" class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||
|       :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="onDataSelectionChanged" | ||||
|       @exporting="onExporting" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||
|     <DxDataGrid | ||||
|       ref="dataGridRef" | ||||
|       :allow-column-reordering="true" | ||||
|       class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" | ||||
|       :show-column-lines="true" | ||||
|       :show-row-lines="false" | ||||
|       :show-borders="true" | ||||
|       :row-alternation-enabled="true" | ||||
|       :hover-state-enabled="true" | ||||
|       @selection-changed="onDataSelectionChanged" | ||||
|       @exporting="onExporting" | ||||
|       :allow-column-resizing="true" | ||||
|       column-resizing-mode="widget" | ||||
|     > | ||||
|       <DxSelection mode="single" /> | ||||
|       <DxPaging :enabled="false" /> | ||||
|       <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||
|       <!--  --> | ||||
|       <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|       <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|       <DxExport | ||||
|         :enabled="true" | ||||
|         :formats="['pdf', 'xlsx', 'document']" | ||||
|         :allow-export-selected-data="false" | ||||
|       /> | ||||
|       <DxColumnFixing :enabled="true" /> | ||||
|       <DxGrouping :auto-expand-all="true" :context-menu-enabled="true" expand-mode="rowClick" /> | ||||
|  | ||||
|       <DxColumn :width="60" alignment="center" data-field="no" caption="NO" css-class="custom-table-column" | ||||
|         cell-template="formatNumber" /> | ||||
|       <DxColumn :width="120" alignment="center" data-field="kode" caption="Kode" css-class="custom-table-column" | ||||
|         cell-template="formatText" /> | ||||
|       <DxColumn :width="120" alignment="center" data-field="sub_kelompok" css-class="custom-table-column" | ||||
|         :group-index="0" caption="" cell-template="formatText" :calculate-group-value="(rowData: any) => `${rowData.sub_kelompok} (${rowData.nama_sub_kelompok})` | ||||
|     " /> | ||||
|       <DxColumn :width="250" alignment="center" data-field="tipe_permasalahan" caption="Jenis Gangguan" | ||||
|         css-class="custom-table-column" cell-template="formatText" /> | ||||
|       <DxColumn | ||||
|         :width="60" | ||||
|         alignment="center" | ||||
|         data-field="no" | ||||
|         caption="NO" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatNumber" | ||||
|       /> | ||||
|       <DxColumn | ||||
|         :width="120" | ||||
|         alignment="center" | ||||
|         data-field="kode" | ||||
|         caption="Kode" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatText" | ||||
|       /> | ||||
|       <DxColumn | ||||
|         :width="120" | ||||
|         alignment="center" | ||||
|         data-field="sub_kelompok" | ||||
|         css-class="custom-table-column" | ||||
|         :group-index="0" | ||||
|         caption="" | ||||
|         cell-template="formatText" | ||||
|         :calculate-group-value=" | ||||
|           (rowData: any) => `${rowData.sub_kelompok} (${rowData.nama_sub_kelompok})` | ||||
|         " | ||||
|       /> | ||||
|       <DxColumn | ||||
|         :width="250" | ||||
|         alignment="center" | ||||
|         data-field="tipe_permasalahan" | ||||
|         caption="Jenis Gangguan" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatText" | ||||
|       /> | ||||
|       <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|         <DxColumn :width="120" alignment="center" data-field="total" data-type="number" caption="Total" | ||||
|           css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|         <DxColumn | ||||
|           :width="120" | ||||
|           alignment="center" | ||||
|           data-field="total" | ||||
|           data-type="number" | ||||
|           caption="Total" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn alignment="center" caption="Sudah Selesai" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_selesai" data-type="number" caption="Jml" | ||||
|             css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="70" alignment="center" data-field="persen_selesai" data-type="number" caption="%" | ||||
|             css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_selesai" | ||||
|             data-type="number" | ||||
|             caption="Jml" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="70" | ||||
|             alignment="center" | ||||
|             data-field="persen_selesai" | ||||
|             data-type="number" | ||||
|             caption="%" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Belum Selesai" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_inproses" data-type="number" caption="Jml" | ||||
|             css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="70" alignment="center" data-field="persen_inproses" data-type="number" caption="%" | ||||
|             css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_inproses" | ||||
|             data-type="number" | ||||
|             caption="Jml" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="70" | ||||
|             alignment="center" | ||||
|             data-field="persen_inproses" | ||||
|             data-type="number" | ||||
|             caption="%" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|       <DxColumn alignment="center" caption="Response Time" css-class="custom-table-column"> | ||||
|         <DxColumn alignment="center" caption="Menit" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_durasi_response" data-type="number" | ||||
|             caption="Total" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="avg_durasi_response" data-type="number" | ||||
|             caption="Rata-Rata" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="max_durasi_response" data-type="number" caption="Max" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="min_durasi_response" data-type="number" caption="Min" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Total" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :visible="false" | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="count_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Total" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|             :calculate-cell-value=" | ||||
|               (rowData: any) => rowData.total_durasi_response * rowData.avg_durasi_response | ||||
|             " | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="avg_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Rata-Rata" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="max_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Max" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="min_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Min" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_diatas_sla_response" data-type="number" | ||||
|             caption=">SLA" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_dibawah_sla_response" data-type="number" | ||||
|             caption="≤SLA" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_diatas_sla_response" | ||||
|             data-type="number" | ||||
|             caption=">SLA" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_dibawah_sla_response" | ||||
|             data-type="number" | ||||
|             caption="≤SLA" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|       <DxColumn alignment="center" caption="Recovery Time" css-class="custom-table-column"> | ||||
|         <DxColumn alignment="center" caption="Menit" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_durasi_recovery" data-type="number" | ||||
|             caption="Total" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="avg_durasi_recovery" data-type="number" | ||||
|             caption="Rata-Rata" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="max_durasi_recovery" data-type="number" caption="Max" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="min_durasi_recovery" data-type="number" caption="Min" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Total" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :visible="false" | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="count_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Total" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|             :calculate-cell-value=" | ||||
|               (rowData: any) => rowData.total_durasi_recovery * rowData.avg_durasi_recovery | ||||
|             " | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="avg_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Rata-Rata" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="max_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Max" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="min_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Min" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_diatas_sla_recovery" data-type="number" | ||||
|             caption=">SLA" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_dibawah_sla_recovery" data-type="number" | ||||
|             caption="≤SLA" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_diatas_sla_recovery" | ||||
|             data-type="number" | ||||
|             caption=">SLA" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_dibawah_sla_recovery" | ||||
|             data-type="number" | ||||
|             caption="≤SLA" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|  | ||||
|       <DxSummary :calculate-custom-summary="calculateCustomSummary"> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="no" display-format="Total" css-class="!text-left" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="total" summary-type="sum" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="total_selesai" summary-type="sum" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="persen_selesai" summary-type="avg" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatPercentage(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="total_inproses" summary-type="sum" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="persen_inproses" summary-type="avg" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatPercentage(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="total_durasi_response" summary-type="sum" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="avg_durasi_response" summary-type="avg" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="max_durasi_response" summary-type="max" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="min_durasi_response" summary-type="min" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="total_diatas_sla_response" summary-type="sum" | ||||
|           display-format="{0}" css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="total_dibawah_sla_response" summary-type="sum" | ||||
|           display-format="{0}" css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="total_durasi_recovery" summary-type="sum" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="avg_durasi_recovery" summary-type="avg" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="max_durasi_recovery" summary-type="max" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="min_durasi_recovery" summary-type="min" display-format="{0}" | ||||
|           css-class="!text-right" :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="total_diatas_sla_recovery" summary-type="sum" | ||||
|           display-format="{0}" css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem :show-in-group-footer="true" column="total_dibawah_sla_recovery" summary-type="sum" | ||||
|           display-format="{0}" css-class="!text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="kode" | ||||
|           display-format="Total" | ||||
|           css-class="!text-left" | ||||
|         /> | ||||
|         <DxTotalItem column="kode" display-format="Total" css-class="!text-left text-white" /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total" | ||||
|           name="total" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_selesai" | ||||
|           name="total_selesai" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="persen_selesai" | ||||
|           name="persen_selesai" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_inproses" | ||||
|           name="total_inproses" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="persen_inproses" | ||||
|           name="persen_inproses" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_durasi_response" | ||||
|           name="total_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="count_durasi_response" | ||||
|           name="count_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="avg_durasi_response" | ||||
|           name="avg_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="max_durasi_response" | ||||
|           summary-type="max" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="min_durasi_response" | ||||
|           summary-type="min" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_diatas_sla_response" | ||||
|           summary-type="sum" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_dibawah_sla_response" | ||||
|           summary-type="sum" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_durasi_recovery" | ||||
|           name="total_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="count_durasi_recovery" | ||||
|           name="count_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="avg_durasi_recovery" | ||||
|           name="avg_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="max_durasi_recovery" | ||||
|           summary-type="max" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="min_durasi_recovery" | ||||
|           summary-type="min" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_diatas_sla_recovery" | ||||
|           summary-type="sum" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_dibawah_sla_recovery" | ||||
|           summary-type="sum" | ||||
|           css-class="!text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|  | ||||
|         <DxTotalItem | ||||
|           column="total" | ||||
|           name="total" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_selesai" | ||||
|           name="total_selesai" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="persen_selesai" | ||||
|           name="persen_selesai" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_inproses" | ||||
|           name="total_inproses" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|  | ||||
|         <DxTotalItem | ||||
|           column="persen_inproses" | ||||
|           name="persen_inproses" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_durasi_response" | ||||
|           name="total_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="count_durasi_response" | ||||
|           name="count_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="avg_durasi_response" | ||||
|           name="avg_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="max_durasi_response" | ||||
|           summary-type="max" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="min_durasi_response" | ||||
|           summary-type="min" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_diatas_sla_response" | ||||
|           summary-type="sum" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_dibawah_sla_response" | ||||
|           summary-type="sum" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_durasi_recovery" | ||||
|           name="total_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="count_durasi_recovery" | ||||
|           name="count_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="avg_durasi_recovery" | ||||
|           name="avg_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="max_durasi_recovery" | ||||
|           summary-type="max" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="min_durasi_recovery" | ||||
|           summary-type="min" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => (parseInt(e.value) ? formatWaktu(e.value) : '-')" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_diatas_sla_recovery" | ||||
|           summary-type="sum" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_dibawah_sla_recovery" | ||||
|           summary-type="sum" | ||||
|           css-class="!text-right text-white" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|       </DxSummary> | ||||
|  | ||||
|       <template #formatText="{ data }"> | ||||
| @@ -129,12 +564,12 @@ | ||||
|       <template #formatNumber="{ data }"> | ||||
|         <p class="text-right cursor-pointer"> | ||||
|           {{ | ||||
|     isNumber(data.text) | ||||
|       ? data.column.caption == '%' | ||||
|         ? formatPercentage(data.text) | ||||
|         : formatNumber(data.text) | ||||
|       : data.text | ||||
|   }} | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|  | ||||
| @@ -153,25 +588,28 @@ | ||||
| import Filters from '@/components/Form/Filters.vue' | ||||
| import Type1 from '@/components/Form/FiltersType/Type1.vue' | ||||
| import { formatWaktu } from '@/components/Form/FiltersType/reference' | ||||
| import { onMounted, ref, watch } from 'vue' | ||||
| import { onMounted, ref } from 'vue' | ||||
| import { DxDataGrid } from 'devextreme-vue' | ||||
| import { | ||||
|   DxColumn, | ||||
|   DxColumnFixing, | ||||
|   DxExport, | ||||
|   DxGroupItem, | ||||
|   DxGroupPanel, | ||||
|   DxGrouping, | ||||
|   DxLoadPanel, | ||||
|   DxPaging, | ||||
|   DxScrolling, | ||||
|   DxSearchPanel, | ||||
|   DxSelection, | ||||
|   DxSummary | ||||
|   DxSummary, | ||||
|   DxTotalItem | ||||
| } from 'devextreme-vue/data-grid' | ||||
| import { queries, requestGraphQl } from '@/utils/api/api.graphql' | ||||
| import { formatNumber, formatPercentage, isNumber } from '@/utils/numbers' | ||||
| import { exportToPDF, exportToXLSX, exportToDOCX } from '@/report/Gangguan/Rekap/RGangguan_JenisGangguan' | ||||
| import { | ||||
|   exportToPDF, | ||||
|   exportToXLSX, | ||||
|   exportToDOCX | ||||
| } from '@/report/Gangguan/Rekap/RGangguan_JenisGangguan' | ||||
| import { apolloClient } from '@/utils/api/api.graphql' | ||||
| import { provideApolloClient } from '@vue/apollo-composable' | ||||
| import BufferDialog from '@/components/Dialogs/BufferDialog.vue' | ||||
| @@ -312,12 +750,10 @@ const filterData = async (params: any) => { | ||||
| let total = 0 | ||||
| let total_selesai = 0 | ||||
| let total_inproses = 0 | ||||
| let count_durasi_dispatch = 0 | ||||
| let total_durasi_dispatch = 0 | ||||
| let count_durasi_response = 0 | ||||
| let total_durasi_response = 0 | ||||
| let count_durasi_recovery = 0 | ||||
| let total_durasi_recovery = 0 | ||||
| let count_durasi_recovery = 0 | ||||
| const calculateCustomSummary = (options: any) => { | ||||
|   if (options.name === 'total') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
| @@ -351,6 +787,74 @@ const calculateCustomSummary = (options: any) => { | ||||
|       options.totalValue = (total_selesai / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'persen_inproses') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total = 0 | ||||
|       total_inproses = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = (total_inproses / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'persen_selesai') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total = 0 | ||||
|       total_selesai = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = (total_selesai / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_durasi_response') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_durasi_response += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'count_durasi_response') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       count_durasi_response += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'avg_durasi_response') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total_durasi_response = 0 | ||||
|       count_durasi_response = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_response / total_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'count_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       count_durasi_recovery += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_recovery | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_durasi_recovery += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_durasi_recovery | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'avg_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       count_durasi_recovery = 0 | ||||
|       total_durasi_recovery = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_recovery / total_durasi_recovery | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| const filters = ref() | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -131,6 +131,20 @@ | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :visible="false" | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="count_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Jumlah Response" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|             :calculate-cell-value=" | ||||
|               (rowData: any) => rowData.avg_durasi_response * rowData.total_durasi_response | ||||
|             " | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
| @@ -191,6 +205,20 @@ | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :visible="false" | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="count_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Jumlah Recovery" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|             :calculate-cell-value=" | ||||
|               (rowData: any) => rowData.avg_durasi_recovery * rowData.total_durasi_recovery | ||||
|             " | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
| @@ -241,59 +269,74 @@ | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|  | ||||
|       <DxSummary> | ||||
|       <DxSummary :calculate-custom-summary="calculateCustomSummary"> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="no" | ||||
|           column="nama_posko" | ||||
|           display-format="Total" | ||||
|           css-class="!text-left" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total" | ||||
|           summary-type="sum" | ||||
|           name="total" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_selesai" | ||||
|           summary-type="sum" | ||||
|           name="total_selesai" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="persen_selesai" | ||||
|           summary-type="avg" | ||||
|           name="persen_selesai" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_inproses" | ||||
|           summary-type="sum" | ||||
|           name="total_inproses" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="persen_inproses" | ||||
|           summary-type="avg" | ||||
|           name="persen_inproses" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_durasi_response" | ||||
|           summary-type="sum" | ||||
|           name="total_durasi_response" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="count_durasi_response" | ||||
|           name="count_durasi_response" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="avg_durasi_response" | ||||
|           summary-type="avg" | ||||
|           name="avg_durasi_response" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
| @@ -328,14 +371,24 @@ | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_durasi_recovery" | ||||
|           summary-type="sum" | ||||
|           name="total_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="count_durasi_recovery" | ||||
|           name="count_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="avg_durasi_recovery" | ||||
|           summary-type="avg" | ||||
|           name="avg_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
| @@ -371,49 +424,63 @@ | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="Total" | ||||
|           show-in-column="no" | ||||
|           css-class="text-white !text-right" | ||||
|           show-in-column="nama_posko" | ||||
|           css-class="text-white !text-left" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           summary-type="custom" | ||||
|           show-in-column="total" | ||||
|           name="total" | ||||
|           column="total" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_selesai" | ||||
|           summary-type="sum" | ||||
|           name="total_selesai" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="persen_selesai" | ||||
|           summary-type="avg" | ||||
|           name="persen_selesai" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_inproses" | ||||
|           summary-type="sum" | ||||
|           name="total_inproses" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="persen_inproses" | ||||
|           summary-type="avg" | ||||
|           name="persen_inproses" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_durasi_response" | ||||
|           summary-type="sum" | ||||
|           name="total_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="count_durasi_response" | ||||
|           name="count_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="avg_durasi_response" | ||||
|           summary-type="avg" | ||||
|           name="avg_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
| @@ -443,13 +510,22 @@ | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_durasi_recovery" | ||||
|           summary-type="sum" | ||||
|           name="total_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="count_durasi_recovery" | ||||
|           name="count_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="avg_durasi_recovery" | ||||
|           summary-type="avg" | ||||
|           name="avg_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
| @@ -872,7 +948,7 @@ | ||||
| import Filters from '@/components/Form/Filters.vue' | ||||
| import { formatWaktu } from '@/components/Form/FiltersType/reference' | ||||
| import Type8 from '@/components/Form/FiltersType/Type8.vue' | ||||
| import { onMounted, ref, watch } from 'vue' | ||||
| import { onMounted, ref } from 'vue' | ||||
| import { DxDataGrid } from 'devextreme-vue' | ||||
| import { | ||||
|   DxColumn, | ||||
| @@ -880,7 +956,6 @@ import { | ||||
|   DxExport, | ||||
|   DxGroupItem, | ||||
|   DxGrouping, | ||||
|   DxLoadPanel, | ||||
|   DxPager, | ||||
|   DxPaging, | ||||
|   DxScrolling, | ||||
| @@ -926,6 +1001,116 @@ const reportMeta = ref({ | ||||
| const agreeToShowDialog = ref(false) | ||||
| const progressSelected = ref(0) | ||||
|  | ||||
| let total = 0 | ||||
| let total_selesai = 0 | ||||
| let total_inproses = 0 | ||||
| let count_durasi_response = 0 | ||||
| let total_durasi_response = 0 | ||||
| let total_durasi_recovery = 0 | ||||
| let count_durasi_recovery = 0 | ||||
| const calculateCustomSummary = (options: any) => { | ||||
|   if (options.name === 'total') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_selesai') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_selesai += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_selesai | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_inproses') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_inproses += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_inproses | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'persen_selesai') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total = 0 | ||||
|       total_selesai = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = (total_selesai / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'persen_inproses') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total = 0 | ||||
|       total_inproses = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = (total_inproses / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'persen_selesai') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total = 0 | ||||
|       total_selesai = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = (total_selesai / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_durasi_response') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_durasi_response += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'count_durasi_response') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       count_durasi_response += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'avg_durasi_response') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total_durasi_response = 0 | ||||
|       count_durasi_response = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_response / total_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'count_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       count_durasi_recovery += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_recovery | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_durasi_recovery += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_durasi_recovery | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'avg_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       count_durasi_recovery = 0 | ||||
|       total_durasi_recovery = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_recovery / total_durasi_recovery | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| const setAgreementDialog = (status: boolean, progress: number) => { | ||||
|   agreeToShowDialog.value = status | ||||
|   progressSelected.value = progress | ||||
|   | ||||
| @@ -135,6 +135,19 @@ | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :visible="false" | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="count_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Jumlah Durasi" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|             :calculate-cell-value=" | ||||
|               (rowData: any) => rowData.total_durasi_response * rowData.avg_durasi_response | ||||
|             " | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
| @@ -195,6 +208,19 @@ | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :visible="false" | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="count_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Jumlah Durasi" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|             :calculate-cell-value=" | ||||
|               (rowData: any) => rowData.total_durasi_recovery * rowData.avg_durasi_recovery | ||||
|             " | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
| @@ -245,59 +271,74 @@ | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|  | ||||
|       <DxSummary> | ||||
|       <DxSummary :calculate-custom-summary="calculateCustomSummary"> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="no" | ||||
|           column="kode_regu" | ||||
|           display-format="Total" | ||||
|           css-class="!text-left" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total" | ||||
|           summary-type="sum" | ||||
|           name="total" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_selesai" | ||||
|           summary-type="sum" | ||||
|           name="total_selesai" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="persen_selesai" | ||||
|           summary-type="avg" | ||||
|           name="persen_selesai" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_inproses" | ||||
|           summary-type="sum" | ||||
|           name="total_inproses" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="persen_inproses" | ||||
|           summary-type="avg" | ||||
|           name="persen_inproses" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_durasi_response" | ||||
|           summary-type="sum" | ||||
|           name="total_durasi_response" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="count_durasi_response" | ||||
|           name="count_durasi_response" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="avg_durasi_response" | ||||
|           summary-type="avg" | ||||
|           name="avg_durasi_response" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
| @@ -332,14 +373,24 @@ | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="total_durasi_recovery" | ||||
|           summary-type="sum" | ||||
|           name="total_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="count_durasi_recovery" | ||||
|           name="count_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           :show-in-group-footer="true" | ||||
|           column="avg_durasi_recovery" | ||||
|           summary-type="avg" | ||||
|           name="avg_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|           css-class="!text-right" | ||||
|         /> | ||||
| @@ -375,49 +426,63 @@ | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="Total" | ||||
|           show-in-column="no" | ||||
|           css-class="text-white !text-right" | ||||
|           show-in-column="kode_regu" | ||||
|           css-class="text-white !text-left" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           summary-type="custom" | ||||
|           show-in-column="total" | ||||
|           column="total" | ||||
|           name="total" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_selesai" | ||||
|           summary-type="sum" | ||||
|           name="total_selesai" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="persen_selesai" | ||||
|           summary-type="avg" | ||||
|           name="persen_selesai" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_inproses" | ||||
|           summary-type="sum" | ||||
|           name="total_inproses" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="persen_inproses" | ||||
|           summary-type="avg" | ||||
|           name="persen_inproses" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_durasi_response" | ||||
|           summary-type="sum" | ||||
|           name="total_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="count_durasi_response" | ||||
|           name="count_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="avg_durasi_response" | ||||
|           summary-type="avg" | ||||
|           name="avg_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
| @@ -447,13 +512,22 @@ | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_durasi_recovery" | ||||
|           summary-type="sum" | ||||
|           name="total_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="count_durasi_recovery" | ||||
|           name="count_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="avg_durasi_recovery" | ||||
|           summary-type="avg" | ||||
|           name="avg_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
| @@ -888,7 +962,6 @@ import { | ||||
|   DxColumn, | ||||
|   DxColumnFixing, | ||||
|   DxExport, | ||||
|   DxLoadPanel, | ||||
|   DxPager, | ||||
|   DxPaging, | ||||
|   DxScrolling, | ||||
| @@ -910,7 +983,6 @@ import { | ||||
|   exportDetailToXLSX, | ||||
|   exportToDOCX, | ||||
|   exportDetailToDOCX | ||||
|  | ||||
| } from '@/report/Gangguan/Rekap/RGangguan_PerRegu' | ||||
| import BufferDialog from '@/components/Dialogs/BufferDialog.vue' | ||||
|  | ||||
| @@ -938,6 +1010,116 @@ const agreeToShowDialog = ref(false) | ||||
| const progressSelected = ref(0) | ||||
| const isGroupBy = ref(false) | ||||
|  | ||||
| let total = 0 | ||||
| let total_selesai = 0 | ||||
| let total_inproses = 0 | ||||
| let count_durasi_response = 0 | ||||
| let total_durasi_response = 0 | ||||
| let total_durasi_recovery = 0 | ||||
| let count_durasi_recovery = 0 | ||||
| const calculateCustomSummary = (options: any) => { | ||||
|   if (options.name === 'total') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_selesai') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_selesai += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_selesai | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_inproses') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_inproses += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_inproses | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'persen_selesai') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total = 0 | ||||
|       total_selesai = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = (total_selesai / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'persen_inproses') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total = 0 | ||||
|       total_inproses = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = (total_inproses / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'persen_selesai') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total = 0 | ||||
|       total_selesai = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = (total_selesai / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_durasi_response') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_durasi_response += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'count_durasi_response') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       count_durasi_response += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'avg_durasi_response') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total_durasi_response = 0 | ||||
|       count_durasi_response = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_response / total_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'count_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       count_durasi_recovery += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_recovery | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_durasi_recovery += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_durasi_recovery | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'avg_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       count_durasi_recovery = 0 | ||||
|       total_durasi_recovery = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_recovery / total_durasi_recovery | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| const setAgreementDialog = (status: boolean, progress: number) => { | ||||
|   agreeToShowDialog.value = status | ||||
|   progressSelected.value = progress | ||||
| @@ -1008,7 +1190,6 @@ const onExporting = (e: any) => { | ||||
|     exportToXLSX(reportMeta.value, e) | ||||
|   } else { | ||||
|     exportToDOCX(reportMeta.value, data.value) | ||||
|  | ||||
|   } | ||||
| } | ||||
|  | ||||
| @@ -1019,7 +1200,6 @@ const onExportingDetail = (e: any) => { | ||||
|     exportDetailToXLSX(reportMeta.value, e) | ||||
|   } else { | ||||
|     exportDetailToDOCX(reportMeta.value, dataSub.value) | ||||
|  | ||||
|   } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,81 +1,265 @@ | ||||
| <template> | ||||
|   <Filters @reset-form="data = []" @run-search="() => filterData(filters)" | ||||
|     @run-report="() => exportToPDF(reportMeta, data, true)" :report-button="true" class="mb-4"> | ||||
|   <Filters | ||||
|     @reset-form="data = []" | ||||
|     @run-search="() => filterData(filters)" | ||||
|     @run-report="() => exportToPDF(reportMeta, data, true)" | ||||
|     :report-button="true" | ||||
|     class="mb-4" | ||||
|   > | ||||
|     <Type9 @update:filters="(value) => (filters = value)" /> | ||||
|   </Filters> | ||||
|  | ||||
|   <div id="data"> | ||||
|     <DxDataGrid ref="dataGridRef" :allow-column-reordering="true" class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||
|       :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="onDataSelectionChanged" | ||||
|       :column-width="100" @exporting="onExporting" :allow-column-resizing="true" column-resizing-mode="widget" | ||||
|       :word-wrap-enabled="true"> | ||||
|     <DxDataGrid | ||||
|       ref="dataGridRef" | ||||
|       :allow-column-reordering="true" | ||||
|       class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" | ||||
|       :show-column-lines="true" | ||||
|       :show-row-lines="false" | ||||
|       :show-borders="true" | ||||
|       :row-alternation-enabled="true" | ||||
|       :hover-state-enabled="true" | ||||
|       @selection-changed="onDataSelectionChanged" | ||||
|       :column-width="100" | ||||
|       @exporting="onExporting" | ||||
|       :allow-column-resizing="true" | ||||
|       column-resizing-mode="widget" | ||||
|       :word-wrap-enabled="true" | ||||
|     > | ||||
|       <DxSelection mode="single" /> | ||||
|       <DxPaging :enabled="false" /> | ||||
|       <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||
|       <!--  --> | ||||
|  | ||||
|       <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|       <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|       <DxExport | ||||
|         :enabled="true" | ||||
|         :formats="['pdf', 'xlsx', 'document']" | ||||
|         :allow-export-selected-data="false" | ||||
|       /> | ||||
|       <DxColumnFixing :enabled="true" /> | ||||
|  | ||||
|       <DxColumn css-class="custom-table-column" :width="50" alignment="center" | ||||
|         :calculate-display-value="(item: any) => data.findIndex((i) => i == item) + 1" data-type="number" caption="No" | ||||
|         cell-template="formatNumber" /> | ||||
|       <DxColumn :width="120" alignment="center" data-field="nama_uid" caption="UID" css-class="custom-table-column" | ||||
|         group-index="0" v-if="isGroupBy" /> | ||||
|       <DxColumn :width="170" alignment="center" data-field="tanggal" caption="Tanggal Lapor" | ||||
|         css-class="custom-table-column" /> | ||||
|       <DxColumn | ||||
|         css-class="custom-table-column" | ||||
|         :width="50" | ||||
|         alignment="center" | ||||
|         :calculate-display-value="(item: any) => data.findIndex((i) => i == item) + 1" | ||||
|         data-type="number" | ||||
|         caption="No" | ||||
|         cell-template="formatNumber" | ||||
|       /> | ||||
|       <DxColumn | ||||
|         :width="120" | ||||
|         alignment="center" | ||||
|         data-field="nama_uid" | ||||
|         caption="UID" | ||||
|         css-class="custom-table-column" | ||||
|         group-index="0" | ||||
|         v-if="isGroupBy" | ||||
|       /> | ||||
|       <DxColumn | ||||
|         :width="170" | ||||
|         alignment="center" | ||||
|         data-field="tanggal" | ||||
|         caption="Tanggal Lapor" | ||||
|         css-class="custom-table-column" | ||||
|       /> | ||||
|       <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|         <DxColumn :width="120" alignment="center" data-field="total" data-type="number" caption="Total" | ||||
|           css-class="custom-table-column" cell-template="formatNumberLaporanTotal" /> | ||||
|         <DxColumn | ||||
|           :width="120" | ||||
|           alignment="center" | ||||
|           data-field="total" | ||||
|           data-type="number" | ||||
|           caption="Total" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumberLaporanTotal" | ||||
|         /> | ||||
|         <DxColumn alignment="center" caption="Sudah Selesai" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_selesai" data-type="number" caption="Jml" | ||||
|             css-class="custom-table-column" cell-template="formatNumberLaporanJmlSelesai" /> | ||||
|           <DxColumn :width="70" alignment="center" data-field="persen_selesai" data-type="number" caption="%" | ||||
|             css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_selesai" | ||||
|             data-type="number" | ||||
|             caption="Jml" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumberLaporanJmlSelesai" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="70" | ||||
|             alignment="center" | ||||
|             data-field="persen_selesai" | ||||
|             data-type="number" | ||||
|             caption="%" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Belum Selesai" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_inproses" data-type="number" caption="Jml" | ||||
|             css-class="custom-table-column" cell-template="formatNumberLaporanJmlBelumSelesai" /> | ||||
|           <DxColumn :width="70" alignment="center" data-field="persen_inproses" data-type="number" caption="%" | ||||
|             css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_inproses" | ||||
|             data-type="number" | ||||
|             caption="Jml" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumberLaporanJmlBelumSelesai" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="70" | ||||
|             alignment="center" | ||||
|             data-field="persen_inproses" | ||||
|             data-type="number" | ||||
|             caption="%" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|       <DxColumn alignment="center" caption="Response Time" css-class="custom-table-column"> | ||||
|         <DxColumn alignment="center" caption="Menit" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_durasi_response" data-type="number" | ||||
|             caption="Total" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="avg_durasi_response" data-type="number" | ||||
|             caption="Rata-Rata" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="max_durasi_response" data-type="number" caption="Max" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="min_durasi_response" data-type="number" caption="Min" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Total" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :visible="false" | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="count_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Jumlah Response" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|             :calculate-cell-value=" | ||||
|               (rowData: any) => rowData.total_durasi_response * rowData.avg_durasi_response | ||||
|             " | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="avg_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Rata-Rata" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="max_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Max" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="min_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Min" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_diatas_sla_response" data-type="number" | ||||
|             caption=">SLA" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_dibawah_sla_response" data-type="number" | ||||
|             caption="≤SLA" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_diatas_sla_response" | ||||
|             data-type="number" | ||||
|             caption=">SLA" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_dibawah_sla_response" | ||||
|             data-type="number" | ||||
|             caption="≤SLA" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|       <DxColumn alignment="center" caption="Recovery Time" css-class="custom-table-column"> | ||||
|         <DxColumn alignment="center" caption="Menit" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_durasi_recovery" data-type="number" | ||||
|             caption="Total" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="avg_durasi_recovery" data-type="number" | ||||
|             caption="Rata-Rata" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="max_durasi_recovery" data-type="number" caption="Max" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="min_durasi_recovery" data-type="number" caption="Min" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Total" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :visible="false" | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="count_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Jumlah Response" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|             :calculate-cell-value=" | ||||
|               (rowData: any) => rowData.total_durasi_recovery * rowData.avg_durasi_recovery | ||||
|             " | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="avg_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Rata-Rata" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="max_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Max" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="min_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Min" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_diatas_sla_recovery" data-type="number" | ||||
|             caption=">SLA" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="120" alignment="center" data-field="total_dibawah_sla_recovery" data-type="number" | ||||
|             caption="≤SLA" css-class="custom-table-column" cell-template="formatNumber" /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_diatas_sla_recovery" | ||||
|             data-type="number" | ||||
|             caption=">SLA" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_dibawah_sla_recovery" | ||||
|             data-type="number" | ||||
|             caption="≤SLA" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|  | ||||
| @@ -88,48 +272,48 @@ | ||||
|       <template #formatNumber="{ data }"> | ||||
|         <p class="text-right cursor-pointer" @click="setAgreementDialog(false, 0)"> | ||||
|           {{ | ||||
|       isNumber(data.text) | ||||
|         ? data.column.caption == '%' | ||||
|           ? formatPercentage(data.text) | ||||
|           : formatNumber(data.text) | ||||
|         : data.text | ||||
|     }} | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|  | ||||
|       <template #formatNumberLaporanTotal="{ data }"> | ||||
|         <p class="text-right cursor-pointer" @click="setAgreementDialog(true, 0)"> | ||||
|           {{ | ||||
|       isNumber(data.text) | ||||
|         ? data.column.caption == '%' | ||||
|           ? formatPercentage(data.text) | ||||
|           : formatNumber(data.text) | ||||
|         : data.text | ||||
|     }} | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|  | ||||
|       <template #formatNumberLaporanJmlSelesai="{ data }"> | ||||
|         <p class="text-right cursor-pointer" @click="setAgreementDialog(true, 1)"> | ||||
|           {{ | ||||
|       isNumber(data.text) | ||||
|         ? data.column.caption == '%' | ||||
|           ? formatPercentage(data.text) | ||||
|           : formatNumber(data.text) | ||||
|         : data.text | ||||
|     }} | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|  | ||||
|       <template #formatNumberLaporanJmlBelumSelesai="{ data }"> | ||||
|         <p class="text-right cursor-pointer" @click="setAgreementDialog(true, 2)"> | ||||
|           {{ | ||||
|       isNumber(data.text) | ||||
|         ? data.column.caption == '%' | ||||
|           ? formatPercentage(data.text) | ||||
|           : formatNumber(data.text) | ||||
|         : data.text | ||||
|     }} | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|  | ||||
| @@ -140,101 +324,323 @@ | ||||
|       </template> | ||||
|  | ||||
|       <DxSummary :calculate-custom-summary="calculateCustomSummary"> | ||||
|         <DxTotalItem display-format="TOTAL" show-in-column="tanggal" css-class="text-white !text-left" /> | ||||
|         <DxTotalItem column="total" name="total" summary-type="custom" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="total_selesai" name="total_selesai" summary-type="custom" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="persen_selesai" name="persen_selesai" summary-type="custom" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatPercentage(e.value)" /> | ||||
|         <DxTotalItem | ||||
|           display-format="TOTAL" | ||||
|           show-in-column="tanggal" | ||||
|           css-class="text-white !text-left" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total" | ||||
|           name="total" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_selesai" | ||||
|           name="total_selesai" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="persen_selesai" | ||||
|           name="persen_selesai" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|         /> | ||||
|  | ||||
|         <DxTotalItem column="total_inproses" name="total_inproses" summary-type="custom" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="persen_inproses" name="persen_inproses" summary-type="custom" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatPercentage(e.value)" /> | ||||
|         <DxTotalItem | ||||
|           column="total_inproses" | ||||
|           name="total_inproses" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="persen_inproses" | ||||
|           name="persen_inproses" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatPercentage(e.value)" | ||||
|         /> | ||||
|  | ||||
|         <DxTotalItem column="total_durasi_response" name="total_durasi_response" summary-type="sum" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="avg_durasi_response" name="avg_durasi_response" summary-type="avg" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="max_durasi_response" name="max_durasi_response" summary-type="max" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatWaktu(e.value)" /> | ||||
|         <DxTotalItem column="min_durasi_response" name="min_durasi_response" summary-type="min" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatWaktu(e.value)" /> | ||||
|         <DxTotalItem | ||||
|           column="total_durasi_response" | ||||
|           name="total_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="count_durasi_response" | ||||
|           name="count_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="avg_durasi_response" | ||||
|           name="avg_durasi_response" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="max_durasi_response" | ||||
|           summary-type="max" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatWaktu(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="min_durasi_response" | ||||
|           summary-type="min" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatWaktu(e.value)" | ||||
|         /> | ||||
|  | ||||
|         <DxTotalItem column="total_diatas_sla_response" name="total_diatas_sla_response" summary-type="sum" | ||||
|           display-format="{0}" css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="total_dibawah_sla_response" name="total_dibawah_sla_response" summary-type="sum" | ||||
|           display-format="{0}" css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem | ||||
|           column="total_diatas_sla_response" | ||||
|           summary-type="sum" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_dibawah_sla_response" | ||||
|           summary-type="sum" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|  | ||||
|         <DxTotalItem column="total_durasi_recovery" name="total_durasi_recovery" summary-type="sum" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="avg_durasi_recovery" name="avg_durasi_recovery" summary-type="avg" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="max_durasi_recovery" name="max_durasi_recovery" summary-type="max" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatWaktu(e.value)" /> | ||||
|         <DxTotalItem column="min_durasi_recovery" name="min_durasi_recovery" summary-type="min" display-format="{0}" | ||||
|           css-class="text-white !text-right" :customize-text="(e: any) => formatWaktu(e.value)" /> | ||||
|         <DxTotalItem | ||||
|           column="total_durasi_recovery" | ||||
|           name="total_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="count_durasi_recovery" | ||||
|           name="count_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="avg_durasi_recovery" | ||||
|           name="avg_durasi_recovery" | ||||
|           summary-type="custom" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="max_durasi_recovery" | ||||
|           summary-type="max" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatWaktu(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="min_durasi_recovery" | ||||
|           summary-type="min" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatWaktu(e.value)" | ||||
|         /> | ||||
|  | ||||
|         <DxTotalItem column="total_diatas_sla_recovery" name="total_diatas_sla_recovery" summary-type="sum" | ||||
|           display-format="{0}" css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem column="total_dibawah_sla_recovery" name="total_dibawah_sla_recovery" summary-type="sum" | ||||
|           display-format="{0}" css-class="text-white !text-right" :customize-text="(e: any) => formatNumber(e.value)" /> | ||||
|         <DxTotalItem | ||||
|           column="total_diatas_sla_recovery" | ||||
|           summary-type="sum" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total_dibawah_sla_recovery" | ||||
|           summary-type="sum" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(e.value)" | ||||
|         /> | ||||
|       </DxSummary> | ||||
|     </DxDataGrid> | ||||
|   </div> | ||||
|  | ||||
|   <DetailDialog :open="dialogDetail" title="Detail Rekapitulasi Gangguan/Tanggal" @on-close="closeDialog" | ||||
|     :full-width="true"> | ||||
|   <DetailDialog | ||||
|     :open="dialogDetail" | ||||
|     title="Detail Rekapitulasi Gangguan/Tanggal" | ||||
|     @on-close="closeDialog" | ||||
|     :full-width="true" | ||||
|   > | ||||
|     <div class="w-full mb-4 lg:w-[70%] lg:float-left"> | ||||
|       <div class="p-4 bg-white rounded-xl lg:mr-4"> | ||||
|         <DxDataGrid :allow-column-reordering="true" class="max-h-[calc(100vh-140px)]" :data-source="dataSub" | ||||
|           :show-column-lines="true" :show-row-lines="false" :show-borders="true" :row-alternation-enabled="true" | ||||
|           :hover-state-enabled="true" @selection-changed="onDataSubSelectionChanged" :column-width="100" | ||||
|           @exporting="onExportingDetail" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||
|         <DxDataGrid | ||||
|           :allow-column-reordering="true" | ||||
|           class="max-h-[calc(100vh-140px)]" | ||||
|           :data-source="dataSub" | ||||
|           :show-column-lines="true" | ||||
|           :show-row-lines="false" | ||||
|           :show-borders="true" | ||||
|           :row-alternation-enabled="true" | ||||
|           :hover-state-enabled="true" | ||||
|           @selection-changed="onDataSubSelectionChanged" | ||||
|           :column-width="100" | ||||
|           @exporting="onExportingDetail" | ||||
|           :allow-column-resizing="true" | ||||
|           column-resizing-mode="widget" | ||||
|         > | ||||
|           <DxSelection mode="single" /> | ||||
|           <DxPaging :page-size="20" :enabled="true" /> | ||||
|           <DxPager :visible="true" :allowed-page-sizes="[20, 50, 100]" display-mode="full" | ||||
|             :show-page-size-selector="true" :show-info="true" :show-navigation-buttons="true" /> | ||||
|           <DxPager | ||||
|             :visible="true" | ||||
|             :allowed-page-sizes="[20, 50, 100]" | ||||
|             display-mode="full" | ||||
|             :show-page-size-selector="true" | ||||
|             :show-info="true" | ||||
|             :show-navigation-buttons="true" | ||||
|           /> | ||||
|           <!--  --> | ||||
|           <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|           <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|           <DxExport | ||||
|             :enabled="true" | ||||
|             :formats="['pdf', 'xlsx', 'document']" | ||||
|             :allow-export-selected-data="false" | ||||
|           /> | ||||
|  | ||||
|           <DxColumn css-class="custom-table-column" :width="50" alignment="center" | ||||
|             :calculate-display-value="(item: any) => dataSub.findIndex((i) => i == item) + 1" data-type="number" | ||||
|             caption="No" cell-template="formatNumber" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="no_laporan" caption="No Laporan" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="waktu_lapor" caption="Tgl Lapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="waktu_response" caption="Tgl Datang" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="waktu_recovery" caption="Tgl Nyala" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="durasi_response_time" caption="Durasi Response Time" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="durasi_recovery_time" caption="Durasi Recovery Time" | ||||
|             css-class="custom-table-column" cell-template="formatTime" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="status_akhir" caption="Status" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="referensi_marking" caption="Referensi Marking" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="id_pelnomormeter" caption="IDPEL/NO METER" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="nama_pelapor" caption="Nama Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="alamat_pelapor" caption="Alamat Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="no_telp_pelapor" caption="No Telp Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="200" alignment="center" data-field="keterangan_pelapor" caption="Keterangan Pelapor" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="nama_posko" caption="Posko" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="tindakan" caption="Tidakan" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="penyebab" caption="Penyebab" | ||||
|             css-class="custom-table-column" cell-template="formatText" /> | ||||
|           <DxColumn | ||||
|             css-class="custom-table-column" | ||||
|             :width="50" | ||||
|             alignment="center" | ||||
|             :calculate-display-value="(item: any) => dataSub.findIndex((i) => i == item) + 1" | ||||
|             data-type="number" | ||||
|             caption="No" | ||||
|             cell-template="formatNumber" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="no_laporan" | ||||
|             caption="No Laporan" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="waktu_lapor" | ||||
|             caption="Tgl Lapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="waktu_response" | ||||
|             caption="Tgl Datang" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="waktu_recovery" | ||||
|             caption="Tgl Nyala" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="durasi_response_time" | ||||
|             caption="Durasi Response Time" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="durasi_recovery_time" | ||||
|             caption="Durasi Recovery Time" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatTime" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="status_akhir" | ||||
|             caption="Status" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="referensi_marking" | ||||
|             caption="Referensi Marking" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="id_pelnomormeter" | ||||
|             caption="IDPEL/NO METER" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="nama_pelapor" | ||||
|             caption="Nama Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="alamat_pelapor" | ||||
|             caption="Alamat Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="no_telp_pelapor" | ||||
|             caption="No Telp Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="200" | ||||
|             alignment="center" | ||||
|             data-field="keterangan_pelapor" | ||||
|             caption="Keterangan Pelapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="nama_posko" | ||||
|             caption="Posko" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="tindakan" | ||||
|             caption="Tidakan" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="penyebab" | ||||
|             caption="Penyebab" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="formatText" | ||||
|           /> | ||||
|  | ||||
|           <template #formatText="{ data }"> | ||||
|             <p class="text-left cursor-pointer"> | ||||
| @@ -270,28 +676,46 @@ | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Tgl Datang:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.waktu_response" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.waktu_response" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Tgl Nyala:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.waktu_recovery" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.waktu_recovery" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Durasi Response Time:</h3> | ||||
|           <InputText :readonly="true" :value="parseInt(dataSubSelected?.durasi_response_time) | ||||
|         ? formatWaktu(dataSubSelected?.durasi_response_time) | ||||
|         : '-' | ||||
|       " class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value=" | ||||
|               parseInt(dataSubSelected?.durasi_response_time) | ||||
|                 ? formatWaktu(dataSubSelected?.durasi_response_time) | ||||
|                 : '-' | ||||
|             " | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Durasi Recovery Time:</h3> | ||||
|           <InputText :readonly="true" :value="parseInt(dataSubSelected?.durasi_recovery_time) | ||||
|         ? formatWaktu(dataSubSelected?.durasi_recovery_time) | ||||
|         : '-' | ||||
|       " class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value=" | ||||
|               parseInt(dataSubSelected?.durasi_recovery_time) | ||||
|                 ? formatWaktu(dataSubSelected?.durasi_recovery_time) | ||||
|                 : '-' | ||||
|             " | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
| @@ -301,12 +725,20 @@ | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Referensi Marking:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.referensi_marking" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.referensi_marking" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">IDPEL/NO METER:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.id_pelnomormeter" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.id_pelnomormeter" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
| @@ -316,17 +748,29 @@ | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Alamat Pelapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.alamat_pelapor" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.alamat_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">No Telp Pelapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.no_telp_pelapor" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.no_telp_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Keterangan Pelapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.keterangan_pelapor" class-name="flex-1" /> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.keterangan_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
| @@ -354,13 +798,12 @@ | ||||
| import Filters from '@/components/Form/Filters.vue' | ||||
| import Type9 from '@/components/Form/FiltersType/Type9.vue' | ||||
| import { formatWaktu } from '@/components/Form/FiltersType/reference' | ||||
| import { onMounted, ref, watch } from 'vue' | ||||
| import { onMounted, ref } from 'vue' | ||||
| import { DxDataGrid } from 'devextreme-vue' | ||||
| import { | ||||
|   DxColumn, | ||||
|   DxColumnFixing, | ||||
|   DxExport, | ||||
|   DxLoadPanel, | ||||
|   DxPager, | ||||
|   DxPaging, | ||||
|   DxScrolling, | ||||
| @@ -558,9 +1001,11 @@ const filterData = async (params: any) => { | ||||
|  | ||||
| let total = 0 | ||||
| let total_selesai = 0 | ||||
| let persen_selesai = 0 | ||||
| let total_inproses = 0 | ||||
| let persen_inproses = 0 | ||||
| let count_durasi_response = 0 | ||||
| let total_durasi_response = 0 | ||||
| let total_durasi_recovery = 0 | ||||
| let count_durasi_recovery = 0 | ||||
| const calculateCustomSummary = (options: any) => { | ||||
|   if (options.name === 'total') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
| @@ -603,6 +1048,65 @@ const calculateCustomSummary = (options: any) => { | ||||
|       options.totalValue = (total_inproses / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'persen_selesai') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total = 0 | ||||
|       total_selesai = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = (total_selesai / total) * 100 | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_durasi_response') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_durasi_response += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'count_durasi_response') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       count_durasi_response += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'avg_durasi_response') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       total_durasi_response = 0 | ||||
|       count_durasi_response = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_response / total_durasi_response | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'count_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       count_durasi_recovery += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_recovery | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'total_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'calculate') { | ||||
|       total_durasi_recovery += options.value | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = total_durasi_recovery | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (options.name === 'avg_durasi_recovery') { | ||||
|     if (options.summaryProcess === 'start') { | ||||
|       count_durasi_recovery = 0 | ||||
|       total_durasi_recovery = 0 | ||||
|     } else if (options.summaryProcess === 'finalize') { | ||||
|       options.totalValue = count_durasi_recovery / total_durasi_recovery | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user