1
JAKARTA
2021
4
Daftar Isi
Halaman Sampul……….………..1
Daftar Isi……….……..2
1. Proses Login Menggunakan Email dan Password..……….………4
2. Menu Kategori Produk………...5
3. Menu Produk………..6
4. Menu Supplier ………..………..…7
5. Menu Pesanan Pembelian ……….…………...……8
6. Menu Uang Muka Pembelian………..……….…9
7. Menu Penerimaan Pembelian………10
8. Menu Retur Pembelian……….….11
9. Menu Faktur Pembelian………..12
10.Menu Pelunasan Pembelian… ………...………..…..13
11. Menu Penghapusan Pembelian……….………14
5
Prosedur Penggunaan Aplikasi Sistem Pembelian Barang (ASPB)
Aplikasi sistem pembelian barang (ASPB) merupakan sistem yang dirancang bagi unit
usaha untuk melakukan proses transaksi pembelian barang ke pihak vendor atau supplier, proses
pembelian mencakup dari proses order, pembayaran DP kepada vendor, proses penerimaan
barang di gudang, proses retur ketika ada barang pesanan yang tidak sesuai atau mengalami
kerusakan hingga proses penagihan dan pembayaran kewajiban kepada vendor terhadap
sejumlah uang dari hasil pembelian yang dilakukan
Proses Penggunaan Sistem diatur oleh Super Admin . Super Admin dapat melakukan
akses kedalam sistem dengan proses berikut ini;
1. Proses login menggunakan email dan password.
2. Menu pendaftaran master kategori produk.
3. Menu produk.
4. Menu supplier.
5. Menu pesanan pembelian.
6. Menu uang muka pembelian.
7. Menu penerimaan pembelian.
8. Menu retur pembelian.
9. Menu faktur pembelian
10. Menu pelunasan pembelian
11. Menu penghapusan pembelian
6
Adapun proses penggunaan Aplikasi Sistem Pembelian Barang (ASPB) dijelaskan pada
langkah-langkah berikut ini;
Halaman Login User
1. Halaman login merupakan tampilan awal dari pemakaian sistem. Dimana pengguna harus
melakukan pendaftaran akun terlebih dahulu. Pendaftaran dilakukan dengan memasukan nama
calon pengguna, alamat email dan password. Selanjutnya alamat email dan password akan
digunakan untuk melakukan akses ke sistem pembelian
7
Menu Pendaftaran Master Kategori Produk
2. Menu pendaftaran master kategori produk digunakan untuk melakukan grouping terhadap data
produk yang akan dibuat menjadi kelompok untuk memudahkan proses analisa. pemrosesannya
adalah pertama kali pada tampilan awal akan berisi informasi terkait dengan group kategori
produk yang sudah dibuat. Kategori produk dapat dilakukan proses off dan dapat dilakukan
proses on kembali. Jika ingin membuat data baru, user dapat memilih button “Buat Baru” lalu
mencatat seluruh informasi kategori baru yang dibutuhkan selanjutkan dilakukan proses simpan
8
Menu Pendaftaran Master Produk
3. Menu pendaftaran produk akan berisi informasi mengenai barang jadi, bahan baku dan non
bahan baku. Produk yang terdaftar dapat dilakukan proses off dan dapat dilakukan on kembali.
Jika user ingin mendaftarkan produk baru, maka user dapat melakukan proses pembuatan baru
dan menginput segala data produk yang dibutuhkan untuk didaftarkan begitu juga terkait proses
konversi dari produk tersebut. Level 1 merupakan tingkatan produk tertinggi (Contoh : 1 Kg),
level 2 adalah tingkatan selanjutnya (Contoh : 1000 Gram) dan seterusnya. Sehingga suatu
produk akan menginformasikan 1 Kg merupakan 1.000 gram
9
Menu Pendaftaran Supplier
4. Menu pendaftaran supplier digunakan untuk melakukan pendaftaran data supplier oleh user
yang akan digunakan sebagai acuan untuk melakukan transaksi pembelian barang. Proses-nya
adalah pada halaman awal akan menampilkan list supplier yang sudah pernah didaftarkan, user
dapat melakukan non aktif supplier dan sebaliknya pada halaman list. Ketika akan membuat data
supplier baru, user dapat melakukan klik button “Buat Baru” dan menginput segala data
administrasi terkait supplier yang terakhir dilakukan penyimpanan dengan button “Simpan”
10
Menu Pesanan Pembelian
5. Menu pesanan pembelian digunakan sebagai data inisiasi oleh user untuk melakukan kontak
dengan supplier terkait dengan pembelian barang. Halaman list berisi data-data purchase order
yang sudah pernah dibuat oleh user, status order dapat dilakukan pembatalan apabila data order
belum dilakukan penerimaan pembelian dari supplier. Untuk membuat data order supplier dapat
dilakukan dengan melakukan klik button “Buat Baru”, selanjutnya dapat dilakukan pengisian
data order sesuai dengan kebutuhan user dan diakhiri dengan button “Simpan”
11
Menu Uang Muka Pembelian
6. Menu uang muka pembelian digunakan untuk melakukan pembayaran sejumlah uang muka
atas order supplier yang sudah dibuat. Seluruh data uang muka yang dibuat akan ditampilkan
pada halaman list dan data uang muka yang dapat dilakukan pembatalan hanyalah uang muka
yang belum dilakukan pelunasan. Untuk melakukan pembayaran DP dari order yang sudah
dibuat dapat dilakukan dengan melakukan klik button “Buat Baru”, kode order yang akan
muncul adalah kode order yang belum dilakukan penerimaan pembelian sehingga apabila data
order sudah dilakukan penerimaan barang maka data order di menu uang muka pembelian tidak
akan muncul. Ketika pembuatan uang muka dapat dilakukan pengisian data sesuai dengan
tampilan informasi dilayar setelah dilakukan pengisian data selanjutnya dapat dilakukan
penyimpanan dengan melakukan klik button “Simpan”
12
Menu Penerimaan Pembelian
7. Menu penerimaan pembelian merupakan menu yang digunakan untuk melakukan penerimaan
barang dari supplier berdasarkan order yang dibuat dan dikirimkan ke supplier. Halaman list
akan menampilkan semua penerimaan yang sudah pernah dilakukan berdasarkan order, untuk
melakukan penerimaan baru, user dapat melakukan klik button “Buat Baru” dengan memilih
supplier berdasarkan kode order yang sudah dibuat kemudian lakukan klik button “Simpan”
13
Menu Retur Pembelian
8. Menu retur pembelian digunakan untuk melakukan proses retur terkait dengan penerimaan
barang yang sudah dilakukan. Halaman list menampilkan data retur yang sudah pernah
dilakukan. Untuk membuat data retur baru, maka user dapat melakukan buat baru dan memilih
referensi dari kode penerimaan yang akan dilakukan retur setelah dilakukan penginputan data
maka dapat dilakukan penyimpanan dengan melakukan klik button “Simpan”
14
Menu Faktur Pembelian
9. Menu faktur pembelian merupakan menu yang digunakan untuk melakukan pencatatan terkait
tagihan dari supplier atas penerimaan sejumlah barang dari order yang sudah dilakukan.
Halaman list berisi informasi terkait dengan data tagihan yang sudah dibuat, proses pembatalan
faktur hanya dapat dilakukan apabila faktur belum dilakukan pelunasan ataupun penghapusan.
Untuk membuat tagihan baru, user dapat melakukan klik button “Buat Baru” dan memilih kode
BPB atas penerimaan yang sudah pernah dilakukan kemudian dilakukan penyimpanan data
15
Menu Pelunasan Pembelian
10. Menu pelunasan pembelian digunakan untuk melakukan pelunasan terhadap tagihan dari
supplier terkait dengan penerimaan barang. Halaman list menampilkan data-data terkait dengan
pelunasan yang sudah pernah dilakukan. Untuk membuat pelunasan baru terkait dengan faktur
tagihan, user dapat melakukan klik button “Buat Baru” yang selanjutnya memilih supplier dan
akan menampilkan kode-kode faktur tagihan yang pernah dilakukan penagihan, selanjutnya user
dapat melakukan check-list terkait dengan kode-kode yang akan dilakukan pelunasan.
16
Menu Penghapusan Pembelian
11. Menu penghapusan pembelian merupakan menu yang digunakan untuk melakukan
penghapusan terkait dengan tagihan dari supplier yang tidak dilakukan pelunasan karena
berbagai hal tergantung dari kondisi yang ada. Halaman list menampilkan data penghapusan
yang pernah dilakukan dan untuk membuat data penghapusan baru, user dapat memilih supplier
dan akan menampilkan kode-kode faktur tagihan yang pernah dilakukan penagihan, selanjutnya
user dapat melakukan pemilihan kode yang akan dilakukan penghapusan.
17
Menu Logout untuk Menutup Aplikasi Sistem Pembelian Barang (ASPB)
12. Menu logout digunakan oleh user apabila kegiatan penggunaan sistem sudah selesai
digunakan.
18
Source Code
“ Aplikasi Sistem Pembelian Barang (ASPB) ”
1.Source Code Form Login
1.1 Form Login
@extends('adminlte::auth.auth-page', ['auth_type' => 'login']) @section('adminlte_css_pre')
<link rel="stylesheet" href="{{ asset ('vendor/icheck-bootstrap/icheck-bootstrap.min.css') }}">
@stop
@php( $login_url = View::getSection('login_url') ?? config('adminlte.login_url',
'login') )
@php( $register_url = View::getSection('register_url') ?? config('adminlte.regist er_url', 'register') )
@php( $password_reset_url = View::getSection('password_reset_url') ?? config('adm inlte.password_reset_url', 'password/reset') )
@if (config('adminlte.use_route_url', false))
@php( $login_url = $login_url ? route($login_url) : '' )
@php( $register_url = $register_url ? route($register_url) : '' )
@php( $password_reset_url = $password_reset_url ? route($password_reset_url) : '' )
@else
@php( $login_url = $login_url ? url($login_url) : '' )
@php( $register_url = $register_url ? url($register_url) : '' )
@php( $password_reset_url = $password_reset_url ? url($password_reset_url) :
'' ) @endif
@section('auth_header', __('adminlte::adminlte.login_message')) @section('auth_body')
<form action="{{ $login_url }}" method="post">
{{ csrf_field() }}
{{-- Email field --}}
<div class="input-group mb-3">
<input type="email" name="email" class="form-control {{ $errors->has('email') ? 'is-invalid' : '' }}"
19
value="{{ old('email') }}" placeholder="{{ __('adminlte::admin lte.email') }}" autofocus>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas
fa-envelope {{ config('adminlte.classes_auth_icon', '') }}"></span>
</div>
</div>
@if($errors->has('email'))
<div class="invalid-feedback">
<strong>{{ $errors->first('email') }}</strong>
</div>
@endif </div>
{{-- Password field --}}
<div class="input-group mb-3">
<input type="password" name="password" class= "form-control {{ $errors->has('password') ? 'is-invalid' : '' }}"
placeholder="{{ __('adminlte::adminlte.password') }}">
<div class="input-group-append">
<div class="input-group-text">
<span class="fas
fa-lock {{ config('adminlte.classes_auth_icon', '') }}"></span>
</div>
</div>
@if($errors->has('password')) <div class="invalid-feedback">
<strong>{{ $errors->first('password') }}</strong>
</div>
@endif </div>
{{-- Login field --}}
<div class="row">
<div class="col-7">
<div class="icheck-primary">
<input type="checkbox" name="remember" id="remember">
<label for="remember">{{ __('adminlte::adminlte.remember_me')
}}</label>
</div>
</div>
<div class="col-5">
<button type=submit class="btn
20
<span class="fas fa-sign-in-alt"></span>
{{ __('adminlte::adminlte.sign_in') }} </button> </div> </div> </form> @stop @section('auth_footer')
{{-- Password reset link --}}
@if($password_reset_url) <p class="my-0"> <a href="{{ $password_reset_url }}"> {{ __('adminlte::adminlte.i_forgot_my_password') }} </a> </p> @endif {{-- Register link --}} @if($register_url) <p class="my-0"> <a href="{{ $register_url }}"> {{ __('adminlte::adminlte.register_a_new_membership') }} </a> </p> @endif @stop
1.2 Login Controller
<?php namespace App\Http\Controllers\Auth;use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{ /*
| Login Controller
|---21
|
| This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. |
*/
use AuthenticatesUsers; /**
* Where to redirect users after login. *
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance. *
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout'); }
}
2.Source Code Kategori Produksi
2.1 List Kategori Produk
@extends('adminlte::page')
@section('title', 'Kategori Produk') @section('content_header')
<h1>Kategori Produk</h1>
@stop
@section('css')
<link rel="stylesheet" href="/vendor/adminlte/dist/css/custom.css">
22 @section('content')
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
<div class="row">
<div class="col-sm-12">
<table id="category-table" class="table bordered table-hover dataTable dtr-inline" role="grid" >
<thead>
<tr>
<th scope="col" class="sorting" tabindex="0" aria-controls="category-table" rowspan="1" colspan="1"
aria-label="Number: activate to sort column ascending">#</th>
<th scope="col" class="sorting" tabindex="0" aria-controls="category-table" rowspan="1" colspan="1"
aria-label="Kategori Produk: activate to sort column ascending">Kategori Produk</th>
<th scope="col" class="sorting" tabindex="0" aria-controls="category-table" rowspan="1" colspan="1"
aria-label="Tipe Produk: activate to sort column ascending">Tipe Produk</th>
<th scope="col" class="sorting" tabindex="0" aria-controls="category-table" rowspan="1" colspan="1"
aria-label="Status Produk: activate to sort column ascending">Status Produk</th>
<th scope="col" class="sorting" tabindex="0" aria-controls="category-table" rowspan="1" colspan="1"
aria-label="Ubah Status: activate to sort column ascending">Ubah Status</th>
</tr>
</thead>
<tbody>
@foreach ($categories as $item) <tr>
<th scope="row">{{ $loop->iteration }}</th>
<td>{{ $item->product_category }}</td> @if ($item->product_type==1) <td>Barang Jadi</td> @elseif ($item->product_type==2) <td>Bahan Baku</td> @else <td>Pendukung</td> @endif @if ($item->status==1) <td>Aktif</td> @else
23
<td>Tidak Aktif</td>
@endif <td>
<form action="product-category/status/{{ $item->id }}" method="post">
@method('patch') @csrf
<button type="submit" class="btn btn-success">Ubah Status</button>
</form> </td> </tr> @endforeach </tbody> </table>
<div class="row">
<div class="col-12 pagination">
{{ $categories->links() }} </div> </div> </div> </div> @stop @section('footer')
<div class="row">
<div class="col-12 text-right">
<a class="btn btn-primary" href="/product-category/create">Buat Baru</a>
</div> </div>
@stop
2.2 Form Create Kategori Produk
@extends('adminlte::page')
@section('title', 'Insert Kategori Produk') @section('content_header')
<h1>Insert Kategori Produk</h1>
@stop
@section('content')
24 @csrf
<div class="form-group row">
<label for="productType" class="col-sm-2 col-form-label">Tipe Produk</label>
<div class="col-sm-2">
<select class="form-control" id="productType" name="product_type">
<option value="1">Barang Jadi</option>
<option value="2">Bahan Baku</option>
<option value="3">Pendukung</option>
</select>
</div>
</div>
<div class="form-group row">
<label for="category" class="col-sm-2 col-form-label">Kategori Produk</label>
<div class="col-sm-2">
<input type="text" class="form-control @error('product_category') is-invalid @enderror" id="category" name="product_category" value="{{ old('product_ category') }}">
@error('product_category')
<div class="invalid-feedback">
{{ $message }} </div> @enderror </div> </div> @stop @section('footer')
<div class="row">
<div class="col-2">
<a href="/product-category"><button type="button" class="btn btn-primary">Kembali</button></a>
</div>
<div class="col-10 text-right">
<button type="submit" class="btn btn-primary">Simpan</a>
</div> </div> </form>
@stop
2.3 Kategori Produk Controller
<?php
25 use App\ProductCategory;
use Illuminate\Http\Request;
class ProductCategoryController extends Controller
{ /**
* Display a listing of the resource. *
* @return \Illuminate\Http\Response */
public function index() {
return view(
'master.product-category.index', ['categories'=>ProductCategory::paginate(10)]); }
/**
* Show the form for creating a new resource. *
* @return \Illuminate\Http\Response */
public function create()
{
$object = ProductCategory::latest()->first(); $id=0; if($object==null){ $id++; }else{ $id=$object->id; $id++; }
$generatedCode='CT-'. str_pad($id, 5, '0', STR_PAD_LEFT);
return view('master.product-category.create',compact('generatedCode')); }
/**
* Store a newly created resource in storage. *
* @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response
*/
public function store(Request $request) {
26 $request->validate([
'product_category' => ['required', 'max:100'], ],[
'product_category.required' => 'Kategori Produk harus diisi !'
]);
// two way to insert
//one like this
// $productCategory = new ProductCategory();
// $productCategory->category_product = $request->product_category;
// $productCategory->product_type = $request->product_type;
//the other using eloquent
//must fill fillable in model otherwise error mass assignment
// ProductCategory::create([
// 'category_product' => $request->product_category,
// 'product_type' => $request->product_type,
// ]);
//if u already using fillable u can also make it one line
//the condition is the name in form have to be the same as column name
ProductCategory::create($request->all()); return redirect('/product-category'
)->with('status','Data Kategori Produk Berhasil Disimpan !'); // return $request->all();
}
/**
* Display the specified resource. *
* @param \App\ProductCategory $productCategory * @return \Illuminate\Http\Response
*/
public function show(ProductCategory $productCategory)
{ //
} /**
* Show the form for editing the specified resource. *
27
* @param \App\ProductCategory $productCategory * @return \Illuminate\Http\Response
*/
public function edit(ProductCategory $productCategory)
{
return view('master.product-category.edit',compact('productCategory')); }
/**
* Update the specified resource in storage. *
* @param \Illuminate\Http\Request $request * @param \App\ProductCategory $productCategory * @return \Illuminate\Http\Response
*/
public function update(Request $request, ProductCategory $productCategory)
{
$request->validate([
'product_category' => ['required', 'max:100'], ],[
'product_category.required' => 'Kategori Produk harus diisi !'
]);
ProductCategory::where('id', $productCategory->id)->update([ 'product_category' => $request->product_category,
'product_type' => $request->product_type, ]);
return redirect('/product-category'
)->with('status','Data Kategori Produk Berhasil Diupdate !'); }
/**
* Remove the specified resource from storage. *
* @param \App\ProductCategory $productCategory * @return \Illuminate\Http\Response
*/
public function destroy(ProductCategory $productCategory)
{
ProductCategory::destroy($productCategory->id); return redirect('/product-category'
)->with('status','Data Kategori Produk Berhasil Dihapus !'); }
28 public function getCategories($id=0){
$categoryData['data'] = ProductCategory::where([['product_type','=',$id], ['status','=',1]])->get();
return response()->json($categoryData); }
public function updateStatus(ProductCategory $productCategory)
{
$status = 1;
if($productCategory->status==1){ $status = 2;
}
ProductCategory::where('id', $productCategory->id)->update([ 'status' => $status
]);
return redirect('/product-category'
)->with('status','Status Kategori Produk Berhasil Diupdate !'); }
}
3.Source Code Form Produk
3.1 List Produk
@extends('adminlte::page') @section('title', 'Produk') @section('content_header') <h1>Produk</h1>
@stop
@section('css')
<link rel="stylesheet" href="/vendor/adminlte/dist/css/custom.css">
@stop
@section('content') @if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
29
<table id="product-table" class="table table-bordered table-hover dataTable dtr-inline" role="grid">
<thead>
<tr>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >#</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >Kode - Nama Produk</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >Kategori Produk</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >Tipe Produk</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >Status Produk</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >Lihat Detail</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >Ubah Status</th>
</tr>
</thead>
<tbody>
@foreach ($products as $item) <tr>
<th scope="row">{{ $loop->iteration }}</th>
<td>{{ $item->code }} - {{ $item->name }}</td> <td>{{ $item->productCategory->product_category }}</td> @if ($item->product_type==1) <td>Barang Jadi</td> @elseif ($item->product_type==2) <td>Bahan Baku</td> @else <td>Pendukung</td> @endif @if ($item->status==1) <td>Aktif</td> @else <td>Tidak Aktif</td> @endif
<td><a class="btn btn-success" href="product/{{ $item->id }}">Lihat Detail</a></td>
<td>
<form action="product/status/{{ $item->id }}" method="post">
@method('patch') @csrf
30
<button type="submit" class="btn btn-success">Ubah Status</button>
</form> </td> </tr> @endforeach </tbody> </table>
<div class="row">
<div class="col-12 pagination">
{{ $products->links() }}
</div> </div>
@stop
@section('footer')
<div class="row">
<div class="col-12 text-right">
<a class="btn btn-primary" href="/product/create">Buat Baru</a>
</div> </div>
@stop
3.2 Form Create Produk
@extends('adminlte::page')
@section('title', 'Insert Produk') @section('content_header')
<h1>INSERT PRODUK</h1>
@stop
@section('content')
<form method="post" action="/product">
@csrf
<div class="form-group row">
<label for="productType" class="col-sm-2 col-form-label">Tipe Produk</label>
<div class="col-sm-2">
<select class="form-control" id="productType" name="product_type">
<option value="1">Barang Jadi</option>
<option value="2">Bahan Baku</option>
<option value="3">Pendukung</option>
</select>
31 </div>
<div class="form-group row">
<label for="category" class="col-sm-2 col-form-label">Kategori Produk</label>
<div class="col-sm-2">
<select class=
"form-control" id="product_category_id" name="product_category_id">
@foreach ($productCategories as $productCategory) <option value="{{
$productCategory->id }}">{{ $productCategory->product_category }}</option>
@endforeach </select>
</div>
</div>
<div class="form-group row">
<label for="code" class="col-sm-2 col-form-label">Kode Produk</label>
<div class="col-sm-2">
<input type="text" class="form-control @error('code')
is-invalid @enderror" id="code" name="code" value="{{ $generatedCode }}" readonly>
@error('code')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror </div>
</div>
<div class="form-group row">
<label for="name" class="col-sm-2 col-form-label">Nama Produk</label>
<div class="col-sm-2">
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" name="name" value="{{ old('name') }}">
@error('name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror </div>
<button type="button" class="btn btn-primary col-md-2 offset-md-5" id="add_row" float="right">
Tambah data </button>
</div>
<table class="table" id="products_table">
<thead class="thead-dark">
32 <th scope="col">Satuan</th>
<th scope="col">Nilai Konversi</th>
<th scope="col">Tingkat</th>
<th scope="col">Hapus</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<select class="form-control" id="uom" name="uoms[]">
@foreach ($uoms as $uom)
<option value="{{ $uom->id }}">{{ $uom->name }}</option>
@endforeach </select>
</td>
<td><input type="number" name="conversions[]" class= "form-control" value="1" /></td>
<td><input type="number" name="level[]" class= "form-control" value="1" /></td>
<td><button class="btn
btn-danger" onclick="deleteRow(this)">Hapus</button></td>
</tr>
</tbody>
</table>
@stop
@section('footer')
<div class="row">
<div class="col-2">
<a href="/product"><button type="button" class="btn btn-primary">Kembali</button></a>
</div>
<div class="col-10 text-right">
<button type="submit" class="btn btn-primary">Simpan</a>
</div> </div> </form> @stop @section('js') <script> let row = '<tr>' +'<td>'
33
+ '<select class="form-control" id="uom" name="uoms[]">'
+ '@foreach ($uoms as $uom)'
+ '<option value="{{ >id }}">{{ $uom->name }}</option>'
+'@endforeach'
+'</select>'
+'</td>'
+'<td><input type="number" name="conversions[]" class="form-control" value="1" /></td>'
+'<td><input type="number" name="level[]" class="form-control" value="1" /></td>'
+'<td><button class="btn
btn-danger" onclick="deleteRow(this)">Hapus</button></td>'
+'</tr>'; let row_number = 1;
$("#add_row").click(function(e){ e.preventDefault();
$('#products_table').append(row); });
function deleteRow(e){
$(e).parent().parent().remove(); }
$('#productType').change(function(){
var id = document.getElementById("productType").value; $.ajax({
method: "GET",
url: "{{ url('product-category/get-category') }}/"+id, success: function (response) {
let productCategorySelect = $('#product_category_id'); productCategorySelect.empty();
productCategorySelect.append('<option selected="selected" value=" 0">--Pilih--</option>');
$.each(response['data'], function(i, item) { productCategorySelect.append($('<option>', { value: item.id,
text: item.product_category }));
}); }
34 }); }); </script> @stop
3.3 Produk Controller
<?php namespace App\Http\Controllers;use App\Product;
use App\ProductCategory; use App\Uom;
use Illuminate\Http\Request;
class ProductController extends Controller
{ /**
* Display a listing of the resource. *
* @return \Illuminate\Http\Response */
public function index() {
return view('master.product.index', ['products'=>Product::paginate(10)]) ;
} /**
* Show the form for creating a new resource. *
* @return \Illuminate\Http\Response */
public function create()
{
$object = Product::latest()->first(); $id=0;
if($object==null){ $id++;
}else{
35 $id++;
}
$generatedCode='PD-'. str_pad($id, 5, '0', STR_PAD_LEFT); $uoms =Uom::all();
$productCategories = ProductCategory::all();
return view('master.product.create',compact('uoms'),compact('productCateg ories','generatedCode'));
} /**
* Store a newly created resource in storage. *
* @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response
*/
public function store(Request $request) {
$product = Product::create($request->all()); $uoms = $request->input('uoms', []);
$conversions = $request->input('conversions', []); $levels = $request->input('level', []);
for ($i=0; $i < count($uoms); $i++) { if ($uoms[$i] != '') {
$product->uoms
()->attach($uoms[$i], ['conversion' => $conversions[$i], 'level' => $levels[$i]]); }
}
return redirect('/product'
)->with('status','Data Produk Berhasil Disimpan !'); }
/**
* Display the specified resource. *
* @param \App\Product $product * @return \Illuminate\Http\Response */
public function show(Product $product) {
$uoms =Uom::all();
$productCategories = ProductCategory::all();
return view('master.product.show',compact('product','productCategories',' uoms'));
36 }
/**
* Show the form for editing the specified resource. *
* @param \App\Product $product * @return \Illuminate\Http\Response */
public function edit(Product $product) {
//
} /**
* Update the specified resource in storage. *
* @param \Illuminate\Http\Request $request * @param \App\Product $product
* @return \Illuminate\Http\Response */
public function update(Request $request, Product $product) {
//
} /**
* Remove the specified resource from storage. *
* @param \App\Product $product * @return \Illuminate\Http\Response */
public function destroy(Product $product)
{ //
}
public function updateStatus(Product $product)
{
$status = 1;
if($product->status==1){ $status = 2;
}
Product::where('id', $product->id)->update([ 'status' => $status
37 return redirect('/product'
)->with('status','Status Produk Berhasil Diupdate !'); }
}
4. Source Code Supplier
4.1 List Supplier
@extends('adminlte::page') @section('title', 'Supplier') @section('content_header') <h1>Supplier</h1>
@stop
@section('css')
<link rel="stylesheet" href="/vendor/adminlte/dist/css/custom.css">
@stop
@section('content') @if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
<table id="product-table" class="table table-bordered table-hover dataTable dtr-inline" role="grid">
<thead>
<tr>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >#</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >Kode - Nama Supplier</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >Status Supplier</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >Lihat Detail</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "product-table" rowspan="1" colspan="1" >Ubah Status</th>
</tr>
38 <tbody>
@foreach ($suppliers as $item) <tr>
<th scope="row">{{ $loop->iteration }}</th>
<td>{{ $item->code }} - {{ $item->name }}</td> @if ($item->status==1) <td>Aktif</td> @else <td>Tidak Aktif</td> @endif
<td><a class="btn btn-success" href="supplier/{{ $item->id }}">Lihat Detail</a></td>
<td>
<form action="supplier/status/{{ $item->id }}" method="post">
@method('patch') @csrf
<button type="submit" class="btn btn-success">Ubah Status</button>
</form> </td> </tr> @endforeach </tbody> </table>
<div class="row">
<div class="col-12 pagination">
{{ $suppliers->links() }}
</div> </div>
@stop
@section('footer')
<div class="row">
<div class="col-12 text-right">
<a class="btn btn-primary" href="/supplier/create">Buat Baru</a>
</div> </div>
@stop
4.2 Form Create Supplier
@extends('adminlte::page')
@section('title', 'Insert Supplier') @section('content_header')
39 <h1>INSERT SUPPLIER</h1>
@stop
@section('content')
<form method="post" action="/supplier">
@csrf
<div class="form-group row">
<label for="code" class="col-sm-2
col-form-label">Kode Supplier<span style="color:red;">*</span></label>
<div class="col-sm-2">
<input type="text" class="form-control @error('code')
is-invalid @enderror" id="code" name="code" value="{{ $generatedCode }}" readonly>
@error('code')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror </div>
</div>
<div class="form-group row">
<label for="name" class="col-sm-2
col-form-label" >Nama Supplier<span style="color:red;">*</span></label>
<div class="col-sm-2">
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" name="name" value="{{ old('name') }}" >
@error('name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror </div>
</div>
<div class="form-group row">
<label for="address" class="col-sm-2
col-form-label">Alamat Supplier<span style="color:red;">*</span></label>
<div class="col-sm-2">
<textarea class="form-control @error('address')
is-invalid @enderror" id="address" name="address" value="{{ old('address') }}" rows ="5"></textarea>
@error('address')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror </div>
40 </div>
<div class="form-group row">
<label for="phone" class="col-sm-2
col-form-label">No. Telepon<span style="color:red;">*</span></label>
<div class="col-sm-2">
<input type="text" class="form-control @error('phone') is-invalid @enderror" id="phone" name="phone" value="{{ old('phone') }}" >
@error('phone')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror </div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Email<span style="color:red;">*</span></label>
<div class="col-sm-2">
<input type="email" class="form-control @error('email') is-invalid @enderror" id="email" name="email" value="{{ old('email') }}" >
@error('email')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror </div>
</div>
<div class="form-group row">
<label for="npwp" class="col-sm-2 col-form-label">NPWP</label>
<div class="col-sm-2">
<input type="text" class="form-control @error('npwp') is-invalid @enderror" id="npwp" name="npwp" value="{{ old('npwp') }}" >
@error('npwp')
<div class="invalid-feedback">
{{ $message }} </div> @enderror </div> </div> @stop @section('footer')
41
<div class="row">
<div class="col-2">
<a href="/supplier"><button type="button" class="btn btn-primary">Kembali</button></a>
</div>
<div class="col-10 text-right">
<button type="submit" class="btn btn-primary">Simpan</a>
</div> </div> </form> @stop
4.3 Supplier Controller
<?php namespace App\Http\Controllers;use App\Supplier;
use Illuminate\Http\Request;
class SupplierController extends Controller
{ /**
* Display a listing of the resource. *
* @return \Illuminate\Http\Response */
public function index() {
return view('master.supplier.index', ['suppliers'=>Supplier::paginate(10
)]); } /**
* Show the form for creating a new resource. *
* @return \Illuminate\Http\Response */
public function create()
{
$object = Supplier::latest()->first(); $id=0;
42 if($object==null){ $id++; }else{ $id=$object->id; $id++; }
$generatedCode='SP-'. str_pad($id, 5, '0', STR_PAD_LEFT);
return view('master.supplier.create',compact('generatedCode')); }
/**
* Store a newly created resource in storage. *
* @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response
*/
public function store(Request $request) {
$request->validate([
'name' => ['required'], 'address' => ['required'],
'phone' => ['required','digits_between:10,13'], 'email' => ['required','email']
],[
'code.required' => 'Nama Supplier harus diisi !', 'address.required' => 'Alamat harus diisi !', 'phone.required' => 'Nomor Telepon harus diisi !',
'phone.digits' => 'Nomor Telepon harus Angka 10 Sampai 13 Angka !', 'email.required' => 'Email harus diisi !',
'email.email' => 'Format Email Tidak Valid !'
]);
$supplier = Supplier::create($request->all());
return redirect('/supplier'
)->with('status','Data Supplier Berhasil Disimpan !'); }
/**
* Display the specified resource. *
* @param \App\Supplier $supplier * @return \Illuminate\Http\Response */
43 public function show(Supplier $supplier) {
return view('master.supplier.show',compact('supplier')); }
/**
* Show the form for editing the specified resource. *
* @param \App\Supplier $supplier * @return \Illuminate\Http\Response */
public function edit(Supplier $supplier) {
//
} /**
* Update the specified resource in storage. *
* @param \Illuminate\Http\Request $request * @param \App\Supplier $supplier
* @return \Illuminate\Http\Response */
public function update(Request $request, Supplier $supplier) {
//
} /**
* Remove the specified resource from storage. *
* @param \App\Supplier $supplier * @return \Illuminate\Http\Response */
public function destroy(Supplier $supplier) {
//
}
public function updateStatus(Supplier $supplier)
{
$status = 1;
if($supplier->status==1){ $status = 2;
44
Supplier::where('id', $supplier->id)->update([ 'status' => $status
]);
return redirect('/supplier'
)->with('status','Status Supplier Berhasil Diupdate !'); }
}
5. Source Code Pesanan Pembelian
5.1 List Pesanan Pembelian
@extends('adminlte::page')
@section('title', 'Pesanan Pembelian') @section('content_header')
<h1>Pesanan Pembelian</h1>
@stop
@section('css')
<link rel="stylesheet" href="/vendor/adminlte/dist/css/custom.css">
@stop
@section('content') @if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
<table id="purchase-order-table" class="table bordered table-hover dataTable dtr-inline" role="grid">
<thead >
<tr>
<th scope="col" class="sorting" tabindex="0" aria-controls= "purchase-order-table" rowspan="1" colspan="1" >#</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "purchase-order-table" rowspan="1" colspan="1" >No Kode PO</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "purchase-order-table" rowspan="1" colspan="1" >Tanggal PO</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "purchase-order-table" rowspan="1" colspan="1" >Kode - Nama Supplier</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "purchase-order-table" rowspan="1" colspan="1" >Nilai PO</th>
45
<th scope="col" class="sorting" tabindex="0" aria-controls= "purchase-order-table" rowspan="1" colspan="1" >Status PO</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "purchase-order-table" rowspan="1" colspan="1" >Lihat Detail</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "purchase-order-table" rowspan="1" colspan="1" >Batal PO</th>
</tr>
</thead>
<tbody>
@foreach ($purchaseOrders as $item) <tr>
<th scope="row">{{ $loop->iteration }}</th>
<td>{{ $item->code }}</td>
<td>{{ date('d-M-Y', strtotime($item->transaction_date)) }}</td>
<td>{{ $item->supplier->code }} - {{ $item->supplier->name }}</td>
<td>{{ $item->total }}</td>
@if ($item->status==1) <td>Menunggu</td>
@elseif ($item->status==2) <td>Batal</td>
@else <td>Terproses</td>
@endif
<td><a class="btn btn-success" href="purchase-order/{{ $item->id }}">Lihat Detail</a></td>
<td>
<form action="purchase-order/updateStatus/{{ $item->id }}" method="post">
@method('patch') @csrf
<button type="submit" class="btn btn-success" @if ($item->status!=1) disabled @endif>Batal PO</button>
</form> </td> </tr> @endforeach </tbody> </table>
<div class="row">
<div class="col-12 pagination">
{{ $purchaseOrders->links() }}
</div> </div>
@stop
@section('footer')
46 <div class="col-12 text-right">
<a class="btn btn-primary" href="/purchase-order/create">Buat Baru</a>
</div> </div>
@stop
6. Source Code Uang Muka Pembelian
6.1 List Uang Muka Pembelian
@extends('adminlte::page')
@section('title', 'Uang Muka Pembelian') @section('content_header')
<h1>Uang Muka Pembelian</h1>
@stop
@section('css')
<link rel="stylesheet" href="/vendor/adminlte/dist/css/custom.css">
@stop
@section('content') @if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
<table id="initial-payment-table" class="table bordered table-hover dataTable dtr-inline" role="grid">
<thead >
<tr>
<th scope="col" class="sorting" tabindex="0" aria-controls= "initial-payment-table" rowspan="1" colspan="1" >#</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "initial-payment-table" rowspan="1" colspan="1" >No Kode DP</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "initial-payment-table" rowspan="1" colspan="1" >Tanggal DP</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "initial-payment-table" rowspan="1" colspan="1" >Kode PO</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "initial-payment-table" rowspan="1" colspan="1" >Kode - Nama Supplier</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "initial-payment-table" rowspan="1" colspan="1" >Nilai DP</th>
47
<th scope="col" class="sorting" tabindex="0" aria-controls= "initial-payment-table" rowspan="1" colspan="1" >Lihat Detail</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "initial-payment-table" rowspan="1" colspan="1" >Batal PO</th>
</tr>
</thead>
<tbody>
@foreach ($initialPayments as $item) <tr>
<th scope="row">{{ $loop->iteration }}</th>
<td>{{ $item->code }}</td>
<td>{{ date('d-M-Y', strtotime($item->transaction_date)) }}</td>
<td>{{ $item->purchaseOrder->code }}</td>
<td>{{ $item->supplier->code }} - {{ $item->supplier->name }}</td>
<td>{{ $item->dp }}</td>
<td><a class="btn btn-success" href="initial-payment/{{ $item->id }}">Lihat Detail</a></td>
<td>
<form action="initial-payment/{{ $item->id }}" method="post">
@method('delete') @csrf
<button type="submit" class="btn btn-success">Batal DP</button>
</form> </td> </tr> @endforeach </tbody> </table>
<div class="row">
<div class="col-12 pagination">
{{ $initialPayments->links() }}
</div> </div>
@stop
@section('footer')
<div class="row">
<div class="col-12 text-right">
<a class="btn btn-primary" href="/initial-payment/create">Buat Baru</a>
</div> </div>
48
7. Source Code Penerimaan Pembelian
7.1 List Penerimaan Pembelian
@extends('adminlte::page')
@section('title', 'Penerimaan Pembelian') @section('content_header')
<h1>Penerimaan Pembelian</h1>
@stop
@section('css')
<link rel="stylesheet" href="/vendor/adminlte/dist/css/custom.css">
@stop
@section('content') @if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
<table id="good-receipt-table" class="table bordered table-hover dataTable dtr-inline" role="grid">
<thead >
<tr>
<th scope="col" class="sorting" tabindex="0" aria-controls= "good-receipt-table" rowspan="1" colspan="1" >#</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "good-receipt-table" rowspan="1" colspan="1" >No Kode BPB</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "good-receipt-table" rowspan="1" colspan="1" >Tanggal BPB</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "good-receipt-table" rowspan="1" colspan="1" >Kode PO</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "good-receipt-table" rowspan="1" colspan="1" >Kode - Nama Supplier</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "good-receipt-table" rowspan="1" colspan="1" >Lihat Detail</th>
</tr>
</thead>
<tbody>
@foreach ($goodReceipts as $item) <tr>
<th scope="row">{{ $loop->iteration }}</th>
<td>{{ $item->code }}</td>
49
<td>{{ $item->purchaseOrder->code }}</td>
<td>{{ $item->supplier->code }} - {{ $item->supplier->name }}</td>
<td><a class="btn btn-success" href="good-receipt/{{ $item->id }}">Lihat Detail</a></td>
</tr>
@endforeach </tbody>
</table>
<div class="row">
<div class="col-12 pagination">
{{ $goodReceipts->links() }}
</div> </div>
@stop
@section('footer')
<div class="row">
<div class="col-12 text-right">
<a class="btn btn-primary" href="/good-receipt/create">Buat Baru</a>
</div> </div>
@stop
8. Source Code Retur Pembelian
8.1 List Retur Pembelian
@extends('adminlte::page')
@section('title', 'Retur Pembelian') @section('content_header')
<h1>Retur Pembelian</h1>
@stop
@section('css')
<link rel="stylesheet" href="/vendor/adminlte/dist/css/custom.css">
@stop
@section('content') @if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
50 @endif
<table id="retur-table" class="table table-bordered table-hover dataTable dtr-inline" role="grid">
<thead >
<tr>
<th scope="col" class="sorting" tabindex="0" aria-controls= "retur-table" rowspan="1" colspan="1" >#</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "retur-table" rowspan="1" colspan="1" >No Kode Retur</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "retur-table" rowspan="1" colspan="1" >Tanggal Retur</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "retur-table" rowspan="1" colspan="1" >Tanggal BPB</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "retur-table" rowspan="1" colspan="1" >Kode PO</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "retur-table" rowspan="1" colspan="1" >Kode - Nama Supplier</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "retur-table" rowspan="1" colspan="1" >Lihat Detail</th>
</tr>
</thead>
<tbody>
@foreach ($returs as $item) <tr>
<th scope="row">{{ $loop->iteration }}</th>
<td>{{ $item->code }}</td>
<td>{{ date('d-M-Y', strtotime($item->transaction_date)) }}</td>
<td>{{ $item->goodReceipt->code }}</td>
<td>{{ $item->goodReceipt->purchaseOrder->code }}</td>
<td>{{ $item->supplier->code }} - {{ $item->supplier->name }}</td>
<td><a class="btn btn-success" href="retur/{{ $item->id }}">Lihat Detail</a></td>
</tr>
@endforeach </tbody>
</table>
<div class="row">
<div class="col-12 pagination">
{{ $returs->links() }}
</div> </div>
@stop
51
<div class="row">
<div class="col-12 text-right">
<a class="btn btn-primary" href="/retur/create">Buat Baru</a>
</div> </div>
@stop
9. Source Faktur Pembelian
9.1 List Faktur Pembelian
@extends('adminlte::page')
@section('title', 'Faktur Pembelian') @section('content_header')
<h1>Faktur Pembelian</h1>
@stop
@section('css')
<link rel="stylesheet" href="/vendor/adminlte/dist/css/custom.css">
@stop
@section('content') @if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
<table id="invoice-table" class="table table-bordered table-hover dataTable dtr-inline" role="grid">
<thead >
<tr>
<th scope="col" class="sorting" tabindex="0" aria-controls= "invoice-table" rowspan="1" colspan="1" >#</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "invoice-table" rowspan="1" colspan="1" >No Kode Faktur</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "invoice-table" rowspan="1" colspan="1" >Tanggal Faktur</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "invoice-table" rowspan="1" colspan="1" >Nilai Faktur</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "invoice-table" rowspan="1" colspan="1" >Kode BPB</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "invoice-table" rowspan="1" colspan="1" >Kode PO</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "invoice-table" rowspan="1" colspan="1" >Kode - Nama Supplier</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "invoice-table" rowspan="1" colspan="1" >Status Faktur</th>
52
<th scope="col" class="sorting" tabindex="0" aria-controls= "invoice-table" rowspan="1" colspan="1" >Lihat Detail</th>
<th scope="col" class="sorting" tabindex="0" aria-controls= "invoice-table" rowspan="1" colspan="1" >Batal Faktur</th>
</tr>
</thead>
<tbody>
@foreach ($invoices as $item) <tr>
<th scope="row">{{ $loop->iteration }}</th>
<td>{{ $item->code }}</td>
<td>{{ date('d-M-Y', strtotime($item->transaction_date)) }}</td>
<td>{{ $item->total }}</td>
<td>{{ $item->goodReceipt->code }}</td>
<td>{{ $item->goodReceipt->purchaseOrder->code }}</td>
<td>{{ $item->supplier->code }} - {{ $item->supplier->name }}</td>
@if ($item->status==1) <td>Belum Lunas</td>
@elseif ($item->status==2) <td>Lunas</td>
@else <td>Batal</td>
@endif
<td><a class="btn btn-success" href="invoice/{{ $item->id }}">Lihat Detail</a></td>
<td>
<form action="invoice/updateStatus/{{ $item->id }}" method="post">
@method('patch') @csrf
<button type="submit" class="btn btn-success" @if ($item->status!=1) disabled @endif>Batal Faktur</button>
</form> </td> </tr> @endforeach </tbody> </table>
<div class="row">
<div class="col-12 pagination">
{{ $invoices->links() }}
</div> </div>
@stop
@section('footer')