/home/mip/mip/app/Modules/Client/Controllers/Principals/ContactPersonController.php
<?php
namespace QxCMS\Modules\Client\Controllers\Principals;
use Illuminate\Http\Request;
use QxCMS\Http\Controllers\Controller;
use DB;
use Auth;
use Datatables;
use QxCMS\Modules\Client\Requests\Principals\ContactPersonRequest;
use QxCMS\Modules\Client\Repositories\Principals\ContactPersonRepositoryInterface as ContactPerson;
use QxCMS\Modules\Client\Repositories\Principals\ContactNumberRepositoryInterface as ContactNumber;
use QxCMS\Modules\Client\Repositories\Principals\PrincipalRepositoryInterface as Principal;
use QxCMS\Modules\Client\Repositories\Settings\Roles\PermissionRepositoryInterface as Permission;
class ContactPersonController extends Controller
{
protected $principal;
protected $person;
protected $number;
protected $permission;
protected $auth;
protected $prefix_name = '';
public function __construct(
Principal $principal,
ContactNumber $number,
ContactPerson $person,
Permission $permission
)
{
$this->principal = $principal;
$this->person = $person;
$this->number = $number;
$this->permission = $permission;
$this->auth = Auth::guard('client');
$this->prefix_name = config('modules.client');
}
public function permissions()
{
return $this->permission->getPermission($this->principal->getModuleId());
}
public function index($principal_hashid)
{
$this->authorize('activated', $this->permissions());
$principal_id = decode($principal_hashid);
$data['permissions'] = $this->permissions();
$data['principal'] = $this->principal->findById($principal_id);
$data['userLogs'] = $this->person->getUserLogs($this->person->getModuleId(), '', 'Contacts-'.$principal_id);
return view('Client::principals.contact-persons.index', $data);
}
public function show($id)
{
$this->authorize('activated', $this->permissions());
}
public function create($principal_hashid)
{
$this->authorize('create', $this->permissions());
$principal_id = decode($principal_hashid);
$data['principal'] = $this->principal->findById($principal_id);
return view('Client::principals.contact-persons.create', $data);
}
public function store(ContactPersonRequest $request, $principal_hashid)
{
$this->authorize('create', $this->permissions());
$principal_id = decode($principal_hashid);
$input = $request->except(['contact']);
$input['principal_id'] = $principal_id;
$person = $this->person->create($input);
$contacts = array_filter($request->get('contact'), 'strlen');
if(!empty($contacts)) {
foreach ($contacts as $contact_key => $contact) {
$input_number['contact'] = $contact;
$input_number['principal_contact_id'] = $person->id;
$this->number->create($input_number);
}
}
if(!$request->ajax()) {
session()->flash('success', 'Successfully added.');
return redirect($this->prefix_name.'/principals/'.hashid($principal_id).'/contact-persons');
}
return response(
array('message'=>'Successfully added.','type'=>'success', 'row' => $person)
)->header('Content-Type', 'application/json');
}
public function edit($principal_hashid, $hashid)
{
$this->authorize('update', $this->permissions());
$principal_id = decode($principal_hashid);
$id = decode($hashid);
$data['principal'] = $this->principal->findById($principal_id);
$data['contact'] = $this->person->with(['numbers'])->find($id);
$data['userLogs'] = $this->person->getUserLogs($this->person->getModuleId(), $id, 'Contacts-'.$principal_id);
return view('Client::principals.contact-persons.edit', $data);
}
public function update(ContactPersonRequest $request, $principal_hashid, $hashid)
{
$this->authorize('update', $this->permissions());
$principal_id = decode($principal_hashid);
$id = decode($hashid);
$input = $request->except(['contact']);
$input['principal_id'] = $principal_id;
$person = $this->person->update($id, $input);
$contacts = array_filter($request->get('contact'), 'strlen');
$check = $this->number->where('principal_contact_id', $id)->whereNotIn('id', array_keys($contacts));
if(count($check->get()) > 0) {
$check->delete();
session()->flash('success', 'Successfully updated.');
}
if(!empty($contacts)) {
foreach ($contacts as $contact_key => $contact) {
$input_number['contact'] = $contact;
$input_number['principal_contact_id'] = $person->id;
if(starts_with($contact_key, 'new')) {
$this->number->create($input_number);
session()->flash('success', 'Successfully updated.');
} else {
$this->number->update($contact_key, $input_number);
}
}
}
return redirect($this->prefix_name.'/principals/'.hashid($principal_id).'/contact-persons/'.$person->hashid.'/edit');
}
public function destroy($principal_hashid, $hashid)
{
$this->authorize('delete', $this->permissions());
$principal_id = decode($principal_hashid);
$id = decode($hashid);
return $this->person->delete($id);
}
/*
* Datatables
*/
public function getContactPersonsData($principal_hashid)
{
$principal_id = decode($principal_hashid);
$contacts = $this->person->select([
'id',
'principal_id',
'name',
'position',
'email'
])->with(['numbers'])->where(function($query) use ($principal_id){
if($principal_id) $query->where('principal_id', $principal_id);
});
$permissions = $this->permissions();
return Datatables::of($contacts)
->addColumn('contact_details', function($model){
$html_out = "";
if($model->name != '')
{
$html_out .= '<b>Name:</b> <a href="'.url($this->prefix_name.'/principals/'.hashid($model->principal_id).'/contact-persons/'.$model->hashid.'/edit').'"><font size="4">'.$model->name.'</font></a>';
$html_out .= "<br /><b>Position:</b> ".$model->position;
$html_out .= "<br /><b>Email:</b> ".$model->email;
}
return $html_out;
})
->addColumn('contact_numbers', function($model){
$html_out = "";
if(count($model->numbers) > 0) {
foreach ($model->numbers as $number_key => $number) {
$html_out .= "<i class=\"fa fa-mobile\"></i> ".$number->contact."<br />";
}
}
return $html_out;
})
->editColumn('name', function($model){
$html_out = '';
if($model->name != '')
{
$html_out .= '<a href="'.url($this->prefix_name.'/principals/'.hashid($model->principal_id).'/contact-persons/'.$model->hashid.'/edit').'">'.$model->name.'</a>';
}
return $html_out;
})
->addColumn('action', function ($model) use ($permissions){
$html_out = '';
if($this->auth->user()->can('update', $permissions)) {
$html_out .= '<a href="'.url($this->prefix_name.'/principals/'.hashid($model->principal_id).'/contact-persons/'.$model->hashid.'/edit').'" class="btn btn-xs btn-flat btn-warning" data-toggle="tooltip" data-placement="top" title="Edit"><i class="fa fa-pencil"></i></a>';
}
if($this->auth->user()->can('delete', $permissions)) {
$html_out .= ' <a href="#delete-'.$model->hashid.'" class="btn btn-xs btn-flat btn-danger" id="btn-delete" data-action="'.url($this->prefix_name).'/principals/'.hashid($model->principal_id).'/contact-persons/'.$model->hashid.'" data-toggle="tooltip" data-placement="top" title="Delete"><i class="fa fa-trash-o"></i></a>';
}
return $html_out;
})
->orderColumn('contact_details', 'name $1')
->make(true);
}
}