Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
webbingbrasil/students-module / Services / StudentService.php
Size: Mime:
<?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'
                ],
            ]);
    }
}