Untitled
unknown
javascript
a year ago
3.4 kB
11
Indexable
/** * Ini untuk grouping data histori * */ export const getGroupedHistori = (values: any[]) => { let groupedData: any[] = [] let indx = 0; // Index ini buat sorting ntar, const sorted = values?.sort((a,b)=>a.id - b.id) for (let i = 0; i < values?.length; i++) { // 1 Untuk pasang // 2 untuk lepas // 3 untuk kosong const currentSurveyHarianDetail = sorted[i]?.survey_harian_detail const previousSurveyHarianDetail = sorted[i - 1]?.survey_harian_detail const currentStatus = parseInt(currentSurveyHarianDetail?.status_alat?.value) const previousStatus = parseInt(previousSurveyHarianDetail?.status_alat?.value) const isCurrentPasang = currentStatus === STATUS_PASANG_LEPAS_CODE.pasang const isCurrentLepas = currentStatus === STATUS_PASANG_LEPAS_CODE.lepas const isCurrentKosong = currentStatus === STATUS_PASANG_LEPAS_CODE.kosong const isPreviousPasang = previousStatus === STATUS_PASANG_LEPAS_CODE.pasang const isPreviousLepas = previousStatus === STATUS_PASANG_LEPAS_CODE.lepas const isPreviousKosong = previousStatus === STATUS_PASANG_LEPAS_CODE.kosong /** * RULES status alat kosong * 1. status alat bisa kosong apabila alat sebelumnya sudah dilepas * * * nb: kondisi dibawah bisa berjalan dengan syarat, backend harus validasi aturan status_alat */ if((isCurrentPasang && (!previousStatus || isPreviousLepas || isPreviousKosong)) || isCurrentKosong) { // Akan buat group baru jika // 1. Loop pertama kali // 2. previousStatus adalah Lepas, sedangkan currentStatus adalah Pasang // 3. PreviousStatus adalah Kosong, sedangkan currentStatus adalah pasang indx++ groupedData.push({ index: indx, name: `Group-${i + Number(1)}`, alat: { tanggal_pasang: itSelfEmpty(currentSurveyHarianDetail?.tanggal_pasang,undefined), status_pasang: isCurrentKosong ? STATUS_PASANG.kosong : STATUS_PASANG.pasang }, items: [sorted[i]] }) }else if((isCurrentPasang || isCurrentLepas) && isPreviousPasang) { // Apabila currentStatus adalah pasang lagi, atau sudah dilepas // maka current value harus di push ke group terakhir const tempGrouped = groupedData.slice(0,groupedData.length - 1); const lastIndex = groupedData.pop(); let lama_pasang = undefined; let status_pasang = STATUS_PASANG.pasang const current_tanggal_lepas = currentSurveyHarianDetail?.tanggal_lepas; if(isCurrentLepas){ // Jika currentStatus lepas, maka hitung lama pasang // dan ubah status_pasangnya menjadi dilepas const current_tanggal_pasang = lastIndex.alat.tanggal_pasang lama_pasang = getLamaPasangAlat(current_tanggal_pasang,current_tanggal_lepas) status_pasang = STATUS_PASANG.lepas } const newObj = { ...lastIndex, alat: { ...lastIndex.alat, tanggal_lepas: itSelfEmpty(currentSurveyHarianDetail?.tanggal_lepas, undefined), lama_pasang, status_pasang:itSelfEmpty(status_pasang,null) }, } newObj.items?.push(values[i]) tempGrouped.push(newObj) groupedData = tempGrouped } } return groupedData.sort((a,b)=>b.index - a.index) }
Editor is loading...
Leave a Comment