Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.suratperintahlembur.services;
- import java.util.ArrayList;
- import java.util.List;
- import javax.transaction.Transactional;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import id.co.sofcograha.gajiidapi.base.exceptions.BusinessException;
- import id.co.sofcograha.gajiidapi.base.extendables.FreeFormService;
- import id.co.sofcograha.gajiidapi.base.utils.TimeUtil;
- import id.co.sofcograha.gajiidapi.base.utils.VersionUtil;
- import id.co.sofcograha.gajiidapi.domain.hris.HRISAuthorization;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.datasurat.entities.DataSurat;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.datasurat.services.DataSuratService;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.jadwalkerja.entities.JadwalKerja;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.jadwalkerja.services.JadwalKerjaService;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.suratperintahlembur.entities.TrxSuratPerintahLembur;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.suratperintahlembur.entities.TrxSuratPerintahLemburDetail;
- import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.entities.Employee;
- import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.services.EmployeeService;
- @Service
- public class TrxCompleteSuratPerintahLemburService extends FreeFormService {
- @Autowired private TrxSuratPerintahLemburService trxSuratPerintahLemburService;
- @Autowired private TrxSuratPerintahLemburDetailService trxSuratPerintahLemburDetailService;
- @Autowired private DataSuratService dataSuratService;
- @Autowired private EmployeeService employeeService;
- @Autowired private HRISAuthorization hrisAuthorization;
- @Autowired private JadwalKerjaService jadwalKerjaService;
- private void validateTrxSuratPerintahLembur(TrxSuratPerintahLembur trxSuratPerintahLembur, List<TrxSuratPerintahLemburDetail> trxSuratPerintahLemburDetails) {
- // val valid employee
- List<Employee> employeeList = new ArrayList<Employee>();
- for (TrxSuratPerintahLemburDetail trxSuratPerintahLemburDetail : trxSuratPerintahLemburDetails) {
- Employee employee = employeeService.get(trxSuratPerintahLemburDetail.getEmployee().getId());
- if (employee != null) {
- employeeList.add(employee);
- } else {
- batchError("trxSuratPerintahLemburDetail.employee.not.found", trxSuratPerintahLemburDetail.getEmployee().getId());
- }
- }
- throwBatchError();
- for (Employee employee: employeeList) {
- JadwalKerja jadwalKerja = jadwalKerjaService.findJadwalKerja(employee.getId(), trxSuratPerintahLembur.getTanggalLembur());
- if (jadwalKerja == null) {
- batchError("trxSuratPerintahLembur.jadwalKerja.not.found", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getTanggalLembur(), "dd/MM/yyyy"));
- continue;
- }
- // 1a. Cek periode jam lembur harus di luar jadwal jam kerja karyawan. -->Panggil function spHatGetJadwalKerja untuk mendapatkan tanggal & jam kerja karyawan
- if (TimeUtil.isDateOverlap(jadwalKerja.getJadwalTimestampMasuk(), jadwalKerja.getJadwalTimestampPulang(), trxSuratPerintahLembur.getAwalLembur(), trxSuratPerintahLembur.getAkhirLembur())) {
- batchError("trxSuratPerintahLembur.jadwalLembur.overlap", TimeUtil.convertDateToString(jadwalKerja.getJadwalTimestampMasuk(), "dd/MM/yyyy"), TimeUtil.convertDateToString(jadwalKerja.getJadwalTimestampPulang(), "dd/MM/yyyy"));
- continue;
- }
- // 1b. If tgl masuk <> tgl lembur OR tgl pulang <> tgl lembur :
- // - cek periode lembur tidak boleh overlap dgn jadwal kerja pada Tgl Masuk Periode Lembur
- // - cek periode lembur tidak boleh overlap dgn jadwal kerja pada Tgl Pulang Periode Lembur
- JadwalKerja jadwalKerjaAwalLembur = jadwalKerjaService.findJadwalKerja(employee.getId(), trxSuratPerintahLembur.getAwalLembur());
- if (jadwalKerjaAwalLembur == null) {
- batchError("trxSuratPerintahLembur.jadwalKerja.not.found", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAwalLembur(), "dd/MM/yyyy"));
- continue;
- }
- if (TimeUtil.isAfterDatetime(trxSuratPerintahLembur.getAwalLembur(), jadwalKerjaAwalLembur.getJadwalTimestampMasuk()) && TimeUtil.isBeforeDatetime(trxSuratPerintahLembur.getAwalLembur(), jadwalKerjaAwalLembur.getJadwalTimestampPulang())) {
- batchError("trxSuratPerintahLembur.jadwalKerja.overlap", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAwalLembur(), "dd/MM/yyyy"));
- continue;
- }
- JadwalKerja jadwalKerjaAkhirLembur = jadwalKerjaService.findJadwalKerja(employee.getId(), trxSuratPerintahLembur.getAkhirLembur());
- if (jadwalKerjaAkhirLembur == null) {
- batchError("trxSuratPerintahLembur.jadwalKerja.not.found", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAkhirLembur(), "dd/MM/yyyy"));
- continue;
- }
- if (TimeUtil.isAfterDatetime(trxSuratPerintahLembur.getAkhirLembur(), jadwalKerjaAkhirLembur.getJadwalTimestampMasuk()) && TimeUtil.isBeforeDatetime(trxSuratPerintahLembur.getAkhirLembur(), jadwalKerjaAkhirLembur.getJadwalTimestampPulang())) {
- batchError("trxSuratPerintahLembur.jadwalKerja.overlap", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAkhirLembur(), "dd/MM/yyyy"));
- continue;
- }
- // 2. Cek Jumlah Jam Istirahat harus < jumlah jam lembur
- // Jumlah jam lembur = (*8) - (*6) →perhatikan Tanggal Periode Lemburnya
- if (trxSuratPerintahLembur.getJamIstirahat() > trxSuratPerintahLembur.getJamLembur()) {
- batchError("trxSuratPerintahLembur.jamIstirahat.invalid", employee.getName(), trxSuratPerintahLembur.getJamIstirahat().doubleValue(), trxSuratPerintahLembur.getJamLembur().doubleValue());
- continue;
- }
- // 3. Batasi agar dalam 1 tgl lembur, untuk 1 karyawan, hanya bisa input 2x SPL dan cek agar Jam lemburnya tidak boleh overlap.
- // (cek di tabel Saldo Data Surat dilakukan, karena ada kemungkinan data tsb ada pembatalan surat.)
- List<TrxSuratPerintahLembur> overlapSuratPerintahLemburList = trxSuratPerintahLemburService.searchOverlappedSuratPerintahLembur(employee.getId(), trxSuratPerintahLembur.getAwalLembur(), trxSuratPerintahLembur.getAkhirLembur());
- if (overlapSuratPerintahLemburList.size() > 0) {
- batchError("trxSuratPerintahLembur.suratPerintahLembur.overlap", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAwalLembur(), "dd/MM/yyyy"), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAkhirLembur(), "dd/MM/yyyy"));
- continue;
- }
- List<TrxSuratPerintahLembur> existSuratPerintahLemburList = trxSuratPerintahLemburService.searchExistSuratPerintahLembur(employee.getId(), trxSuratPerintahLembur.getAwalLembur(), trxSuratPerintahLembur.getAkhirLembur());
- if (existSuratPerintahLemburList.size() == 2) {
- batchError("trxSuratPerintahLembur.suratPerintahLembur.max", employee.getName(), 2D);
- continue;
- }
- List<DataSurat> overlapDataSuratTugasKaryawanList = dataSuratService.getExistingSurat(employee, trxSuratPerintahLembur.getAwalLembur(), trxSuratPerintahLembur.getAkhirLembur());
- if (overlapDataSuratTugasKaryawanList.size() > 0) {
- batchError("trxSuratPerintahLembur.dataSurat.overlap", employee.getName(), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAwalLembur(), "dd/MM/yyyy"), TimeUtil.convertDateToString(trxSuratPerintahLembur.getAkhirLembur(), "dd/MM/yyyy"));
- continue;
- }
- // 6. Cek Admin Data Absensi per Karyawan + detailnya untuk tgl SPL karyawan tsb, jika field FlagSudahProsesPayroll terisi salah satu saja
- // (lihat di File Relasi sheet Admin), maka tidak bisa input SPL baru untuk tgl tsb.
- // Misal Data Absensi tgl 1 Juli sudah diproses tunjangan absensi, maka user tidak bisa lagi input SPL baru untuk tgl 1 Juli.
- hrisAuthorization.valKaryawanBlmProsesPayrollAbsensi(employee, trxSuratPerintahLembur.getTanggalLembur(), trxSuratPerintahLembur.getTanggalLembur());
- wrapBatchErrors();
- }
- }
- @Transactional
- public TrxSuratPerintahLembur add(String approvalDescription, TrxSuratPerintahLembur trxSuratPerintahLembur, List<TrxSuratPerintahLemburDetail> trxSuratPerintahLemburDetails) {
- valTrxSuratPerintahLembur(trxSuratPerintahLembur);
- valDetailList(trxSuratPerintahLemburDetails);
- throwBatchError();
- validateTrxSuratPerintahLembur(trxSuratPerintahLembur, trxSuratPerintahLemburDetails);
- throwMultiBatchError();
- trxSuratPerintahLembur = trxSuratPerintahLemburService.add(trxSuratPerintahLembur, approvalDescription);
- addDetails(trxSuratPerintahLembur, trxSuratPerintahLemburDetails);
- return trxSuratPerintahLembur;
- }
- @Transactional
- protected void addDetails(TrxSuratPerintahLembur trxSuratPerintahLembur, List<TrxSuratPerintahLemburDetail> trxSuratPerintahLemburDetails) {
- for (TrxSuratPerintahLemburDetail trxSuratPerintahLemburDetail : trxSuratPerintahLemburDetails) {
- trxSuratPerintahLemburDetail.setTrxSuratPerintahLembur(trxSuratPerintahLembur);
- trxSuratPerintahLemburDetailService.add(trxSuratPerintahLemburDetail);
- }
- }
- @Transactional
- public TrxSuratPerintahLembur edit(String approvalDescription, TrxSuratPerintahLembur trxSuratPerintahLembur, List<TrxSuratPerintahLemburDetail> trxSuratPerintahLemburDetails) {
- valTrxSuratPerintahLembur(trxSuratPerintahLembur);
- valDetailList(trxSuratPerintahLemburDetails);
- throwBatchError();
- validateTrxSuratPerintahLembur(trxSuratPerintahLembur, trxSuratPerintahLemburDetails);
- throwMultiBatchError();
- trxSuratPerintahLembur = trxSuratPerintahLemburService.edit(trxSuratPerintahLembur);
- editDetails(trxSuratPerintahLembur, trxSuratPerintahLemburDetails);
- return trxSuratPerintahLembur;
- }
- @Transactional
- protected void editDetails(TrxSuratPerintahLembur trxSuratPerintahLembur, List<TrxSuratPerintahLemburDetail> trxSuratPerintahLemburDetails) {
- List<TrxSuratPerintahLemburDetail> fromDbTrxSuratPerintahLemburDetails = trxSuratPerintahLemburDetailService.findByTrxSuratPerintahLembur(trxSuratPerintahLembur);
- for (TrxSuratPerintahLemburDetail fromDb : fromDbTrxSuratPerintahLemburDetails) {
- trxSuratPerintahLemburDetailService.delete(fromDb.getId(), fromDb.getVersion(), trxSuratPerintahLembur.getVersion(), TrxSuratPerintahLemburDetail.class);
- }
- addDetails(trxSuratPerintahLembur, fromDbTrxSuratPerintahLemburDetails);
- }
- @Transactional
- public void delete(String id, Long version) {
- valIdVersionRequired(id, version);
- valRootVersion(id, version);
- throwBatchError();
- TrxSuratPerintahLembur trxSuratPerintahLembur = trxSuratPerintahLemburService.get(id);
- List<TrxSuratPerintahLemburDetail> fromDbTrxSuratPerintahLemburDetails = trxSuratPerintahLemburDetailService.findByTrxSuratPerintahLembur(trxSuratPerintahLembur);
- for (TrxSuratPerintahLemburDetail trxSuratPerintahLemburDetail : fromDbTrxSuratPerintahLemburDetails) {
- trxSuratPerintahLemburDetailService.delete(trxSuratPerintahLemburDetail.getId(), trxSuratPerintahLemburDetail.getVersion(), trxSuratPerintahLembur.getVersion(), TrxSuratPerintahLemburDetail.class);
- }
- throwMultiBatchError();
- trxSuratPerintahLemburService.delete(trxSuratPerintahLembur.getId(), trxSuratPerintahLembur.getVersion(), TrxSuratPerintahLembur.class);
- }
- private void valTrxSuratPerintahLembur(TrxSuratPerintahLembur trxSuratPerintahLembur) {
- if (trxSuratPerintahLembur == null) {
- batchError("trxSuratPerintahLembur.no.data");
- }
- }
- private void valDetailList(List<TrxSuratPerintahLemburDetail> detailList) {
- if (detailList == null || detailList.isEmpty()) {
- batchError("trxSuratPerintahLembur.no.detail");
- }
- }
- protected void valIdVersionRequired(String id, Long version) {
- if (id == null || version == null) {
- throw new BusinessException("data.require.id.and.version");
- }
- }
- protected void valRootVersion(String id, Long version) {
- valEntityExists(id);
- TrxSuratPerintahLembur dbEntity = trxSuratPerintahLemburService.find(id).orElse(null);
- VersionUtil.check(version, dbEntity.getVersion());
- }
- protected void valEntityExists(String id) {
- if (!trxSuratPerintahLemburService.exists(id)) {
- throw new BusinessException("data.not.found", TrxSuratPerintahLembur.class.getSimpleName(), id);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment