Repository URL to install this package:
|
Version:
0.2.1 ▾
|
<?php
/**
* Created by PhpStorm.
* User: danilo
* Date: 21/12/15
* Time: 12:49
*/
namespace Modules\Students\Services;
use Illuminate\Contracts\View\Factory;
use Modules\Core\Utils\NameFormat;
use Modules\Students\Contracts\Repositories\StudentRepository as Repository;
use Modules\Students\Transformers\StudentsDatatableTransformer as DatatableTransformer;
use Yajra\Datatables\Datatables;
use Yajra\Datatables\Services\DataTable as DataTableService;
class StudentService extends DataTableService
{
// protected $printPreview = 'path-to-print-preview-view';
// protected $exportColumns = ['id', 'name'];
// protected $printColumns = '*';
/**
* @var Repository
*/
protected $repository;
/**
* Medico constructor.
* @param Repository $repository
*/
public function __construct(Repository $repository, Datatables $datatables, Factory $viewFactory)
{
parent::__construct($datatables, $viewFactory);
$this->repository = $repository;
}
public function create(array $data)
{
try {
/** @var \Modules\Students\Entities\Student $student */
$student = $this->repository->create($data);
$student->user()->create([
'name' => $student->full_name,
'email' => $student->email,
'password' => bcrypt($data['password'])
]);
return $student;
}
catch (\Exception $e) {
return false;
}
}
public function update($id, array $data)
{
try {
$model = $this->repository->find($id);
if($model->email == $data['email']){
unset($email);
}
$model->fill($data)->save();
$userData = [
'name' => $model->full_name,
'email' => $model->email,
];
if(isset($data['password']) and !empty($data['password'])){
$userData['password'] = bcrypt($data['password']);
}
$model->user->fill($userData)->save();
return $model;
}
catch (\Exception $e) {
return false;
}
}
public function findById($id)
{
return $this->repository->find($id);
}
public function editId($id)
{
return $this->findById($id);
}
public function findAll()
{
}
public function delete($id)
{
/** @var \Modules\Students\Entities\Student $student */
$student = $this->repository->find($id);
$student->user->delete();
return $student->delete();
}
public function countActive()
{
return $this->repository->countActive();
}
/**
* Display ajax response.
*
* @return \Illuminate\Http\JsonResponse
*/
public function ajax()
{
$data = $this->datatables
->of($this->query())
->setTransformer(DatatableTransformer::class)
->make(true);
return $data;
}
/**
* Get the query object to be processed by datatables.
*
* @return \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder
*/
public function query()
{
$data = $this->repository->select(['id', 'first_name', 'middle_name', 'last_name', 'email', 'country', 'is_active']);
return $this->applyScopes($data);
}
/**
* Optional method if you want to use html builder.
*
* @return \Yajra\Datatables\Html\Builder
*/
public function html()
{
$columns =[
['data' => 'full_name', 'name' => 'first_name', 'title' => trans('students::students.list.columns.full_name')],
['data' => 'email', 'name' => 'email', 'title' => trans('students::students.list.columns.email')],
['data' => 'country', 'name' => 'country', 'title' => trans('students::students.list.columns.country')],
['data' => 'is_active', 'name' => 'is_active', 'title' => trans('students::students.list.columns.is_active')]
];
return $this->builder()
->columns($columns)
->addAction([
'title' => trans('students::students.list.columns.action'),
'sClass' => 'dt-actions'
])
->ajax('')
->parameters([
'language' => trans('core::core.datatables'),
'dom' => 'Bfrtip',
'buttons' => [
'create',
'pdf',
'csv',
'print'
],
]);
}
}