From 8bbca0dcefbbbb9d5b898b2b3c3834576fa1ba09 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Sun, 8 Oct 2017 02:07:03 +0200
Subject: [PATCH] Please cherry-pick: - renamed companyEmployee to employee as
 there was no need for - also renamed EJB name and backing beans - half-added
 event for being fired (and fully observed by general bean) when an   employee
 has been added - if an employee's displayed name is being rendered, also try
 to render an   assigned department (if any)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@mxchange.org>
---
 .../JobsBusinessDataWebRequestBean.java       |   3 +-
 .../JobsBranchOfficeWebRequestBean.java       |   3 +-
 .../JobsDepartmentWebRequestBean.java         |   3 +-
 ...obsAdminCompanyEmployeeWebRequestBean.java |  17 ++-
 ...inCompanyEmployeeWebRequestController.java |   2 +-
 .../JobsCompanyEmployeeWebRequestBean.java    | 100 +++++++++++++-----
 ...bsCompanyEmployeeWebSessionController.java |   2 +-
 .../helper/JobsWebRequestHelperBean.java      |   8 ++
 .../JobsMobileProviderWebRequestBean.java     |   3 +-
 .../JobsCompanyEmployeeConverter.java         |   2 +-
 .../JobsCompanyHeadquartersConverter.java     |   2 +-
 .../localization/bundle_de_DE.properties      |   3 +
 .../localization/bundle_en_US.properties      |   3 +
 .../admin_form_basic_company_data.tpl         |   4 +-
 .../admin_form_branch_office_data.tpl         |   2 +-
 .../department/admin_form_department_data.tpl |   2 +-
 .../employee/admin_form_employee_data.tpl     |  20 ++--
 .../admin_basic_company_data_list.xhtml       |   4 +-
 .../admin_branch_office_list.xhtml            |   2 +-
 .../department/admin_department_list.xhtml    |   8 +-
 web/admin/employee/admin_employee_list.xhtml  |   6 +-
 21 files changed, 132 insertions(+), 67 deletions(-)

diff --git a/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java
index 6d0bd39b..c443c278 100644
--- a/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java
@@ -407,8 +407,7 @@ public class JobsBusinessDataWebRequestBean extends BaseJobsBean implements Jobs
 				public int compare (final BusinessBasicData o1, final BusinessBasicData o2) {
 					return o1.getBasicDataId() > o2.getBasicDataId() ? 1 : o1.getBasicDataId() < o2.getBasicDataId() ? -1 : 0;
 				}
-			}
-			);
+			});
 		}
 	}
 
diff --git a/src/java/org/mxchange/jjobs/beans/business/branchoffice/JobsBranchOfficeWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/business/branchoffice/JobsBranchOfficeWebRequestBean.java
index 7f365473..be301316 100644
--- a/src/java/org/mxchange/jjobs/beans/business/branchoffice/JobsBranchOfficeWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/business/branchoffice/JobsBranchOfficeWebRequestBean.java
@@ -178,8 +178,7 @@ public class JobsBranchOfficeWebRequestBean extends BaseJobsBean implements Jobs
 				public int compare (final BranchOffice o1, final BranchOffice o2) {
 					return o1.getBranchId() > o2.getBranchId() ? 1 : o1.getBranchId() < o2.getBranchId() ? -1 : 0;
 				}
-			}
-			);
+			});
 		}
 	}
 
diff --git a/src/java/org/mxchange/jjobs/beans/business/department/JobsDepartmentWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/business/department/JobsDepartmentWebRequestBean.java
index 967255c0..2676e98c 100644
--- a/src/java/org/mxchange/jjobs/beans/business/department/JobsDepartmentWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/business/department/JobsDepartmentWebRequestBean.java
@@ -178,8 +178,7 @@ public class JobsDepartmentWebRequestBean extends BaseJobsBean implements JobsDe
 				public int compare (final Department o1, final Department o2) {
 					return o1.getDepartmentId() > o2.getDepartmentId() ? 1 : o1.getDepartmentId() < o2.getDepartmentId() ? -1 : 0;
 				}
-			}
-			);
+			});
 		}
 	}
 
diff --git a/src/java/org/mxchange/jjobs/beans/business/employee/JobsAdminCompanyEmployeeWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/business/employee/JobsAdminCompanyEmployeeWebRequestBean.java
index 1c396b7a..aae86ee9 100644
--- a/src/java/org/mxchange/jjobs/beans/business/employee/JobsAdminCompanyEmployeeWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/business/employee/JobsAdminCompanyEmployeeWebRequestBean.java
@@ -18,8 +18,12 @@ package org.mxchange.jjobs.beans.business.employee;
 
 import javax.ejb.EJB;
 import javax.enterprise.context.RequestScoped;
+import javax.enterprise.event.Event;
+import javax.enterprise.inject.Any;
+import javax.inject.Inject;
 import javax.inject.Named;
 import org.mxchange.jcontacts.model.contact.Contact;
+import org.mxchange.jcontactsbusiness.events.employee.added.ObservableEmployeeAddedEvent;
 import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData;
 import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice;
 import org.mxchange.jcontactsbusiness.model.department.Department;
@@ -34,15 +38,22 @@ import org.mxchange.jusercore.model.user.User;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-@Named ("adminCompanyEmployeeController")
+@Named ("adminEmployeeController")
 @RequestScoped
-public class JobsAdminCompanyEmployeeWebRequestBean extends BaseJobsBean implements JobsAdminCompanyEmployeeWebRequestController {
+public class JobsAdminEmployeeWebRequestBean extends BaseJobsBean implements JobsAdminEmployeeWebRequestController {
 
 	/**
 	 * Serial number
 	 */
 	private static final long serialVersionUID = 12_886_968_547_360L;
 
+	/**
+	 * An event being fired when an employee has been added
+	 */
+	@Inject
+	@Any
+	private Event<ObservableEmployeeAddedEvent> addedEmployeeEvent;
+
 	/**
 	 * EJB for administrative company employee purposes
 	 */
@@ -107,7 +118,7 @@ public class JobsAdminCompanyEmployeeWebRequestBean extends BaseJobsBean impleme
 	/**
 	 * Default constructor
 	 */
-	public JobsAdminCompanyEmployeeWebRequestBean () {
+	public JobsAdminEmployeeWebRequestBean () {
 		// Call super constructor
 		super();
 	}
diff --git a/src/java/org/mxchange/jjobs/beans/business/employee/JobsAdminCompanyEmployeeWebRequestController.java b/src/java/org/mxchange/jjobs/beans/business/employee/JobsAdminCompanyEmployeeWebRequestController.java
index dbbe98ea..c8f55a7b 100644
--- a/src/java/org/mxchange/jjobs/beans/business/employee/JobsAdminCompanyEmployeeWebRequestController.java
+++ b/src/java/org/mxchange/jjobs/beans/business/employee/JobsAdminCompanyEmployeeWebRequestController.java
@@ -23,6 +23,6 @@ import java.io.Serializable;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsAdminCompanyEmployeeWebRequestController extends Serializable {
+public interface JobsAdminEmployeeWebRequestController extends Serializable {
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebRequestBean.java
index 5f03b7a4..ae48e17a 100644
--- a/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebRequestBean.java
@@ -17,6 +17,8 @@
 package org.mxchange.jjobs.beans.business.employee;
 
 import fish.payara.cdi.jsr107.impl.NamedCache;
+import java.text.MessageFormat;
+import java.util.Comparator;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -24,8 +26,10 @@ import javax.annotation.PostConstruct;
 import javax.cache.Cache;
 import javax.ejb.EJB;
 import javax.enterprise.context.RequestScoped;
+import javax.enterprise.event.Observes;
 import javax.inject.Inject;
 import javax.inject.Named;
+import org.mxchange.jcontactsbusiness.events.employee.added.ObservableEmployeeAddedEvent;
 import org.mxchange.jcontactsbusiness.model.employee.CompanyEmployeeSessionBeanRemote;
 import org.mxchange.jcontactsbusiness.model.employee.Employee;
 import org.mxchange.jjobs.beans.BaseJobsBean;
@@ -35,27 +39,32 @@ import org.mxchange.jjobs.beans.BaseJobsBean;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-@Named ("companyEmployeeController")
+@Named ("employeeController")
 @RequestScoped
-public class JobsCompanyEmployeeWebRequestBean extends BaseJobsBean implements JobsCompanyEmployeeWebRequestController {
+public class JobsEmployeeWebRequestBean extends BaseJobsBean implements JobsEmployeeWebRequestController {
 
 	/**
 	 * Serial number
 	 */
 	private static final long serialVersionUID = 12_886_968_547_361L;
 
+	/**
+	 * List of all employees
+	 */
+	private final List<Employee> allEmployees;
+
 	/**
 	 * EJB for general company employee purposes
 	 */
-	@EJB (lookup = "java:global/jjobs-ejb/companyEmployee!org.mxchange.jcontactsbusiness.model.employee.CompanyEmployeeSessionBeanRemote")
-	private CompanyEmployeeSessionBeanRemote companyEmployeeBean;
+	@EJB (lookup = "java:global/jjobs-ejb/employee!org.mxchange.jcontactsbusiness.model.employee.CompanyEmployeeSessionBeanRemote")
+	private CompanyEmployeeSessionBeanRemote employeeBean;
 
 	/**
 	 * List of all company employees
 	 */
 	@Inject
 	@NamedCache (cacheName = "companyEmployeeCache")
-	private Cache<Long, Employee> companyEmployeeCache;
+	private Cache<Long, Employee> employeeCache;
 
 	/**
 	 * A list of filtered employees
@@ -65,9 +74,37 @@ public class JobsCompanyEmployeeWebRequestBean extends BaseJobsBean implements J
 	/**
 	 * Default constructor
 	 */
-	public JobsCompanyEmployeeWebRequestBean () {
+	public JobsEmployeeWebRequestBean () {
 		// Call super constructor
 		super();
+
+		// Init list
+		this.allEmployees = new LinkedList<>();
+	}
+
+	/**
+	 * Observes events being fired when an employee has been added
+	 * <p>
+	 * @param event Event being fired
+	 */
+	public void afterEmployeeAddedEvent (@Observes final ObservableEmployeeAddedEvent event) {
+		// Validate parameter
+		if (null == event) {
+			// Throw NPE
+			throw new NullPointerException("event is null"); //NOI18N
+		} else if (event.getEmployee() == null) {
+			// Throw it again
+			throw new NullPointerException("event.employee is null"); //NOI18N
+		} else if (event.getEmployee().getEmployeeId() == null) {
+			// Throw it again
+			throw new NullPointerException("event.employee.employeeId is null"); //NOI18N
+		} else if (event.getEmployee().getEmployeeId() < 1) {
+			// Throw IAE
+			throw new IllegalArgumentException(MessageFormat.format("event.employee.employeeId={0} is invalid", event.getEmployee().getEmployeeId())); //NOI18N
+		}
+
+		// Add employee to cache and list
+		this.employeeCache.put(event.getEmployee().getEmployeeId(), event.getEmployee());
 	}
 
 	/**
@@ -77,23 +114,7 @@ public class JobsCompanyEmployeeWebRequestBean extends BaseJobsBean implements J
 	 */
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<Employee> allCompanyEmployees () {
-		// Init list
-		final List<Employee> list = new LinkedList<>();
-
-		// Get iterator
-		final Iterator<Cache.Entry<Long, Employee>> iterator = this.companyEmployeeCache.iterator();
-
-		// Loop over all
-		while (iterator.hasNext()) {
-			// Get next entry
-			final Cache.Entry<Long, Employee> next = iterator.next();
-
-			// Add value to list
-			list.add(next.getValue());
-		}
-
-		// Return it
-		return list;
+		return this.allEmployees;
 	}
 
 	/**
@@ -102,7 +123,7 @@ public class JobsCompanyEmployeeWebRequestBean extends BaseJobsBean implements J
 	 * @return Filtered list of employees
 	 */
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
-	public List<Employee> getFilteredEmployees () {
+	public List<Employee> getFilteredEmployees () { //NOI18N
 		return this.filteredEmployees;
 	}
 
@@ -112,7 +133,7 @@ public class JobsCompanyEmployeeWebRequestBean extends BaseJobsBean implements J
 	 * @param filteredEmployees Filtered list of employees
 	 */
 	@SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
-	public void setFilteredEmployees (final List<Employee> filteredEmployees) {
+	public void setFilteredEmployees (final List<Employee> filteredEmployees) { //NOI18N
 		this.filteredEmployees = filteredEmployees;
 	}
 
@@ -122,9 +143,9 @@ public class JobsCompanyEmployeeWebRequestBean extends BaseJobsBean implements J
 	@PostConstruct
 	public void init () {
 		// Is cache there?
-		if (!this.companyEmployeeCache.iterator().hasNext()) {
+		if (!this.employeeCache.iterator().hasNext()) {
 			// Get whole list
-			final List<Employee> list = this.companyEmployeeBean.allCompanyEmployees();
+			final List<Employee> list = this.employeeBean.allCompanyEmployees();
 
 			// Add all
 			for (final Iterator<Employee> iterator = list.iterator(); iterator.hasNext();) {
@@ -132,9 +153,32 @@ public class JobsCompanyEmployeeWebRequestBean extends BaseJobsBean implements J
 				final Employee next = iterator.next();
 
 				// Add it to cache
-				this.companyEmployeeCache.put(next.getEmployeeId(), next);
+				this.employeeCache.put(next.getEmployeeId(), next);
 			}
 		}
+
+		// Is cache filled and list is empty
+		if ((this.employeeCache.iterator().hasNext()) && (this.allEmployees.isEmpty())) {
+			// Get iterator
+			final Iterator<Cache.Entry<Long, Employee>> iterator = this.employeeCache.iterator();
+
+			// Build up list
+			while (iterator.hasNext()) {
+				// GEt next element
+				final Cache.Entry<Long, Employee> next = iterator.next();
+
+				// Add to list
+				this.allEmployees.add(next.getValue());
+			}
+
+			// Sort list
+			this.allEmployees.sort(new Comparator<Employee>() {
+				@Override
+				public int compare (final Employee o1, final Employee o2) {
+					return o1.getEmployeeId() > o2.getEmployeeId() ? 1 : o1.getEmployeeId() < o2.getEmployeeId() ? -1 : 0;
+				}
+			});
+		}
 	}
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebSessionController.java b/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebSessionController.java
index 2a9d39b5..02ceaa8a 100644
--- a/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebSessionController.java
+++ b/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebSessionController.java
@@ -23,6 +23,6 @@ import java.io.Serializable;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsCompanyEmployeeWebSessionController extends Serializable {
+public interface JobsEmployeeWebRequestController extends Serializable {
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java b/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java
index 876608a0..b334ecda 100644
--- a/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java
+++ b/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java
@@ -537,6 +537,14 @@ public class JobsWebRequestHelperBean extends BaseJobsBean implements JobsWebReq
 			// Then create name
 			sb.append(employee.getEmployeeNumber());
 
+			// Is a department found?
+			if (employee.getEmployeeDepartment() instanceof Department) {
+				// Then add it's name to it
+				sb.append(" ("); //NOI18N
+				sb.append(this.renderDepartment(employee.getEmployeeDepartment()));
+				sb.append(")"); //NOI18N
+			}
+
 			// Is contact data found?
 			if (employee.getEmployeePersonalData() instanceof Contact) {
 				// Yes, then render it
diff --git a/src/java/org/mxchange/jjobs/beans/mobileprovider/JobsMobileProviderWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/mobileprovider/JobsMobileProviderWebRequestBean.java
index 76ce49c9..8c796220 100644
--- a/src/java/org/mxchange/jjobs/beans/mobileprovider/JobsMobileProviderWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/mobileprovider/JobsMobileProviderWebRequestBean.java
@@ -176,8 +176,7 @@ public class JobsMobileProviderWebRequestBean extends BaseJobsBean implements Jo
 				public int compare (final MobileProvider o1, final MobileProvider o2) {
 					return o1.getProviderId() > o2.getProviderId() ? 1 : o1.getProviderId() < o2.getProviderId() ? -1 : 0;
 				}
-			}
-			);
+			});
 		}
 	}
 }
diff --git a/src/java/org/mxchange/jjobs/converter/business/company_employee/JobsCompanyEmployeeConverter.java b/src/java/org/mxchange/jjobs/converter/business/company_employee/JobsCompanyEmployeeConverter.java
index fc87f3d8..10f02451 100644
--- a/src/java/org/mxchange/jjobs/converter/business/company_employee/JobsCompanyEmployeeConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/business/company_employee/JobsCompanyEmployeeConverter.java
@@ -52,7 +52,7 @@ public class JobsCompanyEmployeeConverter implements Converter<Employee> {
 				final Context initial = new InitialContext();
 
 				// Lookup EJB
-				EMPLOYEE_BEAN = (CompanyEmployeeSessionBeanRemote) initial.lookup("java:global/jjobs-ejb/companyEmployee!org.mxchange.jcontactsbusiness.model.employee.CompanyEmployeeSessionBeanRemote"); //NOI18N
+				EMPLOYEE_BEAN = (CompanyEmployeeSessionBeanRemote) initial.lookup("java:global/jjobs-ejb/employee!org.mxchange.jcontactsbusiness.model.employee.CompanyEmployeeSessionBeanRemote"); //NOI18N
 			} catch (final NamingException ex) {
 				// Throw it again
 				throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Cannot lookup EJB", ex.getMessage()), ex); //NOI18N
diff --git a/src/java/org/mxchange/jjobs/converter/business/headquarters/JobsCompanyHeadquartersConverter.java b/src/java/org/mxchange/jjobs/converter/business/headquarters/JobsCompanyHeadquartersConverter.java
index aaf6755c..cd521dc5 100644
--- a/src/java/org/mxchange/jjobs/converter/business/headquarters/JobsCompanyHeadquartersConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/business/headquarters/JobsCompanyHeadquartersConverter.java
@@ -52,7 +52,7 @@ public class JobsCompanyHeadquartersConverter implements Converter<HeadquartersD
 				final Context initial = new InitialContext();
 
 				// Lookup EJB
-				COMPANY_HEADQUARTERS_BEAN = (CompanyHeadquartersSessionBeanRemote) initial.lookup("java:global/jjobs-ejb/companyEmployee!org.mxchange.jcontactsbusiness.model.headquarters.CompanyHeadquartersSessionBeanRemote"); //NOI18N
+				COMPANY_HEADQUARTERS_BEAN = (CompanyHeadquartersSessionBeanRemote) initial.lookup("java:global/jjobs-ejb/headquarters!org.mxchange.jcontactsbusiness.model.headquarters.CompanyHeadquartersSessionBeanRemote"); //NOI18N
 			} catch (final NamingException ex) {
 				// Throw it again
 				throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Cannot lookup EJB", ex.getMessage()), ex); //NOI18N
diff --git a/src/java/org/mxchange/localization/bundle_de_DE.properties b/src/java/org/mxchange/localization/bundle_de_DE.properties
index 08309878..7bfc18c2 100644
--- a/src/java/org/mxchange/localization/bundle_de_DE.properties
+++ b/src/java/org/mxchange/localization/bundle_de_DE.properties
@@ -1077,3 +1077,6 @@ ADMIN_ADD_OPENING_TIME_TITLE=Oeffnungszeit hinzufuegen:
 #@TODO Please fix German umlauts!
 ADMIN_ADD_OPENING_TIME_MINIMUM_DATA=Bitte geben Sie zum Hinzufuegen einer Oeffnungszeit alle Angaben an. Diese sollten nicht konfliktieren.
 BUTTON_ADMIN_ADD_OPENING_TIME=Oeffnungszeit hinzufuegen
+ADMIN_LINK_ASSIGN_DEPARTMENT_BRANCH_OFFICE_TITLE=Dieser Abteilung eine Filiale zuweisen.
+ADMIN_LINK_ASSIGN_DEPARTMENTS_LEAD_EMPLOYEE_TITLE=Dieser Abteilung einen leitenden Mitarbeiter zuweisen.
+ADMIN_LINK_ASSIGN_DEPARTMENTS_OWNER_USER_TITLE=Dieser Abteilung einen besitzenden Benutzer zuweisen.
diff --git a/src/java/org/mxchange/localization/bundle_en_US.properties b/src/java/org/mxchange/localization/bundle_en_US.properties
index 38bb28a2..72026622 100644
--- a/src/java/org/mxchange/localization/bundle_en_US.properties
+++ b/src/java/org/mxchange/localization/bundle_en_US.properties
@@ -1004,3 +1004,6 @@ ADMIN_ADD_OPENING_TIME_TITLE=Add new opening time:
 #BItte geben Sie zum Hinzufuegen einer Oeffnungszeit alle Angaben an. Diese sollten nicht konfliktieren.
 ADMIN_ADD_OPENING_TIME_MINIMUM_DATA=To add new opening time, you have to provide all data. They should not conflict.
 BUTTON_ADMIN_ADD_OPENING_TIME=Add opening time
+ADMIN_LINK_ASSIGN_DEPARTMENT_BRANCH_OFFICE_TITLE=Assign this department a branch office.
+ADMIN_LINK_ASSIGN_DEPARTMENTS_LEAD_EMPLOYEE_TITLE=Assign this department a leading employee.
+ADMIN_LINK_ASSIGN_DEPARTMENTS_OWNER_USER_TITLE=Assign this department an owning user.
diff --git a/web/WEB-INF/templates/admin/basic_company_data/admin_form_basic_company_data.tpl b/web/WEB-INF/templates/admin/basic_company_data/admin_form_basic_company_data.tpl
index 2d677b60..9ec478ea 100644
--- a/web/WEB-INF/templates/admin/basic_company_data/admin_form_basic_company_data.tpl
+++ b/web/WEB-INF/templates/admin/basic_company_data/admin_form_basic_company_data.tpl
@@ -58,7 +58,7 @@
 					>
 					<f:converter converterId="CompanyEmployeeConverter" />
 					<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-					<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="companyHeadQuarters" itemValue="#{companyEmployee}" itemLabel="#{companyEmployee.foo}" />
+					<f:selectItems value="#{employeeController.allCompanyEmployees()}" var="companyHeadQuarters" itemValue="#{companyEmployee}" itemLabel="#{companyEmployee.foo}" />
 				</p:selectOneMenu>
 
 				<p:outputLabel for="companyFounder" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_FOUNDER}" />
@@ -70,7 +70,7 @@
 					>
 					<f:converter converterId="CompanyEmployeeConverter" />
 					<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-					<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="companyHeadQuarters" itemValue="#{companyEmployee}" itemLabel="#{companyEmployee.foo}" />
+					<f:selectItems value="#{employeeController.allCompanyEmployees()}" var="companyHeadQuarters" itemValue="#{companyEmployee}" itemLabel="#{companyEmployee.foo}" />
 				</p:selectOneMenu>
 
 				<p:outputLabel for="companyHeadQuarters" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_HEADQUARTERS}" />
diff --git a/web/WEB-INF/templates/admin/branch_office/admin_form_branch_office_data.tpl b/web/WEB-INF/templates/admin/branch_office/admin_form_branch_office_data.tpl
index 778e60a7..7e2c72b7 100644
--- a/web/WEB-INF/templates/admin/branch_office/admin_form_branch_office_data.tpl
+++ b/web/WEB-INF/templates/admin/branch_office/admin_form_branch_office_data.tpl
@@ -35,7 +35,7 @@
 				>
 				<f:converter converterId="CompanyEmployeeConverter" />
 				<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-				<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="companyHeadQuarters" itemValue="#{companyEmployee}" itemLabel="#{companyEmployee.foo}" />
+				<f:selectItems value="#{employeeController.allCompanyEmployees()}" var="companyHeadQuarters" itemValue="#{companyEmployee}" itemLabel="#{companyEmployee.foo}" />
 			</p:selectOneMenu>
 
 			<p:outputLabel for="branchUserOwner" value="#{msg.ADMIN_ASSIGN_BRANCH_OFFICE_USER_OWNER}" />
diff --git a/web/WEB-INF/templates/admin/department/admin_form_department_data.tpl b/web/WEB-INF/templates/admin/department/admin_form_department_data.tpl
index fb18bf89..838c2a91 100644
--- a/web/WEB-INF/templates/admin/department/admin_form_department_data.tpl
+++ b/web/WEB-INF/templates/admin/department/admin_form_department_data.tpl
@@ -62,7 +62,7 @@
 				>
 				<f:converter converterId="CompanyEmployeeConverter" />
 				<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-				<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
+				<f:selectItems value="#{employeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
 			</p:selectOneMenu>
 
 			<p:outputLabel for="departmentUserOwner" value="#{msg.ADMIN_ASSIGN_DEPARTMENT_USER_OWNER}" />
diff --git a/web/WEB-INF/templates/admin/employee/admin_form_employee_data.tpl b/web/WEB-INF/templates/admin/employee/admin_form_employee_data.tpl
index 2ebc4023..8a2bf917 100644
--- a/web/WEB-INF/templates/admin/employee/admin_form_employee_data.tpl
+++ b/web/WEB-INF/templates/admin/employee/admin_form_employee_data.tpl
@@ -15,7 +15,7 @@
 			<p:outputLabel for="employeeCompany" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_COMPANY}" />
 			<p:selectOneMenu
 				id="employeeCompany"
-				value="#{adminCompanyEmployeeController.employeeCompany}"
+				value="#{adminEmployeeController.employeeCompany}"
 				filter="true"
 				filterMatchMode="contains"
 				required="true"
@@ -29,7 +29,7 @@
 			<p:outputLabel for="employeeBranchOffice" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_BRANCH_OFFICE}" />
 			<p:selectOneMenu
 				id="employeeBranchOffice"
-				value="#{adminCompanyEmployeeController.employeeBranchOffice}"
+				value="#{adminEmployeeController.employeeBranchOffice}"
 				filter="true"
 				filterMatchMode="contains"
 				>
@@ -41,7 +41,7 @@
 			<p:outputLabel for="employeePersonalContact" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_PERSONAL_DATA}" />
 			<p:selectOneMenu
 				id="employeePersonalContact"
-				value="#{adminCompanyEmployeeController.employeePersonalContact}"
+				value="#{adminEmployeeController.employeePersonalContact}"
 				filter="true"
 				filterMatchMode="contains"
 				>
@@ -53,7 +53,7 @@
 			<p:outputLabel for="employeeUserOwner" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_USER_OWNER}" />
 			<p:selectOneMenu
 				id="employeeUserOwner"
-				value="#{adminCompanyEmployeeController.employeeUserOwner}"
+				value="#{adminEmployeeController.employeeUserOwner}"
 				filter="true"
 				filterMatchMode="contains"
 				>
@@ -63,13 +63,13 @@
 			</p:selectOneMenu>
 
 			<p:outputLabel for="employeeEmailAddress" value="#{msg.ADMIN_ENTER_EMPLOYEE_EMAIL_ADDRESS}" />
-			<p:inputText styleClass="input" id="employeeEmailAddress" size="20" maxlength="255" value="#{adminCompanyEmployeeController.employeeEmailAddress}" validatorMessage="#{msg.ENTERED_EMAIL_ADDRESS_IS_INVALID}">
+			<p:inputText styleClass="input" id="employeeEmailAddress" size="20" maxlength="255" value="#{adminEmployeeController.employeeEmailAddress}" validatorMessage="#{msg.ENTERED_EMAIL_ADDRESS_IS_INVALID}">
 				<f:validator validatorId="EmailAddressValidator" />
 				<f:attribute name="allowEmptyValue" value="true" />
 			</p:inputText>
 
 			<p:outputLabel for="employeeStaffNumber" value="#{msg.ADMIN_ENTER_EMPLOYEE_STAFF_NUMBER}" />
-			<p:inputText styleClass="input" id="employeeStaffNumber" size="2" maxlength="10" value="#{adminCompanyEmployeeController.employeeStaffNumber}" />
+			<p:inputText styleClass="input" id="employeeStaffNumber" size="2" maxlength="10" value="#{adminEmployeeController.employeeStaffNumber}" />
 		</p:panelGrid>
 	</p:fieldset>
 
@@ -79,12 +79,12 @@
 	<p:fieldset legend="#{msg.ADMIN_EMPLOYEE_OTHER_LEGEND}">
 		<p:panelGrid layout="grid" columns="2" columnClasses="ui-grid-col-4, ui-grid-col-8" styleClass="table table-full">
 			<p:outputLabel for="employeePhoneExtension" value="#{msg.ADMIN_ENTER_PHONE_EXTENSION}" />
-			<p:inputText styleClass="input" id="employeePhoneExtension" size="2" maxlength="10" value="#{adminCompanyEmployeeController.employeePhoneExtension}" />
+			<p:inputText styleClass="input" id="employeePhoneExtension" size="2" maxlength="10" value="#{adminEmployeeController.employeePhoneExtension}" />
 
 			<p:outputLabel for="employeeDepartment" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_DEPARTMENT}" />
 			<p:selectOneMenu
 				id="employeeDepartment"
-				value="#{adminCompanyEmployeeController.employeeDepartment}"
+				value="#{adminEmployeeController.employeeDepartment}"
 				filter="true"
 				filterMatchMode="contains"
 				>
@@ -96,7 +96,7 @@
 			<p:outputLabel for="employeeHeadquarters" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_HEADQUARTERS}" />
 			<p:selectOneMenu
 				id="employeeHeadquarters"
-				value="#{adminCompanyEmployeeController.employeeHeadquarters}"
+				value="#{adminEmployeeController.employeeHeadquarters}"
 				filter="true"
 				filterMatchMode="contains"
 				>
@@ -106,7 +106,7 @@
 			</p:selectOneMenu>
 
 			<p:outputLabel for="mobileNumber" value="#{msg.ADMIN_ENTER_EMPLOYEE_MOBILE_NUMBER}" />
-			<widgets:inputMobileNumberPanelGrid targetController="#{adminCompanyEmployeeController}" />
+			<widgets:inputMobileNumberPanelGrid targetController="#{adminEmployeeController}" />
 		</p:panelGrid>
 	</p:fieldset>
 </ui:composition>
diff --git a/web/admin/basic_company_data/admin_basic_company_data_list.xhtml b/web/admin/basic_company_data/admin_basic_company_data_list.xhtml
index e3059b2c..0fb9c237 100644
--- a/web/admin/basic_company_data/admin_basic_company_data_list.xhtml
+++ b/web/admin/basic_company_data/admin_basic_company_data_list.xhtml
@@ -98,7 +98,7 @@
 							>
 							<f:converter converterId="CompanyEmployeeConverter" />
 							<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-							<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
+							<f:selectItems value="#{employeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
 						</p:selectCheckboxMenu>
 					</f:facet>
 
@@ -123,7 +123,7 @@
 							>
 							<f:converter converterId="CompanyEmployeeConverter" />
 							<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-							<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
+							<f:selectItems value="#{employeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
 						</p:selectCheckboxMenu>
 					</f:facet>
 
diff --git a/web/admin/branch_office/admin_branch_office_list.xhtml b/web/admin/branch_office/admin_branch_office_list.xhtml
index 1b0fca22..26bd0c68 100644
--- a/web/admin/branch_office/admin_branch_office_list.xhtml
+++ b/web/admin/branch_office/admin_branch_office_list.xhtml
@@ -122,7 +122,7 @@
 							>
 							<f:converter converterId="CompanyEmployeeConverter" />
 							<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-							<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
+							<f:selectItems value="#{employeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
 						</p:selectCheckboxMenu>
 					</f:facet>
 
diff --git a/web/admin/department/admin_department_list.xhtml b/web/admin/department/admin_department_list.xhtml
index dfe8a967..d131c45b 100644
--- a/web/admin/department/admin_department_list.xhtml
+++ b/web/admin/department/admin_department_list.xhtml
@@ -57,7 +57,7 @@
 					<h:outputText value="#{department.departmentName}" />
 				</p:column>
 
-				<p:column headerText="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_NAME}" sortBy="#{department.departmentCompany.companyName}" filterBy="#{department.departmentCompany}" filterMatchMode="in">
+				<p:column headerText="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_NAME}" sortBy="#{department.departmentCompany}" filterBy="#{department.departmentCompany}" filterMatchMode="in">
 					<f:facet name="filter">
 						<p:selectCheckboxMenu
 							filter="true"
@@ -85,7 +85,7 @@
 							filter="true"
 							filterMatchMode="contains"
 							label="#{msg.LABEL_BRANCH_OFFICES}"
-							onchange="PF('employeeList').filter()"
+							onchange="PF('departmentList').filter()"
 							updateLabel="true"
 							title="#{msg.FILTER_BY_MULTIPLE_EMPLOYEES_TITLE}"
 							>
@@ -99,7 +99,7 @@
 						<f:param name="branchId" value="#{department.departmentBranchOffice.branchId}" />
 					</p:link>
 
-					<p:link outcome="admin_assign_department_branch_office" title="#{msg.ADMIN_LINK_ASSIGN_BRANCH_OFFICE_TITLE}" value="#{msg.ADMIN_LINK_ASSIGN}" rendered="#{empty department.departmentBranchOffice}">
+					<p:link outcome="admin_assign_department_branch_office" title="#{msg.ADMIN_LINK_ASSIGN_DEPARTMENT_BRANCH_OFFICE_TITLE}" value="#{msg.ADMIN_LINK_ASSIGN}" rendered="#{empty department.departmentBranchOffice}">
 						<f:param name="departmentId" value="#{department.departmentId}" />
 					</p:link>
 				</p:column>
@@ -116,7 +116,7 @@
 							>
 							<f:converter converterId="CompanyEmployeeConverter" />
 							<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-							<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
+							<f:selectItems value="#{employeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
 						</p:selectCheckboxMenu>
 					</f:facet>
 
diff --git a/web/admin/employee/admin_employee_list.xhtml b/web/admin/employee/admin_employee_list.xhtml
index bd6be330..3ac1c784 100644
--- a/web/admin/employee/admin_employee_list.xhtml
+++ b/web/admin/employee/admin_employee_list.xhtml
@@ -21,11 +21,11 @@
 			<p:dataTable
 				id="table-list-company-employees"
 				var="employee"
-				value="#{companyEmployeeController.allCompanyEmployees()}"
+				value="#{employeeController.allCompanyEmployees()}"
 				tableStyleClass="table table-full"
 				paginator="true"
 				paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
-				filteredValue="#{companyEmployeeController.filteredEmployees}"
+				filteredValue="#{employeeController.filteredEmployees}"
 				rows="10"
 				reflow="true"
 				resizableColumns="true"
@@ -166,7 +166,7 @@
 							styleClass="submit"
 							type="submit"
 							value="#{msg.BUTTON_ADMIN_ADD_EMPLOYEE}"
-							action="#{adminCompanyEmployeeController.addCompanyEmployee()}"
+							action="#{adminEmployeeController.addCompanyEmployee()}"
 							update=":master:form-list-company-employees:table-list-company-employees"
 							/>
 					</p:panelGrid>
-- 
2.39.5