ronaldkwandy

Untitled

Apr 14th, 2020
367
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 44.80 KB | None | 0 0
  1. package id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploaddatakehadiran.services;
  2.  
  3. import java.io.FileInputStream;
  4. import java.text.DateFormat;
  5. import java.text.ParseException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.Base64;
  9. import java.util.Date;
  10. import java.util.Iterator;
  11. import java.util.List;
  12.  
  13. import javax.servlet.http.HttpServletResponse;
  14.  
  15. import org.apache.poi.ss.usermodel.Row;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.transaction.annotation.Transactional;
  19.  
  20. import id.co.sofcograha.gajiidapi.base.constants.BaseConstants;
  21. import id.co.sofcograha.gajiidapi.base.download.FileGenerator;
  22. import id.co.sofcograha.gajiidapi.base.exceptions.BusinessException;
  23. import id.co.sofcograha.gajiidapi.base.exceptions.CustomMultiUpdateException;
  24. import id.co.sofcograha.gajiidapi.base.extendables.FreeFormService;
  25. import id.co.sofcograha.gajiidapi.base.responses.Message;
  26. import id.co.sofcograha.gajiidapi.base.uploadtemplate.entities.UploadTemplate;
  27. import id.co.sofcograha.gajiidapi.base.utils.ExcelUtil;
  28. import id.co.sofcograha.gajiidapi.base.utils.PojoUtil;
  29. import id.co.sofcograha.gajiidapi.base.utils.StringUtil;
  30. import id.co.sofcograha.gajiidapi.base.utils.TimeUtil;
  31. import id.co.sofcograha.gajiidapi.domain.hris.HRISAuthorization;
  32. import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.datakehadirandarimesinabsensitipe1.entities.DataKehadiranDariMesinAbsensiTipe1;
  33. import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.datakehadirandarimesinabsensitipe1.services.DataKehadiranDariMesinAbsensiTipe1Service;
  34. import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.datakehadirandarimesinabsensitipe2.entities.DataKehadiranDariMesinAbsensiTipe2;
  35. import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.datakehadirandarimesinabsensitipe2.services.DataKehadiranDariMesinAbsensiTipe2Service;
  36. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploaddatakehadiran.pojos.TrxUploadDataKehadiranPojo;
  37. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploaddatakehadirandarimesinabsensitipe1.entities.TrxUploadDataKehadiranDariMesinAbsensiTipe1;
  38. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploaddatakehadirandarimesinabsensitipe1.services.TrxUploadDataKehadiranDariMesinAbsensiTipe1Service;
  39. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploaddatakehadirandarimesinabsensitipe2.entities.TrxUploadDataKehadiranDariMesinAbsensiTipe2;
  40. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploaddatakehadirandarimesinabsensitipe2.services.TrxUploadDataKehadiranDariMesinAbsensiTipe2Service;
  41. import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.entities.Employee;
  42. import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.services.EmployeeService;
  43. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.mstFormatDataMesinAbsensi.entities.MstFormatDataMesinAbsensi;
  44. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.mstFormatDataMesinAbsensi.services.MstFormatDataMesinAbsensiService;
  45. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.mstMesinAbsensi.entities.MstMesinAbsensi;
  46. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.mstMesinAbsensi.pojos.MstMesinAbsensiPojo;
  47. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.mstMesinAbsensi.services.MstMesinAbsensiService;
  48. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.mstMesinAbsensiDetailKaryawan.entities.MstMesinAbsensiDetailKaryawan;
  49. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.mstMesinAbsensiDetailKaryawan.services.MstMesinAbsensiDetailKaryawanService;
  50.  
  51. @Service
  52. public class TrxUploadDataKehadiranService extends FreeFormService {
  53.    
  54.     @Autowired private DataKehadiranDariMesinAbsensiTipe1Service dataKehadiranDariMesinAbsensiTipe1Service;
  55.     @Autowired private DataKehadiranDariMesinAbsensiTipe2Service dataKehadiranDariMesinAbsensiTipe2Service;
  56.     @Autowired private EmployeeService employeeService;
  57.     @Autowired private ExcelUtil excel;
  58.     @Autowired private HRISAuthorization hrisAuthorization;
  59.     @Autowired private MstFormatDataMesinAbsensiService mstFormatDataMesinAbsensiService;
  60.     @Autowired private MstMesinAbsensiService mstMesinAbsensiService;
  61.     @Autowired private MstMesinAbsensiDetailKaryawanService mstMesinAbsensiDetailKaryawanService;
  62.     @Autowired private TrxUploadDataKehadiranDariMesinAbsensiTipe1Service trxUploadDataKehadiranDariMesinAbsensiTipe1Service;
  63.     @Autowired private TrxUploadDataKehadiranDariMesinAbsensiTipe2Service trxUploadDataKehadiranDariMesinAbsensiTipe2Service;
  64.    
  65.     @Transactional
  66.     public UploadTemplate download(HttpServletResponse response) {
  67.         String fileName = "uploadDataKehadiran.xlsx";
  68.         FileInputStream templateFile = FileGenerator.getFileInputStream(fileName);
  69.        
  70.         excel.init(fileName, templateFile, getTemplateHeaders(), true);
  71.        
  72.         byte[] byteFiles = FileGenerator.generateExcelFile(response, fileName, excel.getWorkbook());
  73.         UploadTemplate entity = new UploadTemplate();
  74.         entity.setFileExtension(FileGenerator.CONTENT_TYPE_EXCEL_XLSX);
  75.         entity.setFileName(fileName);
  76.         entity.setFile(Base64.getEncoder().encodeToString(byteFiles));
  77.        
  78.         return entity;
  79.     }
  80.    
  81.     @Transactional
  82.     public List<TrxUploadDataKehadiranPojo> readUploadExcel(MstMesinAbsensi mesinAbsensi, String file, boolean doValidation) {
  83.         mesinAbsensi = mstMesinAbsensiService.get(mesinAbsensi.getId());
  84.         MstFormatDataMesinAbsensi formatDataMesinAbsensi = null;
  85.         if (mesinAbsensi.getFormatDataMesinAbsensi() == null) {
  86.             formatDataMesinAbsensi = mstFormatDataMesinAbsensiService.findByBk("default").orElse(null);
  87.         } else {
  88.             formatDataMesinAbsensi = mesinAbsensi.getFormatDataMesinAbsensi();
  89.         }
  90.         excel.init(PojoUtil.getXlsFileFromBase64File(file), formatDataMesinAbsensi.getNomorBarisJudul() - 1, false);
  91.        
  92.         List<TrxUploadDataKehadiranPojo> result = new ArrayList<>();
  93.         CustomMultiUpdateException cmue = new CustomMultiUpdateException();
  94.         boolean hasErrors = false;
  95.         int rowNum = 0;
  96.        
  97.         Iterator<Row> dataRowIterator = excel.getDataIterator(formatDataMesinAbsensi.getNomorBarisDataPertama() - 1);
  98.         while (dataRowIterator.hasNext()) {
  99.             Boolean isError = false;
  100.             Row dataRow = dataRowIterator.next();
  101.             rowNum = dataRow.getRowNum() + 1;
  102.             TrxUploadDataKehadiranPojo uploadDataKehadiran = new TrxUploadDataKehadiranPojo();
  103.             uploadDataKehadiran.setMesinAbsensi(MstMesinAbsensiPojo.fromEntity(mesinAbsensi, BaseConstants.DEFAULT_QUERY_DEPTH));
  104.             List<Message> errorList = new ArrayList<>();
  105.            
  106.             try {
  107.                 if (mesinAbsensi.getFormatDataMesinAbsensi() == null) {
  108.                     String nomorId = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan());
  109.                     MstMesinAbsensiDetailKaryawan mstMesinAbsensiDetailKaryawan = mstMesinAbsensiDetailKaryawanService.findByMesinAbsensiAndNomorId(mesinAbsensi.getId(), nomorId).orElse(null);
  110.                    
  111.                     uploadDataKehadiran.setNomorId(nomorId);
  112.                     if (nomorId == null) {
  113.                         isError = true;
  114.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.nomorId.not.found")
  115.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan()));
  116.                     } else if (StringUtil.isBlank(nomorId) == true) {
  117.                         isError = true;
  118.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.nomorId.required")
  119.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan()));
  120.                     } else {
  121.                         if (mesinAbsensi.isNomorIdSamaDenganIdKaryawan() != true) {
  122.                             if (mstMesinAbsensiDetailKaryawan == null) {
  123.                                 isError = true;
  124.                                 errorList.add(Message.create().setCode("trxUploadDataKehadiran.nomorId.not.found")
  125.                                                               .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan(), nomorId));                                       
  126.                             } else {
  127.                                 uploadDataKehadiran.setIdKaryawan(mstMesinAbsensiDetailKaryawan.getKaryawan().getEmployeeId());
  128.                                 uploadDataKehadiran.setNamaKaryawan(mstMesinAbsensiDetailKaryawan.getKaryawan().getName());
  129.                             }
  130.                         }
  131.                     }
  132.                    
  133.                     DateFormat format = new SimpleDateFormat(formatDataMesinAbsensi.getFormatTanggalJam());
  134.                     format.setLenient(false);
  135.                     String tanggal = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomTanggal());
  136.                     Date dateTanggal = null;
  137.                     if (tanggal == null) {
  138.                         isError = true;
  139.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.tanggal.not.found")
  140.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  141.                     } else if (StringUtil.isBlank(tanggal) == true) {
  142.                         isError = true;
  143.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.tanggal.required")
  144.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  145.                     } else {
  146.                         try {
  147.                             dateTanggal = format.parse(tanggal);
  148.                             uploadDataKehadiran.setTanggal(dateTanggal);
  149.                         } catch (ParseException e) {
  150.                             isError = true;
  151.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.tanggal.not.valid")
  152.                                                           .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  153.                         }
  154.                     }
  155.                    
  156.                     String jam = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomJam());
  157.                     if (jam == null) {
  158.                         isError = true;
  159.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.jam.not.found")
  160.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomJam()));
  161.                     } else if (StringUtil.isBlank(jam) == true) {
  162.                         isError = true;
  163.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.jam.required")
  164.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomJam()));
  165.                     } else {
  166.                         if (!TimeUtil.isTimeValid(jam)){
  167.                             isError = true;
  168.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.jam.not.valid")
  169.                                                           .setArgs(formatDataMesinAbsensi.getJudulKolomJam()));
  170.                         } else {
  171.                             uploadDataKehadiran.setJam(TimeUtil.getTime(jam));
  172.                         }
  173.                     }
  174.                    
  175.                     if (isError == false) {
  176.                         // 2. cek duplikat antar data
  177.                         for (TrxUploadDataKehadiranPojo existUploadedDataKehadiran: result) {
  178.                             if (existUploadedDataKehadiran.getNomorId().equals(nomorId) &&
  179.                                 TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), dateTanggal) &&
  180.                                 existUploadedDataKehadiran.getJam().equals(jam)) {
  181.                                
  182.                                 List<Message> existErrorList = existUploadedDataKehadiran.getErrorList();
  183.                                 existErrorList.add(Message.create().setCode("trxUploadDataKehadiran.exist"));
  184.                                 existUploadedDataKehadiran.setErrorList(existErrorList);
  185.                                 isError = true;
  186.                                
  187.                             }
  188.                         }
  189.                     }
  190.                    
  191.                     // 3. cek duplikat pada saldo data kehadiran tipe 2
  192.                     if (isError == false) {
  193.                         DataKehadiranDariMesinAbsensiTipe2 dataKehadiranDariMesinAbsensiTipe2 = dataKehadiranDariMesinAbsensiTipe2Service.findByBk(mesinAbsensi, mstMesinAbsensiDetailKaryawan.getKaryawan(), dateTanggal).orElse(null);
  194.                         if (dataKehadiranDariMesinAbsensiTipe2 != null) {
  195.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.uploaded"));
  196.                             isError = true;
  197.                         }
  198.                     }
  199.                    
  200.                     if (isError == false) {
  201.                         Date yesterday = TimeUtil.minusDays(dateTanggal, 1);
  202.                         Date tomorrow = TimeUtil.addDays(dateTanggal, 1);
  203.                         List<Message> yesterdayErrors = hrisAuthorization.getKaryawanBlmProsesPayrollAbsensiErrors(mstMesinAbsensiDetailKaryawan.getKaryawan(), yesterday);
  204.                         List<Message> todayErrors = hrisAuthorization.getKaryawanBlmProsesPayrollAbsensiErrors(mstMesinAbsensiDetailKaryawan.getKaryawan(), dateTanggal);
  205.                         List<Message> tomorrowErrors = hrisAuthorization.getKaryawanBlmProsesPayrollAbsensiErrors(mstMesinAbsensiDetailKaryawan.getKaryawan(), tomorrow);
  206.                         for (TrxUploadDataKehadiranPojo existUploadedDataKehadiran: result) {
  207.                             if (TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), yesterday)) {
  208.                                 if (yesterdayErrors.size() > 0 && todayErrors.size() > 0 && tomorrowErrors.size() > 0) {
  209.                                     isError = true;
  210.                                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.dataKehadiran.processed")
  211.                                             .setArgs(TimeUtil.convertDateToString(yesterday, "dd/MM/yyyy")));
  212.                                 }
  213.                             } else if (TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), dateTanggal)) {
  214.                                 if (yesterdayErrors.size() > 0 && todayErrors.size() > 0 && tomorrowErrors.size() > 0) {
  215.                                     isError = true;
  216.                                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.dataKehadiran.processed")
  217.                                             .setArgs(TimeUtil.convertDateToString(dateTanggal, "dd/MM/yyyy")));
  218.                                 }
  219.                             } else if (TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), tomorrow)) {
  220.                                 if (yesterdayErrors.size() > 0 && todayErrors.size() > 0 && tomorrowErrors.size() > 0) {
  221.                                     isError = true;
  222.                                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.dataKehadiran.processed")
  223.                                             .setArgs(TimeUtil.convertDateToString(tomorrow, "dd/MM/yyyy")));
  224.                                 }
  225.                             }
  226.                         }
  227.                     }
  228.                 } else if (mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("A") ||
  229.                            mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("E")) {
  230.                     String nomorId = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan());
  231.                     MstMesinAbsensiDetailKaryawan mstMesinAbsensiDetailKaryawan = mstMesinAbsensiDetailKaryawanService.findByMesinAbsensiAndNomorId(mesinAbsensi.getId(), nomorId).orElse(null);
  232.                    
  233.                     uploadDataKehadiran.setNomorId(nomorId);
  234.                     if (nomorId == null) {
  235.                         isError = true;
  236.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.nomorId.not.found")
  237.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan()));
  238.                     } else if (StringUtil.isBlank(nomorId) == true) {
  239.                         isError = true;
  240.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.nomorId.required")
  241.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan()));
  242.                     } else {
  243.                         if (mesinAbsensi.isNomorIdSamaDenganIdKaryawan() != true) {
  244.                             if (mstMesinAbsensiDetailKaryawan == null) {
  245.                                 isError = true;
  246.                                 errorList.add(Message.create().setCode("trxUploadDataKehadiran.nomorId.not.found")
  247.                                                               .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan(), nomorId));                                       
  248.                             } else {
  249.                                 uploadDataKehadiran.setIdKaryawan(mstMesinAbsensiDetailKaryawan.getKaryawan().getEmployeeId());
  250.                                 uploadDataKehadiran.setNamaKaryawan(mstMesinAbsensiDetailKaryawan.getKaryawan().getName());
  251.                             }
  252.                         }
  253.                     }
  254.                    
  255.                     DateFormat format = new SimpleDateFormat(formatDataMesinAbsensi.getFormatTanggalJam());
  256.                     format.setLenient(false);
  257.                     String tanggal = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomTanggal());
  258.                     Date dateTanggal = null;
  259.                     if (tanggal == null) {
  260.                         isError = true;
  261.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.tanggal.not.found")
  262.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  263.                     } else if (StringUtil.isBlank(tanggal) == true) {
  264.                         isError = true;
  265.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.tanggal.required")
  266.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  267.                     } else {
  268.                         try {
  269.                             dateTanggal = format.parse(tanggal);
  270.                             uploadDataKehadiran.setTanggal(dateTanggal);
  271.                         } catch (ParseException e) {
  272.                             isError = true;
  273.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.tanggal.not.valid")
  274.                                                           .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  275.                         }
  276.                     }
  277.                    
  278.                     String jam = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomJam());
  279.                     if (jam == null) {
  280.                         isError = true;
  281.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.jam.not.found")
  282.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomJam()));
  283.                     } else if (StringUtil.isBlank(jam) == true) {
  284.                         isError = true;
  285.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.jam.required")
  286.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomJam()));
  287.                     } else {
  288.                         if (!TimeUtil.isTimeValid(jam)){
  289.                             isError = true;
  290.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.jam.not.valid")
  291.                                                           .setArgs(formatDataMesinAbsensi.getJudulKolomJam()));
  292.                         } else {
  293.                             uploadDataKehadiran.setJam(TimeUtil.getTime(jam));
  294.                         }
  295.                     }
  296.                    
  297.                     if (isError == false) {
  298.                         // 2. cek duplikat antar data
  299.                         for (TrxUploadDataKehadiranPojo existUploadedDataKehadiran: result) {
  300.                             if (existUploadedDataKehadiran.getNomorId().equals(nomorId) &&
  301.                                 TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), dateTanggal) &&
  302.                                 existUploadedDataKehadiran.getJam().equals(jam)) {
  303.                                
  304.                                 List<Message> existErrorList = existUploadedDataKehadiran.getErrorList();
  305.                                 existErrorList.add(Message.create().setCode("trxUploadDataKehadiran.exist"));
  306.                                 existUploadedDataKehadiran.setErrorList(existErrorList);
  307.                                 isError = true;
  308.                                
  309.                             }
  310.                         }
  311.                     }
  312.                    
  313.                     // 3. cek duplikat pada saldo data kehadiran tipe 2
  314.                     if (isError == false) {
  315.                         DataKehadiranDariMesinAbsensiTipe2 dataKehadiranDariMesinAbsensiTipe2 = dataKehadiranDariMesinAbsensiTipe2Service.findByBk(mesinAbsensi, mstMesinAbsensiDetailKaryawan.getKaryawan(), dateTanggal).orElse(null);
  316.                         if (dataKehadiranDariMesinAbsensiTipe2 != null) {
  317.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.uploaded"));
  318.                             isError = true;
  319.                         }
  320.                     }
  321.                    
  322.                    
  323.                     if (isError == false) {
  324.                         Date yesterday = TimeUtil.minusDays(dateTanggal, 1);
  325.                         Date tomorrow = TimeUtil.addDays(dateTanggal, 1);
  326.                         List<Message> yesterdayErrors = hrisAuthorization.getKaryawanBlmProsesPayrollAbsensiErrors(mstMesinAbsensiDetailKaryawan.getKaryawan(), yesterday);
  327.                         List<Message> todayErrors = hrisAuthorization.getKaryawanBlmProsesPayrollAbsensiErrors(mstMesinAbsensiDetailKaryawan.getKaryawan(), dateTanggal);
  328.                         List<Message> tomorrowErrors = hrisAuthorization.getKaryawanBlmProsesPayrollAbsensiErrors(mstMesinAbsensiDetailKaryawan.getKaryawan(), tomorrow);
  329.                         for (TrxUploadDataKehadiranPojo existUploadedDataKehadiran: result) {
  330.                             if (TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), yesterday)) {
  331.                                 if (yesterdayErrors.size() > 0 && todayErrors.size() > 0 && tomorrowErrors.size() > 0) {
  332.                                     isError = true;
  333.                                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.dataKehadiran.processed")
  334.                                             .setArgs(TimeUtil.convertDateToString(yesterday, "dd/MM/yyyy")));
  335.                                 }
  336.                             } else if (TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), dateTanggal)) {
  337.                                 if (yesterdayErrors.size() > 0 && todayErrors.size() > 0 && tomorrowErrors.size() > 0) {
  338.                                     isError = true;
  339.                                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.dataKehadiran.processed")
  340.                                             .setArgs(TimeUtil.convertDateToString(dateTanggal, "dd/MM/yyyy")));
  341.                                 }
  342.                             } else if (TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), tomorrow)) {
  343.                                 if (yesterdayErrors.size() > 0 && todayErrors.size() > 0 && tomorrowErrors.size() > 0) {
  344.                                     isError = true;
  345.                                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.dataKehadiran.processed")
  346.                                             .setArgs(TimeUtil.convertDateToString(tomorrow, "dd/MM/yyyy")));
  347.                                 }
  348.                             }
  349.                         }
  350.                     }
  351.                 } else if (mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("C")) {
  352.                     String nomorId = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan());
  353.                     MstMesinAbsensiDetailKaryawan mstMesinAbsensiDetailKaryawan = mstMesinAbsensiDetailKaryawanService.findByMesinAbsensiAndNomorId(mesinAbsensi.getId(), nomorId).orElse(null);
  354.                    
  355.                     uploadDataKehadiran.setNomorId(nomorId);
  356.                     if (nomorId == null) {
  357.                         isError = true;
  358.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.nomorId.not.found")
  359.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan()));
  360.                     } else if (StringUtil.isBlank(nomorId) == true) {
  361.                         isError = true;
  362.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.nomorId.required")
  363.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan()));
  364.                     } else {
  365.                         if (mesinAbsensi.isNomorIdSamaDenganIdKaryawan() != true) {
  366.                             if (mstMesinAbsensiDetailKaryawan == null) {
  367.                                 isError = true;
  368.                                 errorList.add(Message.create().setCode("trxUploadDataKehadiran.nomorId.not.found")
  369.                                                               .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan()));                                    
  370.                             } else {
  371.                                 uploadDataKehadiran.setIdKaryawan(mstMesinAbsensiDetailKaryawan.getKaryawan().getEmployeeId());
  372.                                 uploadDataKehadiran.setNamaKaryawan(mstMesinAbsensiDetailKaryawan.getKaryawan().getName());
  373.                             }
  374.                         }
  375.                     }
  376.                    
  377.                     DateFormat format = new SimpleDateFormat(formatDataMesinAbsensi.getFormatTanggalJam());
  378.                     format.setLenient(false);
  379.                     String tanggal = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomTanggal());
  380.                     String jam = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomJam());
  381.                     String tanggalJam = tanggal + " " + jam;
  382.                     Date dateTanggal = null;
  383.                     if (tanggal == null) {
  384.                         isError = true;
  385.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.tanggal.not.found")
  386.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  387.                     } else if (StringUtil.isBlank(tanggal) == true) {
  388.                         isError = true;
  389.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.tanggal.required")
  390.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  391.                     } else {
  392.                         try {
  393.                             dateTanggal = format.parse(tanggalJam);
  394.                             uploadDataKehadiran.setTanggal(dateTanggal);
  395.                         } catch (ParseException e) {
  396.                             isError = true;
  397.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.tanggal.not.valid")
  398.                                                           .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  399.                         }
  400.                     }
  401.                    
  402.                     if (isError == false) {
  403.                         // 2. cek duplikat antar data
  404.                         for (TrxUploadDataKehadiranPojo existUploadedDataKehadiran: result) {
  405.                             if (existUploadedDataKehadiran.getNomorId().equals(nomorId) &&
  406.                                 TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), dateTanggal)) {
  407.                                
  408.                                 List<Message> existErrorList = existUploadedDataKehadiran.getErrorList();
  409.                                 existErrorList.add(Message.create().setCode("trxUploadDataKehadiran.exist"));
  410.                                 existUploadedDataKehadiran.setErrorList(existErrorList);
  411.                                 isError = true;
  412.                                
  413.                             }
  414.                         }
  415.                     }
  416.                    
  417.                     // 3. cek duplikat pada saldo data kehadiran tipe 2
  418.                     if (isError == false) {
  419.                         DataKehadiranDariMesinAbsensiTipe2 dataKehadiranDariMesinAbsensiTipe2 = dataKehadiranDariMesinAbsensiTipe2Service.findByBk(mesinAbsensi, mstMesinAbsensiDetailKaryawan.getKaryawan(), dateTanggal).orElse(null);
  420.                         if (dataKehadiranDariMesinAbsensiTipe2 != null) {
  421.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.uploaded"));
  422.                             isError = true;
  423.                         }
  424.                     }
  425.                    
  426.                     if (isError == false) {
  427.                         Date yesterday = TimeUtil.minusDays(dateTanggal, 1);
  428.                         Date tomorrow = TimeUtil.addDays(dateTanggal, 1);
  429.                         List<Message> yesterdayErrors = hrisAuthorization.getKaryawanBlmProsesPayrollAbsensiErrors(mstMesinAbsensiDetailKaryawan.getKaryawan(), yesterday);
  430.                         List<Message> todayErrors = hrisAuthorization.getKaryawanBlmProsesPayrollAbsensiErrors(mstMesinAbsensiDetailKaryawan.getKaryawan(), dateTanggal);
  431.                         List<Message> tomorrowErrors = hrisAuthorization.getKaryawanBlmProsesPayrollAbsensiErrors(mstMesinAbsensiDetailKaryawan.getKaryawan(), tomorrow);
  432.                         for (TrxUploadDataKehadiranPojo existUploadedDataKehadiran: result) {
  433.                             if (TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), yesterday)) {
  434.                                 if (yesterdayErrors.size() > 0 && todayErrors.size() > 0 && tomorrowErrors.size() > 0) {
  435.                                     isError = true;
  436.                                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.dataKehadiran.processed")
  437.                                             .setArgs(TimeUtil.convertDateToString(yesterday, "dd/MM/yyyy")));
  438.                                 }
  439.                             } else if (TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), dateTanggal)) {
  440.                                 if (yesterdayErrors.size() > 0 && todayErrors.size() > 0 && tomorrowErrors.size() > 0) {
  441.                                     isError = true;
  442.                                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.dataKehadiran.processed")
  443.                                             .setArgs(TimeUtil.convertDateToString(dateTanggal, "dd/MM/yyyy")));
  444.                                 }
  445.                             } else if (TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), tomorrow)) {
  446.                                 if (yesterdayErrors.size() > 0 && todayErrors.size() > 0 && tomorrowErrors.size() > 0) {
  447.                                     isError = true;
  448.                                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.dataKehadiran.processed")
  449.                                             .setArgs(TimeUtil.convertDateToString(tomorrow, "dd/MM/yyyy")));
  450.                                 }
  451.                             }
  452.                         }
  453.                     }
  454.                 } else if (mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("B") ||
  455.                            mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("D")) {
  456.                     String nomorId = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan());
  457.                     MstMesinAbsensiDetailKaryawan mstMesinAbsensiDetailKaryawan = mstMesinAbsensiDetailKaryawanService.findByMesinAbsensiAndNomorId(mesinAbsensi.getId(), nomorId).orElse(null);
  458.                    
  459.                     uploadDataKehadiran.setNomorId(nomorId);
  460.                     if (nomorId == null) {
  461.                         isError = true;
  462.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.nomorId.not.found")
  463.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan()));
  464.                     } else if (StringUtil.isBlank(nomorId) == true) {
  465.                         isError = true;
  466.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.nomorId.required")
  467.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan()));
  468.                     } else {
  469.                         if (mesinAbsensi.isNomorIdSamaDenganIdKaryawan() != true) {
  470.                             if (mstMesinAbsensiDetailKaryawan == null) {
  471.                                 isError = true;
  472.                                 errorList.add(Message.create().setCode("trxUploadDataKehadiran.nomorId.not.found")
  473.                                                               .setArgs(formatDataMesinAbsensi.getJudulKolomNomorIdKaryawan()));                                    
  474.                             } else {
  475.                                 uploadDataKehadiran.setIdKaryawan(mstMesinAbsensiDetailKaryawan.getKaryawan().getEmployeeId());
  476.                                 uploadDataKehadiran.setNamaKaryawan(mstMesinAbsensiDetailKaryawan.getKaryawan().getName());
  477.                             }
  478.                         }
  479.                     }
  480.                    
  481.                     DateFormat format = new SimpleDateFormat(formatDataMesinAbsensi.getFormatTanggalJam());
  482.                     format.setLenient(false);
  483.                     String tanggal = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomTanggal());
  484.                     Date dateTanggal = null;
  485.                     if (tanggal == null) {
  486.                         isError = true;
  487.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.tanggal.not.found")
  488.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  489.                     } else if (StringUtil.isBlank(tanggal) == true) {
  490.                         isError = true;
  491.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.tanggal.required")
  492.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  493.                     } else {
  494.                         try {
  495.                             dateTanggal = format.parse(tanggal);
  496.                             uploadDataKehadiran.setTanggal(dateTanggal);
  497.                         } catch (ParseException e) {
  498.                             isError = true;
  499.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.tanggal.not.valid")
  500.                                                           .setArgs(formatDataMesinAbsensi.getJudulKolomTanggal()));
  501.                         }
  502.                     }
  503.                    
  504.                     String jamMasuk = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomJamMasuk());
  505.                     if (jamMasuk == null) {
  506.                         isError = true;
  507.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.jamMasuk.not.found")
  508.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomJamMasuk()));
  509.                     } else if (StringUtil.isBlank(jamMasuk) == true) {
  510.                         isError = true;
  511.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.jamMasuk.required")
  512.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomJamMasuk()));
  513.                     } else {
  514.                         if (!TimeUtil.isTimeValid(jamMasuk)){
  515.                             isError = true;
  516.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.jamMasuk.not.valid")
  517.                                                           .setArgs(formatDataMesinAbsensi.getJudulKolomJamMasuk()));
  518.                         } else {
  519.                             uploadDataKehadiran.setJamPulang(TimeUtil.getTime(jamMasuk));
  520.                         }
  521.                     }
  522.                    
  523.                     String jamPulang = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomJamKeluar());
  524.                     if (jamPulang == null) {
  525.                         isError = true;
  526.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.jamPulang.not.found")
  527.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomJamKeluar()));
  528.                     } else if (StringUtil.isBlank(jamPulang) == true) {
  529.                         isError = true;
  530.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.jamPulang.required")
  531.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomJamKeluar()));
  532.                     } else {
  533.                         if (!TimeUtil.isTimeValid(jamPulang)){
  534.                             isError = true;
  535.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.jamPulang.not.valid")
  536.                                                           .setArgs(formatDataMesinAbsensi.getJudulKolomJamKeluar()));
  537.                         } else {
  538.                             uploadDataKehadiran.setJamPulang(TimeUtil.getTime(jamPulang));
  539.                         }
  540.                     }
  541.                    
  542.                     String keluarBesok = excel.getCellStringValue(dataRow, formatDataMesinAbsensi.getJudulKolomKeluarBesok());
  543.                     if (keluarBesok == null) {
  544.                         isError = true;
  545.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.column.keluarBesok.not.found")
  546.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomKeluarBesok()));
  547.                     } else if (StringUtil.isBlank(jamPulang) == true) {
  548.                         isError = true;
  549.                         errorList.add(Message.create().setCode("trxUploadDataKehadiran.keluarBesok.required")
  550.                                                       .setArgs(formatDataMesinAbsensi.getJudulKolomKeluarBesok()));
  551.                     } else {
  552.                         uploadDataKehadiran.setKeluarBesok(keluarBesok);
  553.                     }
  554.                    
  555.                     if (isError == false) {
  556.                         // 2. cek duplikat antar data
  557.                         for (TrxUploadDataKehadiranPojo existUploadedDataKehadiran: result) {
  558.                             if (existUploadedDataKehadiran.getNomorId().equals(nomorId) &&
  559.                                 TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), dateTanggal) &&
  560.                                 existUploadedDataKehadiran.getJamMasuk().equals(jamMasuk) &&
  561.                                 existUploadedDataKehadiran.getJamPulang().equals(jamPulang)) {
  562.                                
  563.                                 List<Message> existErrorList = existUploadedDataKehadiran.getErrorList();
  564.                                 existErrorList.add(Message.create().setCode("trxUploadDataKehadiran.exist"));
  565.                                 existUploadedDataKehadiran.setErrorList(existErrorList);
  566.                                 isError = true;
  567.                                
  568.                             }
  569.                         }
  570.                     }
  571.                    
  572.                     // 3. cek duplikat pada saldo data kehadiran tipe 2
  573.                     if (isError == false) {
  574.                         DataKehadiranDariMesinAbsensiTipe2 dataKehadiranDariMesinAbsensiTipe2 = dataKehadiranDariMesinAbsensiTipe2Service.findByBk(mesinAbsensi, mstMesinAbsensiDetailKaryawan.getKaryawan(), dateTanggal).orElse(null);
  575.                         if (dataKehadiranDariMesinAbsensiTipe2 != null) {
  576.                             errorList.add(Message.create().setCode("trxUploadDataKehadiran.uploaded"));
  577.                             isError = true;
  578.                         }
  579.                     }
  580.                    
  581.                     if (isError == false) {
  582.                         List<Message> karyawanBlmProsesPayrollAbsensiErrors = hrisAuthorization.getKaryawanBlmProsesPayrollAbsensiErrors(mstMesinAbsensiDetailKaryawan.getKaryawan(), dateTanggal);
  583.                         for (TrxUploadDataKehadiranPojo existUploadedDataKehadiran: result) {
  584.                             if (TimeUtil.isEqual(existUploadedDataKehadiran.getTanggal(), dateTanggal)) {
  585.                                 if (karyawanBlmProsesPayrollAbsensiErrors.size() > 0) {
  586.                                     isError = true;
  587.                                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.dataKehadiran.processed")
  588.                                             .setArgs(TimeUtil.convertDateToString(dateTanggal, "dd/MM/yyyy")));
  589.                                 }
  590.                             }
  591.                         }
  592.                     }
  593.                 } else {
  594.                     errorList.add(Message.create().setCode("trxUploadDataKehadiran.mstFormatDataMesinAbsensi.not.found")); 
  595.                 }
  596.             } catch (BusinessException e) {
  597.                 hasErrors = true;
  598.                 multiUpdateErrorHandling(cmue, rowNum, e);
  599.                 errorList.add(Message.create().setCode(e.getMessage())
  600.                                               .setArgs(e.getMessageParameters()));
  601.             }          
  602.             uploadDataKehadiran.setErrorList(errorList);
  603.             result.add(uploadDataKehadiran);
  604.         }
  605.         if (hasErrors && doValidation) throw cmue;
  606.         return result;
  607.     }
  608.    
  609.     @Transactional
  610.     public int uploadData(List<TrxUploadDataKehadiranPojo> pojos) {
  611.         CustomMultiUpdateException cmuex = new CustomMultiUpdateException();
  612.         boolean hasErrors = false;
  613.         int uploadedData = 0;
  614.        
  615.         for (TrxUploadDataKehadiranPojo trxUploadDataKehadiranPojo : pojos) {
  616.             uploadedData++;
  617.             try {
  618.                 MstMesinAbsensi mesinAbsensi = trxUploadDataKehadiranPojo.getMesinAbsensi();
  619.                 Employee karyawan = employeeService.findByBk(trxUploadDataKehadiranPojo.getIdKaryawan()).orElse(null);
  620.                 TrxUploadDataKehadiranDariMesinAbsensiTipe1 trxUploadDataKehadiranDariMesinAbsensiTipe1 = null;
  621.                 TrxUploadDataKehadiranDariMesinAbsensiTipe2 trxUploadDataKehadiranDariMesinAbsensiTipe2 = null;
  622.                 if (mesinAbsensi.getFormatDataMesinAbsensi() == null ||
  623.                     mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("A") ||
  624.                     mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("C") ||
  625.                     mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("E")) {
  626.                     trxUploadDataKehadiranDariMesinAbsensiTipe2 = new TrxUploadDataKehadiranDariMesinAbsensiTipe2();
  627.                     trxUploadDataKehadiranDariMesinAbsensiTipe2.setMesinAbsensi(mesinAbsensi);
  628.                     trxUploadDataKehadiranDariMesinAbsensiTipe2.setNomorBaris(uploadedData);
  629.                     trxUploadDataKehadiranDariMesinAbsensiTipe2.setNomorIdKaryawan(trxUploadDataKehadiranPojo.getNomorId());
  630.                     trxUploadDataKehadiranDariMesinAbsensiTipe2.setKaryawan(karyawan);
  631.                     trxUploadDataKehadiranDariMesinAbsensiTipe2.setTanggal(trxUploadDataKehadiranPojo.getTanggal());
  632.                     trxUploadDataKehadiranDariMesinAbsensiTipe2.setJam(trxUploadDataKehadiranPojo.getJam());
  633.                     trxUploadDataKehadiranDariMesinAbsensiTipe2 = trxUploadDataKehadiranDariMesinAbsensiTipe2Service.add(trxUploadDataKehadiranDariMesinAbsensiTipe2, BaseConstants.BLANK);
  634.                     trxUploadDataKehadiranDariMesinAbsensiTipe2 = trxUploadDataKehadiranDariMesinAbsensiTipe2Service.confirm(trxUploadDataKehadiranDariMesinAbsensiTipe2, BaseConstants.BLANK);
  635.                 } else if (mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("B") ||
  636.                            mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("D")) {
  637.                     trxUploadDataKehadiranDariMesinAbsensiTipe1 = new TrxUploadDataKehadiranDariMesinAbsensiTipe1();
  638.                     trxUploadDataKehadiranDariMesinAbsensiTipe1.setMesinAbsensi(mesinAbsensi);
  639.                     trxUploadDataKehadiranDariMesinAbsensiTipe1.setNomorBaris(uploadedData);
  640.                     trxUploadDataKehadiranDariMesinAbsensiTipe1.setNomorIdKaryawan(trxUploadDataKehadiranPojo.getNomorId());
  641.                     trxUploadDataKehadiranDariMesinAbsensiTipe1.setKaryawan(karyawan);
  642.                     trxUploadDataKehadiranDariMesinAbsensiTipe1.setTanggal(trxUploadDataKehadiranPojo.getTanggal());
  643.                     trxUploadDataKehadiranDariMesinAbsensiTipe1.setJamMasuk(trxUploadDataKehadiranPojo.getJamMasuk());
  644.                     trxUploadDataKehadiranDariMesinAbsensiTipe1.setJamPulang(trxUploadDataKehadiranPojo.getJamPulang());
  645.                     trxUploadDataKehadiranDariMesinAbsensiTipe1.setKeluarBesok(trxUploadDataKehadiranPojo.getKeluarBesok());
  646.                     trxUploadDataKehadiranDariMesinAbsensiTipe1.setStatusError(trxUploadDataKehadiranPojo.getStatusError());
  647.                     trxUploadDataKehadiranDariMesinAbsensiTipe1 = trxUploadDataKehadiranDariMesinAbsensiTipe1Service.add(trxUploadDataKehadiranDariMesinAbsensiTipe1, BaseConstants.BLANK);
  648.                     trxUploadDataKehadiranDariMesinAbsensiTipe1 = trxUploadDataKehadiranDariMesinAbsensiTipe1Service.confirm(trxUploadDataKehadiranDariMesinAbsensiTipe1, BaseConstants.BLANK);
  649.                 } else {
  650.                     throw new Exception("trxUploadDataKehadiran.formatDataMesinAbsensi.not.found");
  651.                 }
  652.                
  653.                 if (trxUploadDataKehadiranDariMesinAbsensiTipe2 != null && StringUtil.isBlank(trxUploadDataKehadiranDariMesinAbsensiTipe2.getStatusError())) {
  654.                     if (mesinAbsensi.getFormatDataMesinAbsensi() == null ||
  655.                         mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("A") ||
  656.                         mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("E")) {
  657.                        
  658.                         Date timestampAbsensi = TimeUtil.getDate(trxUploadDataKehadiranPojo.getTanggal(), trxUploadDataKehadiranPojo.getJam());
  659.                         DataKehadiranDariMesinAbsensiTipe2 dataKehadiranDariMesinAbsensiTipe2 = dataKehadiranDariMesinAbsensiTipe2Service.findByBk(mesinAbsensi, karyawan, timestampAbsensi).orElse(null);
  660.                         if (dataKehadiranDariMesinAbsensiTipe2 == null) {
  661.                             dataKehadiranDariMesinAbsensiTipe2 = new DataKehadiranDariMesinAbsensiTipe2();
  662.                             dataKehadiranDariMesinAbsensiTipe2.setMesinAbsensi(mesinAbsensi);
  663.                             dataKehadiranDariMesinAbsensiTipe2.setKaryawan(karyawan);
  664.                             dataKehadiranDariMesinAbsensiTipe2.setTimestampAbsensi(timestampAbsensi);
  665.                             dataKehadiranDariMesinAbsensiTipe2.setRefTransaction(trxUploadDataKehadiranDariMesinAbsensiTipe2.getTransaction());
  666.                             dataKehadiranDariMesinAbsensiTipe2.setRefTrxNumber(trxUploadDataKehadiranDariMesinAbsensiTipe2.getTrxNumber());
  667.                             dataKehadiranDariMesinAbsensiTipe2.setRefTrxDate(trxUploadDataKehadiranDariMesinAbsensiTipe2.getTrxDate());
  668.                             dataKehadiranDariMesinAbsensiTipe2.setProcessTimestamp(trxUploadDataKehadiranDariMesinAbsensiTipe2.getCreationTime());
  669.                             dataKehadiranDariMesinAbsensiTipe2.setTanggalAbsensi(trxUploadDataKehadiranPojo.getTanggal());
  670.                             dataKehadiranDariMesinAbsensiTipe2.setKeteranganError(trxUploadDataKehadiranPojo.getStatusError());
  671.                             dataKehadiranDariMesinAbsensiTipe2 = dataKehadiranDariMesinAbsensiTipe2Service.add(dataKehadiranDariMesinAbsensiTipe2);
  672.                            
  673.                             hrisAuthorization.addOrEditAdminDataAbsensiPerKaryawan(karyawan, trxUploadDataKehadiranPojo.getTanggal(), TimeUtil.getSystemDate());   
  674.                         }
  675.                     } else if (mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("C")) {
  676.                         DataKehadiranDariMesinAbsensiTipe2 dataKehadiranDariMesinAbsensiTipe2 = dataKehadiranDariMesinAbsensiTipe2Service.findByBk(mesinAbsensi, karyawan, trxUploadDataKehadiranPojo.getTanggal()).orElse(null);
  677.                         if (dataKehadiranDariMesinAbsensiTipe2 == null) {
  678.                             dataKehadiranDariMesinAbsensiTipe2 = new DataKehadiranDariMesinAbsensiTipe2();
  679.                             dataKehadiranDariMesinAbsensiTipe2.setMesinAbsensi(mesinAbsensi);
  680.                             dataKehadiranDariMesinAbsensiTipe2.setKaryawan(karyawan);
  681.                             dataKehadiranDariMesinAbsensiTipe2.setTimestampAbsensi(trxUploadDataKehadiranPojo.getTanggal());
  682.                             dataKehadiranDariMesinAbsensiTipe2.setRefTransaction(trxUploadDataKehadiranDariMesinAbsensiTipe2.getTransaction());
  683.                             dataKehadiranDariMesinAbsensiTipe2.setRefTrxNumber(trxUploadDataKehadiranDariMesinAbsensiTipe2.getTrxNumber());
  684.                             dataKehadiranDariMesinAbsensiTipe2.setRefTrxDate(trxUploadDataKehadiranDariMesinAbsensiTipe2.getTrxDate());
  685.                             dataKehadiranDariMesinAbsensiTipe2.setProcessTimestamp(trxUploadDataKehadiranDariMesinAbsensiTipe2.getCreationTime());
  686.                             dataKehadiranDariMesinAbsensiTipe2.setTanggalAbsensi(trxUploadDataKehadiranPojo.getTanggal());
  687.                             dataKehadiranDariMesinAbsensiTipe2.setKeteranganError(trxUploadDataKehadiranPojo.getStatusError());
  688.                             dataKehadiranDariMesinAbsensiTipe2 = dataKehadiranDariMesinAbsensiTipe2Service.add(dataKehadiranDariMesinAbsensiTipe2);
  689.                            
  690.                             hrisAuthorization.addOrEditAdminDataAbsensiPerKaryawan(karyawan, trxUploadDataKehadiranPojo.getTanggal(), TimeUtil.getSystemDate());
  691.                         }
  692.                     }  
  693.                 }
  694.                
  695.                 if (trxUploadDataKehadiranDariMesinAbsensiTipe1 != null && StringUtil.isBlank(trxUploadDataKehadiranDariMesinAbsensiTipe1.getStatusError())) {
  696.                     if (mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("B")) {
  697.                         Date timestampMasuk = TimeUtil.getDate(trxUploadDataKehadiranPojo.getTanggal(), trxUploadDataKehadiranPojo.getJamMasuk());
  698.                         Date timestampPulang = TimeUtil.getDate(trxUploadDataKehadiranPojo.getTanggal(), trxUploadDataKehadiranPojo.getJamPulang());
  699.                         DataKehadiranDariMesinAbsensiTipe1 dataKehadiranDariMesinAbsensiTipe1 = dataKehadiranDariMesinAbsensiTipe1Service.findByBk(mesinAbsensi, karyawan, trxUploadDataKehadiranPojo.getTanggal(), timestampMasuk, timestampPulang).orElse(null);
  700.                         if (dataKehadiranDariMesinAbsensiTipe1 == null) {
  701.                             dataKehadiranDariMesinAbsensiTipe1 = new DataKehadiranDariMesinAbsensiTipe1();
  702.                             dataKehadiranDariMesinAbsensiTipe1.setMesinAbsensi(mesinAbsensi);
  703.                             dataKehadiranDariMesinAbsensiTipe1.setKaryawan(karyawan);
  704.                             dataKehadiranDariMesinAbsensiTipe1.setTanggalAbsensi(trxUploadDataKehadiranPojo.getTanggal());
  705.                             dataKehadiranDariMesinAbsensiTipe1.setTimestampMasuk(timestampMasuk);
  706.                             if (mesinAbsensi.getFormatDataMesinAbsensi().getIsiKolomKeluarBesok().equals(trxUploadDataKehadiranPojo.getKeluarBesok())) {
  707.                                 timestampPulang = TimeUtil.getDate(TimeUtil.addDays(trxUploadDataKehadiranPojo.getTanggal(), 1), trxUploadDataKehadiranPojo.getJamPulang());
  708.                             }
  709.                             dataKehadiranDariMesinAbsensiTipe1.setTimestampPulang(timestampPulang);
  710.                             dataKehadiranDariMesinAbsensiTipe1.setRefTransaction(trxUploadDataKehadiranDariMesinAbsensiTipe1.getTransaction());
  711.                             dataKehadiranDariMesinAbsensiTipe1.setRefTrxNumber(trxUploadDataKehadiranDariMesinAbsensiTipe1.getTrxNumber());
  712.                             dataKehadiranDariMesinAbsensiTipe1.setRefTrxDate(trxUploadDataKehadiranDariMesinAbsensiTipe1.getTrxDate());
  713.                             dataKehadiranDariMesinAbsensiTipe1.setProcessTimestamp(trxUploadDataKehadiranDariMesinAbsensiTipe1.getCreationTime());
  714.                             dataKehadiranDariMesinAbsensiTipe1 = dataKehadiranDariMesinAbsensiTipe1Service.add(dataKehadiranDariMesinAbsensiTipe1);
  715.                            
  716.                             hrisAuthorization.addOrEditAdminDataAbsensiPerKaryawan(karyawan, trxUploadDataKehadiranPojo.getTanggal(), TimeUtil.getSystemDate());
  717.                         }
  718.                     } else if (mesinAbsensi.getFormatDataMesinAbsensi().getJenis().equals("D")) {
  719.                         Date timestampMasuk = TimeUtil.getDate(trxUploadDataKehadiranPojo.getTanggal(), trxUploadDataKehadiranPojo.getJamMasuk());
  720.                         Date timestampPulang = TimeUtil.getDate(trxUploadDataKehadiranPojo.getTanggal(), trxUploadDataKehadiranPojo.getJamPulang());
  721.                         DataKehadiranDariMesinAbsensiTipe1 dataKehadiranDariMesinAbsensiTipe1 = dataKehadiranDariMesinAbsensiTipe1Service.findByBk(mesinAbsensi, karyawan, trxUploadDataKehadiranPojo.getTanggal(), timestampMasuk, timestampPulang).orElse(null);
  722.                         if (dataKehadiranDariMesinAbsensiTipe1 == null) {
  723.                             dataKehadiranDariMesinAbsensiTipe1 = new DataKehadiranDariMesinAbsensiTipe1();
  724.                             dataKehadiranDariMesinAbsensiTipe1.setMesinAbsensi(mesinAbsensi);
  725.                             dataKehadiranDariMesinAbsensiTipe1.setKaryawan(karyawan);
  726.                             dataKehadiranDariMesinAbsensiTipe1.setTanggalAbsensi(trxUploadDataKehadiranPojo.getTanggal());
  727.                             dataKehadiranDariMesinAbsensiTipe1.setTimestampMasuk(timestampMasuk);
  728.                             if (TimeUtil.isTimeBefore(trxUploadDataKehadiranDariMesinAbsensiTipe1.getJamPulang(), trxUploadDataKehadiranDariMesinAbsensiTipe1.getJamMasuk())) {
  729.                                 timestampPulang = TimeUtil.getDate(TimeUtil.addDays(trxUploadDataKehadiranPojo.getTanggal(), 1), trxUploadDataKehadiranPojo.getJamPulang());
  730.                             }
  731.                             dataKehadiranDariMesinAbsensiTipe1.setTimestampPulang(timestampPulang);
  732.                             dataKehadiranDariMesinAbsensiTipe1.setRefTransaction(trxUploadDataKehadiranDariMesinAbsensiTipe1.getTransaction());
  733.                             dataKehadiranDariMesinAbsensiTipe1.setRefTrxNumber(trxUploadDataKehadiranDariMesinAbsensiTipe1.getTrxNumber());
  734.                             dataKehadiranDariMesinAbsensiTipe1.setRefTrxDate(trxUploadDataKehadiranDariMesinAbsensiTipe1.getTrxDate());
  735.                             dataKehadiranDariMesinAbsensiTipe1.setProcessTimestamp(trxUploadDataKehadiranDariMesinAbsensiTipe1.getCreationTime());
  736.                             dataKehadiranDariMesinAbsensiTipe1 = dataKehadiranDariMesinAbsensiTipe1Service.add(dataKehadiranDariMesinAbsensiTipe1);
  737.                            
  738.                             hrisAuthorization.addOrEditAdminDataAbsensiPerKaryawan(karyawan, trxUploadDataKehadiranPojo.getTanggal(), TimeUtil.getSystemDate());
  739.                         }
  740.                     }
  741.                 }
  742.             } catch (Exception e) {
  743.                 hasErrors = true;
  744.                 multiUpdateErrorHandling(cmuex, uploadedData, e);
  745.             }
  746.         }
  747.        
  748.         if (hasErrors) throw cmuex;
  749.         return uploadedData;
  750.     }
  751.    
  752.     private ArrayList<String> getTemplateHeaders() {
  753.         ArrayList<String> headerList = new ArrayList<>();
  754.         headerList.add("Nomor ID *");
  755.         headerList.add("Tanggal *");
  756.         headerList.add("Jam *");
  757.        
  758.         return headerList;
  759.     }
  760. }
Advertisement
Add Comment
Please, Sign In to add comment