PageRenderTime 40ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/app/Http/Controllers/EmployeeController.php

https://bitbucket.org/ahmed121446/hrsystem
PHP | 277 lines | 196 code | 25 blank | 56 comment | 13 complexity | 830048d0d105e4f9b7c4eb3481c9bb1b MD5 | raw file
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Hash;
  5. use App\User;
  6. use App\Salary;
  7. use App\Recruitment;
  8. use App\SocialStatus;
  9. use App\FamilyMember;
  10. use App\JobTitle;
  11. use App\UserType;
  12. use App\City;
  13. use App\Country;
  14. use App\Skill;
  15. use App\SkillLevel;
  16. use App\UserSkill;
  17. use Carbon\Carbon;
  18. use App\Http\Requests\EmployeeRequest;
  19. use App\Http\Requests\UserPasswordRequest;
  20. use App\Http\Requests\UserSkillRequest;
  21. use App\Repositories\Backend\EmployeeRepository;
  22. class EmployeeController extends Controller
  23. {
  24. /**
  25. * Display a listing of the resource.
  26. *
  27. * @return \Illuminate\Http\Response
  28. */
  29. public function index()
  30. {
  31. $employees = User::with(['type','jobTitle','jobTitle.department','supervisor'])
  32. ->Employees()
  33. ->filterName( request('name') )
  34. ->filterEmail( request('email') )
  35. ->filterNationalId( request('national_id') )
  36. ->filterDepartment( request('dept_name') )
  37. ->filterJopTitle( request('jopTitle') )
  38. ->filterSupervisorName( request('supervisor') )
  39. ->paginate(10);
  40. return view('user.employees.all',compact('employees'));
  41. }
  42. /**
  43. * Show the form for creating a new resource.
  44. *
  45. * @return \Illuminate\Http\Response
  46. */
  47. public function create()
  48. {
  49. $jobTitles = JobTitle::all();
  50. $employees = User::all();
  51. $countries = Country::all();
  52. $types = UserType::all();
  53. return view('user.employees.create', compact('jobTitles','employees','countries','types'));
  54. }
  55. /**
  56. * Show the form for change password.
  57. *
  58. * @return \Illuminate\Http\Response
  59. */
  60. public function passwordChangeView($id){
  61. $user = User::find($id);
  62. if (!$user) {
  63. $this->flash('User can not be found' , 'danger');
  64. return redirect()->back();
  65. }
  66. if ($user->id == auth()->user()->id) {
  67. return view('user.password.edit',compact('user'));
  68. }else{
  69. $this->flash('you are not authorized' , 'danger');
  70. return redirect()->back();
  71. }
  72. }
  73. public function passwordChange(UserPasswordRequest $request , $id){
  74. $user = User::find($id);
  75. $pass = \Auth::user()->password;
  76. $pass_entered = $request->get('old_password');
  77. if (!Hash::check( $pass_entered, $pass )) {
  78. $this->flash('old password is not correct' , 'danger');
  79. return redirect()->back();
  80. }else{
  81. $update = $user->update(['password' => bcrypt($pass_entered)]);
  82. if (!$update) {
  83. $this->flash('can not update password' , 'danger');
  84. return redirect()->back();
  85. }else{
  86. $this->flash('password updated successfully' , 'success');
  87. return redirect()->route('employee',$user->id);
  88. }
  89. }
  90. }
  91. /**
  92. * Store a newly created resource in storage.
  93. *
  94. * @param \Illuminate\Http\Request $request
  95. * @return \Illuminate\Http\Response
  96. */
  97. public function store(EmployeeRequest $request , EmployeeRepository $repository)
  98. {
  99. $image = $repository->storeUserImage($request);
  100. $is_valid_age = $repository->ageValidation($request);
  101. if(!$is_valid_age){
  102. $this->flash('Age' , 'danger','Diff between hiring date and date of birth must more that 15 years');
  103. return redirect()->back();
  104. }
  105. $supervisor = User::where('id',$request->get('supervisor_id'))->first();
  106. if(!$supervisor){
  107. $this->flash('supervisor can not be added' , 'danger');
  108. return redirect()->back();
  109. }
  110. $user = User::create([
  111. 'job_title_id' => $request->get('job_title_id'),
  112. 'name_en' => $request->get('name_en'),
  113. 'name_ar' => $request->get('name_ar'),
  114. 'national_id' => $request->get('national_id'),
  115. 'email' => $request->get('email'),
  116. 'address' => $request->get('address'),
  117. 'password' => bcrypt('111111111'),
  118. 'default_password' => bcrypt('111111111'),
  119. 'dob' => $request->get('dob'),
  120. 'total_vacation_days' => $request->get('total_vacation_days'),
  121. 'years_of_experience' => $request->get('years_of_experience'),
  122. 'supervisor_id' => $request->get('supervisor_id'),
  123. 'mobile_number' => $request->get('mobile_number'),
  124. 'rank' => $request->get('rank'),
  125. 'gender' => $request->get('gender'),
  126. 'country_id' => $request->get('country'),
  127. 'type_id' => $request->get('employee_type'),
  128. 'start_hire_date' => $request->get('start_hire_date'),
  129. 'social_insurance_Number' => $request->get('social_insurance_Number'),
  130. "image" => $image,
  131. ]);
  132. $socialStatus = SocialStatus::create([
  133. 'user_id' => $user->id,
  134. 'is_bread_winner' => ( $request->has('is_bread_winner') ) ? true : false ,
  135. ]);
  136. if(!$user){
  137. $this->flash('employee can not be added' , 'danger');
  138. }else{
  139. $this->flash('employee added successfully' , 'success');
  140. }
  141. return redirect()->back();
  142. }
  143. /**
  144. * Display the specified resource.
  145. *
  146. * @param int $id
  147. * @return \Illuminate\Http\Response
  148. */
  149. public function show($id)
  150. {
  151. // $employee = User::with(['type','city','city.country',
  152. // 'userSkills','jobTitle',
  153. // 'jobTitle.department','socialStatus'
  154. // ])->where('id',$id)
  155. // //->employees()
  156. // ->first();
  157. $employee = User::with(['type','country',
  158. 'userSkills','jobTitle',
  159. 'jobTitle.department','socialStatus'
  160. ])->where('id',$id)
  161. //->employees()
  162. ->first();
  163. if (!$employee) {
  164. $this->flash('employee can not be found , it could be admin or super admin' , 'danger');
  165. return redirect()->back();
  166. }
  167. $contracts = $employee->contracts()->orderBy('is_active','desc')->paginate(8, ['*'], 'Contract_page');
  168. $experiences = $employee->experiences()->orderBy('start_date','desc')->paginate(8, ['*'], 'Experiance_page');
  169. $certificates = $employee->certificates()->orderBy('date','desc')->paginate(8, ['*'], 'Certificate_page');
  170. $recruitment = Recruitment::where('user_id',$id)->first();
  171. $familyMembers = $employee->socialStatus->familyMembers()->paginate(8, ['*'], 'Family_page');
  172. $salaries_ids = [];
  173. $all_contracts = $employee->contracts;
  174. foreach ($all_contracts as $contract ) {
  175. foreach ($contract->salaries as $salary ) {
  176. array_push($salaries_ids,$salary->id);
  177. }
  178. }
  179. $salaries = Salary::with('contract')->whereIn('id',$salaries_ids)->latest()->get();
  180. return view('user.employees.show',compact('employee','contracts','experiences','certificates','recruitment','familyMembers','salaries'));
  181. }
  182. /**
  183. * Show the form for editing the specified resource.
  184. *
  185. * @param int $id
  186. * @return \Illuminate\Http\Response
  187. */
  188. public function edit($id)
  189. {
  190. //
  191. }
  192. /**
  193. * Update the specified resource in storage.
  194. *
  195. * @param \Illuminate\Http\Request $request
  196. * @param int $id
  197. * @return \Illuminate\Http\Response
  198. */
  199. public function update(Request $request, $id)
  200. {
  201. //
  202. }
  203. /**
  204. * Remove the specified resource from storage.
  205. *
  206. * @param int $id
  207. * @return \Illuminate\Http\Response
  208. */
  209. public function destroy($id)
  210. {
  211. //
  212. }
  213. public function createSkill($id)
  214. {
  215. $employee = User::find($id);
  216. if (!$employee) {
  217. $this->flash('employee can not be found' , 'danger');
  218. return redirect()->back();
  219. }
  220. $skills = Skill::all();
  221. $skillLevels = SkillLevel::all();
  222. return view('user.employees.create_user_skill',compact('employee','skills','skillLevels'));
  223. }
  224. public function storeSkill(UserSkillRequest $request)
  225. {
  226. $user_skill = UserSkill::create([
  227. 'user_id' => $request->get('user_id'),
  228. 'skill_id' => $request->get('skill'),
  229. 'skill_level_id' => $request->get('skill_level'),
  230. 'date_acquired' => $request->get('date_acquired'),
  231. ]);
  232. if(!$user_skill){
  233. $this->flash('user skill can not be added' , 'danger');
  234. }else{
  235. $this->flash('user skill added successfully' , 'success');
  236. }
  237. return redirect()->back();
  238. }
  239. public function team($id){
  240. $employee = User::find($id);
  241. if (!$employee) {
  242. $this->flash('supervisor can not be found' , 'danger');
  243. return redirect()->back();
  244. }
  245. if (!$employee->isSupervisor()) {
  246. $this->flash('not supervisor' , 'warning');
  247. return redirect()->back();
  248. }
  249. $team = User::supervisorTeam($employee->id)->paginate(10);
  250. return view('user.supervisor.team',compact('employee','team'));
  251. }
  252. }