Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.services;
- import java.io.FileInputStream;
- import java.util.ArrayList;
- import java.util.Base64;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.poi.ss.usermodel.Row;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.web.multipart.MultipartFile;
- import com.ibm.icu.util.Calendar;
- import com.ibm.icu.util.GregorianCalendar;
- import id.co.sofcograha.gajiidapi.base.constants.BaseConstants;
- import id.co.sofcograha.gajiidapi.base.download.FileGenerator;
- import id.co.sofcograha.gajiidapi.base.exceptions.BusinessException;
- import id.co.sofcograha.gajiidapi.base.exceptions.CustomMultiUpdateException;
- import id.co.sofcograha.gajiidapi.base.extendables.FreeFormService;
- import id.co.sofcograha.gajiidapi.base.responses.Message;
- import id.co.sofcograha.gajiidapi.base.uploadtemplate.entities.UploadTemplate;
- import id.co.sofcograha.gajiidapi.base.utils.ExcelUtil;
- import id.co.sofcograha.gajiidapi.base.utils.StringUtil;
- import id.co.sofcograha.gajiidapi.base.utils.TimeUtil;
- import id.co.sofcograha.gajiidapi.domain.hris.HRISAuthorization;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.overrideJadwalKerja.entities.OverrideJadwalKerja;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.data.overrideJadwalKerja.services.OverrideJadwalKerjaService;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.entities.CompleteUploadJadwalKerjaShift;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.entities.TrxUploadJadwalKerjaShiftTakMenentu;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.pojos.CompleteUploadJadwalKerjaShiftPojo;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.pojos.TrxUploadJadwalKerjaShiftTakMenentuPojo;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.pojos.TrxUploadRosterPojo;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentu.repositories.TrxUploadJadwalKerjaShiftTakMenentuRepository;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentudetailshiftkaryawan.entities.TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentudetailshiftkaryawan.pojos.TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanPojo;
- import id.co.sofcograha.gajiidapi.domain.hris.attendance.trx.uploadjadwalkerjashifttakmenentudetailshiftkaryawan.services.TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanService;
- import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.entities.Employee;
- import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.pojos.EmployeePojo;
- import id.co.sofcograha.gajiidapi.domain.hris.employee.data.employee.services.EmployeeService;
- import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.jenisabsensi.entities.MstJenisAbsensi;
- import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.jenisabsensi.pojos.MstJenisAbsensiPojo;
- import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.jenisabsensi.services.MstJenisAbsensiService;
- import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.kodeabsensi.entities.MstKodeAbsensi;
- import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.kodeabsensi.services.MstKodeAbsensiService;
- import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.shift.entities.MstShift;
- import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.shift.pojos.MstShiftPojo;
- import id.co.sofcograha.gajiidapi.domain.hris.mst.attendance.shift.services.MstShiftService;
- import id.co.sofcograha.gajiidapi.domain.hris.mst.payroll.payrollholiday.services.MstPayrollHolidayService;
- @Service
- public class TrxUploadRosterService extends FreeFormService {
- @Autowired
- private ExcelUtil excel;
- @Autowired
- private EmployeeService employeeService;
- @Autowired
- private HRISAuthorization hrisAuthorization;
- @Autowired
- private MstKodeAbsensiService kodeAbsensiService;
- @Autowired
- private MstJenisAbsensiService jenisAbsensiService;
- @Autowired
- private MstShiftService shiftService;
- @Autowired
- private MstPayrollHolidayService payrollHolidayService;
- @Autowired
- private OverrideJadwalKerjaService overrideJadwalKerjaService;
- @Autowired
- private TrxUploadJadwalKerjaShiftTakMenentuService jadwalKerjaShiftService;
- @Autowired
- private TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanService jadwalKerjaDetailShiftService;
- @Autowired
- private TrxUploadJadwalKerjaShiftTakMenentuRepository uploadJadwalKerjaShiftTakMenentuRepository;
- @Transactional
- public UploadTemplate download(HttpServletResponse response) {
- String fileName = "jadwalKerjaRoster.xlsx";
- FileInputStream templateFile = FileGenerator.getFileInputStream(fileName);
- excel.init(fileName, templateFile, getTemplateHeaders(), false);
- initKodeAbsensi(excel);
- byte[] byteFiles = FileGenerator.generateExcelFile(response, fileName, excel.getWorkbook());
- UploadTemplate entity = new UploadTemplate();
- entity.setFileExtension(FileGenerator.CONTENT_TYPE_EXCEL_XLSX);
- entity.setFileName(fileName);
- entity.setFile(Base64.getEncoder().encodeToString(byteFiles));
- return entity;
- }
- @Transactional
- public List<TrxUploadRosterPojo> readUploadExcel(MultipartFile file, boolean doValidation) {
- excel.init(file, getTemplateHeaders());
- List<TrxUploadRosterPojo> result = new ArrayList<>();
- CustomMultiUpdateException cmue = new CustomMultiUpdateException();
- boolean hasErrors = false;
- int rowNum = 0;
- Iterator<Row> dataRowIterator = excel.getDataIterator();
- while (dataRowIterator.hasNext()) {
- Row dataRow = dataRowIterator.next();
- rowNum = dataRow.getRowNum() + 1;
- TrxUploadRosterPojo uploadRoster = new TrxUploadRosterPojo();
- CompleteUploadJadwalKerjaShiftPojo completeJadwalKerja = new CompleteUploadJadwalKerjaShiftPojo();
- TrxUploadJadwalKerjaShiftTakMenentuPojo jadwalKerjaShift = new TrxUploadJadwalKerjaShiftTakMenentuPojo();
- completeJadwalKerja.jadwalKerjaShift = jadwalKerjaShift;
- List<Message> errorList = new ArrayList<>();
- try {
- String employeeId = excel.getCellStringValue(dataRow, "ID Karyawan");
- if (!StringUtil.isBlank(employeeId)) {
- Employee employee = employeeService.findByBk(employeeId.trim()).orElse(null);
- TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanPojo detail;
- List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanPojo> detailPojos = new ArrayList<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanPojo>();
- if (employee != null) {
- for (int i = 1; i <= 31; i++) {
- detail = new TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawanPojo();
- String kode = excel.getCellStringValue(dataRow, i + "");
- if (!StringUtil.isBlank(kode)) {
- MstKodeAbsensi kodeAbsensi = kodeAbsensiService.findByBk(kode).orElse(null);
- if (kodeAbsensi != null) {
- if (kodeAbsensi.getJenisAbsensi() != null) {
- MstJenisAbsensi jenisAbsensi = jenisAbsensiService.find(kodeAbsensi.getJenisAbsensi().getId())
- .orElse(null);
- detail.jenisAbsensi = MstJenisAbsensiPojo.fromEntity(jenisAbsensi);
- } else {
- MstShift shift = shiftService.find(kodeAbsensi.getShift().getId()).orElse(null);
- detail.shift = MstShiftPojo.fromEntity(shift);
- }
- Calendar cal = Calendar.getInstance();
- detail.tanggal = new GregorianCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), i).getTime();
- detail.jadwal = kodeAbsensi.getJadwal() != null ? kodeAbsensi.getJadwal().toString() : BaseConstants.BLANK;
- detail.kode = kodeAbsensi.getKodeAbsensi();
- detail.warna = kodeAbsensi.getWarna();
- }
- // detail.karyawan = EmployeePojo.fromEntity(employee);
- // detailPojos.add(detail);
- } else {
- Calendar cal = Calendar.getInstance();
- detail.tanggal = new GregorianCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), i).getTime();
- detail.kode = "-";
- errorList.add(Message.create().setCode("uploadJadwalRoster.tanggal" + i +".empty"));
- }
- detail.karyawan = EmployeePojo.fromEntity(employee);
- detailPojos.add(detail);
- }
- completeJadwalKerja.jadwalKerjaShiftDetails = detailPojos;
- uploadRoster.completeJadwalKerja = completeJadwalKerja;
- }
- uploadRoster.errorList = errorList;
- throwBatchError();
- result.add(uploadRoster);
- }
- } catch (Exception e) {
- hasErrors = true;
- multiUpdateErrorHandling(cmue, rowNum, e);
- }
- }
- if (hasErrors && doValidation)
- throw cmue;
- return result;
- }
- @Transactional
- public int saveData(List<TrxUploadRosterPojo> pojos) {
- CustomMultiUpdateException cmuex = new CustomMultiUpdateException();
- boolean hasErrors = false;
- int uploadedData = 0;
- for (TrxUploadRosterPojo pojo : pojos) {
- uploadedData++;
- try {
- CompleteUploadJadwalKerjaShift completeTransaction = new CompleteUploadJadwalKerjaShift();
- TrxUploadJadwalKerjaShiftTakMenentu header = new TrxUploadJadwalKerjaShiftTakMenentu();
- List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan> details = new ArrayList<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan>();
- header = pojo.completeJadwalKerja.getJadwalKerjaShiftEntity();
- details = pojo.completeJadwalKerja.getJadwalKerjaShiftDetailEntities();
- String approvalDesc = pojo.completeJadwalKerja.jadwalKerjaShift.approvalDescription;
- completeTransaction.setJadwalKerjaShift(header);
- completeTransaction.setJadwalKerjaShiftDetail(details);
- if (details.size() > 0) {
- TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan detail = details.get(0);
- Employee employee = employeeService.get(detail.getKaryawan().getId());
- if (!hrisAuthorization.isUserBerhakAksesLokasiKerja(employee.getWorkplace())) {
- throw new BusinessException("hrisauthorization.workplace.notauthorized", employee.getWorkplace().getName());
- }
- }
- completeTransaction = addTransaction(completeTransaction, approvalDesc);
- throwBatchError();
- } catch (Exception e) {
- hasErrors = true;
- multiUpdateErrorHandling(cmuex, uploadedData, e);
- }
- }
- if (hasErrors)
- throw cmuex;
- return uploadedData;
- }
- @Transactional
- public CompleteUploadJadwalKerjaShift addTransaction(CompleteUploadJadwalKerjaShift compleUploadJadwalKerjaShift, String approvalDesc) {
- CompleteUploadJadwalKerjaShift result = new CompleteUploadJadwalKerjaShift();
- TrxUploadJadwalKerjaShiftTakMenentu header = new TrxUploadJadwalKerjaShiftTakMenentu();
- List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan> details = new ArrayList<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan>();
- header = jadwalKerjaShiftService.add(compleUploadJadwalKerjaShift.getJadwalKerjaShift(), approvalDesc);
- details = addDetailTransaction(header, compleUploadJadwalKerjaShift.getJadwalKerjaShiftDetail());
- result.setJadwalKerjaShift(header);
- result.setJadwalKerjaShiftDetail(details);
- return result;
- }
- public List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan> addDetailTransaction(
- TrxUploadJadwalKerjaShiftTakMenentu jadwalKerjaShift,
- List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan> details) {
- List<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan> results = new ArrayList<TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan>();
- for (TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan entity : details) {
- if (entity.getJadwal().equalsIgnoreCase("PH")) {
- valHariLibur(entity);
- throwBatchError();
- }
- valAdminDataAbsensiPerKaryawan(entity);
- throwBatchError();
- entity.setTrxUploadJadwalKerjaShiftTakMenentu(jadwalKerjaShift);
- results.add(jadwalKerjaDetailShiftService.add(entity));
- throwBatchError();
- addOverrideJadwalKerja(entity);
- }
- return results;
- }
- public void addOverrideJadwalKerja(TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan entity) {
- OverrideJadwalKerja overrideJadwalKerja = overrideJadwalKerjaService.findByBk(entity.getKaryawan().getId(), entity.getTanggal()).orElse(new OverrideJadwalKerja());
- overrideJadwalKerja.setJadwal(entity.getJadwal());
- overrideJadwalKerja.setShift(entity.getShift());
- overrideJadwalKerja.setJenisAbsensi(entity.getJenisAbsensi());
- if (overrideJadwalKerja.getId() == null) {
- overrideJadwalKerja.setKaryawan(entity.getKaryawan());
- overrideJadwalKerja.setTanggal(entity.getTanggal());
- overrideJadwalKerja = overrideJadwalKerjaService.add(overrideJadwalKerja);
- } else {
- overrideJadwalKerja = overrideJadwalKerjaService.edit(overrideJadwalKerja);
- }
- throwBatchError();
- }
- public void valHariLibur(TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan entity) {
- if (payrollHolidayService.findByHolidayDate(entity.getTanggal()).isEmpty()) {
- batchError("trxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan.tanggal.is.not.public.holiday");
- }
- }
- public void valAdminDataAbsensiPerKaryawan(TrxUploadJadwalKerjaShiftTakMenentuDetailShiftKaryawan entity) {
- hrisAuthorization.addOrEditAdminDataAbsensiPerKaryawan(entity.getKaryawan(), entity.getTanggal(),
- TimeUtil.getSystemDateTime());
- }
- private void initKodeAbsensi(ExcelUtil excel) {
- Map<String, String> searchParameter = new HashMap<String, String>();
- searchParameter.put("flagAktif", "true");
- List<MstKodeAbsensi> kodeAbsenList = uploadJadwalKerjaShiftTakMenentuRepository.searchMstKodeAbsensiUsingFilter();
- int rowIndex = 1;
- for (MstKodeAbsensi kodeAbsensi : kodeAbsenList) {
- Row dataRow = excel.getSheet(1).createRow(rowIndex);
- dataRow.createCell(0).setCellValue(kodeAbsensi.getKodeAbsensi());
- if (kodeAbsensi.getShift() != null) {
- dataRow.createCell(1).setCellValue(kodeAbsensi.getShift().getNama());
- }
- if (kodeAbsensi.getJenisAbsensi() != null) {
- dataRow.createCell(2).setCellValue(kodeAbsensi.getJenisAbsensi().getNama());
- }
- if (kodeAbsensi.getShift() != null) {
- dataRow.createCell(3).setCellValue(TimeUtil.convertTimeToString(kodeAbsensi.getShift().getJamMasuk()));
- }
- if (kodeAbsensi.getShift() != null) {
- dataRow.createCell(4).setCellValue(TimeUtil.convertTimeToString(kodeAbsensi.getShift().getJamPulang()));
- }
- rowIndex++;
- }
- }
- private ArrayList<String> getTemplateHeaders() {
- ArrayList<String> headerList = new ArrayList<>();
- headerList.add("ID Karyawan");
- headerList.add("Nama Karyawan");
- headerList.add("1");
- headerList.add("2");
- headerList.add("3");
- headerList.add("4");
- headerList.add("5");
- headerList.add("6");
- headerList.add("7");
- headerList.add("8");
- headerList.add("9");
- headerList.add("10");
- headerList.add("11");
- headerList.add("12");
- headerList.add("13");
- headerList.add("14");
- headerList.add("15");
- headerList.add("16");
- headerList.add("17");
- headerList.add("18");
- headerList.add("19");
- headerList.add("20");
- headerList.add("21");
- headerList.add("22");
- headerList.add("23");
- headerList.add("24");
- headerList.add("25");
- headerList.add("26");
- headerList.add("27");
- headerList.add("28");
- headerList.add("29");
- headerList.add("30");
- headerList.add("31");
- return headerList;
- }
- }
Add Comment
Please, Sign In to add comment