static function setChannelTopic($channel) { $payload = array(); $channel = strtolower($channel); if ($channel == "test") { $channel_id = self::TEST_CHANNEL; $division_id = LGV_DIVISION_ID . ":" . PC_DIVISION_ID . ":" . PLC_DIVISION_ID; } elseif ($channel == "pc") { $channel_id = self::PC_CHANNEL; $division_id = PC_DIVISION_ID; } elseif ($channel == "plc") { $channel_id = self::PLC_CHANNEL; $division_id = PLC_DIVISION_ID; } elseif ($channel == "lgv") { $channel_id = self::LGV_CHANNEL; $division_id = LGV_DIVISION_ID; } elseif ($channel == "general") { $channel_id = self::TEST_CHANNEL; $division_id = LGV_DIVISION_ID . ":" . PC_DIVISION_ID . ":" . PLC_DIVISION_ID; } if ($channel_id) { $total = count(TicketsController::API()->all(['where' => ['tickets.division_id|=|' . $division_id], 'paginate' => 'false'])); $opened = count(TicketsController::API()->all(['where' => ['tickets.status_id|=|' . TICKET_REQUESTING_STATUS_ID . ":" . TICKET_NEW_STATUS_ID . ":" . TICKET_IN_PROGRESS_STATUS_ID, 'tickets.division_id|=|' . $division_id], 'paginate' => 'false'])); $waiting = count(TicketsController::API()->all(['where' => ['tickets.status_id|=|' . TICKET_WFF_STATUS_ID . ":" . TICKET_WFP_STATUS_ID, 'tickets.division_id|=|' . $division_id], 'paginate' => 'false'])); $closed = count(TicketsController::API()->all(['where' => ['tickets.status_id|=|' . TICKET_SOLVED_STATUS_ID . ":" . TICKET_CLOSED_STATUS_ID, 'tickets.division_id|=|' . $division_id], 'paginate' => 'false'])); $topic = "Requesting/New/Progress: *" . $opened . "* Waiting Feedback/Parts: *" . $waiting . "* Solved/Closed: *" . $closed . "*"; $payload['channel'] = $channel; $payload['topic'] = $topic; $payload['token'] = env('BOT_C2_TOKEN'); $response = self::apiCall(self::API_SET_CHANNEL_TOPIC, $payload); } }
public function testStoreWithReplyAndStatusClosed() { $this->ticket_model = factory(App\Ticket::class)->make(['id' => $this->faker->randomNumber]); $request = new TicketStoreRequest(['user_id' => 12, 'title' => $this->faker->sentence, 'body' => $this->faker->paragraph, 'reply_body' => $this->faker->sentence, 'status' => 'closed']); $dispatch_request = $request->instance(); $dispatch_request->merge(['auth_id' => auth()->user()->id]); $dispatcher = m::mock('Illuminate\\Bus\\Dispatcher[dispatchFrom]', [$this->app]); $dispatcher->shouldReceive('dispatchFrom')->once()->with('App\\Jobs\\TicketCreateJob', $dispatch_request, [])->andReturn($this->ticket_model); $dispatcher->shouldReceive('dispatchFrom')->once()->with('App\\Jobs\\ActionCreateJob', m::on(function ($param) { return empty(array_diff($param->toArray(), ['ticket_id' => $this->ticket_model->id, 'user_id' => $this->user_model->id, 'hours' => null, 'time_at' => null, 'status' => 'closed', 'defer_event' => true])); }), m::on(function ($param) use($request) { return empty(array_diff($param, ['type' => 'closed', 'body' => $request->get('reply_body')])); })); $this->app->instance('Illuminate\\Contracts\\Bus\\Dispatcher', $dispatcher); $controller = new TicketsController($this->ticket, $this->user); $controller->store($request); }
/** * Execute the console command. * * @return mixed */ public function handle() { if ($this->argument('how') == 'escalating') { $tickets = TicketsController::API()->all([]); } // $debug = $this->option('debug'); // $direct = $this->option('straight'); // $a = new ImportManager(); // $a->import($option,$debug,$direct); }
/** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->call(function () { $tickets = TicketsController::API()->all(['where' => ['deadline|<|0', 'deadline|>|-60'], 'paginate' => 'false']); foreach ($tickets as $ticket) { EmailsManager::sendEscalation($ticket->id); SlackManager::sendEscalation($ticket); } })->everyMinute(); $schedule->call(function () { SlackManager::setChannelsTopic(); })->twiceDaily(7, 15); }
public function draft(CreateTicketRequestDraftRequest $request) { $draft = TicketsController::API()->getDraft(); $ticket = $draft ? $draft : new Ticket(); $ticket->title = $request->get('title'); $ticket->post = $request->get('post'); $ticket->creator_id = Auth::user()->active_contact->id; $ticket->company_id = Auth::user()->active_contact->company->id; $ticket->contact_id = Auth::user()->active_contact->id; $ticket->status_id = TICKET_DRAFT_STATUS_ID; $ticket->assignee_id = 0; $ticket->priority_id = 0; $ticket->division_id = 0; $ticket->equipment_id = 0; $ticket->job_type_id = 0; $ticket->level_id = 0; $ticket->job_type_id = 0; $ticket->save(); return 'success'; }
public static function sendEscalation($id) { $ticket = TicketsController::API()->find(['id' => $id]); self::setSubject("Escalate Ticket #" . $ticket->id . " | " . $ticket->company->name); self::$view = "emails/escalate"; self::$data['title'] = "Escalate Ticket #" . $ticket->id; self::$data['ticket'] = $ticket; $events = explode(",", $ticket->event_id); foreach ($events as $event) { switch ($event) { case EVENT_ASSIGNEE_ID: self::add("to", $ticket->assignee->email); break; case EVENT_HELPDESK_MANAGER_ID: self::add("to", self::HELPDESK_MANAGER_EMAIL); break; case EVENT_ACCOUNT_MANAGER_ID: self::add("to", $ticket->company->account_manager->email); break; case EVENT_TEAM_LEADER_ID: switch ($ticket->division->id) { case LGV_DIVISION_ID: self::add("to", self::LGV_TEAM_LEADER_EMAIL); break; case PC_DIVISION_ID: self::add("to", self::PC_TEAM_LEADER_EMAIL); break; case PLC_DIVISION_ID: self::add("to", self::PLC_TEAM_LEADER_EMAIL); break; default: break; } break; case EVENT_FIELD_MANAGER_ID: self::add("to", self::FIELD_MANAGER_EMAIL); break; case EVENT_CUSTOMER_SERVICE_MANAGER_ID: self::add("to", self::CUSTOMER_SERVICE_MANAGER_EMAIL); break; case EVENT_THE_PRESIDENT_ID: self::add("to", self::PRESIDENT_EMAIL); break; default: break; } } self::send(); Activity::log("Escalating Ticket Email Send", self::$data, -1, -1); }
public function tickets($id) { $params = array_merge(Request::input(), ['where' => ['companies.id|=|' . $id], 'paginate' => 10]); $data['tickets'] = TicketsController::API()->all($params); return view('tickets/tickets', $data); }