4. IMPLEMENTASI SISTEM
Pada bab ini akan membahas implementasi sistem dari analisis dan desain sistem yang dijelaskan pada bab sebelumnya. Implementasi sistem yang akan dijelaskan pada bab ini terdiri dari koneksi database dan implementasi program.
Tabel 4.1. Daftar Hubungan Fitur, Data Flow Diagram dan Semen Program
Nama Fitur Data Flow Diagram (DFD) Segmen
Program Memasukkan data cabang Proses 1.1. Mengelola Pegawai
Memasukkan data pegawai dan user
Proses 1.1. Mengelola Pegawai
Memasukkan data produk Proses 1.2. Mengelola Produk 4.7 Memasukkan data bahan baku Proses 1.2. Mengelola Bahan
Baku
Memasukkan data satuan Proses 1.2. Mengelola Bahan Baku
Melihat data pegawai dan user Proses 1.1. Mengelola Pegawai
Melihat data produk Proses 1.2. Mengelola Produk 4.8 Melihat data bahan baku Proses 1.2. Mengelola Bahan
Baku
Melihat data satuan Proses 1.2. Mengelola Bahan Baku
Memasukkan data bill of material
Proses 1.2. Mengelola Bahan Baku
Melihat data bill of material Proses 1.2. Mengelola Bahan Baku
4.10
Memasukkan data customer, data sales order
Proses 1.4. Mengelola Penjualan
Melihat data customer Proses 1.4. Mengelola Penjualan
Melihat data sales order Proses 1.4. Mengelola Penjualan
Tabel 4.1. Daftar Hubungan Fitur, Data Flow Diagram dan Semen Program (Sambungan)
Memasukkan data stok bahan baku masuk
Proses 1.7. Mengelola Stok Bahan Baku
Memasukkan data stok bahan baku keluar
Proses 1.7. Mengelola Stok Bahan Baku
Memasukkan data stok produk masuk
Proses 1.8. Mengelola Stok Produk
4.11
Memasukkan data stok produk keluar
Proses 1.8. Mengelola Stok Produk
Melihat data stok bahan baku Proses 1.7. Mengelola Stok Bahan Baku
Melihat data stok produk Proses 1.8. Mengelola Stok Produk
Memasukkan data delivery order Proses 1.8. Mengelola Stok Produk
Melihat data delivery order Proses 1.8. Mengelola Stok Produk
Memasukkan data retur Proses 1.9. Mengelola Retur Melihat data retur Proses 1.9. Mengelola Retur Memasukkan data purchase
order
Proses 1.6. Mengelola Pemesanan Bahan Baku
Melihat data purchase order Proses 1.6. Mengelola Pemesanan Bahan Baku
Memasukkan data pembayaran sales order
Proses 1.5. Mengelola Pembayaran
4.12
Melihat data invoice sales order Proses 1.5. Mengelola Pembayaran
Memasukkan data pembayaran purchase order
Proses 1.5. Mengelola
Pembayaran
Tabel 4.1. Daftar Hubungan Fitur, Data Flow Diagram dan Semen Program (Sambungan)
Melihat data invoice pembayaran purchase order
Proses 1.5. Mengelola Pembayaran
Memasukkan data reorder point Proses 1.10. Mengelola ROP 4.14 Melihat data reorder point Proses 1.10. Mengelola ROP
Memasukkan data harga jual produk
Proses 1.11. Mengelola Harga Jual Produk
Melihat harga jual produk Proses 1.11. Mengelola Harga Jual Produk
4.1. Koneksi Database
Koneksi database diperlukan untuk dapat mengakses, menambah, dan mengelola data yang tersimpan. Koneksi database menghubungkan antara program dengan database MySQL. Koneksi database dibuat pada file “connect.php”.
Source code koneksi database program dapat dilihat pada Segmen Program 4.1.
Segmen Program 4.1. Source Code Koneksi Database
<?php
//Connection to Database
$con =mysqli_connect("localhost","root","","pthc");
//Cek Error saat Koneksi if($con === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
//Set Default Timezone
date_default_timezone_set ("Asia/Jakarta");
?>
4.2. Implementasi Program 4.2.1. Login Hak Akses
Menu Login dibutuhkan untuk melakukan autentikasi kepada user apakah
user yang bersangkutan memiliki hak akses untuk masuk ke halaman web yang
dituju. Hak akses yang ada pada web ini dibagi menjadi 5 (lima) role, yaitu login
Administrator/Pusat, login direktur cabang, login sales cabang, login gudang cabang dan login keuangan cabang. Proses autentikasi juga melihat status aktif user pegawai, jika aktif maka login berhasil. Tetapi jika user tidak aktif maka login akan gagal. Source code login dapat dilihat pada Segmen Program 4.2.
Segmen Program 4.2. Source code Login
<?php
include('connect.php');
$username =
mysql_real_escape_string(htmlentities($_POST['username']));
$password = md5($_POST['password']);
$sql = mysql_query("SELECT * FROM pegawai p
INNER JOIN divisi d ON p.iddivisi = d.iddivisi INNER JOIN cabang c ON p.idcabang=c.idcabang
INNER JOIN provinsi p ON c.area_cabang = p.id_provinsi WHERE username='$username' AND password='$password'") or die(mysql_error());
//Cek Apakah Username/Password ada pada database if(mysql_num_rows($sql) == 0){
echo '<script language="javascript">alert("User/Password Salah");
document.location="index.php";</script>';}
else{
$row = mysql_fetch_assoc($sql);
//autentikasi hak akses dan status aktif user
if($row['namadivisi'] == "Admin" && $row['status_user'] ==
"Active"){
$_SESSION['username']=$row['username'];
$_SESSION['password']=$row['password'];
$_SESSION['iddivisi']=$row['iddivisi'];
$_SESSION['namapegawai']=$row['nama_pegawai'];
$_SESSION['pegawai']=$row['idpegawai'];
$_SESSION['area_cabang']=$row['area_cabang'];
echo '<script language="javascript">alert("Anda berhasil Login Admin!");
document.location="Admin/home.php"; </script>';}
elseif ($row['namadivisi']=="Direktur" &&
$row['status_user'] == "Active") {
$_SESSION['username']=$row['username'];
$_SESSION['iddivisi']=$row['iddivisi'];
$_SESSION['namapegawai']=$row['nama_pegawai'];
$_SESSION['cabang']=$row['idcabang'];
$_SESSION['area_cabang']=$row['area_cabang'];
echo '<script language="javascript">alert("Anda berhasil Login Direktur!");
document.location="Direktur/home.php";</script>';}
elseif ($row['namadivisi']=="Sales" && $row['status_user']
== "Active") {
$_SESSION['username']=$row['username'];
$_SESSION['iddivisi']=$row['iddivisi'];
$_SESSION['namapegawai']=$row['nama_pegawai'];
$_SESSION['pegawai']=$row['idpegawai'];
$_SESSION['cabang']=$row['idcabang'];
Segmen Program 4.2. Source Code Login (Sambungan)
$_SESSION['area_cabang']=$row['nama_provinsi'];
$_SESSION['area']=$row['area_cabang'];
echo '<script language="javascript">alert("Anda berhasil Login Sales!");
document.location="Sales/home.php";</script>';}
elseif ($row['namadivisi']=="Finance" &&
$row['status_user'] == "Active") {
$_SESSION['username']=$row['username'];
$_SESSION['iddivisi']=$row['iddivisi'];
$_SESSION['namapegawai']=$row['nama_pegawai'];
$_SESSION['pegawai']=$row['idpegawai'];
$_SESSION['cabang']=$row['idcabang'];
$_SESSION['area_cabang']=$row['nama_provinsi'];
$_SESSION['area']=$row['area_cabang'];
echo '<script language="javascript">alert("Anda berhasil Login Finance!");
document.location="keuangan/home.php";</script>';}
elseif ($row['namadivisi']=="Warehouse" &&
$row['status_user'] == "Active") {
$_SESSION['username']=$row['username'];
$_SESSION['iddivisi']=$row['iddivisi'];
$_SESSION['namapegawai']=$row['nama_pegawai'];
$_SESSION['pegawai']=$row['idpegawai'];
$_SESSION['cabang']=$row['idcabang'];
$_SESSION['area_cabang']=$row['nama_provinsi'];
echo '<script language="javascript">alert("Anda berhasil Login Warehouse!");
document.location="Gudang/home.php";</script>';}
else{
echo'<script language="javascript">alert
("User anda tidak Aktif hubungi Admin untuk informasi lebih lanjut.");
document.location="index.php";</script>';}
}
?>
4.2.2. Logout Hak Akses
Logout hak akses memiliki fungsi untuk mengberhentikan status login dari user yang telah login pada halaman login. Tombol logout terletak pada pojok kanan atas setiap halaman web. Source code fungsi logout dapat dilihat pada Segmen Program 4.3.
Segmen Program 4.3. Logout Hak Akses
<?php
session_start();
session_destroy();
echo '<script language="javascript">alert("Anda berhasil Logout!");
document.location="../index.php";</script>';?>
4.2.3. Halaman Utama (Home)
Halaman utama merupakan halaman yang pertama kali tampil saat user sudah melakukan login pada halaman login. Pada setiap halaman terdapat 3 (tiga) bagian yaitu navbar, topbar dan content. Source code navbar dengan hak akses administrator dapat dilihat pada Segmen Program 4.4.
Segmen Program 4.4. Source Code Navbar
<!-- NAVBAR -->
<div class="navbar nav_title" style="border: 0;">
<a href="home.php" class="site_title"><i class="fa fa- group"></i> <span>PT. HC</span></a>
</div>
<div class="clearfix"></div>
<!-- MENU TREE -->
<div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
<div class="menu_section">
<h3>Administration</h3>
<ul class="nav side-menu">
<li><a><i class="fa fa-bar-chart"></i>Laporan<span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="laporanpenjualan.php">Penjualan</a></li>
<li><a href="laporanstokproduk.php">Stok Produk</a></li>
<li><a href="laporanstokbahanbaku.php">Stok Bahan Baku</a></li>
<li><a href="laporanpo.php">Pemesanan Bahan Baku</a></li>
</ul>
</li>
<li><a><i class="fa fa-book"></i>Order Bahan Baku<span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="purchaseorder.php">List Pemesanan</a></li>
<li><a href="invoicepo.php">List Invoice PO Cabang</a></li>
<li><a href="buatinvoicepo.php">Buat Invoice PO Cabang</a></li>
<li><a href="historypo.php">History</a></li>
</ul>
</li>
<li><a><i class="fa fa-database"></i> Produk & Bahan Baku<span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="produk.php">List Produk</a></li>
<li><a href="inputproduk.php">Buat Produk</a></li>
<li><a href="bahanbaku.php">List Bahan Baku</a></li>
<li><a href="buatbahanbaku.php">Buat Bahan Baku</a></li>
<li><a href="satuan.php">Satuan</a></li>
</ul>
</li>
<li><a><i class="fa fa-user"></i> User & Pegawai <span class="fa fa-chevron-down"></span></a>
Segmen Program 4.4. Source Code Navbar (Sambungan)
<ul class="nav child_menu">
<li><a href="pegawai.php">List Pegawai</a></li>
<li><a href="inputpegawai.php">Buat Pegawai</a></li>
<li><a href="user.php">List User</a></li>
<li><a href="inputuser.php">Buat User</a></li>
<li><a href="divisi.php">List Divisi</a></li>
</ul>
</li>
<li><a><i class="fa fa-building"></i> Cabang <span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="cabang.php">List Cabang</a></li>
<li><a href="inputcabang.php">Buat Cabang</a></li>
</ul>
</li>
</ul>
</div>
</div>
Pada bagian topbar terdapat fitur remainder dengan icon berbentuk surat dan 1 (satu) menu tree untuk ganti password dan logout. Source code topbar dapat dilihat pada Segmen Program 4.5.
Segmen Program 4.5. Source Code Topbar
<div class="top_nav">
<div class="nav_menu">
<nav class="" role="navigation">
<div class="nav toggle">
<a id="menu_toggle"><i class="fa fa-bars"></i></a>
</div>
<ul class="nav navbar-nav navbar-right">
<li class="">
<a href="javascript:;" class="user-profile dropdown-toggle"
data-toggle="dropdown" aria-expanded="false">
Welcome, <?php echo "".$_SESSION['namapegawai']."";?>
<span class=" fa fa-angle-down"></span>
</a>
<ul class="dropdown-menu dropdown-usermenu pull-right">
<li><a href="gantipassword.php">Ganti Password</a></li>
<li><a href="logout.php"><i class="fa fa-sign-out pull- right"></i> Log Out</a></li>
</ul>
</li>
<!-- notifikasi -->
<?php
$tanggal = date("Y-m-d");
$q = "SELECT *,COUNT(*) as c FROM purchaseorder WHERE tanggal_jatuhtempo_po<='$tanggal' AND
status_pembayaran_po='Belum Bayar' ";
$exe = mysqli_query($con, $q);
Segmen Program 4.5. Source Code Topbar (Sambungan)
while($row = mysqli_fetch_assoc($exe)){
$c = $row['c'];
} ?>
<li role="presentation" class="dropdown">
<a href="javascript:;" class="dropdown-toggle info-number"
data-toggle="dropdown" aria-expanded="false">
<i class="fa fa-envelope-o"></i>
<span class="badge bg-green"><?php echo $c;?></span>
</a>
<ul id="menu1" class="dropdown-menu list-unstyled msg_list"
role="menu">
<?php
$q = "SELECT * FROM purchaseorder WHERE tanggal_jatuhtempo_po<='$tanggal' AND
status_pembayaran_po='Belum Bayar' ";
$exe = mysqli_query($con, $q);
if(mysqli_num_rows($exe) == 0){
} else{
$q = "SELECT *,COUNT(*) as c FROM purchaseorder WHERE tanggal_jatuhtempo_po<='$tanggal' AND
status_pembayaran_po='Belum Bayar' ";
$exe = mysqli_query($con, $q);
while($row = mysqli_fetch_assoc($exe)){
echo' <li>
<a href="invoicepo.php">
<span>Remainder Jatuh Tempo PO</span>
</span>
<span class="message">
PO dengan kode
<strong>'.$row['kodeinv_po'].'</strong> telah Jatuh Tempo </span>
</a>
</li>' ;}
} ?>
</ul>
</li>
</ul>
</nav>
</div>
</div>
4.2.4. Menu Input Data Produk
Di dalam input data produk user dapat memasukkan data master produk.
Setelah user mengisi semua field data master produk, user dapat mengklik tombol
submit untuk menyimpan data master produk. Source code fungsi input data master
produk dapat dilihat pada Segmen Program 4.6.
Segmen Program 4.6. Source code Input Data Produk
if($m==='insert_produk'){
$folder = "../uploads/";
$uploadOk = 1;
$target_file = $folder . basename($_FILES["gambar"]["name"]);
imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
//cek file yang di input image atau tidak
$check = getimagesize($_FILES["gambar"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo '<script language="javascript">
alert("Sorry, file is not an image"); </script>';
$uploadOk = 0;
}
// Check if file already exists if (file_exists($target_file)) {
echo '<script language="javascript">alert("Sorry, file already exists"); document.location="inputproduk.php";</script>';
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" &&
$imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo '<script language="javascript">alert
("Sorry, only JPG, JPEG, PNG & GIF files are allowed.");
document.location="inputproduk.php";</script>';
$uploadOk = 0;
}
//Jika bukan file Image if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
header('Location: ../admin/produk.php');
}
//Jika File Image
elseif($uploadOk == 1){
$gambar=$_FILES["gambar"]["name"];
$temp_gambar = $_FILES["gambar"]["tmp_name"];
move_uploaded_file($temp_gambar, $folder.$gambar);
$idproduk = $_POST['idproduk'];
$nama = $_POST['nama_produk'];
$ip = $_POST['ip'];
$bahanip = $_POST['bahanip'];
$ukurankarton = $_POST['ukurankarton'];
$isikarton = $_POST['isikarton'];
$isiball = $_POST['isiball'];
$ukuranball = $_POST['ukuranball'];
$komposisi = $_POST['komposisi'];
$harga = $_POST['harga'];
$status_produk = "Active";
$idsatuan = "3";
Segmen Program 4.6. Source code Input Data Produk (Sambungan)
$sql = "INSERT INTO masterproduk (idproduk, namaproduk,gambar_produk,folder,ip,bahanip,ukuran,isikarton,isib all,ukuranball,komposisi,harga,status_produk,idsatuan)
VALUES ('$idproduk','$nama','$gambar','$folder','$ip', '$bahanip','$ukurankarton','$isikarton','$isiball','$ukura nball','$komposisi','$harga','$status_produk',’$idsatuan')";
$res=mysqli_query($con, $sql);
$_SESSION['insert']='';
$_SESSION['nama']=$nama;
header('Location: ../Admin/produk.php');
exit();
}}
4.2.5. Menu List Produk
Pada menu list produk menampilkan data tabel produk yang terdapat fitur search dan pagination. Tabel produk menampilkan id produk, nama produk, gambar, ip, bahan ip, ukuran karton, isi karton, isi ball, ukuran ball, komposisi, harga eceran, status, dan action. Fitur search berfungsi untuk mencari data yang sesuai dengan yang ada pada data tabel. Source code tabel produk dapat dilihat pada Segmen Program 4.7.
Segmen Program 4.7. Source code Tabel Produk
<table id="datatable-responsive" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0"
width="100%">
<thead>
<tr>
<th>No</th>
<th>ID Produk</th>
<th>Nama Produk</th>
<th>Gambar</th>
<th>IP</th>
<th>Bahan IP</th>
<th>Ukuran Karton</th>
<th>Isi Karton/Ikat (Pcs)</th>
<th>Isi Ball (Pcs)</th>
<th>Ukuran Ball</th>
<th>Komposisi</th>
<th>Harga Eceran</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php
$query = "SELECT * FROM masterproduk ";
$exe = mysqli_query($con, $query);
Segmen Program 4.7. Source code Tabel Produk (Sambungan)
$count=1;
while($row = mysqli_fetch_assoc($exe)){
echo'<tr>
<td>'.$count.'</td>
<td>'.$row['idproduk'].'</td>
<td>'.$row['namaproduk'].'</td>
<td><img
src="'.($row['folder']).'/'.($row['gambar_produk']).'"
class="img-rounded" width="100%"></td>
<td>'.$row['ip'].'</td>
<td>'.$row['bahanip'].'</td>
<td>'.$row['ukuran'].'</td>
<td>'.$row['isikarton'].'</td>
<td>'.$row['isiball'].'</td>
<td>'.$row['ukuranball'].'</td>
<td >'.$row['komposisi'].'</td>
<td>'.$row['harga'].'</td>
<td>'.$row['status_produk'].'</td>
<td><button id="edit" type="button" class="fa fa-edit btn btn- primary btn-sm editbtn" data-toggle="modal" data- target="#modalupdate"
data-id ="'.$row['id_produk'].' "
data-idproduk ="'.$row['idproduk'].' "
data-namaproduk="'.$row['namaproduk'].'"
data-gambar_produk="'.$row['gambar_produk'].'"
data-ip="'.$row['ip'].'"
data-bahanip="'.$row['bahanip'].'"
data-ukuran="'.$row['ukuran'].'"
data-isikarton="'.$row['isikarton'].'"
data-isiball="'.$row['isiball'].'"
data-ukuranball="'.$row['ukuranball'].'"
data-komposisi="'.$row['komposisi'].'"
data-harga="'.$row['harga'].'"
data-
status_produk="'.$row['status_produk'].'">Edit</button></td>
</tr> ';
$count=$count+1;
} ?>
</tbody>
</table>
Tombol edit pada setiap baris pada tabel berfungsi untuk melakukan edit
pada produk yang dipilih. Source code edit produk dapat dilihat pada Segmen
Program 4.8.
Segmen Program 4.8. Source Code Edit Produk
if($m==='update_produk'){
$id=$_POST['id'];
$idproduk = $_POST['idproduk'];
$nama = $_POST['namaproduk'];
$ip = $_POST['ip'];
$bahanip = $_POST['bahanip'];
$ukurankarton = $_POST['ukuran'];
$isikarton = $_POST['isikarton'];
$isiball = $_POST['isiball'];
$ukuranball = $_POST['ukuranball'];
$komposisi = $_POST['komposisi'];
$harga = $_POST['harga'];
$status_produk = $_POST['status_produk'];
$sql = "UPDATE masterproduk SET idproduk='$idproduk', namaproduk='$nama',ip='$ip',bahanip = '$bahanip', ukuran = '$ukurankarton',isikarton='$isikarton',isiball='$isiball',ukuran ball='$ukuranball',komposisi='$komposisi',harga='$harga',status_
produk='$status_produk' WHERE id_produk = '$id'";
$res=mysqli_query($con, $sql);
$_SESSION['update']='';
$_SESSION['nama']=$nama;
header('Location: ../Admin/produk.php');
exit();
}
4.2.6. Menu Buat Sales Order
Di dalam menu buat sales order, user mengisi field yang diantaranya nama customer, nama sales, nama produk yang dipesan, qty (ikat) yang dipesan. Setelah semua sesuai dengan pesanan maka user mengklik tombol simpan. Source code buat sales order dapat dilihat pada Segmen Program 4.9.
Segmen Program 4.9. Source Code Buat Sales Order
if($m==='buatso'){
$cabang = $_SESSION['cabang'];
$pegawai = $_SESSION['namapegawai'];
$kodeso= $_POST['kodeso'];
$customer = $_POST['customer'];
$sales = $_POST['sales'];
$produk = $_POST['produk'];
$qty = $_POST['qty'];
$stok = $_POST['stok'];
$harga = $_POST['harga'];
$subtotal = $_POST['subtotal'];
$total = $_POST['grandtotal'];
$status = "On Process";
$tanggal = date('Y/m/d');
$status_validasi ="Sudah Validasi";
$status_validasi2 ="Belum Validasi";
$status_invoice ="Belum Buat Invoice";
for($i=0 ; $i<count($_POST['stok']) ; $i++){
if($qty[$i]>$stok[$i]){
Segmen Program 4.9. Source Code Buat Sales Order (Sambungan)
echo '<script language="javascript">alert("Stok Tidak Mencukupi");
document.location="../Sales/buatsalesorder.php";</script>';
} }
$cek = mysqli_query($con,"SELECT * FROM customer WHERE idcustomer='$customer'");
while($row = mysqli_fetch_array($cek)){
$temp = $row['sisa_credit'];
$temp = $temp - $total;
}
if($temp<0){
$sql = "INSERT INTO salesorder
(kodeso,idcustomer,idcabang,nama_pegawai,tanggal_so,nama_sales,t otal_so,status_so,status_validasi,status_pembayaran)
VALUES('$kodeso','$customer','$cabang','$pegawai','$tanggal','$s ales','$total','$status','$status_validasi2','$status_invoice')"
;
$res = mysqli_query($con, $sql);
echo $sql.' LAST ID';
$last_id = mysqli_insert_id($con);
echo $last_id.'<br>';
$_SESSION['so_khusus']='so';
} else{
//insert ke salesorder
$sql = "INSERT INTO salesorder
(kodeso,idcustomer,idcabang,nama_pegawai,tanggal_so,nama_sales,t otal_so,status_so,status_validasi,status_pembayaran)
VALUES('$kodeso','$customer','$cabang','$pegawai','$tanggal','$s ales','$total','$status','$status_validasi','$status_invoice')";
$res = mysqli_query($con, $sql);
echo $sql.' LAST ID';
$last_id = mysqli_insert_id($con);
echo $last_id.'<br>';
$_SESSION['so']='so';
$cek = mysqli_query($con,"SELECT * FROM customer WHERE idcustomer='$customer'");
while($row = mysqli_fetch_array($cek)){
$temp = $row['sisa_credit'];
$temp = $temp - $total; //sisa kredit
$temp1 = $row['hutang_customer'];
$temp1 = $temp1 + $total; //tambah hutang }
$update_hutang= "UPDATE customer SET
sisa_credit='$temp',hutang_customer='$temp1' WHERE idcustomer='$customer'";
$res = mysqli_query($con, $update_hutang);
}
//insert ke detail sales order
for($i=0 ; $i<count($_POST['stok']) ; $i++){
try {
echo " id produk ",$produk[$i];
echo " qty ",$qty[$i];
Segmen Program 4.9. Source Code Buat Sales Order (Sambungan)
echo " harga ",$harga[$i];
echo " subtotal ",$subtotal[$i];
$belum_kirim = $qty[$i];
$sql = "INSERT INTO detail_salesorder (idsalesorder, idproduk, qty_produk,harga_unit,subtotal_detailso,qty_belum_kirim)
VALUES ('$last_id', '$produk[$i]', '$qty[$i]', '$harga[$i]', '$subtotal[$i]','$belum_kirim')";
$res=mysqli_query($con, $sql);
}
catch (MySQLDuplicateKeyException $e) {
$e->getMessage();
} }
$_SESSION['kodeso']=$kodeso;
header('Location: ../Sales/salesorder.php');
exit();
}
4.2.7. Menu Buat Stok Produk Masuk
Pada menu buat stok produk masuk merupakan jumlah masuk stok yang dilakukan bagian warehouse dari hasil produksi produk. Source code buat stok produk masuk dapat dilihat pada Segmen Program 4.10.
Segmen Program 4.10. Source code Buat Stok Produk Masuk
if($m == 'insert_stok_produk_masuk'){
$produk = $_POST['produk'];
$hasil_produksi = $_POST['hasil_produksi'];
$pegawai =$_SESSION['namapegawai'];
$tanggal = date('Y/m/d');
$keterangan = "Hasil Produksi";
//cek data sudah ada apa belum
$sql2 = mysqli_query($con,"SELECT * FROM stok_penyesuaian_produk INNER JOIN masterproduk ON stok_penyesuaian_produk.idproduk = masterproduk.id_produk WHERE stok_penyesuaian_produk.idproduk='$produk'");
while($row = mysqli_fetch_array($sql2)){
$namaproduk = $row['namaproduk'];
}
//jika data sudah ada
if(mysqli_num_rows($sql2) == 0){
$cabang = $_SESSION['cabang'];
$insert_stok = "INSERT INTO stok_penyesuaian_produk
(idcabang, idproduk,stok_produk) VALUES
('$cabang','$produk','$hasil_produksi')";
$res=mysqli_query($con, $insert_stok);
$sql = "INSERT INTO stok_produk (idproduk, nama_pegawai,tanggal_produk,hasil_produksi,masuk,stok_sekarang,k eterangan)
Segmen Program 4.10. Source code Buat Stok Produk Masuk (Sambungan)
VALUES
('$produk','$pegawai','$tanggal','$hasil_produksi','$hasil_produ ksi','$hasil_produksi','$keterangan')";
$res=mysqli_query($con, $sql);
$temp = $hasil_produksi;
}
//jika data belum ada else{
$update = mysqli_query($con,"SELECT * FROM stok_penyesuaian_produk INNER JOIN masterproduk ON stok_penyesuaian_produk.idproduk = masterproduk.id_produk WHERE stok_penyesuaian_produk.idproduk='$produk'");
while($row = mysqli_fetch_array($update)){
$temp = $row['stok_produk'];
$temp = $temp+$hasil_produksi;
}
$update_stok = "UPDATE stok_penyesuaian_produk SET stok_produk='$temp' WHERE idproduk='$produk'";
$res=mysqli_query($con, $update_stok);
$sql = "INSERT INTO stok_produk (idproduk, nama_pegawai,tanggal_produk,hasil_produksi,masuk,stok_sekarang,k eterangan)
VALUES
('$produk','$pegawai','$tanggal','$hasil_produksi','$hasil_produ ksi','$temp','$keterangan')";
$res=mysqli_query($con, $sql);
}
$_SESSION['masuk']='insert produk masuk';
$_SESSION['stoksekarang']=$temp;
$_SESSION['namaproduk']=$namaproduk;
header('Location: ../Gudang/stokprodukmasuk.php');
exit();}
4.2.8. Bayar Invoice Sales Order
Pembayaran transaksi sales order diinputkan oleh user dengan mengisi field
yang tersedia. Dengan pembayaran invoice sales order maka hutang customer yang
bersangkutan akan di update status pembayaran sales order berubah menjadi sudah
dibayar. Source code bayar invoice sales order dapat dilihat pada Segmen Program
4.11.
Segmen Program 4.11. Source code Bayar Invoice Sales Order
if($m==='bayarinvoice'){
$idso = $_POST['id'];
$idcustomer = $_POST['idcustomer'];
$tanggal = date('Y/m/d');
$kodeinv = $_POST['kodeinv'];
$metode = $_POST['metode_pembayaran'];
$status="Sudah Bayar";
$total = $_POST['total'];
$keterangan = $_POST['keterangan'];
$update = "UPDATE salesorder SET tanggal_bayar='$tanggal', sisa_belum_dibayar='0', metode_pembayaran_so='$metode', status_pembayaran='$status' ,keterangan ='$keterangan' WHERE idsalesorder='$idso'";
$res = mysqli_query($con, $update);
$cek = mysqli_query($con,"SELECT * FROM customer WHERE idcustomer='$idcustomer'");
while($row = mysqli_fetch_array($cek)){
$temp = $row['sisa_credit'];
echo "Sisa Kredit",$temp;
$temp = $temp + $total; //sisa kredit echo "Dikurangi hutang",$temp;
$temp1 = $row['hutang_customer'];
echo "HUtang customer",$temp1;
$temp1 = $temp1 - $total; //tambah hutang echo "hutang sekarang",$temp1;
}
$update_hutang= "UPDATE customer SET sisa_credit='$temp',hutang_customer='$temp1' WHERE idcustomer='$idcustomer'";
$res = mysqli_query($con, $update_hutang);
$_SESSION['bayar']='';
$_SESSION['kodeinv']=$kodeinv;
header('Location: ../Keuangan/invoice.php');
exit();
}
4.2.9. Menu Hitung Reorder Point
Pada menu hitung reorder point user memilih nama produk dan mengisi kenaikan/penurunan yang berupa angka. Saat user mengklik tombol hitung maka akan dilakukan perhitungan reorder point dengan mengikuti rumus yang sudah di siapkan. Perhitungan ini menghasilkan nilai reorder point untuk produk tersebut dan memberikan rekomendasi untuk minimal stok bahan baku yang ada di gudang.
Source code hitung reorder point dapat dilihat pada Segmen Program 4.12.
Segmen Program 4.12. Source code Hitung Reorder Point
$produk = $_POST['produk'];
$persen = $_POST['persen'];
$cabang = $_SESSION['cabang'];
$q = "SELECT * FROM cabang WHERE idcabang = '$cabang'";
$res=mysqli_query($con,$q);
$row=mysqli_fetch_assoc($res);
$leadtime = $row['leadtime_cabang'];
$leadtime =$leadtime/7;
$q="SELECT SUM(qty_produk) as ttl FROM salesorder s
INNER JOIN detail_salesorder d ON
(s.idsalesorder=d.idsalesorder)
WHERE DATE_FORMAT(DATE_SUB(SYSDATE(),INTERVAL 1 MONTH),'%Y-%m')=
DATE_FORMAT(s.tanggal_so,'%Y-%m') AND
d.idproduk=".$produk;
$res=mysqli_query($con,$q);
$row=mysqli_fetch_assoc($res);
$ttlBlnLalu=$row["ttl"];
$q="SELECT SUM(qty_produk) as ttl FROM salesorder s
INNER JOIN detail_salesorder d ON
(s.idsalesorder=d.idsalesorder)
WHERE DATE_FORMAT(DATE_SUB(SYSDATE(),INTERVAL 2 MONTH),'%Y-%m')=
DATE_FORMAT(s.tanggal_so,'%Y-%m') AND
d.idproduk=".$produk;
$res=mysqli_query($con,$q);
$row=mysqli_fetch_assoc($res);
$ttl2BlnLalu=$row["ttl"];
$q="SELECT SUM(qty_produk) as ttl FROM salesorder s
INNER JOIN detail_salesorder d ON
(s.idsalesorder=d.idsalesorder)
WHERE DATE_FORMAT(DATE_SUB(SYSDATE(),INTERVAL 3 MONTH),'%Y-%m')=
DATE_FORMAT(s.tanggal_so,'%Y-%m') AND
d.idproduk=".$produk;
$res=mysqli_query($con,$q);
$row=mysqli_fetch_assoc($res);
$ttl3BlnLalu=$row["ttl"];
$rata =($ttl3BlnLalu + $ttl2BlnLalu + $ttlBlnLalu)/3;
$aman = $rata/2;
$rop = $rata * $leadtime+$aman;
$persen = $persen/100;
$persen1 = $rop * $persen;
$kenaikan = $persen1 + $rop;
$kenaikan1 = $kenaikan * 100;
Segmen Program 4.12. Source code Hitung Reorder Point (Sambungan)
$q = "SELECT * FROM bom INNER JOIN masterproduk ON bom.idproduk=masterproduk.id_produk
INNER JOIN bahanbaku ON
bom.idbahanbaku=bahanbaku.idbahanbaku INNER JOIN satuan ON bahanbaku.idsatuan=satuan.idsatuan WHERE bom.idproduk = '$produk'";
$exe = mysqli_query($con, $q);
while($row = mysqli_fetch_assoc($exe)){
$akhir = $row['jumlah'];
$akhir = $akhir * $kenaikan1;}
4.2.10. Menu Laporan Penjualan Cabang
Pada menu laporan penjualan cabang terdapat filter laporan. Filter laporan berfungsi untuk membatasi hasil laporan yang ditampilkan. Terdapat 2 (dua) filter pada laporan penjualan cabang di antaranya filter cabang dan filter periode tanggal.
Source code form filter laporan penjualan cabang dapat dilihat pada Segmen Program 4.13.
Segmen Program 4.13. Source code form filter Laporan Penjualan Cabang
<form class="form-horizontal form-label-left" id="myForm">
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h3>Laporan Penjualan</h3>
<div class="clearfix"></div>
</div>
<div class="x_content">
<div class="item form-group">
<label class="control-label col-md-3 col- sm-3 col-xs-12" for="produk">Cabang
</label>
<div class="col-md-6 col-sm-6 col-xs-12"
>
<select id="cabang" name="cabang" data- validate="select" class="cabang form-control col-md-7 col-xs-12"
tabindex="-2">
<?php
$query = "SELECT * FROM cabang INNER JOIN provinsi ON cabang.area_cabang = provinsi.id_provinsi WHERE status_cabang='Active' ";
$exe = mysqli_query($con, $query);
echo'
<option></option>';
while($row = mysqli_fetch_assoc($exe)){
Segmen Program 4.13. Source code form filter Laporan Penjualan Cabang (Sambungan)
echo' <option
value="'.$row['idcabang'].'">'.$row['nama_cabang'].'</option>
';
}
echo '<option value="">Semua Cabang</option>';
?>
<option value="semua">Semua Cabang</option>
</select>
</div>
</div>
<div class="item form-group">
<label class="control-label col-md-3 col- sm-3 col-xs-12" for="produk">Tanggal
</label>
<div class="col-md-6 col-sm-6 col-xs-12" >
<div class="input-prepend input-group">
<span class="add-on input-group-addon"><i class="glyphicon glyphicon-calendar fa fa-calendar"></i></span>
<input type="text" style="width: 200px"
name="daterange" id="daterange" class="form-control" value="" />
</div>
</div>
</div>
<div class="ln_solid"></div>
<div class="item form-group">
<div class="col-md-6 col-md-offset-3">
<button type="button" id="search"
class="btn btn-success">Search</button>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
Setelah user memilih filter cabang dan filter tanggal, user dapat mengklik
tombol search. Saat diklik proses menampilkan hasil laporan dari filter cabang dan
filter tanggal menggunakan fungsi AJAX. Dari AJAX akan menuju ke halaman lain
untuk melakukan select query dan menampilkan hasil query dalam data tabel sesuai
dengan filter yang dipilih oleh user. Source code fungsi AJAX dapat dilihat pada
Segmen Program 4.14.
Segmen Program 4.14. Source Code fungsi AJAX
<script>
//filter tanggal
$(document).ready(function() {
$('#daterange').daterangepicker(null, function(start, end, label) {
console.log(start.toISOString(), end.toISOString(), label);
});
});
$(document).ready(function(){
$("#search").click(function(){
var datas = $("#myForm").serializeArray();
jQuery.ajax({
type:"POST",
url:"search_penjualan.php", dataType:"text",
data: datas,
success:function(response){
$("#lala").html(response).show();
},
error:function (xhr, ajaxOptions, thrownError){
$("#edit").show(); //show submit button $("#image").hide(); //hide loading image alert(thrownError);
} });
});
});
</script>
URL AJAX berisi select data sesuai dengan data yang dikirim oleh fungsi AJAX sebelumnya. Setelah hasil select didapat kemudian ditampilkan pada tabel.
Source code URL AJAX dapat dilihat pada Segmen Program 4.15.
Segmen Program 4.15. Source Code URL AJAX
$cabang = $_POST['cabang'];
$daterange = $_POST['daterange'];
$separator = "-";
$exploded = explode($separator, $daterange);
$start = $exploded[0];
$end = $exploded[1];
$start = date('Y/m/d', strtotime($exploded[0]));
$end = date('Y/m/d', strtotime($exploded[1]));
include "connect.php";
include "akses.php";
?>
<table id="datatable-responsive" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0"
width="100%">
<thead>
Segmen Program 4.15. Source Code URL AJAX (Sambungan)
<tr>
<th>No</th>
<th>Kode SO</th>
<th>Customer</th>
<th>Area</th>
<th>Tanggal SO</th>
<th>Total SO</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php
if($cabang=='semua'){
$query = "SELECT * ,DATE_FORMAT(tanggal_so,'%d-%M-%Y') as tanggal FROM salesorder
INNER JOIN customer ON salesorder.idcustomer=customer.idcustomer INNER JOIN cabang ON salesorder.idcabang=cabang.idcabang
INNER JOIN provinsi ON cabang.area_cabang=provinsi.id_provinsi WHERE status_so='Complete' AND tanggal_so BETWEEN '$start' AND '$end'
ORDER BY tanggal_so ASC";
$exe = mysqli_query($con, $query);
$count=1;
while($row = mysqli_fetch_assoc($exe)){
echo'<tr>
<td>'.$count.'</td>
<td>'.$row['kodeso'].'</td>
<td>'.$row['nama_customer'].'</td>
<td>'.$row['nama_provinsi'].'</td>
<td>'.$row['tanggal'].'</td>
<td>Rp '.number_format($row['total_so']).'</td>
<td>
<a href="detailso.php?id='.$row['idsalesorder'].'&c=penjualan"
type ="button" class="btn btn-info btn-sm fa fa-info editbtn"
value="Detail"> Detail</a>
</td>
</tr>';
$count=$count+1;}}
elseif($cabang!='semua'){
$query = "SELECT * ,DATE_FORMAT(tanggal_so,'%d-%M-%Y') as tanggal FROM salesorder
INNER JOIN customer ON
salesorder.idcustomer=customer.idcustomer
INNER JOIN cabang ON salesorder.idcabang=cabang.idcabang
INNER JOIN provinsi ON cabang.area_cabang=provinsi.id_provinsi WHERE status_so='Complete' AND salesorder.idcabang='$cabang' AND tanggal_so BETWEEN '$start' AND '$end'
ORDER BY tanggal_so ASC";
$exe = mysqli_query($con, $query);
$count=1;
while($row = mysqli_fetch_assoc($exe)){
echo'<tr>
<td>'.$count.'</td>
<td>'.$row['kodeso'].'</td>
<td>'.$row['nama_customer'].'</td>
<td>'.$row['nama_provinsi'].'</td>
Segmen Program 4.15. Source Code URL AJAX (Sambungan)
<td>'.$row['tanggal'].'</td>
<td>Rp '.number_format($row['total_so']).'</td>
<td>
<a href="detailso.php?id='.$row['idsalesorder'].'&c=invoice"
type ="button" class="btn btn-info btn-sm fa fa-info editbtn"
value="Detail"> Detail</a>
</td>
</tr>';
$count=$count+1;}
}
?>
</tbody>
<tbody>
<tr>
<td colspan="5">
Grand Total Penjualan
</td>
<td colspan="2">
<?php
if($cabang=='semua'){
$q = "SELECT SUM(total_so) as gtotal FROM salesorder
WHERE status_so='Complete' AND tanggal_so BETWEEN '$start' AND '$end'";
$res=mysqli_query($con,$q);
$row=mysqli_fetch_assoc($res);
$gtotal = $row['gtotal'];
echo "Rp ",number_format($gtotal);}
elseif($cabang!='semua'){
$q = "SELECT SUM(total_so) as gtotal FROM salesorder WHERE status_so='Complete' AND
salesorder.idcabang='$cabang'
AND tanggal_so BETWEEN '$start' AND '$end'";
$res=mysqli_query($con,$q);
$row=mysqli_fetch_assoc($res);
$gtotal = $row['gtotal'];
echo "Rp ",number_format($gtotal);
}
?>
</td>
</tr>
</tbody>
</table>