diff --git a/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGP.vue b/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGP.vue index b43e5c7..0c6554b 100644 --- a/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGP.vue +++ b/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGP.vue @@ -22,6 +22,8 @@ ([ + { + data: '', + caption: 'Semua Unit' + }, + { + data: 'nama_uid', + caption: 'UID' + }, + { + data: 'nama_up3', + caption: 'UP3' + } +]) + const client = apolloClient() provideApolloClient(client) const data = ref([]) @@ -76,6 +93,46 @@ const filterData = async (params: any) => { const { ulp, uid, up3, jenisLaporan } = params console.table('LAPPGP', jenisLaporan) + var groupList: any[] = [ + { + data: '', + caption: 'Semua Unit' + }, + { + data: 'nama_uid', + caption: 'UID' + }, + { + data: 'nama_up3', + caption: 'UP3' + } + ] + + if (uid?.id != 0) { + groupList.forEach((item, index) => { + if (item.caption == 'Semua Unit') { + groupList.splice(index, 1) + } + }) + + if (up3?.id != 0) { + groupList.forEach((item, index) => { + if (item.caption == 'UID') { + groupList.splice(index, 1) + } + }) + + if (ulp?.id != 0) { + groupList.forEach((item, index) => { + if (item.caption == 'UP3') { + groupList.splice(index, 1) + } + }) + } + } + } + grouping.value = groupList + const dateValue = params.periode.split(' s/d ') const query = { dateFrom: dateValue[0] diff --git a/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGP_LPT.vue b/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGP_LPT.vue index 2a8cef5..eab9e8b 100755 --- a/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGP_LPT.vue +++ b/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGP_LPT.vue @@ -3,6 +3,7 @@

Laporan Pengaduan Total

- + @@ -39,37 +41,19 @@ caption="Nama Unit" css-class="custom-table-column" cell-template="formatText" + name="namaULP" /> + - - - + @@ -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(computed(() => props.filters)) @@ -517,10 +520,14 @@ const parameterRequest = ref({ media: null, marking: null }) +const groupDialog = ref(false) +const groupData = ref(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( diff --git a/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGU.vue b/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGU.vue index 61680e5..626a5a6 100644 --- a/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGU.vue +++ b/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGU.vue @@ -21,6 +21,7 @@ diff --git a/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGU_LPT.vue b/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGU_LPT.vue index 5249223..76d5f2c 100755 --- a/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGU_LPT.vue +++ b/src/components/Pages/Anomali/Gangguan/Anomali_LAPPGU_LPT.vue @@ -8,6 +8,7 @@ :allow-column-reordering="true" class="max-h-[calc(100vh-140px)] mb-10" :data-source="data" + v-if="loadingData == false" :show-column-lines="true" :show-row-lines="false" :show-borders="true" @@ -1083,7 +1084,8 @@ const shading = ref(true) const showPane = ref(true) const props = defineProps({ data: Array as () => any[], - filters: Object as () => any + filters: Object as () => any, + loadingData: Boolean }) const emit = defineEmits(['update:loadingSubData']) const filters = ref(computed(() => props.filters)) @@ -1093,7 +1095,6 @@ const dataSelected = ref(null) const dataSubSelected = ref(null) const dialogDetail = ref(false) const closedialogDetail = () => (dialogDetail.value = false) -const loadingData = ref(false) const loadingSubData = ref(false) const agreeToShowDialog = ref(false) const reportMeta = ref(computed(() => props.filters)) diff --git a/src/components/Pages/Anomali/Keluhan/Anomali_LAPPKU_LPT.vue b/src/components/Pages/Anomali/Keluhan/Anomali_LAPPKU_LPT.vue index 0e92e37..689b122 100755 --- a/src/components/Pages/Anomali/Keluhan/Anomali_LAPPKU_LPT.vue +++ b/src/components/Pages/Anomali/Keluhan/Anomali_LAPPKU_LPT.vue @@ -5,6 +5,7 @@ diff --git a/src/components/Pages/Transaksi/Transaksi.vue b/src/components/Pages/Transaksi/Transaksi.vue index f8d1fbe..7183d2c 100755 --- a/src/components/Pages/Transaksi/Transaksi.vue +++ b/src/components/Pages/Transaksi/Transaksi.vue @@ -36,6 +36,7 @@ :allow-column-reordering="true" class="max-h-[calc(100vh-140px)] mb-10" :data-source="data" + v-if="loadingData == false" :show-column-lines="true" :show-row-lines="false" :show-borders="true"