454 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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;
 | |
|     }
 | |
| }
 | 
