fix: alignment, grouping and summary in energy not sales kumulatif
This commit is contained in:
		| @@ -1,7 +1,13 @@ | ||||
| <template> | ||||
|   <Filters @run-search="() => filterData(filters)" :report-button="true" class="mb-4"> | ||||
|   <Filters | ||||
|     @reset-form="data = []" | ||||
|     @run-search="() => filterData(filters)" | ||||
|     :report-button="true" | ||||
|     class="mb-4" | ||||
|   > | ||||
|     <Type2 @update:filters="(value) => (filters = value)" /> | ||||
|   </Filters> | ||||
|  | ||||
|   <div id="data"> | ||||
|     <DxDataGrid | ||||
|       class="max-h-[calc(100vh-140px)] mb-10" | ||||
| @@ -39,11 +45,40 @@ | ||||
|  | ||||
|       <DxColumn alignment="center" caption="Periode: Februari,2020" css-class="custom-table-column"> | ||||
|         <DxColumn | ||||
|           :min-width="170" | ||||
|           alignment="center" | ||||
|           :min-width="170" | ||||
|           data-type="text" | ||||
|           data-field="nama_regional" | ||||
|           caption="Nama Regional" | ||||
|           css-class="custom-table-column" | ||||
|           :group-index="0" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           :min-width="170" | ||||
|           data-type="text" | ||||
|           data-field="nama_uid" | ||||
|           caption="Nama UID" | ||||
|           css-class="custom-table-column" | ||||
|           :group-index="1" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           :min-width="170" | ||||
|           data-type="text" | ||||
|           data-field="nama_up3" | ||||
|           caption="Nama UP3" | ||||
|           css-class="custom-table-column" | ||||
|           :group-index="2" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           alignment="center" | ||||
|           :min-width="170" | ||||
|           data-type="text" | ||||
|           data-field="nama_ulp" | ||||
|           caption="Nama Unit" | ||||
|           css-class="custom-table-column" | ||||
|           name="namaULP" | ||||
|           cell-template="formatText" | ||||
|         /> | ||||
|       </DxColumn> | ||||
| @@ -55,6 +90,7 @@ | ||||
|           data-type="number" | ||||
|           caption="Terencana" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           :width="150" | ||||
| @@ -63,6 +99,7 @@ | ||||
|           data-type="number" | ||||
|           caption="Tidak Terencana" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|         <DxColumn | ||||
|           :width="150" | ||||
| @@ -71,6 +108,7 @@ | ||||
|           data-type="number" | ||||
|           caption="Bencana Alam" | ||||
|           css-class="custom-table-column" | ||||
|           cell-template="formatNumber" | ||||
|         /> | ||||
|       </DxColumn> | ||||
|       <DxColumn | ||||
| @@ -80,6 +118,7 @@ | ||||
|         data-type="number" | ||||
|         caption="Total" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatNumber" | ||||
|       /> | ||||
|       <DxColumn | ||||
|         :min-width="170" | ||||
| @@ -88,10 +127,118 @@ | ||||
|         data-type="number" | ||||
|         caption="KPI ENS" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="formatNumber" | ||||
|       /> | ||||
|  | ||||
|       <DxSummary> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="Total" | ||||
|           show-in-column="nama_ulp" | ||||
|           css-class="text-white !text-left" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="terencana" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(parseFloat(e.value.toString()))" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="tidak_terencana" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(parseFloat(e.value.toString()))" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="bencana_alam" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(parseFloat(e.value.toString()))" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="total" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(parseFloat(e.value.toString()))" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           column="kpi_ens" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           css-class="text-white !text-right" | ||||
|           :customize-text="(e: any) => formatNumber(parseFloat(e.value.toString()))" | ||||
|         /> | ||||
|  | ||||
|         <DxGroupItem | ||||
|           css-class="!text-right" | ||||
|           show-in-column="terencana" | ||||
|           :show-in-group-footer="false" | ||||
|           :align-by-column="true" | ||||
|           column="terencana" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           :customize-text="(e: any) => formatNumber(parseFloat(e.value.toString()))" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           css-class="!text-right" | ||||
|           show-in-column="tidak_terencana" | ||||
|           :show-in-group-footer="false" | ||||
|           :align-by-column="true" | ||||
|           column="tidak_terencana" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           :customize-text="(e: any) => formatNumber(parseFloat(e.value.toString()))" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           css-class="!text-right" | ||||
|           show-in-column="bencana_alam" | ||||
|           :show-in-group-footer="false" | ||||
|           :align-by-column="true" | ||||
|           column="bencana_alam" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           :customize-text="(e: any) => formatNumber(parseFloat(e.value.toString()))" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           css-class="!text-right" | ||||
|           show-in-column="total" | ||||
|           :show-in-group-footer="false" | ||||
|           :align-by-column="true" | ||||
|           column="total" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           :customize-text="(e: any) => formatNumber(parseFloat(e.value.toString()))" | ||||
|         /> | ||||
|         <DxGroupItem | ||||
|           css-class="!text-right" | ||||
|           show-in-column="kpi_ens" | ||||
|           :show-in-group-footer="false" | ||||
|           :align-by-column="true" | ||||
|           column="kpi_ens" | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           :customize-text="(e: any) => formatNumber(parseFloat(e.value.toString()))" | ||||
|         /> | ||||
|       </DxSummary> | ||||
|  | ||||
|       <template #formatNumber="{ data }"> | ||||
|         <p class="text-right cursor-pointer"> | ||||
|           {{ | ||||
|             isNumber(data.text) | ||||
|               ? data.column.caption == '%' | ||||
|                 ? formatPercentage(data.text) | ||||
|                 : formatNumber(data.text) | ||||
|               : data.text | ||||
|           }} | ||||
|         </p> | ||||
|       </template> | ||||
|  | ||||
|       <template #formatText="{ data }"> | ||||
|         <p class="text-left"> | ||||
|         <p class="text-left cursor-pointer"> | ||||
|           {{ data.text }} | ||||
|         </p> | ||||
|       </template> | ||||
| @@ -100,7 +247,7 @@ | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import { ref } from 'vue' | ||||
| import { onMounted, ref } from 'vue' | ||||
| import Filters from '@/components/Form/Filters.vue' | ||||
| import Type2 from '@/components/Form/FiltersType/Type2.vue' | ||||
| import { DxDataGrid } from 'devextreme-vue' | ||||
| @@ -112,7 +259,10 @@ import { | ||||
|   DxPaging, | ||||
|   DxScrolling, | ||||
|   DxSearchPanel, | ||||
|   DxSelection | ||||
|   DxSelection, | ||||
|   DxSummary, | ||||
|   DxTotalItem, | ||||
|   DxGroupItem | ||||
| } from 'devextreme-vue/data-grid' | ||||
| import { jsPDF } from 'jspdf' | ||||
| import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter' | ||||
| @@ -121,13 +271,18 @@ import { saveAs } from 'file-saver' | ||||
| import { Workbook } from 'exceljs' | ||||
| import { useQuery } from '@vue/apollo-composable' | ||||
| import { queries } from '@/utils/api/api.graphql' | ||||
| import { getMonthName } from '@/utils/texts' | ||||
| import { formatNumber, formatPercentage, isNumber } from '@/utils/numbers' | ||||
|  | ||||
| const position = { of: '#data' } | ||||
| const showIndicator = ref(true) | ||||
| const shading = ref(true) | ||||
| const showPane = ref(true) | ||||
| const data = ref<any[]>([]) | ||||
| const dataDetail = ref<any>() | ||||
| const showDetail = ref(false) | ||||
| const filters = ref() | ||||
| const currentYear = ref(new Date().getFullYear()) | ||||
| const currentMonth = ref(new Date().getMonth()) | ||||
| const lastYear = ref(currentYear.value - 1) | ||||
|  | ||||
| const onExporting = (e: any) => { | ||||
|   if (e.format === 'pdf') { | ||||
| @@ -166,25 +321,30 @@ const onSelectionChanged = ({ selectedRowsData }: any) => { | ||||
| const { onResult, onError, loading, refetch } = useQuery( | ||||
|   queries.monalisa.laporan.kumulatif.energyNotSalesKumulatif, | ||||
|   { | ||||
|     regional: '', | ||||
|     // regional: '', | ||||
|     idUlp: 0, | ||||
|     idUid: 0, | ||||
|     idUp3: 0, | ||||
|     bulan: 10, | ||||
|     tahun: 2023 | ||||
|     bulan: currentMonth.value, | ||||
|     tahun: currentYear.value | ||||
|   } | ||||
| ) | ||||
| const filterData = (params: any) => { | ||||
|   const { regional, ulp, uid, up3, bulan, tahun } = params | ||||
|  | ||||
|   currentMonth.value = bulan.id | ||||
|   currentYear.value = tahun.id | ||||
|   lastYear.value = tahun.id - 1 | ||||
|  | ||||
|   refetch({ | ||||
|     regional: regional, | ||||
|     // regional: regional, | ||||
|     idUlp: ulp ? ulp.id : 0, | ||||
|     idUid: uid ? uid.id : 0, | ||||
|     idUp3: up3 ? up3.id : 0, | ||||
|     bulan: bulan ? bulan.id : 10, | ||||
|     tahun: bulan ? tahun.id : 2023 | ||||
|     bulan: bulan ? bulan.id : currentMonth.value, | ||||
|     tahun: bulan ? tahun.id : currentYear.value | ||||
|   }) | ||||
|  | ||||
|   onResult((queryResult) => { | ||||
|     if (queryResult.data != undefined) { | ||||
|       data.value = queryResult.data.energyNotSalesKumulatif | ||||
| @@ -193,9 +353,88 @@ const filterData = (params: any) => { | ||||
|     console.log(queryResult.loading) | ||||
|     console.log(queryResult.networkStatus) | ||||
|   }) | ||||
|  | ||||
|   onError((error) => { | ||||
|     console.log(error) | ||||
|   }) | ||||
| } | ||||
| const filters = ref() | ||||
|  | ||||
| onMounted(() => { | ||||
|   if (import.meta.env.DEV) { | ||||
|     getMonthName(filters.value.bulan.id) | ||||
|  | ||||
|     data.value = [ | ||||
|       { | ||||
|         nama_regional: '', | ||||
|         id_uid: 0, | ||||
|         nama_uid: '', | ||||
|         id_up3: 0, | ||||
|         nama_up3: '', | ||||
|         id_ulp: 0, | ||||
|         nama_ulp: 'CONTACT CENTER 123', | ||||
|         terencana: 30.2, | ||||
|         tidak_terencana: 180, | ||||
|         bencana_alam: 0.4, | ||||
|         total: 210.6, | ||||
|         kpi_ens: 210.2 | ||||
|       }, | ||||
|       { | ||||
|         nama_regional: 'REGIONAL SUMKAL', | ||||
|         id_uid: 120, | ||||
|         nama_uid: 'WILAYAH SUMATERA UTARA', | ||||
|         id_up3: 12100, | ||||
|         nama_up3: 'UP3 PEMATANG SIANTAR', | ||||
|         id_ulp: 12102, | ||||
|         nama_ulp: 'ULP LIMA PULUH', | ||||
|         terencana: 30.2, | ||||
|         tidak_terencana: 180, | ||||
|         bencana_alam: 0.4, | ||||
|         total: 210.6, | ||||
|         kpi_ens: 210.2 | ||||
|       }, | ||||
|       { | ||||
|         nama_regional: 'REGIONAL SULMAPANA', | ||||
|         id_uid: 41, | ||||
|         nama_uid: 'WILAYAH MALUKU DAN MALUKU UTARA', | ||||
|         id_up3: 412, | ||||
|         nama_up3: 'UP3 TERNATE', | ||||
|         id_ulp: 41230, | ||||
|         nama_ulp: 'ULP BACAN', | ||||
|         terencana: 30.2, | ||||
|         tidak_terencana: 180, | ||||
|         bencana_alam: 0.4, | ||||
|         total: 210.6, | ||||
|         kpi_ens: 210.2 | ||||
|       }, | ||||
|       { | ||||
|         nama_regional: 'REGIONAL JMB', | ||||
|         id_uid: 101, | ||||
|         nama_uid: 'DISTRIBUSI JAWA TENGAH & DIY', | ||||
|         id_up3: 52150, | ||||
|         nama_up3: 'UP3 MAGELANG', | ||||
|         id_ulp: 52156, | ||||
|         nama_ulp: 'ULP PARAKAN', | ||||
|         terencana: 30.2, | ||||
|         tidak_terencana: 180, | ||||
|         bencana_alam: 0.4, | ||||
|         total: 210.6, | ||||
|         kpi_ens: 210.2 | ||||
|       }, | ||||
|       { | ||||
|         nama_regional: 'REGIONAL SULMAPANA', | ||||
|         id_uid: 41, | ||||
|         nama_uid: 'WILAYAH MALUKU DAN MALUKU UTARA', | ||||
|         id_up3: 412, | ||||
|         nama_up3: 'UP3 TERNATE', | ||||
|         id_ulp: 41230, | ||||
|         nama_ulp: 'ULP BACAN', | ||||
|         terencana: 30.2, | ||||
|         tidak_terencana: 180, | ||||
|         bencana_alam: 0.4, | ||||
|         total: 210.6, | ||||
|         kpi_ens: 210.2 | ||||
|       } | ||||
|     ] | ||||
|   } | ||||
| }) | ||||
| </script> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user