Untitled
unknown
javascript
2 years ago
3.4 kB
12
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