Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.openhris.timekeeping; import com.openhris.administrator.model.UserAccessControl; import com.openhris.commons.DropDownComponent; import com.openhris.commons.OpenHrisUtilities; import com.openhris.commons.reports.OpenHrisReports; import com.openhris.payroll.ProcessPayrollComputation; import com.openhris.model.Timekeeping; import com.openhris.timekeeping.reports.IndividualAttendanceReport; import com.openhris.service.TimekeepingService; import com.openhris.timekeeping.serviceprovider.TimekeepingServiceImpl; import com.vaadin.data.Item; import com.vaadin.event.FieldEvents; import com.vaadin.event.ItemClickEvent; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.CheckBox; import com.vaadin.ui.GridLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Table; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; /** * * @author jetdario */ public class EditAttendanceTableContainerWindow extends Window { OpenHrisUtilities utilities = new OpenHrisUtilities(); TimekeepingComputation computation = new TimekeepingComputation(); TimekeepingService timekeepingService = new TimekeepingServiceImpl(); DropDownComponent dropDown = new DropDownComponent(); private String name; private List dateList; private String employeeId; private String payrollPeriod; private String payrollDate; private String attendancePeriodFrom; private String attendancePeriodTo; private String employmentWageEntry; private double employmentWage; private int branchId; private int payrollId; private double premiumRate; // DecimalFormat df = new DecimalFormat("0.00"); public EditAttendanceTableContainerWindow(String name, List dateList, String employeeId, String payrollPeriod, String payrollDate, String attendancePeriodFrom, String attendancePeriodTo, String employmentWageEntry, double employmentWage, int branchId, int payrollId) { this.name = name; this.dateList = dateList; this.employeeId = employeeId; this.payrollPeriod = payrollPeriod; this.payrollDate = payrollDate; this.attendancePeriodFrom = attendancePeriodFrom; this.attendancePeriodTo = attendancePeriodTo; this.employmentWageEntry = employmentWageEntry; this.employmentWage = employmentWage; this.branchId = branchId; this.payrollId = payrollId; setCaption("ATTENDANCE TABLE for " + getEmployeesName()); setSizeFull(); setModal(true); center(); VerticalLayout vlayout = new VerticalLayout(); vlayout.setSizeFull(); vlayout.setSpacing(true); GridLayout glayout = new GridLayout(2, 2); glayout.setSpacing(true); Label payrollPeriodLabel = new Label("Payroll Period: "); glayout.addComponent(payrollPeriodLabel, 0, 0); glayout.setComponentAlignment(payrollPeriodLabel, Alignment.MIDDLE_RIGHT); Label periodLabel = new Label(getPayrollPeriod()); glayout.addComponent(periodLabel, 1, 0); glayout.setComponentAlignment(periodLabel, Alignment.MIDDLE_LEFT); Label payrollDateLabel = new Label("Payroll Date: "); glayout.addComponent(payrollDateLabel, 0, 1); glayout.setComponentAlignment(payrollDateLabel, Alignment.MIDDLE_RIGHT); Label dateLabel = new Label(getPayrollDate()); glayout.addComponent(dateLabel, 1, 1); glayout.setComponentAlignment(dateLabel, Alignment.MIDDLE_LEFT); vlayout.addComponent(glayout); vlayout.addComponent(generateAttendanceTable()); addComponent(vlayout); } VerticalLayout generateAttendanceTable() { VerticalLayout vlayout = new VerticalLayout(); vlayout.setSizeFull(); vlayout.setSpacing(true); if (getEmploymentWageEntry().equals("monthly")) { employmentWage = utilities.roundOffToTwoDecimalPlaces((employmentWage * 12) / 314); } final Table table = new Table(); table.removeAllItems(); table.setEnabled(true); table.setWidth("100%"); table.setImmediate(true); table.setColumnCollapsingAllowed(true); table.addContainerProperty("edit", CheckBox.class, null); table.addContainerProperty("date", String.class, null); table.addContainerProperty("policy", String.class, null); table.addContainerProperty("holidays", String.class, null); table.addContainerProperty("premium", CheckBox.class, null); table.addContainerProperty("lates", TextField.class, null); table.addContainerProperty("undertime", TextField.class, null); table.addContainerProperty("overtime", TextField.class, null); table.addContainerProperty("night differential", TextField.class, null); table.addContainerProperty("l/min", Double.class, null); table.addContainerProperty("u/min", Double.class, null); table.addContainerProperty("o/min", Double.class, null); table.addContainerProperty("nd/min", Double.class, null); table.addContainerProperty("lholiday", Double.class, null); table.addContainerProperty("sholiday", Double.class, null); table.addContainerProperty("wdo", Double.class, null); table.addContainerProperty("psday", Double.class, null); //paid non-working holiday table.addContainerProperty("latesLH", Double.class, null); table.addContainerProperty("latesSH", Double.class, null); table.addContainerProperty("latesWO", Double.class, null); table.addContainerProperty("undertimeLH", Double.class, null); table.addContainerProperty("undertimeSH", Double.class, null); table.addContainerProperty("undertimeWO", Double.class, null); table.setColumnAlignment("edit", Table.ALIGN_CENTER); table.setColumnAlignment("date", Table.ALIGN_CENTER); table.setColumnAlignment("policy", Table.ALIGN_CENTER); table.setColumnAlignment("premium", Table.ALIGN_CENTER); table.setColumnAlignment("lates", Table.ALIGN_CENTER); table.setColumnAlignment("undertime", Table.ALIGN_CENTER); table.setColumnAlignment("overtime", Table.ALIGN_CENTER); table.setColumnAlignment("night differential", Table.ALIGN_CENTER); table.setColumnAlignment("l/min", Table.ALIGN_RIGHT); table.setColumnAlignment("u/min", Table.ALIGN_RIGHT); table.setColumnAlignment("o/min", Table.ALIGN_RIGHT); table.setColumnAlignment("nd/min", Table.ALIGN_RIGHT); table.setColumnAlignment("lholiday", Table.ALIGN_RIGHT); table.setColumnAlignment("sholiday", Table.ALIGN_RIGHT); table.setColumnAlignment("wdo", Table.ALIGN_RIGHT); table.setColumnAlignment("psday", Table.ALIGN_RIGHT); table.setColumnAlignment("latesLH", Table.ALIGN_RIGHT); table.setColumnAlignment("latesSH", Table.ALIGN_RIGHT); table.setColumnAlignment("latesWO", Table.ALIGN_RIGHT); table.setColumnAlignment("undertimeLH", Table.ALIGN_RIGHT); table.setColumnAlignment("undertimeSH", Table.ALIGN_RIGHT); table.setColumnAlignment("undertimeWO", Table.ALIGN_RIGHT); table.setColumnCollapsed("latesLH", true); table.setColumnCollapsed("latesSH", true); table.setColumnCollapsed("latesWO", true); table.setColumnCollapsed("undertimeLH", true); table.setColumnCollapsed("undertimeSH", true); table.setColumnCollapsed("undertimeWO", true); final String[] holidayList = { "legal-holiday", "special-holiday" }; for (int i = 0; i < getDateList().size(); i++) { Object itemId = new Integer(i); final CheckBox edit = new CheckBox(); edit.setData(i); edit.setEnabled(UserAccessControl.isEditAttendance()); edit.setImmediate(true); final CheckBox premium = new CheckBox(); premium.setData(itemId); premium.setEnabled(false); premium.setImmediate(true); final TextField lates = new TextField(); lates.setWidth("50px"); lates.setValue("0"); lates.setEnabled(true); lates.setData(itemId); lates.setEnabled(false); lates.setImmediate(true); final TextField undertime = new TextField(); undertime.setWidth("50px"); undertime.setValue("0"); undertime.setEnabled(true); undertime.setData(itemId); undertime.setEnabled(false); undertime.setImmediate(true); final TextField overtime = new TextField(); overtime.setWidth("50px"); overtime.setValue("0"); overtime.setEnabled(true); overtime.setData(itemId); overtime.setEnabled(false); overtime.setImmediate(true); final TextField nightDifferential = new TextField(); nightDifferential.setWidth("50px"); nightDifferential.setValue("0"); nightDifferential.setEnabled(true); nightDifferential.setData(itemId); nightDifferential.setEnabled(false); nightDifferential.setImmediate(true); edit.addListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { premium.setEnabled(event.getButton().booleanValue()); lates.setEnabled(event.getButton().booleanValue()); undertime.setEnabled(event.getButton().booleanValue()); overtime.setEnabled(event.getButton().booleanValue()); nightDifferential.setEnabled(event.getButton().booleanValue()); } }); premium.addListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { Object itemId = lates.getData(); Item item = table.getItem(itemId); lates.setValue("0"); undertime.setValue("0"); overtime.setValue("0"); nightDifferential.setValue("0"); item.getItemProperty("l/min").setValue(0.0); item.getItemProperty("u/min").setValue(0.0); item.getItemProperty("o/min").setValue(0.0); item.getItemProperty("nd/min").setValue(0.0); if (event.getButton().booleanValue() == true) { premiumRate = 0.1; } else { premiumRate = 0.0; } item.getItemProperty("wdo") .setValue(utilities.roundOffToTwoDecimalPlaces( Double.parseDouble(item.getItemProperty("wdo").getValue().toString()) + (Double.parseDouble(item.getItemProperty("wdo").getValue().toString()) * premiumRate))); item.getItemProperty("lholiday") .setValue(utilities.roundOffToTwoDecimalPlaces(Double .parseDouble(item.getItemProperty("lholiday").getValue().toString()) + (Double.parseDouble(item.getItemProperty("lholiday").getValue().toString()) * premiumRate))); item.getItemProperty("sholiday") .setValue(utilities.roundOffToTwoDecimalPlaces(Double .parseDouble(item.getItemProperty("sholiday").getValue().toString()) + (Double.parseDouble(item.getItemProperty("sholiday").getValue().toString()) * premiumRate))); } }); lates.addListener(new FieldEvents.TextChangeListener() { @Override public void textChange(FieldEvents.TextChangeEvent event) { Object itemId = lates.getData(); Item item = table.getItem(itemId); String policyStr = item.getItemProperty("policy").toString(); String holidayStr = item.getItemProperty("holidays").toString(); double lateDeduction; boolean checkIfInputIsInteger = utilities.checkInputIfInteger(event.getText().trim()); if (!checkIfInputIsInteger) { getWindow().showNotification("Enter numeric format for lates!", Window.Notification.TYPE_WARNING_MESSAGE); return; } if (!event.getText().isEmpty()) { if (utilities.convertStringToInteger(event.getText().trim()) > 5) { lateDeduction = computation.processEmployeesLates(policyStr, holidayStr, utilities.convertStringToInteger(event.getText().trim()), getEmploymentWage()); if (policyStr == null || policyStr.isEmpty()) { item.getItemProperty("l/min") .setValue(utilities.roundOffToTwoDecimalPlaces(lateDeduction)); } else if (policyStr.equals("working-holiday") && holidayStr.equals("legal-holiday")) { item.getItemProperty("latesLH") .setValue(utilities.roundOffToTwoDecimalPlaces(lateDeduction)); item.getItemProperty("latesSH").setValue(0.0); item.getItemProperty("latesWO").setValue(0.0); item.getItemProperty("l/min").setValue(0.0); } else if (policyStr.equals("working-holiday") && holidayStr.equals("special-holiday")) { item.getItemProperty("latesLH").setValue(0.0); item.getItemProperty("latesSH") .setValue(utilities.roundOffToTwoDecimalPlaces(lateDeduction)); item.getItemProperty("latesWO").setValue(0.0); item.getItemProperty("l/min").setValue(0.0); } else if (policyStr.equals("working-day-off")) { item.getItemProperty("latesLH").setValue(0.0); item.getItemProperty("latesSH").setValue(0.0); item.getItemProperty("latesWO") .setValue(utilities.roundOffToTwoDecimalPlaces(lateDeduction)); item.getItemProperty("l/min").setValue(0.0); } } else { item.getItemProperty("l/min").setValue(0.0); } } else { item.getItemProperty("l/min").setValue(0.0); } } }); undertime.addListener(new FieldEvents.TextChangeListener() { @Override public void textChange(FieldEvents.TextChangeEvent event) { Object itemId = lates.getData(); Item item = table.getItem(itemId); String policyStr = item.getItemProperty("policy").toString(); String holidayStr = item.getItemProperty("holidays").toString(); double undertimeDeduction; boolean checkIfInputIsInteger = utilities.checkInputIfInteger(event.getText().trim()); if (!checkIfInputIsInteger) { getWindow().showNotification("Enter numeric format for undertime!", Window.Notification.TYPE_WARNING_MESSAGE); return; } if (!event.getText().isEmpty()) { undertimeDeduction = computation.processEmployeesUndertime(policyStr, holidayStr, utilities.convertStringToInteger(event.getText().trim()), getEmploymentWage()); if (policyStr == null || policyStr.isEmpty()) { item.getItemProperty("u/min") .setValue(utilities.roundOffToTwoDecimalPlaces(undertimeDeduction)); } else if (policyStr.equals("working-holiday") && holidayStr.equals("legal-holiday")) { item.getItemProperty("undertimeLH") .setValue(utilities.roundOffToTwoDecimalPlaces(undertimeDeduction)); item.getItemProperty("undertimeSH").setValue(0.0); item.getItemProperty("undertimeWO").setValue(0.0); item.getItemProperty("u/min").setValue(0.0); } else if (policyStr.equals("working-holiday") && holidayStr.equals("special-holiday")) { item.getItemProperty("undertimeLH").setValue(0.0); item.getItemProperty("undertimeSH") .setValue(utilities.roundOffToTwoDecimalPlaces(undertimeDeduction)); item.getItemProperty("undertimeWO").setValue(0.0); item.getItemProperty("u/min").setValue(0.0); } else if (policyStr.equals("working-day-off")) { item.getItemProperty("undertimeLH").setValue(0.0); item.getItemProperty("undertimeSH").setValue(0.0); item.getItemProperty("undertimeWO") .setValue(utilities.roundOffToTwoDecimalPlaces(undertimeDeduction)); item.getItemProperty("u/min").setValue(0.0); } } else { item.getItemProperty("u/min").setValue(0.0); } } }); overtime.addListener(new FieldEvents.TextChangeListener() { @Override public void textChange(FieldEvents.TextChangeEvent event) { Object itemId = lates.getData(); Item item = table.getItem(itemId); String policyStr = item.getItemProperty("policy").toString(); String holidayStr = item.getItemProperty("holidays").toString(); double overtimeAddition; boolean checkIfInputIsInteger = utilities.checkInputIfInteger(event.getText().trim()); if (!checkIfInputIsInteger) { getWindow().showNotification("Enter numeric format for undertime!", Window.Notification.TYPE_WARNING_MESSAGE); return; } if (!event.getText().isEmpty()) { overtimeAddition = computation.processEmployeesOvertime(policyStr, holidayStr, Integer.parseInt(event.getText().trim()), getEmploymentWage()); item.getItemProperty("o/min").setValue(utilities .roundOffToTwoDecimalPlaces(overtimeAddition + (overtimeAddition * premiumRate))); } else { item.getItemProperty("o/min").setValue(0.0); } } }); nightDifferential.addListener(new FieldEvents.TextChangeListener() { @Override public void textChange(FieldEvents.TextChangeEvent event) { Object itemId = lates.getData(); Item item = table.getItem(itemId); String policyStr = item.getItemProperty("policy").toString(); String holidayStr = item.getItemProperty("holidays").toString(); double nightDifferentialAddition; boolean checkIfInputIsInteger = utilities.checkInputIfInteger(event.getText().trim()); if (!checkIfInputIsInteger) { getWindow().showNotification("Enter numeric format for undertime!", Window.Notification.TYPE_WARNING_MESSAGE); return; } if (!event.getText().isEmpty()) { nightDifferentialAddition = computation.processEmployeesNightDifferential(policyStr, holidayStr, Integer.parseInt(event.getText().trim()), getEmploymentWage()); item.getItemProperty("nd/min").setValue(utilities.roundOffToTwoDecimalPlaces( nightDifferentialAddition + (nightDifferentialAddition * premiumRate))); } else { item.getItemProperty("nd/min").setValue(0.0); } } }); List<Timekeeping> timekeepingListByRowData = timekeepingService.getTimekeepingRowData( utilities.convertDateFormat(getDateList().get(i).toString()), getPayrollId()); for (Timekeeping t : timekeepingListByRowData) { String policy; String holiday; if (!t.getPolicy().equals("null")) { policy = t.getPolicy(); } else { policy = ""; } if (!t.getHoliday().equals("null")) { holiday = t.getHoliday(); } else { holiday = ""; } premium.setValue(t.isPremium()); lates.setValue(t.getLates()); undertime.setValue(t.getUndertime()); overtime.setValue(t.getOvertime()); nightDifferential.setValue(t.getNightDifferential()); table.addItem( new Object[] { edit, utilities.convertDateFormat(getDateList().get(i).toString()), policy, holiday, premium, lates, undertime, overtime, nightDifferential, t.getLateDeduction(), t.getUndertimeDeduction(), t.getOvertimePaid(), t.getNightDifferentialPaid(), t.getLegalHolidayPaid(), t.getSpecialHolidayPaid(), t.getWorkingDayOffPaid(), t.getNonWorkingHolidayPaid(), t.getLatesLegalHolidayDeduction(), t.getLatesSpecialHolidayDeduction(), t.getLatesWorkingDayOffDeduction(), t.getUndertimeLegalHolidayDeduction(), t.getUndertimeSpecialHolidayDeduction(), t.getUndertimeWorkingDayOffDeduction() }, new Integer(i)); } } table.setPageLength(table.size()); for (Object listener : table.getListeners(ItemClickEvent.class)) { table.removeListener(ItemClickEvent.class, listener); } table.addListener(new ItemClickEvent.ItemClickListener() { @Override public void itemClick(ItemClickEvent event) { final Object itemId = event.getItemId(); final Item item = table.getItem(itemId); Boolean editRow = Boolean.valueOf(item.getItemProperty("edit").getValue().toString()); if (event.getPropertyId().equals("policy")) { if (editRow) { Window sub = new AttendancePolicyWindow(holidayList, item, getEmploymentWageEntry(), getEmploymentWage()); if (sub.getParent() == null) { getApplication().getMainWindow().addWindow(sub); } } else { getWindow().showNotification("Click Edit!", Window.Notification.TYPE_WARNING_MESSAGE); } } } }); vlayout.addComponent(table); final Button saveButton = new Button(); saveButton.setWidth("200px"); saveButton.setCaption("UPDATE ATTENDANCE DATA"); saveButton.setEnabled(UserAccessControl.isEditAttendance()); for (Object listener : saveButton.getListeners(Button.ClickListener.class)) { saveButton.removeListener(Button.ClickListener.class, listener); } GridLayout glayout = new GridLayout(2, 1); glayout.setSizeFull(); glayout.setSpacing(true); saveButton.addListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { try { Collection attendanceTableCollection = table.getContainerDataSource().getItemIds(); List<Timekeeping> attendanceList = new ArrayList<>(); Iterator iterator = attendanceTableCollection.iterator(); while (iterator.hasNext()) { String str = table.getItem(iterator.next()).toString(); String[] attStr = str.split(" "); List<String> tkeepList = new ArrayList<>(Arrays.asList(attStr)); Timekeeping t = new Timekeeping(); t.setAttendanceDate(utilities.parsingDate(tkeepList.get(1))); t.setPolicy(tkeepList.get(2)); t.setHoliday(tkeepList.get(3)); t.setPremium(utilities.convertStringToBoolean(tkeepList.get(4))); t.setLates(utilities.convertStringToDouble(tkeepList.get(5))); t.setUndertime(utilities.convertStringToDouble(tkeepList.get(6))); t.setOvertime(utilities.convertStringToDouble(tkeepList.get(7))); t.setNightDifferential(utilities.convertStringToDouble(tkeepList.get(8))); t.setLateDeduction(utilities.convertStringToDouble(tkeepList.get(9))); t.setUndertimeDeduction(utilities.convertStringToDouble(tkeepList.get(10))); t.setOvertimePaid(utilities.convertStringToDouble(tkeepList.get(11))); t.setNightDifferentialPaid(utilities.convertStringToDouble(tkeepList.get(12))); t.setLegalHolidayPaid(utilities.convertStringToDouble(tkeepList.get(13))); t.setSpecialHolidayPaid(utilities.convertStringToDouble(tkeepList.get(14))); t.setWorkingDayOffPaid(utilities.convertStringToDouble(tkeepList.get(15))); t.setNonWorkingHolidayPaid(utilities.convertStringToDouble(tkeepList.get(16))); t.setLatesLegalHolidayDeduction(utilities.convertStringToDouble(tkeepList.get(17))); t.setLatesSpecialHolidayDeduction(utilities.convertStringToDouble(tkeepList.get(18))); t.setLatesWorkingDayOffDeduction(utilities.convertStringToDouble(tkeepList.get(19))); t.setUndertimeLegalHolidayDeduction(utilities.convertStringToDouble(tkeepList.get(20))); t.setUndertimeSpecialHolidayDeduction(utilities.convertStringToDouble(tkeepList.get(21))); t.setUndertimeWorkingDayOffDeduction(utilities.convertStringToDouble(tkeepList.get(22))); attendanceList.add(t); } ProcessPayrollComputation processPayroll = new ProcessPayrollComputation(getEmployeeId(), getBranchId()); processPayroll.initVariables(); processPayroll.initVariablesForComputation(attendanceList); boolean result = processPayroll.processPayrollComputation(payrollDate, payrollPeriod, attendancePeriodFrom, attendancePeriodTo, getPayrollId()); if (result) { close(); } else { getWindow().showNotification("SQL ERROR"); } } catch (Exception e) { e.getMessage(); } } }); glayout.addComponent(saveButton, 0, 0); glayout.setComponentAlignment(saveButton, Alignment.MIDDLE_LEFT); // vlayout.addComponent(saveButton); Button printButton = new Button("PRINT ATTENDANCE"); printButton.setWidth("200px"); printButton.addListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { OpenHrisReports reports = new OpenHrisReports(0, null); String fileName = "IndividualAttendanceReport_"; reports.deleteFile(fileName); Window reportWindow = new IndividualAttendanceReport(getPayrollId(), getApplication()); } }); glayout.addComponent(printButton, 1, 0); glayout.setComponentAlignment(printButton, Alignment.MIDDLE_RIGHT); vlayout.addComponent(glayout); return vlayout; } String getEmployeesName() { return name; } public List getDateList() { return dateList; } public String getEmployeeId() { return employeeId; } public String getPayrollPeriod() { return payrollPeriod; } public String getPayrollDate() { return payrollDate; } public String getAttendancePeriodFrom() { return attendancePeriodFrom; } public String getAttendancePeriodTo() { return attendancePeriodTo; } public String getEmploymentWageEntry() { return employmentWageEntry; } public double getEmploymentWage() { return employmentWage; } public int getBranchId() { return branchId; } public int getPayrollId() { return payrollId; } }