37 4.1 Analisis Kebutuhan Software A. Tahapan Analisis
Halaman Front-page:
A1. User dapat melihat sekilas mengenai perusahaan. A2. User dapat melihat lebih detail mengenai perusahaan. A2. User dapat melihat produk perusahaan.
A3. User dapat melihat detail kontak perusahaan.
A4. User dapat melihat berita terbaru tentang perusahaan.
A5. User dapat melihat pemantaun atau tracking pengiriman berdasarkan code
A6. User dapat melakukan chat.
Halaman Admin:
B1. Admin dapat melihat total keseluruhan aktifitas web. B2. Admin dapat mengakses system setting.
B3. Admin dapat menambahkan, merubah atau menghapus menu dalam web. B4. Admin dapat menambahkan, merubah atau menghapus data tracking Dapat mengelola data chatting.
B. Use Case Diagram
1. Use Case Diagram Member
Gambar IV.1.
Tabel IV.1.
Deskripsi Use Case Diagram Melakukan Tracking Data
Use Case Name Use case diagram melakukan tracking data
Requirements A5
Goal Member dapat memantau barang yang
telah dibeli
Pre-conditions Member dapat mengetahui proses pengiriman secara online
Post-conditions Data barang termonitoring atau tidak Failed end conditions Barang tidak terkirim
Primary Actors Member
Main Flow / Basic Path 1. Member dapat mentracking data barang yang telah berangkat 2. Member dapat mengetahui
perkembangan pengiriman 3. Member dapat mengetahui data
barang secara lebih detail sebelum barang sampai
2. Use Case Diagram Admin
Gambar IV.2. Use Case Diagram Admin
Tabel IV.2.
Deskripsi Use Case Diagram Admin
Use Case Name Tracking
Requirements B4
Goal Admin dapat mengupdate tracking data
Pre-conditions Admin
Post-conditions Data Tracking
Failed end conditions -
Primary Actors Admin
Main Flow / Basic Path 1. Admin dapat menambahkan atau create data baru tracking
2. Admin dapat merubah dan memperbaharui data tracking 3. Admin dapat menghapus data
tracking
B. Activity Diagram
1. Activity Diagram Member
Gambar IV.3. Activity Diagram Member
2. Activity Diagram Tracking
Gambar IV.4. Activity Diagram Tracking
4.2. Desain 4.2.1 Database
1. Entity Relationship Diagram
Gambar IV. 5.
2. Logical Record Structure
Gambar IV. 6. Logical Record Structure
3. Spesifikasi File
a. Spesifikasi File Tabel Member Nama Database : db_agape Nama File : Tabel Member
Akronim : ms_member
Tipe File : File Master
Software : MySQL
Panjang Record : 230 Byte Kunci Field : member_id
Tabel IV. 3.
Spesifikasi File Tabel Member
No Elemen Data Nama Field Type Size Keterangan
1. Kode Member member_id Int 11 Primary
key
2. Member level level_id Int 11
3. Nama member_name Varchar 25
4. Tempat lahir member_place_of_birth Varchar 10 5. Tanggal lahir member_date_of_birth Date
6. Alamat member_address Text
7. Negara member_country_id Int 11
8. Negara member_state_id Int 11
9. Kota member_city_id Int 11
10. Kode Pos member_postcode Varchar 10 11. Telephone member_phone_no Varchar 15
12. Fax member_fax_no Varchar 15
14. Email member_email Varchar 25
15. Type fl_user_type Tinyint 1
16. Active fl_active Tinyint 1
17. Create Id create_id Int 11
18. Create Date create_date datetime
19. Update Id update_id Int 11
20. Update Date update_date datetime
21. Delete fl_delete Tinyint 1
22. Delete Id delete_id Int 11
23. Delete Date delete_date datetime
b. Spesifikasi File Tabel Form Inquery Nama Database : db_agape
Nama File : Tabel Form Inquery Akronim : t_form_inquery Tipe File : File Master
Software : MySQL
Panjang Record : 203 Byte Kunci Field : inquery_id
Tabel IV. 4.
Spesifikasi File Tabel Form Inquery
No Elemen Data Nama Field Type Size Keterangan 1. Kode Inquery inquery_id Bigint 20 Primary
key 2. Departement Chat inquery_departement_id Int 11 3. Nama Perusahaan company_name Varchar 25 4. Alamat Perusahaan address_company Varchar 50
5. Email inquery_email Varchar 25 6. Subject inquery_subject Varchar 50
7. Pesan Message Text
8. active fl_active tinyint 1
9. Create Date create_date datetime 10. Update Date update_date datetime 10
11. Kode Member member_id Int 11 Foreign
key
c. Spesifikasi File Tabel Management Inquery Nama Database : db_agape
Nama File : Tabel Management Inquery Akronim : t_management_inquery Tipe File : File Master
Software : MySQL
Panjang Record : 91 Byte
Tabel IV. 5.
Spesifikasi File Tabel Management Inquery
No Elemen Data Nama Field Type Size Keterangan 1. Kode Inquery
Detail
inquery_detail_id bigint 20 Primary key
2. Dari Form Varchar 25
3. Ke Tujuan To Varchar 25
4. Pesan Message Text
5. Waktu message_time datetime
6. Delete fl_delete tinyint 1
7. Date delete_date datetime
8. Kode Inquery inquery_id bigint 20 Foreign key
d. Spesifikasi File Tabel Tracking Nama Database : db_agape Nama File : Tabel Tracking Akronim : t_tracking Tipe File : File Master
Software : MySQL
Panjang Record : 229 Byte Kunci Field : tracking_id
Tabel IV. 6.
Spesifikasi File Tabel Tracking
No Elemen Data Nama Field Type Size Keterangan 1. Kode
Tracking
tracking_id Bigint 20 Primary
key 2. Tanggal tracking_era_date Date
3. No. MBL tracking_mbl_no Varchar 15
4. POD1 tracking_pod1 Varchar 15
5. Qty tracking_qty Varchar 10
6. No. Invoice tracking_invoice_no Varchar 10 7. Vessel tracking_feeder_vessel Varchar 10 8. Consignee tracking_consignee Varchar 10 9. No. HBL tracking_hbl_no Varchar 15 10. Shipper tracking_shipper_name Varchar 50 11. JOB tracking_job_no Varchar 10 12. POD2 tracking_pod2 Varchar 10 13. Mother
Vessel
tracking_mother_vessel Varchar 15
14. Deskripsi tracking_description Text
15. Active fl_active tinyin 1
16. Create Id create_id Int 11
17. Create Date create_date datetime
18. Update Id update_id Int 11
19. Update Date update_date datetime
20. Delete fl_delete tinyint 1
21. Delete Id delete_id Int 11
23. Kode Inquery inquery_id Bigint 15 Foreign key
4.2.2 Software Architecture A. Component Diagram
Gambar IV.7
Componen Diagram Tracking
Component diagram menggambarkan struktur dan hubungan antara komponen piranti lunak, termasuk ketergantungan (dependency) diantaranya, komponen piranti lunak adalah modul berisi code, baik berisi source code maupun binary code, baik library maupun executable, baik yang muncul pada compile time, link time, maupun run time. Umumnya komponen terbentuk dari beberapa class dan atau package, tapi dapat juga dari komponen-komponen yang lebih
kecil. Komponen dapat juga berupa interface, yaitu kumpulan layanan yang disediakan sebuah komponen untuk komponen lain.
B. Deployment Diagram
Gambar IV.8.
Deployment Diagram Tracking
Deployment diagram menyediakan gambaran bagaimana sistem secara fisik akan terlihat. Sistem diwakili oleh node-node, dimana masing - masing node diwakili oleh sebuah kubus. Garis yang menghubungkan kedua kubus menunjukkan hubungan diantara kedua node tersebut
4.2.3. User Interface A. User Interface Home
Gambar IV.9. User Interface Home
B. User Interface About Us
Gambar IV.10. User Interface About Us
C. User Interface Services
Gambar IV.11. User Interface Product
D. User Interface Offices
Gambar IV.12. User Interface Office
E. User Interface News
Gambar IV.13 User Interface News
E. User Interface Contact US
Gambar IV.14 User Interface Contact Us
G. User Interface Tracking 1. Login Tracking
Gambar IV.15.
User Interface Login Tracking 2. Search Tracking
Gambar IV.16.
3. Tampilan Hasil Search Tracking
Gambar IV.17.
User Interface Tampilan Hasil Search Tracking
4. Tampilan detail Tracking
Gambar IV.18.
H. User Interface Live Chat
Gambar IV.19. User Interface Live Chat
I. User Interface Login Admin
Gambar IV.20. User Interface Login Admin
J. User Interface Admin Home
Gambar IV.21.
K. User Interface Admin Main Feature Homepage
Gambar IV.22.
User Interface Login Admin Main Feature Homepage
L. User Interface Admin Main Feature About Us
Gambar IV.23.
M. User Interface Admin Main Feature Services
Gambar IV.24.
User Interface Login Admin Main Feature Services
N. User Interface Admin Main Feature Offices
Gambar IV.25.
O. User Interface Admin Main Feature News
Gambar IV.26.
4.3. Class Generation
A. Class Tracking
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /*
* To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates
* and open the template in the editor. */
class tracking extends CI_Controller { //put your code here
function __construct() { parent::__construct(); $this->load->library(array('form_validation','table')); $this->load->helper('form'); } function index() { //Load Template $url=str_replace($this->tools->url_replace(),"",$_SERVER['REQUEST_URI']); $data['TopNavigation'] = $this->load->view('Template/top_sidebar','',TRUE); $data['Footer'] = $this->load->view('Template/footer','',TRUE); $data['RightNavigation'] = $this->load->view('Template/right_navigation','',TRUE);
$tmpl = array ( 'table_open' => '<table class="table striped table-bordered table-hover" id="myTable">' );
$this->table->set_template($tmpl);
$this->table->set_heading('No. ','Date Arrived','MBL No.','POD','HBL No','Active','Action'); $data['table']=$this->table->generate(); $ModulGroup = $this->m_modul->get_modul_group($url)->row_array(); $data['LeftNavigation'] = $this->navigation->get_navigation($ModulGroup['modul_group_name'],$ModulGroup['modul_grou p_sub_name'],$ModulGroup['modul_name']); $data['MainContent'] = $this->load->view('v_tracking',$data,TRUE); $this->load->view('Template/master_page',$data); } function dataTable() { $countRowTable = $this->m_tracking->get_num_rows(); $queryTable = $this->m_tracking->get_paged_list()->result_array(); $rowData = array(); $no =1; $IconAdd = $this->configuration->icon_add(); $IconEdit = $this->configuration->icon_edit(); $IconDelete = $this->configuration->icon_delete(); $IconView = $this->configuration->icon_view(); foreach($queryTable as $qT) { $buttAction = '
<a data-toggle="modal" href="#editTracking" onClick="openModalEdit(\'' . $qT['tracking_id'] . '\')"> '.$IconEdit.' Edit
<a data-toggle="modal" href="#editTracking" onClick="openModalView(\'' . $qT['tracking_id'] . '\')"> '.$IconView.' View
</a> 
<a data-toggle="modal" href="#" onClick="DeleteData(\'' . $qT['tracking_id'] . '\')">
'.$IconDelete.' Delete </a>
';
$cellActive = ($qT['fl_active'] == '1') ? 'Yes' : 'No'; $rowData[] = array($no,date('d-m-Y',strtotime($qT['tracking_eta_date'])),$qT['tracking_mbl_no'],$qT['tracking_pod 1'],$qT['tracking_hbl_no'],$cellActive, $buttAction); $no++; } echo '{"draw":1,"recordsTotal":'.$countRowTable.',"recordsFiltered": '.$countRowTable.', "data" :',json_encode($rowData).'}';
} function DeleteData($id) { $status = 0; if(!empty($id)) { $queryCekData = $this->m_tracking->get_by_id($id)->row_array(); if(!empty($queryCekData)) { $arrData = array( 'fl_delete' => 1,
'delete_id' => $this->session->userdata('id_login'), 'delete_date' => $this->tools->getTimeZone()->format('Y-m-d H:i:s'), ); $this->m_tracking->delete($id,$arrData); $status = 1; } } echo $status; }
public function formAdd() {
$this->form_validation->set_error_delimiters('<div class="alert alert-danger">', '</div>');
if (empty($_FILES['File']['name'])) {
$this->form_validation->set_rules('File', 'Document', 'required'); } $data['buttonValue']="Save"; $data['TrackingID']=""; $data['CheckAttr'] = "checked='true'"; $data['StatusValue'] = "Y"; if ($this->form_validation->run() == FALSE) { $data['frmAction'] = 'tracking/upload_file/'; $this->load->view('v_tracking_edit', $data); }
else { $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'xls|xlsx'; $config['max_size'] = 8096; $config['max_width'] = 1024; $config['max_height'] = 768; $config['overwrite'] = true; $config['remove_space'] = true; $this->upload->initialize($config); print_r($this->upload->data()); if (!$this->upload->do_upload("File")) { print_r($this->upload->data()); $error = $this->upload->display_errors();
echo '<script>alert("Upload Failed('.$error.')!");</script>'; } else { print_r($this->upload->data()); $file = $this->upload->data('full_path'); echo $file; } } }
function upload_file() { $config['upload_path'] = 'C:/xampp/htdocs/Agape_Admin/uploads/'; $config['allowed_types'] = 'xls|xlsx'; $config['max_size'] = 8096; $config['max_width'] = 1024; $config['max_height'] = 768; $config['overwrite'] = true; $config['remove_space'] = true; $this->upload->initialize($config); //print_r($this->upload->data()); if (!$this->upload->do_upload("File")) { $error = $this->upload->display_errors();
echo '<script>alert("Upload Failed('.$error.')!");</script>'; }
else {
$file = $this->upload->data('full_path'); //read file from path
$objPHPExcel = PHPExcel_IOFactory::load($file);
//get only the Cell Collection
$cell_collection = $objPHPExcel->getActiveSheet()->getCellCollection();
foreach ($cell_collection as $cell) { $column = $objPHPExcel->getActiveSheet()->getCell($cell)->getColumn(); $row = $objPHPExcel->getActiveSheet()->getCell($cell)->getRow(); $data_value = $objPHPExcel->getActiveSheet()->getCell($cell)->getValue();
//header will/should be in row 1 only. of course this can be modified to suit your need.
if ($row == 1) { $header[$row][$column] = $data_value; } else { $arr_data[$row][$column] = $data_value; } }
//send the data in an array format $data['header'] = $header; $data['values'] = $arr_data; //print_r($data['header']); //print_r($data['values']); $CountHeader = count($data['header']); $CountData = count($data['values']); $i=1; for($i=$CountHeader+$i;$i<=$CountData+1;$i++) { if((strcmp($data['values'][$i]['A'],"0000-00-00")=== 1) && strlen($data['values'][$i]['C']) >= 4) { if(!empty($data['values'][$i]['A']))
{ $TrackingDate = $this->tools->ConvertTimeZone($this->tools->convert_date_excel($data['values'][$i]['A'])); } else { $TrackingDate = ""; } if(!empty($data['values'][$i]['B'])) { $TrackingMBLNo = $data['values'][$i]['B']; } else { $TrackingMBLNo = ""; } if(!empty($data['values'][$i]['C'])) { $TrackingPOD1 = $data['values'][$i]['C']; } else { $TrackingPOD1 = ""; } if(!empty($data['values'][$i]['D'])) { $TrackingQty = $data['values'][$i]['D']; } else
{ $TrackingQty = ""; } if(!empty($data['values'][$i]['E'])) { $TrackingInvoiceNo = $data['values'][$i]['E']; } else { $TrackingInvoiceNo = ""; } if(!empty($data['values'][$i]['F'])) { $TrackingFeederVessel = $data['values'][$i]['F']; } else { $TrackingFeederVessel =""; } if(!empty($data['values'][$i]['G'])) { $TrackingConsignee = $data['values'][$i]['G']; } else { $TrackingConsignee =""; } if(!empty($data['values'][$i]['H']))
{ $TrackingHBLNo = $data['values'][$i]['H']; } else { $TrackingHBLNo = ""; } if(!empty($data['values'][$i]['I'])) { $TrackingShipperName = $data['values'][$i]['I']; } else { $TrackingShipperName = ""; } if(!empty($data['values'][$i]['J'])) { $TrackingJobNo = $data['values'][$i]['J']; } else { $TrackingJobNo = ""; } if(!empty($data['values'][$i]['K'])) { $TrackingPOD2 = $data['values'][$i]['K']; } else
{ $TrackingPOD2 = ""; } if(!empty($data['values'][$i]['L'])) { $TrackingMotherVessel = $data['values'][$i]['L']; } else { $TrackingMotherVessel =""; } if(!empty($data['values'][$i]['M'])) { $TrackingDescription = $data['values'][$i]['M']; } else { $TrackingDescription =""; }
$aktif = ($_POST['StatusData'] == 'Y') ? '1' : '0'; $arrData = array( "tracking_eta_date" => $TrackingDate, "tracking_mbl_no" => $TrackingMBLNo, "tracking_pod1" => $TrackingPOD1, "tracking_qty" => $TrackingQty, "tracking_invoice_no" => $TrackingInvoiceNo, "tracking_feeder_vessel" => $TrackingFeederVessel, "tracking_consignee" => $TrackingConsignee,
"tracking_hbl_no" => $TrackingHBLNo, "tracking_shipper_name" => $TrackingShipperName, "tracking_job_no" => $TrackingJobNo, "tracking_pod2" => $TrackingPOD2, "tracking_mother_vessel" => $TrackingMotherVessel, "tracking_description" => $TrackingDescription, "fl_active" => $aktif, "create_id" => $this->session->userdata('id_login'), "create_date" => $this->tools->getTimeZone()->format('Y-m-d H:i:s'), "fl_delete" => 0 ); $this->m_tracking->insert($arrData); } } } } function formEdit($id) {
$this->form_validation->set_error_delimiters('<div class="alert alert-danger">', '</div>');
$this->form_validation->set_rules('TrackingETADate', 'Tracking ETA Date', 'required'); $data['buttonValue']="Update"; $data['id'] = $id; $query = $this->m_tracking->get_by_id($id)->result_array(); foreach($query as $q) { $data['TrackingID'] = $q['tracking_id'];
$data['TrackingETADate'] = date('d-m-Y',strtotime($q['tracking_eta_date'])); $data['TrackingMBLNo'] = $q['tracking_mbl_no']; $data['TrackingPOD1'] = $q['tracking_pod1']; $data['TrackingQty'] = $q['tracking_qty']; $data['TrackingInvoiceNo'] = $q['tracking_invoice_no']; $data['TrackingFeederVessel'] = $q['tracking_feeder_vessel']; $data['TrackingConsignee'] = $q['tracking_consignee']; $data['TrackingHBLNo'] = $q['tracking_hbl_no']; $data['TrackingShipperName'] = $q['tracking_shipper_name']; $data['TrackingJobNo'] = $q['tracking_job_no']; $data['TrackingPOD2'] = $q['tracking_pod2']; $data['TrackingMotherVessel'] = $q['tracking_mother_vessel']; $data['TrackingDescription'] = $q['tracking_description']; $data['StatusValue'] = ($q['fl_active'] == '1') ? "Y" : "N";
$data['CheckAttr'] = ($q['fl_active'] == '1') ? "checked='true'" : ""; }
if ($this->form_validation->run() == FALSE) { $data['frmAction'] = 'tracking/formEdit/' .$id; $this->load->view('v_tracking_data_edit', $data); } else {
$aktif = ($_POST['StatusData'] == 'Y') ? '1' : '0'; $arrData = array( "tracking_eta_date" => date('Y-m-d',strtotime($_POST['TrackingETADate'])), "tracking_mbl_no" => $_POST['TrackingMBLNo'], "tracking_pod1" => $_POST['TrackingPOD1'], "tracking_qty" => $_POST['TrackingQty'],
"tracking_invoice_no" => $_POST['TrackingInvoiceNo'], "tracking_feeder_vessel" => $_POST['TrackingFeederVessel'], "tracking_consignee" => $_POST['TrackingConsignee'], "tracking_hbl_no" => $_POST['TrackingHBLNo'], "tracking_shipper_name" => $_POST['TrackingShipperName'], "tracking_job_no" => $_POST['TrackingJobNo'], "tracking_pod2" => $_POST['TrackingPOD2'], "tracking_mother_vessel" => $_POST['TrackingMotherVessel'], "tracking_description" => $_POST['TrackingDescription'], "fl_active" => $aktif, "update_id" => $this->session->userdata('id_login'),
"update_date" => $this->tools->getTimeZone()->format('Y-m-d H:i:s'), "fl_delete" => 0 ); $this->m_tracking->update($id,$arrData); } } function tracking_view($id) { $data['frmAction']=""; $query = $this->m_tracking->get_by_id($id)->result_array(); foreach($query as $q) { $data['TrackingID'] = $q['tracking_id']; $data['TrackingETADate'] = date('d-m-Y',strtotime($q['tracking_eta_date'])); $data['TrackingMBLNo'] = $q['tracking_mbl_no']; $data['TrackingPOD1'] = $q['tracking_pod1'];
$data['TrackingQty'] = $q['tracking_qty']; $data['TrackingInvoiceNo'] = $q['tracking_invoice_no']; $data['TrackingFeederVessel'] = $q['tracking_feeder_vessel']; $data['TrackingConsignee'] = $q['tracking_consignee']; $data['TrackingHBLNo'] = $q['tracking_hbl_no']; $data['TrackingShipperName'] = $q['tracking_shipper_name']; $data['TrackingJobNo'] = $q['tracking_job_no']; $data['TrackingPOD2'] = $q['tracking_pod2']; $data['TrackingMotherVessel'] = $q['tracking_mother_vessel']; $data['TrackingDescription'] = $q['tracking_description']; $data['StatusValue'] = ($q['fl_active'] == '1') ? "Y" : "N";
$data['CheckAttr'] = ($q['fl_active'] == '1') ? "checked='true'" : ""; }
$this->load->view('v_tracking_data_view', $data); }
4.4. Testing
A. Form Login Tracking
Tabel IV.7.
Hasil Pengujian Black Box Testing Form Login Tracking
B. Form Login Admin
Tabel IV.8.
4.5.Support
4.5.1. Publikasi Web
Setelah website selesai dibuat, harus di uji coba pada server lokal untuk mencoba alur sistem, interaksi dengan user dan untuk check link antar halaman. Setelah semua itu di lakukan untuk dapat diakses melalui internet, website tersebut harus dipublikasikan ( upload ) ke sebuah server yang ada di internet.
Untuk hosting website penulis menggunakan jasa www.dijaminmurah.com, tidak dikenakan biaya, dengan nama website www.group-nsh.com
a. Nama Domain
Nama domain (domain name) adalah nama unik yang diberikan untuk mengidentifikasi nama server komputer seperti web server atau email server di jaringan komputer ataupun internet. Nama domain berfungsi untuk mempermudah pengguna di internet pada saat melakukan akses ke server, selain itu juga dapat dipakai untuk mengingat nama server yang dikunjungi tanpa harus mengenai deretan angka yang rumit yang dikenal sebagai IP adress. Nama domain ini juga dikenal sebagai sebuah kesatuan dari sebuah situs web. Nama domain sering juga disebut sebagai URL, atau alamat website.
b. Kapasitas Hosting
Hosting adalah jasa layanan internet yang menyediakan server – server untuk disewakan sehingga memungkinkan organisasi atau individu menempatkan informasi di internet. Kapasitas yang disediakan oleh hosting
beraneka ragam mulai dari 25MB, 50MB, 100MB, 200MB dampai dengan 500 MB.
4.5.2. Spesifikasi Hardware dan Software Tabel IV.9.
Spesifikasi Hardware dan Software Usulan
Kebutuhan Keterangan
Sistem Operasi Processor
Windows 7 Ultimate
Prosesor core2duo, memori 4 GB, hardisk 500 GB
RAM 2 GB Hardisk CD-ROM 350 GB Standar Monitor Keyboard Standar Standar Mouse Browser Standar
Mozila Firefox, Google Chrome, Internet Explorer Software PHP MyAdmin, CSS, Jquery, Dreamweaver,
Photoshop, Microsoft Excel
4.6. Spesifikasi Dokumen Sistem Usulan Spesifikasi rancangan berbentuk dokumen A. Nama dokumen : Detail Data Tracking
Fungsi : Sebagai Informasi Tracking
Sumber : Admin
Tujuan : Member
Media : Website (Tampilan Layar)
Frekuensi : Setiap terjadi pencarian data tracking Format : Lampiran B – 1