From c445c52fef8d7014fc91c5514a66462a3715ddce Mon Sep 17 00:00:00 2001 From: mitrevski Date: Tue, 30 May 2017 17:10:15 +0200 Subject: [PATCH 01/65] Create job advert --- .../Http/Controllers/JobAdvertController.php | 96 +++++++++++++++ .../Http/Requests/JobAdvertRequest.php | 35 ++++++ app/Modules/Recruitment/Models/JobAdvert.php | 17 +++ .../JobAdvertRepositoryInterface.php | 7 ++ .../Repositories/JobAdvertRepository.php | 20 ++++ .../resources/views/index.blade.php | 5 + .../views/job_advert/_form.blade.php | 51 ++++++++ .../views/job_advert/create.blade.php | 13 +++ .../views/job_advert/index.blade.php | 109 ++++++++++++++++++ app/Providers/RepositoryServiceProvider.php | 1 + ...7_05_30_105051_create_job_advert_table.php | 37 ++++++ resources/lang/en/app.php | 32 +++++ routes/breadcrumbs.php | 29 ++++- routes/web.php | 11 ++ 14 files changed, 462 insertions(+), 1 deletion(-) create mode 100644 app/Modules/Recruitment/Http/Controllers/JobAdvertController.php create mode 100644 app/Modules/Recruitment/Http/Requests/JobAdvertRequest.php create mode 100644 app/Modules/Recruitment/Models/JobAdvert.php create mode 100644 app/Modules/Recruitment/Repositories/Interfaces/JobAdvertRepositoryInterface.php create mode 100644 app/Modules/Recruitment/Repositories/JobAdvertRepository.php create mode 100644 app/Modules/Recruitment/resources/views/job_advert/_form.blade.php create mode 100644 app/Modules/Recruitment/resources/views/job_advert/create.blade.php create mode 100644 app/Modules/Recruitment/resources/views/job_advert/index.blade.php create mode 100644 database/migrations/2017_05_30_105051_create_job_advert_table.php diff --git a/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php b/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php new file mode 100644 index 0000000..88109fd --- /dev/null +++ b/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php @@ -0,0 +1,96 @@ +jobAdvertRepository = $jobAdvertRepository; + } + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + // + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + return view('recruitment::job_advert.create'); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(JobAdvertRequest $request) + { + $jobData = $request->all(); + $jobData = $this->jobAdvertRepository->create($jobData); + $request->session()->flash('success', trans('app.pim.job_advert.store_success')); + return redirect()->route('recruitment.job_advert.edit', $jobData->id); } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + // + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} diff --git a/app/Modules/Recruitment/Http/Requests/JobAdvertRequest.php b/app/Modules/Recruitment/Http/Requests/JobAdvertRequest.php new file mode 100644 index 0000000..c478367 --- /dev/null +++ b/app/Modules/Recruitment/Http/Requests/JobAdvertRequest.php @@ -0,0 +1,35 @@ + ['required'], + 'image' => ['required'] + ]; + + return $rules; + } +} diff --git a/app/Modules/Recruitment/Models/JobAdvert.php b/app/Modules/Recruitment/Models/JobAdvert.php new file mode 100644 index 0000000..669b693 --- /dev/null +++ b/app/Modules/Recruitment/Models/JobAdvert.php @@ -0,0 +1,17 @@ +model = $model; + } +} diff --git a/app/Modules/Recruitment/resources/views/index.blade.php b/app/Modules/Recruitment/resources/views/index.blade.php index a1f542e..12dff30 100644 --- a/app/Modules/Recruitment/resources/views/index.blade.php +++ b/app/Modules/Recruitment/resources/views/index.blade.php @@ -6,5 +6,10 @@

{{trans('app.recruitment.reports.main')}}

+
+ +

{{trans('app.recruitment.job_advert.main')}}

+
+
@endsection \ No newline at end of file diff --git a/app/Modules/Recruitment/resources/views/job_advert/_form.blade.php b/app/Modules/Recruitment/resources/views/job_advert/_form.blade.php new file mode 100644 index 0000000..f63d278 --- /dev/null +++ b/app/Modules/Recruitment/resources/views/job_advert/_form.blade.php @@ -0,0 +1,51 @@ +
+ {!! Form::label('title', trans('app.recruitment.job_advert.title').':', ['class' => 'col-sm-3']) !!} +
+ {!! Form::text('title', null, ['class' => 'form-control']) !!} +
+
+
+ {!! Form::label('description', trans('app.recruitment.job_advert.description').':', ['class' => 'col-sm-3']) !!} +
+ {!! Form::textarea('description', null, ['class' => 'form-control']) !!} +
+
+
+ {!! Form::label('skills', trans('app.recruitment.job_advert.skills').':', ['class' => 'col-sm-3']) !!} +
+ {!! Form::textarea('skills', null, ['class' => 'form-control']) !!} +
+
+
+ {!! Form::label('advantages', trans('app.recruitment.job_advert.advantages').':', ['class' => 'col-sm-3']) !!} +
+ {!! Form::textarea('advantages', null, ['class' => 'form-control']) !!} +
+
+
+ {!! Form::label('responsibilities', trans('app.recruitment.job_advert.responsibilities').':', ['class' => 'col-sm-3']) !!} +
+ {!! Form::textarea('responsibilities', null, ['class' => 'form-control']) !!} +
+
+
+ {!! Form::label('benefits', trans('app.recruitment.job_advert.benefits').':', ['class' => 'col-sm-3']) !!} +
+ {!! Form::textarea('benefits', null, ['class' => 'form-control']) !!} +
+
+
+ {!! Form::label('image', trans('app.recruitment.job_advert.image').':', ['class' => 'col-sm-3']) !!} +
+ {!! Form::file('image', null, ['class' => 'form-control']) !!} +
+
+ +@include('errors._form-errors') +
+
+
+ {{trans('app.cancel')}} + {!! Form::submit($submitName, ['class' => 'btn btn-primary']) !!} +
+
\ No newline at end of file diff --git a/app/Modules/Recruitment/resources/views/job_advert/create.blade.php b/app/Modules/Recruitment/resources/views/job_advert/create.blade.php new file mode 100644 index 0000000..2d1d702 --- /dev/null +++ b/app/Modules/Recruitment/resources/views/job_advert/create.blade.php @@ -0,0 +1,13 @@ +@extends('layouts.main') +@section('content') +
+
+
+
{{trans('app.recruitment.job_advert.add_new')}}
+ {!! Form::open(['route' => 'recruitment.job_advert.store', 'class' => 'form-horizontal', 'files'=>true, 'enctype' => 'multipart/form-data']) !!} + @include('recruitment::job_advert._form', ['submitName' => trans('app.submit')]) + {!! Form::close() !!} +
+
+
+@endsection \ No newline at end of file diff --git a/app/Modules/Recruitment/resources/views/job_advert/index.blade.php b/app/Modules/Recruitment/resources/views/job_advert/index.blade.php new file mode 100644 index 0000000..27ac711 --- /dev/null +++ b/app/Modules/Recruitment/resources/views/job_advert/index.blade.php @@ -0,0 +1,109 @@ +@extends('layouts.main') +@section('content') +
+
+
+
{{trans('app.filter')}}
+ {{Form::model($inputs, ['method' => 'get'])}} +
+
+ {!! Form::label('first_name', trans('app.recruitment.reports.first_name').':') !!} + {!! Form::text('first_name', null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.first_name')]) !!} +
+
+ {!! Form::label('last_name', trans('app.recruitment.reports.last_name').':') !!} + {!! Form::text('last_name', null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.last_name')]) !!} +
+
+ {!! Form::label('email', trans('app.recruitment.reports.email').':') !!} + {!! Form::text('email', null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.email')]) !!} +
+
+ {!! Form::label('skills', trans('app.recruitment.reports.skills').':') !!} + {!! Form::select('skills[]', $allSkills, null, ['id' => 'skills', 'class' => 'form-control', 'multiple' => 'multiple']) !!} +
+
+ {!! Form::label('salary_from', trans('app.recruitment.reports.salary_range').':') !!} +
+
+ {!! Form::text('salary_from', null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.min_salary')]) !!} +
+
+ {!! Form::text('salary_to', null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.max_salary')]) !!} +
+
+
+
+ {!! Form::label('contract_type_id', trans('app.recruitment.reports.contract_type').':') !!} + {!! Form::select('contract_type_id', $contractTypes, null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.contract_type')]) !!} +
+
+ {!! Form::label('location', trans('app.recruitment.reports.location').':') !!} + {!! Form::select('location', locations(), null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.location')]) !!} +
+
+
+
+ {!! Form::submit(trans('app.filter'), ['class' => 'btn btn-primary pull-right']) !!} +
+
+ {{Form::close()}} +
+
+
+
+
+
+
{{trans('app.recruitment.reports.main')}}
+ + + + + + + + + + + + + +
{{trans('app.recruitment.reports.first_name')}}{{trans('app.recruitment.reports.last_name')}}{{trans('app.recruitment.reports.email')}}{{trans('app.recruitment.reports.phone')}}{{trans('app.recruitment.reports.skills')}}{{trans('app.recruitment.reports.salary')}}{{trans('app.recruitment.reports.contract_type')}}{{trans('app.recruitment.reports.location')}}{{trans('app.recruitment.reports.comments')}}
+
+
+
+@endsection +@section('additionalCSS') + + +@endsection +@section('additionalJS') + + + +@endsection \ No newline at end of file diff --git a/app/Providers/RepositoryServiceProvider.php b/app/Providers/RepositoryServiceProvider.php index 40551d5..12da079 100644 --- a/app/Providers/RepositoryServiceProvider.php +++ b/app/Providers/RepositoryServiceProvider.php @@ -25,6 +25,7 @@ public function register() Settings\Repositories\SalaryComponentsRepository::class => [Settings\Repositories\Interfaces\SalaryComponentsRepositoryInterface::class], Pim\Repositories\EmployeeRepository::class => [Pim\Repositories\Interfaces\EmployeeRepositoryInterface::class], Pim\Repositories\CandidateRepository::class => [Pim\Repositories\Interfaces\CandidateRepositoryInterface::class], + Recruitment\Repositories\JobAdvertRepository::class => [Recruitment\Repositories\Interfaces\JobAdvertRepositoryInterface::class], Pim\Repositories\EmployeeSocialMediaRepository::class => [Pim\Repositories\Interfaces\EmployeeSocialMediaRepositoryInterface::class], Pim\Repositories\EmployeeContactDetailsRepository::class => [Pim\Repositories\Interfaces\EmployeeContactDetailsRepositoryInterface::class], Pim\Repositories\EmployeeWorkExperienceRepository::class => [Pim\Repositories\Interfaces\EmployeeWorkExperienceRepositoryInterface::class], diff --git a/database/migrations/2017_05_30_105051_create_job_advert_table.php b/database/migrations/2017_05_30_105051_create_job_advert_table.php new file mode 100644 index 0000000..909755c --- /dev/null +++ b/database/migrations/2017_05_30_105051_create_job_advert_table.php @@ -0,0 +1,37 @@ +increments('id'); + $table->string('title', 255); + $table->text('description'); + $table->text('skills')->nullable(); + $table->text('advantages')->nullable(); + $table->text('responsibilities')->nullable(); + $table->text('benefits')->nullable(); + $table->string('image', 255); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('job_advert'); + } +} diff --git a/resources/lang/en/app.php b/resources/lang/en/app.php index 3ead3a2..d3f203c 100644 --- a/resources/lang/en/app.php +++ b/resources/lang/en/app.php @@ -335,6 +335,38 @@ ], 'recruitment' => [ 'main' => 'Recruitment', + 'job_advert' => [ + 'main' => 'Job Advertisement', + 'add_new' => 'Add job advertisement', + 'title' => 'Job title', + 'description' => 'Job description', + 'skills' => 'Required skills', + 'advantages' => 'Advantages', + 'responsibilities' => 'Responsibilities', + 'benefits' => 'Benefits', + 'image' => 'Image', + 'edit_details' => 'Edit job advertisement details', + 'store_success' => 'The job advertisement was successfully added.', + 'update_success' => 'The job advertisement details were successfully updated.', + 'delete_success' => 'The job advertisement was successfully removed.', + 'additional' => 'Additional details', + 'preferences' => [ + 'main' => 'Preferences and expectations', + 'add_new' => 'Add preferences', + 'edit_details' => 'Edit preferences', + 'salary' => 'Minimal salary', + 'contract_type' => 'Contract type', + 'comments' => 'Comments', + 'location' => [ + 'main' => 'Location', + 'remote' => 'Remote', + 'inhouse' => 'Inhouse' + ], + 'store_success' => 'The candidate preferences were successfully added.', + 'update_success' => 'The candidate preferences were successfully updated.', + 'delete_success' => 'The candidate preferences were successfully removed.', + ] + ], 'reports' => [ 'main' => 'Reports', 'first_name' => 'First name', diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 3784af6..488959f 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -331,9 +331,36 @@ }); /** - * Candidates breadcrumbs start here + * JobAdvert breadcrumbs start here */ +Breadcrumbs::register('recruitment.job_advert.index', function($breadcrumbs) +{ + $breadcrumbs->parent('recruitment.index'); + $breadcrumbs->push(trans('app.recruitment.job_advert.main'), route('recruitment.job_advert.index')); +}); + +// Home > PIM > JobAdvert > Create +Breadcrumbs::register('recruitment.job_advert.create', function($breadcrumbs) +{ + $breadcrumbs->parent('recruitment.job_advert.index'); + $breadcrumbs->push(trans('app.add_record'), route('recruitment.job_advert.create')); +}); + +// Home > PIM > JobAdvert > Edit +Breadcrumbs::register('recruitment.job_advert.edit', function($breadcrumbs, $breadcrumb) +{ + $breadcrumbs->parent('recruitment.job_advert.index'); + $breadcrumbs->push(trans('app.edit').': '.$breadcrumb['title'], route('recruitment.job_advert.edit', $breadcrumb['id'])); +}); + +// Home > PIM > JobAdvert > Details +Breadcrumbs::register('recruitment.job_advert.show', function($breadcrumbs, $breadcrumb) +{ + $breadcrumbs->parent('recruitment.job_advert.index'); + $breadcrumbs->push($breadcrumb['title'], route('recruitment.job_advert.show', $breadcrumb['id'])); +}); + /** * Employees breadcrumbs start here */ diff --git a/routes/web.php b/routes/web.php index 3b79434..5c98d34 100644 --- a/routes/web.php +++ b/routes/web.php @@ -166,6 +166,7 @@ 'destroy' => 'candidates.destroy' ]]); + Route::group(['prefix' => 'profile/{employeeId}', 'as' => 'employees.'], function($employeeId) { Route::resource('social-media', '\App\Modules\Pim\Http\Controllers\EmployeeSocialMediaController', ['names' => [ 'index' => 'social_media.index', @@ -353,6 +354,16 @@ Route::get('reports/datatable', '\App\Modules\Recruitment\Http\Controllers\ReportsController@getDatatable') ->name('reports.datatable'); + Route::resource('job_advert', '\App\Modules\Recruitment\Http\Controllers\JobAdvertController', ['names' => [ + 'index' => 'job_advert.index', + 'create' => 'job_advert.create', + 'show' => 'job_advert.show', + 'edit' => 'job_advert.edit', + 'store' => 'job_advert.store', + 'update' => 'job_advert.update', + 'destroy' => 'job_advert.destroy' + ]]); + Route::resource('reports', '\App\Modules\Recruitment\Http\Controllers\ReportsController', ['names' => [ 'index' => 'reports.index', 'create' => 'reports.create', From 89b44869dae6bc649f6ae4f28025e985d2f0483b Mon Sep 17 00:00:00 2001 From: Stefan Mitrevski Date: Wed, 31 May 2017 17:11:22 +0200 Subject: [PATCH 02/65] Job advert main view without actions --- .../Http/Controllers/JobAdvertController.php | 21 +++- .../Http/Requests/JobAdvertRequest.php | 2 +- app/Modules/Recruitment/Models/JobAdvert.php | 5 +- .../views/job_advert/index.blade.php | 110 ++++++------------ app/Providers/RepositoryServiceProvider.php | 2 +- ...7_05_30_105051_create_job_advert_table.php | 3 +- resources/lang/en/app.php | 17 --- routes/web.php | 2 + storage/.DS_Store | Bin 9 files changed, 59 insertions(+), 103 deletions(-) mode change 100644 => 100755 storage/.DS_Store diff --git a/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php b/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php index 88109fd..9d188df 100644 --- a/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php +++ b/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php @@ -23,7 +23,24 @@ public function __construct(JobAdvertRepository $jobAdvertRepository) */ public function index() { - // + return view('recruitment::job_advert.index'); + } + /** + * Return data for the resource list + * + * @return \Illuminate\Http\Response + */ + public function getDatatable() + { + return Datatables::of($this->jobAdvertRepository->getQry( + [], + ['id', 'title', 'description']))->addColumn('actions', function($JobAdvert){ + return view('includes._datatable_actions', [ + 'deleteUrl' => route('recruitment.job_advert.destroy', $JobAdvert->id ), + 'editUrl' => route('recruitment.job_advert.edit', $JobAdvert->id) + ]); + }) + ->make(); } /** @@ -46,7 +63,7 @@ public function store(JobAdvertRequest $request) { $jobData = $request->all(); $jobData = $this->jobAdvertRepository->create($jobData); - $request->session()->flash('success', trans('app.pim.job_advert.store_success')); + $request->session()->flash('success', trans('app.recruitment.job_advert.store_success')); return redirect()->route('recruitment.job_advert.edit', $jobData->id); } /** diff --git a/app/Modules/Recruitment/Http/Requests/JobAdvertRequest.php b/app/Modules/Recruitment/Http/Requests/JobAdvertRequest.php index c478367..28cf7ab 100644 --- a/app/Modules/Recruitment/Http/Requests/JobAdvertRequest.php +++ b/app/Modules/Recruitment/Http/Requests/JobAdvertRequest.php @@ -27,7 +27,7 @@ public function rules() { $rules = [ 'title' => ['required'], - 'image' => ['required'] + 'description' => ['required'] ]; return $rules; diff --git a/app/Modules/Recruitment/Models/JobAdvert.php b/app/Modules/Recruitment/Models/JobAdvert.php index 669b693..7b1e1fa 100644 --- a/app/Modules/Recruitment/Models/JobAdvert.php +++ b/app/Modules/Recruitment/Models/JobAdvert.php @@ -8,10 +8,7 @@ class JobAdvert extends Model { protected $table = 'job_advert'; protected $guarded = ['id']; - + public $timestamps = false; - protected $fillable = [ - 'title', 'description', 'skills', 'advantages', 'responsibilities', 'benefits', 'image', - ]; } diff --git a/app/Modules/Recruitment/resources/views/job_advert/index.blade.php b/app/Modules/Recruitment/resources/views/job_advert/index.blade.php index 27ac711..e4f17b8 100644 --- a/app/Modules/Recruitment/resources/views/job_advert/index.blade.php +++ b/app/Modules/Recruitment/resources/views/job_advert/index.blade.php @@ -2,72 +2,32 @@ @section('content')
-
-
{{trans('app.filter')}}
- {{Form::model($inputs, ['method' => 'get'])}} -
-
- {!! Form::label('first_name', trans('app.recruitment.reports.first_name').':') !!} - {!! Form::text('first_name', null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.first_name')]) !!} -
-
- {!! Form::label('last_name', trans('app.recruitment.reports.last_name').':') !!} - {!! Form::text('last_name', null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.last_name')]) !!} -
-
- {!! Form::label('email', trans('app.recruitment.reports.email').':') !!} - {!! Form::text('email', null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.email')]) !!} -
-
- {!! Form::label('skills', trans('app.recruitment.reports.skills').':') !!} - {!! Form::select('skills[]', $allSkills, null, ['id' => 'skills', 'class' => 'form-control', 'multiple' => 'multiple']) !!} -
-
- {!! Form::label('salary_from', trans('app.recruitment.reports.salary_range').':') !!} -
-
- {!! Form::text('salary_from', null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.min_salary')]) !!} -
-
- {!! Form::text('salary_to', null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.max_salary')]) !!} -
-
-
-
- {!! Form::label('contract_type_id', trans('app.recruitment.reports.contract_type').':') !!} - {!! Form::select('contract_type_id', $contractTypes, null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.contract_type')]) !!} -
-
- {!! Form::label('location', trans('app.recruitment.reports.location').':') !!} - {!! Form::select('location', locations(), null, ['class' => 'form-control', 'placeholder' => trans('app.recruitment.reports.location')]) !!} -
-
-
-
- {!! Form::submit(trans('app.filter'), ['class' => 'btn btn-primary pull-right']) !!} -
-
- {{Form::close()}} -
+ {{trans('app.recruitment.job_advert.add_new')}}
-
{{trans('app.recruitment.reports.main')}}
- +
{{trans('app.recruitment.job_advert.main')}}
+
- - - - - - - - - + + + + + + + + +
{{trans('app.recruitment.reports.first_name')}}{{trans('app.recruitment.reports.last_name')}}{{trans('app.recruitment.reports.email')}}{{trans('app.recruitment.reports.phone')}}{{trans('app.recruitment.reports.skills')}}{{trans('app.recruitment.reports.salary')}}{{trans('app.recruitment.reports.contract_type')}}{{trans('app.recruitment.reports.location')}}{{trans('app.recruitment.reports.comments')}}{{trans('app.id')}}{{trans('app.recruitment.job_advert.title')}}{{trans('app.recruitment.job_advert.description')}}
+ + + + + +
@@ -75,35 +35,31 @@ @endsection @section('additionalCSS') - @endsection @section('additionalJS') - @endsection \ No newline at end of file diff --git a/app/Providers/RepositoryServiceProvider.php b/app/Providers/RepositoryServiceProvider.php index 12da079..32dd721 100644 --- a/app/Providers/RepositoryServiceProvider.php +++ b/app/Providers/RepositoryServiceProvider.php @@ -25,7 +25,6 @@ public function register() Settings\Repositories\SalaryComponentsRepository::class => [Settings\Repositories\Interfaces\SalaryComponentsRepositoryInterface::class], Pim\Repositories\EmployeeRepository::class => [Pim\Repositories\Interfaces\EmployeeRepositoryInterface::class], Pim\Repositories\CandidateRepository::class => [Pim\Repositories\Interfaces\CandidateRepositoryInterface::class], - Recruitment\Repositories\JobAdvertRepository::class => [Recruitment\Repositories\Interfaces\JobAdvertRepositoryInterface::class], Pim\Repositories\EmployeeSocialMediaRepository::class => [Pim\Repositories\Interfaces\EmployeeSocialMediaRepositoryInterface::class], Pim\Repositories\EmployeeContactDetailsRepository::class => [Pim\Repositories\Interfaces\EmployeeContactDetailsRepositoryInterface::class], Pim\Repositories\EmployeeWorkExperienceRepository::class => [Pim\Repositories\Interfaces\EmployeeWorkExperienceRepositoryInterface::class], @@ -41,6 +40,7 @@ public function register() Leave\Repositories\EmployeeLeaveRepository::class => [Leave\Repositories\Interfaces\EmployeeLeaveRepositoryInterface::class], Leave\Repositories\EmployeeLeaveStatusRepository::class => [Leave\Repositories\Interfaces\EmployeeLeaveStatusRepositoryInterface::class], Recruitment\Repositories\ReportRepository::class => [Recruitment\Repositories\Interfaces\ReportRepositoryInterface::class], + Recruitment\Repositories\JobAdvertRepository::class => [Recruitment\Repositories\Interfaces\JobAdvertRepositoryInterface::class], Discipline\Repositories\DisciplinaryCaseRepository::class => [Discipline\Repositories\Interfaces\DisciplinaryCaseRepositoryInterface::class], Time\Repositories\ClientRepository::class => [Time\Repositories\Interfaces\ClientRepositoryInterface::class], Time\Repositories\ProjectRepository::class => [Time\Repositories\Interfaces\ProjectRepositoryInterface::class], diff --git a/database/migrations/2017_05_30_105051_create_job_advert_table.php b/database/migrations/2017_05_30_105051_create_job_advert_table.php index 909755c..96b6309 100644 --- a/database/migrations/2017_05_30_105051_create_job_advert_table.php +++ b/database/migrations/2017_05_30_105051_create_job_advert_table.php @@ -21,7 +21,8 @@ public function up() $table->text('advantages')->nullable(); $table->text('responsibilities')->nullable(); $table->text('benefits')->nullable(); - $table->string('image', 255); + $table->string('image', 255)->nullable(); + $table->softDeletes(); }); } diff --git a/resources/lang/en/app.php b/resources/lang/en/app.php index d3f203c..849dfa8 100644 --- a/resources/lang/en/app.php +++ b/resources/lang/en/app.php @@ -349,23 +349,6 @@ 'store_success' => 'The job advertisement was successfully added.', 'update_success' => 'The job advertisement details were successfully updated.', 'delete_success' => 'The job advertisement was successfully removed.', - 'additional' => 'Additional details', - 'preferences' => [ - 'main' => 'Preferences and expectations', - 'add_new' => 'Add preferences', - 'edit_details' => 'Edit preferences', - 'salary' => 'Minimal salary', - 'contract_type' => 'Contract type', - 'comments' => 'Comments', - 'location' => [ - 'main' => 'Location', - 'remote' => 'Remote', - 'inhouse' => 'Inhouse' - ], - 'store_success' => 'The candidate preferences were successfully added.', - 'update_success' => 'The candidate preferences were successfully updated.', - 'delete_success' => 'The candidate preferences were successfully removed.', - ] ], 'reports' => [ 'main' => 'Reports', diff --git a/routes/web.php b/routes/web.php index 5c98d34..fedb927 100644 --- a/routes/web.php +++ b/routes/web.php @@ -354,6 +354,8 @@ Route::get('reports/datatable', '\App\Modules\Recruitment\Http\Controllers\ReportsController@getDatatable') ->name('reports.datatable'); + Route::get('job_advert/datatable', '\App\Modules\Recruitment\Http\Controllers\JobAdvertController@getDatatable') + ->name('job_advert.datatable'); Route::resource('job_advert', '\App\Modules\Recruitment\Http\Controllers\JobAdvertController', ['names' => [ 'index' => 'job_advert.index', 'create' => 'job_advert.create', diff --git a/storage/.DS_Store b/storage/.DS_Store old mode 100644 new mode 100755 From cbf1a2ddb246298847096cbcc377cf33a6e56224 Mon Sep 17 00:00:00 2001 From: Katerina Trajchevska Date: Tue, 30 May 2017 13:43:07 +0200 Subject: [PATCH 03/65] Add BrowserStack as supporter in Readme Add BrowserStack logo Adjust BrowserStack URL - readme change BrowserStack logo format Update browserstack url Update Readme Add BrowserStack reference to readme Update Readme --- .DS_Store | Bin 8196 -> 8196 bytes public/.DS_Store | Bin 0 -> 6148 bytes public/images/browserstack-logo.png | Bin 0 -> 14166 bytes readme.md | 6 +++++- 4 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 public/.DS_Store create mode 100644 public/images/browserstack-logo.png diff --git a/.DS_Store b/.DS_Store index 8b3e561625b51f9ad7037c1f983c4a2e0ec7842f..867c39e37095072b3f9726efa56e8646ec56965f 100644 GIT binary patch delta 164 zcmZp1XmOa}&&abeU^hP_&t@J05hh7Ch609Ch9rg@hD?U!r1Ii|q@4UD1_p+clkJ5X zG$pF5jZ95-6pYM`YIPK<&CLyT6ikfGYHK+-#8nM#Jri;(tEy{i>t;@VFD$P$3#bpp ryp-bPoTU8x97c4B&4NO5OdE^$F>Pj-_{K7MpMd^kAraY)#k-jRB^oT} delta 38 ucmZp1XmOa}&&atkU^hP_=Vl%O5vI*n!u(8|^?7bEZ)TVH#S5Z-NTO%O2$!5;VGt%tT+dlEve2X8_|4=Oe>p$()-X;Op6NM1wV$S3f1 zoc(DrRBs|uW?=T4%+Bm)zm%O0A%ynlZkrH;5Tb!{tmrU&BYd9gid2-R3P{Bo9*Lba zo;pF~tVE;ZKQh3-U7h%3LToZ3|`GI z?b)?>@?FnS_C*v0OWSrXeJ{N;c2A-(vHj4SeF?w0@gr17KELH7&Qw@Pl<9=3=7Xx8sp?Ru z*d5kqBAifDB96!aGEioK_kJJ-um7h%_x~aY2V?*lSWgCMZD0-ha5hz2S5C=mEdw2b qa^Z1>#AON?q7*|cFU1W|A>e1+05laA62Sw4e*^>#I3NRm%D^YTbXX$* literal 0 HcmV?d00001 diff --git a/public/images/browserstack-logo.png b/public/images/browserstack-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..226c727dce9411838e9efc1f88472eed8fa5fa5c GIT binary patch literal 14166 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 AF#rGn literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 5e0cf7d..7f0ea4b 100644 --- a/readme.md +++ b/readme.md @@ -34,4 +34,8 @@ HRM is released under the GPL v3 (or later) license. ## Support -Please direct any feedback to trajchevska@adevait.com. \ No newline at end of file +Please direct any feedback to trajchevska@adevait.com. + +## Our supporters +#### [BrowserStack](https://www.browserstack.com/): Hassle free web-based browser testing +![Testing made easy with BrowserStack](https://raw.githubusercontent.com/adevait/hrm/master/public/images/browserstack-logo.png) \ No newline at end of file From b451242e42b1a9f51de239a9863a726407684238 Mon Sep 17 00:00:00 2001 From: Katerina Trajchevska Date: Fri, 2 Jun 2017 13:48:26 +0200 Subject: [PATCH 04/65] Add contributing guide --- contributing.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ readme.md | 4 ++ 2 files changed, 114 insertions(+) create mode 100644 contributing.md diff --git a/contributing.md b/contributing.md new file mode 100644 index 0000000..6d6c7e0 --- /dev/null +++ b/contributing.md @@ -0,0 +1,110 @@ +# Contributing to HRM + +Thank you for considering contributing to HRM! :octocat: :rocket: + +**Table of contents** + + + +- Code of conduct +- How can I contribute? + - Reporting bugs + - Suggesting Enhancements + + + +## Code of conduct + +This project and everyone participating in it is governed by the [Contributor Covenant](https://github.com/ContributorCovenant/contributor_covenant). By participating, you are expected to uphold this code. Please report unacceptable behavior to info@adevait.com. + +## How can I contribute? + +### Reporting bugs + +Bugs are reported as [Github issues](https://github.com/adevait/hrm/issues), with the label `bug`. Before reporting a bug, please make sure it's not already [reported](https://github.com/adevait/hrm/issues?utf8=%E2%9C%93&q=is%3Aopen%20is%3Aissue%20label%3Abug%20) or [fixed](https://github.com/adevait/hrm/pulls?q=is%3Aopen+is%3Apr+label%3Abug). + +We welcome pull request for bug fixes so if you think you can tackle it, feel free to. Please make sure to label it `bug`, and link it to the related issue. + +Bug reports should have the following format. + +**Title** + +Use clear and descriptive title for the issue that identifies the problem. + +**Description** + +Make sure to explain the problem well and include all details you find necessary. + +**Details** + +1. Steps to reproduce + * Write down as many steps as you find necessary to explain how the bug occurred and help maintainers reproduce it. +2. Expected behavior + * What did you expect to happen? +3. Actual behavior + * What actually happened? +4. Testing environment + * Describe the testing environment including used browser, operating system and other details that can be helpful. + +**Additional information** + +This is the place for anything not included in the guide above that you find important. + +> Note: If you find a Closed issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one. + +### Suggesting Enhancements + +Enhancements are also suggested in the form of [issues](https://github.com/adevait/hrm/issues), labeled `enhancement`. Before suggesting an enhancement, please make it's not already [suggested](https://github.com/adevait/hrm/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement) or [implemented](https://github.com/adevait/hrm/pulls?q=is%3Aopen+is%3Apr+label%3Abug+label%3Aenhancement). + +Before making a pull request for your suggestion, please get a feedback from some of the maintainers to see if such feature aligns with the general vision for the system. + +Pull requests for enhancements should follow these practices: + +**Code Format** + +1. Use [PSR-2](http://www.php-fig.org/psr/psr-2/) coding standard + * Make sure your code follows PSR-2 coding style guide. + * Some editors have packages that automatically build your code in PSR-2. If you don't want to think about your code structure while coding, you can easily automate it by installing such package. An example is Sublime's [Code Formatter](https://github.com/akalongman/sublimetext-codeformatter). +2. Document your code + * All of your code should be properly documented. A great package for generating code documentation is [DocBlockr](https://packagecontrol.io/packages/DocBlockr). + +**General Structure** + +1. Modules + * The system is organized in modules located in `app/Modules`. Every module has its own HTTP part, models, repositories and resources, and they follow Laravel's nesting and conventions. + * When adding a new module, check one of the existing ones as example for the code structure and practices. +2. Logic + * Controllers + - They are following the RESTful structure and are organized as resources. + - Controller methods should not do any complex operations or calculations. + - All database operations are handled in repositories (see point 3 below). + - Any function that is used more than once should be a helper function. + * Validation + - Every controller has its `FormRequest` class, located in `ModuleName/Http/Requests` where the request validation is done prior to executing the code in the controller method. + - Apart from the required rules, other validation rules should be added based on common sense. + * Routes + - All routes should be defined as resources and be properly nested (see existing routes as example). + - All routes should be named and used accordingly throughout the code. +3. Database + * Migrations + All database alterations should be done using migrations. + - Migrations used for creating a table in the database should follow this naming convention: `create_[table_name]_table`. + - Migrations used for altering a table in the database should follow this naming convention: `update_[table_name]_[altering_description]`. + - Every table should have timestamps and soft deletes. + - Every table should have an auto increment primary key. + - Every foreign key should be defined and cascade on delete and update. + * Models + - Tables representing many to many relations should not have separate model class. + - Every model should have the table name defined as a protected attribute. + - Every model should have the guarded attributes specified. + * Repositories + - All complex database operations should be handled in a repository rather than the model itself. + - Every model has its own repository that extends `App\Repositories\EloquentRepository`. + - Every repository should have its interface and binded through it to allow for higher abstraction. The repository bindings are done in `App\Providers\RepositoryServiceProvider`. + - Don't use model attributes or constants directly in external classes (e.g. `User::ACTIVE`). Instead, do it through the respective repository, like so: `$userRepository->model::ACTIVE`. To be able to use that, you should set the repository's `allowedAttributes` attribute to include the model - `$allowedAttributes = ['model']`. +4. Other + * Breadcrumbs + - Every page should have its breadcrumbs defined in `routes/breadcrumbs`. + * Localization + - Every text used throughout the system should be defined in `/resources/lang/en/app.php`, to make it easier for implementing localization eventually. + - Make sure to follow the existing nesting structure and naming for all texts added in the lang file. \ No newline at end of file diff --git a/readme.md b/readme.md index 7f0ea4b..ab838b6 100644 --- a/readme.md +++ b/readme.md @@ -28,6 +28,10 @@ The system is built on top of Laravel 5.3, so to proceed with the installation y * Check `/bootstrap/cache` permissions - this folder should also be writable. Make sure the permissions are set correctly. 8. At this point you should have the app up and running. Hit `yourdomain/register` to open the registration screen for creating an admin user. This is a one time setup and the credentials set here will be used for authenticating before using the system. +## Contributing + +We encourage you to contribute to HRM! Please check out the [Contributing guide](contributing.md) for guidelines about how to proceed. + ## License HRM is released under the GPL v3 (or later) license. From 5950bfbe5813189d3d39abd582edc0a6c6c4a8ae Mon Sep 17 00:00:00 2001 From: Stefan Mitrevski Date: Wed, 7 Jun 2017 10:01:50 +0200 Subject: [PATCH 05/65] Edit/Update/Delete JobAdvert --- .../Http/Controllers/JobAdvertController.php | 16 +++++++++++----- .../resources/views/job_advert/edit.blade.php | 13 +++++++++++++ .../resources/views/job_advert/index.blade.php | 4 ++-- routes/web.php | 1 + 4 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 app/Modules/Recruitment/resources/views/job_advert/edit.blade.php diff --git a/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php b/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php index 9d188df..085b5e0 100644 --- a/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php +++ b/app/Modules/Recruitment/Http/Controllers/JobAdvertController.php @@ -64,7 +64,8 @@ public function store(JobAdvertRequest $request) $jobData = $request->all(); $jobData = $this->jobAdvertRepository->create($jobData); $request->session()->flash('success', trans('app.recruitment.job_advert.store_success')); - return redirect()->route('recruitment.job_advert.edit', $jobData->id); } + return redirect()->route('recruitment.job_advert.edit', $jobData->id); + } /** * Display the specified resource. @@ -85,7 +86,8 @@ public function show($id) */ public function edit($id) { - // + $jadvert = $this->jobAdvertRepository->getById($id); + return view('recruitment::job_advert.edit', ['jadvert' => $jadvert, 'breadcrumb' => ['title' => $jadvert->title, 'id' => $jadvert->id]]); } /** @@ -97,7 +99,9 @@ public function edit($id) */ public function update(Request $request, $id) { - // + $jadvert = $this->jobAdvertRepository->update($id, $request->all()); + $request->session()->flash('success', trans('app.recruitment.job_advert.update_success')); + return redirect()->route('recruitment.job_advert.edit', $jadvert->id); } /** @@ -106,8 +110,10 @@ public function update(Request $request, $id) * @param int $id * @return \Illuminate\Http\Response */ - public function destroy($id) + public function destroy($id, Request $request) { - // + $this->jobAdvertRepository->delete($id); + $request->session()->flash('success', trans('app.recruitment.job_advert.delete_success')); + return redirect()->route('recruitment.job_advert.index'); } } diff --git a/app/Modules/Recruitment/resources/views/job_advert/edit.blade.php b/app/Modules/Recruitment/resources/views/job_advert/edit.blade.php new file mode 100644 index 0000000..b4f910d --- /dev/null +++ b/app/Modules/Recruitment/resources/views/job_advert/edit.blade.php @@ -0,0 +1,13 @@ +@extends('layouts.main') +@section('content') +
+
+
+
{{trans('app.recruitment.job_advert.edit_details')}}
+ {!! Form::model($jadvert, ['method' => 'PUT', 'route' => ['recruitment.job_advert.update', $jadvert->id], 'class' => 'form-horizontal', 'enctype' => 'multipart/form-data']) !!} + @include('recruitment::job_advert._form', ['submitName' => trans('app.submit')]) + {!! Form::close() !!} +
+
+
+@endsection \ No newline at end of file diff --git a/app/Modules/Recruitment/resources/views/job_advert/index.blade.php b/app/Modules/Recruitment/resources/views/job_advert/index.blade.php index e4f17b8..ee57caa 100644 --- a/app/Modules/Recruitment/resources/views/job_advert/index.blade.php +++ b/app/Modules/Recruitment/resources/views/job_advert/index.blade.php @@ -44,12 +44,12 @@ var table = $('#jobAdvertTable').DataTable({ processing: true, serverSide: true, - ajax: '{{ route("recruitment.job_advert.datatable")}}', + ajax: '{{route("recruitment.job_advert.datatable")}}', columns: [ {data: 0, name: 'id'}, {data: 1, name: 'title'}, {data: 2, name: 'description'}, - {data: 4, name: 'actions', sortable: false, searchable: false} + {data: 3, name: 'actions', sortable: false, searchable: false} ] }); table.columns().every(function () { diff --git a/routes/web.php b/routes/web.php index fedb927..6712147 100644 --- a/routes/web.php +++ b/routes/web.php @@ -356,6 +356,7 @@ Route::get('job_advert/datatable', '\App\Modules\Recruitment\Http\Controllers\JobAdvertController@getDatatable') ->name('job_advert.datatable'); + Route::resource('job_advert', '\App\Modules\Recruitment\Http\Controllers\JobAdvertController', ['names' => [ 'index' => 'job_advert.index', 'create' => 'job_advert.create', From 12c450f2428fb194945e0a53bd5a361fe1d6d491 Mon Sep 17 00:00:00 2001 From: Aleksandar Date: Thu, 15 Jun 2017 16:40:50 +0200 Subject: [PATCH 06/65] remove required on gender and birth date, replaced with in clausole for gender and date clausole for birth date --- app/Http/Controllers/ProfileController.php | 1 + app/Http/Requests/ProfileRequest.php | 5 +++-- app/Modules/Pim/Repositories/EmployeeRepository.php | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index d6ce9ab..495aa9c 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -30,6 +30,7 @@ public function index(Request $request) public function store(ProfileRequest $request, EmployeeRepository $employeeRepository) { $employeeData = $employeeRepository->update($request->user()->id, $request->all()); + $request->session()->flash('success', trans('app.profile.update_success')); return redirect()->route('profile.index'); } diff --git a/app/Http/Requests/ProfileRequest.php b/app/Http/Requests/ProfileRequest.php index fec540f..639cb2f 100644 --- a/app/Http/Requests/ProfileRequest.php +++ b/app/Http/Requests/ProfileRequest.php @@ -27,9 +27,10 @@ public function rules() $rules = [ 'first_name' => ['required'], 'last_name' => ['required'], - 'gender' => ['required'], - 'birth_date' => ['required'] + 'gender' => ['in:m,f'], + 'birth_date' => ['date'] ]; + $rules['email'] = [ 'required', 'email', diff --git a/app/Modules/Pim/Repositories/EmployeeRepository.php b/app/Modules/Pim/Repositories/EmployeeRepository.php index c595678..b8b7358 100644 --- a/app/Modules/Pim/Repositories/EmployeeRepository.php +++ b/app/Modules/Pim/Repositories/EmployeeRepository.php @@ -24,7 +24,7 @@ public function getAll() public function getBirthdays($date = false) { - if(!$date) { + if (!$date) { $date = Carbon::now(); } else { $date = Carbon::createFromFormat('Y-m-d', $date); @@ -49,7 +49,7 @@ public function pluckName() { return $this->model->select(DB::raw('CONCAT(first_name, " ", last_name) as name, id')) ->where('role', $this->model::USER_ROLE_EMPLOYEE) - ->pluck('name','id'); + ->pluck('name', 'id'); } From dd5e1d2da1850aa458033ce4b5126bce4a4a4372 Mon Sep 17 00:00:00 2001 From: Aleksandar Date: Mon, 19 Jun 2017 15:29:11 +0200 Subject: [PATCH 07/65] Fix UTF encoding issue --- resources/views/pdf/default.blade.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/resources/views/pdf/default.blade.php b/resources/views/pdf/default.blade.php index 8826f7f..6edf0ff 100644 --- a/resources/views/pdf/default.blade.php +++ b/resources/views/pdf/default.blade.php @@ -4,6 +4,11 @@ +
From 6b670af79135bb84c31c42a6a9b04898726ec372 Mon Sep 17 00:00:00 2001 From: Vedrana Tozija Date: Tue, 27 Jun 2017 15:01:04 +0200 Subject: [PATCH 08/65] email with temporary password sent when a new employee is created in admin panel, employee login added --- app/Http/Controllers/Auth/LoginController.php | 27 +- .../Auth/ResetPasswordController.php | 2 +- app/Http/Controllers/HomeController.php | 12 + app/Http/Kernel.php | 1 + .../Middleware/RedirectIfAuthenticated.php | 7 +- app/Http/Middleware/RedirectIfNotAdmin.php | 2 +- app/Http/Middleware/RedirectIfNotEmployee.php | 26 + .../Http/Controllers/EmployeesController.php | 24 +- resources/lang/en/emails.php | 9 + .../emails/employee-login-password.blade.php | 8 + .../views/includes/header_employee.blade.php | 36 + .../views/layouts/main_employee.blade.php | 34 + resources/views/welcome-employee.blade.php | 39 + routes/breadcrumbs.php | 6 +- routes/web.php | 768 ++++++++---------- 15 files changed, 581 insertions(+), 420 deletions(-) create mode 100644 app/Http/Middleware/RedirectIfNotEmployee.php create mode 100644 resources/lang/en/emails.php create mode 100644 resources/views/emails/employee-login-password.blade.php create mode 100644 resources/views/includes/header_employee.blade.php create mode 100644 resources/views/layouts/main_employee.blade.php create mode 100644 resources/views/welcome-employee.blade.php diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index a13071d..783f22c 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -3,7 +3,12 @@ namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; +use App\Modules\Pim\Repositories\EmployeeRepository; +use App\User; use Illuminate\Foundation\Auth\AuthenticatesUsers; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Input; class LoginController extends Controller { @@ -27,13 +32,31 @@ class LoginController extends Controller */ protected $redirectTo = '/'; + private $employeeRepository; + /** * Create a new controller instance. * * @return void */ - public function __construct() + public function __construct(EmployeeRepository $employeeRepository) { + $this->employeeRepository = $employeeRepository; $this->middleware('guest', ['except' => 'logout']); } -} + + public function login(Request $request) + { + $credentials = Input::only('email', 'password'); + if (!Auth::attempt($credentials)){ + return redirect()->back()->withMessage('Invalid credentials'); + } + if (Auth::user()->role == User::USER_ROLE_EMPLOYEE) { + return redirect()->to('/employee'); + } + if (Auth::user()->role == User::USER_ROLE_ADMIN) { + return redirect()->to('/admin'); + } + + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index cf726ee..2c863aa 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -25,7 +25,7 @@ class ResetPasswordController extends Controller * * @var string */ - protected $redirectTo = '/home'; + protected $redirectTo = '/'; /** * Create a new controller instance. diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index cdde33d..9d83377 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -17,4 +17,16 @@ public function index(TimeLogRepository $timeLogRepository) $weekly_summary = $timeLogRepository->weeklySummary(); return view('welcome', compact('weekly_summary')); } + + /** + * Show the profile config page. + * + * @param App\Modules\Time\Repositories\Interfaces\TimeLogRepositoryInterface $timeLogRepository + * @return \Illuminate\Http\Response + */ + public function indexEmployee(TimeLogRepository $timeLogRepository) + { + $weekly_summary = $timeLogRepository->weeklySummary(); + return view('welcome-employee', compact('weekly_summary')); + } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index d028414..cf128df 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -54,5 +54,6 @@ class Kernel extends HttpKernel 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class, 'app_setup' => \App\Http\Middleware\AppSetupRegister::class, + 'employee' => \App\Http\Middleware\RedirectIfNotEmployee::class, ]; } diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index e27860e..5ff38e6 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -2,6 +2,7 @@ namespace App\Http\Middleware; +use App\User; use Closure; use Illuminate\Support\Facades\Auth; @@ -18,7 +19,11 @@ class RedirectIfAuthenticated public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { - return redirect('/'); + if (Auth::user()->role == User::USER_ROLE_EMPLOYEE) { + return redirect()->to('/employee'); + } else if (Auth::user()->role == User::USER_ROLE_ADMIN) { + return redirect()->to('/admin'); + } } return $next($request); diff --git a/app/Http/Middleware/RedirectIfNotAdmin.php b/app/Http/Middleware/RedirectIfNotAdmin.php index fd12661..effcd84 100644 --- a/app/Http/Middleware/RedirectIfNotAdmin.php +++ b/app/Http/Middleware/RedirectIfNotAdmin.php @@ -19,7 +19,7 @@ class RedirectIfNotAdmin public function handle($request, Closure $next, $guard = null) { if ($request->user()->role != User::USER_ROLE_ADMIN) { - return redirect('/'); + return redirect()->back(); } return $next($request); diff --git a/app/Http/Middleware/RedirectIfNotEmployee.php b/app/Http/Middleware/RedirectIfNotEmployee.php new file mode 100644 index 0000000..8b50a22 --- /dev/null +++ b/app/Http/Middleware/RedirectIfNotEmployee.php @@ -0,0 +1,26 @@ +user()->role != User::USER_ROLE_EMPLOYEE) { + return redirect()->back(); + } + + return $next($request); + } +} diff --git a/app/Modules/Pim/Http/Controllers/EmployeesController.php b/app/Modules/Pim/Http/Controllers/EmployeesController.php index 5fa1cff..b7f8dd5 100644 --- a/app/Modules/Pim/Http/Controllers/EmployeesController.php +++ b/app/Modules/Pim/Http/Controllers/EmployeesController.php @@ -3,10 +3,13 @@ namespace App\Modules\Pim\Http\Controllers; use App\Http\Controllers\Controller; -use App\Modules\Pim\Repositories\Interfaces\EmployeeRepositoryInterface as EmployeeRepository; use App\Modules\Pim\Http\Requests\EmployeeRequest; -use Illuminate\Http\Request; +use App\Modules\Pim\Repositories\Interfaces\EmployeeRepositoryInterface as EmployeeRepository; use Datatables; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Mail; +use Illuminate\Mail\Mailer; +use Illuminate\Support\Facades\Route; class EmployeesController extends Controller { @@ -40,17 +43,17 @@ public function birthdays(Request $request) /** * Return data for the resource list - * + * * @return \Illuminate\Http\Response */ public function getDatatable() { return Datatables::of($this->employeeRepository->getCollection( - [['key' => 'role', 'operator' => '=', 'value' => $this->employeeRepository->model::USER_ROLE_EMPLOYEE]], + [['key' => 'role', 'operator' => '=', 'value' => $this->employeeRepository->model::USER_ROLE_EMPLOYEE]], ['id', 'first_name', 'last_name', 'email'])) ->addColumn('actions', function($employee){ return view('includes._datatable_actions', [ - 'deleteUrl' => route('pim.employees.destroy', $employee->id), + 'deleteUrl' => route('pim.employees.destroy', $employee->id), 'editUrl' => route('pim.employees.edit', $employee->id) ]); }) @@ -59,7 +62,7 @@ public function getDatatable() /** * Returns all employee details for using with select2 - * @param \Illuminate\Http\Request $request + * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function getSelectJson(Request $request) @@ -97,7 +100,16 @@ public function store(EmployeeRequest $request) { $employeeData = $request->all(); $employeeData['role'] = $this->employeeRepository->model::USER_ROLE_EMPLOYEE; + $password = rand(); + $employeeData['password'] = bcrypt($password); $employeeData = $this->employeeRepository->create($employeeData); + $data = ['title' => trans('emails.employee-login.title'), 'password' => trans('emails.employee-login.password') . $password, 'route' => trans('emails.employee-login.change_password_url') . url('password/reset')]; + Mail::send('emails.employee-login-password', $data, function($message) use ($employeeData) + { + $message->from(env('MAIL_EMAIL_FROM')); + $message->to($employeeData['email']); + }); + $request->session()->flash('success', trans('app.pim.employees.store_success')); return redirect()->route('pim.employees.edit', $employeeData->id); } diff --git a/resources/lang/en/emails.php b/resources/lang/en/emails.php new file mode 100644 index 0000000..123676f --- /dev/null +++ b/resources/lang/en/emails.php @@ -0,0 +1,9 @@ + [ + 'title' => 'Welcome to HRM', + 'password' => 'Your temporary password is: ', + 'change_password_url' => ' Please log in with the temporary password and change it to a password of your choice as soon as possible, at the following link - ' + ] +]; \ No newline at end of file diff --git a/resources/views/emails/employee-login-password.blade.php b/resources/views/emails/employee-login-password.blade.php new file mode 100644 index 0000000..f40443b --- /dev/null +++ b/resources/views/emails/employee-login-password.blade.php @@ -0,0 +1,8 @@ + + + +

{{$title}}

+

{{$password}}

+

{{$route}}

+ + diff --git a/resources/views/includes/header_employee.blade.php b/resources/views/includes/header_employee.blade.php new file mode 100644 index 0000000..9dd5f59 --- /dev/null +++ b/resources/views/includes/header_employee.blade.php @@ -0,0 +1,36 @@ + \ No newline at end of file diff --git a/resources/views/layouts/main_employee.blade.php b/resources/views/layouts/main_employee.blade.php new file mode 100644 index 0000000..88fd306 --- /dev/null +++ b/resources/views/layouts/main_employee.blade.php @@ -0,0 +1,34 @@ + + + + @include('includes.head') + + + @include('includes.header_employee') + +
+ {!! Breadcrumbs::render(Route::currentRouteName(), @$breadcrumb) !!} + + @if(session('success')) + + @endif + + @if(session('error')) + + @endif + + @yield('content') +
+ + @include('includes.footer') + + @yield('additionalCSS') + @yield('additionalJS') + + diff --git a/resources/views/welcome-employee.blade.php b/resources/views/welcome-employee.blade.php new file mode 100644 index 0000000..2c3559e --- /dev/null +++ b/resources/views/welcome-employee.blade.php @@ -0,0 +1,39 @@ +@extends ('layouts.main_employee') + +@section('content') +
+
+
+
{{trans('app.leave.weekly_summary')}}
+ + + + + + + + @forelse($weekly_summary as $key => $value) + + + + + + @empty + + + + @endforelse + +
{{trans('app.time.time_logs.employee')}}{{trans('app.time.time_logs.project')}}{{trans('app.time.time_logs.time')}}
{{$value->employee->first_name.' '.$value->employee->last_name}}{{$value->project->name}}{{$value->time}}
{{trans('app.no_data')}}
+
+
+
+@endsection +@section('additionalCSS') + + +@endsection +@section('additionalJS') + + +@endsection \ No newline at end of file diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 3784af6..23323d5 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -983,4 +983,8 @@ /** * Time breadcrumbs end here - */ \ No newline at end of file + */ +Breadcrumbs::register('employee.home', function($breadcrumbs) +{ + $breadcrumbs->push(trans('app.home'), route('employee.home')); +}); \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 3b79434..82d2712 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,4 @@ name('home')->middleware(['auth', 'admin']); - -Route::get('/storage/{path}', function($path) { - return response()->file(storage_path().'/app/'.$path); -})->name('storage')->where('path','(.*)')->middleware(['auth', 'admin']); - -Route::resource('profile', '\App\Http\Controllers\ProfileController', - [ - 'middleware' => ['auth', 'admin'], - 'only' => ['index', 'store'], - 'names' => [ - 'index' => 'profile.index', - 'store' => 'profile.store', - ] - ] -); - -Route::group(['prefix' => 'settings', 'as' => 'settings.', 'middleware' => ['auth', 'admin']], function () { - - Route::get('/', function() { - return view('settings::index'); - })->name('index'); - - Route::get('companies/datatable', '\App\Modules\Settings\Http\Controllers\CompaniesController@getDatatable') - ->name('companies.datatable'); - - Route::resource('companies', '\App\Modules\Settings\Http\Controllers\CompaniesController', ['names' => [ - 'index' => 'companies.index', - 'create' => 'companies.create', - 'show' => 'companies.show', - 'edit' => 'companies.edit', - 'store' => 'companies.store', - 'update' => 'companies.update', - 'destroy' => 'companies.destroy' - ]]); - - Route::get('contract-types/datatable', '\App\Modules\Settings\Http\Controllers\ContractTypesController@getDatatable') - ->name('contract_types.datatable'); - - Route::resource('contract-types', '\App\Modules\Settings\Http\Controllers\ContractTypesController', ['names' => [ - 'index' => 'contract_types.index', - 'create' => 'contract_types.create', - 'show' => 'contract_types.show', - 'edit' => 'contract_types.edit', - 'store' => 'contract_types.store', - 'update' => 'contract_types.update', - 'destroy' => 'contract_types.destroy' - ]]); - - Route::get('document-templates/datatable', '\App\Modules\Settings\Http\Controllers\DocumentTemplatesController@getDatatable') - ->name('document_templates.datatable'); - - Route::resource('document-templates', '\App\Modules\Settings\Http\Controllers\DocumentTemplatesController', ['names' => [ - 'index' => 'document_templates.index', - 'create' => 'document_templates.create', - 'show' => 'document_templates.show', - 'edit' => 'document_templates.edit', - 'store' => 'document_templates.store', - 'update' => 'document_templates.update', - 'destroy' => 'document_templates.destroy' - ]]); - - Route::get('education-institutions/datatable', '\App\Modules\Settings\Http\Controllers\EducationInstitutionsController@getDatatable') - ->name('education_institutions.datatable'); - - Route::resource('education-institutions', '\App\Modules\Settings\Http\Controllers\EducationInstitutionsController', ['names' => [ - 'index' => 'education_institutions.index', - 'create' => 'education_institutions.create', - 'show' => 'education_institutions.show', - 'edit' => 'education_institutions.edit', - 'store' => 'education_institutions.store', - 'update' => 'education_institutions.update', - 'destroy' => 'education_institutions.destroy' - ]]); - - Route::get('job-positions/datatable', '\App\Modules\Settings\Http\Controllers\JobPositionsController@getDatatable') - ->name('job_positions.datatable'); - - Route::resource('job-positions', '\App\Modules\Settings\Http\Controllers\JobPositionsController', ['names' => [ - 'index' => 'job_positions.index', - 'create' => 'job_positions.create', - 'show' => 'job_positions.show', - 'edit' => 'job_positions.edit', - 'store' => 'job_positions.store', - 'update' => 'job_positions.update', - 'destroy' => 'job_positions.destroy' - ]]); - - Route::get('languages/datatable', '\App\Modules\Settings\Http\Controllers\LanguagesController@getDatatable') - ->name('languages.datatable'); - - Route::resource('languages', '\App\Modules\Settings\Http\Controllers\LanguagesController', ['names' => [ - 'index' => 'languages.index', - 'create' => 'languages.create', - 'show' => 'languages.show', - 'edit' => 'languages.edit', - 'store' => 'languages.store', - 'update' => 'languages.update', - 'destroy' => 'languages.destroy' - ]]); - - Route::get('salary-components/datatable', '\App\Modules\Settings\Http\Controllers\SalaryComponentsController@getDatatable') - ->name('salary_components.datatable'); - - Route::resource('salary-components', '\App\Modules\Settings\Http\Controllers\SalaryComponentsController', ['names' => [ - 'index' => 'salary_components.index', - 'create' => 'salary_components.create', - 'show' => 'salary_components.show', - 'edit' => 'salary_components.edit', - 'store' => 'salary_components.store', - 'update' => 'salary_components.update', - 'destroy' => 'salary_components.destroy' - ]]); +Route::get('/', function () { + return redirect()->to('/login'); }); - -Route::group(['prefix' => 'pim', 'as' => 'pim.', 'middleware' => ['auth', 'admin']], function() { - - Route::get('/', function() { - return view('pim::index'); - })->name('index'); - - Route::get('employees/birthdays', '\App\Modules\Pim\Http\Controllers\EmployeesController@birthdays')->name('employees.birthdays'); - - Route::get('employees/datatable', '\App\Modules\Pim\Http\Controllers\EmployeesController@getDatatable') - ->name('employees.datatable'); - - Route::get('employees/select-json', '\App\Modules\Pim\Http\Controllers\EmployeesController@getSelectJson') - ->name('employees.select_json'); - Route::get('employees/select-2-selection', '\App\Modules\Pim\Http\Controllers\EmployeesController@getSelect2Selection') - ->name('employees.select2_selection'); - - Route::resource('employees', '\App\Modules\Pim\Http\Controllers\EmployeesController', ['names' => [ - 'index' => 'employees.index', - 'create' => 'employees.create', - 'show' => 'employees.show', - 'edit' => 'employees.edit', - 'store' => 'employees.store', - 'update' => 'employees.update', - 'destroy' => 'employees.destroy' - ]]); - - Route::get('candidates/datatable', '\App\Modules\Pim\Http\Controllers\CandidatesController@getDatatable') - ->name('candidates.datatable'); - - Route::resource('candidates', '\App\Modules\Pim\Http\Controllers\CandidatesController', ['names' => [ - 'index' => 'candidates.index', - 'create' => 'candidates.create', - 'show' => 'candidates.show', - 'edit' => 'candidates.edit', - 'store' => 'candidates.store', - 'update' => 'candidates.update', - 'destroy' => 'candidates.destroy' - ]]); - - Route::group(['prefix' => 'profile/{employeeId}', 'as' => 'employees.'], function($employeeId) { - Route::resource('social-media', '\App\Modules\Pim\Http\Controllers\EmployeeSocialMediaController', ['names' => [ - 'index' => 'social_media.index', - 'create' => 'social_media.create', - 'show' => 'social_media.show', - 'edit' => 'social_media.edit', - 'store' => 'social_media.store', - 'update' => 'social_media.update', - 'destroy' => 'social_media.destroy' - ]]); - - Route::get('documents/datatable', '\App\Modules\Pim\Http\Controllers\EmployeeDocumentsController@getDatatable') - ->name('documents.datatable'); - - Route::get('documents/generate', '\App\Modules\Pim\Http\Controllers\EmployeeDocumentsController@generate') - ->name('documents.generate'); - - Route::post('documents/template-content', '\App\Modules\Pim\Http\Controllers\EmployeeDocumentsController@generateTemplateContent') - ->name('documents.template_content'); - - Route::resource('documents', '\App\Modules\Pim\Http\Controllers\EmployeeDocumentsController', ['names' => [ - 'index' => 'documents.index', - 'create' => 'documents.create', - 'show' => 'documents.show', - 'edit' => 'documents.edit', - 'store' => 'documents.store', - 'update' => 'documents.update', - 'destroy' => 'documents.destroy' - ]]); - - Route::resource('contact-details', '\App\Modules\Pim\Http\Controllers\EmployeeContactDetailsController', [ - 'only' => [ - 'index', - 'store', - 'update' - ], +Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'admin']], function() { + Route::get('/', '\App\Http\Controllers\HomeController@index')->name('home'); + Route::get('/storage/{path}', function($path) { + return response()->file(storage_path().'/app/'.$path); + })->name('storage')->where('path','(.*)')->middleware(['auth', 'admin']); + Route::resource('profile', '\App\Http\Controllers\ProfileController', + [ + 'middleware' => ['auth', 'admin'], + 'only' => ['index', 'store'], 'names' => [ - 'index' => 'contact_details.index', - 'store' => 'contact_details.store', - 'update' => 'contact_details.update' + 'index' => 'profile.index', + 'store' => 'profile.store', ] - ]); - - Route::get('salaries/datatable', '\App\Modules\Pim\Http\Controllers\EmployeeSalaryController@getDatatable') - ->name('salaries.datatable'); - - Route::resource('salaries', '\App\Modules\Pim\Http\Controllers\EmployeeSalaryController', ['names' => [ - 'index' => 'salaries.index', - 'create' => 'salaries.create', - 'show' => 'salaries.show', - 'edit' => 'salaries.edit', - 'store' => 'salaries.store', - 'update' => 'salaries.update', - 'destroy' => 'salaries.destroy' - ]]); - - Route::group(['prefix' => 'qualifications', 'as' => 'qualifications.'], function($employeeId) { + ] + ); + Route::group(['prefix' => 'settings', 'as' => 'settings.', 'middleware' => ['auth', 'admin']], function () { + Route::get('/', function() { + return view('settings::index'); + })->name('index'); + Route::get('companies/datatable', '\App\Modules\Settings\Http\Controllers\CompaniesController@getDatatable') + ->name('companies.datatable'); + + Route::resource('companies', '\App\Modules\Settings\Http\Controllers\CompaniesController', ['names' => [ + 'index' => 'companies.index', + 'create' => 'companies.create', + 'show' => 'companies.show', + 'edit' => 'companies.edit', + 'store' => 'companies.store', + 'update' => 'companies.update', + 'destroy' => 'companies.destroy' + ]]); + Route::get('contract-types/datatable', '\App\Modules\Settings\Http\Controllers\ContractTypesController@getDatatable') + ->name('contract_types.datatable'); + + Route::resource('contract-types', '\App\Modules\Settings\Http\Controllers\ContractTypesController', ['names' => [ + 'index' => 'contract_types.index', + 'create' => 'contract_types.create', + 'show' => 'contract_types.show', + 'edit' => 'contract_types.edit', + 'store' => 'contract_types.store', + 'update' => 'contract_types.update', + 'destroy' => 'contract_types.destroy' + ]]); + Route::get('document-templates/datatable', '\App\Modules\Settings\Http\Controllers\DocumentTemplatesController@getDatatable') + ->name('document_templates.datatable'); + + Route::resource('document-templates', '\App\Modules\Settings\Http\Controllers\DocumentTemplatesController', ['names' => [ + 'index' => 'document_templates.index', + 'create' => 'document_templates.create', + 'show' => 'document_templates.show', + 'edit' => 'document_templates.edit', + 'store' => 'document_templates.store', + 'update' => 'document_templates.update', + 'destroy' => 'document_templates.destroy' + ]]); + Route::get('education-institutions/datatable', '\App\Modules\Settings\Http\Controllers\EducationInstitutionsController@getDatatable') + ->name('education_institutions.datatable'); + + Route::resource('education-institutions', '\App\Modules\Settings\Http\Controllers\EducationInstitutionsController', ['names' => [ + 'index' => 'education_institutions.index', + 'create' => 'education_institutions.create', + 'show' => 'education_institutions.show', + 'edit' => 'education_institutions.edit', + 'store' => 'education_institutions.store', + 'update' => 'education_institutions.update', + 'destroy' => 'education_institutions.destroy' + ]]); + Route::get('job-positions/datatable', '\App\Modules\Settings\Http\Controllers\JobPositionsController@getDatatable') + ->name('job_positions.datatable'); + + Route::resource('job-positions', '\App\Modules\Settings\Http\Controllers\JobPositionsController', ['names' => [ + 'index' => 'job_positions.index', + 'create' => 'job_positions.create', + 'show' => 'job_positions.show', + 'edit' => 'job_positions.edit', + 'store' => 'job_positions.store', + 'update' => 'job_positions.update', + 'destroy' => 'job_positions.destroy' + ]]); + Route::get('languages/datatable', '\App\Modules\Settings\Http\Controllers\LanguagesController@getDatatable') + ->name('languages.datatable'); + Route::resource('languages', '\App\Modules\Settings\Http\Controllers\LanguagesController', ['names' => [ + 'index' => 'languages.index', + 'create' => 'languages.create', + 'show' => 'languages.show', + 'edit' => 'languages.edit', + 'store' => 'languages.store', + 'update' => 'languages.update', + 'destroy' => 'languages.destroy' + ]]); + Route::get('salary-components/datatable', '\App\Modules\Settings\Http\Controllers\SalaryComponentsController@getDatatable') + ->name('salary_components.datatable'); + + Route::resource('salary-components', '\App\Modules\Settings\Http\Controllers\SalaryComponentsController', ['names' => [ + 'index' => 'salary_components.index', + 'create' => 'salary_components.create', + 'show' => 'salary_components.show', + 'edit' => 'salary_components.edit', + 'store' => 'salary_components.store', + 'update' => 'salary_components.update', + 'destroy' => 'salary_components.destroy' + ]]); + }); + Route::group(['prefix' => 'pim', 'as' => 'pim.', 'middleware' => ['auth', 'admin']], function() { + Route::get('/', function() { + return view('pim::index'); + })->name('index'); + + Route::get('employees/birthdays', '\App\Modules\Pim\Http\Controllers\EmployeesController@birthdays')->name('employees.birthdays'); + Route::get('employees/datatable', '\App\Modules\Pim\Http\Controllers\EmployeesController@getDatatable') + ->name('employees.datatable'); + Route::get('employees/select-json', '\App\Modules\Pim\Http\Controllers\EmployeesController@getSelectJson') + ->name('employees.select_json'); + Route::get('employees/select-2-selection', '\App\Modules\Pim\Http\Controllers\EmployeesController@getSelect2Selection') + ->name('employees.select2_selection'); + Route::resource('employees', '\App\Modules\Pim\Http\Controllers\EmployeesController', ['names' => [ + 'index' => 'employees.index', + 'create' => 'employees.create', + 'show' => 'employees.show', + 'edit' => 'employees.edit', + 'store' => 'employees.store', + 'update' => 'employees.update', + 'destroy' => 'employees.destroy' + ]]); + Route::get('candidates/datatable', '\App\Modules\Pim\Http\Controllers\CandidatesController@getDatatable') + ->name('candidates.datatable'); + Route::resource('candidates', '\App\Modules\Pim\Http\Controllers\CandidatesController', ['names' => [ + 'index' => 'candidates.index', + 'create' => 'candidates.create', + 'show' => 'candidates.show', + 'edit' => 'candidates.edit', + 'store' => 'candidates.store', + 'update' => 'candidates.update', + 'destroy' => 'candidates.destroy' + ]]); + Route::group(['prefix' => 'profile/{employeeId}', 'as' => 'employees.'], function($employeeId) { + Route::resource('social-media', '\App\Modules\Pim\Http\Controllers\EmployeeSocialMediaController', ['names' => [ + 'index' => 'social_media.index', + 'create' => 'social_media.create', + 'show' => 'social_media.show', + 'edit' => 'social_media.edit', + 'store' => 'social_media.store', + 'update' => 'social_media.update', + 'destroy' => 'social_media.destroy' + ]]); + Route::get('documents/datatable', '\App\Modules\Pim\Http\Controllers\EmployeeDocumentsController@getDatatable') + ->name('documents.datatable'); + Route::get('documents/generate', '\App\Modules\Pim\Http\Controllers\EmployeeDocumentsController@generate') + ->name('documents.generate'); + Route::post('documents/template-content', '\App\Modules\Pim\Http\Controllers\EmployeeDocumentsController@generateTemplateContent') + ->name('documents.template_content'); - Route::get('/', '\App\Modules\Pim\Http\Controllers\EmployeeQualificationsController@index')->name('index'); - - Route::get('work-experience/datatable', '\App\Modules\Pim\Http\Controllers\EmployeeWorkExperienceController@getDatatable') - ->name('work_experience.datatable'); - - Route::resource('work-experience', '\App\Modules\Pim\Http\Controllers\EmployeeWorkExperienceController', [ - 'except' => [ - 'index' + Route::resource('documents', '\App\Modules\Pim\Http\Controllers\EmployeeDocumentsController', ['names' => [ + 'index' => 'documents.index', + 'create' => 'documents.create', + 'show' => 'documents.show', + 'edit' => 'documents.edit', + 'store' => 'documents.store', + 'update' => 'documents.update', + 'destroy' => 'documents.destroy' + ]]); + Route::resource('contact-details', '\App\Modules\Pim\Http\Controllers\EmployeeContactDetailsController', [ + 'only' => [ + 'index', + 'store', + 'update' ], 'names' => [ - 'create' => 'work_experience.create', - 'show' => 'work_experience.show', - 'edit' => 'work_experience.edit', - 'store' => 'work_experience.store', - 'update' => 'work_experience.update', - 'destroy' => 'work_experience.destroy' + 'index' => 'contact_details.index', + 'store' => 'contact_details.store', + 'update' => 'contact_details.update' ] - ]); - - Route::resource('skills', '\App\Modules\Pim\Http\Controllers\EmployeeSkillsController', [ - 'only' => ['store'], - 'names' => [ - 'store' => 'skills.store' - ] - ]); - - Route::get('education/datatable', '\App\Modules\Pim\Http\Controllers\EmployeeEducationController@getDatatable') - ->name('education.datatable'); - - Route::resource('education', '\App\Modules\Pim\Http\Controllers\EmployeeEducationController', [ - 'except' => [ - 'index' - ], - 'names' => [ - 'create' => 'education.create', - 'show' => 'education.show', - 'edit' => 'education.edit', - 'store' => 'education.store', - 'update' => 'education.update', - 'destroy' => 'education.destroy' - ] - ]); - - Route::get('languages/datatable', '\App\Modules\Pim\Http\Controllers\EmployeeLanguagesController@getDatatable') - ->name('languages.datatable'); - - Route::resource('languages', '\App\Modules\Pim\Http\Controllers\EmployeeLanguagesController', [ - 'except' => [ - 'index' - ], - 'names' => [ - 'create' => 'languages.create', - 'show' => 'languages.show', - 'edit' => 'languages.edit', - 'store' => 'languages.store', - 'update' => 'languages.update', - 'destroy' => 'languages.destroy' - ] - ]); - }); - - Route::resource('preferences', '\App\Modules\Pim\Http\Controllers\EmployeePreferencesController', ['names' => [ - 'index' => 'preferences.index', - 'create' => 'preferences.create', - 'show' => 'preferences.show', - 'edit' => 'preferences.edit', - 'store' => 'preferences.store', - 'update' => 'preferences.update', - 'destroy' => 'preferences.destroy' - ]]); - }); -}); - -Route::group(['prefix' => 'leave', 'as' => 'leave.', 'middleware' => ['auth', 'admin']], function() { - Route::get('/', function() { - return view('leave::index'); - })->name('index'); - - Route::get('leave-types/datatable', '\App\Modules\Leave\Http\Controllers\LeaveTypeController@getDatatable') - ->name('leave_types.datatable'); - - Route::resource('leave-types', '\App\Modules\Leave\Http\Controllers\LeaveTypeController', ['names' => [ - 'index' => 'leave_types.index', - 'create' => 'leave_types.create', - 'show' => 'leave_types.show', - 'edit' => 'leave_types.edit', - 'store' => 'leave_types.store', - 'update' => 'leave_types.update', - 'destroy' => 'leave_types.destroy' - ]]); - - Route::get('holidays/datatable', '\App\Modules\Leave\Http\Controllers\HolidayController@getDatatable') - ->name('holidays.datatable'); - - Route::resource('holidays', '\App\Modules\Leave\Http\Controllers\HolidayController', ['names' => [ - 'index' => 'holidays.index', - 'create' => 'holidays.create', - 'show' => 'holidays.show', - 'edit' => 'holidays.edit', - 'store' => 'holidays.store', - 'update' => 'holidays.update', - 'destroy' => 'holidays.destroy' - ]]); - - Route::get('employee-leaves/datatable', '\App\Modules\Leave\Http\Controllers\EmployeeLeaveController@getDatatable') - ->name('employee_leaves.datatable'); - - Route::resource('employee-leaves', '\App\Modules\Leave\Http\Controllers\EmployeeLeaveController', ['names' => [ - 'index' => 'employee_leaves.index', - 'create' => 'employee_leaves.create', - 'show' => 'employee_leaves.show', - 'edit' => 'employee_leaves.edit', - 'store' => 'employee_leaves.store', - 'update' => 'employee_leaves.update', - 'destroy' => 'employee_leaves.destroy' - ]]); - - Route::get('calendar', '\App\Modules\Leave\Http\Controllers\CalendarController@index')->name('calendar.index'); - Route::get('render-calendar', '\App\Modules\Leave\Http\Controllers\CalendarController@renderCalendar')->name('calendar.render'); -}); - -Route::group(['prefix' => 'recruitment', 'as' => 'recruitment.', 'middleware' => ['auth', 'admin']], function() { - Route::get('/', function() { - return view('recruitment::index'); - })->name('index'); - - Route::get('reports/datatable', '\App\Modules\Recruitment\Http\Controllers\ReportsController@getDatatable') - ->name('reports.datatable'); - - Route::resource('reports', '\App\Modules\Recruitment\Http\Controllers\ReportsController', ['names' => [ - 'index' => 'reports.index', - 'create' => 'reports.create', - 'show' => 'reports.show', - 'edit' => 'reports.edit', - 'store' => 'reports.store', - 'update' => 'reports.update', - 'destroy' => 'reports.destroy' - ]]); -}); - -Route::group(['prefix' => 'discipline', 'as' => 'discipline.', 'middleware' => ['auth', 'admin']], function() { - Route::get('/', function() { - return view('discipline::index'); - })->name('index'); - - Route::get('disciplinary-cases/datatable', '\App\Modules\Discipline\Http\Controllers\DisciplinaryCasesController@getDatatable') - ->name('disciplinary_cases.datatable'); - - Route::resource('disciplinary-cases', '\App\Modules\Discipline\Http\Controllers\DisciplinaryCasesController', ['names' => [ - 'index' => 'disciplinary_cases.index', - 'create' => 'disciplinary_cases.create', - 'show' => 'disciplinary_cases.show', - 'edit' => 'disciplinary_cases.edit', - 'store' => 'disciplinary_cases.store', - 'update' => 'disciplinary_cases.update', - 'destroy' => 'disciplinary_cases.destroy' - ]]); + ]); + Route::get('salaries/datatable', '\App\Modules\Pim\Http\Controllers\EmployeeSalaryController@getDatatable') + ->name('salaries.datatable'); + Route::resource('salaries', '\App\Modules\Pim\Http\Controllers\EmployeeSalaryController', ['names' => [ + 'index' => 'salaries.index', + 'create' => 'salaries.create', + 'show' => 'salaries.show', + 'edit' => 'salaries.edit', + 'store' => 'salaries.store', + 'update' => 'salaries.update', + 'destroy' => 'salaries.destroy' + ]]); + Route::group(['prefix' => 'qualifications', 'as' => 'qualifications.'], function($employeeId) { + + Route::get('/', '\App\Modules\Pim\Http\Controllers\EmployeeQualificationsController@index')->name('index'); + Route::get('work-experience/datatable', '\App\Modules\Pim\Http\Controllers\EmployeeWorkExperienceController@getDatatable') + ->name('work_experience.datatable'); + Route::resource('work-experience', '\App\Modules\Pim\Http\Controllers\EmployeeWorkExperienceController', [ + 'except' => [ + 'index' + ], + 'names' => [ + 'create' => 'work_experience.create', + 'show' => 'work_experience.show', + 'edit' => 'work_experience.edit', + 'store' => 'work_experience.store', + 'update' => 'work_experience.update', + 'destroy' => 'work_experience.destroy' + ] + ]); + Route::resource('skills', '\App\Modules\Pim\Http\Controllers\EmployeeSkillsController', [ + 'only' => ['store'], + 'names' => [ + 'store' => 'skills.store' + ] + ]); + Route::get('education/datatable', '\App\Modules\Pim\Http\Controllers\EmployeeEducationController@getDatatable') + ->name('education.datatable'); + Route::resource('education', '\App\Modules\Pim\Http\Controllers\EmployeeEducationController', [ + 'except' => [ + 'index' + ], + 'names' => [ + 'create' => 'education.create', + 'show' => 'education.show', + 'edit' => 'education.edit', + 'store' => 'education.store', + 'update' => 'education.update', + 'destroy' => 'education.destroy' + ] + ]); + Route::get('languages/datatable', '\App\Modules\Pim\Http\Controllers\EmployeeLanguagesController@getDatatable') + ->name('languages.datatable'); + Route::resource('languages', '\App\Modules\Pim\Http\Controllers\EmployeeLanguagesController', [ + 'except' => [ + 'index' + ], + 'names' => [ + 'create' => 'languages.create', + 'show' => 'languages.show', + 'edit' => 'languages.edit', + 'store' => 'languages.store', + 'update' => 'languages.update', + 'destroy' => 'languages.destroy' + ] + ]); + }); + Route::resource('preferences', '\App\Modules\Pim\Http\Controllers\EmployeePreferencesController', ['names' => [ + 'index' => 'preferences.index', + 'create' => 'preferences.create', + 'show' => 'preferences.show', + 'edit' => 'preferences.edit', + 'store' => 'preferences.store', + 'update' => 'preferences.update', + 'destroy' => 'preferences.destroy' + ]]); + }); + }); + Route::group(['prefix' => 'leave', 'as' => 'leave.', 'middleware' => ['auth', 'admin']], function() { + Route::get('/', function() { + return view('leave::index'); + })->name('index'); + Route::get('leave-types/datatable', '\App\Modules\Leave\Http\Controllers\LeaveTypeController@getDatatable') + ->name('leave_types.datatable'); + Route::resource('leave-types', '\App\Modules\Leave\Http\Controllers\LeaveTypeController', ['names' => [ + 'index' => 'leave_types.index', + 'create' => 'leave_types.create', + 'show' => 'leave_types.show', + 'edit' => 'leave_types.edit', + 'store' => 'leave_types.store', + 'update' => 'leave_types.update', + 'destroy' => 'leave_types.destroy' + ]]); + Route::get('holidays/datatable', '\App\Modules\Leave\Http\Controllers\HolidayController@getDatatable') + ->name('holidays.datatable'); + Route::resource('holidays', '\App\Modules\Leave\Http\Controllers\HolidayController', ['names' => [ + 'index' => 'holidays.index', + 'create' => 'holidays.create', + 'show' => 'holidays.show', + 'edit' => 'holidays.edit', + 'store' => 'holidays.store', + 'update' => 'holidays.update', + 'destroy' => 'holidays.destroy' + ]]); + Route::get('employee-leaves/datatable', '\App\Modules\Leave\Http\Controllers\EmployeeLeaveController@getDatatable') + ->name('employee_leaves.datatable'); + Route::resource('employee-leaves', '\App\Modules\Leave\Http\Controllers\EmployeeLeaveController', ['names' => [ + 'index' => 'employee_leaves.index', + 'create' => 'employee_leaves.create', + 'show' => 'employee_leaves.show', + 'edit' => 'employee_leaves.edit', + 'store' => 'employee_leaves.store', + 'update' => 'employee_leaves.update', + 'destroy' => 'employee_leaves.destroy' + ]]); + Route::get('calendar', '\App\Modules\Leave\Http\Controllers\CalendarController@index')->name('calendar.index'); + Route::get('render-calendar', '\App\Modules\Leave\Http\Controllers\CalendarController@renderCalendar')->name('calendar.render'); + }); + Route::group(['prefix' => 'recruitment', 'as' => 'recruitment.', 'middleware' => ['auth', 'admin']], function() { + Route::get('/', function() { + return view('recruitment::index'); + })->name('index'); + Route::get('reports/datatable', '\App\Modules\Recruitment\Http\Controllers\ReportsController@getDatatable') + ->name('reports.datatable'); + Route::resource('reports', '\App\Modules\Recruitment\Http\Controllers\ReportsController', ['names' => [ + 'index' => 'reports.index', + 'create' => 'reports.create', + 'show' => 'reports.show', + 'edit' => 'reports.edit', + 'store' => 'reports.store', + 'update' => 'reports.update', + 'destroy' => 'reports.destroy' + ]]); + }); + Route::group(['prefix' => 'discipline', 'as' => 'discipline.', 'middleware' => ['auth', 'admin']], function() { + Route::get('/', function() { + return view('discipline::index'); + })->name('index'); + Route::get('disciplinary-cases/datatable', '\App\Modules\Discipline\Http\Controllers\DisciplinaryCasesController@getDatatable') + ->name('disciplinary_cases.datatable'); + Route::resource('disciplinary-cases', '\App\Modules\Discipline\Http\Controllers\DisciplinaryCasesController', ['names' => [ + 'index' => 'disciplinary_cases.index', + 'create' => 'disciplinary_cases.create', + 'show' => 'disciplinary_cases.show', + 'edit' => 'disciplinary_cases.edit', + 'store' => 'disciplinary_cases.store', + 'update' => 'disciplinary_cases.update', + 'destroy' => 'disciplinary_cases.destroy' + ]]); + }); + Route::group(['prefix' => 'time', 'as' => 'time.', 'middleware' => ['auth', 'admin']], function() { + Route::get('/', function() { + return view('time::index'); + })->name('index'); + Route::get('clients/datatable', '\App\Modules\Time\Http\Controllers\ClientsController@getDatatable') + ->name('clients.datatable'); + Route::resource('clients', '\App\Modules\Time\Http\Controllers\ClientsController', ['names' => [ + 'index' => 'clients.index', + 'create' => 'clients.create', + 'show' => 'clients.show', + 'edit' => 'clients.edit', + 'store' => 'clients.store', + 'update' => 'clients.update', + 'destroy' => 'clients.destroy' + ]]); + Route::get('projects/datatable', '\App\Modules\Time\Http\Controllers\ProjectsController@getDatatable') + ->name('projects.datatable'); + Route::resource('projects', '\App\Modules\Time\Http\Controllers\ProjectsController', ['names' => [ + 'index' => 'projects.index', + 'create' => 'projects.create', + 'show' => 'projects.show', + 'edit' => 'projects.edit', + 'store' => 'projects.store', + 'update' => 'projects.update', + 'destroy' => 'projects.destroy' + ]]); + Route::get('time-logs/datatable', '\App\Modules\Time\Http\Controllers\TimeLogsController@getDatatable') + ->name('time_logs.datatable'); + Route::resource('time-logs', '\App\Modules\Time\Http\Controllers\TimeLogsController', ['names' => [ + 'index' => 'time_logs.index', + 'create' => 'time_logs.create', + 'show' => 'time_logs.show', + 'edit' => 'time_logs.edit', + 'store' => 'time_logs.store', + 'update' => 'time_logs.update', + 'destroy' => 'time_logs.destroy' + ]]); + }); }); - -Route::group(['prefix' => 'time', 'as' => 'time.', 'middleware' => ['auth', 'admin']], function() { - Route::get('/', function() { - return view('time::index'); - })->name('index'); - - Route::get('clients/datatable', '\App\Modules\Time\Http\Controllers\ClientsController@getDatatable') - ->name('clients.datatable'); - Route::resource('clients', '\App\Modules\Time\Http\Controllers\ClientsController', ['names' => [ - 'index' => 'clients.index', - 'create' => 'clients.create', - 'show' => 'clients.show', - 'edit' => 'clients.edit', - 'store' => 'clients.store', - 'update' => 'clients.update', - 'destroy' => 'clients.destroy' - ]]); - - Route::get('projects/datatable', '\App\Modules\Time\Http\Controllers\ProjectsController@getDatatable') - ->name('projects.datatable'); - Route::resource('projects', '\App\Modules\Time\Http\Controllers\ProjectsController', ['names' => [ - 'index' => 'projects.index', - 'create' => 'projects.create', - 'show' => 'projects.show', - 'edit' => 'projects.edit', - 'store' => 'projects.store', - 'update' => 'projects.update', - 'destroy' => 'projects.destroy' - ]]); - - Route::get('time-logs/datatable', '\App\Modules\Time\Http\Controllers\TimeLogsController@getDatatable') - ->name('time_logs.datatable'); - Route::resource('time-logs', '\App\Modules\Time\Http\Controllers\TimeLogsController', ['names' => [ - 'index' => 'time_logs.index', - 'create' => 'time_logs.create', - 'show' => 'time_logs.show', - 'edit' => 'time_logs.edit', - 'store' => 'time_logs.store', - 'update' => 'time_logs.update', - 'destroy' => 'time_logs.destroy' - ]]); +Route::group(['prefix' => 'employee', 'as' => 'employee.', 'middleware' => ['auth', 'employee']], function() { + Route::get('/', '\App\Http\Controllers\HomeController@indexEmployee') + ->name('home'); }); - -Auth::routes(); +Auth::routes(); \ No newline at end of file From ddb4f81998a124bff5f662def196b51ef8695709 Mon Sep 17 00:00:00 2001 From: Vedrana Tozija Date: Tue, 27 Jun 2017 15:05:15 +0200 Subject: [PATCH 09/65] links in admin header fixed --- resources/views/includes/header.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/includes/header.blade.php b/resources/views/includes/header.blade.php index 498d403..6d3aa55 100644 --- a/resources/views/includes/header.blade.php +++ b/resources/views/includes/header.blade.php @@ -8,7 +8,7 @@ - {{ config('app.name', 'HRM') }} + {{ config('app.name', 'HRM') }}
@@ -61,7 +61,7 @@
@@ -61,14 +61,14 @@