package proto import ( "reflect" ) type EmployeeField string const ( FieldEmpID EmployeeField = "EmpId" FieldNamePrefix = "NamePrefix" FieldFirstName = "FirstName" FieldMiddleInitial = "MiddleInitial" FieldLastName = "LastName" FieldGender = "Gender" FieldEmail = "Email" FieldFathersName = "FathersName" FieldMothersName = "MothersName" FieldMothersMaidenName = "MothersMaidenName" FieldBirthdate = "Birthdate" FieldBirthTime = "BirthTime" FieldWeightKg = "WeightKg" FieldJoiningDate = "JoiningDate" FieldJoiningQuarter = "JoiningQuarter" FieldJoiningHalf = "JoiningHalf" FieldJoiningYear = "JoiningYear" FieldJoiningMonth = "JoiningMonth" FieldJoiningMonthName = "JoiningMonthName" FieldJoiningMonthNameShort = "JoiningMonthNameShort" FieldJoiningMonthDay = "JoiningMonthDay" FieldJoiningWeekDay = "JoiningWeekDay" FieldJoiningWeekDayShort = "JoiningWeekDayShort" FieldYearsOfService = "YearsOfService" FieldSalary = "Salary" FieldLatestHikePercentage = "LatestHikePercentage" FieldSsn = "Ssn" FieldPhoneNumber = "PhoneNumber" FieldPlaceName = "PlaceName" FieldCounty = "County" FieldCity = "City" FieldState = "State" FieldZip = "Zip" FieldRegion = "Region" FieldUsername = "Username" FieldPassword = "Password" ) func (e *Employee) Copy() Employee { return Employee{ EmpId: e.GetEmpId(), NamePrefix: e.GetNamePrefix(), FirstName: e.GetFirstName(), MiddleInitial: e.GetMiddleInitial(), LastName: e.GetLastName(), Gender: e.GetGender(), Email: e.GetEmail(), FathersName: e.GetFathersName(), MothersName: e.GetMothersName(), MothersMaidenName: e.GetMothersMaidenName(), Birthdate: e.GetBirthdate(), BirthTime: e.GetBirthTime(), WeightKg: e.GetWeightKg(), JoiningDate: e.GetJoiningDate(), JoiningQuarter: e.GetJoiningQuarter(), JoiningHalf: e.GetJoiningHalf(), JoiningYear: e.GetJoiningYear(), JoiningMonth: e.GetJoiningMonth(), JoiningMonthName: e.GetJoiningMonthName(), JoiningMonthNameShort: e.GetJoiningMonthNameShort(), JoiningMonthDay: e.GetJoiningMonthDay(), JoiningWeekDay: e.GetJoiningWeekDay(), JoiningWeekDayShort: e.GetJoiningWeekDayShort(), YearsOfService: e.GetYearsOfService(), Salary: e.GetSalary(), LatestHikePercentage: e.GetLatestHikePercentage(), Ssn: e.GetSsn(), PhoneNumber: e.GetPhoneNumber(), PlaceName: e.GetPlaceName(), County: e.GetCounty(), City: e.GetCity(), State: e.GetState(), Zip: e.GetZip(), Region: e.GetRegion(), Username: e.GetUsername(), Password: e.GetPassword(), } } func (el *EmployeeList) QueryEmployeesByColumn(column EmployeeField, query string) ([]*Employee, error) { employees := make([]*Employee, 0) for _, employee := range el.GetEmployees() { value := reflect.ValueOf(employee).Elem().FieldByName(string(column)) if value.String() == query { employees = append(employees, employee) } } return employees, nil }