/*
 * 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.employee;

import com.hrms.classes.GlobalVariables;
import com.hrms.utilities.ConvertionUtilities;
import com.openhris.commons.DropDownComponent;
import com.openhris.commons.UploadImage;
import com.openhris.model.Employee;
import com.openhris.model.PersonalInformation;
import com.openhris.model.PostEmploymentInformationBean;
import com.openhris.service.EmployeeCurrentStatusService;
import com.openhris.service.PersonalInformationService;
import com.openhris.serviceprovider.EmployeeCurrentStatusServiceImpl;
import com.openhris.serviceprovider.EmployeeServiceImpl;
import com.openhris.serviceprovider.PersonalInformationServiceImpl;
import com.openhris.service.EmployeeService;
import com.vaadin.Application;
import com.vaadin.terminal.Sizeable;
import com.vaadin.terminal.StreamResource;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.AbstractLayout;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Panel;
import com.vaadin.ui.PopupDateField;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.Reindeer;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

/**
 *
 * @author jet
 */
public class EmployeePersonalInformation extends VerticalLayout{
    
    GridLayout glayout;	
    private String employeeId = null;
    private Application application;
    
    DropDownComponent dropDownComponent = new DropDownComponent();
    PersonalInformation personalInformation;
    PersonalInformationService piService = new PersonalInformationServiceImpl();
    ConvertionUtilities convertionUtilities = new ConvertionUtilities();
    EmployeeCurrentStatusService employeeCurrentStatusService = new EmployeeCurrentStatusServiceImpl();    
    EmployeeService employeeService = new EmployeeServiceImpl();
	
    Embedded avatar;
    TextField fnField;
    TextField mnField;
    TextField lnField;
    TextField companyIdField;
    PopupDateField dobField;
    TextField pobField;
    ComboBox genderBox;
    ComboBox civilStatusBox;
    TextField citizenshipField;
    TextField heightField;
    TextField weightField;
    TextField religionField;
    TextField spouseNameField;
    TextField spouseOccupationField;
    TextField spouseOfficeAddressField;
    TextField fathersNameField;
    TextField fathersOccupationField;
    TextField mothersNameField;
    TextField mothersOccupationField;
    TextField parentsAddressField;
    TextField dialectSpeakWriteField;
    TextField contactPersonNameField;
    TextField contactPersonAddressField;
    TextField contactPersonNoField;
    TextField skillsField;
    TextField hobbyField;
    
    public EmployeePersonalInformation(){}	
    
    public EmployeePersonalInformation(String employeeId, Application application){
        this.employeeId = employeeId;	
        this.application = application;
	
	init();
	addComponent(layout());
	setComponentAlignment(glayout, Alignment.TOP_CENTER);
    }
    
    public void init(){
	setSpacing(true);
	setMargin(true);
	setSizeFull();
	setImmediate(true);	
    }
    
    public ComponentContainer layout(){
	glayout = new GridLayout(4, 19);
        glayout.setSpacing(true);          
        glayout.setWidth("600px");
	glayout.setHeight("100%");
	
        final Panel imagePanel = new Panel();
        imagePanel.setStyleName("light");
        AbstractLayout panelLayout = (AbstractLayout) imagePanel.getContent();
        panelLayout.setMargin(false);
	imagePanel.setWidth("100px");
        
        avatar = new Embedded(null, new ThemeResource("../myTheme/img/fnc.jpg"));
        avatar.setImmediate(true);
	avatar.setWidth(90, Sizeable.UNITS_PIXELS);
	avatar.setHeight(90, Sizeable.UNITS_PIXELS);
        avatar.addStyleName("logo-img");
        imagePanel.addComponent(avatar);        
        glayout.addComponent(avatar, 0, 0, 0, 1);
        glayout.setComponentAlignment(imagePanel, Alignment.MIDDLE_CENTER);
                        
	Button uploadPhotoBtn = new Button("Upload..");
	uploadPhotoBtn.setWidth("100%");
	uploadPhotoBtn.setStyleName(Reindeer.BUTTON_SMALL);
        uploadPhotoBtn.addListener(new Button.ClickListener() {

            @Override
            public void buttonClick(Button.ClickEvent event) {
                if(getEmployeeId() == null){
                    getWindow().showNotification("You did not select and Employee!", Window.Notification.TYPE_WARNING_MESSAGE);
                    return;
                }
                
                Window uploadImage = new UploadImage(imagePanel, avatar, getEmployeeId());
                uploadImage.setWidth("450px");
                if(uploadImage.getParent() == null){
                    getWindow().addWindow(uploadImage);
                }
                uploadImage.setModal(true);
                uploadImage.center();
            }
        });
	glayout.addComponent(uploadPhotoBtn, 0, 2);
	glayout.setComponentAlignment(uploadPhotoBtn, Alignment.MIDDLE_CENTER);
	
        fnField = createTextField("Firstname: ");
        glayout.addComponent(fnField, 1, 0);
        glayout.setComponentAlignment(fnField, Alignment.MIDDLE_LEFT);
                        
        mnField = createTextField("Middlename: ");
        glayout.addComponent(mnField, 2, 0);
        glayout.setComponentAlignment(mnField, Alignment.MIDDLE_LEFT);
        
        lnField = createTextField("Lastname: ");
        glayout.addComponent(lnField, 3, 0);
        glayout.setComponentAlignment(lnField, Alignment.MIDDLE_LEFT);
                        
        companyIdField = createTextField("Employee ID: ");
	companyIdField.setEnabled(false);
        glayout.addComponent(companyIdField, 1, 1, 2, 1);
        glayout.setComponentAlignment(companyIdField, Alignment.MIDDLE_LEFT);
                
        dobField = new PopupDateField("Date of Birth: ");
        dobField.addStyleName("mydate");          
        dobField.setDateFormat("MM/dd/yyyy");
        dobField.setWidth("100%");
        dobField.setResolution(DateField.RESOLUTION_DAY);
        glayout.addComponent(dobField, 1, 2);
        glayout.setComponentAlignment(dobField, Alignment.MIDDLE_LEFT);
                
        pobField = createTextField("Birth Place: ");
        pobField.setValue("N/A");
        glayout.addComponent(pobField, 2, 2, 3, 2);
        glayout.setComponentAlignment(pobField, Alignment.MIDDLE_LEFT);
                
        genderBox = dropDownComponent.populateGenderList(new ComboBox());
	genderBox.setWidth("100%");    
        glayout.addComponent(genderBox, 1, 3);
        glayout.setComponentAlignment(genderBox, Alignment.MIDDLE_LEFT);
        
        civilStatusBox = dropDownComponent.populateCivilStatusList(new ComboBox());
	civilStatusBox.setWidth("100%");
        glayout.addComponent(civilStatusBox, 2, 3);
        glayout.setComponentAlignment(civilStatusBox, Alignment.MIDDLE_LEFT);
                
	citizenshipField = createTextField("Citizenship: ");
        citizenshipField.setValue("N/A");
        glayout.addComponent(citizenshipField, 3, 3);
        glayout.setComponentAlignment(citizenshipField, Alignment.MIDDLE_LEFT);   
	
        heightField = createTextField("Height(cm):");
        heightField.setValue(0.0);
        glayout.addComponent(heightField, 1, 4);
        glayout.setComponentAlignment(heightField, Alignment.MIDDLE_LEFT);
                
        weightField = createTextField("Weight(kg): ");
        weightField.setValue(0.0);
        glayout.addComponent(weightField, 2, 4);
        glayout.setComponentAlignment(weightField, Alignment.MIDDLE_LEFT);
                
        religionField = createTextField("Religion: ");
        religionField.setValue("N/A");
        glayout.addComponent(religionField, 3, 4);
        glayout.setComponentAlignment(religionField, Alignment.MIDDLE_LEFT);
                            
        spouseNameField = createTextField("Spouse Name: ");
        spouseNameField.setValue("N/A");
        glayout.addComponent(spouseNameField, 1, 5, 2, 5);
        glayout.setComponentAlignment(spouseNameField, Alignment.MIDDLE_LEFT);
        
        spouseOccupationField = createTextField("Spouse Occupation: ");
        spouseOccupationField.setValue("N/A");
        glayout.addComponent(spouseOccupationField, 3, 5);
        glayout.setComponentAlignment(spouseOccupationField, Alignment.MIDDLE_LEFT);
        
        spouseOfficeAddressField = createTextField("Spouse Office Address: ");
        spouseOfficeAddressField.setValue("N/A");
        glayout.addComponent(spouseOfficeAddressField, 1, 6, 3, 6);
        glayout.setComponentAlignment(spouseOfficeAddressField, Alignment.MIDDLE_LEFT);
        
        fathersNameField = createTextField("Father's Name: ");
        fathersNameField.setValue("N/A");
        glayout.addComponent(fathersNameField, 1, 7, 2, 7);
        glayout.setComponentAlignment(fathersNameField, Alignment.MIDDLE_LEFT);
        
        fathersOccupationField = createTextField("Father's Occupation: ");
        fathersOccupationField.setValue("N/A");
        glayout.addComponent(fathersOccupationField, 3, 7);
        glayout.setComponentAlignment(fathersOccupationField, Alignment.MIDDLE_LEFT);
        
        mothersNameField = createTextField("Mother's Maiden Name: ");
        mothersNameField.setValue("N/A");
        glayout.addComponent(mothersNameField, 1, 8, 2, 8);
        glayout.setComponentAlignment(mothersNameField, Alignment.MIDDLE_LEFT);
        
        mothersOccupationField = createTextField("Mother's Occupation: ");
        mothersOccupationField.setValue("N/A");
        glayout.addComponent(mothersOccupationField, 3, 8);
        glayout.setComponentAlignment(mothersOccupationField, Alignment.MIDDLE_LEFT);
        
        parentsAddressField = createTextField("Parents Address");
        parentsAddressField.setValue("N/A");
        glayout.addComponent(parentsAddressField, 1, 9, 3, 9);
        glayout.setComponentAlignment(parentsAddressField, Alignment.MIDDLE_LEFT);
        
        dialectSpeakWriteField = createTextField("Language or Dialect you can speak or write: ");
        dialectSpeakWriteField.setValue("N/A");
        glayout.addComponent(dialectSpeakWriteField, 1, 10, 3, 10);
        glayout.setComponentAlignment(dialectSpeakWriteField, Alignment.MIDDLE_LEFT);
        
        contactPersonNameField = createTextField("Contact Person: ");
        contactPersonNameField.setValue("N/A");
        glayout.addComponent(contactPersonNameField, 1, 11);
        glayout.setComponentAlignment(contactPersonNameField, Alignment.MIDDLE_LEFT);
        
        contactPersonAddressField = createTextField("Contact Person's Address: ");
        contactPersonAddressField.setValue("N/A");
        glayout.addComponent(contactPersonAddressField, 2, 11, 3, 11);
        glayout.setComponentAlignment(contactPersonAddressField, Alignment.MIDDLE_LEFT);
        
        contactPersonNoField = createTextField("Contact Person's Tel No: ");
        contactPersonNoField.setValue("N/A");
        glayout.addComponent(contactPersonNoField, 1, 12);
        glayout.setComponentAlignment(contactPersonNoField, Alignment.MIDDLE_LEFT);
        
        skillsField = createTextField("Skills: ");
        skillsField.setValue("N/A");
        glayout.addComponent(skillsField, 2, 12);
        glayout.setComponentAlignment(skillsField, Alignment.MIDDLE_LEFT);
        
        hobbyField = createTextField("Hobbies");
        hobbyField.setValue("N/A");
        glayout.addComponent(hobbyField, 3, 12);
        glayout.setComponentAlignment(hobbyField, Alignment.MIDDLE_LEFT);
        
	if(employeeId != null){	            
	    personalInformation = piService.getPersonalInformationData(employeeId);
            final byte[] image = personalInformation.getImage();
            if(image != null){
                StreamResource.StreamSource imageSource = new StreamResource.StreamSource(){

                    @Override
                    public InputStream getStream() {
                        return new ByteArrayInputStream(image);
                    }
                        
                };
                
                StreamResource imageResource = new StreamResource(imageSource, personalInformation.getFirstname()+".jpg", getThisApplication());
                imageResource.setCacheTime(0);
                avatar.setSource(imageResource);
            } 
	    fnField.setValue(personalInformation.getFirstname().toUpperCase());
	    mnField.setValue(personalInformation.getMiddlename().toUpperCase());
	    lnField.setValue(personalInformation.getLastname().toUpperCase());
            companyIdField.setValue(employeeId);
            dobField.setValue(personalInformation.getDob());
            pobField.setValue(personalInformation.getPob());
            
            if(personalInformation.getCivilStatus() != null){
                Object civilStatusId = civilStatusBox.addItem();
                civilStatusBox.setItemCaption(civilStatusId, personalInformation.getCivilStatus());
                civilStatusBox.setValue(civilStatusId);
            }
                
            if(personalInformation.getGender() != null){
                Object genderId = genderBox.addItem();
                genderBox.setItemCaption(genderId, personalInformation.getGender());
                genderBox.setValue(genderId);
            }
            
            citizenshipField.setValue(personalInformation.getCitizenship());
            heightField.setValue(personalInformation.getHeight());
            weightField.setValue(personalInformation.getWeight());
            religionField.setValue(personalInformation.getReligion());
            spouseNameField.setValue(personalInformation.getSpouseName());
            spouseOccupationField.setValue(personalInformation.getSpouseOccupation());
            spouseOfficeAddressField.setValue(personalInformation.getSpouseOfficeAddress());
            fathersNameField.setValue(personalInformation.getFathersName());
            fathersOccupationField.setValue(personalInformation.getFathersOccupation());
            mothersNameField.setValue(personalInformation.getMothersName());
            mothersOccupationField.setValue(personalInformation.getMothersOccupation());
            parentsAddressField.setValue(personalInformation.getParentsAddress());
            dialectSpeakWriteField.setValue(personalInformation.getDialectSpeakWrite());
            contactPersonNameField.setValue(personalInformation.getContactPersonName());
            contactPersonAddressField.setValue(personalInformation.getContactPersonAddress());
            contactPersonNoField.setValue(personalInformation.getContactPersonNo());
            skillsField.setValue(personalInformation.getSkills());
            hobbyField.setValue(personalInformation.getHobby());	    
	}
	
        Button removeBtn = new Button("REMOVE EMPLOYEE");
        removeBtn.setWidth("100%");
        boolean visible = false;
        if(GlobalVariables.getUserRole()== null){
            visible = false;
        } else if (GlobalVariables.getUserRole().equals("hr") || GlobalVariables.getUserRole().equals("administrator")){
            visible = true;
        }
        removeBtn.setVisible(visible);
        removeBtn.addListener(new Button.ClickListener() {

            @Override
            public void buttonClick(Button.ClickEvent event) {
                if(!GlobalVariables.getUserRole().equals("administrator")){
                    getWindow().showNotification("You need to an ADMINISTRATOR to perform this ACTION.", Window.Notification.TYPE_WARNING_MESSAGE);
                    return;
                }
                
                Window window = getRemoveWindow(getEmployeeId());
                window.setModal(true);
                if(window.getParent() == null){
                    getWindow().addWindow(window);
                }
                window.center();
            }
        });
        glayout.addComponent(removeBtn, 1, 13);
        
        Button saveButton = new Button("UPDATE EMPLOYEE's INFORMATION");
        saveButton.setWidth("100%");
	saveButton.addListener(new Button.ClickListener() {

	    @Override
	    public void buttonClick(Button.ClickEvent event) {
                if(dobField.getValue() == null || dobField.getValue().toString().isEmpty()){
                    getWindow().showNotification("Date of Birth Required!", Window.Notification.TYPE_ERROR_MESSAGE);
                    return;
                }
                
                if(heightField.getValue() == null || heightField.getValue().toString().isEmpty()){
                    getWindow().showNotification("Null/Empty Value for Height is not ALLOWED!", Window.Notification.TYPE_ERROR_MESSAGE);
                    return;
                } else {
                    if(!convertionUtilities.checkInputIfDouble(heightField.getValue().toString())){
                        getWindow().showNotification("Enter a numeric format for Height!", Window.Notification.TYPE_ERROR_MESSAGE);
                        return;
                    }
                }
                
                if(weightField.getValue() == null || weightField.getValue().toString().isEmpty()){
                    getWindow().showNotification("Null/Empty Value for Weight is not ALLOWED!", Window.Notification.TYPE_ERROR_MESSAGE);
                    return;
                } else {
                    if(!convertionUtilities.checkInputIfDouble(weightField.getValue().toString())){
                        getWindow().showNotification("Enter a numeric format for Weight!", Window.Notification.TYPE_ERROR_MESSAGE);
                        return;
                    }
                }
                
                if(genderBox.getValue() == null || genderBox.getValue().toString().isEmpty()){
                    getWindow().showNotification("Select a Gender!", Window.Notification.TYPE_ERROR_MESSAGE);
                    return;
                }
                
                if(civilStatusBox.getValue() == null || civilStatusBox.getValue().toString().isEmpty()){
                    getWindow().showNotification("Select Civil Status!", Window.Notification.TYPE_ERROR_MESSAGE);
                    return;
                }
                
		PersonalInformation pi = new PersonalInformation();
		pi.setFirstname(fnField.getValue().toString().toLowerCase().trim());
		pi.setMiddlename(mnField.getValue().toString().toLowerCase().trim());
		pi.setLastname(lnField.getValue().toString().toLowerCase().trim());
		pi.setEmployeeId(employeeId);
		pi.setDob((Date) dobField.getValue());
		pi.setPob((pobField.getValue() == null) ? "N/A" : pobField.getValue().toString().toLowerCase().trim());                
                pi.setHeight(convertionUtilities.convertStringToDouble(heightField.getValue().toString()));
                pi.setWeight(convertionUtilities.convertStringToDouble(weightField.getValue().toString()));
                
                if(convertionUtilities.checkInputIfInteger(genderBox.getValue().toString())){
                    pi.setGender(genderBox.getItemCaption(genderBox.getValue()));
                } else {
                    pi.setGender(genderBox.getValue().toString());
                }
                
                if(convertionUtilities.checkInputIfInteger(civilStatusBox.getValue().toString())){
                    pi.setCivilStatus(civilStatusBox.getItemCaption(civilStatusBox.getValue()));
                } else {
                    pi.setCivilStatus(civilStatusBox.getValue().toString());
                }
                
                pi.setCitizenship((citizenshipField.getValue() == null) ? "N/A" : citizenshipField.getValue().toString());
                pi.setReligion((religionField.getValue() == null)? "N/A" : religionField.getValue().toString());
                pi.setSpouseName((spouseNameField.getValue() == null) ? "N/A" : spouseNameField.getValue().toString());
                pi.setSpouseOccupation((spouseOccupationField.getValue() == null) ? "N/A" : spouseOccupationField.getValue().toString());
                pi.setSpouseOfficeAddress((spouseOfficeAddressField.getValue() == null) ? "N/A" : spouseOfficeAddressField.getValue().toString());
                pi.setFathersName((fathersNameField.getValue() == null) ? "N/A" : fathersNameField.getValue().toString());
                pi.setFathersOccupation((fathersOccupationField.getValue() == null) ? "N/A" : fathersOccupationField.getValue().toString());
                pi.setMothersName((mothersNameField.getValue() == null) ? "N/A" : mothersNameField.getValue().toString());
                pi.setMothersOccupation((mothersOccupationField.getValue() == null) ? "N/A" : mothersOccupationField.getValue().toString());
                pi.setParentsAddress((parentsAddressField.getValue() == null) ? "N/A" : parentsAddressField.getValue().toString());
                pi.setDialectSpeakWrite((dialectSpeakWriteField.getValue() == null) ? "N/A" : dialectSpeakWriteField.getValue().toString());
                pi.setContactPersonName((contactPersonNameField.getValue() == null) ? "N/A" : contactPersonNameField.getValue().toString());
                pi.setContactPersonAddress((contactPersonAddressField.getValue() == null) ? "N/A" : contactPersonAddressField.getValue().toString());
                pi.setContactPersonNo((contactPersonNoField.getValue() == null) ? "N/A" : contactPersonNoField.getValue().toString());
                pi.setSkills((skillsField.getValue() == null) ? "N/A" : skillsField.getValue().toString());
                pi.setHobby((hobbyField.getValue() == null) ? "N/A" : hobbyField.getValue().toString());
                pi.setEmployeeId(getEmployeeId());
		
//                boolean result = piService.updatePersonalInformation(pi, "UPDATE PERSONAL INFORMATION");
                Window window = updatePersonalInformationConfirmation(pi);
                window.setModal(true);
                if(window.getParent() == null){
                    getWindow().addWindow(window);
                }
                window.center();
                		
//		if(result){
//		    getWindow().showNotification("Information Updated", Window.Notification.TYPE_TRAY_NOTIFICATION);
//		} else {
//		    getWindow().showNotification("SQL Error", Window.Notification.TYPE_ERROR_MESSAGE);
//		}
	    }
	});
        if(GlobalVariables.getUserRole().equals("administrator") || 
                GlobalVariables.getUserRole().equals("hr")){
            saveButton.setEnabled(true);
        } else {
            saveButton.setEnabled(false);
        }
        glayout.addComponent(saveButton, 2, 13, 3, 13);
                        
        glayout.setColumnExpandRatio(1, .10f);
        glayout.setColumnExpandRatio(2, .10f);
        glayout.setColumnExpandRatio(3, .10f);
        
        return glayout;    
    }
    
    private Window getRemoveWindow(String employeeId){
        VerticalLayout vlayout = new VerticalLayout();
        vlayout.setSpacing(true);
        vlayout.setMargin(true);

        final Window window = new Window("REMOVE EMPLOYEE", vlayout);
        window.setWidth("350px");
        
        Button removeBtn = new Button("Are you sure your want to remove this Employee?");
        removeBtn.setWidth("100%");
        removeBtn.addListener(new Button.ClickListener() {

            @Override
            public void buttonClick(Button.ClickEvent event) {                
                EmployeeMainUI employeeMainUI = new EmployeeMainUI(GlobalVariables.getUserRole(), 0);
                boolean result = employeeCurrentStatusService.removeEmployee(getEmployeeId());
                if(result){
                    clearFields();
                    employeeMainUI.employeesTable(getEmployeeList(0));
                    (window.getParent()).removeWindow(window);
                } else {
                    getWindow().showNotification("Cannot Remove Employee, Contact your DBA!", Window.Notification.TYPE_ERROR_MESSAGE);
                }
            }
        });
        window.addComponent(removeBtn);
        
        return window;
    }
            
    private Window updatePersonalInformationConfirmation(final PersonalInformation pi){
        VerticalLayout vlayout = new VerticalLayout();
        vlayout.setSpacing(true);
        vlayout.setMargin(true);

        final Window window = new Window("UPDATE WINDOW", vlayout);
        window.setWidth("350px");
        
        final TextArea remarks = new TextArea("Remarks");
        remarks.setWidth("100%");
        remarks.setRows(3);
        window.addComponent(remarks);
        
        Button removeBtn = new Button("UPDATE EMPLOYEE?");
        removeBtn.setWidth("100%");
        removeBtn.addListener(new Button.ClickListener() {

            @Override
            public void buttonClick(Button.ClickEvent event) {
                if(remarks.getValue() ==  null || remarks.getValue().toString().trim().isEmpty()){
                    getWindow().showNotification("Add remarks!", Window.Notification.TYPE_ERROR_MESSAGE);
                    return;
                }
                
                boolean result = piService.updatePersonalInformation(pi, remarks.getValue().toString().trim());
                if(result){
		    getWindow().showNotification("Information Updated", Window.Notification.TYPE_TRAY_NOTIFICATION);
                    (window.getParent()).removeWindow(window);
		} else {
		    getWindow().showNotification("SQL Error", Window.Notification.TYPE_ERROR_MESSAGE);
		}
            }
            
        });
        window.addComponent(removeBtn);
        
        return window;
    }
    
    public String getEmployeeId(){
	return employeeId;    
    }
        
    private TextField createTextField(String str){
	TextField t = new TextField();
	t.setCaption(str);
	t.setWidth("100%");
	t.setStyleName(Reindeer.TEXTFIELD_SMALL);
        t.setNullSettingAllowed(true);
        
	return t;
    }
	    
    public List<Employee> getEmployeeList(int branchId){
        return employeeService.getEmployeePerBranch(branchId);
    }
    
    public Application getThisApplication(){
        return application;
    }
    
    public void clearFields(){
        fnField.setValue("");
        mnField.setValue("");
        lnField.setValue("");
        companyIdField.setValue("");
        dobField.setValue(new Date());
        pobField.setValue("");
        
        genderBox.removeAllItems();
        genderBox = dropDownComponent.populateGenderList(genderBox);
        
        civilStatusBox.removeAllItems();
        civilStatusBox = dropDownComponent.populateCivilStatusList(civilStatusBox);
        
        citizenshipField.setValue("");
        heightField.setValue("");
        weightField.setValue("");
        religionField.setValue("");
        spouseNameField.setValue("");
        spouseOccupationField.setValue("");
        spouseOfficeAddressField.setValue("");
        fathersNameField.setValue("");
        fathersOccupationField.setValue("");
        mothersNameField.setValue("");
        mothersOccupationField.setValue("");
        parentsAddressField.setValue("");
        dialectSpeakWriteField.setValue("");
        contactPersonNameField.setValue("");
        contactPersonAddressField.setValue("");
        contactPersonNoField.setValue("");
        skillsField.setValue("");
        hobbyField.setValue("");
    }
}
