2 * Copyright (C) 2016, 2017 Roland Häder
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package org.mxchange.jcontactsbusiness.model.employee;
19 import java.util.Calendar;
20 import java.util.Objects;
21 import javax.persistence.Basic;
22 import javax.persistence.CascadeType;
23 import javax.persistence.Column;
24 import javax.persistence.Entity;
25 import javax.persistence.GeneratedValue;
26 import javax.persistence.GenerationType;
27 import javax.persistence.Id;
28 import javax.persistence.JoinColumn;
29 import javax.persistence.NamedQueries;
30 import javax.persistence.NamedQuery;
31 import javax.persistence.OneToOne;
32 import javax.persistence.Table;
33 import javax.persistence.Temporal;
34 import javax.persistence.TemporalType;
35 import javax.persistence.Transient;
36 import org.mxchange.jcontacts.contact.Contact;
37 import org.mxchange.jcontacts.contact.UserContact;
38 import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData;
39 import org.mxchange.jcontactsbusiness.model.basicdata.CompanyBasicData;
40 import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice;
41 import org.mxchange.jcontactsbusiness.model.branchoffice.CompanyBranchOffice;
42 import org.mxchange.jcontactsbusiness.model.department.CompanyDepartment;
43 import org.mxchange.jcontactsbusiness.model.department.Department;
44 import org.mxchange.jcontactsbusiness.model.headquarters.CompanyHeadquartersData;
45 import org.mxchange.jcontactsbusiness.model.headquarters.HeadquartersData;
46 import org.mxchange.jcontactsbusiness.model.jobposition.EmployeePosition;
47 import org.mxchange.jcontactsbusiness.model.jobposition.JobPosition;
48 import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
49 import org.mxchange.jphone.phonenumbers.mobile.MobileNumber;
50 import org.mxchange.jusercore.model.user.LoginUser;
51 import org.mxchange.jusercore.model.user.User;
54 * A POJO for company employees (including CEO)
56 * @author Roland Häder<roland@mxchange.org>
58 @Entity (name = "company_employees")
59 @Table (name = "company_employees")
62 @NamedQuery (name = "AllCompanyEmployees", query = "SELECT e FROM company_employees AS e ORDER BY e.employeeId ASC"),
63 @NamedQuery (name = "SearchCompanyEmployeeById", query = "SELECT e FROM company_employees AS e WHERE e.employeeId = :employeeId")
66 @SuppressWarnings ("PersistenceUnitPresent")
67 public class CompanyEmployee implements Employee {
73 private static final long serialVersionUID = 48_959_819_859_812_076L;
76 * Branch office (if the employee works there)
78 @JoinColumn (name = "employee_branch_id")
79 @OneToOne (targetEntity = CompanyBranchOffice.class, cascade = CascadeType.ALL)
80 private BranchOffice employeeBranchOffice;
83 * Company the employee is working at
85 @JoinColumn (name = "employee_company_id", nullable = false, updatable = false)
86 @OneToOne (targetEntity = CompanyBasicData.class, cascade = CascadeType.ALL, optional = false)
87 private BusinessBasicData employeeCompany;
90 * Timestamp when this entry has been created
92 @Basic (optional = false)
93 @Temporal (TemporalType.TIMESTAMP)
94 @Column (name = "employee_entry_created", nullable = false, updatable = false)
95 private Calendar employeeCreated;
98 * Department the employee works at
100 @JoinColumn (name = "employee_department_id")
101 @OneToOne (targetEntity = CompanyDepartment.class, cascade = CascadeType.ALL)
102 private Department employeeDepartment;
105 * Employee's email address
107 @Column (name = "employee_email_address", length = 30)
108 private String employeeEmailAddress;
111 * Head quarters id number (if the employee works there)
113 @JoinColumn (name = "employee_headquarters_id")
114 @OneToOne (targetEntity = CompanyHeadquartersData.class, cascade = CascadeType.ALL)
115 private HeadquartersData employeeHeadquarter;
121 @Column (name = "employee_id", nullable = false, updatable = false)
122 @GeneratedValue (strategy = GenerationType.IDENTITY)
123 private Long employeeId;
126 * Employee's business mobile number
128 @JoinColumn (name = "employee_mobile_number_id")
129 @OneToOne (targetEntity = MobileNumber.class, cascade = CascadeType.ALL)
130 private DialableMobileNumber employeeMobileNumber;
133 * Employee's staff number
135 @Column (name = "employee_staff_number", length = 20)
136 private String employeeNumber;
139 * Employee's personal data
141 @JoinColumn (name = "employee_personal_data_id", nullable = false, updatable = false)
142 @OneToOne (targetEntity = UserContact.class, cascade = CascadeType.ALL, optional = false)
143 private Contact employeePersonalData;
146 * Employee's phone extension (or number if different)
148 @Column (name = "employee_phone_extension", length = 10)
149 private Integer employeePhoneExtension;
152 * Employee's position (example: CEO)
154 @JoinColumn (name = "employee_position_id")
155 @OneToOne (targetEntity = EmployeePosition.class, cascade = CascadeType.REFRESH)
156 private JobPosition employeePosition;
159 * User owner instance
161 @JoinColumn (name = "employee_user_id", nullable = false, updatable = false)
162 @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH, optional = false)
163 private User employeeUserOwner;
166 public boolean equals (final Object object) {
167 if (null == object) {
169 } else if (this.getClass() != object.getClass()) {
173 final Employee other = (Employee) object;
175 if (!Objects.equals(this.getEmployeeId(), other.getEmployeeId())) {
177 } else if (!Objects.equals(this.getEmployeeCompany(), other.getEmployeeCompany())) {
179 } else if (!Objects.equals(this.getEmployeeNumber(), other.getEmployeeNumber())) {
181 } else if (!Objects.equals(this.getEmployeePersonalData(), other.getEmployeePersonalData())) {
189 public BranchOffice getEmployeeBranchOffice () {
190 return this.employeeBranchOffice;
194 public void setEmployeeBranchOffice (final BranchOffice employeeBranchOffice) {
195 this.employeeBranchOffice = employeeBranchOffice;
199 public BusinessBasicData getEmployeeCompany () {
200 return this.employeeCompany;
204 public void setEmployeeCompany (final BusinessBasicData employeeCompany) {
205 this.employeeCompany = employeeCompany;
209 @SuppressWarnings ("ReturnOfDateField")
210 public Calendar getEmployeeCreated () {
211 return this.employeeCreated;
215 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
216 public void setEmployeeCreated (final Calendar employeeCreated) {
217 this.employeeCreated = employeeCreated;
221 public Department getEmployeeDepartment () {
222 return this.employeeDepartment;
226 public void setEmployeeDepartment (final Department employeeDepartment) {
227 this.employeeDepartment = employeeDepartment;
231 public String getEmployeeEmailAddress () {
232 return this.employeeEmailAddress;
236 public void setEmployeeEmailAddress (final String employeeEmailAddress) {
237 this.employeeEmailAddress = employeeEmailAddress;
241 public HeadquartersData getEmployeeHeadquarter () {
242 return this.employeeHeadquarter;
246 public void setEmployeeHeadquarter (final HeadquartersData employeeHeadquarter) {
247 this.employeeHeadquarter = employeeHeadquarter;
251 public Long getEmployeeId () {
252 return this.employeeId;
256 public void setEmployeeId (final Long employeeId) {
257 this.employeeId = employeeId;
261 public DialableMobileNumber getEmployeeMobileNumber () {
262 return this.employeeMobileNumber;
266 public void setEmployeeMobileNumber (final DialableMobileNumber employeeMobileNumber) {
267 this.employeeMobileNumber = employeeMobileNumber;
271 public String getEmployeeNumber () {
272 return this.employeeNumber;
276 public void setEmployeeNumber (final String employeeNumber) {
277 this.employeeNumber = employeeNumber;
281 public Contact getEmployeePersonalData () {
282 return this.employeePersonalData;
286 public void setEmployeePersonalData (final Contact employeePersonalData) {
287 this.employeePersonalData = employeePersonalData;
291 public Integer getEmployeePhoneExtension () {
292 return this.employeePhoneExtension;
296 public void setEmployeePhoneExtension (final Integer employeePhoneExtension) {
297 this.employeePhoneExtension = employeePhoneExtension;
301 public JobPosition getEmployeePosition () {
302 return this.employeePosition;
306 public void setEmployeePosition (final JobPosition employeePosition) {
307 this.employeePosition = employeePosition;
311 public User getEmployeeUserOwner () {
312 return this.employeeUserOwner;
316 public void setEmployeeUserOwner (final User employeeUserOwner) {
317 this.employeeUserOwner = employeeUserOwner;
321 public int hashCode () {
324 hash = 97 * hash + Objects.hashCode(this.getEmployeeId());
325 hash = 97 * hash + Objects.hashCode(this.getEmployeeCompany());
326 hash = 97 * hash + Objects.hashCode(this.getEmployeeNumber());
327 hash = 97 * hash + Objects.hashCode(this.getEmployeePersonalData());