fix: all table and anomali gangguan petugas

This commit is contained in:
kur0nek-o
2024-04-17 17:57:28 +07:00
parent 00ff360e5b
commit 781e4403aa
70 changed files with 403 additions and 50 deletions

View File

@ -3,6 +3,7 @@
<h1 class="text-xl font-medium md:text-2xl text-dark">Laporan Pengaduan Total</h1>
</div>
<DxDataGrid
@cell-click="onCellClicked"
ref="dataGridRef"
:allow-column-reordering="true"
class="max-h-[calc(100vh-140px)] mb-10"
@ -18,8 +19,9 @@
column-resizing-mode="widget"
:word-wrap-enabled="true"
:data-source="data"
v-if="loadingData == false"
>
<DxGrouping expand-mode="rowClick" :auto-expand-all="false" />
<DxGrouping :auto-expand-all="false" />
<DxSelection mode="single" />
<DxPaging :enabled="false" />
<DxScrolling column-rendering-mode="virtual" mode="virtual" />
@ -39,37 +41,19 @@
caption="Nama Unit"
css-class="custom-table-column"
cell-template="formatText"
name="namaULP"
/>
<DxColumn
v-if="grouping.length > 0"
v-for="(group, index) in grouping"
:width="150"
alignment="center"
:min-width="170"
data-type="text"
data-field=""
caption="Semua Unit"
:data-field="group.data"
:caption="group.caption"
css-class="custom-table-column"
:group-index="0"
/>
<DxColumn
alignment="center"
:min-width="170"
data-type="text"
data-field="id_uid"
caption="UID"
css-class="custom-table-column"
:group-index="1"
name="namaUID"
:calculate-group-value="(rowData: any) => rowData.nama_uid"
/>
<DxColumn
alignment="center"
:min-width="170"
data-type="text"
data-field="id_up3"
caption="UP3"
css-class="custom-table-column"
:group-index="1"
name="namaUID"
:calculate-group-value="(rowData: any) => rowData.nama_up3"
cell-template="formatText"
:group-index="index"
/>
<DxColumn alignment="center" caption="Total Petugas" css-class="custom-table-column">
<DxColumn
@ -349,12 +333,13 @@
</p>
</template>
<DxSummary>
<DxSummary :calculate-custom-summary="calculateCustomSummary">
<DxGroupItem
:show-in-group-footer="false"
:align-by-column="true"
column="total_petugas"
summary-type="sum"
name="total_petugas"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatNumber(e.value)"
/>
@ -362,7 +347,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="anomali_pln_mobile_marking"
summary-type="sum"
name="anomali_pln_mobile_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatNumber(e.value)"
/>
@ -370,7 +356,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="anomali_pln_mobile_non_marking"
summary-type="sum"
name="anomali_pln_mobile_non_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatNumber(e.value)"
/>
@ -378,7 +365,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="anomali_cc123_marking"
summary-type="sum"
name="anomali_cc123_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatNumber(e.value)"
/>
@ -386,7 +374,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="anomali_cc123_non_marking"
summary-type="sum"
name="anomali_cc123_non_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatNumber(e.value)"
/>
@ -394,7 +383,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="total_anomali_marking"
summary-type="sum"
name="total_anomali_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatNumber(e.value)"
/>
@ -402,7 +392,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="total_anomali_non_marking"
summary-type="sum"
name="total_anomali_non_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatNumber(e.value)"
/>
@ -410,7 +401,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="persen_anomali_pln_mobile_marking"
summary-type="avg"
name="persen_anomali_pln_mobile_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatPercentage(e.value)"
/>
@ -418,7 +410,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="persen_anomali_pln_mobile_non_marking"
summary-type="avg"
name="persen_anomali_pln_mobile_non_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatPercentage(e.value)"
/>
@ -426,7 +419,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="persen_anomali_cc123_marking"
summary-type="avg"
name="persen_anomali_cc123_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatPercentage(e.value)"
/>
@ -434,7 +428,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="persen_anomali_cc123_non_marking"
summary-type="avg"
name="persen_anomali_cc123_non_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatPercentage(e.value)"
/>
@ -442,7 +437,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="persen_anomali_marking"
summary-type="avg"
name="persen_anomali_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatPercentage(e.value)"
/>
@ -450,7 +446,8 @@
:show-in-group-footer="false"
:align-by-column="true"
column="persen_anomali_non_marking"
summary-type="avg"
name="persen_anomali_non_marking"
summary-type="custom"
css-class="!text-right"
:customize-text="(e: any) => formatPercentage(e.value)"
/>
@ -494,6 +491,7 @@ import {
exportToXLSX,
exportToDOCX
} from '@/report/Anomali/Gangguan/Anomali_LAPPGP_LPT'
import { getDataRowGroup } from '@/utils/helper'
const position = { of: '#data' }
const showIndicator = ref(true)
@ -501,7 +499,12 @@ const shading = ref(true)
const showPane = ref(true)
const props = defineProps({
data: Array as () => any[],
filters: Object as () => any
filters: Object as () => any,
grouping: {
type: Array as () => any[],
default: []
},
loadingData: Boolean
})
const emit = defineEmits(['update:dataSub', 'update:loadingSubData', 'update:marking'])
const filters = ref<any>(computed(() => props.filters))
@ -517,10 +520,14 @@ const parameterRequest = ref<any>({
media: null,
marking: null
})
const groupDialog = ref(false)
const groupData = ref<any>(null)
const groupIndex = ref(0)
const setParameterRequest = (data: any) => {
parameterRequest.value = data
const parameter = parameterRequest.value
if (parameter.media != null && parameter.marking != null) {
emit('update:marking', parameter.marking)
agreeToShowDialog.value = true
@ -529,32 +536,253 @@ const setParameterRequest = (data: any) => {
}
}
const onCellClicked = (e: any) => {
if (e.rowType == 'group') {
groupDialog.value = true
groupIndex.value = e.row.groupIndex
if (e.column.dataField == 'anomali_pln_mobile_marking') {
setParameterRequest({ media: 'PLN Mobile', marking: 1 })
} else if (e.column.dataField == 'anomali_pln_mobile_non_marking') {
setParameterRequest({ media: 'PLN Mobile', marking: 2 })
} else if (e.column.dataField == 'anomali_cc123_marking') {
setParameterRequest({ media: 'Call PLN 123', marking: 1 })
} else if (e.column.dataField == 'anomali_cc123_non_marking') {
setParameterRequest({ media: 'Call PLN 123', marking: 2 })
} else if (e.column.dataField == 'total_anomali_marking') {
setParameterRequest({ media: '', marking: 1 })
} else if (e.column.dataField == 'total_anomali_non_marking') {
setParameterRequest({ media: '', marking: 2 })
} else {
setParameterRequest({ media: null, marking: null })
}
groupData.value = getDataRowGroup(e.data)
showDetail()
} else {
groupDialog.value = false
}
}
const resetData = () => {
dataSub.value = []
dataSubSelected.value = null
}
let total_petugas = 0
let anomali_pln_mobile_marking = 0
let anomali_pln_mobile_non_marking = 0
let anomali_cc123_marking = 0
let anomali_cc123_non_marking = 0
let total_anomali_marking = 0
let total_anomali_non_marking = 0
let persen_anomali_pln_mobile_marking = 0
let persen_anomali_pln_mobile_non_marking = 0
let persen_anomali_cc123_marking = 0
let persen_anomali_cc123_non_marking = 0
let persen_anomali_marking = 0
let persen_anomali_non_marking = 0
const calculateCustomSummary = (options: any) => {
if (options.name === 'total_petugas') {
if (options.summaryProcess === 'calculate') {
total_petugas += options.value
} else if (options.summaryProcess === 'finalize') {
options.totalValue = total_petugas
}
}
if (options.name === 'anomali_pln_mobile_marking') {
if (options.summaryProcess === 'calculate') {
anomali_pln_mobile_marking += options.value
} else if (options.summaryProcess === 'finalize') {
options.totalValue = anomali_pln_mobile_marking
}
}
if (options.name === 'anomali_pln_mobile_non_marking') {
if (options.summaryProcess === 'calculate') {
anomali_pln_mobile_non_marking += options.value
} else if (options.summaryProcess === 'finalize') {
options.totalValue = anomali_pln_mobile_non_marking
}
}
if (options.name === 'anomali_cc123_marking') {
if (options.summaryProcess === 'calculate') {
anomali_cc123_marking += options.value
} else if (options.summaryProcess === 'finalize') {
options.totalValue = anomali_cc123_marking
}
}
if (options.name === 'anomali_cc123_non_marking') {
if (options.summaryProcess === 'calculate') {
anomali_cc123_non_marking += options.value
} else if (options.summaryProcess === 'finalize') {
options.totalValue = anomali_cc123_non_marking
}
}
if (options.name === 'total_anomali_marking') {
if (options.summaryProcess === 'start') {
anomali_pln_mobile_marking = 0
anomali_cc123_marking = 0
} else if (options.summaryProcess === 'finalize') {
options.totalValue = anomali_pln_mobile_marking + anomali_cc123_marking
}
}
if (options.name === 'total_anomali_non_marking') {
if (options.summaryProcess === 'start') {
anomali_pln_mobile_non_marking = 0
anomali_cc123_non_marking = 0
} else if (options.summaryProcess === 'finalize') {
options.totalValue = anomali_pln_mobile_non_marking + anomali_cc123_non_marking
}
}
if (options.name === 'persen_anomali_pln_mobile_marking') {
if (options.summaryProcess === 'start') {
anomali_pln_mobile_marking = 0
total_petugas = 0
} else if (options.summaryProcess === 'calculate') {
persen_anomali_pln_mobile_marking =
!isFinite(anomali_pln_mobile_marking / total_petugas) || anomali_pln_mobile_marking == 0
? 0
: (anomali_pln_mobile_marking / total_petugas) * 100
} else if (options.summaryProcess === 'finalize') {
options.totalValue =
!isFinite(anomali_pln_mobile_marking / total_petugas) || anomali_pln_mobile_marking == 0
? 0
: (anomali_pln_mobile_marking / total_petugas) * 100
}
}
if (options.name === 'persen_anomali_pln_mobile_non_marking') {
if (options.summaryProcess === 'start') {
anomali_pln_mobile_non_marking = 0
total_petugas = 0
} else if (options.summaryProcess === 'calculate') {
persen_anomali_pln_mobile_non_marking =
!isFinite(anomali_pln_mobile_non_marking / total_petugas) ||
anomali_pln_mobile_non_marking == 0
? 0
: (anomali_pln_mobile_non_marking / total_petugas) * 100
} else if (options.summaryProcess === 'finalize') {
options.totalValue =
!isFinite(anomali_pln_mobile_non_marking / total_petugas) ||
anomali_pln_mobile_non_marking == 0
? 0
: (anomali_pln_mobile_non_marking / total_petugas) * 100
}
}
if (options.name === 'persen_anomali_cc123_marking') {
if (options.summaryProcess === 'start') {
anomali_cc123_marking = 0
total_petugas = 0
} else if (options.summaryProcess === 'calculate') {
persen_anomali_cc123_marking =
!isFinite(anomali_cc123_marking / total_petugas) || anomali_cc123_marking == 0
? 0
: (anomali_cc123_marking / total_petugas) * 100
} else if (options.summaryProcess === 'finalize') {
options.totalValue =
!isFinite(anomali_cc123_marking / total_petugas) || anomali_cc123_marking == 0
? 0
: (anomali_cc123_marking / total_petugas) * 100
}
}
if (options.name === 'persen_anomali_cc123_non_marking') {
if (options.summaryProcess === 'start') {
anomali_cc123_non_marking = 0
total_petugas = 0
} else if (options.summaryProcess === 'calculate') {
persen_anomali_cc123_non_marking =
!isFinite(anomali_cc123_non_marking / total_petugas) || anomali_cc123_non_marking == 0
? 0
: (anomali_cc123_non_marking / total_petugas) * 100
} else if (options.summaryProcess === 'finalize') {
options.totalValue =
!isFinite(anomali_cc123_non_marking / total_petugas) || anomali_cc123_non_marking == 0
? 0
: (anomali_cc123_non_marking / total_petugas) * 100
}
}
if (options.name === 'persen_anomali_marking') {
if (options.summaryProcess === 'start') {
persen_anomali_pln_mobile_marking = 0
persen_anomali_cc123_marking = 0
} else if (options.summaryProcess === 'finalize') {
options.totalValue = persen_anomali_pln_mobile_marking + persen_anomali_cc123_marking
}
}
if (options.name === 'persen_anomali_non_marking') {
if (options.summaryProcess === 'start') {
persen_anomali_cc123_non_marking = 0
persen_anomali_pln_mobile_non_marking = 0
} else if (options.summaryProcess === 'finalize') {
options.totalValue = persen_anomali_pln_mobile_non_marking + persen_anomali_cc123_non_marking
}
}
}
const getDetail = async () => {
resetData()
const { jenisLaporan } = filters.value
const dateValue = filters.value.periode.split(' s/d ')
const selected = dataSelected.value
const query = {
let query = {
dateFrom: dateValue[0]
? dateValue[0].split('-').reverse().join('-')
: new Date().toISOString().slice(0, 10),
dateTo: dateValue[1]
? dateValue[1].split('-').reverse().join('-')
: new Date().toISOString().slice(0, 10),
idUlp: selected?.id_ulp ? selected?.id_ulp : 0,
idUid: selected?.id_uid ? selected?.id_uid : 0,
idUp3: selected?.id_up3 ? selected?.id_up3 : 0,
namaRegional: selected?.nama_regional ? selected?.nama_regional : '',
idUlp: 0,
idUid: 0,
idUp3: 0,
namaRegional: '',
media: parameterRequest.value?.media,
isMarking: parameterRequest.value?.marking
}
if (groupDialog.value) {
if (props.grouping[groupIndex.value].data == 'nama_uid') {
query = {
...query,
idUid: groupData.value?.id_uid ? groupData.value?.id_uid : 0,
namaRegional: groupData.value?.nama_regional ? groupData.value?.nama_regional : ''
}
} else if (props.grouping[groupIndex.value].data == 'nama_up3') {
query = {
...query,
idUid: groupData.value?.id_uid ? groupData.value?.id_uid : 0,
idUp3: groupData.value?.id_up3 ? groupData.value?.id_up3 : 0,
namaRegional: groupData.value?.nama_regional ? groupData.value?.nama_regional : ''
}
}
} else {
query = {
dateFrom: dateValue[0]
? dateValue[0].split('-').reverse().join('-')
: new Date().toISOString().slice(0, 10),
dateTo: dateValue[1]
? dateValue[1].split('-').reverse().join('-')
: new Date().toISOString().slice(0, 10),
idUlp: selected?.id_ulp ? selected?.id_ulp : 0,
idUid: selected?.id_uid ? selected?.id_uid : 0,
idUp3: selected?.id_up3 ? selected?.id_up3 : 0,
namaRegional: selected?.nama_regional ? selected?.nama_regional : '',
media: parameterRequest.value?.media,
isMarking: parameterRequest.value?.marking
}
}
loadingSubData.value = true
emit('update:loadingSubData', loadingSubData.value)
await requestGraphQl(