ronaldkwandy

Untitled

Feb 7th, 2020
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.29 KB | None | 0 0
  1. package id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.suratperintahlembur.services;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import javax.transaction.Transactional;
  7.  
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10.  
  11. import id.co.sofcograha.gajiidapi.base.exceptions.BusinessException;
  12. import id.co.sofcograha.gajiidapi.base.extendables.FreeFormService;
  13. import id.co.sofcograha.gajiidapi.base.utils.TimeUtil;
  14. import id.co.sofcograha.gajiidapi.base.utils.VersionUtil;
  15. import id.co.sofcograha.gajiidapi.domain.hris.HRISAuthorization;
  16. import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.datasurat.entities.DataSurat;
  17. import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.datasurat.services.DataSuratService;
  18. import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.jadwalkerja.entities.JadwalKerja;
  19. import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.jadwalkerja.services.JadwalKerjaService;
  20. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.suratperintahlembur.entities.TrxSuratPerintahLembur;
  21. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.suratperintahlembur.entities.TrxSuratPerintahLemburDetail;
  22. import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.entities.Employee;
  23. import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.services.EmployeeService;
  24.  
  25. @Service
  26. public class TrxCompleteSuratPerintahLemburService extends FreeFormService {
  27.  
  28.     @Autowired private TrxSuratPerintahLemburService trxSuratPerintahLemburService;
  29.     @Autowired private TrxSuratPerintahLemburDetailService trxSuratPerintahLemburDetailService;
  30.     @Autowired private DataSuratService dataSuratService;
  31.     @Autowired private EmployeeService employeeService;
  32.     @Autowired private HRISAuthorization hrisAuthorization;
  33.     @Autowired private JadwalKerjaService jadwalKerjaService;
  34.    
  35.     private void validateTrxSuratPerintahLembur(TrxSuratPerintahLembur trxSuratPerintahLembur, List<TrxSuratPerintahLemburDetail> trxSuratPerintahLemburDetails) {
  36.         // val valid employee
  37.         List<Employee> employeeList = new ArrayList<Employee>();
  38.         for (TrxSuratPerintahLemburDetail trxSuratPerintahLemburDetail : trxSuratPerintahLemburDetails) {
  39.             Employee employee = employeeService.get(trxSuratPerintahLemburDetail.getEmployee().getId());
  40.             if (employee != null) {
  41.                 employeeList.add(employee);
  42.             } else {
  43.                 batchError("trxSuratPerintahLemburDetail.employee.not.found", trxSuratPerintahLemburDetail.getEmployee().getId());
  44.             }
  45.         }
  46.         throwBatchError();
  47.  
  48.         for (Employee employee: employeeList) {
  49.             JadwalKerja jadwalKerja = jadwalKerjaService.findJadwalKerja(employee.getId(), trxSuratPerintahLembur.getTanggalLembur());
  50.             if (jadwalKerja == null) {
  51.                 batchError("trxSuratPerintahLembur.jadwalKerja.not.found", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getTanggalLembur(), "dd/MM/yyyy"));
  52.                 continue;
  53.             }
  54.            
  55.             // 1a. Cek periode jam lembur harus di luar jadwal jam kerja karyawan. -->Panggil function spHatGetJadwalKerja untuk mendapatkan tanggal & jam kerja karyawan
  56.             if (TimeUtil.isDateOverlap(jadwalKerja.getJadwalTimestampMasuk(), jadwalKerja.getJadwalTimestampPulang(), trxSuratPerintahLembur.getAwalLembur(), trxSuratPerintahLembur.getAkhirLembur())) {
  57.                 batchError("trxSuratPerintahLembur.jadwalLembur.overlap", TimeUtil.convertDateToString(jadwalKerja.getJadwalTimestampMasuk(), "dd/MM/yyyy"), TimeUtil.convertDateToString(jadwalKerja.getJadwalTimestampPulang(), "dd/MM/yyyy"));
  58.                 continue;
  59.             }
  60.            
  61.             // 1b. If tgl masuk <> tgl lembur OR tgl pulang <> tgl lembur :
  62.             //     - cek periode lembur tidak boleh overlap dgn jadwal kerja pada Tgl Masuk Periode Lembur
  63.             //     - cek periode lembur tidak boleh overlap dgn jadwal kerja pada Tgl Pulang Periode Lembur
  64.             JadwalKerja jadwalKerjaAwalLembur = jadwalKerjaService.findJadwalKerja(employee.getId(), trxSuratPerintahLembur.getAwalLembur());
  65.             if (jadwalKerjaAwalLembur == null) {
  66.                 batchError("trxSuratPerintahLembur.jadwalKerja.not.found", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAwalLembur(), "dd/MM/yyyy"));
  67.                 continue;
  68.             }
  69.             if (TimeUtil.isAfterDatetime(trxSuratPerintahLembur.getAwalLembur(), jadwalKerjaAwalLembur.getJadwalTimestampMasuk()) && TimeUtil.isBeforeDatetime(trxSuratPerintahLembur.getAwalLembur(), jadwalKerjaAwalLembur.getJadwalTimestampPulang())) {
  70.                 batchError("trxSuratPerintahLembur.jadwalKerja.overlap", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAwalLembur(), "dd/MM/yyyy"));
  71.                 continue;
  72.             }
  73.            
  74.             JadwalKerja jadwalKerjaAkhirLembur = jadwalKerjaService.findJadwalKerja(employee.getId(), trxSuratPerintahLembur.getAkhirLembur());
  75.             if (jadwalKerjaAkhirLembur == null) {
  76.                 batchError("trxSuratPerintahLembur.jadwalKerja.not.found", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAkhirLembur(), "dd/MM/yyyy"));
  77.                 continue;
  78.             }
  79.             if (TimeUtil.isAfterDatetime(trxSuratPerintahLembur.getAkhirLembur(), jadwalKerjaAkhirLembur.getJadwalTimestampMasuk()) && TimeUtil.isBeforeDatetime(trxSuratPerintahLembur.getAkhirLembur(), jadwalKerjaAkhirLembur.getJadwalTimestampPulang())) {
  80.                 batchError("trxSuratPerintahLembur.jadwalKerja.overlap", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAkhirLembur(), "dd/MM/yyyy"));
  81.                 continue;
  82.             }
  83.            
  84.             // 2. Cek Jumlah Jam Istirahat harus < jumlah jam lembur       
  85.             //    Jumlah jam lembur = (*8) - (*6) →perhatikan Tanggal Periode Lemburnya
  86.             if (trxSuratPerintahLembur.getJamIstirahat() > trxSuratPerintahLembur.getJamLembur()) {
  87.                 batchError("trxSuratPerintahLembur.jamIstirahat.invalid", employee.getName(), trxSuratPerintahLembur.getJamIstirahat().doubleValue(), trxSuratPerintahLembur.getJamLembur().doubleValue());
  88.                 continue;
  89.             }
  90.            
  91.             // 3. Batasi agar dalam 1 tgl lembur, untuk 1 karyawan, hanya bisa input 2x SPL dan cek agar Jam lemburnya tidak boleh overlap.    
  92.             //    (cek di tabel Saldo Data Surat dilakukan, karena ada kemungkinan data tsb ada pembatalan surat.)
  93.             List<TrxSuratPerintahLembur> overlapSuratPerintahLemburList = trxSuratPerintahLemburService.searchOverlappedSuratPerintahLembur(employee.getId(), trxSuratPerintahLembur.getAwalLembur(), trxSuratPerintahLembur.getAkhirLembur());
  94.             if (overlapSuratPerintahLemburList.size() > 0) {
  95.                 batchError("trxSuratPerintahLembur.suratPerintahLembur.overlap", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAwalLembur(), "dd/MM/yyyy"), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAkhirLembur(), "dd/MM/yyyy"));
  96.                 continue;
  97.             }
  98.            
  99.             List<TrxSuratPerintahLembur> existSuratPerintahLemburList = trxSuratPerintahLemburService.searchExistSuratPerintahLembur(employee.getId(), trxSuratPerintahLembur.getAwalLembur(), trxSuratPerintahLembur.getAkhirLembur());
  100.             if (existSuratPerintahLemburList.size() == 2) {
  101.                 batchError("trxSuratPerintahLembur.suratPerintahLembur.max", employee.getName(), 2D);
  102.                 continue;
  103.             }
  104.            
  105.             List<DataSurat> overlapDataSuratTugasKaryawanList = dataSuratService.getExistingSurat(employee, trxSuratPerintahLembur.getAwalLembur(), trxSuratPerintahLembur.getAkhirLembur());
  106.             if (overlapDataSuratTugasKaryawanList.size() > 0) {
  107.                 batchError("trxSuratPerintahLembur.dataSurat.overlap", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAwalLembur(), "dd/MM/yyyy"), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAkhirLembur(), "dd/MM/yyyy"));
  108.                 continue;
  109.             }          
  110.            
  111.             // 6. Cek Admin Data Absensi per Karyawan + detailnya untuk tgl SPL karyawan tsb, jika field FlagSudahProsesPayroll terisi salah satu saja  
  112.             //    (lihat di File Relasi sheet Admin), maka tidak bisa input SPL baru untuk tgl tsb.
  113.             //    Misal Data Absensi tgl 1 Juli sudah diproses tunjangan absensi, maka user tidak bisa lagi input SPL baru untuk tgl 1 Juli.
  114.             hrisAuthorization.valKaryawanBlmProsesPayrollAbsensi(employee, trxSuratPerintahLembur.getTanggalLembur(), trxSuratPerintahLembur.getTanggalLembur());
  115.            
  116.             wrapBatchErrors();
  117.         }
  118.     }
  119.  
  120.     @Transactional
  121.     public TrxSuratPerintahLembur add(String approvalDescription, TrxSuratPerintahLembur trxSuratPerintahLembur, List<TrxSuratPerintahLemburDetail> trxSuratPerintahLemburDetails) {
  122.         valTrxSuratPerintahLembur(trxSuratPerintahLembur);
  123.         valDetailList(trxSuratPerintahLemburDetails);
  124.         throwBatchError();
  125.        
  126.         validateTrxSuratPerintahLembur(trxSuratPerintahLembur, trxSuratPerintahLemburDetails);
  127.         throwMultiBatchError();
  128.        
  129.         trxSuratPerintahLembur = trxSuratPerintahLemburService.add(trxSuratPerintahLembur, approvalDescription);
  130.         addDetails(trxSuratPerintahLembur, trxSuratPerintahLemburDetails);
  131.        
  132.         return trxSuratPerintahLembur;
  133.     }
  134.  
  135.     @Transactional
  136.     protected void addDetails(TrxSuratPerintahLembur trxSuratPerintahLembur, List<TrxSuratPerintahLemburDetail> trxSuratPerintahLemburDetails) {
  137.         for (TrxSuratPerintahLemburDetail trxSuratPerintahLemburDetail : trxSuratPerintahLemburDetails) {
  138.             trxSuratPerintahLemburDetail.setTrxSuratPerintahLembur(trxSuratPerintahLembur);
  139.             trxSuratPerintahLemburDetailService.add(trxSuratPerintahLemburDetail);
  140.         }
  141.     }
  142.    
  143.     @Transactional
  144.     public TrxSuratPerintahLembur edit(String approvalDescription, TrxSuratPerintahLembur trxSuratPerintahLembur, List<TrxSuratPerintahLemburDetail> trxSuratPerintahLemburDetails) {
  145.         valTrxSuratPerintahLembur(trxSuratPerintahLembur);
  146.         valDetailList(trxSuratPerintahLemburDetails);
  147.         throwBatchError();
  148.        
  149.         validateTrxSuratPerintahLembur(trxSuratPerintahLembur, trxSuratPerintahLemburDetails);
  150.         throwMultiBatchError();
  151.        
  152.         trxSuratPerintahLembur = trxSuratPerintahLemburService.edit(trxSuratPerintahLembur);
  153.         editDetails(trxSuratPerintahLembur, trxSuratPerintahLemburDetails);
  154.        
  155.         return trxSuratPerintahLembur;
  156.     }
  157.  
  158.     @Transactional
  159.     protected void editDetails(TrxSuratPerintahLembur trxSuratPerintahLembur, List<TrxSuratPerintahLemburDetail> trxSuratPerintahLemburDetails) {
  160.         List<TrxSuratPerintahLemburDetail> fromDbTrxSuratPerintahLemburDetails = trxSuratPerintahLemburDetailService.findByTrxSuratPerintahLembur(trxSuratPerintahLembur);
  161.         for (TrxSuratPerintahLemburDetail fromDb : fromDbTrxSuratPerintahLemburDetails) {
  162.             trxSuratPerintahLemburDetailService.delete(fromDb.getId(), fromDb.getVersion(), trxSuratPerintahLembur.getVersion(), TrxSuratPerintahLemburDetail.class);
  163.         }
  164.         addDetails(trxSuratPerintahLembur, fromDbTrxSuratPerintahLemburDetails);
  165.     }
  166.  
  167.     @Transactional
  168.     public void delete(String id, Long version) {
  169.         valIdVersionRequired(id, version);
  170.         valRootVersion(id, version);
  171.         throwBatchError();
  172.        
  173.         TrxSuratPerintahLembur trxSuratPerintahLembur = trxSuratPerintahLemburService.get(id);     
  174.         List<TrxSuratPerintahLemburDetail> fromDbTrxSuratPerintahLemburDetails = trxSuratPerintahLemburDetailService.findByTrxSuratPerintahLembur(trxSuratPerintahLembur);
  175.         for (TrxSuratPerintahLemburDetail trxSuratPerintahLemburDetail : fromDbTrxSuratPerintahLemburDetails) {
  176.             trxSuratPerintahLemburDetailService.delete(trxSuratPerintahLemburDetail.getId(), trxSuratPerintahLemburDetail.getVersion(), trxSuratPerintahLembur.getVersion(), TrxSuratPerintahLemburDetail.class);
  177.         }
  178.         throwMultiBatchError();
  179.        
  180.         trxSuratPerintahLemburService.delete(trxSuratPerintahLembur.getId(), trxSuratPerintahLembur.getVersion(), TrxSuratPerintahLembur.class);
  181.     }
  182.    
  183.     private void valTrxSuratPerintahLembur(TrxSuratPerintahLembur trxSuratPerintahLembur) {
  184.         if (trxSuratPerintahLembur == null) {
  185.             batchError("trxSuratPerintahLembur.no.data");
  186.         }
  187.     }
  188.    
  189.     private void valDetailList(List<TrxSuratPerintahLemburDetail> detailList) {
  190.         if (detailList == null || detailList.isEmpty()) {
  191.             batchError("trxSuratPerintahLembur.no.detail");
  192.         }
  193.     }
  194.    
  195.     protected void valIdVersionRequired(String id, Long version) {
  196.         if (id == null || version == null) {
  197.             throw new BusinessException("data.require.id.and.version");
  198.         }
  199.     }
  200.    
  201.     protected void valRootVersion(String id, Long version) {
  202.         valEntityExists(id);
  203.         TrxSuratPerintahLembur dbEntity = trxSuratPerintahLemburService.find(id).orElse(null);
  204.         VersionUtil.check(version, dbEntity.getVersion());
  205.     }
  206.    
  207.     protected void valEntityExists(String id) {
  208.         if (!trxSuratPerintahLemburService.exists(id)) {
  209.             throw new BusinessException("data.not.found", TrxSuratPerintahLembur.class.getSimpleName(), id);
  210.         }
  211.     }
  212. }
Advertisement
Add Comment
Please, Sign In to add comment