Files
faveo/app/Http/Controllers/Admin/helpdesk/WorkflowController.php
Sujit Prasad ffa56a43cb update v1.0.7.9 R.C.
This is a Release Candidate. We are still testing.
2016-08-03 20:04:36 +05:30

454 lines
16 KiB
PHP

<?php
namespace App\Http\Controllers\Admin\helpdesk;
// controller
use App\Http\Controllers\Agent\helpdesk\TicketController;
use App\Http\Controllers\Controller;
// request
use App\Http\Requests\helpdesk\WorkflowCreateRequest;
use App\Http\Requests\helpdesk\WorkflowUpdateRequest;
use App\Model\helpdesk\Agent\Department;
// model
use App\Model\helpdesk\Agent\Teams;
use App\Model\helpdesk\Email\Emails;
use App\Model\helpdesk\Manage\Help_topic;
use App\Model\helpdesk\Manage\Sla_plan;
use App\Model\helpdesk\Ticket\Ticket_Priority;
use App\Model\helpdesk\Ticket\Ticket_Status;
use App\Model\helpdesk\Workflow\WorkflowAction;
use App\Model\helpdesk\Workflow\WorkflowName;
use App\Model\helpdesk\Workflow\WorkflowRules;
use App\User;
use Datatable;
//classes
use Exception;
use Illuminate\Http\Request;
use Lang;
/**
* WorkflowController
* In this controller in the CRUD function for all the workflow applied in faveo.
*
* @author Ladybird <info@ladybirdweb.com>
*/
class WorkflowController extends Controller
{
/**
* Create a new controller instance.
* constructor to check
* 1. authentication
* 2. user roles
* 3. roles must be agent.
*
* @return void
*/
public function __construct()
{
// checking authentication
$this->middleware('auth');
// checking admin roles
$this->middleware('roles');
}
/**
* Display a listing of all the workflow.
*
* @return type
*/
public function index()
{
try {
return view('themes.default1.admin.helpdesk.manage.workflow.index');
} catch (Exception $e) {
return redirect()->back()->with('fails', $e->getMessage());
}
}
/**
* List of all the workflow in the system.
*
* @return type
*/
public function workFlowList()
{
// returns chumper datatable
return Datatable::collection(WorkflowName::All())
/* searcable column name */
->searchColumns('name')
/* order column name and description */
->orderColumns('name')
/* add column name */
->addColumn('name', function ($model) {
return $model->name;
})
/* add column status */
->addColumn('status', function ($model) {
if ($model->status == 1) {
return 'Active';
} elseif ($model->status == 0) {
return 'Disabled';
}
})
/* add column order */
->addColumn('order', function ($model) {
return $model->order;
})
/* add column rules */
->addColumn('rules', function ($model) {
$rules = WorkflowRules::where('workflow_id', '=', $model->id)->count();
return $rules;
})
/* add column target */
->addColumn('target', function ($model) {
$target = $model->target;
$target1 = explode('-', $target);
if ($target1[0] == 'A') {
if ($target1[1] == 0) {
return 'Any';
} elseif ($target1[1] == 1) {
return 'Web Forms';
} elseif ($target1[1] == 2) {
return 'Email';
} elseif ($target1[1] == 4) {
return 'API';
}
} elseif ($target1[0] == 'E') {
$emails = Emails::where('id', '=', $target1[1])->first();
return $emails->email_address;
}
})
/* add column created */
->addColumn('Created', function ($model) {
return TicketController::usertimezone($model->created_at);
})
/* add column updated */
->addColumn('Updated', function ($model) {
return TicketController::usertimezone($model->updated_at);
})
/* add column action */
->addColumn('Actions', function ($model) {
$confirmation = 'Are you sure?';
return "<a class='btn btn-info btn-xs btn-flat' href='".route('workflow.edit', $model->id)."'><i class='fa fa-edit text-black'></i> Edit</a> <a class='btn btn-danger btn-xs btn-flat' href='".route('workflow.delete', $model->id)."' onclick='return confirm_delete()'><i class='fa fa-trash text-black'></i> Delete</a> ";
})
->make();
}
/**
* Show the form for creating a new workflow.
*
* @return type Response
*/
public function create(Emails $emails)
{
$email_data = '';
foreach ($emails->lists('email_address', 'id') as $key => $email) {
$email_data["E-$key"] = $email;
}
$emails = $email_data;
try {
return view('themes.default1.admin.helpdesk.manage.workflow.create', compact('emails'));
} catch (Exception $e) {
return redirect()->back()->with('fails', $e->getMessage());
}
}
/**
* Store a new workflow in to the system.
*
* @param \App\Http\Requests\helpdesk\WorkflowCreateRequest $request
*
* @return type view
*/
public function store(WorkflowCreateRequest $request)
{
try {
// store a new workflow credentials in to the system
$workflow_name = new WorkflowName();
$workflow_name->name = $request->name;
$workflow_name->status = $request->status;
$workflow_name->order = $request->execution_order;
$workflow_name->target = $request->target_channel;
$workflow_name->internal_note = $request->internal_note;
$workflow_name->save();
$rules = $request->rule;
$actions = $request->action;
// store workflow rules into the system
foreach ($rules as $rule) {
$workflow_rule = new WorkflowRules();
$workflow_rule->workflow_id = $workflow_name->id;
$workflow_rule->matching_scenario = $rule['a'];
$workflow_rule->matching_relation = $rule['b'];
$workflow_rule->matching_value = $rule['c'];
$workflow_rule->save();
}
// store a new workflow action into the system
foreach ($actions as $action) {
$workflow_action = new WorkflowAction();
$workflow_action->workflow_id = $workflow_name->id;
$workflow_action->condition = $action['a'];
$workflow_action->action = $action['b'];
$workflow_action->save();
}
return redirect('workflow')->with('success', Lang::get('lang.workflow_created_successfully'));
} catch (Exception $e) {
return redirect()->back()->with('fails', $e->getMessage());
}
}
/**
* Editing the details of the banned users.
*
* @param type $id
* @param User $ban
*
* @return type Response
*/
public function edit($id, WorkflowName $work_flow_name, Emails $emails, WorkflowRules $workflow_rule, WorkflowAction $workflow_action)
{
try {
$emails = $emails->get();
$workflow = $work_flow_name->whereId($id)->first();
$workflow_rules = $workflow_rule->whereWorkflow_id($id)->get();
$workflow_actions = $workflow_action->whereWorkflow_id($id)->get();
return view('themes.default1.admin.helpdesk.manage.workflow.edit', compact('id', 'workflow', 'emails', 'workflow_rules', 'workflow_actions'));
} catch (Exception $e) {
return redirect()->back()->with('fails', $e->getMessage());
}
}
/**
* Update ticket workflow.
*
* @param type $id
* @param \App\Http\Requests\helpdesk\WorkflowUpdateRequest $request
*
* @return type view
*/
public function update($id, WorkflowUpdateRequest $request)
{
try {
// store a new workflow credentials in to the system
$workflow_name = WorkflowName::whereId($id)->first();
$workflow_name->name = $request->name;
$workflow_name->status = $request->status;
$workflow_name->order = $request->execution_order;
$workflow_name->target = $request->target_channel;
$workflow_name->internal_note = $request->internal_note;
$workflow_name->save();
$rules = $request->rule;
$actions = $request->action;
// removing old foreign values to insert an updated one
WorkflowAction::where('workflow_id', '=', $id)->delete();
WorkflowRules::where('workflow_id', '=', $id)->delete();
// update workflow rules into the system
foreach ($rules as $rule) {
$workflow_rule = new WorkflowRules();
$workflow_rule->workflow_id = $workflow_name->id;
$workflow_rule->matching_scenario = $rule['a'];
$workflow_rule->matching_relation = $rule['b'];
$workflow_rule->matching_value = $rule['c'];
$workflow_rule->save();
}
// update workflow action into the system
foreach ($actions as $action) {
$workflow_action = new WorkflowAction();
$workflow_action->workflow_id = $workflow_name->id;
$workflow_action->condition = $action['a'];
$workflow_action->action = $action['b'];
$workflow_action->save();
}
return redirect('workflow')->with('success', Lang::get('lang.workflow_updated_successfully'));
} catch (Exception $e) {
return redirect()->back()->with('fails', $e->getMessage());
}
}
/**
* function to delete workflow.
*
* @param type $id
*/
public function destroy($id)
{
try {
// remove all the contents of workflow
$workflow_action = WorkflowAction::where('workflow_id', '=', $id)->delete();
$workflow_rules = WorkflowRules::where('workflow_id', '=', $id)->delete();
$workflow = WorkflowName::whereId($id)->delete();
return redirect('workflow')->with('success', Lang::get('lang.workflow_deleted_successfully'));
} catch (Exception $e) {
return redirect()->back()->with('fails', $e->getMessage());
}
}
/**
* function to select action.
*
* @param type $id
* @param \Illuminate\Http\Request $request
*
* @return type void
*/
public function selectAction($id, Request $request)
{
if ($request->option == 'reject') {
return $this->rejectTicket($id);
} elseif ($request->option == 'department') {
return $this->department($id);
} elseif ($request->option == 'priority') {
return $this->priority($id);
} elseif ($request->option == 'sla') {
return $this->slaPlan($id);
} elseif ($request->option == 'team') {
return $this->assignTeam($id);
} elseif ($request->option == 'agent') {
return $this->assignAgent($id);
} elseif ($request->option == 'helptopic') {
return $this->helptopic($id);
} elseif ($request->option == 'status') {
return $this->ticketStatus($id);
}
}
/**
* function to reject ticket.
*
* @return string
*/
public function rejectTicket($id)
{
$var = '<input type="hidden" name="action['.$id.'][b]" class="form-control" value="reject"><span text-red>Reject</span> ';
return $var;
}
/**
* function to return deprtment select option.
*
* @return type string
*/
public function department($id)
{
$departments = Department::all();
$var = "<select name='action[".$id."][b]' class='form-control' required>";
foreach ($departments as $department) {
$var .= "<option value='".$department->id."'>".$department->name.'</option>';
}
$var .= '</select>';
return $var;
}
/**
* function to return the priority select option.
*
* @return type string
*/
public function priority($id)
{
$priorities = Ticket_Priority::all();
$var = "<select name='action[".$id."][b]' class='form-control' required>";
foreach ($priorities as $priority) {
$var .= "<option value='".$priority->priority_id."'>".$priority->priority_desc.'</option>';
}
$var .= '</select>';
return $var;
}
/**
* function to return the slaplan select option.
*
* @return type string
*/
public function slaPlan($id)
{
$sla_plans = Sla_plan::where('status', '=', 1)->get();
$var = "<select name='action[".$id."][b]' class='form-control' required>";
foreach ($sla_plans as $sla_plan) {
$var .= "<option value='".$sla_plan->id."'>".$sla_plan->grace_period.'</option>';
}
$var .= '</select>';
return $var;
}
/**
* function to get system team select option.
*
* @return type string
*/
public function assignTeam($id)
{
$teams = Teams::where('status', '=', 1)->get();
$var = "<select name='action[".$id."][b]' class='form-control' required>";
foreach ($teams as $team) {
$var .= "<option value='".$team->id."'>".$team->name.'</option>';
}
$var .= '</select>';
return $var;
}
/**
* function to get system agents select option.
*
* @return type string
*/
public function assignAgent($id)
{
$users = User::where('role', '!=', 'user')->where('active', '=', 1)->get();
$var = "<select name='action[".$id."][b]' class='form-control' required>";
foreach ($users as $user) {
$var .= "<option value='".$user->id."'>".$user->first_name.' '.$user->last_name.'</option>';
}
$var .= '</select>';
return $var;
}
/**
* function to get the helptopic select option.
*
* @return type string
*/
public function helptopic($id)
{
$help_topics = Help_topic::where('status', '=', 1)->get();
$var = "<select name='action[".$id."][b]' class='form-control' required>";
foreach ($help_topics as $help_topic) {
$var .= "<option value='".$help_topic->id."'>".$help_topic->topic.'</option>';
}
$var .= '</select>';
return $var;
}
/**
* function to get the select option to choose the ticket status.
*
* @return type string
*/
public function ticketStatus($id)
{
$ticket_status = Ticket_Status::all();
$var = "<select name='action[".$id."][b]' class='form-control' required>";
foreach ($ticket_status as $status) {
$var .= "<option value='".$status->id."'>".$status->name.'</option>';
}
$var .= '</select>';
return $var;
}
}