ronaldkwandy

Untitled

Sep 29th, 2020
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.52 KB | None | 0 0
  1. package id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.services;
  2.  
  3. import java.io.FileInputStream;
  4. import java.util.ArrayList;
  5. import java.util.Base64;
  6. import java.util.HashMap;
  7. import java.util.Iterator;
  8. import java.util.List;
  9. import java.util.Map;
  10.  
  11. import javax.servlet.http.HttpServletResponse;
  12.  
  13. import org.apache.poi.ss.usermodel.Row;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import org.springframework.web.multipart.MultipartFile;
  18.  
  19. import com.ibm.icu.util.Calendar;
  20. import com.ibm.icu.util.GregorianCalendar;
  21.  
  22. import id.co.sofcograha.gajiidapi.base.constants.BaseConstants;
  23. import id.co.sofcograha.gajiidapi.base.download.FileGenerator;
  24. import id.co.sofcograha.gajiidapi.base.exceptions.BusinessException;
  25. import id.co.sofcograha.gajiidapi.base.exceptions.CustomMultiUpdateException;
  26. import id.co.sofcograha.gajiidapi.base.extendables.FreeFormService;
  27. import id.co.sofcograha.gajiidapi.base.responses.Message;
  28. import id.co.sofcograha.gajiidapi.base.uploadtemplate.entities.UploadTemplate;
  29. import id.co.sofcograha.gajiidapi.base.utils.ExcelUtil;
  30. import id.co.sofcograha.gajiidapi.base.utils.StringUtil;
  31. import id.co.sofcograha.gajiidapi.base.utils.TimeUtil;
  32. import id.co.sofcograha.gajiidapi.domain.hris.HRISAuthorization;
  33. import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.overrideJadwalKerja.entities.OverrideJadwalKerja;
  34. import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.overrideJadwalKerja.services.OverrideJadwalKerjaService;
  35. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.entities.CompleteUploadJadwalKerjaShift;
  36. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.entities.TrxUploadJadwalKerjaShiftTakMenentu;
  37. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.pojos.CompleteUploadJadwalKerjaShiftPojo;
  38. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.pojos.TrxUploadJadwalKerjaShiftTakMenentuPojo;
  39. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.pojos.TrxUploadRosterPojo;
  40. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.repositories.TrxUploadJadwalKerjaShiftTakMenentuRepository;
  41. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentudetailshiftkaryawan.entities.TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan;
  42. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentudetailshiftkaryawan.pojos.TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanPojo;
  43. import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentudetailshiftkaryawan.services.TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanService;
  44. import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.entities.Employee;
  45. import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.pojos.EmployeePojo;
  46. import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.services.EmployeeService;
  47. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.jenisabsensi.entities.MstJenisAbsensi;
  48. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.jenisabsensi.pojos.MstJenisAbsensiPojo;
  49. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.jenisabsensi.services.MstJenisAbsensiService;
  50. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.kodeabsensi.entities.MstKodeAbsensi;
  51. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.kodeabsensi.services.MstKodeAbsensiService;
  52. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.shift.entities.MstShift;
  53. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.shift.pojos.MstShiftPojo;
  54. import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.shift.services.MstShiftService;
  55. import id.co.sofcograha.gajiidapi.domain.hris.mst.payroll.payrollholiday.services.MstPayrollHolidayService;
  56.  
  57. @Service
  58. public class TrxUploadRosterService extends FreeFormService {
  59.  
  60.   @Autowired
  61.   private ExcelUtil excel;
  62.   @Autowired
  63.   private EmployeeService employeeService;
  64.   @Autowired
  65.   private HRISAuthorization hrisAuthorization;
  66.   @Autowired
  67.   private MstKodeAbsensiService kodeAbsensiService;
  68.   @Autowired
  69.   private MstJenisAbsensiService jenisAbsensiService;
  70.   @Autowired
  71.   private MstShiftService shiftService;
  72.   @Autowired
  73.   private MstPayrollHolidayService payrollHolidayService;
  74.   @Autowired
  75.   private OverrideJadwalKerjaService overrideJadwalKerjaService;
  76.   @Autowired
  77.   private TrxUploadJadwalKerjaShiftTakMenentuService jadwalKerjaShiftService;
  78.   @Autowired
  79.   private TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanService jadwalKerjaDetailShiftService;
  80.   @Autowired
  81.   private TrxUploadJadwalKerjaShiftTakMenentuRepository uploadJadwalKerjaShiftTakMenentuRepository;
  82.  
  83.   @Transactional
  84.   public UploadTemplate download(HttpServletResponse response) {
  85.     String fileName = "jadwalKerjaRoster.xlsx";
  86.     FileInputStream templateFile = FileGenerator.getFileInputStream(fileName);
  87.  
  88.     excel.init(fileName, templateFile, getTemplateHeaders(), false);
  89.     initKodeAbsensi(excel);
  90.  
  91.     byte[] byteFiles = FileGenerator.generateExcelFile(response, fileName, excel.getWorkbook());
  92.     UploadTemplate entity = new UploadTemplate();
  93.     entity.setFileExtension(FileGenerator.CONTENT_TYPE_EXCEL_XLSX);
  94.     entity.setFileName(fileName);
  95.     entity.setFile(Base64.getEncoder().encodeToString(byteFiles));
  96.  
  97.     return entity;
  98.   }
  99.  
  100.   @Transactional
  101.   public List<TrxUploadRosterPojo> readUploadExcel(MultipartFile file, boolean doValidation) {
  102.     excel.init(file, getTemplateHeaders());
  103.  
  104.     List<TrxUploadRosterPojo> result = new ArrayList<>();
  105.     CustomMultiUpdateException cmue = new CustomMultiUpdateException();
  106.     boolean hasErrors = false;
  107.     int rowNum = 0;
  108.  
  109.     Iterator<Row> dataRowIterator = excel.getDataIterator();
  110.     while (dataRowIterator.hasNext()) {
  111.       Row dataRow = dataRowIterator.next();
  112.       rowNum = dataRow.getRowNum() + 1;
  113.       TrxUploadRosterPojo uploadRoster = new TrxUploadRosterPojo();
  114.  
  115.       CompleteUploadJadwalKerjaShiftPojo completeJadwalKerja = new CompleteUploadJadwalKerjaShiftPojo();
  116.       TrxUploadJadwalKerjaShiftTakMenentuPojo jadwalKerjaShift = new TrxUploadJadwalKerjaShiftTakMenentuPojo();
  117.  
  118.       completeJadwalKerja.jadwalKerjaShift = jadwalKerjaShift;
  119.  
  120.       List<Message> errorList = new ArrayList<>();
  121.  
  122.       try {
  123.         String employeeId = excel.getCellStringValue(dataRow, "ID Karyawan");
  124.  
  125.         if (!StringUtil.isBlank(employeeId)) {
  126.           Employee employee = employeeService.findByBk(employeeId.trim()).orElse(null);
  127.  
  128.           TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanPojo detail;
  129.           List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanPojo> detailPojos = new ArrayList<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanPojo>();
  130.  
  131.           if (employee != null) {
  132.             for (int i = 1; i <= 31; i++) {
  133.               detail = new TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanPojo();
  134.  
  135.               String kode = excel.getCellStringValue(dataRow, i + "");
  136.               if (!StringUtil.isBlank(kode)) {
  137.                 MstKodeAbsensi kodeAbsensi = kodeAbsensiService.findByBk(kode).orElse(null);
  138.                
  139.                 if (kodeAbsensi != null) {
  140.                   if (kodeAbsensi.getJenisAbsensi() != null) {
  141.                     MstJenisAbsensi jenisAbsensi = jenisAbsensiService.find(kodeAbsensi.getJenisAbsensi().getId())
  142.                         .orElse(null);
  143.                     detail.jenisAbsensi = MstJenisAbsensiPojo.fromEntity(jenisAbsensi);
  144.                   } else {
  145.                     MstShift shift = shiftService.find(kodeAbsensi.getShift().getId()).orElse(null);
  146.                     detail.shift = MstShiftPojo.fromEntity(shift);
  147.                   }
  148.                   Calendar cal = Calendar.getInstance();
  149.                   detail.tanggal = new GregorianCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), i).getTime();
  150.                   detail.jadwal = kodeAbsensi.getJadwal() != null ? kodeAbsensi.getJadwal().toString() : BaseConstants.BLANK;
  151.                   detail.kode = kodeAbsensi.getKodeAbsensi();
  152.                   detail.warna = kodeAbsensi.getWarna();
  153.                 }
  154.                
  155. //                detail.karyawan = EmployeePojo.fromEntity(employee);
  156. //                detailPojos.add(detail);
  157.               } else {
  158.                 Calendar cal = Calendar.getInstance();
  159.                 detail.tanggal = new GregorianCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), i).getTime();
  160.                 detail.kode = "-";
  161.                 errorList.add(Message.create().setCode("uploadJadwalRoster.tanggal" + i +".empty"));
  162.               }
  163.              
  164.               detail.karyawan = EmployeePojo.fromEntity(employee);
  165.               detailPojos.add(detail);
  166.             }
  167.  
  168.             completeJadwalKerja.jadwalKerjaShiftDetails = detailPojos;
  169.             uploadRoster.completeJadwalKerja = completeJadwalKerja;
  170.           }
  171.  
  172.           uploadRoster.errorList = errorList;
  173.           throwBatchError();
  174.          
  175.           result.add(uploadRoster);
  176.         }
  177.       } catch (Exception e) {
  178.         hasErrors = true;
  179.         multiUpdateErrorHandling(cmue, rowNum, e);
  180.       }
  181.     }
  182.  
  183.     if (hasErrors && doValidation)
  184.       throw cmue;
  185.     return result;
  186.   }
  187.  
  188.   @Transactional
  189.   public int saveData(List<TrxUploadRosterPojo> pojos) {
  190.     CustomMultiUpdateException cmuex = new CustomMultiUpdateException();
  191.     boolean hasErrors = false;
  192.     int uploadedData = 0;
  193.  
  194.     for (TrxUploadRosterPojo pojo : pojos) {
  195.       uploadedData++;
  196.       try {
  197.         CompleteUploadJadwalKerjaShift completeTransaction = new CompleteUploadJadwalKerjaShift();
  198.         TrxUploadJadwalKerjaShiftTakMenentu header = new TrxUploadJadwalKerjaShiftTakMenentu();
  199.         List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan> details = new ArrayList<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan>();
  200.  
  201.         header = pojo.completeJadwalKerja.getJadwalKerjaShiftEntity();
  202.         details = pojo.completeJadwalKerja.getJadwalKerjaShiftDetailEntities();
  203.         String approvalDesc = pojo.completeJadwalKerja.jadwalKerjaShift.approvalDescription;
  204.  
  205.         completeTransaction.setJadwalKerjaShift(header);
  206.         completeTransaction.setJadwalKerjaShiftDetail(details);
  207.        
  208.         if (details.size() > 0) {
  209.             TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan detail = details.get(0);
  210.             Employee employee = employeeService.get(detail.getKaryawan().getId());
  211.             if (!hrisAuthorization.isUserBerhakAksesLokasiKerja(employee.getWorkplace())) {
  212.                 throw new BusinessException("hrisauthorization.workplace.notauthorized", employee.getWorkplace().getName());
  213.             }
  214.         }
  215.  
  216.         completeTransaction = addTransaction(completeTransaction, approvalDesc);
  217.         throwBatchError();
  218.       } catch (Exception e) {
  219.         hasErrors = true;
  220.         multiUpdateErrorHandling(cmuex, uploadedData, e);
  221.       }
  222.     }
  223.  
  224.     if (hasErrors)
  225.       throw cmuex;
  226.     return uploadedData;
  227.   }
  228.  
  229.   @Transactional
  230.   public CompleteUploadJadwalKerjaShift addTransaction(CompleteUploadJadwalKerjaShift compleUploadJadwalKerjaShift, String approvalDesc) {
  231.     CompleteUploadJadwalKerjaShift result = new CompleteUploadJadwalKerjaShift();
  232.     TrxUploadJadwalKerjaShiftTakMenentu header = new TrxUploadJadwalKerjaShiftTakMenentu();
  233.     List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan> details = new ArrayList<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan>();
  234.  
  235.     header = jadwalKerjaShiftService.add(compleUploadJadwalKerjaShift.getJadwalKerjaShift(), approvalDesc);
  236.     details = addDetailTransaction(header, compleUploadJadwalKerjaShift.getJadwalKerjaShiftDetail());
  237.  
  238.     result.setJadwalKerjaShift(header);
  239.     result.setJadwalKerjaShiftDetail(details);
  240.     return result;
  241.   }
  242.  
  243.   public List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan> addDetailTransaction(
  244.       TrxUploadJadwalKerjaShiftTakMenentu jadwalKerjaShift,
  245.       List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan> details) {
  246.     List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan> results = new ArrayList<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan>();
  247.  
  248.     for (TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan entity : details) {
  249.       if (entity.getJadwal().equalsIgnoreCase("PH")) {
  250.         valHariLibur(entity);
  251.         throwBatchError();
  252.       }
  253.  
  254.       valAdminDataAbsensiPerKaryawan(entity);
  255.       throwBatchError();
  256.  
  257.       entity.setTrxUploadJadwalKerjaShiftTakMenentu(jadwalKerjaShift);
  258.       results.add(jadwalKerjaDetailShiftService.add(entity));
  259.       throwBatchError();
  260.  
  261.       addOverrideJadwalKerja(entity);
  262.     }
  263.     return results;
  264.   }
  265.  
  266.   public void addOverrideJadwalKerja(TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan entity) {
  267.    
  268.     OverrideJadwalKerja overrideJadwalKerja = overrideJadwalKerjaService.findByBk(entity.getKaryawan().getId(), entity.getTanggal()).orElse(new OverrideJadwalKerja());
  269.    
  270.     overrideJadwalKerja.setJadwal(entity.getJadwal());
  271.     overrideJadwalKerja.setShift(entity.getShift());
  272.     overrideJadwalKerja.setJenisAbsensi(entity.getJenisAbsensi());
  273.    
  274.     if (overrideJadwalKerja.getId() == null) {
  275.       overrideJadwalKerja.setKaryawan(entity.getKaryawan());
  276.       overrideJadwalKerja.setTanggal(entity.getTanggal());
  277.       overrideJadwalKerja = overrideJadwalKerjaService.add(overrideJadwalKerja);
  278.     } else {
  279.       overrideJadwalKerja = overrideJadwalKerjaService.edit(overrideJadwalKerja);
  280.     }
  281.  
  282.     throwBatchError();
  283.   }
  284.  
  285.   public void valHariLibur(TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan entity) {
  286.     if (payrollHolidayService.findByHolidayDate(entity.getTanggal()).isEmpty()) {
  287.       batchError("trxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan.tanggal.is.not.public.holiday");
  288.     }
  289.   }
  290.  
  291.   public void valAdminDataAbsensiPerKaryawan(TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan entity) {
  292.     hrisAuthorization.addOrEditAdminDataAbsensiPerKaryawan(entity.getKaryawan(), entity.getTanggal(),
  293.         TimeUtil.getSystemDateTime());
  294.   }
  295.  
  296.   private void initKodeAbsensi(ExcelUtil excel) {
  297.     Map<String, String> searchParameter = new HashMap<String, String>();
  298.     searchParameter.put("flagAktif", "true");
  299.     List<MstKodeAbsensi> kodeAbsenList = uploadJadwalKerjaShiftTakMenentuRepository.searchMstKodeAbsensiUsingFilter();
  300.  
  301.     int rowIndex = 1;
  302.     for (MstKodeAbsensi kodeAbsensi : kodeAbsenList) {
  303.       Row dataRow = excel.getSheet(1).createRow(rowIndex);
  304.      
  305.       dataRow.createCell(0).setCellValue(kodeAbsensi.getKodeAbsensi());
  306.      
  307.       if (kodeAbsensi.getShift() != null) {
  308.           dataRow.createCell(1).setCellValue(kodeAbsensi.getShift().getNama());
  309.       }
  310.  
  311.       if (kodeAbsensi.getJenisAbsensi() != null) {
  312.           dataRow.createCell(2).setCellValue(kodeAbsensi.getJenisAbsensi().getNama());
  313.       }
  314.      
  315.       if (kodeAbsensi.getShift() != null) {
  316.           dataRow.createCell(3).setCellValue(TimeUtil.convertTimeToString(kodeAbsensi.getShift().getJamMasuk()));
  317.       }
  318.      
  319.       if (kodeAbsensi.getShift() != null) {
  320.           dataRow.createCell(4).setCellValue(TimeUtil.convertTimeToString(kodeAbsensi.getShift().getJamPulang()));
  321.       }
  322.  
  323.       rowIndex++;
  324.     }
  325.   }
  326.  
  327.   private ArrayList<String> getTemplateHeaders() {
  328.     ArrayList<String> headerList = new ArrayList<>();
  329.     headerList.add("ID Karyawan");
  330.     headerList.add("Nama Karyawan");
  331.     headerList.add("1");
  332.     headerList.add("2");
  333.     headerList.add("3");
  334.     headerList.add("4");
  335.     headerList.add("5");
  336.     headerList.add("6");
  337.     headerList.add("7");
  338.     headerList.add("8");
  339.     headerList.add("9");
  340.     headerList.add("10");
  341.     headerList.add("11");
  342.     headerList.add("12");
  343.     headerList.add("13");
  344.     headerList.add("14");
  345.     headerList.add("15");
  346.     headerList.add("16");
  347.     headerList.add("17");
  348.     headerList.add("18");
  349.     headerList.add("19");
  350.     headerList.add("20");
  351.     headerList.add("21");
  352.     headerList.add("22");
  353.     headerList.add("23");
  354.     headerList.add("24");
  355.     headerList.add("25");
  356.     headerList.add("26");
  357.     headerList.add("27");
  358.     headerList.add("28");
  359.     headerList.add("29");
  360.     headerList.add("30");
  361.     headerList.add("31");
  362.  
  363.     return headerList;
  364.   }
  365. }
  366.  
Add Comment
Please, Sign In to add comment