Untitled

 avatar
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