using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using NPOI.OpenXmlFormats.Wordprocessing;

namespace HRM.BO
{
    #region HREmployee BaseObject
    public class HREmployee : Employee
    {

        #region constructor
        public HREmployee()
        {
            FatherOccupationID = 0;
            MotherName = string.Empty;
            MotherOccupationID = 0;
            NationalID = null;
            OfficialBirthDate = DateTime.MinValue;
            BirthPlace = string.Empty;
            //_bloodGroup = EnmBloodGroup.None;
            PassportNo = string.Empty;
            // _nationalID = null;
            RetirementAge = 0.0;
            NickName = string.Empty;
            LastName = string.Empty;
            MiddleName = string.Empty;
            OneviewID = string.Empty;
            CompanyID = 0;
            AdloginID = 0;
            FunctionID = 0;
            DrivingLicenceNo = string.Empty;
            PassportIssuePlace = string.Empty;
            PassportIssueDate = DateTime.Now;
            PassportExpDate = DateTime.Now;
            Role = EnumRoleType.Admin;
            FileNo = string.Empty;

            #region Child Variable
            Contacts = null;
            Spouses = null;
            ChildrenList = null;
            Publications = null;
            References = null;
            Experiences = null;
            Trainings = null;
            Nominees = null;
            Academics = null;
            Achievements = null;
            CurricularActivities = null;
            OtherTalents = null;
            Hobbies = null;
            Allergies = null;
            Hospitalizations = null;
            Guarantors = null;
            FatherOccupation = null;
            MotherOccupation = null;
            EmpLanguages = null;
            EmpRelatives = null;
            EmpMemberships = null;
            EmpRelations = null;
            EmpHRQuestionAnswers = null;
            CreditCards = null;
            ProfileComplitionPercent = 0;
            Height = string.Empty;
            BanglaName = string.Empty;
            FatherNameBangla = string.Empty;
            MotherNameBangla = string.Empty;
            SpouseNameBangla = string.Empty;
            SpouseName = string.Empty;
            #endregion

        }
        #endregion

        #region properties


        #region parent properties

        //public EnumMaritalStatus MaritalStatus;

        public int ProfileComplitionPercent { get; set; }
        public EnumProfileStatus ProfileStatus { get; set; }
        
        public string OneviewID { get; set; }
        public DateTime OfficialBirthDate { get; set; }
        public string BirthPlace { get; set; }
        public string Height { get; set; }
        public string BanglaName { get; set; }
        public string Signature { get; set; }
        public EnumBloodGroup BloodGroup { get; set; }
        public string NationalID { get; set; }
        public List<empFileupload> attachments { get; set; }
        #region Father

        public Occupation FatherOccupation { get; set; }
        public string FatherNameBangla { get; set; }
        public int FatherOccupationID { get; set; }

        #region Mother

        public string MotherName { get; set; }
        public string MotherNameBangla { get; set; }
        public int MotherOccupationID { get; set; }
        public Occupation MotherOccupation { get; set; }


        //#region Property MotherOccupatoin : Occupation
        //private Occupation _motherOccupation;
        //public Occupation MotherOccupation
        //{
        //    get
        //    {
        //        if (_motherOccupation == null)
        //        {
        //            _motherOccupation = new Occupation();
        //            //_motherOccupation = (Occupation)_motherOccupation.Get(_motherOccupationID);
        //            if (_motherOccupationID != null && !_motherOccupationID.IsUnassigned)
        //                _motherOccupation = Occupation.Get(_motherOccupationID);
        //        }
        //        return _motherOccupation;
        //    }
        //}
        //#endregion

        #endregion
        public string SpouseNameBangla {get; set;}
        public string SpouseName { get; set; }
        


        public string PassportNo { get; set; }
        public int? FunctionID { get; set; }
        public string DrivingLicenceNo { get; set; }
        public string PassportIssuePlace { get; set; }

        public DateTime? PassportIssueDate { get; set; }
        public DateTime? PassportExpDate { get; set; }
        public string FileNo { get; set; }

        public double RetirementAge { get; set; }
        public string NickName { get; set; }
        /*public string FirstName { get; set; }
        public string LastName { get; set; }*/
        public string MiddleName { get; set; }
        public int? CompanyID { get; set; }
        public int AdloginID { get; set; }


        //public Religion Religion { get; set; }
        public List<EmpContact> Contacts { get; set; }
        public List<EmpSpouse> Spouses { get; set; }
        public List<EmpChildren> ChildrenList { get; set; }

        public List<EmpCreditCard> CreditCards { get; set; }
        public List<EmpPublication> Publications { get; set; }
        public List<EmpReference> References { get; set; }
        public List<EmpExperience> Experiences { get; set; }
        public List<EmpTraining> Trainings { get; set; }
        public List<EmpNominee> Nominees { get; set; }
        public List<EmpAcademic> Academics { get; set; }
        public List<EmpAchievement> Achievements { get; set; }
        public List<EmpCurricularActivity> CurricularActivities { get; set; }
        public List<EmpOtherTalent> OtherTalents { get; set; }
        public List<EmpHobby> Hobbies { get; set; }
        public List<EmpAllergy> Allergies { get; set; }
        public List<EmpHospitalization> Hospitalizations { get; set; }

        public List<EmpGuarantor> Guarantors { get; set; }
        public List<EmpLanguage> EmpLanguages { get; set; }
        public List<EmpRelative> EmpRelatives { get; set; }
        public List<EmpMembership> EmpMemberships { get; set; }
        public List<EmpRelation> EmpRelations { get; set; }
        public List<EmpHRQuestionAnswer> EmpHRQuestionAnswers { get; set; }
        public string EmpHobby { get; set; }
        #endregion
    }

    #region Child's object


    #region EmpContact
    public class EmpContact : BasicBaseObject
    {

        #region Constructor
        public EmpContact()
        {
            EmployeeID = 0;
            PermanentAddress = "";
            PermanentDistrictID = 0;
            PermanentDistrict = null;
            PermanentThanaID = 0;
            PermanentThana = null;
            PermanentTelephone = "";
            PermanentMobile = "";        // Kalam


            PermanentAddress = "";
            PermanentAddressInBangla = "";
            PresentAddressInBangla = "";
            PermanentPostCodeNo = "";
            PresentPostCodeNo = "";
            PresentDistrictID = 0;
            PresentDistrict = null;

            PresentThanaID = 0;
            PresentThana = null;
            PresentTelephone = "";
            PresentMobile = "";         // Kalam


            Mobile = "";
            PersonalTelephone = "";     // Kalam
            PersonalEmail = "";
            OfficalEmail = "";
            Fax = "";
            EmergencyContactAddress = "";
            EmergencyContactPerson = "";
            EmergencyTelephone = "";
            EmergencyMobile = "";       // Kalam
            ContactPersonRelationId = 0;   // Kalam   
            ContactPersonRelation = null;

        }
        #endregion

        #region Property
        public int EmployeeID { get; set; }
        public string PermanentAddress { get; set; }
        public EnumProfileStatus ProfileStatus { get; set; }
        public int PermanentDistrictID { get; set; }
        public District PermanentDistrict { get; set; }
        public int PermanentThanaID { get; set; }
        public Thana PermanentThana { get; set; }
        public string PermanentPostCodeNo { get; set; }
        public string PermanentTelephone { get; set; }
        public string PermanentMobile { get; set; }
        public string PresentAddress { get; set; }
        public int PresentDistrictID { get; set; }
        public District PresentDistrict { get; set; }
        public int PresentThanaID { get; set; }
        public Thana PresentThana { get; set; }
        public string PresentPostCodeNo { get; set; }
        public string PresentTelephone { get; set; }
        public string PresentMobile { get; set; }
        public string Mobile { get; set; }
        public string PersonalTelephone { get; set; }
        public string PersonalEmail { get; set; }
        public string OfficalEmail { get; set; }
        public string Fax { get; set; }
        public string EmergencyContactAddress { get; set; }
        public string EmergencyContactPerson { get; set; }
        public string EmergencyTelephone { get; set; }
        public string EmergencyMobile { get; set; }
        public int ContactPersonRelationId { get; set; }
        public Relation ContactPersonRelation { get; set; }
        public string PermanentAddressInBangla { get; set; }
        public string PresentAddressInBangla { get; set; }
        public string PresentPO { get; set; }
        public string PresentPOInBangla { get; set; }
        public string PermanentPO { get; set; }
        public string ParmanentPOInBangla { get; set; }

        //#region Property PermanentDistrict : District
        //private District _parmanentDistrict;
        //public District PermanentDistrict
        //{
        //    get
        //    {
        //        if (_parmanentDistrictID != null && _parmanentDistrict == null)
        //        {
        //            _parmanentDistrict = District.Get(_parmanentDistrictID);

        //        }
        //        return _parmanentDistrict;
        //    }
        //}
        //#endregion
        #endregion



        //#region Property PresentDistrict : District
        //private District _presentDistrict;
        //public District PresentDistrict
        //{
        //    get
        //    {
        //        if (_presentDistrictID != null && _presentDistrict == null)
        //        {
        //            _presentDistrict = District.Get(_presentDistrictID);
        //        }
        //        return _presentDistrict;
        //    }
        //}
        //#endregion

        //#region Present Thana
        //private Thana _presentThana;
        //public Thana PresentThana
        //{
        //    get
        //    {
        //        if (_presentThanaID != null && _presentThana == null)
        //        {
        //            _presentThana = Thana.Get(_presentThanaID);
        //        }
        //        return _presentThana;
        //    }
        //}
        //#endregion


        //private Relation _contactPersonRelation;
        //public Relation ContactPersonRelation
        //{
        //    get
        //    {

        //        if (_contactPersonRelationId != null && _contactPersonRelation == null)
        //            _contactPersonRelation = Relation.Get(_contactPersonRelationId);

        //        return _contactPersonRelation;
        //    }
        //}
        //#endregion
        #endregion
    }

    #region EmpWorkPlanSetup
    //public class EmpWorkPlanSetup : BasicBaseObject
    //{
    //    #region constructor
    //    public EmpWorkPlanSetup()
    //    {
    //        EmployeeID = 0;
    //        ShiftID = 0;
    //        StartDate = DateTime.MinValue;
    //        WorkPlanGroupID = 0;
    //    }
    //    #endregion

    //    #region property
    //    public int EmployeeID { get; set; }
    //    public int ShiftID { get; set; }
    //    public DateTime StartDate { get; set; }
    //    public DayOfWeek WeekEndOn { get; set; }
    //    public int WorkPlanGroupID { get; set; }
    //    public EnumProfileStatus ProfileStatus { get; set; }

    //    #endregion
    //}
    #endregion

    #region EmpSpouse
    public class EmpSpouse : BasicBaseObject
    {
        #region Constructor
        public EmpSpouse()
        {
            EmployeeID = 0;
            Name = string.Empty;
            Nameinbangla = string.Empty;
            OccupationID = 0;
            Occupation = null;
            //_marriageDate = DateTime.Now;
            MarriageDate = DateTime.MinValue;
            EducationLevelID = 0;
            EducationLevel = null;
            PassportNo = string.Empty;
            PassportIssuePlace = string.Empty;
            PassportIssueDate = DateTime.MinValue;
            PassportExpDate = DateTime.MinValue;
            CreditCards = null;
        }
        #endregion

        #region Properties
        public int EmployeeID { get; set; }
        public EnumProfileStatus ProfileStatus { get; set; }
        public string Name { get; set; }
        public string Nameinbangla { get; set; }
        public int OccupationID { get; set; }
        public Occupation Occupation { get; set; }
        public DateTime MarriageDate { get; set; }
        public int EducationLevelID { get; set; }
        public EducationLevel EducationLevel { get; set; }
        public string PassportNo { get; set; }
        public string PassportIssuePlace { get; set; }
        public DateTime PassportIssueDate { get; set; }
        public DateTime PassportExpDate { get; set; }
        public List<EmpCreditCard> CreditCards { get; set; }
        public string InsuranceId { get; set; }
        public DateTime? InclusionDate { get; set; }
        public DateTime? DateOfBirth { get; set; }
        public string Designation { get; set; }
        public string FamilyResidence { get; set; }
        public string Organization { get; set; }
        public string InstitutionName { get; set; }
        public string NoOfFamilyMember { get; set; }
        public string ContactNumber { get; set; }


        //#region OccupationID
        //private Occupation _occupation;
        //public Occupation Occupation
        //{
        //    get
        //    {
        //        if (_occupation == null)
        //        {
        //            if (_occupationId != null)
        //                _occupation = Occupation.Get(_occupationId);
        //        }
        //        return _occupation;
        //    }
        //}

        //#endregion


        //#region EducationLevelID

        //private EducationLevel _educationLevel;
        //public EducationLevel EducationLevel
        //{
        //    get
        //    {
        //        if (_educationLevel == null)
        //        {
        //            if (_educationLevelId != null)
        //                _educationLevel = EducationLevel.Get(_educationLevelId);
        //        }

        //        return _educationLevel;
        //    }
        //}

        //#endregion

        #endregion
    }
    #endregion

    #region EmpChildren
    public class EmpChildren : BasicBaseObject
    {
        #region Constructor
        public EmpChildren()
        {
            EmployeeID = 0;
            Name = string.Empty;
            Gender = EnumGender.None;
            //_birthDate = DateTime.Now;
            BirthDate = DateTime.MinValue;
            MaritalStatus = EnumMaritalStatus.None;
            OccupationID = 0;
            Occupation = null;
            PassportNo = string.Empty;
            PassportIssuePlace = string.Empty;
            PassportIssueDate = null;
            PassportExpDate = null;
            CreditCards = null;
        }
        #endregion

        #region Properties
        public EnumProfileStatus ProfileStatus { get; set; }
        public int EmployeeID { get; set; }
        public string Name { get; set; }
        public EnumGender Gender { get; set; }
        public DateTime BirthDate { get; set; }
        public EnumMaritalStatus MaritalStatus { get; set; }
        public int OccupationID { get; set; }
        public Occupation Occupation { get; set; }
        public string PassportNo { get; set; }
        public string PassportIssuePlace { get; set; }
        public DateTime? PassportIssueDate { get; set; }
        public DateTime? PassportExpDate { get; set; }
        public List<EmpCreditCard> CreditCards { get; set; }
        public string InsuranceId { get; set; }
        public DateTime? InclusionDate { get; set; }
        public string Education { get; set; }
        public string InstitutionName { get; set; }
        public string ClassYear { get; set; }
        public string BATBScholarshipYear { get; set; }
        public string BATBScholarshipAmount { get; set; }

        //#region Occupation
        //private Occupation _occupation;
        //public Occupation Occupation
        //{
        //    get
        //    {
        //        if (_occupation == null)
        //        {
        //            if (_occupationId != null)
        //                _occupation = Occupation.Get(_occupationId);
        //        }
        //        return _occupation;
        //    }
        //}
        //#endregion

        #endregion

    }
    #endregion

    #region EmpCreditCard
    public class EmpCreditCard : BasicBaseObject
    {
        #region Constructor
        public EmpCreditCard()
        {
            //_empCreditCardID = null;
            EmployeeID = 0;
            UserType = 0;
            UserTypeID = 0;
            CardNo = string.Empty;
            CardName = string.Empty;
            BankID = 0;
            CardLimit = 0;
            CardExpiryDate = DateTime.MinValue;
            TIN = string.Empty;
        }
        #endregion

        #region Properties

        //#region EmpCreditCardID
        //private ID _empCreditCardID;
        //public ID EmpCreditCardID
        //{
        //    get { return _empCreditCardID; }
        //    set { _empCreditCardID = value; }
        //}
        //#endregion
        public EnumProfileStatus ProfileStatus { get; set; }
        public int EmployeeID { get; set; }
        public EnumCardUserType UserType { get; set; }
        public int UserTypeID { get; set; }
        public string CardNo { get; set; }
        public string CardName { get; set; }
        public int BankID { get; set; }

        public double CardLimit { get; set; }
        public DateTime CardExpiryDate { get; set; }
        public string TIN { get; set; }

        #endregion
    }
    #endregion

    #region EmpPublication
    public class EmpPublication : BasicBaseObject
    {
        #region Constructor
        public EmpPublication()
        {
            EmployeeID = 0;
            Title = string.Empty;
            Description = string.Empty;
            Remarks = string.Empty;
            //_publicationDate = DateTime.Now;
            PublicationDate = DateTime.MinValue;
        }
        #endregion

        #region Properties
        public EnumProfileStatus ProfileStatus { get; set; }
        public int EmployeeID { get; set; }
        public string PublishersName { get; set; }
        public string Title { get; set; }
        public string PublicationType { get; set; }
        public string Description { get; set; }
        public string Remarks { get; set; }
        public DateTime PublicationDate { get; set; }
        #endregion
    }
    #endregion

    #region EmpReference
    public class EmpReference : BasicBaseObject
    {
        #region Constructor
        public EmpReference()
        {
            EmployeeID = 0;
            Name = string.Empty;

            OccupationID = 0;
            Occupation = null;

            RelationID = 0;
            Relation = null;

            Address = string.Empty;
            Telephone = string.Empty;
            ReferenceMobile = string.Empty;
            EmailAddress = string.Empty;
        }
        #endregion

        #region Properties
        public int EmployeeID { get; set; }
        public string Name { get; set; }
        public int OccupationID { get; set; }
        public Occupation Occupation { get; set; }
        public int RelationID { get; set; }
        public Relation Relation { get; set; }
        public string Address { get; set; }
        public string Telephone { get; set; }
        public string ReferenceMobile { get; set; }
        public string EmailAddress { get; set; }
        public EnumProfileStatus ProfileStatus { get; set; }
        public string EmployeeNo { get; set; }
        public string Organization { get; set; }
        public string Designation { get; set; }

        //private Occupation _occupation;
        //public Occupation Occupation
        //{
        //    get
        //    {
        //        if (_occupation == null)
        //        {
        //            if (_occupationId != null)
        //                _occupation = Occupation.Get(_occupationId);
        //        }
        //        return _occupation;
        //    }
        //}
        //#region RelationID

        //private Relation _relation;
        //public Relation Relation
        //{
        //    get
        //    {
        //        if (_relation == null)
        //        {
        //            if (_relationId != null)
        //                _relation = Relation.Get(_relationId);
        //        }
        //        return _relation;
        //    }
        //}
        //#endregion

        #endregion
    }
    #endregion

    #region EmpExperience
    public class EmpExperience : BasicBaseObject
    {
        #region Constructor
        public EmpExperience()
        {
            EmployeeID = 0;

            Employer = string.Empty;
            ContactPerson = string.Empty;
            Address = string.Empty;
            Telephone = string.Empty;
            EmployerActivity = string.Empty;
            Designation = string.Empty;
            JobDescription = string.Empty;
            FromDate = DateTime.MinValue;
            ToDate = DateTime.MinValue;
            TillDate = DateTime.MinValue;

            LastJob = false;
        }
        #endregion

        #region Properties
        public int EmployeeID { get; set; }
        public string Employer { get; set; }
        public string ContactPerson { get; set; }
        public string Address { get; set; }

        public string Telephone { get; set; }
        public string EmployerActivity { get; set; }
        public string Designation { get; set; }
        public string JobDescription { get; set; }
        public DateTime FromDate { get; set; }
        public DateTime ToDate { get; set; }
        public DateTime TillDate { get; set; }
        public bool LastJob { get; set; }
        public EnumProfileStatus ProfileStatus { get; set; }
        public bool HasAttachment { get; set; }

        #endregion
    }
    #endregion

    #region EmpTraining
    public class EmpTraining : BasicBaseObject
    {
        #region Constructor
        public EmpTraining()
        {
            _employeeId = 0;

            _name = string.Empty;
            _description = string.Empty;

            _countryId = 0;
            Country = null;

            _institutionId = 0;
            Institution = null;

            _trainingTypeId = 0;
            TrainingType = null;

            _trainingNatureId = 0;
            NatureOfTraining = null;

            _place = string.Empty;
            _achievement = string.Empty;
            _fees = 0;
            _otherCost = 0;

            _fromDate = DateTime.MinValue;
            _toDate = DateTime.MinValue;
            _trainingMonth = 0;
            _trainingDay = 0;
            _trainingHour = 0;
            _confirmationDate = DateTime.MinValue;
        }
        #endregion

        #region Properties
        #region EmployeeID
        private int _employeeId;
        public int EmployeeID
        {
            get { return _employeeId; }
            set { _employeeId = value; }
        }
        #endregion
        #region Name
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        #endregion

        #region Property TrainingTypeID : ID
        private int _trainingTypeId;
        public int TrainingTypeID
        {
            get { return _trainingTypeId; }
            set { _trainingTypeId = value; }
        }

        public TrainingType TrainingType { get; set; }

        //private TrainingType _trainingType;
        //public TrainingType TrainingType
        //{
        //    get
        //    {
        //        if (_trainingType == null)
        //        {
        //            if (_trainingTypeId != null)
        //            {
        //                _trainingType = new TrainingType();
        //                _trainingType = (TrainingType)TrainingType.Get(_trainingTypeId);
        //            }
        //        }
        //        return _trainingType;
        //    }
        //}
        #endregion
        #region Property NatureOfTrainingID : ID
        private int _trainingNatureId;
        public int NatureOfTrainingID
        {
            get { return _trainingNatureId; }
            set { _trainingNatureId = value; }
        }
        public NatureOfTraining NatureOfTraining { get; set; }
        //private NatureOfTraining _trainingNature;
        //public NatureOfTraining NatureOfTraining
        //{
        //    get
        //    {
        //        if (_trainingNature == null)
        //        {
        //            if (_trainingNatureId != null)
        //                _trainingNature = NatureOfTraining.Get(_trainingNatureId);
        //        }
        //        return _trainingNature;
        //    }
        //}
        #endregion
        #region Property TrainingCompletedFrom : EnumTrainingCompletedFrom
        private EnumTrainingCompletedFrom _trainingCompletedFrom;
        public EnumTrainingCompletedFrom TrainingCompletedFrom
        {
            get { return _trainingCompletedFrom; }
            set { _trainingCompletedFrom = value; }
        }
        #endregion


        #region Description
        private string _description;
        public string Description
        {
            get { return _description; }
            set { _description = value; }
        }
        #endregion
        #region Country
        private int _countryId;
        public int CountryID
        {
            get { return _countryId; }
            set { _countryId = value; Country = null; }
        }

        public Country Country { get; set; }

      
        #endregion
        #region Institution
        private int _institutionId;
        public int InstitutionID
        {
            get { return _institutionId; }
            set { _institutionId = value; Institution = null; }
        }

        public Institution Institution { get; set; }

        //private Institution _institution;
        //public Institution Institution
        //{
        //    get
        //    {
        //        if (_institution == null)
        //        {
        //            if (_institutionId != null)
        //            {
        //                _institution = new Institution();
        //                _institution = Institution.Get(_institutionId);
        //            }
        //        }
        //        return _institution;
        //    }
        //}
        #endregion
        #region Place
        private string _place;
        public string Place
        {
            get { return _place; }
            set { _place = value; }
        }
        #endregion
        #region Achievements
        private string _achievement;
        public string Achievement
        {
            get { return _achievement; }
            set { _achievement = value; }
        }
        #endregion
        #region Fees
        private double _fees;
        public double Fees
        {
            get { return _fees; }
            set { _fees = value; }
        }
        #endregion
        #region OtherCost
        private double _otherCost;
        public double OtherCost
        {
            get { return _otherCost; }
            set { _otherCost = value; }
        }
        #endregion
        #region Fromdate
        private DateTime _fromDate;
        public DateTime FromDate
        {
            get { return _fromDate; }
            set { _fromDate = value; }
        }
        public string FromDateString
        {
            get { return _fromDate.ToString("dd MMM yyyy"); }
        }
        #endregion
        #region ToDate
        private DateTime _toDate;
        public DateTime ToDate
        {
            get { return _toDate; }
            set { _toDate = value; }
        }
        public string ToDateString
        {
            get { return _toDate.ToString("dd MMM yyyy"); }
        }
        #endregion

        #region Training Month
        private int _trainingMonth;
        public int TrainingMonth
        {
            get { return _trainingMonth; }
            set { _trainingMonth = value; }
        }
        #endregion

        #region Training Day
        private int _trainingDay;
        public int TrainingDay
        {
            get { return _trainingDay; }
            set { _trainingDay = value; }
        }
        #endregion

        #region Training Hour
        private int _trainingHour;
        public int TrainingHour
        {
            get { return _trainingHour; }
            set { _trainingHour = value; }
        }
        #endregion

        #region Confirmation Date
        private DateTime _confirmationDate;
        public DateTime ConfirmationDate
        {
            get { return _confirmationDate; }
            set { _confirmationDate = value; }
        }
        #endregion

        public EnumProfileStatus ProfileStatus { get; set; }
        public bool HasAttachment { get; set; }
        public bool HasBond { get; set; }
        public string Result { get; set; }
        public EnumSponsoredType SponsoredType { get; set; }
        #endregion
    }
    #endregion

    #region EmpNominee
    public class EmpNominee : BasicBaseObject
    {

        #region Constructor
        public EmpNominee()
        {
            _employeeId = 0;

            _nominationPurposeId = 0;
            NominationPurpose = null;

            //_nominationDate = DateTime.Now;
            _nominationDate = DateTime.MinValue;
            _name = string.Empty;

            _relationId = 0;
            Relation = null;

            _percentage = 0;
            //_birthDate = DateTime.Now;
            _birthDate = DateTime.MinValue;
            _occupationId = 0;
            Occupation = new Occupation();

            _address = string.Empty;
            _telePhone = string.Empty;

            _emailAddress = string.Empty;
            Gender = EnumGender.None;
        }
        #endregion

        #region Properties
        #region EmployeeID
        private int _employeeId;
        public int EmployeeID
        {
            get { return _employeeId; }
            set { _employeeId = value; }
        }
        #endregion
        #region NominationPurpose
        private int _nominationPurposeId;
        public int NominationPurposeID
        {
            get { return _nominationPurposeId; }
            set { _nominationPurposeId = value; NominationPurpose = null; }
        }
        public NominationPurpose NominationPurpose { get; set; }
        //private NominationPurpose _nominationPurpose;
        //public NominationPurpose NominationPurpose
        //{
        //    get
        //    {
        //        if (_nominationPurpose == null)
        //        {
        //            _nominationPurpose = NominationPurpose.Get(_nominationPurposeId);
        //        }
        //        return _nominationPurpose;
        //    }
        //}
        #endregion
        #region NominationDate
        private DateTime _nominationDate;
        public DateTime NominationDate
        {
            get { return _nominationDate; }
            set { _nominationDate = value; }
        }
        #endregion
        #region NomineeName
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        #endregion
        #region RelationID
        private int _relationId;
        public int RelationID
        {
            get { return _relationId; }
            set { _relationId = value; Relation = null; }
        }
        public Relation Relation { get; set; }
        //private Relation _relation;
        //public Relation Relation
        //{
        //    get
        //    {
        //        if (_relation == null)
        //        {
        //            _relation = Relation.Get(_relationId);
        //        }
        //        return _relation;
        //    }
        //}
        #endregion
        #region Percentage
        private double _percentage;
        public double Percentage
        {
            get { return _percentage; }
            set { _percentage = value; }
        }
        #endregion
        #region BirthDate
        private DateTime _birthDate;
        public DateTime BirthDate
        {
            get { return _birthDate; }
            set { _birthDate = value; }
        }
        #endregion
        #region Occupation
        private int _occupationId;
        public int OccupationID
        {
            get { return _occupationId; }
            set { _occupationId = value; Occupation = null; }
        }
        public Occupation Occupation { get; set; }
        //private Occupation _occupation;
        //public Occupation Occupation
        //{
        //    get
        //    {
        //        if (_occupation == null)
        //        {
        //            _occupation = Occupation.Get(_occupationId);
        //        }
        //        return _occupation;
        //    }
        //}
        #endregion
        #region Address
        private string _address;
        public string Address
        {
            get { return _address; }
            set { _address = value; }
        }
        #endregion
        #region TelePhone
        private string _telePhone;
        public string TelePhone
        {
            get { return _telePhone; }
            set { _telePhone = value; }
        }
        #endregion
        #region Photograph
        public empFileupload Photograph { get; set; }
        #endregion
        #region Signature : string
        public empFileupload Signature { get; set; }
        #endregion
        #region Property Email : string

        private string _emailAddress;
        public string EmailAddress
        {
            get { return _emailAddress; }
            set { _emailAddress = value; }
        }

        #endregion
        #region Property NomineeMobileNo : string

        private string _nomineeMobileNo;
        public string NomineeMobileNo
        {
            get { return _nomineeMobileNo; }
            set { _nomineeMobileNo = value; }
        }

        #endregion
        public string FatherName { get; set; }
        public string MotherName { get; set; }
        public string SpouseName { get; set; }
        public string NationalID{ get; set; }
        public EnumGender Gender { get; set; }
        public int? DistrictID{ get; set; }
        public int? ThanaID { get; set; }
        public string PostOffice { get; set; }
        public EnumProfileStatus ProfileStatus { get; set; }
        public string NomineeStatus { get; set; }
        public bool HasPicture { get; set; }
        public bool HasSignature { get; set; }

        #endregion
    }
    #endregion

    #region EmpAcademic
    public class EmpAcademic : BasicBaseObject
    {
        #region Constructor
        public EmpAcademic()
        {
            _employeeId = 0;

            _educationLevelId = 0;
            EducationLevel = null;

            _disciplineId = 0;
            Discipline = null;
            _institutionId = 0;
            _institution = null;

            _resultTypeId = 0;
            ResultType = null;

            _examDate = DateTime.Now.Year;
            _passingYear = DateTime.Now.Year;
            _gpa = 0;
            _outOf = 0.0;
            _lastLevel = false;

            _instituteName = string.Empty;
            _classOrDivision = string.Empty;
        }
        
        #endregion

        #region Properties
        #region EmployeeID
        private int _employeeId;
        public int EmployeeID
        {
            get { return _employeeId; }
            set { _employeeId = value; }
        }
        #endregion

        #region Property EducationLevel
        private int _educationLevelId;
        public int EducationLevelID
        {
            get { return _educationLevelId; }
            set { _educationLevelId = value; EducationLevel = null; }
        }
        public DateTime? DocSubmissionDate { get; set; }

        public EducationLevel EducationLevel { get; set; }
        //private EducationLevel _educationLevel;
        //public EducationLevel EducationLevel
        //{
        //    get
        //    {
        //        if (_educationLevel == null)
        //        {
        //            if (_educationLevelId != null)
        //                _educationLevel = EducationLevel.Get(_educationLevelId);
        //        }
        //        return _educationLevel;
        //    }
        //}
        #endregion

        #region Discipline
        private int _disciplineId;
        public int DisciplineID
        {
            get { return _disciplineId; }
            set { _disciplineId = value; Discipline = null; }
        }
        public Discipline Discipline { get; set; }

        //private Discipline _discipline;
        //public Discipline Discipline
        //{
        //    get
        //    {
        //        if (_discipline == null)
        //        {
        //            if (_disciplineId != null)
        //                _discipline = Discipline.Get(_disciplineId);
        //        }
        //        return _discipline;
        //    }
        //}
        #endregion

        #region Institution
        private int _institutionId;
        public int InstitutionID
        {
            get { return _institutionId; }
            set { _institutionId = value; Institution = null; }
        }

        public Institution Institution { get; set; }

        private Institution _institution;
        //public Institution Institution
        //{
        //    get
        //    {
        //        if (_institution == null)
        //        {
        //            if (_institutionId != null)
        //                _institution = Institution.Get(_institutionId);
        //        }
        //        return _institution;
        //    }
        //}
        #endregion

        #region EducationTypeID
        private int _educationTypeID;

        public int EducationTypeID
        {
            get { return _educationTypeID; }
            set { _educationTypeID = value; EducationType = null; }
        }
        #endregion

        #region EducationType
        public EducationType EducationType { get; set; }
        //private EducationType _educationType;

        //public EducationType EducationType
        //{
        //    get
        //    {
        //        if (_educationType == null)
        //        {
        //            _educationType = EducationType.Get(_educationTypeID);
        //        }
        //        return _educationType;
        //    }
        //    set { _educationType = value; }
        //}
        #endregion

        #region PassingYear
        private int _passingYear;
        public int PassingYear
        {
            get { return _passingYear; }
            set { _passingYear = value; }
        }
        #endregion

        #region ExamDate
        private int _examDate;
        public int ExamDate
        {
            get { return _examDate; }
            set { _examDate = value; }
        }
        #endregion
        //CGPA or Marks
        #region GPAOrMarks
        private double? _gpa;
        public double? GPAOrMarks
        {
            get { return _gpa; }
            set { _gpa = value; }
        }
        #endregion
        //OutOf
        #region Property OutOf : double

        private double? _outOf;
        public double? OutOf
        {
            get { return _outOf; }
            set { _outOf = value; }
        }

        #endregion
        //Result Type	
        #region Property ResultType : ResultType
        private int _resultTypeId;
        public int ResultTypeID
        {
            get { return _resultTypeId; }
            set { _resultTypeId = value; ResultType = null; }
        }

        public ResultType ResultType { get; set; }

        //private ResultType _resultType;
        //public ResultType ResultType
        //{
        //    get
        //    {
        //        if (_resultType == null)
        //        {
        //            _resultType = ResultType.Get(_resultTypeId);
        //        }
        //        return _resultType;
        //    }
        //}

        public string PhotoPath { get; set; }
      
        #endregion

        #region LastLevel
        private bool _lastLevel;
        public bool LastLevel
        {
            get { return _lastLevel; }
            set { _lastLevel = value; }
        }
        #endregion

        #region InstituteName
        private string _instituteName;
        public string InstituteName
        {
            get { return _instituteName; }
            set { _instituteName = value; }
        }
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }
        public bool HasAttachment { get; set; }

        private string _classOrDivision;

        public string ClassOrDivision
        {
            get { return _classOrDivision; }
            set { _classOrDivision = value; }
        }
        #endregion
    }
    #endregion

    #region EmpAchievement
    public class EmpAchievement : BasicBaseObject
    {
        #region Constructor
        public EmpAchievement()
        {
            employeeId = 0;
            AchievementID = 0;

            Achievement = null;
        }
        #endregion

        #region Properties
        #region EmployeeID
        private int employeeId;
        public int EmployeeID
        {
            get { return employeeId; }
            set { employeeId = value; }
        }
        #endregion
        #region AchievementID
        private int _achievementId;
        public int AchievementID
        {
            get { return _achievementId; }
            set { _achievementId = value; Achievement = null; }
        }

        public Achievement Achievement { get; set; }
        //private Achievements _achievement;
        //public Achievements Achievements
        //{
        //    get
        //    {
        //        if (_achievement == null)
        //        {
        //            _achievement = Achievements.Get(_achievementId);
        //        }
        //        return _achievement;
        //    }
        //}
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }
        #endregion
    }
    #endregion

    #region EmpCurricularActivity
    public class EmpCurricularActivity : BasicBaseObject
    {
        #region Constructor
        public EmpCurricularActivity()
        {
            employeeId = 0;
            _curricularActivityId = 0;
        }
        #endregion

        #region Properties
        #region EmployeeID
        private int employeeId;
        public int EmployeeID
        {
            get { return employeeId; }
            set { employeeId = value; }
        }
        #endregion
        #region CurricularActivityID
        private int _curricularActivityId;
        public int CurricularActivityID
        {
            get { return _curricularActivityId; }
            set { _curricularActivityId = value; }
        }
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }
        #endregion
    }
    #endregion

    #region EmpOtherTalent
    public class EmpOtherTalent : BasicBaseObject
    {
        #region Constructor
        public EmpOtherTalent()
        {
            employeeId = 0;
            _otherTalentId = 0;
        }
        #endregion

        #region Properties
        #region EmployeeID
        private int employeeId;
        public int EmployeeID
        {
            get { return employeeId; }
            set { employeeId = value; }
        }
        #endregion
        #region AchivementID
        private int _otherTalentId;
        public int OtherTalentID
        {
            get { return _otherTalentId; }
            set { _otherTalentId = value; }
        }
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }
        #endregion
    }
    #endregion

    #region EmpHobby
    public class EmpHobby : BasicBaseObject
    {
        #region Constructor
        public EmpHobby()
        {
            employeeId = 0;
            _hobbyId = 0;
        }
        #endregion

        #region Properties
        #region EmployeeID
        private int employeeId;
        public int EmployeeID
        {
            get { return employeeId; }
            set { employeeId = value; }
        }
        #endregion
        #region AchivementID
        private int _hobbyId;
        public int HobbyID
        {
            get { return _hobbyId; }
            set { _hobbyId = value; }
        }
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }
        #endregion

        public bool IsHobbyExist(int hobbyID)
        {
            //foreach (EmpHobby hobby in this)
            //{
            //    if (hobby.HobbyID == hobbyID)
            //        return true;
            //}
            return false;
        }
    }
    #endregion

    #region EmpAllergy
    public class EmpAllergy : BasicBaseObject
    {
        #region Constructor
        public EmpAllergy()
        {
            employeeId = 0;
            _allergyId = 0;
        }
        #endregion

        #region Properties
        #region EmployeeID
        private int employeeId;
        public int EmployeeID
        {
            get { return employeeId; }
            set { employeeId = value; }
        }
        #endregion
        #region AllergyID
        private int _allergyId;
        public int AllergyID
        {
            get { return _allergyId; }
            set { _allergyId = value; }
        }
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }
        #endregion
    }
    #endregion

    #region EmpHospitalization
    public class EmpHospitalization : BasicBaseObject
    {
        #region Constructor
        public EmpHospitalization()
        {
            _employeeID = 0;
            _registrationDate = DateTime.MinValue;

            _relationId = 0;
            Relation = null;

            _birthDate = DateTime.MinValue;
            _occupationId = 0;
            Occupation = null;

            _address = string.Empty;
            _photograph = string.Empty;
            _telephone = string.Empty;
            _mobile = string.Empty;
            _email = string.Empty;
        }
        #endregion

        #region Property
        #region EmployeeID
        private int _employeeID;
        public int EmployeeID
        {
            get { return _employeeID; }
            set { _employeeID = value; }
        }
        #endregion

        #region Property RegistrationDate : DateTime
        private DateTime _registrationDate;
        public DateTime RegistrationDate
        {
            get { return _registrationDate; }
            set { _registrationDate = value; }
        }
        #endregion

        #region Property RegisteredPerson : string
        private string _person;
        public string RegisteredPerson
        {
            get { return _person; }
            set { _person = value; }
        }
        #endregion

        #region Property RelationId : ID
        private int _relationId;
        public int RelationId
        {
            get { return _relationId; }
            set { _relationId = value; }
        }

        public Relation Relation { get; set; }
        //private Relation _relation;
        //public Relation Relation
        //{
        //    get
        //    {
        //        if (_relation == null)
        //        {
        //            _relation = Relation.Get(_relationId);
        //        }
        //        return _relation;
        //    }
        //}
        #endregion

        #region Property BirthDate : DateTime
        private DateTime _birthDate;
        public DateTime BirthDate
        {
            get { return _birthDate; }
            set { _birthDate = value; }
        }
        #endregion

        #region Property OccupationID : ID
        private int _occupationId;
        public int OccupationID
        {
            get { return _occupationId; }
            set { _occupationId = value; }
        }

        public Occupation Occupation { get; set; }

        //private Occupation _occupation;
        //public Occupation Occupation
        //{
        //    get
        //    {
        //        if (_occupation == null)
        //        {
        //            _occupation = Occupation.Get(_occupationId);
        //        }
        //        return _occupation;
        //    }
        //}
        #endregion

        #region Property Address : string
        private string _address;
        public string Address
        {
            get { return _address; }
            set { _address = value; }
        }
        #endregion

        #region Property Photograph : string
        private string _photograph;
        public string Photograph
        {
            get { return _photograph; }
            set { _photograph = value; }
        }
        #endregion

        #region Property Telephone : string
        private string _telephone;
        public string Telephone
        {
            get { return _telephone; }
            set { _telephone = value; }
        }
        #endregion
        #region Property Mobile : string
        private string _mobile;
        public string Mobile
        {
            get { return _mobile; }
            set { _mobile = value; }
        }
        #endregion

        #region Property Email : string
        private string _email;
        public string Email
        {
            get { return _email; }
            set { _email = value; }
        }
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }
        #endregion
    }
    #endregion

    #region EmpGuarantor
    
    public class EmpGuarantor : BasicBaseObject
    {
        #region Constructor
        public EmpGuarantor()
        {
            _employeeId = 0;
            _name = string.Empty;

            _occupationId = 0;
            Occupation = null;

            _address = string.Empty;
            _telephone = string.Empty;
            _guarantorMobile = string.Empty;
            _emailAddress = string.Empty;

            _categotyDocId = 0;
            CategotyDoc = null;

            _documentPath = string.Empty;
        }
        #endregion

        #region Properties
        #region Employee
        private int _employeeId;
        public int EmployeeID
        {
            get { return _employeeId; }
            set { _employeeId = value; }
        }
        #endregion

        #region Guarantor Name
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        #endregion

        #region Occupation
        private int _occupationId;
        public int OccupationID
        {
            get { return _occupationId; }
            set { _occupationId = value; Occupation = null; }
        }

        public Occupation Occupation { get; set; }
        //private Occupation _occupation;
        //public Occupation Occupation
        //{
        //    get
        //    {
        //        if (_occupation == null)
        //        {
        //            _occupation = Occupation.Get(_occupationId);
        //        }
        //        return _occupation;
        //    }
        //}
        #endregion

        #region CategotyDocId
        private int _categotyDocId;
        public int CategotyDocId
        {
            get { return _categotyDocId; }
            set { _categotyDocId = value; CategotyDoc = null; }
        }

        public GuarantorDocumentType CategotyDoc { get; set; }
        //private GuarantorDocumentType _categotyDoc;
        //public GuarantorDocumentType CategotyDoc
        //{
        //    get
        //    {
        //        if (_categotyDoc == null)
        //        {
        //            _categotyDoc = GuarantorDocumentType.Get(CategotyDocId);
        //        }
        //        return _categotyDoc;
        //    }
        //}
        #endregion

        #region Address
        private string _address;
        public string Address
        {
            get { return _address; }
            set { _address = value; }
        }
        #endregion

        #region Telephone
        private string _telephone;
        public string Telephone
        {
            get { return _telephone; }
            set { _telephone = value; }
        }
        #endregion

        #region Mobile
        private string _guarantorMobile;
        public string GuarantorMobile
        {
            get { return _guarantorMobile; }
            set { _guarantorMobile = value; }
        }
        #endregion

        #region Property EmailAddress : string
        private string _emailAddress;
        public string EmailAddress
        {
            get { return _emailAddress; }
            set { _emailAddress = value; }
        }
        #endregion

        #region DocumentPath
        private string _documentPath;
        public string DocumentPath
        {
            get { return _documentPath; }
            set { _documentPath = value; }
        }
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }
        #endregion
    }
    #endregion

    #region EmpLanguage
    public class EmpLanguage : BasicBaseObject
    {
        #region Constructor
        public EmpLanguage()
        {
            _languageName = String.Empty;
            _spokenStatus = EnumLanguageEfficiency.None;
            _writtenStatus = EnumLanguageEfficiency.None;
            _employeeID = 0;
        }
        #endregion

        #region Properties

        #region LanguageName : String
        private string _languageName;
        public string LanguageName
        {
            get { return _languageName; }
            set { _languageName = value; }
        }
        #endregion

        #region SpokenStatus : EnumLanguageEfficiency
        private EnumLanguageEfficiency _spokenStatus;
        public EnumLanguageEfficiency SpokenStatus
        {
            get { return _spokenStatus; }
            set { _spokenStatus = value; }
        }
        #endregion

        #region WrittenStatus : EnumLanguageEfficiency
        private EnumLanguageEfficiency _writtenStatus;
        public EnumLanguageEfficiency WrittenStatus
        {
            get { return _writtenStatus; }
            set { _writtenStatus = value; }
        }
        #endregion

        #region EmployeeID : ID
        private int _employeeID;
        public int EmployeeID
        {
            get { return _employeeID; }
            set { _employeeID = value; }
        }
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }

        #endregion
    }
    #endregion

    #region EmpRelative

    
    public class EmpRelative : BasicBaseObject
    {
        #region Constructor
        public EmpRelative()
        {
            _name = string.Empty;
            _designation = string.Empty;
            _relationID = 0;
            _joiningDate = DateTime.MinValue;
            _endDate = DateTime.MinValue;
            _employeeID = 0;
            _empNo = string.Empty;
        }
        #endregion

        #region Properties
        
        #region Name : String
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        #endregion

        #region Designation : String
        private string _designation;
        public string Designation
        {
            get { return _designation; }
            set { _designation = value; }
        }
        #endregion
        #region RelationID : ID
        private int _relationID;
        public int RelationID
        {
            get { return _relationID; }
            set { _relationID = value; }
        }
        #endregion

        #region JoiningDate : DateTime
        private DateTime _joiningDate;
        public DateTime JoiningDate
        {
            get { return _joiningDate; }
            set { _joiningDate = value; }
        }
        #endregion

        #region EndDate : DateTime
        //private DateTime? _endDate;
        //public DateTime? EndDate
        //{
        //    get { return _endDate; }
        //    set 
        //    {
        //        base.OnPropertyChange<DateTime>("EndDate", _endDate, value);
        //        _endDate = value; 
        //    }
        //}
        private DateTime _endDate;
        public DateTime EndDate
        {
            get { return _endDate; }
            set
            {
                _endDate = value;
            }
        }
        public string FromDateString
        {
            get { return _endDate.ToString("dd MMM yyyy"); }
        }



        #endregion

        #region EmpNo : String
        private string _empNo;
        public string EmpNo
        {
            get { return _empNo; }
            set { _empNo = value; }
        }
        #endregion

        #region EmployeeID : ID
        private int _employeeID;
        public int EmployeeID
        {
            get { return _employeeID; }
            set { _employeeID = value; }
        }
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }

        #endregion
    }
    #endregion

    #region EmpMembership
    public class EmpMembership : BasicBaseObject
    {
        #region Constructor
        public EmpMembership()
        {
            _organization = string.Empty;
            _activity = string.Empty;
            _fromDate = DateTime.MinValue;
            _endDate = DateTime.MinValue;
            _employeeID = 0;
            _organizationType = EnumOrganizationType.None;
        }
        #endregion

        #region Properties

        #region Organization : String
        private string _organization;
        public string Organization
        {
            get { return _organization; }
            set { _organization = value; }
        }
        #endregion

        #region Activity : String
        private string _activity;
        public string Activity
        {
            get { return _activity; }
            set { _activity = value; }
        }
        #endregion

        #region FromDate : DateTime
        private DateTime _fromDate;
        public DateTime FromDate
        {
            get { return _fromDate; }
            set { _fromDate = value; }
        }
        #endregion

        #region EndDate : DateTime
        private DateTime _endDate;
        public DateTime EndDate
        {
            get { return _endDate; }
            set
            {
                _endDate = value;
            }
        }
        public string FromDateString
        {
            get { return _endDate.ToString("dd MMM yyyy"); }
        }
        #endregion

        #region EmployeeID : int
        private int _employeeID;
        public int EmployeeID
        {
            get { return _employeeID; }
            set { _employeeID = value; }
        }
        #endregion

        #region Organization Type
        private EnumOrganizationType _organizationType;

        public EnumOrganizationType OrganizationType
        {
            get { return _organizationType; }
            set { _organizationType = value; }
        }

        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }

        #endregion
    }
    #endregion

    #region EmpRelation
    
    public class EmpRelation : BasicBaseObject
    {
        #region Constructor
        public EmpRelation()
        {
            _name = string.Empty;
            _relationID = 0;
            _occupationID = 0;
            _employeeID = 0;
            Occupation = null;
            Relation = null;
        }
        #endregion

        #region Properties

        #region Name : String
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        #endregion

        #region Relation : ID
        private int _relationID;
        public int RelationID
        {
            get { return _relationID; }
            set { _relationID = value; }
        }
        #endregion

        #region Occupation : ID
        private int _occupationID;
        public int OccupationID
        {
            get { return _occupationID; }
            set { _occupationID = value; }
        }
        #endregion

        #region EmployeeID : ID
        private int _employeeID;
        public int EmployeeID
        {
            get { return _employeeID; }
            set { _employeeID = value; }
        }
        #endregion

        public Occupation Occupation { get; set; }
        #region Occupation
        //private Occupation _occupation;
        //public Occupation Occupation
        //{
        //    get
        //    {
        //        if (_occupation == null)
        //        {
        //            if (_occupationID != null)
        //                _occupation = Occupation.Get(_occupationID);
        //        }
        //        return _occupation;
        //    }
        //}
        #endregion

        #region Relation
        public Relation Relation { get; set; }
        //private Relation _relation;
        //public Relation Relation
        //{
        //    get
        //    {
        //        if (_relation == null)
        //        {
        //            _relation = Relation.Get(_relationID);
        //        }
        //        return _relation;
        //    }
        //}
        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }

        #endregion
    }

    #endregion

    #region EmpHRQuestionAnswer
    public class EmpHRQuestionAnswer : BasicBaseObject
    {
        #region Constructor
        public EmpHRQuestionAnswer()
        {
            _questionaryID = 0;
            _questionNo = string.Empty;
            _qAnswer = string.Empty;
            _QuestionDes = string.Empty;
            _employeeID = 0;
            JoiningQuestionary = null;
        }
        #endregion

        #region Properties

        #region QuestionaryID : ID
        private int _questionaryID;
        public int QuestionaryID
        {
            get { return _questionaryID; }
            set { _questionaryID = value; }
        }
        #endregion

        #region QuestionNo : String
        private string _questionNo;
        public string QuestionNo
        {
            get { return _questionNo; }
            set { _questionNo = value; }
        }
        #endregion

        #region QAnswer : string
        private string _qAnswer;
        public string QAnswer
        {
            get { return _qAnswer; }
            set { _qAnswer = value; }
        }
        #endregion

        #region QuestionDes : string
        private string _QuestionDes;
        public string QuestionDes
        {
            get { return _QuestionDes; }
            set { _QuestionDes = value; }
        }
        #endregion

        #region EmployeeID : ID
        private int _employeeID;
        public int EmployeeID
        {
            get { return _employeeID; }
            set { _employeeID = value; }
        }
        #endregion

        #region HRJoiningQuestionary Property
        public HRJoiningQuestionary JoiningQuestionary { get; set; }

        //private HRJoiningQuestionary _joiningQuestionary;
        //public HRJoiningQuestionary JoiningQuestionary
        //{
        //    get
        //    {
        //        if (_joiningQuestionary == null)
        //        {
        //            _joiningQuestionary = new HRJoiningQuestionary();
        //            if (!this.ID.IsUnassigned)
        //                _joiningQuestionary = HRJoiningQuestionary.Service.Get(QuestionaryID);
        //        }
        //        return _joiningQuestionary;
        //    }
        //    set { _joiningQuestionary = value; }
        //}

        #endregion
        public EnumProfileStatus ProfileStatus { get; set; }

        #endregion
    }

    #endregion

    public class empFileupload : BasicBaseObject
    {
        public int employeeID { get; set; }
        public enumEmpFileUploadType filetype { get; set; }

        public int referenceID {get;set;}
        public string fileName { get; set; }
        public EnumFileFormat? FileFormat { get; set; }
        public object fileData { get; set; }
         
    }

    #endregion

    #region Interface IHREmployeeService
    public interface IHREmployeeService
    {
        #region Child's function definitions

        List<EmpCreditCard> GetEmpCreditCard(int iD);
        List<EmpContact> GetEmpContacts(int id);
        List<EmpContact> GetEmpContacts();
        void SaveMultipleEmployeeContacts(List<EmpContact> oEmpContacts);
        List<EmpSpouse> GetEmpSpouses(int id);
        List<EmpChildren> GetEmpChildrens(int id);
        //List<EmpChildren> GetEmpChildrens(ID id);
        List<EmpPublication> GetEmpPublications(int id);
        List<EmpReference> GetEmpReferences(int id);
        List<EmpExperience> GetEmpExperiences(int empId);
        List<EmpTraining> GetEmpTrainings(int id);
        List<EmpNominee> GetEmpNominees(int id);
        DataTable GetNomineesForEss(int employeeId);
        DataTable GetTrainingForEss(int employeeId);
        List<EmpAcademic> GetEmpAcademics(int id);
        DataSet GetSelfServiceAcademic(int employeeId);
        DataSet GetSelfServiceFamilyInfo(int employeeId);
        List<EmpAchievement> GetEmpAchievements(int id);
        List<EmpCurricularActivity> GetEmpCurricularActivitys(int id);
        List<EmpOtherTalent> GetEmpOtherTalents(int id);
        List<EmpHobby> GetEmpHobbys(int id);
        List<EmpAllergy> GetEmpAllergys(int id);
        List<EmpHospitalization> GetEmpHospitalizations(int id);
        List<EmpGuarantor> GetEmpGuarantors(int id);
        List<EmpLanguage> GetEmpLanguages(int id);
        List<EmpRelative> GetEmpRelatives(int id);
        List<EmpMembership> GetEmpMemberships(int id);
        List<EmpRelation> GetEmpRelations(int id);
        List<EmpRelation> GetAllEmpRelations();
        List<EmpHRQuestionAnswer> GetEmpHRQuestionAnswers(int id);
        int SaveEmpNominee(EmpNominee nominee);
 
        #endregion

        #region parent's function definition

        HREmployee Get(int id);
        HREmployee SavePersonalInfo(HREmployee employee);
        void SaveEmployeeProfileUpload(List<HREmployee> oHREmployee);
        void DeleteChildData(string tableName, string columnName, int id);
        List<HREmployee> GetAllHREmps();
        //HREmployee GetByEmployeeNo(string empNo);
        DataSet GetSubordinatesDataset(int nodeID, string AdditionalSQL);
        DataSet GetEmployeesDataset(string query);
        List<empFileupload> GetAllAttachmentsById(int empid);
        List<HREmployee> GetGroupEmployees();
        List<HREmployee> GetUserGroups();
        List<HREmployee> GetEmployeeByIds(string ids);
        string GetSubordinateIDs(int nodeID);
        List<HREmployee> GetEmployees(string query);
        //previously Get
        List<HREmployee> GetWithPayrollType(int payrollTypeID);
        bool IsEmployeeNoExist(string empNo);
        bool IsNickNameExists(string nickName);
        bool IsExists(string sSearch);
        LogInStatus IsValidateForDesktop(string empNo, string password, ref HREmployee employee);
        int Save(HREmployee employee, int candidateId);
        void Save(List<HREmployee> oEmployees);
        int Save(HREmployee employee);
        int SaveEmpTraining(EmpTraining empTraining);
        int  SaveContact(EmpContact contactInfo);
        int Savechildren(EmpChildren item);
        int SaveSpouce(EmpSpouse item);
        int SaveExperience(EmpExperience item);
        int SaveAcademic(EmpAcademic item);

        void UpdateEmpWithoutChild(HREmployee employee);
        void UpdatePassword(string password, int id);
        void UpdateStatus(int employeeID, EnumEmployeeStatus status);
        void UpdateUserGroup(HREmployee item);
        void Delete(int id);
        List<int> GetMaritalStats();
        List<int> GetEmployeeMaleStatByAge();
        List<int> GetEmployeeFemaleStatByAge();
        List<dynamic> GetChildrenCount();
        List<dynamic> GetAcademicStat();
        int GetProfileCompletePercentage(int empId);

        void uplaodFile(empFileupload item);
        void UplaodFileInProfileUpdate(empFileupload item);
        empFileupload getuploadedFile(int empid, int referenceID, enumEmpFileUploadType type);
        empFileupload GetuploadedFileInProfileUpdate(int empid, int referenceID, enumEmpFileUploadType type);
        void ApproveUplaodFileInProfileUpdate(empFileupload item);
        empFileupload GetAttachmentsByType(int empid, int refId, enumEmpFileUploadType type);

        #endregion


    }
    #endregion
    #endregion
    #endregion
    #endregion
}