From aeb29025343a92a55281f467fefa83b73c58bc17 Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Thu, 7 Oct 2021 17:15:50 +0700 Subject: [PATCH] - perbaikan handling nilai diskon null di logbook dokter - pembuatan service kalender untuk keperluan perbaikan performa service monitoring absensi - desain ulang service dalam rangka perbaikan performa service monitoring absensi - penambahan kolom data tanggal presensi dalam tabel monitoring presensi untuk persiapan verifikasi indikator kehadiran - pendaftaran tabel monitoring presensi dalam konfigurasi hibernate - penghapusan service monitoring presensi sebelumnya yang tidak terpakai --- .../dao/IkiDanRemunerasiDao.java | 8 +- .../medifirst2000/dao/KalenderDao.java | 12 +- .../medifirst2000/dao/MonitoringAbsenDao.java | 153 ++++++++++++++-- .../medifirst2000/dao/PasienDaftarDao.java | 9 +- .../medifirst2000/dao/PegawaiDao.java | 2 +- .../medifirst2000/dao/PendapatanDao.java | 6 +- .../medifirst2000/dao/RevIndekKinerjaDao.java | 6 +- .../service/MonitoringAbsenService.java | 3 + .../impl/MonitoringAbsenServiceImpl.java | 168 +++++++++++++++--- .../service/impl/ReportServiceImpl.java | 7 +- .../entities/MonitoringAbsen.java | 19 +- .../medifirst2000/vo/MonitoringAbsenVO.java | 13 ++ .../src/main/resources/hibernate.cfg.xml | 1 + .../controller/ReportingController.java | 12 +- .../controller/SdmController.java | 46 +++-- 15 files changed, 388 insertions(+), 77 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IkiDanRemunerasiDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IkiDanRemunerasiDao.java index 9c25998c..9f082d8c 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IkiDanRemunerasiDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IkiDanRemunerasiDao.java @@ -171,7 +171,7 @@ public interface IkiDanRemunerasiDao extends PagingAndSortingRepository { - + @Query("select k.tanggal from Kalender k where to_char(k.tanggal,'yyyy-MM-dd') between :tglAwal and :tglAkhir") List getDateFromPeriodicParameter(@Param("tglAwal") String tglAwal, @Param("tglAkhir") String tglAkhir); - + + @Query("select new Map(k.id as kalendarId," + "k.tanggal as date," + "to_char(k.tanggal,'yyyy-MM-dd') as strDate," + + "concat(k.hariKeDlmBulan,' ',k.namaBulan,' ',k.tahunKalender) as tanggal) " + + "from Kalender k where to_char(k.tanggal,'yyyy-MM-dd') between :tglAwal and :tglAkhir") + List> getTanggalFromPeriodicParameter(@Param("tglAwal") String tglAwal, + @Param("tglAkhir") String tglAkhir); + @Query("select new Map(k.id as id,to_char(k.tanggal,'dd') as tanggal) from Kalender k where to_char(k.tanggal,'yyyy-MM') = :bulan") List> getKalenderBulanan(@Param("bulan") String bulan); - + @Query(nativeQuery = true, value = "select kal.tanggal from kalender_s kal order by kal.tanggal desc limit 1") Date getLastDateData(); diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MonitoringAbsenDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MonitoringAbsenDao.java index 0908bc4a..dde0fe61 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MonitoringAbsenDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MonitoringAbsenDao.java @@ -76,7 +76,7 @@ public interface MonitoringAbsenDao extends PagingAndSortingRepository> findKalender(@Param("startDate") String startDate, @@ -149,21 +149,39 @@ public interface MonitoringAbsenDao extends PagingAndSortingRepository> findPegawaiDanIdFingeraAktifDanKaryawanByRuangan( @Param("idUnitKerja") Integer idUnitKerja); - @Query("select pegawai.id " + "from MapPegawaiJabatanToUnitKerja mapPegawai " - + "left join mapPegawai.pegawai pegawai " + "left join pegawai.shiftKerja shiftKerja " + @Query("select new map(pegawai.id as pegawaiId," + "pegawai.nipPns as nip, " + "pegawai.namaLengkap as nama, " + + "jabatanInternal.namaJabatan as jabatanInternal, " + "ruangan.namaRuangan as namaRuangan, " + + "unitKerja.name as unitKerja, " + "pegawai.idFinger as fingerId) " + + "from Pegawai pegawai, MapPegawaiJabatanToUnitKerja mapPegawai " + "left join pegawai.ruangan ruangan " + "left join mapPegawai.subUnitKerjaPegawai subUnitKerja " - + "left join mapPegawai.unitKerjaPegawai unitKerja " + "where mapPegawai.statusEnabled is true " - + "and unitKerja.id = :idUnitKerja " + "and pegawai.statusEnabled is not false " - + "and pegawai.idFinger is not null " + "order by pegawai.nama asc") - public List findPegawaiaAktifDanKaryawanByUnitKerja(@Param("idUnitKerja") Integer idUnitKerja); + + "left join mapPegawai.unitKerjaPegawai unitKerja " + "left join mapPegawai.jabatan jabatanInternal " + + "where pegawai.id = mapPegawai.pegawaiId " + "and mapPegawai.isPrimary is true " + + "and mapPegawai.statusEnabled is true " + "and pegawai.id = :pegawaiId " + + "and pegawai.statusEnabled is true " + "order by pegawai.nama asc") + public List> findPegawaiAktifDanKaryawan(@Param("pegawaiId") Integer idPegawai); - @Query("select pegawai.id " + "from MapPegawaiJabatanToUnitKerja mapPegawai " - + "left join mapPegawai.pegawai pegawai " + "left join pegawai.shiftKerja shiftKerja " + @Query("select new map(pegawai.id as pegawaiId," + "pegawai.nipPns as nip, " + "pegawai.namaLengkap as nama, " + + "jabatanInternal.namaJabatan as jabatanInternal, " + "ruangan.namaRuangan as namaRuangan, " + + "unitKerja.name as unitKerja, " + "pegawai.idFinger as fingerId) " + + "from Pegawai pegawai, MapPegawaiJabatanToUnitKerja mapPegawai " + "left join pegawai.ruangan ruangan " + "left join mapPegawai.subUnitKerjaPegawai subUnitKerja " - + "left join mapPegawai.unitKerjaPegawai unitKerja " + "where unitKerja.id = :idUnitKerja " - + "and subUnitKerja.id = :idSubUnitKerja " + "and mapPegawai.statusEnabled is true " - + "and pegawai.idFinger is not null " + "and pegawai.statusEnabled is true " + "order by pegawai.nama asc") - public List findPegawaiaAktifDanKaryawanByUnitKerjaAndSubUnitKerja( + + "left join mapPegawai.unitKerjaPegawai unitKerja " + "left join mapPegawai.jabatan jabatanInternal " + + "where pegawai.id = mapPegawai.pegawaiId " + "and mapPegawai.isPrimary is true " + + "and mapPegawai.statusEnabled is true " + "and unitKerja.id = :idUnitKerja " + + "and pegawai.statusEnabled is true " + "order by pegawai.nama asc") + public List> findPegawaiAktifDanKaryawanByUnitKerja(@Param("idUnitKerja") Integer idUnitKerja); + + @Query("select new map(pegawai.id as pegawaiId," + "pegawai.nipPns as nip, " + "pegawai.namaLengkap as nama, " + + "jabatanInternal.namaJabatan as jabatanInternal, " + "ruangan.namaRuangan as namaRuangan, " + + "unitKerja.name as unitKerja, " + "pegawai.idFinger as fingerId) " + + "from Pegawai pegawai, MapPegawaiJabatanToUnitKerja mapPegawai " + "left join pegawai.ruangan ruangan " + + "left join mapPegawai.subUnitKerjaPegawai subUnitKerja " + + "left join mapPegawai.unitKerjaPegawai unitKerja " + "left join mapPegawai.jabatan jabatanInternal " + + "where pegawai.id = mapPegawai.pegawaiId " + "and mapPegawai.isPrimary is true " + + "and mapPegawai.statusEnabled is true " + "and unitKerja.id = :idUnitKerja " + + "and subUnitKerja.id = :idSubUnitKerja " + "and pegawai.statusEnabled is true " + + "order by pegawai.nama asc") + public List> findPegawaiAktifDanKaryawanByUnitKerjaAndSubUnitKerja( @Param("idUnitKerja") Integer idUnitKerja, @Param("idSubUnitKerja") Integer idSubUnitKerja); @Query(" select pegawai.id" + " from Pegawai pegawai" + " left join pegawai.ruangan ruangan" @@ -358,4 +376,113 @@ public interface MonitoringAbsenDao extends PagingAndSortingRepository> getDataPegawaiDirektur(@Param("idUnitKerja") Integer idUnitKerja, @Param("levelJabatan") Integer levelJabatan, @Param("sublevelJabatan") Integer sublevelJabatan, @Param("listException") List listException); + + String jumPresDP = "select new Map(mj.unitKerjaPegawaiId as unitKerjaId," + + "mj.subUnitKerjaPegawaiId as subunitKerjaId," + "mj.pegawaiId as pegawaiId," + "pg.namaLengkap as nama," + + "pg.nipPns as nip," + "pg.shiftKerjaId as kelompokShiftId," + "pg.idFinger as fingerId," + + "uk.name as unitKerja) " + "from MapPegawaiJabatanToUnitKerja mj " + "left join mj.pegawai pg " + + "left join mj.unitKerjaPegawai uk " + "where mj.statusEnabled is true " + "and pg.statusEnabled is true " + + "and pg.idFinger is not null "; + + String jumPresDPUnitKerja = "and mj.unitKerjaPegawaiId = :unitKerjaId "; + + String jumPresDPSubunitKerja = "and mj.subUnitKerjaPegawaiId = :subunitKerjaId "; + + String jumPresDPPegawai = "and mj.pegawaiId = :pegawaiId "; + + String sortJumPresDP = "order by pg.nama asc"; + + @Query(jumPresDP + jumPresDPUnitKerja + jumPresDPSubunitKerja + sortJumPresDP) + public List> getDataPegawaiPresensiSubunitKerja(@Param("unitKerjaId") Integer idUnitKerja, + @Param("subunitKerjaId") Integer idSubunitKerja); + + @Query(jumPresDP + jumPresDPUnitKerja + sortJumPresDP) + public List> getDataPegawaiPresensiUnitKerja(@Param("unitKerjaId") Integer idUnitKerja); + + @Query(jumPresDP + jumPresDPPegawai + sortJumPresDP) + public List> getDataPegawaiPresensiPegawai(@Param("pegawaiId") Integer idPegawai); + + String jumPresDJb = "select new Map(mj.unitKerjaPegawaiId as unitKerjaId," + + "mj.subUnitKerjaPegawaiId as subunitKerjaId," + "mj.pegawaiId as pegawaiId," + + "jb.namaJabatan as jabatan) " + "from MapPegawaiJabatanToUnitKerja mj " + "left join mj.pegawai pg " + + "left join mj.jabatan jb " + "where mj.statusEnabled is true " + "and pg.statusEnabled is true " + + "and pg.idFinger is not null "; + + String jumPresDJbUnitKerja = "and mj.unitKerjaPegawaiId = :unitKerjaId "; + + String jumPresDJbSubunitKerja = "and mj.subUnitKerjaPegawaiId = :subunitKerjaId "; + + String jumPresDJbPegawai = "and mj.pegawaiId = :pegawaiId "; + + String sortJumPresDJb = "order by pg.nama asc"; + + @Query(jumPresDJb + jumPresDJbUnitKerja + jumPresDJbSubunitKerja + sortJumPresDJb) + public List> getDataJabatanPresensiSubunitKerja(@Param("unitKerjaId") Integer idUnitKerja, + @Param("subunitKerjaId") Integer idSubunitKerja); + + @Query(jumPresDJb + jumPresDJbUnitKerja + sortJumPresDJb) + public List> getDataJabatanPresensiUnitKerja(@Param("unitKerjaId") Integer idUnitKerja); + + @Query(jumPresDJb + jumPresDJbPegawai + sortJumPresDJb) + public List> getDataJabatanPresensiPegawai(@Param("pegawaiId") Integer idPegawai); + + String jumPresDJd = "select new Map(kl.tanggal as date," + "mj.unitKerjaPegawaiId as unitKerjaId," + + "mj.subUnitKerjaPegawaiId as subunitKerjaId," + "mj.pegawaiId as pegawaiId," + "sk.id as shiftId," + + "sk.kodeExternal as kodeShift," + "sk.namaShift as namaShift," + "sk.jamMasuk as jadwalMasuk," + + "sk.jamPulang as jadwalPulang," + "sk.waktuIstirahat as waktuIstirahat) " + + "from PegawaiJadwalKerja jkp, " + "MapPegawaiJabatanToUnitKerja mj " + "left join jkp.pegawai pg " + + "left join jkp.tanggal kl " + "left join jkp.shift sk " + "where jkp.pegawaiId = mj.pegawaiId " + + "and mj.statusEnabled is true " + "and pg.statusEnabled is true " + "and pg.idFinger is not null " + + "and to_char(kl.tanggal,'yyyy-MM-dd') between :startDate and :endDate "; + + String jumPresDJdUnitKerja = "and mj.unitKerjaPegawaiId = :unitKerjaId "; + + String jumPresDJdSubunitKerja = "and mj.subUnitKerjaPegawaiId = :subunitKerjaId "; + + String jumPresDJdPegawai = "and mj.pegawaiId = :pegawaiId "; + + String sortJumPresDJd = "order by pg.nama, kl.tanggal asc"; + + @Query(jumPresDJd + jumPresDJdUnitKerja + jumPresDJdSubunitKerja + sortJumPresDJd) + public List> getDataJadwalPresensiSubunitKerja(@Param("startDate") String startDate, + @Param("endDate") String endDate, @Param("unitKerjaId") Integer idUnitKerja, + @Param("subunitKerjaId") Integer idSubunitKerja); + + @Query(jumPresDJd + jumPresDJdUnitKerja + sortJumPresDJd) + public List> getDataJadwalPresensiUnitKerja(@Param("startDate") String startDate, + @Param("endDate") String endDate, @Param("unitKerjaId") Integer idUnitKerja); + + @Query(jumPresDJd + jumPresDJdPegawai + sortJumPresDJd) + public List> getDataJadwalPresensiPegawai(@Param("startDate") String startDate, + @Param("endDate") String endDate, @Param("pegawaiId") Integer idPegawai); + + String jumPresHab = "select new Map(kl.tanggal as date," + "mj.unitKerjaPegawaiId as unitKerjaId," + + "mj.subUnitKerjaPegawaiId as subunitKerjaId," + "mj.pegawaiId as pegawaiId," + "hab.tr_no as trNo," + + "hab.tr_time as trTime," + "hab.processtatus as procesStatus," + "hab.ip_addr as ipAddr) " + + "from MapPegawaiJabatanToUnitKerja mj, " + "Kalender kl, " + "Habsen hab " + "left join mj.pegawai pg " + + "where kl.tanggal = hab.tr_date " + "and hab.empl_code = pg.idFinger " + "and mj.statusEnabled is true " + + "and pg.statusEnabled is true " + "and pg.idFinger is not null " + "and hab.loc_code = '99999' " + + "and hab.remoteno = '99' " + "and to_char(kl.tanggal,'yyyy-MM-dd') between :startDate and :endDate "; + + String jumPresHabUnitKerja = "and mj.unitKerjaPegawaiId = :unitKerjaId "; + + String jumPresHabSubunitKerja = "and mj.subUnitKerjaPegawaiId = :subunitKerjaId "; + + String jumPresHabPegawai = "and mj.pegawaiId = :pegawaiId "; + + String sortJumPresHab = "order by pg.nama, kl.tanggal, hab.tr_time asc"; + + @Query(jumPresHab + jumPresHabUnitKerja + jumPresHabSubunitKerja + sortJumPresHab) + public List> getDataPresensiSubunitKerja(@Param("startDate") String startDate, + @Param("endDate") String endDate, @Param("unitKerjaId") Integer idUnitKerja, + @Param("subunitKerjaId") Integer idSubunitKerja); + + @Query(jumPresHab + jumPresHabUnitKerja + sortJumPresHab) + public List> getDataPresensiUnitKerja(@Param("startDate") String startDate, + @Param("endDate") String endDate, @Param("unitKerjaId") Integer idUnitKerja); + + @Query(jumPresHab + jumPresHabPegawai + sortJumPresHab) + public List> getDataPresensiPegawai(@Param("startDate") String startDate, + @Param("endDate") String endDate, @Param("pegawaiId") Integer idPegawai); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDaftarDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDaftarDao.java index addcfa68..4f51bdc3 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDaftarDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDaftarDao.java @@ -293,10 +293,11 @@ public interface PasienDaftarDao extends PagingAndSortingRepository> findRekapDiskon(@Param("periode") String periode); diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java index e169f1e7..84675cb1 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PegawaiDao.java @@ -877,7 +877,7 @@ public interface PegawaiDao extends PagingAndSortingRepository + "left join mapPegawai.unitKerjaPegawai unitKerja " + "left join mapPegawai.jabatan jabatanInternal " + "where pegawai.id = mapPegawai.pegawaiId " + "and mapPegawai.isPrimary is true " + "and mapPegawai.statusEnabled is true " + "and pegawai.idFinger = :idFinger " - + "and pegawai.statusEnabled is not false " + "order by pegawai.nama asc") + + "and pegawai.statusEnabled is true " + "order by pegawai.nama asc") public Map getPegawaiToMonitoringAbsen(@Param("idFinger") String idFinger); @Query("select new map(pegawai.nipPns as nip, " + "pegawai.namaLengkap as nama, " diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PendapatanDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PendapatanDao.java index 9c4b11b5..e4c34fcb 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PendapatanDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PendapatanDao.java @@ -29,7 +29,7 @@ public interface PendapatanDao extends PagingAndSortingRepository jumlahKehadiranRev(Integer idPegawai, String startDate, String endDate); + Map jumlahKehadiran(Integer idUnitKerja, Integer idSubunitKerja, Integer idPegawai, Long startDate, + Long endDate); + Map jumlahKehadiran(Integer unitKerjaId, Integer subUnitKerjaId, Integer idPegawai, String startDate, String endDate); diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MonitoringAbsenServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MonitoringAbsenServiceImpl.java index 3e5ecda5..fc05e4b2 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MonitoringAbsenServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MonitoringAbsenServiceImpl.java @@ -5,12 +5,12 @@ import java.math.RoundingMode; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.Month; import java.time.ZoneId; import java.util.ArrayList; import java.util.Calendar; -import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -29,6 +29,7 @@ import com.jasamedika.medifirst2000.dao.FactorRateKelompokShiftDao; import com.jasamedika.medifirst2000.dao.HabsenDao; import com.jasamedika.medifirst2000.dao.IndekKinerjaDao; import com.jasamedika.medifirst2000.dao.JabatanDao; +import com.jasamedika.medifirst2000.dao.KalenderDao; import com.jasamedika.medifirst2000.dao.KelompokTransaksiDao; import com.jasamedika.medifirst2000.dao.KomponenHargaDao; import com.jasamedika.medifirst2000.dao.KomponenIndexDao; @@ -214,6 +215,9 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon @Autowired private MapPegawaiJabatanToUnitKerjaDao mapPegawaiJabatanToUnitKerjaDao; + @Autowired + private KalenderDao kalenderDao; + @Override public Long reduceTime(Date jamAbsensi, Date jamJadwal) { Long diffMinutes = (long) 0; @@ -1322,25 +1326,146 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon return result; } + public Date addOrMinDays(Long date, Integer param) { + Date in = new Date(date); + LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault()); + if (param < 0) { + LocalDateTime out = ldt.minusDays(Math.abs(param)); + return Date.from(out.atZone(ZoneId.systemDefault()).toInstant()); + } else { + LocalDateTime out = ldt.plusDays(param); + return Date.from(out.atZone(ZoneId.systemDefault()).toInstant()); + } + } + + @Override + @Transactional(readOnly = true) + public Map jumlahKehadiran(Integer idUnitKerja, Integer idSubunitKerja, Integer idPegawai, + Long startDate, Long endDate) { + + /** + * Unfinished development + */ + + Map result = new HashMap<>(); + List> data = new ArrayList<>(); + List> rawData = new ArrayList<>(); + List> rawDataPegawai = new ArrayList<>(); + List> rawDataJabatan = new ArrayList<>(); + List> rawDataJadwal = new ArrayList<>(); + List> rawDataPresensi = new ArrayList<>(); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + + List listIdShiftMalam = splitDataSettingDatafixed("daftarShiftMalam"); + + String prevTglAwal = df.format(addOrMinDays(startDate, -1)); + String prevTglAkhir = df.format(addOrMinDays(endDate, 1)); + if (CommonUtil.isNotNullOrEmpty(idUnitKerja) && CommonUtil.isNotNullOrEmpty(idSubunitKerja) + && CommonUtil.isNullOrEmpty(idPegawai)) { + rawDataPegawai = monitoringAbsenDao.getDataPegawaiPresensiSubunitKerja(idUnitKerja, idSubunitKerja); + rawDataJabatan = monitoringAbsenDao.getDataJabatanPresensiSubunitKerja(idUnitKerja, idSubunitKerja); + rawDataJadwal = monitoringAbsenDao.getDataJadwalPresensiSubunitKerja(prevTglAwal, prevTglAkhir, idUnitKerja, + idSubunitKerja); + rawDataPresensi = monitoringAbsenDao.getDataPresensiSubunitKerja(prevTglAwal, prevTglAkhir, idUnitKerja, + idSubunitKerja); + } else if (CommonUtil.isNotNullOrEmpty(idUnitKerja) && CommonUtil.isNullOrEmpty(idSubunitKerja) + && CommonUtil.isNullOrEmpty(idPegawai)) { + rawDataPegawai = monitoringAbsenDao.getDataPegawaiPresensiUnitKerja(idUnitKerja); + rawDataJabatan = monitoringAbsenDao.getDataJabatanPresensiUnitKerja(idUnitKerja); + rawDataJadwal = monitoringAbsenDao.getDataJadwalPresensiUnitKerja(prevTglAwal, prevTglAkhir, idUnitKerja); + rawDataPresensi = monitoringAbsenDao.getDataPresensiUnitKerja(prevTglAwal, prevTglAkhir, idUnitKerja); + } else if (CommonUtil.isNullOrEmpty(idUnitKerja) && CommonUtil.isNullOrEmpty(idSubunitKerja) + && CommonUtil.isNotNullOrEmpty(idPegawai)) { + rawDataPegawai = monitoringAbsenDao.getDataPegawaiPresensiPegawai(idPegawai); + rawDataJabatan = monitoringAbsenDao.getDataJabatanPresensiPegawai(idPegawai); + rawDataJadwal = monitoringAbsenDao.getDataJadwalPresensiPegawai(prevTglAwal, prevTglAkhir, idPegawai); + rawDataPresensi = monitoringAbsenDao.getDataPresensiPegawai(prevTglAwal, prevTglAkhir, idPegawai); + } + + List> rawDataKalender = kalenderDao.getTanggalFromPeriodicParameter(prevTglAwal, + prevTglAkhir); + if (CommonUtil.isNotNullOrEmpty(rawDataKalender)) { + for (Map rawKal : rawDataKalender) { + for (Map rawPeg : rawDataPegawai) { + Map rawMap = new HashMap<>(); + rawMap.putAll(rawKal); + rawMap.putAll(rawPeg); + rawData.add(rawMap); + } + } + } + + for (Map rawMap : rawData) { + String jabatan = ""; + for (Map rawJab : rawDataJabatan) { + if (rawMap.get("unitKerjaId").equals(rawJab.get("unitKerjaId")) + && rawMap.get("pegawaiId").equals(rawJab.get("pegawaiId"))) { + if (CommonUtil.isNullOrEmpty(jabatan)) { + jabatan += rawJab.get("jabatan").toString(); + } else { + jabatan += "/ " + rawJab.get("jabatan").toString(); + } + } + } + rawMap.put("jabatan", jabatan); + } + + if (CommonUtil.isNotNullOrEmpty(rawDataJadwal)) { + for (Map rawMap : rawData) { + for (Map rawJad : rawDataJadwal) { + if (rawMap.get("unitKerjaId").equals(rawJad.get("unitKerjaId")) + && rawMap.get("pegawaiId").equals(rawJad.get("pegawaiId")) + && rawMap.get("date").equals(rawJad.get("date"))) { + rawMap.putAll(rawJad); + } + } + } + } else if (CommonUtil.isNullOrEmpty(rawDataJadwal)) { + for (Map rawMap : rawData) { + rawMap.put("shiftId", null); + rawMap.put("kodeShift", "-"); + rawMap.put("namaShift", "-"); + rawMap.put("jadwalMasuk", "-"); + rawMap.put("jadwalPulang", "-"); + rawMap.put("waktuIstirahat", "-"); + } + } + + if (CommonUtil.isNotNullOrEmpty(rawDataPresensi)) { + for (Map rawMap : rawData) { + if (!rawMap.get("strDate").equals(prevTglAwal) && !rawMap.get("strDate").equals(prevTglAkhir)) { + data.add(rawMap); + } + } + } else if (CommonUtil.isNullOrEmpty(rawDataPresensi)) { + + } + + result.put("data", data); + + return result; + } + @Override @Transactional(readOnly = true) public Map jumlahKehadiran(Integer unitKerjaId, Integer subUnitKerjaId, Integer idPegawai, String startDate, String endDate) { Map result = new HashMap<>(); List> listRs = new ArrayList>(); + List> listPegawaiMonitoring = new ArrayList<>(); - List listIdPegawai = new ArrayList<>(); if (CommonUtil.isNotNullOrEmpty(idPegawai)) { - listIdPegawai.add(idPegawai); + listPegawaiMonitoring = monitoringAbsenDao.findPegawaiAktifDanKaryawan(idPegawai); } else if (CommonUtil.isNullOrEmpty(idPegawai) && CommonUtil.isNotNullOrEmpty(subUnitKerjaId)) { - listIdPegawai = monitoringAbsenDao.findPegawaiaAktifDanKaryawanByUnitKerjaAndSubUnitKerja(unitKerjaId, - subUnitKerjaId); + listPegawaiMonitoring = monitoringAbsenDao + .findPegawaiAktifDanKaryawanByUnitKerjaAndSubUnitKerja(unitKerjaId, subUnitKerjaId); } else if (CommonUtil.isNullOrEmpty(idPegawai) && CommonUtil.isNullOrEmpty(subUnitKerjaId)) { - listIdPegawai = monitoringAbsenDao.findPegawaiaAktifDanKaryawanByUnitKerja(unitKerjaId); + listPegawaiMonitoring = monitoringAbsenDao.findPegawaiAktifDanKaryawanByUnitKerja(unitKerjaId); } - for (Integer id : listIdPegawai) { - String idFinger = pegawaiDao.getidFinger(id); + List> listKomponenJadwal = monitoringAbsenDao.findKalender(startDate, endDate); + for (Map pegawaiMonitoring : listPegawaiMonitoring) { + String idFinger = pegawaiMonitoring.get("fingerId").toString(); Map rsMap = new HashMap(); List> listkehadiran = new ArrayList>(); Integer harikerja = 0; @@ -1368,12 +1493,7 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon DateFormat sdf = new SimpleDateFormat("HH.mm"); DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); DateFormat stf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Map pegawaiMonitoring = new HashMap<>(); - if (CommonUtil.isNotNullOrEmpty(idFinger)) { - pegawaiMonitoring = pegawaiDao.getPegawaiToMonitoringAbsen(idFinger); - } - List> listKomponenJadwal = monitoringAbsenDao.findKalender(startDate, endDate); for (Map data : listKomponenJadwal) { String alasanCuti = ""; // put everything data needs @@ -1381,7 +1501,7 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon data.putAll(pegawaiMonitoring); } Map listJadwal = monitoringAbsenDao.findJadwalPegawai(idFinger, - df.format((Date) data.get("tanggal"))); + data.get("tanggal2").toString()); if (CommonUtil.isNotNullOrEmpty(listJadwal)) { data.putAll(listJadwal); if (listJadwal.get("kodeShift").equals("TL")) { @@ -1397,7 +1517,7 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon String jamPulang = (String) data.get("jamPulang"); String tgl = df.format(tanggal); data.put("dates", tanggal.getTime()); - data.put("idPegawai", id); + data.put("idPegawai", pegawaiMonitoring.get("pegawaiId")); data.put("tanggal", data.get("tgl").toString() + "-" + data.get("bulan").toString() + "-" + data.get("tahun").toString()); @@ -1409,9 +1529,10 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon sakit++; } if (!((String) data.get("namaShift")).equals("Libur")) { - alasanCuti = this.wfh(id, tgl, tanggal, tglRilisFiturPresensi); + alasanCuti = this.wfh(Integer.valueOf(pegawaiMonitoring.get("pegawaiId").toString()), tgl, + tanggal, tglRilisFiturPresensi); if (CommonUtil.isNullOrEmpty(alasanCuti)) { - alasanCuti = this.cuti(id, tgl); + alasanCuti = this.cuti(Integer.valueOf(pegawaiMonitoring.get("pegawaiId").toString()), tgl); } } } @@ -1710,7 +1831,9 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon } // Ambil data monitoringAbsen MonitoringAbsen monitoringAbsen = monitoringAbsenDao - .findByIdPegawaiAndTanggalMonitoringAbsen(id, data.get("tanggal").toString()); + .findByIdPegawaiAndTanggalMonitoringAbsen( + Integer.valueOf(pegawaiMonitoring.get("pegawaiId").toString()), + data.get("tanggal").toString()); if (CommonUtil.isNotNullOrEmpty(monitoringAbsen)) { if (CommonUtil.isNotNullOrEmpty(monitoringAbsen.getAlasan())) { alasanCuti += monitoringAbsen.getAlasan(); @@ -1919,7 +2042,8 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon data.put("terlambat", (long) 0); } // Ambil data monitoringAbsen - MonitoringAbsen monitoringAbsen = monitoringAbsenDao.findByIdPegawaiAndTanggalMonitoringAbsen(id, + MonitoringAbsen monitoringAbsen = monitoringAbsenDao.findByIdPegawaiAndTanggalMonitoringAbsen( + Integer.valueOf(pegawaiMonitoring.get("pegawaiId").toString()), data.get("tanggal").toString()); if (CommonUtil.isNotNullOrEmpty(monitoringAbsen)) { if (CommonUtil.isNotNullOrEmpty(monitoringAbsen.getAlasan())) { @@ -2016,13 +2140,15 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon rsMap.put("menitPulangAwal", jumlahPulangAwal); rsMap.put("jumlahCountPulangAwal", jumlahCountPulangAwal); rsMap.put("jumlahHariKerja", harikerja); - rsMap.put("idPegawai", id); + rsMap.put("idPegawai", Integer.valueOf(pegawaiMonitoring.get("pegawaiId").toString())); rsMap.put("mangkir", mangkir); rsMap.put("hariKerja", hariKerja); rsMap.put("listkehadiran", listkehadiran); - listRs.addAll((Collection>) rsMap.get("listkehadiran")); + listRs.addAll(listkehadiran); + result.putAll(rsMap); } + result.put("listkehadiran", listRs); return result; diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/ReportServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/ReportServiceImpl.java index 1499f291..abca9a6c 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/ReportServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/ReportServiceImpl.java @@ -427,9 +427,10 @@ public class ReportServiceImpl extends BaseVoServiceImpl implements ReportServic String endDate) { Map temp = new HashMap(); List> listkehadiran = new ArrayList>(); - List listId = monitoringAbsenDao.findPegawaiaAktifDanKaryawanByUnitKerja(idRuangan); - for (Integer idPegawai : listId) { - temp = monitoringAbsenService.rekapitulasiKehadiranByPegawai(idPegawai, startDate, endDate); + List> listPegawai = monitoringAbsenDao.findPegawaiAktifDanKaryawanByUnitKerja(idRuangan); + for (Map pegawai : listPegawai) { + temp = monitoringAbsenService.rekapitulasiKehadiranByPegawai( + Integer.valueOf(pegawai.get("pegawaiId").toString()), startDate, endDate); if (CommonUtil.isNotNullOrEmpty(temp)) { listkehadiran.add(temp); } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MonitoringAbsen.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MonitoringAbsen.java index b9a34560..fdf38bb9 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MonitoringAbsen.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MonitoringAbsen.java @@ -1,10 +1,14 @@ package com.jasamedika.medifirst2000.entities; +import java.util.Date; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; import javax.validation.constraints.NotNull; import com.jasamedika.medifirst2000.base.BaseTransaction; @@ -68,6 +72,11 @@ public class MonitoringAbsen extends BaseTransaction { @Column(name = "tanggal", nullable = false) private String tanggal; + @Caption(value = "Tanggal Presensi") + @Column(name = "tglpresensi", nullable = false) + @Temporal(TemporalType.DATE) + private Date tglPresensi; + // Untuk Absensi verifikasi @ManyToOne @JoinColumn(name = "verifikasiUnitKerjaFK") @@ -105,7 +114,7 @@ public class MonitoringAbsen extends BaseTransaction { @Caption(value = "Status Atribut Lengkap") @Column(name = "isatributlengkap", nullable = true) private Boolean isAtributLengkap; - + @Caption(value = "Status Verifikasi") @Column(name = "isverifikasi", nullable = true) private Boolean isVerifikasi; @@ -214,6 +223,14 @@ public class MonitoringAbsen extends BaseTransaction { this.tanggal = tanggal; } + public Date getTglPresensi() { + return tglPresensi; + } + + public void setTglPresensi(Date tglPresensi) { + this.tglPresensi = tglPresensi; + } + public StrukVerifikasi getStrukVerifikasi() { return strukVerifikasi; } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MonitoringAbsenVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MonitoringAbsenVO.java index 0ba0a590..4677ccc0 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MonitoringAbsenVO.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MonitoringAbsenVO.java @@ -1,5 +1,7 @@ package com.jasamedika.medifirst2000.vo; +import java.util.Date; + import com.jasamedika.medifirst2000.base.vo.BaseTransactionVO; import com.jasamedika.medifirst2000.helper.Caption; @@ -48,6 +50,9 @@ public class MonitoringAbsenVO extends BaseTransactionVO { @Caption(value = "Tanggal") private String tanggal; + @Caption(value = "Tanggal Presensi") + private Date tglPresensi; + @Caption(value = "Struk Verifikasi Unit Kerja") private StrukVerifikasiVO strukVerifikasi; @@ -193,6 +198,14 @@ public class MonitoringAbsenVO extends BaseTransactionVO { this.tanggal = tanggal; } + public Date getTglPresensi() { + return tglPresensi; + } + + public void setTglPresensi(Date tglPresensi) { + this.tglPresensi = tglPresensi; + } + public StrukVerifikasiVO getStrukVerifikasi() { return strukVerifikasi; } diff --git a/jasamedika-domain/src/main/resources/hibernate.cfg.xml b/jasamedika-domain/src/main/resources/hibernate.cfg.xml index 4686e2e6..4ccc0b1c 100644 --- a/jasamedika-domain/src/main/resources/hibernate.cfg.xml +++ b/jasamedika-domain/src/main/resources/hibernate.cfg.xml @@ -698,5 +698,6 @@ + diff --git a/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java b/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java index 83d2eec5..620bc116 100644 --- a/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java +++ b/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java @@ -4628,25 +4628,25 @@ public class ReportingController extends LocaleController @RequestParam(value = "subUnitKerja", required = false) Integer subUnitKerja) { List> listkehadiran = new ArrayList>(); Map kehadiran = new HashMap(); - + if (CommonUtil.isNotNullOrEmpty(subUnitKerja) && CommonUtil.isNullOrEmpty(idPegawai)) { List listId = monitoringAbsenDao.findPegawaiaAktifDanKaryawanByUnitKerjaAndSubUnitKerja(unitKerja, subUnitKerja); for (Integer id : listId) { - kehadiran = monitoringAbsenService.jumlahKehadiran(id, startDate, endDate); + kehadiran = monitoringAbsenService.jumlahKehadiran(null, null, id, startDate, endDate); listkehadiran.addAll((List>) kehadiran.get("listkehadiran")); } } else if (CommonUtil.isNullOrEmpty(subUnitKerja) && CommonUtil.isNullOrEmpty(idPegawai)) { List listId = monitoringAbsenDao.findPegawaiaAktifDanKaryawanByUnitKerja(unitKerja); for (Integer id : listId) { - kehadiran = monitoringAbsenService.jumlahKehadiran(id, startDate, endDate); + kehadiran = monitoringAbsenService.jumlahKehadiran(null, null, id, startDate, endDate); listkehadiran.addAll((List>) kehadiran.get("listkehadiran")); } } else if (CommonUtil.isNotNullOrEmpty(idPegawai)) { - kehadiran = monitoringAbsenService.jumlahKehadiran(idPegawai, startDate, endDate); + kehadiran = monitoringAbsenService.jumlahKehadiran(null, null, idPegawai, startDate, endDate); listkehadiran.addAll((List>) kehadiran.get("listkehadiran")); } - + if (CommonUtil.isNotNullOrEmpty(listkehadiran)) { Map temp = listkehadiran.get(0); m.addObject("dataSource", listkehadiran); @@ -4672,7 +4672,7 @@ public class ReportingController extends LocaleController if (format != null && !format.isEmpty()) { m.addObject("format", format); } - + return m; } diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java index b525f04a..6db58000 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java @@ -2688,21 +2688,6 @@ public class SdmController extends LocaleController { } } - @RequestMapping(value = "/get-kehadiran-rev/{idPegawai}/{startDate}/{endDate}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity> findKehadiranRev(@PathVariable("idPegawai") Integer idPegawai, - @PathVariable("startDate") String startDate, @PathVariable("endDate") String endDate, - HttpServletRequest request) { - Map result = null; - try { - result = monitoringAbsenService.jumlahKehadiranRev(idPegawai, startDate, endDate); - mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, - getMessage(MessageResource.LABEL_SUCCESS, request)); - } catch (Exception e) { - e.printStackTrace(); - } - return RestUtil.getJsonResponse(result, HttpStatus.OK); - } - @RequestMapping(value = "/save-monitoring-absen", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> saveMonitoringAbsen(@Valid @RequestBody MonitoringAbsenCustomVO vo, HttpServletRequest request) throws ParseException { @@ -2738,6 +2723,37 @@ public class SdmController extends LocaleController { return RestUtil.getJsonResponse(result, HttpStatus.OK); } + @RequestMapping(value = "/get-presensi-kehadiran", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getPresensiKehadiran(HttpServletRequest request, + @RequestParam(value = "unitKerjaId", required = false) Integer idUnitKerja, + @RequestParam(value = "subunitKerjaId", required = false) Integer idSubunitKerja, + @RequestParam(value = "pegawaiId", required = false) Integer idPegawai, + @RequestParam(value = "startDate", required = false) Long startDate, + @RequestParam(value = "endDate", required = false) Long endDate) { + try { + Map result = monitoringAbsenService.jumlahKehadiran(idUnitKerja, idSubunitKerja, idPegawai, + startDate, endDate); + if (result != null) { + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + + return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); + } else { + return RestUtil.getJsonResponse(result, HttpStatus.NOT_FOUND, mapHeaderMessage); + } + } catch (ServiceVOException e) { + LOGGER.error("Got exception {} when get presensi kehadiran", e.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, e.getMessage()); + + return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage); + } catch (JpaSystemException jse) { + LOGGER.error("Got exception {} when get presensi kehadiran", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + @RequestMapping(value = "/get-kehadiran/{idPegawai}/{startDate}/{endDate}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> findKehadiran(@PathVariable("idPegawai") Integer idPegawai, @PathVariable("startDate") String startDate, @PathVariable("endDate") String endDate,