BAB 6 PENUTUP
6.2 Saran
Sistem informasi support ticketing pada PT. Solmit Bangun Indonesia ini masih dapat dikembangkan lebih lanjut dengan perkembangan spesifikasi kebutuhan pengguna sistem yang harus dipenuhi dalam mencapai tahap yang lebih tinggi dan kinerja sistem yang lebih baik karena sistem dibuat masih sederhana. Berikut adalah beberapa saran untuk pengembangan sistem lebih lanjut :
1. Perlu dilakukan pengembangan dan pemeliharaan yang lebih baik terhadap sistem yang telah dibuat maupun perangkat lunak yang dibangun, sehingga sistem dapat dipergunakan sesuai dengan kebutuhan perusahaan.
2. Pada sistem informasi support ticketing dapat ditambahkan fitur notifikasi untuk pemberitahuan permasalahan telah selesai dan pemberitahuan tugas yang masuk kepada IT Teknisi.
3. Sistem informasi support ticketing berbasis web yang dibuat penulis belum memiliki fitur yang lengkap seperti sistem SLA (Service Level Agreement) untuk mengukur tingkat isu pada permasalahan terkait, sistem report untuk menampilkan laporan dan sistem log aktivitas untuk riwayat perubahan atau tindakan yang dilakukan oleh user/pengguna.
xiv
DAFTAR PUSTAKA
[1] Y. Liharja, A. O. Sari and A. Satriansyah, "Rancang Bangun Sistem Informasi Helpdesk IT Support Berbasis Website," Jurnal Informatikan dan Teknologi, vol. 5, no. 1, pp. 157-166, 2022.
[2] K. C. Laudon and J. P. Laudon, Management Information System : Managing
the Digital Firm, 2012.
[3] V. "Perangkat Lunak Helpdesk Ticketing Berbasisi Web di PT Meprofarm Bandung," Jurnal LPKIA, 2018.
[4] R. N. Wardhani, M. C. Utami and I. Y. Saputra, "Sistem Informasi Helpdesk Ticketing pada PT. Bank Mega Tbk," Jurnal Ilmiah Matrik, vol. 22, no. 2, pp.
201-207, 2020.
[5] S. Syofian and A. Winandar, "Aplikasi Helpdesk Mendukung Sistem Ticketing," Jurnal Teknologi Informasi, 2017.
[6] M. Analisis Perancangan Sistem Berorientasi Objek dengan UML (Unified Modeling Language), Bandung: Informatika, 2018.
[7] F. and M. , UML Distilled Edisi ke-3, Yogyakarta: Andi Publisher, 2004.
[8] A. Kadir, Buku Pintar Programmer Pemula, Yogyakarta: Mediakom, 2013.
[9] B. Nugroho, Aplikasi Pemrograman Web Dinamis dengan PHP dan MySQL,
Yogyakarta: Gava Media, 2004.
[10] P. Mauliana, W. Wiguna and A. Y. Permana, "Pengembangan E-Helpdesk Support System," Jurnal Responsif, vol. 2, no. 1, pp. 19-29, 2020.
[11] M. winoto and S. N. Ambo, "HELPDESK SYSTEM UNTUK TECHNICL
SUPPORT BERBASIS HYBRID PADA PT.PANCA PUTRA SOLUSINDO," Jurnal Sistem Informasi, Teknologi Informasi dan Komputer, vol. 11, no. 3, pp. 37-42, 2021.
[12] N. S. P. P. W, R. R. Isnanto and I. P. Windasari, "PENGEMBANGAN SISTEM INFORMASI PENJUALAN DAN PEMBELIAN PADA TOKO PC TABLET," Jurnal Teknologi dan Sistem Informasi Komputer, vol. 2, no. 2, pp. 181-185, 2014.
[13] D. F. Dirmanthara, E. S. Nugraha, T. Prasetya, I. Ali and Kaslani, "Rancang Bangun Sistem Informasi Ticketing Berbasis Website pada STF
xv
Muhammadiyah Cirebon," Riset dan E-Jurnal Manajemen Informatika Komputer, vol. 6, no. 4, pp. 674-685, 2022.
[14] M. Ardhiansyah, "Penerapan Model Rapid Application Development pada Aplikasi Helpdesk Trouble Ticket PT. Satkomindo Mediyasa," Jurnal Teknologi Sistem Informasi dan Aplikasi, vol. 2, no. 2, pp. 43-52, 2019.
[15] S. I. Adam, J. H. Moedjahedy and O. Lengkong, "Pengembangan IT Helpdesk Ticketing Sistem Berbasis Web di Universitas Klabat," Cogito Smart Journal, vol. 6, no. 2, pp. 217-228, 2020.
[16] M. Fauzi, Masrizal and V. Sihombing, "SISTEM INFORMASI IT-
HELPDESK UNIVERSITAS LABUHANBATU BERBASIS WEB," Jurnal Teknologi dan Sistem Informasi, vol. 7, no. 3, pp. 259-266, 2021.
[17] Y. Iswara, I. Darmawan and U. Y. K. S. Hediyanto, "ANALISIS DAN
PERANCANGAN HELPDESK TICKETING SYSTEM UNTUK
MENGELOLA TINDAK PERBAIKAN PERANGKAT KOMPUTER DAN JARINGAN PADA PT. LEN INDUSTRI (PERSERO) MENGGUNAKAN METODOLOGI PDCA (PLAN-DO-CHECK-ACTION)," e-Proceeding of Engineering, vol. 5, no. 3, p. 7149, 2018.
[18] A. Naufal, D. Pramono and B. S. Prakoso, "Pengembangan Sistem Informasi Monitoring dan Helpdesk Proyek Pengembangan Perangkat Lunak (Studi Kasus: PT Lua Kreatif Teknologi)," Jurnal Pengembangan Teknologi Informasi dan Ilmu Komputer, vol. 6, no. 4, pp. 1558-1567, 2022.
[19] H. Wahyudi and R. Fajriah, "Perancangan Aplikasi Helpdesk Ticketing Dengan Penerapan Algoritma Forward Chaining (Stusi Kasus: PT Idemas Solusindo Sentosa)," Jurnal IlmuTeknik dan Komputer, vol. 4, no. 1, pp. 88- 97, 2020.
[20] R. Tarigan, I. Kusosi and A. Usri, "Perancangan Aplikasi Helpdesk Ticketing System Pada PT. Indonesia Nippon Seiki," (Sistem Informasi dan Komputer, vol. 11, no. 1, pp. 9-18, 2022.
[21] W. Likhar and H. Purwanto, "ANALISA DAN PERANCANGAN SISTEM
INFORMASI TICKETING HELPDESK ONLINE BERBASIS WEB:
STUDI KASUS PT XYZ," Jurnal Sistem Informasi UNSURYA, pp. 103-116, 2021.
[22] R. M. Bahrudin, M. Ridwan and H. S. Darmojo, "Penerapan Helpdesk Ticketing System Dalam Penanganan Keluhan Penggunaan Sistem Informasi Berbasis Web," JUTIS, vol. 7, no. 1, pp. 71-82, 2019.
xvi
LAMPIRAN
Lampiran 1.1 Source Code TicketModel.php
<?php
namespace App\Models;
use Carbon\Carbon;
use App\Models\Client;
use App\Models\Product;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Ticket extends Model {
use HasFactory;
protected $fillable = [ 'no_ticket',
'product_id', 'client_id', 'issue', 'file', 'user_id' ];
public function product() {
return $this->belongsTo(Product::class, 'product_id', 'id');
}
public function client() {
return $this->belongsTo(Client::class, 'client_id', 'id');
}
public function user() {
return $this->belongsTo(User::class, 'user_id', 'id');
}
public function ticketStatus() {
return $this->hasMany(TicketStatus::class, 'ticket_id');
} }
xvii
Lampiran 1.2 Source Code TicketController.php
class TicketController extends Controller {
public function index() {
$user = auth()->user();
if ($user->role === "admin") {
$tickets = Ticket::with('ticketStatus')->
get();
} else if ($user->role === "programmer") {
$tickets = Ticket::where('user_id', $user->
id)->with('ticketStatus')->get();
} else {
$tickets = Ticket::where('client_id', $user->
client_id)->with('client', 'product', 'user', 'ticketStatus')->get();
}
return view('ticket.index', [ 'ticket' => $tickets ]);
}
public function create() {
$user = auth()->user();
$project = Project::where('client_id', $user->
client_id)->with('client', 'product', 'documents')->get();
$client = Client::all();
$slas = Sla::all();
return view('ticket.tambah', [ 'project' => $project, 'client' => $client, 'slas' => $slas ]);
}
public function show(Ticket $ticket) {
$status = TicketStatus::where('ticket_id',
$ticket->id)->orderBy('created_at', 'desc')->get();
$getstatus = Ticket::with('ticketStatus')->get();
xviii
return view('ticket.detail', [ 'ticket' => $ticket,
'status' => $status, 'getstatus' => $getstatus ]);
}
public function store(Request $request) {
$product_id = $request->input('product_id');
$client_id = $request->input('client_id');
$issue = $request->input('issue');
$file = $request->file('file');
$path = Storage::putFile('documents', $file);
$ticket = new Ticket;
$ticket->product_id = $product_id;
$ticket->client_id = $client_id;
$ticket->issue = $issue;
$ticket->file = $path;
$lastTicket = Ticket::orderBy('id', 'desc')->
first();
$ticket->no_ticket = 'TICKET-' . str_pad($lastTicket ? $lastTicket->id + 1 : 1, 5, '0', STR_PAD_LEFT);
$ticket->save();
$status = new TicketStatus;
$status->status = 'pending';
$status->description = 'Harap Tunggu Admin akan Assign ke IT Teknisi';
$status->ticket_id = $ticket->id;
$status->save();
return redirect()->route('ticket.index')
->with('success', 'Ticket Berhasil Diajukan, Harap tunggu!');
}
public function edit(Ticket $ticket) {
$product = Product::all();
xix $client = Client::all();
$programmer = User::where('role', 'programmer')->
get();
$status = TicketStatus::where('ticket_id',
$ticket->id)->get();
return view('ticket.edit', [ 'product' => $product, 'client' => $client, 'ticket' => $ticket,
'programmer' => $programmer, 'status' => $status
]);
}
public function update(Request $request, Ticket
$ticket) {
$status = TicketStatus::firstOrCreate(['status' =>
'to do', 'description' => 'IT Teknisi sudah ditentukan oleh Admin, Tiket akan segera dikerjakan.', 'ticket_id' =>
$ticket->id]);
$status->ticket_id = $ticket->id;
$user = auth()->user();
if ($user->role === "admin") {
$ticket->user_id = $request->user_id;
}
$ticket->save();
return redirect()->route('ticket.index')
->with('success', 'Ticket Berhasil di Assign kepada Programmer');
}
public function destroy($id) {
$ticket = Ticket::findOrFail($id);
$ticket->delete();
return redirect()->route('ticket.index')
->with('delete', 'Ticket berhasil di Hapus!');
}
xx public function download($id) {
$data = DB::table('tickets')->where('id', $id)->
first();
$filepath = storage_path("app/public/{$data->
file}");
return \Response::download($filepath);
}
public function editStatus($id) {
$ticket = Ticket::findOrFail($id);
$product = Product::all();
$client = Client::all();
$status = TicketStatus::where('ticket_id',
$ticket->id)->latest()->first();
return view('ticket.status', [ 'product' => $product, 'client' => $client, 'ticket' => $ticket, 'status' => $status, ]);
}
public function updateStatus(Request $request) {
$status = new TicketStatus;
$status->status = $request->status;
$status->description = $request->description;
$status->ticket_id = $request->ticket_id;
$status->save();
return redirect()->route('ticket.index')
->with('success', 'Status Berhasil Di Ubah!');
}
public function openTicket($id) {
$ticket = Ticket::findOrFail($id);
$ticket->status = 'open';
$ticket->save();
return redirect()->back()->with('success', 'Ticket Berhasil di Buka.');
xxi }
public function closeTicket($id) {
$ticket = Ticket::findOrFail($id);
$ticket->status = 'close';
$ticket->save();
return redirect()->back()->with('success', 'Ticket Berhasil di Tutup.');
} }
Lampiran 1.3 Source Code Tampilan ticket/index.php
@extends('main')
@section('title', 'Ticketing')
@section('content') @php
use Illuminate\Support\Str;
@endphp
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify- content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">Ticket</h1>
</div>
@if (session()->has('success'))
<div class="alert alert-info alert-dismissible col-lg-12" role='alert'>
<button type="button" class="close" data- dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h5><i class="icon fa fa-check-square"></i>
Berhasil!!!</h5>
{{ session('success') }}
</div>
@elseif (session()->has('delete'))
<div class="alert alert-danger alert-dismissible col-lg-12" role='alert'>
<button type="button" class="close" data- dismiss="alert" aria-label="Close">
xxii
<span aria-hidden="true">×</span>
</button>
<h6>{{ session('delete') }}</h6>
</div>
@endif
<!-- DataTales Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text- primary">Data List Ticket</h6>
</div>
<div class="card-body">
@if (Auth::user()->role == 'client') <div class="d-flex mb-3">
<a href="/ticket/create" class="btn btn-success btn-icon-split">
<span class="icon text-white-50">
<i class="fas fa-plus"></i>
</span>
<span class="text">Ajukan Ticket</span>
</a>
</div>
@endif
<div class="table-responsive">
<table class="table table-bordered"
id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>No.</th>
<th width="15%">Nomor Tiket</th>
<th>Produk</th>
<th>Klien</th>
<th>Isu</th>
<th class="text- center">Status</th>
<th class="text- center">Aksi</th>
</tr>
</thead>
<tfoot>
<tr>
<th>No.</th>
xxiii
<th width="15%">Nomor Tiket</th>
<th>Produk</th>
<th>Klien</th>
<th>Isu</th>
<th class="text- center">Status</th>
<th class="text- center">Aksi</th>
</tr>
</tfoot>
<tbody>
@foreach ($ticket as $item) <tr>
<td style="vertical-align:
middle">
{{ $loop->iteration }}
@if ($item-
>created_at->diffInDays() < 2)
<span class="badge badge-warning">New</span>
@endif </td>
<td style="vertical-align:
middle">{{ $item->no_ticket }}</td>
<td style="vertical-align:
middle">{{ $item->product->nama }}</td>
<td style="vertical-align:
middle">{{ $item->client->name }}</td>
<td>{!! Str::limit($item-
>issue, 51, '...') !!}</td>
<td class="text-center"
style="vertical-align: middle">
@php
$latestStatus =
$item
-
>ticketStatus()
-
>where('ticket_id', $item->id)
->latest() ->first();
@endphp
@if ($latestStatus) @php
xxiv
$status =
$latestStatus->status;
@endphp <span
class="badge p-2
{{ $status ==
'pending' ? 'badge-secondary' : ($status == 'to do' ? 'badge-dark' : ($status == 'on progress' ? 'badge-warning' : ($status == 'testing' ? 'badge-info' : ($status ==
'staging' ? 'badge-primary' : ($status == 'done' ? 'badge- success' : ''))))) }}">
{{
ucfirst($status) }}
</span>
@if (Auth::user()-
>can('admin') || Auth::user()->can('programmer'))
@if ($item-
>status == 'close')
<hr class="mt-2 mb-2">
<sup class="text-danger">*Tiket di Tutup oleh Klien</sup>
@endif @endif
@can('client') @if ($item-
>status == 'open')
- <a href="/ticket/close/{{ $item->id }}"
class="btn btn-circle btn-sm btn-danger" data- toggle="tooltip"
data- placement="top" title="Close Ticket"><i
class="fas fa-lock-open"></i></a>
@elseif ($item->status == 'close')
- <a href="/ticket/open/{{ $item->id }}"
xxv
class="btn btn-circle btn-sm btn-danger" data- toggle="tooltip"
data- placement="top" title="Open Ticket"><i class="fas fa- lock"></i></a>
@endif @endcan @else
<span>-</span>
@endif </td>
<td class="text-center px- 0" style="vertical-align: middle">
<a href="/ticket/{{
$item->id }}" class="btn btn-circle btn-sm btn-primary"
data-
toggle="tooltip" data-placement="bottom" title="Detail"><i class="fas fa- eye"></i></a>
@if (Auth::user()-
>can('programmer') && $item->status !== 'close') <a
href="/ticket/status/{{ $item->id }}"
class="btn btn-circle btn-sm btn-success" data-toggle="tooltip"
data-
placement="top" title="Edit Status"><i class="fas fa- plus"></i></a>
@endif
@if (Auth::user()-
>can('admin') && $latestStatus && $latestStatus->status !=
'done' && $item->status !== 'close')
<a href="/ticket/{{ $item->id }}/edit"
class="btn btn-circle btn-sm btn-warning" data-toggle="tooltip"
data-
placement="top" title="Edit"><i class="fa fa- edit"></i></a>
@endif
@can('admin') @if
(!$latestStatus || ($latestStatus->status != 'done' &&
$item->status !== 'close'))
xxvi
<form
action="/ticket/{{ $item->id }}" method="POST" class="d- inline">
@method('delete')
@csrf <button class="btn btn-circle btn-sm btn-danger" title="Hapus"
onclick="return confirm('Yakin Mau Di Hapus?')"><i class="fa fa-trash"></i></button>
</form>
@endif @endcan </td>
</tr>
@endforeach </tbody>
</table>
</div>
</div>
</div>
@endsection
Lampiran 1.4 Source Code Tampilan Form pengajuan ticket/pengajuan.php
@extends('main')
@section('title', 'Tambah Ticket')
@section('content') @php
use Carbon\Carbon;
@endphp
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify- content-between mb-4">
<h1 class="h3 mb-0 text-gray-800"><strong>Ticket /</strong> Pengajuan Ticket</h1>
</div>
@if (session()->has('success'))
xxvii
<div class="alert alert-info alert-dismissible col-lg-12" role='alert'>
<button type="button" class="close" data- dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h5><i class="icon fa fa-check-square"></i>
Berhasil!!!</h5>
{{ session('success') }}
</div>
@endif
<div class="container card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text- primary">Form Pengajuan Ticket</h6>
</div>
<div class="card-body">
<form action="/ticket" method="post"
enctype="multipart/form-data">
@csrf
<div class="row">
<div class="col-md-9">
<div class="form-row">
<div class="form-group col-md- 12">
<label
for="product">Product <span class="text- danger">*</span></label>
<select class="custom- select mr-sm-2" id="product" name="product_id" required>
<option value=""
selected hidden>Pilih Product</option>
@foreach ($project as
$prd)
@php
$tanggal =
\Carbon\Carbon::parse($prd->finish_project);
$tanggal-
>locale('id');
@endphp @if (Carbon::now()->gt($prd->finish_project))
xxviii
<option
value="{{ $prd->product->id }}" style="color: #a2a2a5"
disabled>
{{ $prd-
>product->nama }} -
(Support Sudah tidak Berlaku sejak
{{
$tanggal->isoFormat('D MMMM YYYY') }})
</option>
@else
<option value="{{ $prd->product->id }}" class="py-3">
{{ $prd-
>product->nama }} - (Support
Berlaku Sampai {{ $tanggal->isoFormat('D MMMM YYYY') }})</option>
@endif @endforeach </select>
</div>
</div>
<div class="form-row">
<div class="form-group col-md- 12">
<label
for="sla_id">Urgency (SLA) <span class="text- danger">*</span></label>
<select name="sla_id"
id="sla_id" class="custom-select mr-sm-2" required>
<option value=""
selected hidden>-- Pilih --</option>
@foreach ($slas as
$sla)
<option value="{{
$sla->id }}">{{ $sla->name }} (response time:
{{ $sla-
>response_time }} Hours, resolution time: {{ $sla-
>resolution_time }}
Hours)</option>
@endforeach </select>
</div>
xxix </div>
<input type="hidden" value="{{
Auth::user()->client_id }}" name="client_id">
<div class="form-row">
<div class="form-group col-md- 12">
<label for="file">Attach Assignment</label>
<input type="file"
class="form-control-file" name="file" id="file" required>
</div>
</div>
<div class="form-row">
<div class="form-group col-md- 12">
<label for="issue">Issue
<span class="text-danger">*</span></label>
<textarea class="form- control" id="summernote" name="issue" rows="5"
placeholder="Masukkan Issue..." required></textarea>
</div>
</div>
<div class="form-row justify- content-start">
<a href="/ticket" class="btn btn-danger my-3 px-4 mr-2">Kembali</a>
<button type="submit"
class="btn btn-primary my-3 px-4">Simpan</button>
</div>
</div>
</div>
</form>
</div>
</div>
@endsection
Lampiran 1.5 Source Code Tampilan Form Assignment ticket/edit.php
@extends('main')
@section('title', 'Edit Ticket')
@section('content')
xxx <!-- Page Heading -->
<div class="d-sm-flex align-items-center justify- content-between mb-4">
<h1 class="h3 mb-0 text-gray-800"><strong>Ticket /</strong> Edit Ticket</h1>
</div>
@if (session()->has('success'))
<div class="alert alert-info alert-dismissible col-lg-12" role='alert'>
<button type="button" class="close" data- dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h5><i class="icon fa fa-check-square"></i>
Berhasil!!!</h5>
{{ session('success') }}
</div>
@endif
<div class="container card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text- primary">Edit Support Ticket</h6>
</div>
<div class="card-body">
<form action="/ticket/{{ $ticket->id }}"
method="POST" enctype="multipart/form-data">
@csrf
@method('put') <div class="row">
<div class="col-md-6">
<div class="form-row">
<div class="form-group col-md- 12">
<label for="product">Product</label>
<input type="text"
class="form-control" value="{{ $ticket->product->nama }}"
disabled>
</div>
</div>
<div class="form-row">
<div class="form-group col-md- 12">