BAB 5 IMPLEMENTASI & PENGUJIAN SISTEM
5.2 Pengujian Sistem
62 15. Halaman Detail Status Ticket
Halaman detail status ticket merupakan tampilan yang berisi detail dari tiket terkait seperti status progres, dokumen laporan, isu laporan dan riwayat status progres tiket beserta keterangannya.
Gambar 5. 15: Tampilan Halaman Detail Status Ticket
63 memasukkan
email atau password yang tidak sesuai data
menampilkan pesan bahwa email atau password salah
n pesan gagal login karena data tidak sesuai
Halaman Dashboard
User berhasil login dengan data email dan password yang sesuai
Menampilkan jumlah tiket, produk dan proyek sesuai dengan user terkait
Jumlah tiket, produk dam proyek yang ditampilkan sesuai
dengan user terkait
Valid
Pengelolaan data user
Admin
menambahkan user baru dengan client yang sudah terdaftar
Data user baru akan gagal ditambahkan karena dari satu client perusahaan hanya satu user
Admin mendapatka n pesan bahwa client sudah
terdaftar
Valid
Pengelolaan data client
Admin
menambahkan perusahaan klien
Data perusahaan klien baru
Admin mendapatka n pesan
Valid
64 baru dengan data
perusahaan yang sudah terdaftar
akan gagal ditambahkan dan
mendapatkan pesan bahwa perusahaan klien sudah ada.
bahwa perusahaan klien sudah ada.
Pengelolaan data produk
Admin
menambahkan nama produk dan klien yang sudah ada
Data produk baru akan gagal
ditambahkan dan
menampilkan pesan produk sudah ada
Admin mendapatka n pesan bahwa produk sudah ada
Valid
Pengelolaan data proyek
Admin
menambahkan produk dan klien yang sudah ada untuk proyeknya
Proyek baru akan gagal ditambahkan dan
menampilkan pesan klien
Admin mendapatka n pesan bahwa klien dan produk sudah ada
Valid
65
dan produk sudah ada Form
pengajuan tiket
Klien mengajukan tiket laporan permasalahan dengan produk yang sudah ada dan
Pengajuan akan gagal karena tiket dengan produk terkait sudah ada
Klien dapat pesan bahwa tiket dengan produk terkait sudah ada
Valid
Assigned tiket
Admin memberikan tugas kepada IT Teknisi untuk menyelesaikan laporan
permasalahan klien, tetapi status tiket harus sudah dibuka oleh klien.
Pemberian tugas kepada IT Teknisi berhasil dan status berubah menjadi “On Progress”, jika tiket di tutup oleh klien maka tidak akan bisa memberi tugas
Admin berhasil memberikan tugas kepada IT Teknisi yang
dimaksud dan status berubah menjadi “On Progress”
Valid
Edit status tiket
IT Teknisi merubah status
Status progres tiket berubah
IT Teknisi berhasil
Valid
66 disetiap progres
tiketnya
dan masuk ke riwayat status tiket pada detail tiket
merubah status
progres tiket dan masuk ke riwayat status tiket pada detail tiket
Detail status tiket
Klien klik tombol detail tiket untuk melihat detail tiket dan riwayat status dari tiket yang dimiliki
Detail tiket berhasil menampilkan riwayat status progres
Klien berhasil melihat detail tiket dengan riwayat status progres
Valid
67
BAB 6 PENUTUP
6.1 Kesimpulan
Berdasarkan hasil penelitian yang telah dilakukan, maka penulis akan mencoba menarik kesimpulan tentang penerapan Sistem Informasi Support Ticketing Berbasis Web, yaitu:
1. Sistem Informasi Support Ticketing ini dapat memberikan pelayanan penyampaian laporan permasalahan dari klien dan dapat melihat status progresnya dengan mudah melalui sistem informasi support ticketing berbasis web perusahaan.
2. Dengan adanya sistem informasi support ticketing dapat meningkatkan efisiensi dan efektivitas dalam mengelola laporan permasalahan yang dihadapi oleh klien.
3. Sistem informasi support ticketing ini untuk mempercepat dan mempermudah klien dalam menyampaikan permasalahan pada produknya sehingga dapat mengefisiensi waktu dalam proses penyelesaiannya.
4. Sistem informasi support ticketing ini dapat membantu Admin dalam pemberian tugas kepada IT Teknisi untuk menyelesaikan permasalahan dari klien.
68 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))