ronaldkwandy

Untitled

Oct 27th, 2020
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 159.46 KB | None | 0 0
  1. package id.co.sofcograha.gajiidapi.domain.hris.payroll.rpt.perincianpenghasilankaryawan.services;
  2.  
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.Collections;
  6. import java.util.Comparator;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.stream.Collectors;
  11.  
  12. import org.apache.commons.lang.ArrayUtils;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15.  
  16. import com.lowagie.text.BadElementException;
  17. import com.lowagie.text.Document;
  18. import com.lowagie.text.Element;
  19. import com.lowagie.text.Font;
  20. import com.lowagie.text.FontFactory;
  21. import com.lowagie.text.Image;
  22. import com.lowagie.text.Phrase;
  23. import com.lowagie.text.pdf.PdfPCell;
  24. import com.lowagie.text.pdf.PdfPTable;
  25. import com.lowagie.text.pdf.PdfWriter;
  26.  
  27. import id.co.sofcograha.gajiidapi.base.authentication.CurrentUser;
  28. import id.co.sofcograha.gajiidapi.base.extendables.FreeFormService;
  29. import id.co.sofcograha.gajiidapi.base.mst.company.entities.Company;
  30. import id.co.sofcograha.gajiidapi.base.mst.company.services.CompanyLogoService;
  31. import id.co.sofcograha.gajiidapi.base.mst.company.services.CompanyService;
  32. import id.co.sofcograha.gajiidapi.base.pojos.Base64StringEncodedPojo;
  33. import id.co.sofcograha.gajiidapi.base.search.SearchParameter;
  34. import id.co.sofcograha.gajiidapi.base.utils.OptionalConsumerUtil;
  35. import id.co.sofcograha.gajiidapi.base.utils.StringUtil;
  36. import id.co.sofcograha.gajiidapi.base.utils.TimeUtil;
  37. import id.co.sofcograha.gajiidapi.base.utils.YearMonthUtil;
  38. import id.co.sofcograha.gajiidapi.domain.constants.DomainConstants;
  39. import id.co.sofcograha.gajiidapi.domain.constants.IncomeDeductionConstants;
  40. import id.co.sofcograha.gajiidapi.domain.enums.InfluenceType;
  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.payroll.incomeDeduction.entities.MstIncomeDeduction;
  44. import id.co.sofcograha.gajiidapi.domain.hris.mst.payroll.incomeDeduction.pojos.MstIncomeDeductionPojo;
  45. import id.co.sofcograha.gajiidapi.domain.hris.mst.payroll.incomeDeduction.services.MstIncomeDeductionService;
  46. import id.co.sofcograha.gajiidapi.domain.hris.payroll.data.pembayarankaryawan.services.PembayaranKaryawanService;
  47. import id.co.sofcograha.gajiidapi.domain.hris.payroll.data.pendapatanpotongankaryawan.entities.PendapatanPotonganKaryawan;
  48. import id.co.sofcograha.gajiidapi.domain.hris.payroll.data.pendapatanpotongankaryawan.services.PendapatanPotonganKaryawanService;
  49. import id.co.sofcograha.gajiidapi.domain.hris.payroll.data.summarypenghasilankaryawan.entities.SummaryPenghasilanKaryawan;
  50. import id.co.sofcograha.gajiidapi.domain.hris.payroll.data.summarypenghasilankaryawan.services.SummaryPenghasilanKaryawanService;
  51. import id.co.sofcograha.gajiidapi.domain.hris.payroll.rpt.perincianpenghasilankaryawan.entities.RptDaftarPerincianPenghasilanKaryawan;
  52.  
  53. @Service
  54. public class RptPerincianPenghasilanKaryawanPdfReportService extends FreeFormService {
  55.    
  56.     @Autowired private CompanyService companyService;
  57.     @Autowired private CompanyLogoService companyLogoService;
  58.     @Autowired private EmployeeService employeeService;
  59.     @Autowired private MstIncomeDeductionService mstIncomeDeductionService;
  60.     @Autowired private PendapatanPotonganKaryawanService pendapatanPotonganKaryawanService;
  61.     @Autowired private SummaryPenghasilanKaryawanService summaryPenghasilanKaryawanService;
  62.     @Autowired private PembayaranKaryawanService pembayaranKaryawanService;
  63.    
  64.     private float STANDARD_FONT_SIZE = 7;
  65.     private float TITLE_FONT_SIZE = 11;
  66.     private Font STANDARD_FONT = FontFactory.getFont(FontFactory.HELVETICA, STANDARD_FONT_SIZE);
  67.     private Font STANDARD_FONT_BOLD = FontFactory.getFont(FontFactory.HELVETICA_BOLD, STANDARD_FONT_SIZE);
  68.     private Font TITLE_FONT = FontFactory.getFont(FontFactory.HELVETICA_BOLD, TITLE_FONT_SIZE);
  69.     private int CELL_PADDING = 4;
  70.     private int CELL_PADDING_DEFAULT = 20;
  71.     private int CELL_PADDING_TOP_MINUS = 8;
  72.     private int CELL_TABLE_PADDING_TOP = 2;
  73.     private int CELL_TABLE_PADDING_BOTTOM = 2;
  74.  
  75.     public Base64StringEncodedPojo getDaftarPerincianPenghasilanKaryawan(String tahunBulanGaji,
  76.                                                                          List<RptDaftarPerincianPenghasilanKaryawan> daftarPerincianPenghasilanKaryawanList) {
  77.        
  78.         RptPerincianPenghasilanKaryawanPdfReportGeneratorService rptPerincianPenghasilanKaryawanPdfReportGeneratorService = new RptPerincianPenghasilanKaryawanPdfReportGeneratorService();
  79.         Document document = rptPerincianPenghasilanKaryawanPdfReportGeneratorService.getDocument();
  80.         document.open();
  81.        
  82.         setContent(document,
  83.                    rptPerincianPenghasilanKaryawanPdfReportGeneratorService.getWriter(),
  84.                    tahunBulanGaji,
  85.                    daftarPerincianPenghasilanKaryawanList);
  86.        
  87.         document.close();
  88.        
  89.         return rptPerincianPenghasilanKaryawanPdfReportGeneratorService.generatePdfReport();
  90.     }
  91.    
  92.     private void setTitle(Document document, String tahunBulanGaji, Employee karyawan) {
  93.         PdfPTable table = new PdfPTable(12);
  94.         table.setTotalWidth(document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin());
  95.         table.getDefaultCell().setBorderWidth(1);
  96.         table.setLockedWidth(true);
  97.         table.setSpacingAfter(10);
  98.        
  99.         Company company = companyService.get(CurrentUser.getCompanyId());
  100.         OptionalConsumerUtil.of(companyLogoService.findByBk(company, 0))
  101.         .ifPresent(companyLogo -> {
  102.             try {
  103.                 Image image = Image.getInstance(ArrayUtils.toPrimitive(companyLogo.getFile()));
  104.                 PdfPCell imageCell = new PdfPCell(image, true);
  105.                 imageCell.setRowspan(2);
  106.                 imageCell.setPaddingTop(CELL_PADDING_DEFAULT - CELL_PADDING_TOP_MINUS);
  107.                 imageCell.setPaddingLeft(CELL_PADDING_DEFAULT);
  108.                 imageCell.setPaddingRight(CELL_PADDING_DEFAULT);
  109.                 imageCell.setBorderWidthRight(0);
  110.                 imageCell.setBorderWidthBottom(0);
  111.                 table.addCell(imageCell);
  112.             } catch (BadElementException e) {
  113.                 e.printStackTrace();
  114.             } catch (IOException e) {
  115.                 e.printStackTrace();
  116.             }
  117.            
  118.             PdfPCell cell = new PdfPCell();
  119.             cell.setColspan(11);
  120.             cell.setPaddingTop(3);
  121.             cell.setPaddingLeft(-16);
  122.             cell.setPaddingRight(CELL_PADDING_DEFAULT);
  123.             cell.setBorderWidthLeft(0);
  124.             cell.setBorderWidthBottom(0);
  125.             cell.addElement(new Phrase(company.getName(), TITLE_FONT));
  126.             table.addCell(cell);
  127.            
  128.             PdfPCell headerCell = new PdfPCell();
  129.             headerCell.setColspan(11);
  130.             headerCell.setPaddingTop(-3);
  131.             headerCell.setPaddingLeft(-16);
  132.             headerCell.setPaddingRight(CELL_PADDING_DEFAULT);
  133.             headerCell.setBorderWidthLeft(0);
  134.             headerCell.setBorderWidthBottom(0);
  135.             headerCell.setBorderWidthTop(0);
  136.             headerCell.addElement(new Phrase("Perincian Penghasilan Karyawan Januari " + YearMonthUtil.getYear(tahunBulanGaji) + " s/d " + YearMonthUtil.format(tahunBulanGaji), TITLE_FONT));
  137.             table.addCell(headerCell);
  138.         })
  139.         .ifNotPresent(() -> {          
  140.           PdfPCell imageCell = new PdfPCell();
  141.       imageCell.setRowspan(2);
  142.       imageCell.setPaddingTop(CELL_PADDING_DEFAULT - CELL_PADDING_TOP_MINUS);
  143.       imageCell.setPaddingLeft(CELL_PADDING_DEFAULT);
  144.       imageCell.setPaddingRight(CELL_PADDING_DEFAULT);
  145.       imageCell.setBorderWidthRight(0);
  146.       imageCell.setBorderWidthBottom(0);
  147.       table.addCell(imageCell);
  148.      
  149.       PdfPCell cell = new PdfPCell();
  150.       cell.setColspan(11);
  151.       cell.setPaddingTop(3);
  152.       cell.setPaddingLeft(-16);
  153.       cell.setPaddingRight(CELL_PADDING_DEFAULT);
  154.       cell.setBorderWidthLeft(0);
  155.       cell.setBorderWidthBottom(0);
  156.       cell.addElement(new Phrase(company.getName(), TITLE_FONT));
  157.       table.addCell(cell);
  158.      
  159.       PdfPCell headerCell = new PdfPCell();
  160.       headerCell.setColspan(11);
  161.       headerCell.setPaddingTop(-3);
  162.       headerCell.setPaddingLeft(-16);
  163.       headerCell.setPaddingRight(CELL_PADDING_DEFAULT);
  164.       headerCell.setBorderWidthLeft(0);
  165.       headerCell.setBorderWidthBottom(0);
  166.       headerCell.setBorderWidthTop(0);
  167.       headerCell.addElement(new Phrase("Perincian Penghasilan Karyawan Januari " + YearMonthUtil.getYear(tahunBulanGaji) + " s/d " + YearMonthUtil.format(tahunBulanGaji), TITLE_FONT));
  168.       table.addCell(headerCell);
  169.         });
  170.        
  171.         PdfPCell karyawanLabelCell = new PdfPCell(new Phrase("Karyawan", STANDARD_FONT_BOLD));
  172.         karyawanLabelCell.setPaddingLeft(CELL_PADDING_DEFAULT);
  173.         karyawanLabelCell.setBorderWidthTop(0);
  174.         karyawanLabelCell.setBorderWidthBottom(0);
  175.         karyawanLabelCell.setBorderWidthRight(0);
  176.         table.addCell(karyawanLabelCell);
  177.        
  178.         PdfPCell karyawanValueCell = new PdfPCell(new Phrase(": " + karyawan.getEmployeeId() + " - " + karyawan.getName(), STANDARD_FONT));
  179.         karyawanValueCell.setColspan(3);
  180.         karyawanValueCell.setBorderWidth(0);
  181.         table.addCell(karyawanValueCell);
  182.        
  183.         PdfPCell jabatanLabelCell = new PdfPCell(new Phrase("Jabatan", STANDARD_FONT_BOLD));
  184.         jabatanLabelCell.setBorderWidth(0);
  185.         jabatanLabelCell.setColspan(2);
  186.         table.addCell(jabatanLabelCell);
  187.        
  188.         PdfPCell jabatanValueCell = new PdfPCell(new Phrase(": " + karyawan.getPosition().getName(), STANDARD_FONT));
  189.         jabatanValueCell.setColspan(2);
  190.         jabatanValueCell.setBorderWidth(0);
  191.         table.addCell(jabatanValueCell);
  192.        
  193.         PdfPCell statusNikahPajakLabelCell = new PdfPCell(new Phrase("Status nikah pajak", STANDARD_FONT_BOLD));
  194.         statusNikahPajakLabelCell.setColspan(2);
  195.         statusNikahPajakLabelCell.setBorderWidth(0);
  196.         table.addCell(statusNikahPajakLabelCell);
  197.        
  198.         PdfPCell statusNikahPajakValueCell = new PdfPCell(new Phrase(": " + karyawan.getMarriageStatus().getValue(), STANDARD_FONT));
  199.         statusNikahPajakValueCell.setPaddingRight(CELL_PADDING_DEFAULT);
  200.         statusNikahPajakValueCell.setBorderWidthTop(0);
  201.         statusNikahPajakValueCell.setBorderWidthBottom(0);
  202.         statusNikahPajakValueCell.setBorderWidthLeft(0);
  203.         statusNikahPajakValueCell.setColspan(2);
  204.         table.addCell(statusNikahPajakValueCell);
  205.        
  206.         PdfPCell alamatLabelCell = new PdfPCell(new Phrase("Alamat", STANDARD_FONT_BOLD));
  207.         alamatLabelCell.setPaddingLeft(CELL_PADDING_DEFAULT);
  208.         alamatLabelCell.setBorderWidthTop(0);
  209.         alamatLabelCell.setBorderWidthRight(0);
  210.         alamatLabelCell.setBorderWidthBottom(0);
  211.         table.addCell(alamatLabelCell);
  212.        
  213.         PdfPCell alamatValueCell = new PdfPCell(new Phrase(": " + karyawan.getIdAddress(), STANDARD_FONT));
  214.         alamatValueCell.setColspan(3);
  215.         alamatValueCell.setBorderWidthTop(0);
  216.         alamatValueCell.setBorderWidthRight(0);
  217.         alamatValueCell.setBorderWidthLeft(0);
  218.         alamatValueCell.setBorderWidthBottom(0);
  219.         table.addCell(alamatValueCell);
  220.        
  221.         PdfPCell tanggalMasukKerjaLabelCell = new PdfPCell(new Phrase("Tanggal masuk kerja", STANDARD_FONT_BOLD));
  222.         tanggalMasukKerjaLabelCell.setColspan(2);
  223.         tanggalMasukKerjaLabelCell.setBorderWidth(0);
  224.         table.addCell(tanggalMasukKerjaLabelCell);
  225.        
  226.         PdfPCell tanggalMasukKerjaValueCell = new PdfPCell(new Phrase(": " + TimeUtil.convertDateToString(karyawan.getStartWorkingDate(), "dd/MM/yyyy"), STANDARD_FONT));
  227.         tanggalMasukKerjaValueCell.setColspan(2);
  228.         tanggalMasukKerjaValueCell.setBorderWidth(0);
  229.         table.addCell(tanggalMasukKerjaValueCell);
  230.        
  231.         PdfPCell noNPWPKaryawanLabelCell = new PdfPCell(new Phrase("No. NPWP Karyawan", STANDARD_FONT_BOLD));
  232.         noNPWPKaryawanLabelCell.setColspan(2);
  233.         noNPWPKaryawanLabelCell.setBorderWidth(0);
  234.         table.addCell(noNPWPKaryawanLabelCell);
  235.        
  236.         String formattedNoNPWPKaryawan = StringUtil.convertToNPWPFormat(karyawan.getNpwpNumber());
  237.         PdfPCell noNPWPKaryawanValueCell = new PdfPCell(new Phrase(": " + (formattedNoNPWPKaryawan != null ? formattedNoNPWPKaryawan : ""), STANDARD_FONT));
  238.         noNPWPKaryawanValueCell.setPaddingRight(CELL_PADDING_DEFAULT);
  239.         noNPWPKaryawanValueCell.setBorderWidthTop(0);
  240.         noNPWPKaryawanValueCell.setBorderWidthBottom(0);
  241.         noNPWPKaryawanValueCell.setBorderWidthLeft(0);
  242.         noNPWPKaryawanValueCell.setColspan(2);
  243.         table.addCell(noNPWPKaryawanValueCell);
  244.        
  245.         PdfPCell alamatKotaKabupatenLabelCell = new PdfPCell(new Phrase("", STANDARD_FONT_BOLD));
  246.         alamatKotaKabupatenLabelCell.setPaddingLeft(CELL_PADDING_DEFAULT);
  247.         alamatKotaKabupatenLabelCell.setBorderWidthTop(0);
  248.         alamatKotaKabupatenLabelCell.setBorderWidthRight(0);
  249.         alamatKotaKabupatenLabelCell.setPaddingBottom(CELL_PADDING_DEFAULT - CELL_PADDING_TOP_MINUS);
  250.         table.addCell(alamatKotaKabupatenLabelCell);
  251.        
  252.         PdfPCell alamatKotaKabupatenValueCell = new PdfPCell(new Phrase("  " + karyawan.getIdKecamatan() + " - " + karyawan.getIdKelurahan() + ", " + karyawan.getIdKotaKabupaten(), STANDARD_FONT));
  253.         alamatKotaKabupatenValueCell.setColspan(3);
  254.         alamatKotaKabupatenValueCell.setBorderWidthTop(0);
  255.         alamatKotaKabupatenValueCell.setBorderWidthRight(0);
  256.         alamatKotaKabupatenValueCell.setBorderWidthLeft(0);
  257.         alamatKotaKabupatenValueCell.setPaddingBottom(CELL_PADDING_DEFAULT - CELL_PADDING_TOP_MINUS);
  258.         table.addCell(alamatKotaKabupatenValueCell);
  259.                
  260.         PdfPCell tanggalTerakhirKerjaLabelCell = new PdfPCell(new Phrase("Tanggal terakhir kerja", STANDARD_FONT_BOLD));
  261.         tanggalTerakhirKerjaLabelCell.setColspan(2);
  262.         tanggalTerakhirKerjaLabelCell.setBorderWidthTop(0);
  263.         tanggalTerakhirKerjaLabelCell.setBorderWidthLeft(0);
  264.         tanggalTerakhirKerjaLabelCell.setBorderWidthRight(0);
  265.         tanggalTerakhirKerjaLabelCell.setPaddingBottom(CELL_PADDING_DEFAULT - CELL_PADDING_TOP_MINUS);
  266.         table.addCell(tanggalTerakhirKerjaLabelCell);
  267.        
  268.         PdfPCell tanggalTerakhirKerjaValueCell = new PdfPCell(new Phrase(": " + (karyawan.getLastWorkingDate() != null ? TimeUtil.convertDateToString(karyawan.getLastWorkingDate(), "dd/MM/yyyy") : "-"), STANDARD_FONT));
  269.         tanggalTerakhirKerjaValueCell.setColspan(2);
  270.         tanggalTerakhirKerjaValueCell.setBorderWidthTop(0);
  271.         tanggalTerakhirKerjaValueCell.setBorderWidthLeft(0);
  272.         tanggalTerakhirKerjaValueCell.setBorderWidthRight(0);
  273.         tanggalTerakhirKerjaValueCell.setPaddingBottom(CELL_PADDING_DEFAULT - CELL_PADDING_TOP_MINUS);
  274.         table.addCell(tanggalTerakhirKerjaValueCell);
  275.        
  276.         PdfPCell noNPWPPerusahaanLabelCell = new PdfPCell(new Phrase("No. NPWP Perusahaan", STANDARD_FONT_BOLD));
  277.         noNPWPPerusahaanLabelCell.setColspan(2);
  278.         noNPWPPerusahaanLabelCell.setBorderWidthTop(0);
  279.         noNPWPPerusahaanLabelCell.setBorderWidthLeft(0);
  280.         noNPWPPerusahaanLabelCell.setBorderWidthRight(0);
  281.         noNPWPPerusahaanLabelCell.setPaddingBottom(CELL_PADDING_DEFAULT - CELL_PADDING_TOP_MINUS);
  282.         table.addCell(noNPWPPerusahaanLabelCell);
  283.  
  284.         String formattedNoNPWPPerusahaan = StringUtil.convertToNPWPFormat(karyawan.getNpwp().getNpwpNumber());
  285.         PdfPCell noNPWPPerusahaanValueCell = new PdfPCell(new Phrase(": " + (formattedNoNPWPPerusahaan != null ? formattedNoNPWPPerusahaan : ""), STANDARD_FONT));
  286.         noNPWPPerusahaanValueCell.setPaddingRight(CELL_PADDING_DEFAULT);
  287.         noNPWPPerusahaanValueCell.setPaddingBottom(CELL_PADDING_DEFAULT - CELL_PADDING_TOP_MINUS);
  288.         noNPWPPerusahaanValueCell.setBorderWidthTop(0);
  289.         noNPWPPerusahaanValueCell.setBorderWidthLeft(0);
  290.         noNPWPPerusahaanValueCell.setColspan(2);
  291.         table.addCell(noNPWPPerusahaanValueCell);
  292.        
  293.         document.add(table);
  294.     }
  295.    
  296.     private void setContent(Document document,
  297.                             PdfWriter writer,
  298.                             String tahunBulanGaji,
  299.                             List<RptDaftarPerincianPenghasilanKaryawan> daftarPerincianPenghasilanKaryawanList) {
  300.         for (RptDaftarPerincianPenghasilanKaryawan daftarPerincianPenghasilanKaryawan: daftarPerincianPenghasilanKaryawanList) {
  301.             Employee employee = employeeService.get(daftarPerincianPenghasilanKaryawan.getKaryawanId());
  302.             setTitle(document, tahunBulanGaji, employee);
  303.             setData(document, tahunBulanGaji, employee);
  304.             document.newPage();
  305.             document.setPageCount(1);
  306.         }
  307.     }
  308.    
  309.     private void setData(Document document, String tahunBulanGaji, Employee employee) {
  310.         List<Double> gajiList = new ArrayList<Double>();
  311.         List<Double> rapelGajiList = new ArrayList<Double>();
  312.         List<Double> thrList = new ArrayList<Double>();
  313.         List<Double> rapelThrList = new ArrayList<Double>();
  314.         List<Double> bonusList = new ArrayList<Double>();
  315.         List<Double> pembayaranSisaCutiList = new ArrayList<Double>();
  316.         List<Double> totalTunjanganList = new ArrayList<Double>();
  317.         List<Double> totalTidakDiterimaKaryawanList = new ArrayList<Double>();
  318.         List<Double> totalPotonganList = new ArrayList<Double>();
  319.         List<Double> keseluruhanList = new ArrayList<Double>();
  320.         List<Double> diterimaKaryawanList = new ArrayList<Double>();
  321.         List<Double> pajakDitanggungKaryawanList = new ArrayList<Double>();
  322.         List<Double> pajakDitanggungPerusahaanList = new ArrayList<Double>();
  323.        
  324.         PdfPTable table = new PdfPTable(15);
  325.         table.setTotalWidth(document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin());
  326.         table.getDefaultCell().setBorderWidth(1);
  327.         table.setLockedWidth(true);
  328.         table.setHorizontalAlignment(Element.ALIGN_CENTER);
  329.         table.setSpacingAfter(10);
  330.         table.setHeaderRows(2);
  331.        
  332.         // Table header
  333.         PdfPCell pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Pendapatan / Potongan", STANDARD_FONT_BOLD));
  334.         pendapatanPotonganLabelCell.setHorizontalAlignment(Element.ALIGN_CENTER);
  335.         pendapatanPotonganLabelCell.setColspan(2);
  336.         pendapatanPotonganLabelCell.setRowspan(2);
  337.         table.addCell(pendapatanPotonganLabelCell);
  338.        
  339.         PdfPCell nilaiPendapatanPotonganLabelCell = new PdfPCell(new Phrase("Nilai Pendapatan / Potongan", STANDARD_FONT_BOLD));
  340.         nilaiPendapatanPotonganLabelCell.setHorizontalAlignment(Element.ALIGN_CENTER);
  341.         nilaiPendapatanPotonganLabelCell.setColspan(12);
  342.         nilaiPendapatanPotonganLabelCell.setBorderWidthBottom(0);
  343.         table.addCell(nilaiPendapatanPotonganLabelCell);
  344.        
  345.         PdfPCell totalLabelCell = new PdfPCell(new Phrase("Total", STANDARD_FONT_BOLD));
  346.         totalLabelCell.setRowspan(2);
  347.         totalLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  348.         table.addCell(totalLabelCell);
  349.        
  350.         PdfPCell januariLabelCell = new PdfPCell(new Phrase("Januari", STANDARD_FONT_BOLD));
  351.         januariLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  352.         table.addCell(januariLabelCell);
  353.        
  354.         PdfPCell februariLabelCell = new PdfPCell(new Phrase("Februari", STANDARD_FONT_BOLD));
  355.         februariLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  356.         table.addCell(februariLabelCell);
  357.        
  358.         PdfPCell maretLabelCell = new PdfPCell(new Phrase("Maret", STANDARD_FONT_BOLD));
  359.         maretLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  360.         table.addCell(maretLabelCell);
  361.        
  362.         PdfPCell aprilLabelCell = new PdfPCell(new Phrase("April", STANDARD_FONT_BOLD));
  363.         aprilLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  364.         table.addCell(aprilLabelCell);
  365.        
  366.         PdfPCell meiLabelCell = new PdfPCell(new Phrase("Mei", STANDARD_FONT_BOLD));
  367.         meiLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  368.         table.addCell(meiLabelCell);
  369.        
  370.         PdfPCell juniLabelCell = new PdfPCell(new Phrase("Juni", STANDARD_FONT_BOLD));
  371.         juniLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  372.         table.addCell(juniLabelCell);
  373.  
  374.         PdfPCell juliLabelCell = new PdfPCell(new Phrase("Juli", STANDARD_FONT_BOLD));
  375.         juliLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  376.         table.addCell(juliLabelCell);
  377.        
  378.         PdfPCell agustusLabelCell = new PdfPCell(new Phrase("Agustus", STANDARD_FONT_BOLD));
  379.         agustusLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  380.         table.addCell(agustusLabelCell);
  381.        
  382.         PdfPCell septemberLabelCell = new PdfPCell(new Phrase("September", STANDARD_FONT_BOLD));
  383.         septemberLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  384.         table.addCell(septemberLabelCell);
  385.  
  386.         PdfPCell oktoberLabelCell = new PdfPCell(new Phrase("Oktober", STANDARD_FONT_BOLD));
  387.         oktoberLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  388.         table.addCell(oktoberLabelCell);
  389.        
  390.         PdfPCell novemberLabelCell = new PdfPCell(new Phrase("November", STANDARD_FONT_BOLD));
  391.         novemberLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  392.         table.addCell(novemberLabelCell);
  393.        
  394.         PdfPCell desemberLabelCell = new PdfPCell(new Phrase("Desember", STANDARD_FONT_BOLD));
  395.         desemberLabelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  396.         table.addCell(desemberLabelCell);
  397.        
  398.         List<PendapatanPotonganKaryawan> pendapatanPotonganKaryawanList = pendapatanPotonganKaryawanService.searchPendapatanPotonganKaryawanYangSudahDibayar(tahunBulanGaji, employee.getId());
  399.         List<SummaryPenghasilanKaryawan> summaryPenghasilanKaryawanList = summaryPenghasilanKaryawanService.searchAllSummaryPenghasilanKaryawanYangSudahDibayar(tahunBulanGaji, employee.getId());
  400.         List<Object[]> pembayaranKaryawanList = pembayaranKaryawanService.searchTotalKoreksiTHPTunaiDanNilaiPerTahunBulan(tahunBulanGaji, employee.getId());
  401.         String year = YearMonthUtil.getYear(tahunBulanGaji);
  402.        
  403.         // Gaji
  404.         PendapatanPotonganKaryawan objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  405.                                                                                                  .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.GAJI) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  406.                                                                                                  .findFirst()
  407.                                                                                                  .orElse(null);
  408.         if (objPendapatanPotonganKaryawan != null) {
  409.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Gaji", STANDARD_FONT_BOLD));
  410.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  411.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  412.             pendapatanPotonganLabelCell.setColspan(2);
  413.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  414.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  415.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  416.             table.addCell(pendapatanPotonganLabelCell);
  417.            
  418.             Double totalGaji = 0D;
  419.             for (int i = 0; i < 12; i++) {
  420.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  421.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  422.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.GAJI) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  423.                                                                               .findFirst()
  424.                                                                               .orElse(null);
  425.                 PdfPCell monthValueCell = new PdfPCell();
  426.                 if (objPendapatanPotonganKaryawan != null) {
  427.                     gajiList.add(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue());
  428.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  429.                    
  430.                     totalGaji += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  431.                 } else {
  432.                     gajiList.add(0D);
  433.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  434.                 }
  435.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  436.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  437.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  438.                 monthValueCell.setBorderWidthTop(0);
  439.                 monthValueCell.setBorderWidthLeft(0);
  440.                 monthValueCell.setBorderWidthRight(0);
  441.                 table.addCell(monthValueCell);
  442.             }
  443.            
  444.             // total gaji semua bulan pada tahun yang sama
  445.             PdfPCell totalValueCell = new PdfPCell();
  446.             totalValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalGaji.doubleValue()), STANDARD_FONT));
  447.             totalValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  448.             totalValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  449.             totalValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  450.             totalValueCell.setBorderWidthTop(0);
  451.             totalValueCell.setBorderWidthLeft(0);
  452.             totalValueCell.setBorderWidthRight(0);
  453.             table.addCell(totalValueCell);
  454.         } else {
  455.             for (int i = 0; i < 12; i++) {
  456.                 gajiList.add(0D);
  457.             }
  458.         }
  459.        
  460.         // Rapel Gaji
  461.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  462.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_GAJI) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  463.                                                                       .findFirst()
  464.                                                                       .orElse(null);
  465.         if (objPendapatanPotonganKaryawan != null) {
  466.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Rapel gaji", STANDARD_FONT_BOLD));
  467.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  468.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  469.             pendapatanPotonganLabelCell.setColspan(2);
  470.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  471.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  472.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  473.             table.addCell(pendapatanPotonganLabelCell);
  474.            
  475.             Double totalRapelGaji = 0D;
  476.             for (int i = 0; i < 12; i++) {
  477.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  478.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  479.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_GAJI) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  480.                                                                               .findFirst()
  481.                                                                               .orElse(null);
  482.                 PdfPCell monthValueCell = new PdfPCell();
  483.                 if (objPendapatanPotonganKaryawan != null) {
  484.                     rapelGajiList.add(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue());
  485.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  486.                    
  487.                     totalRapelGaji += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  488.                 } else {
  489.                     rapelGajiList.add(0D);
  490.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  491.                 }
  492.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  493.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  494.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  495.                 monthValueCell.setBorderWidthTop(0);
  496.                 monthValueCell.setBorderWidthLeft(0);
  497.                 monthValueCell.setBorderWidthRight(0);
  498.                 table.addCell(monthValueCell);
  499.             }
  500.            
  501.             // total rapel gaji semua bulan pada tahun yang sama
  502.             PdfPCell totalValueCell = new PdfPCell();
  503.             totalValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalRapelGaji.doubleValue()), STANDARD_FONT));
  504.             totalValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  505.             totalValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  506.             totalValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  507.             totalValueCell.setBorderWidthTop(0);
  508.             totalValueCell.setBorderWidthLeft(0);
  509.             totalValueCell.setBorderWidthRight(0);
  510.             table.addCell(totalValueCell);
  511.         } else {
  512.             for (int i = 0; i < 12; i++) {
  513.                 rapelGajiList.add(0D);
  514.             }
  515.         }
  516.        
  517.         // THR
  518.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  519.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.THR) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  520.                                                                       .findFirst()
  521.                                                                       .orElse(null);
  522.         if (objPendapatanPotonganKaryawan != null) {
  523.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("THR", STANDARD_FONT_BOLD));
  524.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  525.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  526.             pendapatanPotonganLabelCell.setColspan(2);
  527.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  528.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  529.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  530.             table.addCell(pendapatanPotonganLabelCell);
  531.            
  532.             Double totalThr = 0D;
  533.             for (int i = 0; i < 12; i++) {
  534.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  535.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  536.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.THR) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  537.                                                                               .findFirst()
  538.                                                                               .orElse(null);
  539.                 PdfPCell monthValueCell = new PdfPCell();
  540.                 if (objPendapatanPotonganKaryawan != null) {
  541.                     thrList.add(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue());
  542.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  543.                    
  544.                     totalThr += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  545.                 } else {
  546.                     thrList.add(0D);
  547.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  548.                 }
  549.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  550.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  551.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  552.                 monthValueCell.setBorderWidthTop(0);
  553.                 monthValueCell.setBorderWidthLeft(0);
  554.                 monthValueCell.setBorderWidthRight(0);
  555.                 table.addCell(monthValueCell);
  556.             }
  557.            
  558.             // total thr semua bulan pada tahun yang sama
  559.             PdfPCell totalValueCell = new PdfPCell();
  560.             totalValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalThr.doubleValue()), STANDARD_FONT));
  561.             totalValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  562.             totalValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  563.             totalValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  564.             totalValueCell.setBorderWidthTop(0);
  565.             totalValueCell.setBorderWidthLeft(0);
  566.             totalValueCell.setBorderWidthRight(0);
  567.             table.addCell(totalValueCell);
  568.         } else {
  569.             for (int i = 0; i < 12; i++) {
  570.                 thrList.add(0D);
  571.             }
  572.         }
  573.        
  574.         // Rapel THR
  575.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  576.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_THR) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  577.                                                                       .findFirst()
  578.                                                                       .orElse(null);
  579.         if (objPendapatanPotonganKaryawan != null) {
  580.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Rapel THR", STANDARD_FONT_BOLD));
  581.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  582.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  583.             pendapatanPotonganLabelCell.setColspan(2);
  584.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  585.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  586.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  587.             table.addCell(pendapatanPotonganLabelCell);
  588.            
  589.             Double totalRapelThr = 0D;
  590.             for (int i = 0; i < 12; i++) {
  591.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  592.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  593.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_THR) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  594.                                                                               .findFirst()
  595.                                                                               .orElse(null);
  596.                 PdfPCell monthValueCell = new PdfPCell();
  597.                 if (objPendapatanPotonganKaryawan != null) {
  598.                     rapelThrList.add(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue());
  599.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  600.                    
  601.                     totalRapelThr += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  602.                 } else {
  603.                     rapelThrList.add(0D);
  604.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  605.                 }
  606.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  607.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  608.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  609.                 monthValueCell.setBorderWidthTop(0);
  610.                 monthValueCell.setBorderWidthLeft(0);
  611.                 monthValueCell.setBorderWidthRight(0);
  612.                 table.addCell(monthValueCell);
  613.             }
  614.            
  615.             // total rapel thr semua bulan pada tahun yang sama
  616.             PdfPCell totalValueCell = new PdfPCell();
  617.             totalValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalRapelThr.doubleValue()), STANDARD_FONT));
  618.             totalValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  619.             totalValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  620.             totalValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  621.             totalValueCell.setBorderWidthTop(0);
  622.             totalValueCell.setBorderWidthLeft(0);
  623.             totalValueCell.setBorderWidthRight(0);
  624.             table.addCell(totalValueCell);
  625.         } else {
  626.             for (int i = 0; i < 12; i++) {
  627.                 rapelThrList.add(0D);
  628.             }
  629.         }
  630.        
  631.         // Bonus
  632.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  633.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.BONUS) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  634.                                                                       .findFirst()
  635.                                                                       .orElse(null);
  636.         if (objPendapatanPotonganKaryawan != null) {
  637.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Bonus", STANDARD_FONT_BOLD));
  638.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  639.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  640.             pendapatanPotonganLabelCell.setColspan(2);
  641.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  642.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  643.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  644.             table.addCell(pendapatanPotonganLabelCell);
  645.            
  646.             Double totalBonus = 0D;
  647.             for (int i = 0; i < 12; i++) {
  648.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  649.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  650.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.BONUS) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  651.                                                                               .findFirst()
  652.                                                                               .orElse(null);
  653.                 PdfPCell monthValueCell = new PdfPCell();
  654.                 if (objPendapatanPotonganKaryawan != null) {
  655.                     bonusList.add(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue());
  656.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  657.                    
  658.                     totalBonus += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  659.                 } else {
  660.                     bonusList.add(0D);
  661.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  662.                 }
  663.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  664.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  665.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  666.                 monthValueCell.setBorderWidthTop(0);
  667.                 monthValueCell.setBorderWidthLeft(0);
  668.                 monthValueCell.setBorderWidthRight(0);
  669.                 table.addCell(monthValueCell);
  670.             }
  671.            
  672.             // total bonus semua bulan pada tahun yang sama
  673.             PdfPCell totalValueCell = new PdfPCell();
  674.             totalValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalBonus.doubleValue()), STANDARD_FONT));
  675.             totalValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  676.             totalValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  677.             totalValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  678.             totalValueCell.setBorderWidthTop(0);
  679.             totalValueCell.setBorderWidthLeft(0);
  680.             totalValueCell.setBorderWidthRight(0);
  681.             table.addCell(totalValueCell);
  682.         } else {
  683.             for (int i = 0; i < 12; i++) {
  684.                 bonusList.add(0D);
  685.             }
  686.         }
  687.        
  688.         // Pembayaran sisa cuti
  689.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  690.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.PEMBAYARAN_SISA_CUTI) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  691.                                                                       .findFirst()
  692.                                                                       .orElse(null);
  693.         if (objPendapatanPotonganKaryawan != null) {
  694.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Pembayaran sisa cuti", STANDARD_FONT_BOLD));
  695.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  696.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  697.             pendapatanPotonganLabelCell.setColspan(2);
  698.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  699.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  700.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  701.             table.addCell(pendapatanPotonganLabelCell);
  702.            
  703.             Double totalPembayaranSisaCuti = 0D;
  704.             for (int i = 0; i < 12; i++) {
  705.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  706.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  707.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.PEMBAYARAN_SISA_CUTI) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  708.                                                                               .findFirst()
  709.                                                                               .orElse(null);
  710.                 PdfPCell monthValueCell = new PdfPCell();
  711.                 if (objPendapatanPotonganKaryawan != null) {
  712.                     pembayaranSisaCutiList.add(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue());
  713.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  714.                    
  715.                     totalPembayaranSisaCuti += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  716.                 } else {
  717.                     pembayaranSisaCutiList.add(0D);
  718.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  719.                 }
  720.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  721.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  722.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  723.                 monthValueCell.setBorderWidthTop(0);
  724.                 monthValueCell.setBorderWidthLeft(0);
  725.                 monthValueCell.setBorderWidthRight(0);
  726.                 table.addCell(monthValueCell);
  727.             }
  728.            
  729.             // total pembayaran sisa cuti semua bulan pada tahun yang sama
  730.             PdfPCell totalValueCell = new PdfPCell();
  731.             totalValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPembayaranSisaCuti.doubleValue()), STANDARD_FONT));
  732.             totalValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  733.             totalValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  734.             totalValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  735.             totalValueCell.setBorderWidthTop(0);
  736.             totalValueCell.setBorderWidthLeft(0);
  737.             totalValueCell.setBorderWidthRight(0);
  738.             table.addCell(totalValueCell);
  739.         } else {
  740.             for (int i = 0; i < 12; i++) {
  741.                 pembayaranSisaCutiList.add(0D);
  742.             }
  743.         }
  744.        
  745.         // Tunjangan
  746.         PdfPCell tunjanganLabelCell = new PdfPCell(new Phrase("Tunjangan", STANDARD_FONT_BOLD));
  747.         tunjanganLabelCell.setColspan(2);
  748.         tunjanganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  749.         tunjanganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  750.         tunjanganLabelCell.setBorderWidthTop(0);
  751.         tunjanganLabelCell.setBorderWidthLeft(0);
  752.         tunjanganLabelCell.setBorderWidthRight(0);
  753.         table.addCell(tunjanganLabelCell);
  754.        
  755.         Double totalAllTunjangan = 0D;
  756.         for (int i = 0; i < 12; i++) {
  757.             final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  758.             Double totalTunjangan = 0D;
  759.             List<PendapatanPotonganKaryawan> tunjanganDiterimaKaryawanList = pendapatanPotonganKaryawanList.stream()
  760.                                                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().trim().equals(DomainConstants.EMPTY) && pendapatanPotonganKaryawan.getPendapatanPotongan().getThpFlag() == InfluenceType.INCREASE && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  761.                                                                                                            .collect(Collectors.toList());
  762.             List<PendapatanPotonganKaryawan> tunjanganTidakDiterimaKaryawanList = pendapatanPotonganKaryawanList.stream()
  763.                                                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().trim().equals(DomainConstants.EMPTY) && pendapatanPotonganKaryawan.getPendapatanPotongan().getThpFlag() == InfluenceType.NOT_INFLUENCED && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  764.                                                                                                            .collect(Collectors.toList());
  765.            
  766.             // pendapatan yang memiliki flag pengaruh thp = 1
  767.             for (PendapatanPotonganKaryawan tunjanganDiterimaKaryawan: tunjanganDiterimaKaryawanList) {
  768.                 totalTunjangan += tunjanganDiterimaKaryawan.getTotalNilaiAkhir();
  769.             }
  770.            
  771.             // rapel lembur
  772.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  773.                                                                           .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_LEMBUR) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  774.                                                                           .findFirst()
  775.                                                                           .orElse(null);
  776.             if (objPendapatanPotonganKaryawan != null) {
  777.                 totalTunjangan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  778.             }
  779.            
  780.             // tunjangan pajak
  781.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  782.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.TUNJANGAN_PAJAK) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  783.                                                                            .findFirst()
  784.                                                                            .orElse(null);
  785.             if (objPendapatanPotonganKaryawan != null) {
  786.                 totalTunjangan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  787.             }
  788.            
  789.             // BPJS Perusahaan - JHT perusahaan
  790.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  791.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JHT_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  792.                                                                            .findFirst()
  793.                                                                            .orElse(null);
  794.             if (objPendapatanPotonganKaryawan != null) {
  795.                 totalTunjangan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  796.             }
  797.  
  798.             // BPJS Perusahaan - JKK perusahaan
  799.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  800.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKK_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  801.                                                                            .findFirst()
  802.                                                                            .orElse(null);
  803.             if (objPendapatanPotonganKaryawan != null) {
  804.                 totalTunjangan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  805.             }
  806.  
  807.             // BPJS Perusahaan - JKM perusahaan
  808.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  809.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKM_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  810.                                                                            .findFirst()
  811.                                                                            .orElse(null);
  812.             if (objPendapatanPotonganKaryawan != null) {
  813.                 totalTunjangan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  814.             }
  815.  
  816.             // BPJS Perusahaan - JKN perusahaan
  817.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  818.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKN_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  819.                                                                            .findFirst()
  820.                                                                            .orElse(null);
  821.             if (objPendapatanPotonganKaryawan != null) {
  822.                 totalTunjangan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  823.             }
  824.            
  825.             // BPJS Perusahaan - JP perusahaan
  826.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  827.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JP_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  828.                                                                            .findFirst()
  829.                                                                            .orElse(null);
  830.             if (objPendapatanPotonganKaryawan != null) {
  831.                 totalTunjangan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  832.             }
  833.            
  834.             // BPJS Perusahaan - Rapel BPJS
  835.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  836.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_BPJS) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  837.                                                                            .findFirst()
  838.                                                                            .orElse(null);
  839.             if (objPendapatanPotonganKaryawan != null) {
  840.                 totalTunjangan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  841.             }
  842.            
  843.             // pendapatan potongan yang memiliki flag pengaruh thp = 0
  844.             for (PendapatanPotonganKaryawan tunjangaTidakDiterimaKaryawan: tunjanganTidakDiterimaKaryawanList) {
  845.                 totalTunjangan += tunjangaTidakDiterimaKaryawan.getTotalNilaiAkhir();
  846.             }
  847.            
  848.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalTunjangan.doubleValue()), STANDARD_FONT));
  849.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  850.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  851.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  852.             monthValueCell.setBorderWidthTop(0);
  853.             monthValueCell.setBorderWidthLeft(0);
  854.             monthValueCell.setBorderWidthRight(0);
  855.             table.addCell(monthValueCell);
  856.            
  857.             totalAllTunjangan += totalTunjangan;
  858.             totalTunjanganList.add(totalTunjangan);
  859.         }
  860.        
  861.         // total tunjangan semua bulan pada tahun yang sama
  862.         PdfPCell totalTunjanganValueCell = new PdfPCell();
  863.         totalTunjanganValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalAllTunjangan.doubleValue()), STANDARD_FONT));
  864.         totalTunjanganValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  865.         totalTunjanganValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  866.         totalTunjanganValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  867.         totalTunjanganValueCell.setBorderWidthTop(0);
  868.         totalTunjanganValueCell.setBorderWidthLeft(0);
  869.         totalTunjanganValueCell.setBorderWidthRight(0);
  870.         table.addCell(totalTunjanganValueCell);
  871.        
  872.         // Tunjangan diterima karyawan
  873.         PdfPCell tunjanganDiterimaKaryawanLabelCell = new PdfPCell(new Phrase("Diterima karyawan", STANDARD_FONT));
  874.         tunjanganDiterimaKaryawanLabelCell.setColspan(2);
  875.         tunjanganDiterimaKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  876.         tunjanganDiterimaKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  877.         tunjanganDiterimaKaryawanLabelCell.setBorderWidthTop(0);
  878.         tunjanganDiterimaKaryawanLabelCell.setBorderWidthLeft(0);
  879.         tunjanganDiterimaKaryawanLabelCell.setBorderWidthRight(0);
  880.         tunjanganDiterimaKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 2);
  881.         table.addCell(tunjanganDiterimaKaryawanLabelCell);
  882.        
  883.         Double totalAllDiterimaKaryawan = 0D;
  884.         for (int i = 0; i < 12; i++) {
  885.             final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  886.             Double totalDiterimaKaryawan = 0D;
  887.             List<PendapatanPotonganKaryawan> tunjanganDiterimaKaryawanList = pendapatanPotonganKaryawanList.stream()
  888.                                                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().trim().equals(DomainConstants.EMPTY) && pendapatanPotonganKaryawan.getPendapatanPotongan().getThpFlag() == InfluenceType.INCREASE && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  889.                                                                                                            .collect(Collectors.toList());
  890.             for (PendapatanPotonganKaryawan tunjanganDiterimaKaryawan: tunjanganDiterimaKaryawanList) {
  891.                 totalDiterimaKaryawan += tunjanganDiterimaKaryawan.getTotalNilaiAkhir();
  892.             }
  893.            
  894.             // rapel lembur
  895.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  896.                                                                           .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_LEMBUR) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  897.                                                                           .findFirst()
  898.                                                                           .orElse(null);
  899.             if (objPendapatanPotonganKaryawan != null) {
  900.                 totalDiterimaKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  901.             }
  902.            
  903.             // tunjangan pajak
  904.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  905.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.TUNJANGAN_PAJAK) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  906.                                                                            .findFirst()
  907.                                                                            .orElse(null);
  908.             if (objPendapatanPotonganKaryawan != null) {
  909.                 totalDiterimaKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  910.             }
  911.            
  912.             totalAllDiterimaKaryawan += totalDiterimaKaryawan;
  913.            
  914.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalDiterimaKaryawan.doubleValue()), STANDARD_FONT));
  915.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  916.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  917.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  918.             monthValueCell.setBorderWidthTop(0);
  919.             monthValueCell.setBorderWidthLeft(0);
  920.             monthValueCell.setBorderWidthRight(0);
  921.             table.addCell(monthValueCell);
  922.         }
  923.        
  924.         // total diterima karyawan semua bulan pada tahun yang sama
  925.         PdfPCell totalDiterimaKaryawanValueCell = new PdfPCell();
  926.         totalDiterimaKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalAllDiterimaKaryawan.doubleValue()), STANDARD_FONT));
  927.         totalDiterimaKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  928.         totalDiterimaKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  929.         totalDiterimaKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  930.         totalDiterimaKaryawanValueCell.setBorderWidthTop(0);
  931.         totalDiterimaKaryawanValueCell.setBorderWidthLeft(0);
  932.         totalDiterimaKaryawanValueCell.setBorderWidthRight(0);
  933.         table.addCell(totalDiterimaKaryawanValueCell);
  934.        
  935.        
  936.         // tunjangan menambah thp
  937.         List<PendapatanPotonganKaryawan> allPendapatanPotonganKaryawanDiterimaKaryawanList = pendapatanPotonganKaryawanList.stream()
  938.                                                                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getIncomeDeductionGroup().name().startsWith("PEND") &&
  939.                                                                                                                                                                  pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().trim().equals(DomainConstants.EMPTY) &&
  940.                                                                                                                                                                  pendapatanPotonganKaryawan.getPendapatanPotongan().getThpFlag().name().equals(InfluenceType.INCREASE.name()))
  941.                                                                                                                            .collect(Collectors.toList());
  942.        
  943.         Collections.sort(allPendapatanPotonganKaryawanDiterimaKaryawanList, new Comparator<PendapatanPotonganKaryawan>() {
  944.             @Override
  945.             public int compare(PendapatanPotonganKaryawan o1, PendapatanPotonganKaryawan o2) {
  946.                 return o1.getPendapatanPotongan().getName().compareTo(o2.getPendapatanPotongan().getName());
  947.             }
  948.         });
  949.         List<PendapatanPotonganKaryawan> pendapatanPotonganKaryawanDiterimaKaryawanList = new ArrayList<PendapatanPotonganKaryawan>();
  950.         for (PendapatanPotonganKaryawan allPendapatanPotonganKaryawanDiterimaKaryawan: allPendapatanPotonganKaryawanDiterimaKaryawanList) {
  951.             PendapatanPotonganKaryawan existPendapatanPotongan = pendapatanPotonganKaryawanDiterimaKaryawanList.stream()
  952.                                                                                                                .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getId().equals(allPendapatanPotonganKaryawanDiterimaKaryawan.getPendapatanPotongan().getId()) &&
  953.                                                                                                                                                      pendapatanPotonganKaryawan.getTrxProsesId().equals(allPendapatanPotonganKaryawanDiterimaKaryawan.getTrxProsesId()) &&
  954.                                                                                                                                                      pendapatanPotonganKaryawan.getTrxProsesNumber().equals(allPendapatanPotonganKaryawanDiterimaKaryawan.getTrxProsesNumber()) &&
  955.                                                                                                                                                      TimeUtil.isEqual(pendapatanPotonganKaryawan.getTrxProsesDate(), allPendapatanPotonganKaryawanDiterimaKaryawan.getTrxProsesDate()))
  956.                                                                                                                .findFirst()
  957.                                                                                                                .orElse(null);
  958.             if (existPendapatanPotongan == null) {
  959.                 pendapatanPotonganKaryawanDiterimaKaryawanList.add(allPendapatanPotonganKaryawanDiterimaKaryawan);
  960.             }
  961.         }
  962.        
  963.         for (PendapatanPotonganKaryawan pendapatanPotonganKaryawanDiterimaKaryawan: pendapatanPotonganKaryawanDiterimaKaryawanList) {
  964.             PdfPCell tunjanganMenambahTHPLabelCell = new PdfPCell(new Phrase(pendapatanPotonganKaryawanDiterimaKaryawan.getPendapatanPotongan().getName(), STANDARD_FONT));
  965.             tunjanganMenambahTHPLabelCell.setColspan(2);
  966.             tunjanganMenambahTHPLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  967.             tunjanganMenambahTHPLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  968.             tunjanganMenambahTHPLabelCell.setBorderWidthTop(0);
  969.             tunjanganMenambahTHPLabelCell.setBorderWidthLeft(0);
  970.             tunjanganMenambahTHPLabelCell.setBorderWidthRight(0);
  971.             tunjanganMenambahTHPLabelCell.setPaddingLeft(CELL_PADDING * 4);
  972.             tunjanganMenambahTHPLabelCell.setNoWrap(false);
  973.             table.addCell(tunjanganMenambahTHPLabelCell);
  974.            
  975.             Double totalTunjanganMenambahTHP = 0D;
  976.             for (int i = 0; i < 12; i++) {
  977.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  978.                 PendapatanPotonganKaryawan pendapatanPotonganKaryawanMenambahTHP = allPendapatanPotonganKaryawanDiterimaKaryawanList.stream()
  979.                                                                                                                                     .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getId().equals(pendapatanPotonganKaryawanDiterimaKaryawan.getPendapatanPotongan().getId()) &&
  980.                                                                                                                                                                           pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth) &&
  981.                                                                                                                                                                           pendapatanPotonganKaryawan.getTrxProsesId().equals(pendapatanPotonganKaryawanDiterimaKaryawan.getTrxProsesId()) &&
  982.                                                                                                                                                                           pendapatanPotonganKaryawan.getTrxProsesNumber().equals(pendapatanPotonganKaryawanDiterimaKaryawan.getTrxProsesNumber()) &&
  983.                                                                                                                                                                           TimeUtil.isEqual(pendapatanPotonganKaryawan.getTrxProsesDate(), pendapatanPotonganKaryawanDiterimaKaryawan.getTrxProsesDate()))
  984.                                                                                                                                     .findFirst()
  985.                                                                                                                                     .orElse(null);
  986.                
  987.                 PdfPCell monthValueCell = new PdfPCell();                  
  988.                 if (pendapatanPotonganKaryawanMenambahTHP != null) {
  989.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(pendapatanPotonganKaryawanMenambahTHP.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  990.                     totalTunjanganMenambahTHP += pendapatanPotonganKaryawanMenambahTHP.getTotalNilaiAkhir().doubleValue();
  991.                 } else {
  992.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  993.                 }
  994.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  995.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  996.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  997.                 monthValueCell.setBorderWidthTop(0);
  998.                 monthValueCell.setBorderWidthLeft(0);
  999.                 monthValueCell.setBorderWidthRight(0);
  1000.                 table.addCell(monthValueCell);
  1001.             }
  1002.            
  1003.             // total tunjangan menambah thp semua bulan pada tahun yang sama
  1004.             PdfPCell totalValueCell = new PdfPCell();
  1005.             totalValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalTunjanganMenambahTHP.doubleValue()), STANDARD_FONT));
  1006.             totalValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1007.             totalValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1008.             totalValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1009.             totalValueCell.setBorderWidthTop(0);
  1010.             totalValueCell.setBorderWidthLeft(0);
  1011.             totalValueCell.setBorderWidthRight(0);
  1012.             table.addCell(totalValueCell);
  1013.         }
  1014.        
  1015.         // Rapel lembur
  1016.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1017.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_LEMBUR))
  1018.                                                                       .findFirst()
  1019.                                                                       .orElse(null);
  1020.         if (objPendapatanPotonganKaryawan != null) {
  1021.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Rapel lembur", STANDARD_FONT));
  1022.             pendapatanPotonganLabelCell.setColspan(2);
  1023.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1024.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1025.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  1026.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  1027.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  1028.             pendapatanPotonganLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1029.             pendapatanPotonganLabelCell.setNoWrap(false);
  1030.             table.addCell(pendapatanPotonganLabelCell);
  1031.            
  1032.             Double totalRapelLembur = 0D;
  1033.             for (int i = 0; i < 12; i++) {
  1034.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1035.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1036.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_LEMBUR) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1037.                                                                               .findFirst()
  1038.                                                                               .orElse(null);
  1039.                 PdfPCell monthValueCell = new PdfPCell();              
  1040.                 if (objPendapatanPotonganKaryawan != null) {
  1041.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1042.                     totalRapelLembur += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1043.                 } else {
  1044.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1045.                 }
  1046.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1047.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1048.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1049.                 monthValueCell.setBorderWidthTop(0);
  1050.                 monthValueCell.setBorderWidthLeft(0);
  1051.                 monthValueCell.setBorderWidthRight(0);
  1052.                 table.addCell(monthValueCell);
  1053.             }
  1054.            
  1055.             // total rapel lembur semua bulan pada tahun yang sama
  1056.             PdfPCell totalValueCell = new PdfPCell();
  1057.             totalValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalRapelLembur.doubleValue()), STANDARD_FONT));
  1058.             totalValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1059.             totalValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1060.             totalValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1061.             totalValueCell.setBorderWidthTop(0);
  1062.             totalValueCell.setBorderWidthLeft(0);
  1063.             totalValueCell.setBorderWidthRight(0);
  1064.             table.addCell(totalValueCell);
  1065.         }
  1066.        
  1067.         // Tunjangan Pajak
  1068.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1069.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.TUNJANGAN_PAJAK) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1070.                                                                       .findFirst()
  1071.                                                                       .orElse(null);
  1072.         if (objPendapatanPotonganKaryawan != null) {
  1073.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Tunjangan pajak", STANDARD_FONT));
  1074.             pendapatanPotonganLabelCell.setColspan(2);
  1075.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1076.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1077.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  1078.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  1079.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  1080.             pendapatanPotonganLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1081.             pendapatanPotonganLabelCell.setNoWrap(false);
  1082.             table.addCell(pendapatanPotonganLabelCell);
  1083.            
  1084.             Double totalTunjanganPajak = 0D;
  1085.             for (int i = 0; i < 12; i++) {
  1086.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1087.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1088.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.TUNJANGAN_PAJAK) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1089.                                                                               .findFirst()
  1090.                                                                               .orElse(null);
  1091.                 PdfPCell monthValueCell = new PdfPCell();              
  1092.                 if (objPendapatanPotonganKaryawan != null) {
  1093.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1094.                     totalTunjanganPajak += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1095.                 } else {
  1096.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1097.                 }
  1098.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1099.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1100.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1101.                 monthValueCell.setBorderWidthTop(0);
  1102.                 monthValueCell.setBorderWidthLeft(0);
  1103.                 monthValueCell.setBorderWidthRight(0);
  1104.                 table.addCell(monthValueCell);
  1105.             }
  1106.            
  1107.             // total tunjangan pajak semua bulan pada tahun yang sama
  1108.             PdfPCell totalValueCell = new PdfPCell();
  1109.             totalValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalTunjanganPajak.doubleValue()), STANDARD_FONT));
  1110.             totalValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1111.             totalValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1112.             totalValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1113.             totalValueCell.setBorderWidthTop(0);
  1114.             totalValueCell.setBorderWidthLeft(0);
  1115.             totalValueCell.setBorderWidthRight(0);
  1116.             table.addCell(totalValueCell);
  1117.         }
  1118.        
  1119.         // Tunjangan tidak diterima karyawan
  1120.         PdfPCell tunjanganTidakDiterimaKaryawanLabelCell = new PdfPCell(new Phrase("Tidak diterima karyawan", STANDARD_FONT));
  1121.         tunjanganTidakDiterimaKaryawanLabelCell.setColspan(2);
  1122.         tunjanganTidakDiterimaKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1123.         tunjanganTidakDiterimaKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1124.         tunjanganTidakDiterimaKaryawanLabelCell.setBorderWidthTop(0);
  1125.         tunjanganTidakDiterimaKaryawanLabelCell.setBorderWidthLeft(0);
  1126.         tunjanganTidakDiterimaKaryawanLabelCell.setBorderWidthRight(0);
  1127.         tunjanganTidakDiterimaKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 2);
  1128.         table.addCell(tunjanganTidakDiterimaKaryawanLabelCell);
  1129.        
  1130.         Double totalAllTidakDiterimaKaryawan = 0D;
  1131.         for (int i = 0; i < 12; i++) {
  1132.             final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1133.             Double totalTidakDiterimaKaryawan = 0D;
  1134.            
  1135.             // BPJS Perusahaan - JHT perusahaan
  1136.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1137.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JHT_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1138.                                                                            .findFirst()
  1139.                                                                            .orElse(null);
  1140.             if (objPendapatanPotonganKaryawan != null) {
  1141.                 totalTidakDiterimaKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1142.             }
  1143.  
  1144.             // BPJS Perusahaan - JKK perusahaan
  1145.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1146.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKK_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1147.                                                                            .findFirst()
  1148.                                                                            .orElse(null);
  1149.             if (objPendapatanPotonganKaryawan != null) {
  1150.                 totalTidakDiterimaKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1151.             }
  1152.  
  1153.             // BPJS Perusahaan - JKM perusahaan
  1154.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1155.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKM_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1156.                                                                            .findFirst()
  1157.                                                                            .orElse(null);
  1158.             if (objPendapatanPotonganKaryawan != null) {
  1159.                 totalTidakDiterimaKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1160.             }
  1161.  
  1162.             // BPJS Perusahaan - JKN perusahaan
  1163.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1164.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKN_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1165.                                                                            .findFirst()
  1166.                                                                            .orElse(null);
  1167.             if (objPendapatanPotonganKaryawan != null) {
  1168.                 totalTidakDiterimaKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1169.             }
  1170.            
  1171.             // BPJS Perusahaan - JP perusahaan
  1172.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1173.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JP_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1174.                                                                            .findFirst()
  1175.                                                                            .orElse(null);
  1176.             if (objPendapatanPotonganKaryawan != null) {
  1177.                 totalTidakDiterimaKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1178.             }
  1179.            
  1180.             // BPJS Perusahaan - Rapel BPJS
  1181.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1182.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_BPJS) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1183.                                                                            .findFirst()
  1184.                                                                            .orElse(null);
  1185.             if (objPendapatanPotonganKaryawan != null) {
  1186.                 totalTidakDiterimaKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1187.             }
  1188.            
  1189.             // pendapatan potongan yang memiliki flag pengaruh thp = 0
  1190.             List<PendapatanPotonganKaryawan> tunjanganTidakDiterimaKaryawanList = pendapatanPotonganKaryawanList.stream()
  1191.                                                                                                                 .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().trim().equals(DomainConstants.EMPTY) && pendapatanPotonganKaryawan.getPendapatanPotongan().getThpFlag() == InfluenceType.NOT_INFLUENCED && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1192.                                                                                                                 .collect(Collectors.toList());
  1193.            
  1194.             for (PendapatanPotonganKaryawan tunjanganDiterimaKaryawan: tunjanganTidakDiterimaKaryawanList) {
  1195.                 totalTidakDiterimaKaryawan += tunjanganDiterimaKaryawan.getTotalNilaiAkhir();
  1196.             }
  1197.            
  1198.             totalAllTidakDiterimaKaryawan += totalTidakDiterimaKaryawan;
  1199.            
  1200.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalTidakDiterimaKaryawan.doubleValue()), STANDARD_FONT));
  1201.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1202.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1203.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1204.             monthValueCell.setBorderWidthTop(0);
  1205.             monthValueCell.setBorderWidthLeft(0);
  1206.             monthValueCell.setBorderWidthRight(0);
  1207.             table.addCell(monthValueCell);
  1208.            
  1209.             totalTidakDiterimaKaryawanList.add(totalTidakDiterimaKaryawan);
  1210.         }
  1211.        
  1212.         // total tidak diterima karyawan semua bulan pada tahun yang sama
  1213.         PdfPCell totalTidakDiterimaKaryawanValueCell = new PdfPCell();
  1214.         totalTidakDiterimaKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalAllTidakDiterimaKaryawan.doubleValue()), STANDARD_FONT));
  1215.         totalTidakDiterimaKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1216.         totalTidakDiterimaKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1217.         totalTidakDiterimaKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1218.         totalTidakDiterimaKaryawanValueCell.setBorderWidthTop(0);
  1219.         totalTidakDiterimaKaryawanValueCell.setBorderWidthLeft(0);
  1220.         totalTidakDiterimaKaryawanValueCell.setBorderWidthRight(0);
  1221.         table.addCell(totalTidakDiterimaKaryawanValueCell);
  1222.        
  1223.         // BPJS Perusahaan - JHT perusahaan
  1224.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1225.                                                                        .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JHT_PERUSAHAAN))
  1226.                                                                        .findFirst()
  1227.                                                                        .orElse(null);
  1228.         if (objPendapatanPotonganKaryawan != null) {
  1229.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Premi JHT perusahaan", STANDARD_FONT));
  1230.             pendapatanPotonganLabelCell.setColspan(2);
  1231.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1232.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1233.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  1234.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  1235.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  1236.             pendapatanPotonganLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1237.             pendapatanPotonganLabelCell.setNoWrap(false);
  1238.             table.addCell(pendapatanPotonganLabelCell);
  1239.            
  1240.             Double totalJHTPerusahaan = 0D;
  1241.             for (int i = 0; i < 12; i++) {
  1242.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1243.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1244.                                                                                .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JHT_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1245.                                                                                .findFirst()
  1246.                                                                                .orElse(null);
  1247.                 PdfPCell monthValueCell = new PdfPCell();              
  1248.                 if (objPendapatanPotonganKaryawan != null) {
  1249.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1250.                     totalJHTPerusahaan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1251.                 } else {
  1252.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1253.                 }
  1254.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1255.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1256.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1257.                 monthValueCell.setBorderWidthTop(0);
  1258.                 monthValueCell.setBorderWidthLeft(0);
  1259.                 monthValueCell.setBorderWidthRight(0);
  1260.                 table.addCell(monthValueCell);
  1261.             }
  1262.            
  1263.             // total JHT Perusahaan semua bulan pada tahun yang sama
  1264.             PdfPCell totalJHTPerusahaanValueCell = new PdfPCell();
  1265.             totalJHTPerusahaanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalJHTPerusahaan.doubleValue()), STANDARD_FONT));
  1266.             totalJHTPerusahaanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1267.             totalJHTPerusahaanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1268.             totalJHTPerusahaanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1269.             totalJHTPerusahaanValueCell.setBorderWidthTop(0);
  1270.             totalJHTPerusahaanValueCell.setBorderWidthLeft(0);
  1271.             totalJHTPerusahaanValueCell.setBorderWidthRight(0);
  1272.             table.addCell(totalJHTPerusahaanValueCell);
  1273.         }
  1274.  
  1275.         // BPJS Perusahaan - JKK perusahaan
  1276.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1277.                                                                        .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKK_PERUSAHAAN) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1278.                                                                        .findFirst()
  1279.                                                                        .orElse(null);
  1280.         if (objPendapatanPotonganKaryawan != null) {
  1281.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Premi JKK perusahaan", STANDARD_FONT));
  1282.             pendapatanPotonganLabelCell.setColspan(2);
  1283.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1284.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1285.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  1286.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  1287.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  1288.             pendapatanPotonganLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1289.             pendapatanPotonganLabelCell.setNoWrap(false);
  1290.             table.addCell(pendapatanPotonganLabelCell);
  1291.            
  1292.             Double totalJKKPerusahaan = 0D;
  1293.             for (int i = 0; i < 12; i++) {
  1294.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1295.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1296.                                                                                .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKK_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1297.                                                                                .findFirst()
  1298.                                                                                .orElse(null);
  1299.                 PdfPCell monthValueCell = new PdfPCell();
  1300.                 if (objPendapatanPotonganKaryawan != null) {
  1301.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1302.                     totalJKKPerusahaan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1303.                 } else {
  1304.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1305.                 }
  1306.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1307.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1308.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1309.                 monthValueCell.setBorderWidthTop(0);
  1310.                 monthValueCell.setBorderWidthLeft(0);
  1311.                 monthValueCell.setBorderWidthRight(0);
  1312.                 table.addCell(monthValueCell);
  1313.             }
  1314.            
  1315.             // total JKK Perusahaan semua bulan pada tahun yang sama
  1316.             PdfPCell totalJKKPerusahaanValueCell = new PdfPCell();
  1317.             totalJKKPerusahaanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalJKKPerusahaan.doubleValue()), STANDARD_FONT));
  1318.             totalJKKPerusahaanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1319.             totalJKKPerusahaanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1320.             totalJKKPerusahaanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1321.             totalJKKPerusahaanValueCell.setBorderWidthTop(0);
  1322.             totalJKKPerusahaanValueCell.setBorderWidthLeft(0);
  1323.             totalJKKPerusahaanValueCell.setBorderWidthRight(0);
  1324.             table.addCell(totalJKKPerusahaanValueCell);
  1325.         }
  1326.  
  1327.         // BPJS Perusahaan - JKM perusahaan
  1328.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1329.                                                                        .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKM_PERUSAHAAN) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1330.                                                                        .findFirst()
  1331.                                                                        .orElse(null);
  1332.         if (objPendapatanPotonganKaryawan != null) {
  1333.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Premi JKM perusahaan", STANDARD_FONT));
  1334.             pendapatanPotonganLabelCell.setColspan(2);
  1335.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1336.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1337.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  1338.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  1339.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  1340.             pendapatanPotonganLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1341.             pendapatanPotonganLabelCell.setNoWrap(false);
  1342.             table.addCell(pendapatanPotonganLabelCell);
  1343.            
  1344.             Double totalJKMPerusahaan = 0D;
  1345.             for (int i = 0; i < 12; i++) {
  1346.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1347.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1348.                                                                                .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKM_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1349.                                                                                .findFirst()
  1350.                                                                                .orElse(null);
  1351.                 PdfPCell monthValueCell = new PdfPCell();
  1352.                 if (objPendapatanPotonganKaryawan != null) {
  1353.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1354.                     totalJKMPerusahaan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1355.                 } else {
  1356.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1357.                 }
  1358.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1359.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1360.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1361.                 monthValueCell.setBorderWidthTop(0);
  1362.                 monthValueCell.setBorderWidthLeft(0);
  1363.                 monthValueCell.setBorderWidthRight(0);
  1364.                 table.addCell(monthValueCell);
  1365.             }
  1366.            
  1367.             // total JKM Perusahaan semua bulan pada tahun yang sama
  1368.             PdfPCell totalJKMPerusahaanValueCell = new PdfPCell();
  1369.             totalJKMPerusahaanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalJKMPerusahaan.doubleValue()), STANDARD_FONT));
  1370.             totalJKMPerusahaanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1371.             totalJKMPerusahaanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1372.             totalJKMPerusahaanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1373.             totalJKMPerusahaanValueCell.setBorderWidthTop(0);
  1374.             totalJKMPerusahaanValueCell.setBorderWidthLeft(0);
  1375.             totalJKMPerusahaanValueCell.setBorderWidthRight(0);
  1376.             table.addCell(totalJKMPerusahaanValueCell);
  1377.         }
  1378.        
  1379.         // BPJS Perusahaan - JKN perusahaan
  1380.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1381.                                                                        .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKN_PERUSAHAAN) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1382.                                                                        .findFirst()
  1383.                                                                        .orElse(null);
  1384.         if (objPendapatanPotonganKaryawan != null) {
  1385.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Premi JKN perusahaan", STANDARD_FONT));
  1386.             pendapatanPotonganLabelCell.setColspan(2);
  1387.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1388.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1389.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  1390.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  1391.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  1392.             pendapatanPotonganLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1393.             pendapatanPotonganLabelCell.setNoWrap(false);
  1394.             table.addCell(pendapatanPotonganLabelCell);
  1395.            
  1396.             Double totalJKNPerusahaan = 0D;
  1397.             for (int i = 0; i < 12; i++) {
  1398.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1399.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1400.                                                                                .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKN_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1401.                                                                                .findFirst()
  1402.                                                                                .orElse(null);
  1403.                 PdfPCell monthValueCell = new PdfPCell();
  1404.                 if (objPendapatanPotonganKaryawan != null) {
  1405.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1406.                     totalJKNPerusahaan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1407.                 } else {
  1408.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1409.                 }
  1410.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1411.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1412.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1413.                 monthValueCell.setBorderWidthTop(0);
  1414.                 monthValueCell.setBorderWidthLeft(0);
  1415.                 monthValueCell.setBorderWidthRight(0);
  1416.                 table.addCell(monthValueCell);
  1417.             }
  1418.            
  1419.             // total JKN Perusahaan semua bulan pada tahun yang sama
  1420.             PdfPCell totalJKNPerusahaanValueCell = new PdfPCell();
  1421.             totalJKNPerusahaanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalJKNPerusahaan.doubleValue()), STANDARD_FONT));
  1422.             totalJKNPerusahaanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1423.             totalJKNPerusahaanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1424.             totalJKNPerusahaanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1425.             totalJKNPerusahaanValueCell.setBorderWidthTop(0);
  1426.             totalJKNPerusahaanValueCell.setBorderWidthLeft(0);
  1427.             totalJKNPerusahaanValueCell.setBorderWidthRight(0);
  1428.             table.addCell(totalJKNPerusahaanValueCell);
  1429.         }
  1430.        
  1431.         // BPJS Perusahaan - JP perusahaan
  1432.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1433.                                                                        .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JP_PERUSAHAAN) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1434.                                                                        .findFirst()
  1435.                                                                        .orElse(null);
  1436.         if (objPendapatanPotonganKaryawan != null) {
  1437.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Premi JP perusahaan", STANDARD_FONT));
  1438.             pendapatanPotonganLabelCell.setColspan(2);
  1439.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1440.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1441.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  1442.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  1443.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  1444.             pendapatanPotonganLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1445.             pendapatanPotonganLabelCell.setNoWrap(false);
  1446.             table.addCell(pendapatanPotonganLabelCell);
  1447.            
  1448.             Double totalJPPerusahaan = 0D;
  1449.             for (int i = 0; i < 12; i++) {
  1450.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1451.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1452.                                                                                .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JP_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1453.                                                                                .findFirst()
  1454.                                                                                .orElse(null);
  1455.                 PdfPCell monthValueCell = new PdfPCell();
  1456.                 if (objPendapatanPotonganKaryawan != null) {
  1457.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1458.                     totalJPPerusahaan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1459.                 } else {
  1460.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1461.                 }
  1462.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1463.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1464.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1465.                 monthValueCell.setBorderWidthTop(0);
  1466.                 monthValueCell.setBorderWidthLeft(0);
  1467.                 monthValueCell.setBorderWidthRight(0);
  1468.                 table.addCell(monthValueCell);
  1469.             }
  1470.            
  1471.             // total JP Perusahaan semua bulan pada tahun yang sama
  1472.             PdfPCell totalJPPerusahaanValueCell = new PdfPCell();
  1473.             totalJPPerusahaanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalJPPerusahaan.doubleValue()), STANDARD_FONT));
  1474.             totalJPPerusahaanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1475.             totalJPPerusahaanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1476.             totalJPPerusahaanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1477.             totalJPPerusahaanValueCell.setBorderWidthTop(0);
  1478.             totalJPPerusahaanValueCell.setBorderWidthLeft(0);
  1479.             totalJPPerusahaanValueCell.setBorderWidthRight(0);
  1480.             table.addCell(totalJPPerusahaanValueCell);
  1481.         }
  1482.        
  1483.         // BPJS Perusahaan - Rapel BPJS
  1484.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1485.                                                                        .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_BPJS) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1486.                                                                        .findFirst()
  1487.                                                                        .orElse(null);
  1488.         if (objPendapatanPotonganKaryawan != null) {
  1489.             pendapatanPotonganLabelCell = new PdfPCell(new Phrase("Rapel BPJS", STANDARD_FONT));
  1490.             pendapatanPotonganLabelCell.setColspan(2);
  1491.             pendapatanPotonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1492.             pendapatanPotonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1493.             pendapatanPotonganLabelCell.setBorderWidthTop(0);
  1494.             pendapatanPotonganLabelCell.setBorderWidthLeft(0);
  1495.             pendapatanPotonganLabelCell.setBorderWidthRight(0);
  1496.             pendapatanPotonganLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1497.             pendapatanPotonganLabelCell.setNoWrap(false);
  1498.             table.addCell(pendapatanPotonganLabelCell);
  1499.            
  1500.             Double totalRapelBPJS = 0D;
  1501.             for (int i = 0; i < 12; i++) {
  1502.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1503.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1504.                                                                                .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.RAPEL_BPJS) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1505.                                                                                .findFirst()
  1506.                                                                                .orElse(null);
  1507.                 PdfPCell monthValueCell = new PdfPCell();
  1508.                 if (objPendapatanPotonganKaryawan != null) {
  1509.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1510.                     totalRapelBPJS += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1511.                 } else {
  1512.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1513.                 }
  1514.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1515.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1516.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1517.                 monthValueCell.setBorderWidthTop(0);
  1518.                 monthValueCell.setBorderWidthLeft(0);
  1519.                 monthValueCell.setBorderWidthRight(0);
  1520.                 table.addCell(monthValueCell);
  1521.             }
  1522.            
  1523.             // total rapel BPJS semua bulan pada tahun yang sama
  1524.             PdfPCell totalRapelBPJSValueCell = new PdfPCell();
  1525.             totalRapelBPJSValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalRapelBPJS.doubleValue()), STANDARD_FONT));
  1526.             totalRapelBPJSValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1527.             totalRapelBPJSValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1528.             totalRapelBPJSValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1529.             totalRapelBPJSValueCell.setBorderWidthTop(0);
  1530.             totalRapelBPJSValueCell.setBorderWidthLeft(0);
  1531.             totalRapelBPJSValueCell.setBorderWidthRight(0);
  1532.             table.addCell(totalRapelBPJSValueCell);
  1533.         }
  1534.        
  1535.         // tunjangan tidak mempengaruhi thp
  1536.         List<PendapatanPotonganKaryawan> allTunjanganTidakMempengaruhiTHPList = pendapatanPotonganKaryawanList.stream()
  1537.                                                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getIncomeDeductionGroup().name().startsWith("PEND") &&
  1538.                                                                                                                                                     pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().trim().equals(DomainConstants.EMPTY) &&
  1539.                                                                                                                                                     pendapatanPotonganKaryawan.getPendapatanPotongan().getThpFlag().name().equals(InfluenceType.NOT_INFLUENCED.name()))
  1540.                                                                                                               .collect(Collectors.toList());
  1541.        
  1542.         Collections.sort(allTunjanganTidakMempengaruhiTHPList, new Comparator<PendapatanPotonganKaryawan>() {
  1543.             @Override
  1544.             public int compare(PendapatanPotonganKaryawan o1, PendapatanPotonganKaryawan o2) {
  1545.                 return o1.getPendapatanPotongan().getName().compareTo(o2.getPendapatanPotongan().getName());
  1546.             }
  1547.         });
  1548.         List<PendapatanPotonganKaryawan> tunjanganTidakMempengaruhiTHPList = new ArrayList<PendapatanPotonganKaryawan>();
  1549.         for (PendapatanPotonganKaryawan allTunjanganTidakMempengaruhiTHP: allTunjanganTidakMempengaruhiTHPList) {
  1550.             PendapatanPotonganKaryawan existPendapatanPotongan = tunjanganTidakMempengaruhiTHPList.stream()
  1551.                                                                                                   .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getId().equals(allTunjanganTidakMempengaruhiTHP.getPendapatanPotongan().getId()) &&
  1552.                                                                                                                                         pendapatanPotonganKaryawan.getTrxProsesId().equals(allTunjanganTidakMempengaruhiTHP.getTrxProsesId()) &&
  1553.                                                                                                                                         pendapatanPotonganKaryawan.getTrxProsesNumber().equals(allTunjanganTidakMempengaruhiTHP.getTrxProsesNumber()) &&
  1554.                                                                                                                                         TimeUtil.isEqual(pendapatanPotonganKaryawan.getTrxProsesDate(), allTunjanganTidakMempengaruhiTHP.getTrxProsesDate()))
  1555.                                                                                                    .findFirst()
  1556.                                                                                                    .orElse(null);
  1557.             if (existPendapatanPotongan == null) {
  1558.                 tunjanganTidakMempengaruhiTHPList.add(allTunjanganTidakMempengaruhiTHP);
  1559.             }
  1560.         }
  1561.        
  1562.         for (PendapatanPotonganKaryawan tunjanganTidakMempengaruhiTHP: tunjanganTidakMempengaruhiTHPList) {
  1563.             PdfPCell tunjanganMenambahTHPLabelCell = new PdfPCell(new Phrase(tunjanganTidakMempengaruhiTHP.getPendapatanPotongan().getName(), STANDARD_FONT));
  1564.             tunjanganMenambahTHPLabelCell.setColspan(2);
  1565.             tunjanganMenambahTHPLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1566.             tunjanganMenambahTHPLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1567.             tunjanganMenambahTHPLabelCell.setBorderWidthTop(0);
  1568.             tunjanganMenambahTHPLabelCell.setBorderWidthLeft(0);
  1569.             tunjanganMenambahTHPLabelCell.setBorderWidthRight(0);
  1570.             tunjanganMenambahTHPLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1571.             tunjanganMenambahTHPLabelCell.setNoWrap(false);
  1572.             table.addCell(tunjanganMenambahTHPLabelCell);
  1573.            
  1574.             Double totalTunjanganTidakMempengaruhiTHP = 0D;
  1575.             for (int i = 0; i < 12; i++) {
  1576.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1577.                 PendapatanPotonganKaryawan pendapatanPotonganKaryawanTidakMempengaruhiTHP = allTunjanganTidakMempengaruhiTHPList.stream()
  1578.                                                                                                                                 .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getId().equals(tunjanganTidakMempengaruhiTHP.getPendapatanPotongan().getId()) &&
  1579.                                                                                                                                                                       pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth) &&
  1580.                                                                                                                                                                       pendapatanPotonganKaryawan.getTrxProsesId().equals(tunjanganTidakMempengaruhiTHP.getTrxProsesId()) &&
  1581.                                                                                                                                                                       pendapatanPotonganKaryawan.getTrxProsesNumber().equals(tunjanganTidakMempengaruhiTHP.getTrxProsesNumber()) &&
  1582.                                                                                                                                                                       TimeUtil.isEqual(pendapatanPotonganKaryawan.getTrxProsesDate(), tunjanganTidakMempengaruhiTHP.getTrxProsesDate()))
  1583.                                                                                                                                                  .findFirst()
  1584.                                                                                                                                                  .orElse(null);
  1585.                
  1586.                 PdfPCell monthValueCell = new PdfPCell();
  1587.                 if (pendapatanPotonganKaryawanTidakMempengaruhiTHP != null) {
  1588.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(pendapatanPotonganKaryawanTidakMempengaruhiTHP.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1589.                     totalTunjanganTidakMempengaruhiTHP += pendapatanPotonganKaryawanTidakMempengaruhiTHP.getTotalNilaiAkhir().doubleValue();
  1590.                 } else {
  1591.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1592.                 }
  1593.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1594.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1595.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1596.                 monthValueCell.setBorderWidthTop(0);
  1597.                 monthValueCell.setBorderWidthLeft(0);
  1598.                 monthValueCell.setBorderWidthRight(0);
  1599.                 table.addCell(monthValueCell);
  1600.             }
  1601.            
  1602.             // total tunjangan tidak mempengaruhi thp semua bulan pada tahun yang sama
  1603.             PdfPCell totalTunjanganTidakMempengaruhiTHPValueCell = new PdfPCell();
  1604.             totalTunjanganTidakMempengaruhiTHPValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalTunjanganTidakMempengaruhiTHP.doubleValue()), STANDARD_FONT));
  1605.             totalTunjanganTidakMempengaruhiTHPValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1606.             totalTunjanganTidakMempengaruhiTHPValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1607.             totalTunjanganTidakMempengaruhiTHPValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1608.             totalTunjanganTidakMempengaruhiTHPValueCell.setBorderWidthTop(0);
  1609.             totalTunjanganTidakMempengaruhiTHPValueCell.setBorderWidthLeft(0);
  1610.             totalTunjanganTidakMempengaruhiTHPValueCell.setBorderWidthRight(0);
  1611.             table.addCell(totalTunjanganTidakMempengaruhiTHPValueCell);
  1612.         }
  1613.        
  1614. //      // ganti disini
  1615. //      Map<String, String> searchParameter = new HashMap<String, String>();
  1616. //      searchParameter.put("thpFlag", "0");
  1617. //      searchParameter.put("sort", "name-asc");
  1618. //      List<MstIncomeDeduction> tunjanganTidakMempengaruhiTHPList = mstIncomeDeductionService.search(SearchParameter.generate(searchParameter, MstIncomeDeductionPojo.getFieldMappings()))
  1619. //                                                                                            .getResult()
  1620. //                                                                                            .stream()
  1621. //                                                                                            .filter(incomeDeduction -> incomeDeduction.getIncomeDeductionGroup().name().startsWith("PEND") && incomeDeduction.getCode().trim().equals(DomainConstants.EMPTY))
  1622. //                                                                                            .collect(Collectors.toList());
  1623. //     
  1624. //      for (MstIncomeDeduction tunjanganTidakMempengaruhiTHP: tunjanganTidakMempengaruhiTHPList) {
  1625. //          PendapatanPotonganKaryawan pendapatanPotonganKaryawanTidakMempengaruhiTHP = pendapatanPotonganKaryawanList.stream()
  1626. //                                                                                                                    .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getId().equals(tunjanganTidakMempengaruhiTHP.getId()))
  1627. //                                                                                                                    .findFirst()
  1628. //                                                                                                                    .orElse(null);
  1629. //         
  1630. //          if (pendapatanPotonganKaryawanTidakMempengaruhiTHP != null) {
  1631. //              PdfPCell tunjanganMenambahTHPLabelCell = new PdfPCell(new Phrase(tunjanganTidakMempengaruhiTHP.getName(), STANDARD_FONT));
  1632. //              tunjanganMenambahTHPLabelCell.setColspan(2);
  1633. //              tunjanganMenambahTHPLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1634. //              tunjanganMenambahTHPLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1635. //              tunjanganMenambahTHPLabelCell.setBorderWidthTop(0);
  1636. //              tunjanganMenambahTHPLabelCell.setBorderWidthLeft(0);
  1637. //              tunjanganMenambahTHPLabelCell.setBorderWidthRight(0);
  1638. //              tunjanganMenambahTHPLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1639. //              tunjanganMenambahTHPLabelCell.setNoWrap(false);
  1640. //              table.addCell(tunjanganMenambahTHPLabelCell);
  1641. //             
  1642. //              Double totalTunjanganTidakMempengaruhiTHP = 0D;
  1643. //              for (int i = 0; i < 12; i++) {
  1644. //                  final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1645. //                  pendapatanPotonganKaryawanTidakMempengaruhiTHP = pendapatanPotonganKaryawanList.stream()
  1646. //                                                                                                 .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getId().equals(tunjanganTidakMempengaruhiTHP.getId()) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1647. //                                                                                                 .findFirst()
  1648. //                                                                                                 .orElse(null);
  1649. //                 
  1650. //                  PdfPCell monthValueCell = new PdfPCell();
  1651. //                  if (pendapatanPotonganKaryawanTidakMempengaruhiTHP != null) {
  1652. //                      monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(pendapatanPotonganKaryawanTidakMempengaruhiTHP.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1653. //                      totalTunjanganTidakMempengaruhiTHP += pendapatanPotonganKaryawanTidakMempengaruhiTHP.getTotalNilaiAkhir().doubleValue();
  1654. //                  } else {
  1655. //                      monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1656. //                  }
  1657. //                  monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1658. //                  monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1659. //                  monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1660. //                  monthValueCell.setBorderWidthTop(0);
  1661. //                  monthValueCell.setBorderWidthLeft(0);
  1662. //                  monthValueCell.setBorderWidthRight(0);
  1663. //                  table.addCell(monthValueCell);
  1664. //              }
  1665. //             
  1666. //              // total tunjangan tidak mempengaruhi thp semua bulan pada tahun yang sama
  1667. //              PdfPCell totalTunjanganTidakMempengaruhiTHPValueCell = new PdfPCell();
  1668. //              totalTunjanganTidakMempengaruhiTHPValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalTunjanganTidakMempengaruhiTHP.doubleValue()), STANDARD_FONT));
  1669. //              totalTunjanganTidakMempengaruhiTHPValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1670. //              totalTunjanganTidakMempengaruhiTHPValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1671. //              totalTunjanganTidakMempengaruhiTHPValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1672. //              totalTunjanganTidakMempengaruhiTHPValueCell.setBorderWidthTop(0);
  1673. //              totalTunjanganTidakMempengaruhiTHPValueCell.setBorderWidthLeft(0);
  1674. //              totalTunjanganTidakMempengaruhiTHPValueCell.setBorderWidthRight(0);
  1675. //              table.addCell(totalTunjanganTidakMempengaruhiTHPValueCell);
  1676. //          }
  1677. //      }
  1678.        
  1679.         // Potongan
  1680.         PdfPCell potonganLabelCell = new PdfPCell(new Phrase("Potongan", STANDARD_FONT_BOLD));
  1681.         potonganLabelCell.setColspan(2);
  1682.         potonganLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1683.         potonganLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1684.         potonganLabelCell.setBorderWidthTop(0);
  1685.         potonganLabelCell.setBorderWidthLeft(0);
  1686.         potonganLabelCell.setBorderWidthRight(0);
  1687.         table.addCell(potonganLabelCell);
  1688.        
  1689.         Double totalAllPotongan = 0D;
  1690.         for (int i = 0; i < 12; i++) {
  1691.             final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1692.             Double totalPotongan = 0D;
  1693.            
  1694.             // JHT Karyawan
  1695.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1696.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JHT_KARYAWAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1697.                                                                            .findFirst()
  1698.                                                                            .orElse(null);
  1699.             if (objPendapatanPotonganKaryawan != null) {
  1700.                 totalPotongan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1701.             }
  1702.            
  1703.             // JKN Karyawan
  1704.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1705.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKN_KARYAWAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1706.                                                                            .findFirst()
  1707.                                                                            .orElse(null);
  1708.             if (objPendapatanPotonganKaryawan != null) {
  1709.                 totalPotongan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1710.             }
  1711.            
  1712.            
  1713.             // JP Karyawan
  1714.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1715.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JP_KARYAWAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1716.                                                                            .findFirst()
  1717.                                                                            .orElse(null);
  1718.             if (objPendapatanPotonganKaryawan != null) {
  1719.                 totalPotongan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1720.             }          
  1721.            
  1722.             // Status keterlambatan / tidak hadir - Potongan Gaji
  1723.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1724.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_GAJI) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1725.                                                                            .findFirst()
  1726.                                                                            .orElse(null);
  1727.             if (objPendapatanPotonganKaryawan != null) {
  1728.                 totalPotongan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1729.             }
  1730.            
  1731.             // Status keterlambatan / tidak hadir - Potongan Absensi
  1732.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1733.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_ABSENSI) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1734.                                                                            .findFirst()
  1735.                                                                            .orElse(null);
  1736.             if (objPendapatanPotonganKaryawan != null) {
  1737.                 totalPotongan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1738.             }
  1739.            
  1740.             // Status keterlambatan / tidak hadir - Potongan Tunjangan Harian
  1741.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1742.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_TUNJANGAN_HARIAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1743.                                                                            .findFirst()
  1744.                                                                            .orElse(null);
  1745.             if (objPendapatanPotonganKaryawan != null) {
  1746.                 totalPotongan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1747.             }          
  1748.            
  1749.             // Status keterlambatan / tidak hadir - Potongan Tunjangan Tetap
  1750.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1751.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_TUNJANGAN_TETAP) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1752.                                                                            .findFirst()
  1753.                                                                            .orElse(null);
  1754.             if (objPendapatanPotonganKaryawan != null) {
  1755.                 totalPotongan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1756.             }
  1757.            
  1758.             // Potongan yang memiliki flag pengaruh THP = -1
  1759.             List<PendapatanPotonganKaryawan> potonganYangDikenakanKaryawanList = pendapatanPotonganKaryawanList.stream()
  1760.                                                                                                                .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().trim().equals(DomainConstants.EMPTY) && pendapatanPotonganKaryawan.getPendapatanPotongan().getThpFlag() == InfluenceType.DECREASE && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1761.                                                                                                                .collect(Collectors.toList());
  1762.            
  1763.             // pendapatan yang memiliki flag pengaruh thp = 1
  1764.             for (PendapatanPotonganKaryawan potonganYangDikenakanKaryawan: potonganYangDikenakanKaryawanList) {
  1765.                 totalPotongan += potonganYangDikenakanKaryawan.getTotalNilaiAkhir();
  1766.             }
  1767.            
  1768.             totalAllPotongan += totalPotongan.doubleValue();
  1769.            
  1770.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPotongan.doubleValue()), STANDARD_FONT));
  1771.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1772.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1773.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1774.             monthValueCell.setBorderWidthTop(0);
  1775.             monthValueCell.setBorderWidthLeft(0);
  1776.             monthValueCell.setBorderWidthRight(0);
  1777.             table.addCell(monthValueCell);
  1778.            
  1779.             totalPotonganList.add(totalPotongan);
  1780.         }
  1781.        
  1782.         // total potongan semua bulan pada tahun yang sama
  1783.         PdfPCell totalPotonganValueCell = new PdfPCell();
  1784.         totalPotonganValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalAllPotongan.doubleValue()), STANDARD_FONT));
  1785.         totalPotonganValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1786.         totalPotonganValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1787.         totalPotonganValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1788.         totalPotonganValueCell.setBorderWidthTop(0);
  1789.         totalPotonganValueCell.setBorderWidthLeft(0);
  1790.         totalPotonganValueCell.setBorderWidthRight(0);
  1791.         table.addCell(totalPotonganValueCell);
  1792.        
  1793.         // Total BPJS karyawan
  1794.         PdfPCell potonganBPJSKaryawanLabelCell = new PdfPCell(new Phrase("BPJS karyawan", STANDARD_FONT));
  1795.         potonganBPJSKaryawanLabelCell.setColspan(2);
  1796.         potonganBPJSKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1797.         potonganBPJSKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1798.         potonganBPJSKaryawanLabelCell.setBorderWidthTop(0);
  1799.         potonganBPJSKaryawanLabelCell.setBorderWidthLeft(0);
  1800.         potonganBPJSKaryawanLabelCell.setBorderWidthRight(0);
  1801.         potonganBPJSKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 2);
  1802.         table.addCell(potonganBPJSKaryawanLabelCell);
  1803.        
  1804.         Double totalAllPotonganBPJSKaryawan = 0D;
  1805.         for (int i = 0; i < 12; i++) {
  1806.             final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1807.             Double totalPotonganBPJSKaryawan = 0D;
  1808.            
  1809.             // JHT Karyawan
  1810.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1811.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JHT_KARYAWAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1812.                                                                            .findFirst()
  1813.                                                                            .orElse(null);
  1814.             if (objPendapatanPotonganKaryawan != null) {
  1815.                 totalPotonganBPJSKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1816.             }
  1817.            
  1818.             // JKN Karyawan
  1819.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1820.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKN_KARYAWAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1821.                                                                            .findFirst()
  1822.                                                                            .orElse(null);
  1823.             if (objPendapatanPotonganKaryawan != null) {
  1824.                 totalPotonganBPJSKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1825.             }
  1826.            
  1827.            
  1828.             // JP Karyawan
  1829.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1830.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JP_KARYAWAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1831.                                                                            .findFirst()
  1832.                                                                            .orElse(null);
  1833.             if (objPendapatanPotonganKaryawan != null) {
  1834.                 totalPotonganBPJSKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  1835.             }
  1836.            
  1837.             totalAllPotonganBPJSKaryawan += totalPotonganBPJSKaryawan;
  1838.            
  1839.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPotonganBPJSKaryawan.doubleValue()), STANDARD_FONT));
  1840.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1841.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1842.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1843.             monthValueCell.setBorderWidthTop(0);
  1844.             monthValueCell.setBorderWidthLeft(0);
  1845.             monthValueCell.setBorderWidthRight(0);
  1846.             table.addCell(monthValueCell);
  1847.         }
  1848.        
  1849.         // total potongan BPJS karyawan semua bulan pada tahun yang sama
  1850.         PdfPCell totalPotonganBPJSKaryawanValueCell = new PdfPCell();
  1851.         totalPotonganBPJSKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalAllPotongan.doubleValue()), STANDARD_FONT));
  1852.         totalPotonganBPJSKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1853.         totalPotonganBPJSKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1854.         totalPotonganBPJSKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1855.         totalPotonganBPJSKaryawanValueCell.setBorderWidthTop(0);
  1856.         totalPotonganBPJSKaryawanValueCell.setBorderWidthLeft(0);
  1857.         totalPotonganBPJSKaryawanValueCell.setBorderWidthRight(0);
  1858.         table.addCell(totalPotonganBPJSKaryawanValueCell);
  1859.        
  1860.         // JHT karyawan
  1861.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1862.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JHT_KARYAWAN) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1863.                                                                       .findFirst()
  1864.                                                                       .orElse(null);
  1865.         if (objPendapatanPotonganKaryawan != null) {
  1866.             PdfPCell potonganBPJSJHTKaryawanLabelCell = new PdfPCell(new Phrase("Premi JHT karyawan", STANDARD_FONT));
  1867.             potonganBPJSJHTKaryawanLabelCell.setColspan(2);
  1868.             potonganBPJSJHTKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1869.             potonganBPJSJHTKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1870.             potonganBPJSJHTKaryawanLabelCell.setBorderWidthTop(0);
  1871.             potonganBPJSJHTKaryawanLabelCell.setBorderWidthLeft(0);
  1872.             potonganBPJSJHTKaryawanLabelCell.setBorderWidthRight(0);
  1873.             potonganBPJSJHTKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1874.             table.addCell(potonganBPJSJHTKaryawanLabelCell);
  1875.            
  1876.             Double totalJHTKaryawan = 0D;
  1877.             for (int i = 0; i < 12; i++) {
  1878.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1879.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1880.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JHT_KARYAWAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1881.                                                                               .findFirst()
  1882.                                                                               .orElse(null);
  1883.                 PdfPCell monthValueCell = new PdfPCell();
  1884.                 if (objPendapatanPotonganKaryawan != null) {
  1885.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1886.                     totalJHTKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1887.                 } else {
  1888.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1889.                 }
  1890.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1891.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1892.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1893.                 monthValueCell.setBorderWidthTop(0);
  1894.                 monthValueCell.setBorderWidthLeft(0);
  1895.                 monthValueCell.setBorderWidthRight(0);
  1896.                 table.addCell(monthValueCell);
  1897.             }
  1898.            
  1899.             // total JHT karyawan semua bulan pada tahun yang sama
  1900.             PdfPCell totalJHTKaryawanValueCell = new PdfPCell();
  1901.             totalJHTKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalJHTKaryawan.doubleValue()), STANDARD_FONT));
  1902.             totalJHTKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1903.             totalJHTKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1904.             totalJHTKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1905.             totalJHTKaryawanValueCell.setBorderWidthTop(0);
  1906.             totalJHTKaryawanValueCell.setBorderWidthLeft(0);
  1907.             totalJHTKaryawanValueCell.setBorderWidthRight(0);
  1908.             table.addCell(totalJHTKaryawanValueCell);
  1909.         }
  1910.        
  1911.         // JKN karyawan
  1912.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1913.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKN_KARYAWAN) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1914.                                                                       .findFirst()
  1915.                                                                       .orElse(null);
  1916.         if (objPendapatanPotonganKaryawan != null) {
  1917.             PdfPCell potonganBPJSJKNKaryawanLabelCell = new PdfPCell(new Phrase("Premi JKN karyawan", STANDARD_FONT));
  1918.             potonganBPJSJKNKaryawanLabelCell.setColspan(2);
  1919.             potonganBPJSJKNKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1920.             potonganBPJSJKNKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1921.             potonganBPJSJKNKaryawanLabelCell.setBorderWidthTop(0);
  1922.             potonganBPJSJKNKaryawanLabelCell.setBorderWidthLeft(0);
  1923.             potonganBPJSJKNKaryawanLabelCell.setBorderWidthRight(0);
  1924.             potonganBPJSJKNKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1925.             table.addCell(potonganBPJSJKNKaryawanLabelCell);
  1926.            
  1927.             Double totalJKNKaryawan = 0D;
  1928.             for (int i = 0; i < 12; i++) {
  1929.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1930.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1931.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JKN_KARYAWAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1932.                                                                               .findFirst()
  1933.                                                                               .orElse(null);
  1934.                 PdfPCell monthValueCell = new PdfPCell();
  1935.                 if (objPendapatanPotonganKaryawan != null) {
  1936.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1937.                     totalJKNKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1938.                 } else {
  1939.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1940.                 }
  1941.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1942.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1943.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1944.                 monthValueCell.setBorderWidthTop(0);
  1945.                 monthValueCell.setBorderWidthLeft(0);
  1946.                 monthValueCell.setBorderWidthRight(0);
  1947.                 table.addCell(monthValueCell);
  1948.             }
  1949.            
  1950.             // total JKN karyawan semua bulan pada tahun yang sama
  1951.             PdfPCell totalJKNKaryawanValueCell = new PdfPCell();
  1952.             totalJKNKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalJKNKaryawan.doubleValue()), STANDARD_FONT));
  1953.             totalJKNKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1954.             totalJKNKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1955.             totalJKNKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1956.             totalJKNKaryawanValueCell.setBorderWidthTop(0);
  1957.             totalJKNKaryawanValueCell.setBorderWidthLeft(0);
  1958.             totalJKNKaryawanValueCell.setBorderWidthRight(0);
  1959.             table.addCell(totalJKNKaryawanValueCell);
  1960.         }
  1961.        
  1962.         // JP karyawan
  1963.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1964.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JP_KARYAWAN) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  1965.                                                                       .findFirst()
  1966.                                                                       .orElse(null);
  1967.         if (objPendapatanPotonganKaryawan != null) {
  1968.             PdfPCell potonganBPJSJPKaryawanLabelCell = new PdfPCell(new Phrase("Premi JP karyawan", STANDARD_FONT));
  1969.             potonganBPJSJPKaryawanLabelCell.setColspan(2);
  1970.             potonganBPJSJPKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1971.             potonganBPJSJPKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1972.             potonganBPJSJPKaryawanLabelCell.setBorderWidthTop(0);
  1973.             potonganBPJSJPKaryawanLabelCell.setBorderWidthLeft(0);
  1974.             potonganBPJSJPKaryawanLabelCell.setBorderWidthRight(0);
  1975.             potonganBPJSJPKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 4);
  1976.             table.addCell(potonganBPJSJPKaryawanLabelCell);
  1977.            
  1978.             Double totalJPKaryawan = 0D;
  1979.             for (int i = 0; i < 12; i++) {
  1980.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  1981.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  1982.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.JP_KARYAWAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  1983.                                                                               .findFirst()
  1984.                                                                               .orElse(null);
  1985.                 PdfPCell monthValueCell = new PdfPCell();
  1986.                 if (objPendapatanPotonganKaryawan != null) {
  1987.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  1988.                     totalJPKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  1989.                 } else {
  1990.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  1991.                 }
  1992.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  1993.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  1994.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  1995.                 monthValueCell.setBorderWidthTop(0);
  1996.                 monthValueCell.setBorderWidthLeft(0);
  1997.                 monthValueCell.setBorderWidthRight(0);
  1998.                 table.addCell(monthValueCell);
  1999.             }
  2000.            
  2001.             // total JP karyawan semua bulan pada tahun yang sama
  2002.             PdfPCell totalJPKaryawanValueCell = new PdfPCell();
  2003.             totalJPKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalJPKaryawan.doubleValue()), STANDARD_FONT));
  2004.             totalJPKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2005.             totalJPKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2006.             totalJPKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2007.             totalJPKaryawanValueCell.setBorderWidthTop(0);
  2008.             totalJPKaryawanValueCell.setBorderWidthLeft(0);
  2009.             totalJPKaryawanValueCell.setBorderWidthRight(0);
  2010.             table.addCell(totalJPKaryawanValueCell);
  2011.         }
  2012.        
  2013.         // Sanksi keterlambatan / tidak hadir
  2014.         PdfPCell potonganSanksiKeterlambatanTidakHadirKaryawanLabelCell = new PdfPCell(new Phrase("Sanksi keterlambatan / tidak hadir", STANDARD_FONT));
  2015.         potonganSanksiKeterlambatanTidakHadirKaryawanLabelCell.setColspan(2);
  2016.         potonganSanksiKeterlambatanTidakHadirKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2017.         potonganSanksiKeterlambatanTidakHadirKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2018.         potonganSanksiKeterlambatanTidakHadirKaryawanLabelCell.setBorderWidthTop(0);
  2019.         potonganSanksiKeterlambatanTidakHadirKaryawanLabelCell.setBorderWidthLeft(0);
  2020.         potonganSanksiKeterlambatanTidakHadirKaryawanLabelCell.setBorderWidthRight(0);
  2021.         potonganSanksiKeterlambatanTidakHadirKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 2);
  2022.         table.addCell(potonganSanksiKeterlambatanTidakHadirKaryawanLabelCell);
  2023.        
  2024.         Double totalAllPotonganSanksiKeterlambatanTidakHadirKaryawan = 0D;
  2025.         for (int i = 0; i < 12; i++) {
  2026.             final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  2027.             Double totalPotonganSanksiKeterlambatanTidakHadirKaryawan = 0D;
  2028.            
  2029.             // Status keterlambatan / tidak hadir - Potongan Gaji
  2030.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2031.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_GAJI) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2032.                                                                            .findFirst()
  2033.                                                                            .orElse(null);
  2034.             if (objPendapatanPotonganKaryawan != null) {
  2035.                 totalPotonganSanksiKeterlambatanTidakHadirKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  2036.             }
  2037.            
  2038.             // Status keterlambatan / tidak hadir - Potongan Absensi
  2039.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2040.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_ABSENSI) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2041.                                                                            .findFirst()
  2042.                                                                            .orElse(null);
  2043.             if (objPendapatanPotonganKaryawan != null) {
  2044.                 totalPotonganSanksiKeterlambatanTidakHadirKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  2045.             }
  2046.            
  2047.             // Status keterlambatan / tidak hadir - Potongan Tunjangan Harian
  2048.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2049.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_TUNJANGAN_HARIAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2050.                                                                            .findFirst()
  2051.                                                                            .orElse(null);
  2052.             if (objPendapatanPotonganKaryawan != null) {
  2053.                 totalPotonganSanksiKeterlambatanTidakHadirKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  2054.             }          
  2055.            
  2056.             // Status keterlambatan / tidak hadir - Potongan Tunjangan Tetap
  2057.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2058.                                                                            .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_TUNJANGAN_TETAP) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2059.                                                                            .findFirst()
  2060.                                                                            .orElse(null);
  2061.             if (objPendapatanPotonganKaryawan != null) {
  2062.                 totalPotonganSanksiKeterlambatanTidakHadirKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  2063.             }
  2064.            
  2065.             totalAllPotonganSanksiKeterlambatanTidakHadirKaryawan += totalPotonganSanksiKeterlambatanTidakHadirKaryawan;
  2066.            
  2067.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPotonganSanksiKeterlambatanTidakHadirKaryawan.doubleValue()), STANDARD_FONT));
  2068.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2069.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2070.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2071.             monthValueCell.setBorderWidthTop(0);
  2072.             monthValueCell.setBorderWidthLeft(0);
  2073.             monthValueCell.setBorderWidthRight(0);
  2074.             table.addCell(monthValueCell);
  2075.         }
  2076.        
  2077.         // total semua potongan sanksi keterlamabatan tidak hadir karyawan semua bulan pada tahun yang sama
  2078.         PdfPCell totalAllPotonganSanksiKeterlambatanTidakHadirKaryawanValueCell = new PdfPCell();
  2079.         totalAllPotonganSanksiKeterlambatanTidakHadirKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalAllPotonganSanksiKeterlambatanTidakHadirKaryawan.doubleValue()), STANDARD_FONT));
  2080.         totalAllPotonganSanksiKeterlambatanTidakHadirKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2081.         totalAllPotonganSanksiKeterlambatanTidakHadirKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2082.         totalAllPotonganSanksiKeterlambatanTidakHadirKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2083.         totalAllPotonganSanksiKeterlambatanTidakHadirKaryawanValueCell.setBorderWidthTop(0);
  2084.         totalAllPotonganSanksiKeterlambatanTidakHadirKaryawanValueCell.setBorderWidthLeft(0);
  2085.         totalAllPotonganSanksiKeterlambatanTidakHadirKaryawanValueCell.setBorderWidthRight(0);
  2086.         table.addCell(totalAllPotonganSanksiKeterlambatanTidakHadirKaryawanValueCell);
  2087.        
  2088.         // Potongan gaji
  2089.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2090.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_GAJI) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  2091.                                                                       .findFirst()
  2092.                                                                       .orElse(null);
  2093.         if (objPendapatanPotonganKaryawan != null) {
  2094.             PdfPCell potonganGajiKaryawanLabelCell = new PdfPCell(new Phrase("Potongan gaji", STANDARD_FONT));
  2095.             potonganGajiKaryawanLabelCell.setColspan(2);
  2096.             potonganGajiKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2097.             potonganGajiKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2098.             potonganGajiKaryawanLabelCell.setBorderWidthTop(0);
  2099.             potonganGajiKaryawanLabelCell.setBorderWidthLeft(0);
  2100.             potonganGajiKaryawanLabelCell.setBorderWidthRight(0);
  2101.             potonganGajiKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 4);
  2102.             table.addCell(potonganGajiKaryawanLabelCell);
  2103.            
  2104.             Double totalPotonganGajiKaryawan = 0D;
  2105.             for (int i = 0; i < 12; i++) {
  2106.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  2107.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2108.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_GAJI) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2109.                                                                               .findFirst()
  2110.                                                                               .orElse(null);
  2111.                 PdfPCell monthValueCell = new PdfPCell();
  2112.                 if (objPendapatanPotonganKaryawan != null) {
  2113.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  2114.                     totalPotonganGajiKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  2115.                 } else {
  2116.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  2117.                 }
  2118.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2119.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2120.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2121.                 monthValueCell.setBorderWidthTop(0);
  2122.                 monthValueCell.setBorderWidthLeft(0);
  2123.                 monthValueCell.setBorderWidthRight(0);
  2124.                 table.addCell(monthValueCell);
  2125.             }
  2126.            
  2127.             // total potongan gaji semua bulan pada tahun yang sama
  2128.             PdfPCell totalPotonganGajiKaryawanValueCell = new PdfPCell();
  2129.             totalPotonganGajiKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPotonganGajiKaryawan.doubleValue()), STANDARD_FONT));
  2130.             totalPotonganGajiKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2131.             totalPotonganGajiKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2132.             totalPotonganGajiKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2133.             totalPotonganGajiKaryawanValueCell.setBorderWidthTop(0);
  2134.             totalPotonganGajiKaryawanValueCell.setBorderWidthLeft(0);
  2135.             totalPotonganGajiKaryawanValueCell.setBorderWidthRight(0);
  2136.             table.addCell(totalPotonganGajiKaryawanValueCell);
  2137.         }
  2138.        
  2139.         // Potongan absensi
  2140.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2141.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_ABSENSI) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  2142.                                                                       .findFirst()
  2143.                                                                       .orElse(null);
  2144.         if (objPendapatanPotonganKaryawan != null) {
  2145.             PdfPCell potonganAbsensiKaryawanLabelCell = new PdfPCell(new Phrase("Potongan absensi", STANDARD_FONT));
  2146.             potonganAbsensiKaryawanLabelCell.setColspan(2);
  2147.             potonganAbsensiKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2148.             potonganAbsensiKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2149.             potonganAbsensiKaryawanLabelCell.setBorderWidthTop(0);
  2150.             potonganAbsensiKaryawanLabelCell.setBorderWidthLeft(0);
  2151.             potonganAbsensiKaryawanLabelCell.setBorderWidthRight(0);
  2152.             potonganAbsensiKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 4);
  2153.             table.addCell(potonganAbsensiKaryawanLabelCell);
  2154.            
  2155.             Double totalPotonganAbsensiKaryawan = 0D;
  2156.             for (int i = 0; i < 12; i++) {
  2157.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  2158.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2159.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_ABSENSI) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2160.                                                                               .findFirst()
  2161.                                                                               .orElse(null);
  2162.                 PdfPCell monthValueCell = new PdfPCell();
  2163.                 if (objPendapatanPotonganKaryawan != null) {
  2164.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  2165.                     totalPotonganAbsensiKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  2166.                 } else {
  2167.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  2168.                 }
  2169.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2170.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2171.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2172.                 monthValueCell.setBorderWidthTop(0);
  2173.                 monthValueCell.setBorderWidthLeft(0);
  2174.                 monthValueCell.setBorderWidthRight(0);
  2175.                 table.addCell(monthValueCell);
  2176.             }
  2177.  
  2178.             // total potongan absensi semua bulan pada tahun yang sama
  2179.             PdfPCell totalPotonganAbsensiKaryawanValueCell = new PdfPCell();
  2180.             totalPotonganAbsensiKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPotonganAbsensiKaryawan.doubleValue()), STANDARD_FONT));
  2181.             totalPotonganAbsensiKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2182.             totalPotonganAbsensiKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2183.             totalPotonganAbsensiKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2184.             totalPotonganAbsensiKaryawanValueCell.setBorderWidthTop(0);
  2185.             totalPotonganAbsensiKaryawanValueCell.setBorderWidthLeft(0);
  2186.             totalPotonganAbsensiKaryawanValueCell.setBorderWidthRight(0);
  2187.             table.addCell(totalPotonganAbsensiKaryawanValueCell);
  2188.         }
  2189.        
  2190.         // Potongan tunjangan harian
  2191.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2192.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_TUNJANGAN_HARIAN) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  2193.                                                                       .findFirst()
  2194.                                                                       .orElse(null);
  2195.         if (objPendapatanPotonganKaryawan != null) {
  2196.             PdfPCell potonganTunjanganHarianKaryawanLabelCell = new PdfPCell(new Phrase("Potongan tunjangan harian", STANDARD_FONT));
  2197.             potonganTunjanganHarianKaryawanLabelCell.setColspan(2);
  2198.             potonganTunjanganHarianKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2199.             potonganTunjanganHarianKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2200.             potonganTunjanganHarianKaryawanLabelCell.setBorderWidthTop(0);
  2201.             potonganTunjanganHarianKaryawanLabelCell.setBorderWidthLeft(0);
  2202.             potonganTunjanganHarianKaryawanLabelCell.setBorderWidthRight(0);
  2203.             potonganTunjanganHarianKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 4);
  2204.             table.addCell(potonganTunjanganHarianKaryawanLabelCell);
  2205.            
  2206.             Double totalPotonganTunjanganHarianKaryawan = 0D;
  2207.             for (int i = 0; i < 12; i++) {
  2208.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  2209.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2210.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_TUNJANGAN_HARIAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2211.                                                                               .findFirst()
  2212.                                                                               .orElse(null);
  2213.                 PdfPCell monthValueCell = new PdfPCell();
  2214.                 if (objPendapatanPotonganKaryawan != null) {
  2215.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  2216.                     totalPotonganTunjanganHarianKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  2217.                 } else {
  2218.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  2219.                 }
  2220.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2221.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2222.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2223.                 monthValueCell.setBorderWidthTop(0);
  2224.                 monthValueCell.setBorderWidthLeft(0);
  2225.                 monthValueCell.setBorderWidthRight(0);
  2226.                 table.addCell(monthValueCell);
  2227.             }
  2228.            
  2229.             // total potongan tunjangan harian semua bulan pada tahun yang sama
  2230.             PdfPCell totalPotonganTunjanganHarianKaryawanValueCell = new PdfPCell();
  2231.             totalPotonganTunjanganHarianKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPotonganTunjanganHarianKaryawan.doubleValue()), STANDARD_FONT));
  2232.             totalPotonganTunjanganHarianKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2233.             totalPotonganTunjanganHarianKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2234.             totalPotonganTunjanganHarianKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2235.             totalPotonganTunjanganHarianKaryawanValueCell.setBorderWidthTop(0);
  2236.             totalPotonganTunjanganHarianKaryawanValueCell.setBorderWidthLeft(0);
  2237.             totalPotonganTunjanganHarianKaryawanValueCell.setBorderWidthRight(0);
  2238.             table.addCell(totalPotonganTunjanganHarianKaryawanValueCell);
  2239.         }
  2240.        
  2241.         // Potongan tunjangan tetap
  2242.         objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2243.                                                                       .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_TUNJANGAN_TETAP) && pendapatanPotonganKaryawan.getTotalNilai() != 0)
  2244.                                                                       .findFirst()
  2245.                                                                       .orElse(null);
  2246.         if (objPendapatanPotonganKaryawan != null) {
  2247.             PdfPCell potonganTunjanganTetapKaryawanLabelCell = new PdfPCell(new Phrase("Potongan tunjangan tetap", STANDARD_FONT));
  2248.             potonganTunjanganTetapKaryawanLabelCell.setColspan(2);
  2249.             potonganTunjanganTetapKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2250.             potonganTunjanganTetapKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2251.             potonganTunjanganTetapKaryawanLabelCell.setBorderWidthTop(0);
  2252.             potonganTunjanganTetapKaryawanLabelCell.setBorderWidthLeft(0);
  2253.             potonganTunjanganTetapKaryawanLabelCell.setBorderWidthRight(0);
  2254.             potonganTunjanganTetapKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 4);
  2255.             table.addCell(potonganTunjanganTetapKaryawanLabelCell);
  2256.            
  2257.             Double totalPotonganTunjanganTetapKaryawan = 0D;
  2258.             for (int i = 0; i < 12; i++) {
  2259.                 final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  2260.                 objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2261.                                                                               .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.POTONGAN_TUNJANGAN_TETAP) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2262.                                                                               .findFirst()
  2263.                                                                               .orElse(null);
  2264.                 PdfPCell monthValueCell = new PdfPCell();
  2265.                 if (objPendapatanPotonganKaryawan != null) {
  2266.                     monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  2267.                     totalPotonganTunjanganTetapKaryawan += objPendapatanPotonganKaryawan.getTotalNilaiAkhir().doubleValue();
  2268.                 } else {
  2269.                     monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  2270.                 }
  2271.                 monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2272.                 monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2273.                 monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2274.                 monthValueCell.setBorderWidthTop(0);
  2275.                 monthValueCell.setBorderWidthLeft(0);
  2276.                 monthValueCell.setBorderWidthRight(0);
  2277.                 table.addCell(monthValueCell);
  2278.             }
  2279.            
  2280.             // total potongan tunjangan tetap semua bulan pada tahun yang sama
  2281.             PdfPCell totalPotonganTunjanganTetapKaryawanValueCell = new PdfPCell();
  2282.             totalPotonganTunjanganTetapKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPotonganTunjanganTetapKaryawan.doubleValue()), STANDARD_FONT));
  2283.             totalPotonganTunjanganTetapKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2284.             totalPotonganTunjanganTetapKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2285.             totalPotonganTunjanganTetapKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2286.             totalPotonganTunjanganTetapKaryawanValueCell.setBorderWidthTop(0);
  2287.             totalPotonganTunjanganTetapKaryawanValueCell.setBorderWidthLeft(0);
  2288.             totalPotonganTunjanganTetapKaryawanValueCell.setBorderWidthRight(0);
  2289.             table.addCell(totalPotonganTunjanganTetapKaryawanValueCell);
  2290.         }
  2291.        
  2292.         // ganti disini
  2293.         // Potongan yang mengurangi THP
  2294.         Map<String, String> searchParameter = new HashMap<String, String>();
  2295.         searchParameter.put("thpFlag", "-1");
  2296.         searchParameter.put("sort", "name-asc");
  2297.         List<MstIncomeDeduction> potonganMengurangiTHPList = mstIncomeDeductionService.search(SearchParameter.generate(searchParameter, MstIncomeDeductionPojo.getFieldMappings()))
  2298.                                                                                        .getResult()
  2299.                                                                                        .stream()
  2300.                                                                                        .filter(incomeDeduction -> incomeDeduction.getIncomeDeductionGroup().name().startsWith("POT") && incomeDeduction.getCode().trim().equals(DomainConstants.EMPTY))
  2301.                                                                                        .collect(Collectors.toList());
  2302.  
  2303.         for (MstIncomeDeduction potonganMengurangiTHP: potonganMengurangiTHPList) {
  2304.             PendapatanPotonganKaryawan pendapatanPotonganKaryawanMengurangiTHP = pendapatanPotonganKaryawanList.stream()
  2305.                                                                                                                .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getId().equals(potonganMengurangiTHP.getId()))
  2306.                                                                                                                .findFirst()
  2307.                                                                                                                .orElse(null);
  2308.            
  2309.             if (potonganMengurangiTHP != null) {
  2310.                 PdfPCell tunjanganMenambahTHPLabelCell = new PdfPCell(new Phrase(potonganMengurangiTHP.getName(), STANDARD_FONT));
  2311.                 tunjanganMenambahTHPLabelCell.setColspan(2);
  2312.                 tunjanganMenambahTHPLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2313.                 tunjanganMenambahTHPLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2314.                 tunjanganMenambahTHPLabelCell.setBorderWidthTop(0);
  2315.                 tunjanganMenambahTHPLabelCell.setBorderWidthLeft(0);
  2316.                 tunjanganMenambahTHPLabelCell.setBorderWidthRight(0);
  2317.                 tunjanganMenambahTHPLabelCell.setPaddingLeft(CELL_PADDING * 2);
  2318.                 tunjanganMenambahTHPLabelCell.setNoWrap(false);
  2319.                 table.addCell(tunjanganMenambahTHPLabelCell);
  2320.                
  2321.                 Double totalPotonganMengurangiTHP = 0D;
  2322.                 for (int i = 0; i < 12; i++) {
  2323.                     final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  2324.                     pendapatanPotonganKaryawanMengurangiTHP = pendapatanPotonganKaryawanList.stream()
  2325.                                                                                             .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getId().equals(potonganMengurangiTHP.getId()) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2326.                                                                                             .findFirst()
  2327.                                                                                             .orElse(null);
  2328.                    
  2329.                     PdfPCell monthValueCell = new PdfPCell();
  2330.                     if (pendapatanPotonganKaryawanMengurangiTHP != null) {
  2331.                         monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(pendapatanPotonganKaryawanMengurangiTHP.getTotalNilaiAkhir().doubleValue()), STANDARD_FONT));
  2332.                         totalPotonganMengurangiTHP += pendapatanPotonganKaryawanMengurangiTHP.getTotalNilaiAkhir().doubleValue();
  2333.                     } else {
  2334.                         monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  2335.                     }
  2336.                     monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2337.                     monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2338.                     monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2339.                     monthValueCell.setBorderWidthTop(0);
  2340.                     monthValueCell.setBorderWidthLeft(0);
  2341.                     monthValueCell.setBorderWidthRight(0);
  2342.                     table.addCell(monthValueCell);
  2343.                 }
  2344.                
  2345.                 // total potongan mengurangi THP semua bulan pada tahun yang sama
  2346.                 PdfPCell totalPotonganMengurangiTHPValueCell = new PdfPCell();
  2347.                 totalPotonganMengurangiTHPValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPotonganMengurangiTHP.doubleValue()), STANDARD_FONT));
  2348.                 totalPotonganMengurangiTHPValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2349.                 totalPotonganMengurangiTHPValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2350.                 totalPotonganMengurangiTHPValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2351.                 totalPotonganMengurangiTHPValueCell.setBorderWidthTop(0);
  2352.                 totalPotonganMengurangiTHPValueCell.setBorderWidthLeft(0);
  2353.                 totalPotonganMengurangiTHPValueCell.setBorderWidthRight(0);
  2354.                 table.addCell(totalPotonganMengurangiTHPValueCell);
  2355.             }
  2356.         }
  2357.        
  2358.         // Pendapatan Total
  2359.         PdfPCell potonganTotalLabelCell = new PdfPCell(new Phrase("Pendapatan Total", STANDARD_FONT_BOLD));
  2360.         potonganTotalLabelCell.setColspan(15);
  2361.         potonganTotalLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2362.         potonganTotalLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2363.         potonganTotalLabelCell.setBorderWidthTop(0);
  2364.         potonganTotalLabelCell.setBorderWidthLeft(0);
  2365.         potonganTotalLabelCell.setBorderWidthRight(0);
  2366.         table.addCell(potonganTotalLabelCell);
  2367.        
  2368.         // Keseluruhan
  2369.         PdfPCell keseluruhanLabelCell = new PdfPCell(new Phrase("Keseluruhan", STANDARD_FONT));
  2370.         keseluruhanLabelCell.setColspan(2);
  2371.         keseluruhanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2372.         keseluruhanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2373.         keseluruhanLabelCell.setBorderWidthTop(0);
  2374.         keseluruhanLabelCell.setBorderWidthLeft(0);
  2375.         keseluruhanLabelCell.setBorderWidthRight(0);
  2376.         keseluruhanLabelCell.setPaddingLeft(CELL_PADDING * 2);
  2377.         table.addCell(keseluruhanLabelCell);
  2378.        
  2379.         Double totalKeseluruhan = 0D;
  2380.         for (int i = 0; i < 12; i++) {
  2381.             Double keseluruhan = 0D;
  2382.             if (gajiList.get(i) != null) {
  2383.                 keseluruhan += gajiList.get(i);
  2384.             }
  2385.             if (rapelGajiList.get(i) != null) {
  2386.                 keseluruhan += rapelGajiList.get(i);
  2387.             }
  2388.             if (thrList.get(i) != null) {
  2389.                 keseluruhan += thrList.get(i);
  2390.             }
  2391.             if (rapelThrList.get(i) != null) {
  2392.                 keseluruhan += rapelThrList.get(i);
  2393.             }
  2394.             if (bonusList.get(i) != null) {
  2395.                 keseluruhan += bonusList.get(i);
  2396.             }
  2397.             if (pembayaranSisaCutiList.get(i) != null) {
  2398.                 keseluruhan += pembayaranSisaCutiList.get(i);
  2399.             }
  2400.             if (totalTunjanganList.get(i) != null) {
  2401.                 keseluruhan += totalTunjanganList.get(i);
  2402.             }
  2403.             if (totalPotonganList.get(i) != null) {
  2404.                 keseluruhan -= totalPotonganList.get(i);
  2405.             }
  2406.            
  2407.             totalKeseluruhan += keseluruhan;
  2408.            
  2409.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(keseluruhan.doubleValue()), STANDARD_FONT));
  2410.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2411.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2412.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2413.             monthValueCell.setBorderWidthTop(0);
  2414.             monthValueCell.setBorderWidthLeft(0);
  2415.             monthValueCell.setBorderWidthRight(0);
  2416.             table.addCell(monthValueCell);
  2417.            
  2418.             keseluruhanList.add(keseluruhan);
  2419.         }
  2420.        
  2421.         // total keseluruhan semua bulan pada tahun yang sama
  2422.         PdfPCell totalKeseluruhanValueCell = new PdfPCell();
  2423.         totalKeseluruhanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalKeseluruhan.doubleValue()), STANDARD_FONT));
  2424.         totalKeseluruhanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2425.         totalKeseluruhanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2426.         totalKeseluruhanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2427.         totalKeseluruhanValueCell.setBorderWidthTop(0);
  2428.         totalKeseluruhanValueCell.setBorderWidthLeft(0);
  2429.         totalKeseluruhanValueCell.setBorderWidthRight(0);
  2430.         table.addCell(totalKeseluruhanValueCell);
  2431.        
  2432.         // Diterima karyawan
  2433.         PdfPCell diterimaKaryawanLabelCell = new PdfPCell(new Phrase("Diterima karyawan", STANDARD_FONT));
  2434.         diterimaKaryawanLabelCell.setColspan(2);
  2435.         diterimaKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2436.         diterimaKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2437.         diterimaKaryawanLabelCell.setBorderWidthTop(0);
  2438.         diterimaKaryawanLabelCell.setBorderWidthLeft(0);
  2439.         diterimaKaryawanLabelCell.setBorderWidthRight(0);
  2440.         diterimaKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 2);
  2441.         table.addCell(diterimaKaryawanLabelCell);
  2442.        
  2443.         Double totalPendapatanDiterimaKaryawan = 0D;
  2444.         for (int i = 0; i < 12; i++) {
  2445.             Double diterimaKaryawan = keseluruhanList.get(i) - totalTidakDiterimaKaryawanList.get(i);
  2446.            
  2447.             totalPendapatanDiterimaKaryawan += diterimaKaryawan;
  2448.            
  2449.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(diterimaKaryawan.doubleValue()), STANDARD_FONT));
  2450.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2451.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2452.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2453.             monthValueCell.setBorderWidthTop(0);
  2454.             monthValueCell.setBorderWidthLeft(0);
  2455.             monthValueCell.setBorderWidthRight(0);
  2456.             table.addCell(monthValueCell);
  2457.            
  2458.             diterimaKaryawanList.add(diterimaKaryawan);
  2459.         }
  2460.        
  2461.         // total pendapatan diterima karyawan semua bulan pada tahun yang sama
  2462.         PdfPCell totalPendapatanDiterimaKaryawanValueCell = new PdfPCell();
  2463.         totalPendapatanDiterimaKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPendapatanDiterimaKaryawan.doubleValue()), STANDARD_FONT));
  2464.         totalPendapatanDiterimaKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2465.         totalPendapatanDiterimaKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2466.         totalPendapatanDiterimaKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2467.         totalPendapatanDiterimaKaryawanValueCell.setBorderWidthTop(0);
  2468.         totalPendapatanDiterimaKaryawanValueCell.setBorderWidthLeft(0);
  2469.         totalPendapatanDiterimaKaryawanValueCell.setBorderWidthRight(0);
  2470.         table.addCell(totalPendapatanDiterimaKaryawanValueCell);
  2471.        
  2472.         // Pajak
  2473.         PdfPCell pajakLabelCell = new PdfPCell(new Phrase("Pajak", STANDARD_FONT_BOLD));
  2474.         pajakLabelCell.setColspan(2);
  2475.         pajakLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2476.         pajakLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2477.         pajakLabelCell.setBorderWidthTop(0);
  2478.         pajakLabelCell.setBorderWidthLeft(0);
  2479.         pajakLabelCell.setBorderWidthRight(0);
  2480.         table.addCell(pajakLabelCell);
  2481.        
  2482.         Double totalAllPajak = 0D;
  2483.         for (int i = 0; i < 12; i++) {
  2484.             final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  2485.             Double totalPajak = 0D;
  2486.            
  2487.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2488.                                                                           .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.PAJAK) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2489.                                                                           .findFirst()
  2490.                                                                           .orElse(null);           
  2491.             if (objPendapatanPotonganKaryawan != null) {
  2492.                 totalPajak += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  2493.                 pajakDitanggungKaryawanList.add(objPendapatanPotonganKaryawan.getTotalNilaiAkhir());
  2494.             } else {
  2495.                 pajakDitanggungKaryawanList.add(0D);
  2496.             }
  2497.            
  2498.             objPendapatanPotonganKaryawan = pendapatanPotonganKaryawanList.stream()
  2499.                                                                           .filter(pendapatanPotonganKaryawan -> pendapatanPotonganKaryawan.getPendapatanPotongan().getCode().equals(IncomeDeductionConstants.PAJAK_DITANGGUNG_PERUSAHAAN) && pendapatanPotonganKaryawan.getTahunBulanGaji().equals(yearMonth))
  2500.                                                                           .findFirst()
  2501.                                                                           .orElse(null);
  2502.            
  2503.             if (objPendapatanPotonganKaryawan != null) {
  2504.                 totalPajak += objPendapatanPotonganKaryawan.getTotalNilaiAkhir();
  2505.                 pajakDitanggungPerusahaanList.add(objPendapatanPotonganKaryawan.getTotalNilaiAkhir());
  2506.             } else {
  2507.                 pajakDitanggungPerusahaanList.add(0D);
  2508.             }
  2509.            
  2510.             totalAllPajak += totalPajak;
  2511.            
  2512.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPajak.doubleValue()), STANDARD_FONT));
  2513.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2514.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2515.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2516.             monthValueCell.setBorderWidthTop(0);
  2517.             monthValueCell.setBorderWidthLeft(0);
  2518.             monthValueCell.setBorderWidthRight(0);
  2519.             table.addCell(monthValueCell);
  2520.         }
  2521.  
  2522.         // total pajak semua bulan pada tahun yang sama
  2523.         PdfPCell totalPajakValueCell = new PdfPCell();
  2524.         totalPajakValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalAllPajak.doubleValue()), STANDARD_FONT));
  2525.         totalPajakValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2526.         totalPajakValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2527.         totalPajakValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2528.         totalPajakValueCell.setBorderWidthTop(0);
  2529.         totalPajakValueCell.setBorderWidthLeft(0);
  2530.         totalPajakValueCell.setBorderWidthRight(0);
  2531.         table.addCell(totalPajakValueCell);
  2532.        
  2533.         // Pajak - Ditanggung karyawan
  2534.         PdfPCell pajakDitanggungKaryawanLabelCell = new PdfPCell(new Phrase("Ditanggung karyawan", STANDARD_FONT));
  2535.         pajakDitanggungKaryawanLabelCell.setColspan(2);
  2536.         pajakDitanggungKaryawanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2537.         pajakDitanggungKaryawanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2538.         pajakDitanggungKaryawanLabelCell.setBorderWidthTop(0);
  2539.         pajakDitanggungKaryawanLabelCell.setBorderWidthLeft(0);
  2540.         pajakDitanggungKaryawanLabelCell.setBorderWidthRight(0);
  2541.         pajakDitanggungKaryawanLabelCell.setPaddingLeft(CELL_PADDING * 2);
  2542.         table.addCell(pajakDitanggungKaryawanLabelCell);
  2543.        
  2544.         Double totalPajakDitanggungKaryawan = 0D;
  2545.         for (int i = 0; i < 12; i++) {
  2546.             totalPajakDitanggungKaryawan += pajakDitanggungKaryawanList.get(i).doubleValue();
  2547.            
  2548.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(pajakDitanggungKaryawanList.get(i).doubleValue()), STANDARD_FONT));
  2549.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2550.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2551.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2552.             monthValueCell.setBorderWidthTop(0);
  2553.             monthValueCell.setBorderWidthLeft(0);
  2554.             monthValueCell.setBorderWidthRight(0);
  2555.             table.addCell(monthValueCell);
  2556.         }
  2557.         // total pajak ditanggung karyawan semua bulan pada tahun yang sama
  2558.         PdfPCell totalPajakDitanggungKaryawanValueCell = new PdfPCell();
  2559.         totalPajakDitanggungKaryawanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPajakDitanggungKaryawan.doubleValue()), STANDARD_FONT));
  2560.         totalPajakDitanggungKaryawanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2561.         totalPajakDitanggungKaryawanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2562.         totalPajakDitanggungKaryawanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2563.         totalPajakDitanggungKaryawanValueCell.setBorderWidthTop(0);
  2564.         totalPajakDitanggungKaryawanValueCell.setBorderWidthLeft(0);
  2565.         totalPajakDitanggungKaryawanValueCell.setBorderWidthRight(0);
  2566.         table.addCell(totalPajakDitanggungKaryawanValueCell);
  2567.        
  2568.         // Pajak - Ditanggung perusahaan
  2569.         PdfPCell pajakDitanggungPerusahaanLabelCell = new PdfPCell(new Phrase("Ditanggung perusahaan", STANDARD_FONT));
  2570.         pajakDitanggungPerusahaanLabelCell.setColspan(2);
  2571.         pajakDitanggungPerusahaanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2572.         pajakDitanggungPerusahaanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2573.         pajakDitanggungPerusahaanLabelCell.setBorderWidthTop(0);
  2574.         pajakDitanggungPerusahaanLabelCell.setBorderWidthLeft(0);
  2575.         pajakDitanggungPerusahaanLabelCell.setBorderWidthRight(0);
  2576.         pajakDitanggungPerusahaanLabelCell.setPaddingLeft(CELL_PADDING * 2);
  2577.         table.addCell(pajakDitanggungPerusahaanLabelCell);
  2578.  
  2579.         Double totalPajakDitanggungPerusahaan = 0D;
  2580.         for (int i = 0; i < 12; i++) {
  2581.             totalPajakDitanggungPerusahaan += pajakDitanggungPerusahaanList.get(i).doubleValue();
  2582.            
  2583.             PdfPCell monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(pajakDitanggungPerusahaanList.get(i).doubleValue()), STANDARD_FONT));
  2584.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2585.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2586.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2587.             monthValueCell.setBorderWidthTop(0);
  2588.             monthValueCell.setBorderWidthLeft(0);
  2589.             monthValueCell.setBorderWidthRight(0);
  2590.             table.addCell(monthValueCell);
  2591.         }
  2592.         // total pajak ditanggung perusahaan semua bulan pada tahun yang sama
  2593.         PdfPCell totalPajakDitanggungPerusahaanValueCell = new PdfPCell();
  2594.         totalPajakDitanggungPerusahaanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalPajakDitanggungPerusahaan.doubleValue()), STANDARD_FONT));
  2595.         totalPajakDitanggungPerusahaanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2596.         totalPajakDitanggungPerusahaanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2597.         totalPajakDitanggungPerusahaanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2598.         totalPajakDitanggungPerusahaanValueCell.setBorderWidthTop(0);
  2599.         totalPajakDitanggungPerusahaanValueCell.setBorderWidthLeft(0);
  2600.         totalPajakDitanggungPerusahaanValueCell.setBorderWidthRight(0);
  2601.         table.addCell(totalPajakDitanggungPerusahaanValueCell);
  2602.        
  2603.         // THP
  2604.         PdfPCell thpLabelCell = new PdfPCell(new Phrase("THP", STANDARD_FONT_BOLD));
  2605.         thpLabelCell.setColspan(15);
  2606.         thpLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2607.         thpLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2608.         thpLabelCell.setBorderWidthTop(0);
  2609.         thpLabelCell.setBorderWidthLeft(0);
  2610.         thpLabelCell.setBorderWidthRight(0);
  2611.         table.addCell(thpLabelCell);
  2612.        
  2613.         // THP - Awal
  2614.         PdfPCell thpAwalLabelCell = new PdfPCell(new Phrase("Awal", STANDARD_FONT));
  2615.         thpAwalLabelCell.setColspan(2);
  2616.         thpAwalLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2617.         thpAwalLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2618.         thpAwalLabelCell.setBorderWidthTop(0);
  2619.         thpAwalLabelCell.setBorderWidthLeft(0);
  2620.         thpAwalLabelCell.setBorderWidthRight(0);
  2621.         thpAwalLabelCell.setPaddingLeft(CELL_PADDING * 2);
  2622.         table.addCell(thpAwalLabelCell);
  2623.        
  2624.         Double totalTHPAwal = 0D;
  2625.         for (int i = 0; i < 12; i++) {
  2626.             final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  2627.             SummaryPenghasilanKaryawan objSummaryPenghasilanKaryawan = summaryPenghasilanKaryawanList.stream()
  2628.                                                                                                      .filter(summaryPenghasilanKaryawan -> summaryPenghasilanKaryawan.getTahunBulanGaji().equals(yearMonth))
  2629.                                                                                                      .findFirst()
  2630.                                                                                                      .orElse(null);
  2631.            
  2632.             PdfPCell monthValueCell = new PdfPCell();
  2633.             if (objSummaryPenghasilanKaryawan != null) {
  2634.                 monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(objSummaryPenghasilanKaryawan.getThp()), STANDARD_FONT));
  2635.                 totalTHPAwal += objSummaryPenghasilanKaryawan.getThp().doubleValue();
  2636.             } else {
  2637.                 monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  2638.             }
  2639.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2640.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2641.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2642.             monthValueCell.setBorderWidthTop(0);
  2643.             monthValueCell.setBorderWidthLeft(0);
  2644.             monthValueCell.setBorderWidthRight(0);
  2645.             table.addCell(monthValueCell);
  2646.         }
  2647.         // total thp awal semua bulan pada tahun yang sama
  2648.         PdfPCell totalTHPAwalValueCell = new PdfPCell();
  2649.         totalTHPAwalValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalTHPAwal.doubleValue()), STANDARD_FONT));
  2650.         totalTHPAwalValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2651.         totalTHPAwalValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2652.         totalTHPAwalValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2653.         totalTHPAwalValueCell.setBorderWidthTop(0);
  2654.         totalTHPAwalValueCell.setBorderWidthLeft(0);
  2655.         totalTHPAwalValueCell.setBorderWidthRight(0);
  2656.         table.addCell(totalTHPAwalValueCell);
  2657.        
  2658.         // THP - Pembulatan / Koreksi
  2659.         PdfPCell thpPembulatanKoreksiLabelCell = new PdfPCell(new Phrase("Pembulatan / koreksi", STANDARD_FONT));
  2660.         thpPembulatanKoreksiLabelCell.setColspan(2);
  2661.         thpPembulatanKoreksiLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2662.         thpPembulatanKoreksiLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2663.         thpPembulatanKoreksiLabelCell.setBorderWidthTop(0);
  2664.         thpPembulatanKoreksiLabelCell.setBorderWidthLeft(0);
  2665.         thpPembulatanKoreksiLabelCell.setBorderWidthRight(0);
  2666.         thpPembulatanKoreksiLabelCell.setPaddingLeft(CELL_PADDING * 2);
  2667.         table.addCell(thpPembulatanKoreksiLabelCell);
  2668.        
  2669.         Double totalTHPPembulatan = 0D;
  2670.         for (int i = 0; i < 12; i++) {
  2671.             final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  2672.             Object[] objPembayaranKaryawan = pembayaranKaryawanList.stream()
  2673.                                                                    .filter(pembayaranKaryawan -> pembayaranKaryawan[1].toString().equals(yearMonth))
  2674.                                                                    .findFirst()
  2675.                                                                    .orElse(null);
  2676.  
  2677.             PdfPCell monthValueCell = new PdfPCell();
  2678.             if (objPembayaranKaryawan != null) {
  2679.                 monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(Double.valueOf(objPembayaranKaryawan[2].toString())), STANDARD_FONT));
  2680.                 totalTHPPembulatan += Double.valueOf(objPembayaranKaryawan[2].toString());
  2681.             } else {
  2682.                 monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  2683.             }
  2684.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2685.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2686.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2687.             monthValueCell.setBorderWidthTop(0);
  2688.             monthValueCell.setBorderWidthLeft(0);
  2689.             monthValueCell.setBorderWidthRight(0);
  2690.             table.addCell(monthValueCell);
  2691.         }
  2692.         // total thp pembulatan semua bulan pada tahun yang sama
  2693.         PdfPCell totalTHPPembulatanValueCell = new PdfPCell();
  2694.         totalTHPPembulatanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalTHPPembulatan.doubleValue()), STANDARD_FONT));
  2695.         totalTHPPembulatanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2696.         totalTHPPembulatanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2697.         totalTHPPembulatanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2698.         totalTHPPembulatanValueCell.setBorderWidthTop(0);
  2699.         totalTHPPembulatanValueCell.setBorderWidthLeft(0);
  2700.         totalTHPPembulatanValueCell.setBorderWidthRight(0);
  2701.         table.addCell(totalTHPPembulatanValueCell);
  2702.        
  2703.         // Hasil pembulatan
  2704.         PdfPCell thpHasilPembulatanLabelCell = new PdfPCell(new Phrase("Hasil pembulatan", STANDARD_FONT));
  2705.         thpHasilPembulatanLabelCell.setColspan(2);
  2706.         thpHasilPembulatanLabelCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2707.         thpHasilPembulatanLabelCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2708.         thpHasilPembulatanLabelCell.setBorderWidthTop(0);
  2709.         thpHasilPembulatanLabelCell.setBorderWidthLeft(0);
  2710.         thpHasilPembulatanLabelCell.setBorderWidthRight(0);
  2711.         thpHasilPembulatanLabelCell.setPaddingLeft(CELL_PADDING * 2);
  2712.         table.addCell(thpHasilPembulatanLabelCell);
  2713.        
  2714.         Double totalTHPHasilPembulatan = 0D;
  2715.         for (int i = 0; i < 12; i++) {
  2716.             final String yearMonth = (i + 1) < 10 ? (year + "0" + (i + 1)) : year + String.valueOf((i + 1));
  2717.             Object[] objPembayaranKaryawan = pembayaranKaryawanList.stream()
  2718.                                                                    .filter(pembayaranKaryawan -> pembayaranKaryawan[1].toString().equals(yearMonth))
  2719.                                                                    .findFirst()
  2720.                                                                    .orElse(null);
  2721.            
  2722.             PdfPCell monthValueCell = new PdfPCell();
  2723.             if (objPembayaranKaryawan != null) {
  2724.                 monthValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(Double.valueOf(objPembayaranKaryawan[3].toString())), STANDARD_FONT));
  2725.                 totalTHPHasilPembulatan += Double.valueOf(objPembayaranKaryawan[3].toString());
  2726.             } else {
  2727.                 monthValueCell = new PdfPCell(new Phrase("0", STANDARD_FONT));
  2728.             }
  2729.             monthValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2730.             monthValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2731.             monthValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2732.             monthValueCell.setBorderWidthTop(0);
  2733.             monthValueCell.setBorderWidthLeft(0);
  2734.             monthValueCell.setBorderWidthRight(0);
  2735.             table.addCell(monthValueCell);
  2736.         }
  2737.         // total thp hasil pembulatan semua bulan pada tahun yang sama
  2738.         PdfPCell totalTHPHasilPembulatanValueCell = new PdfPCell();
  2739.         totalTHPHasilPembulatanValueCell = new PdfPCell(new Phrase(StringUtil.convertToThousandSeparator(totalTHPHasilPembulatan.doubleValue()), STANDARD_FONT));
  2740.         totalTHPHasilPembulatanValueCell.setPaddingTop(CELL_TABLE_PADDING_TOP);
  2741.         totalTHPHasilPembulatanValueCell.setPaddingBottom(CELL_TABLE_PADDING_BOTTOM);
  2742.         totalTHPHasilPembulatanValueCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
  2743.         totalTHPHasilPembulatanValueCell.setBorderWidthTop(0);
  2744.         totalTHPHasilPembulatanValueCell.setBorderWidthLeft(0);
  2745.         totalTHPHasilPembulatanValueCell.setBorderWidthRight(0);
  2746.         table.addCell(totalTHPHasilPembulatanValueCell);
  2747.        
  2748.         document.add(table);
  2749.     }
  2750. }
  2751.  
Add Comment
Please, Sign In to add comment