• Tidak ada hasil yang ditemukan

4. IMPLEMENTASI SISTEM. Tabel 4.1. Daftar Hubungan Fitur, Data Flow Diagram dan Semen Program

N/A
N/A
Protected

Academic year: 2022

Membagikan "4. IMPLEMENTASI SISTEM. Tabel 4.1. Daftar Hubungan Fitur, Data Flow Diagram dan Semen Program"

Copied!
22
0
0

Teks penuh

(1)

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

(2)

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

(3)

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

(4)

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'];

(5)

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>';?>

(6)

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>

(7)

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);

(8)

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.

(9)

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";

(10)

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);

(11)

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.

(12)

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]){

(13)

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];

(14)

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)

(15)

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.

(16)

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.

(17)

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;

(18)

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)){

(19)

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.

(20)

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>

(21)

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>

(22)

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>

Referensi

Dokumen terkait

Pada subbab akan membahas mengenai proses yang terdapat pada pemilihan materi, yaitu proses menu materi, proses penyusunan dialog, dan proses penyusunan soal. Proses

[r]

Menyetujui untuk menerima baik Laporan Direksi perihal Laporan Keuangan Perseroan Tahun Buku 2020 (duaribu duapuluh) yang berakhir pada tanggal 31-12-2020 (tigapuluh satu

Praktikum terhadap sampel hiu paus yang telah dilakukan menggunakan metode ekstraksi chelex dan dilanjutkan dengan kegiatan PCR (polymerasi Chain Reaction) dan

JMLH SAT 1 Penetapan rasio dosen dan mahasiswa sesuai standar ideal Terealisasi rasio dosen dibanding mahasiswa 1 : 20 1:20 Rasio 2 Meningkatnya penyerapan

Karena itu PB Tunas Bhakti Trenggalek menarik untuk dikaji bila ditinjau dari aspek pembinaan, keadaan organisasi, prestasi dan sarana prasarana yang dimiliki

Pada tipologi lahan rawa pasang surut tergenangi air saline tidak direkomendasikan untuk pertanaman tanaman anggur, sementara dapat dimanfaatkan untuk pertanaman tanaman

menyatakan dengan sesungguhnya bahwa karya ilmiah yang berjudul &#34;MENINGKATKAN HASIL BELAJAR SISWA MELALUI PEMBELAJARAN KOOPERATIVE TIPE JIGSAW POKOK BAHASAN SIFAT-SIFAT BANGUN