Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 149 additions & 0 deletions app/Modules/Pim/Http/Controllers/EmployeeTasksController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
<?php

namespace App\Modules\Pim\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Modules\Pim\Http\Requests\CandidateRequest;
use App\Repositories\UserRepository;
use App\Modules\Pim\Repositories\Interfaces\EmployeeTasksRepositoryInterface as EmployeeTasksRepository;
use Datatables;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
use App\Modules\Pim\Http\Requests\EmployeeTaskRequest;

class EmployeeTasksController extends Controller
{
private $employeeTasksRepository;
private $userRepository;

public function __construct(EmployeeTasksRepository $employeeTasksRepository, UserRepository $userRepository)
{
$this->employeeTasksRepository = $employeeTasksRepository;
$this->userRepository = $userRepository;
}

/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index($employeeId)
{
$employee = $this->userRepository->getById($employeeId);
$breadcrumb = [
'parent_id' => $employeeId,
'parent_title' => $employee->first_name.' '.$employee->last_name,
'parent_type' => get_user_role($employee->role)
];
return view('pim::employee_tasks.index', compact('breadcrumb'));
}

/**
* Return data for the resource list
*
* @return \Illuminate\Http\Response
*/
public function getDatatable()
{
return Datatables::of($this->employeeTasksRepository->getCollection([],
['id', 'task_name', 'task_description', 'assigned_to', 'creator_id', 'due_date']))
->editColumn('assigned_to', function($task) {
return $task->assignee->first_name.' '.$task->assignee->last_name;
})
->editColumn('creator_id', function($task) {
return $task->creator->first_name.' '.$task->creator->last_name;
})
->addColumn('actions', function($task){
return view('includes._datatable_actions', [
'deleteUrl' => route('pim.employees.tasks.destroy', ['employeeId' => Route::input('employeeId'), 'task' => $task->id]),
'editUrl' => route('pim.employees.tasks.edit', ['employeeId' => Route::input('employeeId'), 'task' => $task->id])
]);
})
->make();
}

/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$admins = $this->userRepository->pluckAdminNames();
return view('pim::employee_tasks.create', compact('admins'));
}

/**
* Store a newly created resource in storage.
*
* @param \App\Modules\Pim\Http\Requests\EmployeeTaskRequest $request
* @return \Illuminate\Http\Response
*/
public function store(EmployeeTaskRequest $request)
{
$taskData = $request->all() + ['candidate_id' => Route::input('employeeId'), 'creator_id' => Auth::user()->id];
$taskData = $this->employeeTasksRepository->create($taskData);
$request->session()->flash('success', trans('app.pim.candidates.tasks.store_success'));
return redirect()->route('pim.employees.tasks.edit', ['employeeId' => Route::input('employeeId'), 'task' => $taskData->id]);
}

/**
* Display the specified resource.
*
* @param integer unique identifier for the resource
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}

/**
* Show the form for editing the specified resource.
*
* @param integer unique identifier for the resource
* @return \Illuminate\Http\Response
*/
public function edit($employeeId, $id)
{
$task = $this->employeeTasksRepository->getById($id);
$employee = $this->userRepository->getById($employeeId);
$breadcrumb = [
'parent_id' => $employeeId,
'parent_title' => $employee->first_name.' '.$employee->last_name,
'task_id' => $id
];
$admins = $this->userRepository->pluckAdminNames();

return view('pim::employee_tasks.edit', ['admins' => $admins, 'task' => $task, 'breadcrumb' => $breadcrumb]);
}

/**
* Update the specified resource in storage.
*
* @param integer unique identifier for the resource
* @param \App\Modules\Pim\Http\Requests\EmployeeTaskRequest $request
* @return \Illuminate\Http\Response
*/
public function update($employeeId, $id, EmployeeTaskRequest $request)
{
$task = $this->employeeTasksRepository->update($id, $request->all());
$request->session()->flash('success', trans('app.pim.candidates.tasks.update_success'));
return redirect()->route('pim.employees.tasks.edit', ['employeeId' => $employeeId, 'task' => $id]);
}

/**
* Remove the specified resource from storage.
*
* @param integer unique identifier for the resource
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function destroy($employeeId, $id, Request $request)
{
$this->employeeTasksRepository->delete($id);
$request->session()->flash('success', trans('app.pim.candidates.tasks.delete_success'));
return redirect()->route('pim.employees.tasks.index', ['employeeId' => $employeeId, 'task' => $id]);
}
}
34 changes: 34 additions & 0 deletions app/Modules/Pim/Http/Requests/EmployeeTaskRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace App\Modules\Pim\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class EmployeeTaskRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$rules = [
'task_name' => ['required'],
'assigned_to' => ['required'],
'due_date' => ['required']
];

return $rules;
}
}
27 changes: 27 additions & 0 deletions app/Modules/Pim/Models/UserTask.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace App\Modules\Pim\Models;

use Illuminate\Database\Eloquent\Model;
use App\User;

class UserTask extends Model
{
protected $table = 'user_tasks';
protected $guarded = ['id'];

public function candidate()
{
return $this->belongsTo(User::class, 'candidate_id');
}

public function assignee()
{
return $this->belongsTo(User::class, 'assigned_to');
}

public function creator()
{
return $this->belongsTo(User::class, 'creator_id');
}
}
15 changes: 15 additions & 0 deletions app/Modules/Pim/Repositories/EmployeeTasksRepository.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace App\Modules\Pim\Repositories;

use App\Repositories\EloquentRepository;
use App\Modules\Pim\Models\UserTask;
use App\Modules\Pim\Repositories\Interfaces\EmployeeTasksRepositoryInterface;

class EmployeeTasksRepository extends EloquentRepository implements EmployeeTasksRepositoryInterface
{
public function __construct(UserTask $model)
{
$this->model = $model;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace App\Modules\Pim\Repositories\Interfaces;

interface EmployeeTasksRepositoryInterface
{
}
5 changes: 5 additions & 0 deletions app/Modules/Pim/resources/views/candidates/edit.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@
<h2>{{trans('app.pim.candidates.preferences.main')}}</h2>
</a>
</div>
<div class="col-lg-3 col-md-4 col-sm-6">
<a class="nav-box" href="{{route('pim.employees.tasks.index', $employee->id)}}">
<h2>{{trans('app.pim.candidates.tasks.main')}}</h2>
</a>
</div>
</div>
</div>
</div>
Expand Down
41 changes: 41 additions & 0 deletions app/Modules/Pim/resources/views/employee_tasks/_form.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<div class="form-group">
{!! Form::label('task_name', trans('app.pim.candidates.tasks.name').':', ['class' => 'col-sm-3']) !!}
<div class="col-sm-6">
{!! Form::text('task_name', null, ['class' => 'form-control']) !!}
</div>
</div>
<div class="form-group">
{!! Form::label('task_description', trans('app.pim.candidates.tasks.description').':', ['class' => 'col-sm-3']) !!}
<div class="col-sm-6">
{!! Form::text('task_description', null, ['class' => 'form-control']) !!}
</div>
</div>
<div class="form-group">
{!! Form::label('assigned_to', trans('app.pim.candidates.tasks.assigned_to').':', ['class' => 'col-sm-3']) !!}
<div class="col-sm-6">
{!! Form::select('assigned_to', $admins, null, ['class' => 'form-control admins']) !!}
</div>
</div>
<div class="form-group">
{!! Form::label('due_date', trans('app.pim.candidates.tasks.due_date').':', ['class' => 'col-sm-3']) !!}
<div class="col-sm-6">
{!! Form::date('due_date', null, ['class' => 'form-control']) !!}
</div>
</div>
@include('errors._form-errors')
<hr>
<div class="form-group">
<div class="col-sm-6 col-sm-offset-3">
<a href="{{route('pim.employees.tasks.index', Route::input('employeeId'))}}" class="btn btn-default">{{trans('app.cancel')}}</a>
{!! Form::submit($submitName, ['class' => 'btn btn-primary']) !!}
</div>
</div>
@section('additionalCSS')
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
@endsection
@section('additionalJS')
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<script>
$(".admins").select2();
</script>
@endsection
13 changes: 13 additions & 0 deletions app/Modules/Pim/resources/views/employee_tasks/create.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@extends('layouts.main')
@section('content')
<div class="row">
<div class="col-sm-12">
<div class="custom-panel">
<div class="custom-panel-heading">{{trans('app.pim.employees.external_accounts.add_new')}}</div>
{!! Form::open(['route' => ['pim.employees.tasks.store', Route::input('employeeId')], 'class' => 'form-horizontal', 'enctype' => 'multipart/form-data']) !!}
@include('pim::employee_tasks._form', ['submitName' => trans('app.submit')])
{!! Form::close() !!}
</div>
</div>
</div>
@endsection
13 changes: 13 additions & 0 deletions app/Modules/Pim/resources/views/employee_tasks/edit.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@extends('layouts.main')
@section('content')
<div class="row">
<div class="col-sm-12">
<div class="custom-panel">
<div class="custom-panel-heading">{{trans('app.pim.candidates.tasks.main')}}</div>
{!! Form::model($task, ['method' => 'PUT', 'route' => ['pim.employees.tasks.update', Route::input('employeeId'), $task->id], 'class' => 'form-horizontal', 'enctype' => 'multipart/form-data']) !!}
@include('pim::employee_tasks._form', ['submitName' => trans('app.submit')])
{!! Form::close() !!}
</div>
</div>
</div>
@endsection
73 changes: 73 additions & 0 deletions app/Modules/Pim/resources/views/employee_tasks/index.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
@extends('layouts.main')
@section('content')
<div class="row">
<div class="col-sm-12">
<a href="{{route('pim.employees.tasks.create', Route::input('employeeId'))}}" class="btn btn-primary pull-right">{{trans('app.pim.candidates.tasks.add_new')}}</a>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="custom-panel">
<div class="custom-panel-heading">{{trans('app.pim.candidates.tasks.main')}}</div>
<table class="table table-bordered table-hover" id="employeesTasksTable">
<thead>
<th>{{trans('app.id')}}</th>
<th>{{trans('app.pim.candidates.tasks.name')}}</th>
<th>{{trans('app.pim.candidates.tasks.description')}}</th>
<th>{{trans('app.pim.candidates.tasks.assigned_to')}}</th>
<th>{{trans('app.pim.candidates.tasks.creator')}}</th>
<th>{{trans('app.pim.candidates.tasks.due_date')}}</th>
<th></th>
</thead>
<tfoot>
<th>
<input type="text" placeholder="{{trans('app.id')}}"/>
</th>
<th>
<input type="text" placeholder="{{trans('app.pim.candidates.tasks.name')}}"/>
</th>
<th>
<input type="text" placeholder="{{trans('app.pim.candidates.tasks.description')}}"/>
</th>
<th></th>
<th></th>
<th></th>
<th></th>
</tfoot>
</table>
</div>
</div>
</div>
@endsection
@section('additionalCSS')
<link rel="stylesheet" href="//cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css">
@endsection
@section('additionalJS')
<script src="//cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<script>
$(document).ready(function(){
var table = $('#employeesTasksTable').DataTable({
processing: true,
serverSide: true,
ajax: '{{ route("pim.employees.tasks.datatable", Route::input("employeeId"))}}',
columns: [
{data: 0, name: 'id'},
{data: 1, name: 'task_name'},
{data: 2, name: 'task_description'},
{data: 3, name: 'assigned_to'},
{data: 4, name: 'creator_id'},
{data: 5, name: 'due_date'},
{data: 6, name: 'actions', sortable: false, searchable: false}
]
});
table.columns().every(function () {
var that = this;
$('input', this.footer()).on( 'keyup change', function () {
if (that.search() !== this.value) {
that.search(this.value).draw();
}
});
});
});
</script>
@endsection
Loading