4. IMPLEMENTASI SISTEM
Pembahasan pada bab ini merupakan implementasi dari dasar teori dan desain sistem yang telah dijelaskan pada bab-bab sebelumnya dan menjadi suatu aplikasi yang siap untuk digunakan.
Implementasi aplikasi dibagi menjadi beberapa bagian sesuai dengan kegunaannya masing-masing, diantaranya sebagai berikut:
Tabel 0.1. Implementasi Program Master.
Menu Keterangan No Segmen No DFD
Create Master Bahan Baku
Menambah data bahan baku 4.1 1.1
Create Master BOM Menambah data BOM 4.2 2.1
Tabel 0.2. Implementasi Program Pembelian.
Menu Keterangan No Segmen No DFD
Create PO Membuat PO 4.3 1.1
Create Retur Pembelian Membuat Retur Pembelian 4.4 1.4
Tabel 0.3. Implementasi Program Produksi.
Menu Keterangan No Segmen No DFD
Create SPK Membuat SPK 4.5 2.2
Create Detail Produksi Membuat Detail Produksi 4.6 2.2
Tabel 0.4. Implementasi Program Penjualan.
Menu Keterangan No Segmen No DFD
Create Surat Jalan Membuat Surat Jalan 4.7 3.2 Create Nota Penjualan Membuat Nota Penjualan 4.8 3.3
Tabel 0.5. Implementasi Laporan.
Menu Keterangan No Segmen No DFD
Create Laporan HPP Membuat Laporan HPP 4.9 4.2 Create Laporan WIP Membuat Laporan WIP 4.10 4.2
Tabel 0.6. Function yang digunakan.
Menu Keterangan No Segmen No DFD
Function Backdate Fungsi untuk melakukan Backdate kartu stok
4.11 -
Function Ajax Auto Complete
Fungsi Auto Complete yang memanggil data sesuai kriteria
4.12 -
4.1 Implementasi Program Master
Pada bagian ini dijelaskan contoh penambahan data master pada sistem, berikut segmen program master yang ditampilkan ialah master bahan baku dan master bom untuk mewakili segmen master yang lain.
4.1.1 Create Master Bahan Baku
Proses penambahan data master bahan baku dapat dilihat pada Segmen Program 4.1. dan 4.2.
Segmen Program 0.1. Create Master Bahan Baku
public function actionCreate() {
$model=new BahanBaku;
if(isset($_POST['BahanBaku'])) {
$model->attributes=$_POST['BahanBaku'];
$simpangambar;
if(strlen(trim(CUploadedFile::getInstance($model,'gambar'))) > 0) {
$simpangambar=CUploadedFile::getInstance($model,'gambar');
$model->gambar=$model->kode.'.'.$simpangambar->extensionName;
$thumbnail_width = 134;
$thumbnail_height = 189;
$thumb_beforeword = "thumb";
$temp=CUploadedFile::getInstance($model,'gambar');
$arr_image_details = getimagesize($temp->tempName); // pass id to thumb name
$original_width = $arr_image_details[0];
$original_height = $arr_image_details[1];
if ($original_width > $original_height) {
$new_width = $thumbnail_width;
$new_height = intval($original_height * $new_width /
$original_width);
} else {
$new_height = $thumbnail_height;
$new_width = intval($original_width * $new_height /
$original_height);
}
$dest_x = intval(($thumbnail_width - $new_width) / 2);
$dest_y = intval(($thumbnail_height - $new_height) / 2);
if ($arr_image_details[2] == 1) {
$imgt = "ImageGIF";
$imgcreatefrom = "ImageCreateFromGIF";
}
if ($arr_image_details[2] == 2) {
$imgt = "ImageJPEG";
$imgcreatefrom = "ImageCreateFromJPEG";
}
if ($arr_image_details[2] == 3) {
$imgt = "ImagePNG";
$imgcreatefrom = "ImageCreateFromPNG";
}
Segmen Program 0.2. Create Master Bahan Baku (Sambungan)
if ($imgt) {
$old_image = $imgcreatefrom($temp->tempName);
$new_image = imagecreatetruecolor($thumbnail_width,
$thumbnail_height);
imagecopyresized($new_image, $old_image, $dest_x, $dest_y, 0, 0,
$new_width, $new_height, $original_width, $original_height);
$imgt($new_image, Yii::app()->basePath .
'\..\images\users\thumb_foto' . $model->gambar);
} }
$model->status=1;
if($model->save())
$this->redirect(array('view','id'=>$model->id_bahan));
}
$this->render('create',array(
'model'=>$model, ));
}
4.1.2 Create Master BOM
Proses penambahan data master BOM dapat dilihat pada Segmen Program 4.3.
dan 4.4.
Segmen Program 0.3. Create Master BOM
public function actionCreate() {
$temp=Bom::model()->find(array('order'=>"id_bom desc"));
$tempcount=count($temp);
if($tempcount==0)
$next=1;
else
$next=$temp->id_bom+1;
$model=new Bom;
if(isset($_POST['Bom'])) {
$model->attributes=$_POST['Bom'];
$model->status=1;
$model->id_bom=$next;
if($model->save()) {
if(isset($_POST['countBahan'])) {
$tempcount=$_POST['countBahan'];
for($i=0;$i<$tempcount;$i++) {
if(!empty($_POST['id_bahan'][$i])) {
$detailbahan = new DetailBahan;
$detailbahan->id_bahan = $_POST['id_bahan'][$i];
$detailbahan->jumlah = $_POST['jumlah_bahan'][$i];
$detailbahan->satuan = $_POST['satuan_bahan'][$i];
$detailbahan->id_bom = $model->id_bom;
Segmen Program 0.4. Create Master BOM (Sambungan)
$detailbahan->save();
} } }
if(isset($_POST['countMesin'])) {
$tempcount2=$_POST['countMesin'];
for($i=0;$i<$tempcount2;$i++) {
if(!empty($_POST['id_mesin'][$i])) {
$detailmesin = new DetailMesin;
$detailmesin->id_mesin = $_POST['id_mesin'][$i];
$detailmesin->jumlah = $_POST['jumlah_mesin'][$i];
$detailmesin->satuan = $_POST['satuan_mesin'][$i];
$detailmesin->id_bom = $model->id_bom;
$detailmesin->save();
} } }
if(isset($_POST['countPegawai'])) {
$tempcount3=$_POST['countPegawai'];
for($i=0;$i<$tempcount3;$i++) {
if(!empty($_POST['id_pegawai'][$i])) {
$detailpegawai = new DetailPegawai;
$detailpegawai->id_pegawai = $_POST['id_pegawai'][$i];
$detailpegawai->jumlah = $_POST['jumlah_pegawai'][$i];
$detailpegawai->satuan = $_POST['satuan_pegawai'][$i];
$detailpegawai->id_bom = $model->id_bom;
$detailpegawai->save();
} } }
$this->redirect(array('view','id'=>$model->id_bom));
} }
$this->render('create',array(
'model'=>$model, ));
}
4.2 Implementasi Proses Pembelian
Pada bagian ini ditampilkan contoh segmen transaksi pembelian yaitu
proses Pembuatan PO dan Retur Pembelian. Proses pembelian dimulai dari
pembuatan Purchase Order oleh perusahaan. Setelah itu dilakukan penerimaan
bahan sesuai pesanan yang kemudian dibuat menjadi nota pembelian. Setelah itu
terdapat proses retur pembelian serta pembayaran utang kepada supplier.
4.2.1 Create Purchase Order
Proses pembuatan Purchase Order kepada pelanggan dapat dilihat pada Segmen Program 4.5. dan 4.6.
Segmen Program 0.5. Create Purchase Order
public function actionCreate() {
$sup=new Supplier;
$temp=Po::model()->find(array('order'=>"no_po desc"));
$tempcount=count($temp);
if($tempcount==0)
$next=1;
else
$next=$temp->no_po+1;
$model=new Po;
$counter=0;
if(isset($_POST['coun'])) {
$tempcount=$_POST['coun'];
for($i=0;$i<$tempcount;$i++) {
if(!empty($_POST['jumlah_bahan'][$i])&&
$_POST['jumlah_bahan'][$i]>0) {
$counter=1;
} } }
if(isset($_POST['Po']) && $counter==1) {
$model->attributes=$_POST['Po'];
$model->status=1;
$model->no_po=$next;
$model->kode="PO-".$model->no_po;
if($model->id_sup!='') {
$nama_sup=Supplier::model()-
>find(array('condition'=>"id_sup='".$model->id_sup."'"));
$model->nama_supplier=$nama_sup->nama_supplier;
}
if($model->save()) {
if(isset($_POST['coun'])) {
$tempcount=$_POST['coun'];
for($i=0;$i<$tempcount;$i++) {
if(!empty($_POST['id_bahan'][$i]) && $_POST['jumlah_bahan'][$i]>0
&& $_POST['harga_bahan'][$i]>0) {
$detailbahan = new DetailPo;
$detailbahan->id_bahan = $_POST['id_bahan'][$i];
$detailbahan->jumlah = $_POST['jumlah_bahan'][$i];
$detailbahan->harga_satuan = $_POST['harga_bahan'][$i];
$detailbahan->jumlah_terima = 0;
$detailbahan->satuan = $_POST['satuan_bahan'][$i];
Segmen Program 0.6. Create Purchase Order (Sambungan)
$detailbahan->subtotal =
$_POST['harga_bahan'][$i]*$_POST['jumlah_bahan'][$i];;
$detailbahan->no_po = $model->no_po;
$detailbahan->save();
} } }
$this->redirect(array('view','id'=>$model->no_po));
} }
$this->render('create',array(
'model'=>$model, 'sup'=>$sup, 'next'=>$next, ));
}
4.2.2 Create Retur Pembelian
Proses retur pembelian bahan kepada supplier dapat dilihat pada Segmen Program 4.7, 4.8, 4.9, dan 4.10.
Segmen Program 0.7. Create Retur Pembelian
public function actionCreate() {
$temp=ReturPembelian::model()->find(array('order'=>"id_retur desc"));
$tempcount=count($temp);
if($tempcount==0)
$next=1;
else
$next=$temp->id_retur+1;
$model=new ReturPembelian;
if(isset($_POST['ReturPembelian'])) {
$model->attributes=$_POST['ReturPembelian'];
$model->id_retur=$next;
$model->kode="RB-".$model->id_retur;
$model->status=1;
$model->id_pembelian=$_POST['id_pembelian'];
$temp=KartuHutang::model()-
>find(array('condition'=>"id_supplier=".$model-
>id_supplier,'order'=>"nomor DESC"));
$tempcount2=count($temp);
if($tempcount2==0) {
$nomor=1;
$stokreal=0;
} else {
$nomor=$temp->nomor+1;
$stokreal=$temp->saldo;
Segmen Program 0.8. Create Retur Pembelian (Sambungan)
}
$piutang=new KartuHutang;
$piutang->tanggal=$model->tanggal;
$piutang->id_supplier=$model->id_supplier;
$piutang->id_hutang=$model->kode;
$piutang->jumlah_masuk=$model->harga_total*-1;
$piutang->jumlah_keluar=0;
$piutang->saldo=$stokreal-$model->harga_total;
$piutang->nomor=$nomor;
$piutang->save();
if($model->save()) {
$count=$_POST['coun'];
for($i=0;$i<$count;$i++) {
if(!empty($_POST['id_penerimaan'][$i]) &&
$_POST['retur_spk'][$i]>0) {
$harga=DetailPO::model()-
>find(array('condition'=>"no_po=".$_POST['no_po'][$i]."and id_bahan=".$_POST['id_bahan'][$i]));
$detretur=new DetailRbeli;
$detretur->id_penerimaan=$_POST['id_penerimaan'][$i];
$detretur->id_bahan=$_POST['id_bahan'][$i];
$detretur->id_retur=$model->id_retur;
$detretur->jumlah=$_POST['retur_spk'][$i];
$detretur->harga_satuan=$harga->harga_satuan;
$detretur->subtotal=$detretur->jumlah*$detretur->harga_satuan;
$detretur->save();
$temp=KartuStok::model()-
>find(array('condition'=>"id_bahan=".$_POST['id_bahan'][$i]."and tanggal<='".$model->tanggal."'",'order'=>"nomor DESC"));
$tempcount2=count($temp);
if($tempcount2==0) {
$nomor=1;
$stokreal=0;
$averagereal=0;
} else {
$nomor=$temp->nomor+1;
$stokreal=$temp->stok;
$averagereal=$temp->harga_average;
}
$harga=DetailPO::model()-
>find(array('condition'=>"no_po=".$_POST['no_po'][$i]."and id_bahan=".$_POST['id_bahan'][$i]));
$stok=new KartuStok;
$stok->tanggal=$model->tanggal;
$stok->id_bahan=$_POST['id_bahan'][$i];
$stok->jumlah_masuk=0;
$stok->jumlah_keluar=$_POST['retur_spk'][$i];
$stok->stok=$stokreal-$_POST['retur_spk'][$i];
$stok->harga=$harga->harga_satuan;
if($stok->stok!=0)
$stok->harga_average=(($averagereal*$stokreal
Segmen Program 0.9. Create Retur Pembelian (Sambungan)
)-($_POST['retur_spk'][$i]*$harga->harga_satuan))/($stokreal-
$_POST['retur_spk'][$i]);
else
$stok->harga_average=0;
$stok->keterangan="Retur dari id retur ".$model->id_retur."
penerimaan barang no ".$_POST['id_penerimaan'][$i];
$stok->nomor=$nomor;
$stok->status=9;
$stok->save();
$idterima=$_POST['id_penerimaan'][$i];
$temp2=KartuStok::model()-
>findAll(array('condition'=>"id_bahan=".$_POST['id_bahan'][$i]."
and tanggal>'".$model->tanggal."'",'order'=>"nomor DESC"));
foreach($temp2 as $detail) {
$temp3=KartuStok::model()-
>find(array('condition'=>"id_bahan=".$_POST['id_bahan'][$i]." and tanggal>'".$model->tanggal."' and nomor=".$detail->nomor));
if(!empty($temp3)) {
$temp3->nomor++;
$temp3->save();
} } } }
$counter=0;
$count=$_POST['coun'];
for($i=0;$i<$count;$i++) {
if(!empty($_POST['id_penerimaan'][$i])) {
if($_POST['retur_spk'][$i]+$_POST['telah_spk'][$i]!=$_POST['jumlah _bahan'][$i])
$counter=1;
} }
if($counter==0) {
$gantistatus=NotaPembelian::model()-
>find(array('condition'=>"id_pembelian=".$_POST['id_pembelian']));
$gantistatus->status=3;
$gantistatus->save();
$gantiterima=Penerimaan::model()-
>find(array('condition'=>"id_penerimaan=".$idterima));
$gantiterima->status=4;
$gantiterima->save();
}
$pel=Supplier::model()->findAll();
foreach($pel as $detail) {
$kartuhutang=KartuHutang::model()-
>findAll(array('condition'=>'id_supplier='.$detail-
>id_sup,'order'=>'tanggal,id_kartu'));
$nomor=1;
foreach($kartuhutang as $details) {
Segmen Program 0.10. Create Retur Pembelian (Sambungan)
$hutang=KartuHutang::model()-
>find(array('condition'=>'id_kartu='.$details->id_kartu));
$hutang->nomor=$nomor;
$nomor++;
$hutang->save();
} }
$pel1=Supplier::model()->findAll();
foreach($pel1 as $detail) {
$kartuhutang1=KartuHutang::model()-
>findAll(array('condition'=>'id_supplier='.$detail-
>id_sup,'order'=>'id_supplier,nomor'));
foreach($kartuhutang1 as $details) {
$prev=$details->nomor-1;
$hutang=KartuHutang::model()-
>find(array('condition'=>'nomor='.$details->nomor));
$hutangprev=KartuHutang::model()-
>find(array('condition'=>'nomor='.$prev.'and id_supplier='.$hutang->id_supplier));
if(!empty($hutangprev))
$hutang->saldo=$hutangprev->saldo+$hutang->jumlah_masuk-$hutang-
>jumlah_keluar;
else
$hutang->saldo=$hutang->jumlah_masuk-$hutang->jumlah_keluar;
$hutang->save();
} }
BackDate::KartuStok();
$this->redirect(array('view','id'=>$model->id_retur));
} }
$this->render('create',array(
'model'=>$model, 'next'=>$next, ));
}
4.3 Implementasi Proses Produksi
Pada bagian ini ditampilkan contoh segmen transaksi produksi yaitu proses pembuatan SPK dan detail produksi. Proses produksi dimulai dengan pembuatan SPK berdasarkan pesanan pelanggan dan proses detail produksi untuk memasukkan tiap detail tahapannya.
4.3.1 Create SPK
Proses pembuatan SPK dapat dilihat pada Segmen Program 4.11. dan 4.12.
Segmen Program 0.11. Create SPK
public function actionCreate() {
$temp=SPK::model()->find(array('order'=>"id_spk desc"));
$tempcount=count($temp);
if($tempcount==0)
$next=1;
else
$next=$temp->id_spk+1;
$model=new Spk;
if(isset($_POST['Spk']) && isset($_POST['coun']) &&
$_POST['jum']==1) {
$model->attributes=$_POST['Spk'];
$model->id_spk=$next;
$model->status=1;
$model->kode="SPK-".$model->id_spk;
for($i=0;$i<$_POST['coun'];$i++) {
if(isset($_POST['pro_bahan'][$i]) && $_POST['pro_bahan'][$i]>0) {
$model->id_produk=$_POST['id_bahan'][$i];
$model->jumlah=$_POST['pro_bahan'][$i];
} }
$hrgjual=DetailSo::model()-
>find(array('condition'=>"id_so=".$model->id_so."and id_produk=".$model->id_produk));
$model->harga_jual=$hrgjual->harga_satuan;
$model->jumlah_selesai=0;
if($model->save()) {
$detailso=DetailSO::model()-
>find(array('condition'=>"id_so=".$model->id_so."and id_produk=".$model->id_produk));
$detailso->jumlah_produksi=$detailso->jumlah_produksi+$model-
>jumlah;
$detailso->save();
if(isset($_POST['fix'])) {
if($_POST['fix']==1) {
$gantipo=SO::model()->find(array('condition'=>"id_so=".$model-
>id_so));
$gantipo->status=2;
$gantipo->save();
} }
$coun=0;
$counter=0;
$detailso=DetailSO::model()-
>findAll(array('condition'=>"id_so=".$model->id_so));
foreach($detailso as $detail) {
if($detail->jumlah_produksi>=$detail->jumlah)
$coun++;
$counter++;
}
Segmen Program 0.12. Create SPK (Sambungan)
if($coun==$counter) {
$detailso=SO::model()->find(array('condition'=>"id_so=".$model-
>id_so));
$detailso->status=2;
$detailso->save();
}
$this->redirect(array('view','id'=>$model->id_spk));
} }
$this->render('create',array(
'model'=>$model, 'next'=>$next, ));
}
4.3.2 Create Detail Produksi
Pada proses ini dimasukkan detail jumlah selesai produksi serta bahan- bahan yang dipakai pada tiap detailnya. Proses pembuatan detail produksi dapat dilihat pada Segmen Program 4.13, 4.14, 4.15 dan 4.16.
Segmen Program 0.13. Create Detail Produksi
public function actionCreate() {
$temp=DetailProduksi::model()->find(array('order'=>"id_detail desc"));
$tempcount=count($temp);
if($tempcount==0)
$next=1;
else
$next=$temp->id_detail+1;
$model=new DetailProduksi;
if(isset($_POST['DetailProduksi'])) {
$model->attributes=$_POST['DetailProduksi'];
$model->status=1;
$model->id_detail=$next;
$hargatotal=0;
$detspk=SPK::model()->find(array('condition'=>"id_spk=".$model-
>id_spk));
$detspk->jumlah_selesai=$detspk->jumlah_selesai+$model->jumlah;
if($detspk->jumlah_selesai>0)
$detspk->status=2;
if($_POST['fix']==1) {
$detspk->status=3;
}
$detspk->save();
if($model->save()) {
if(isset($_POST['countBahan']))
Segmen Program 0.14. Create Detail Produksi (Sambungan)
{
$tempcount=$_POST['countBahan'];
for($i=0;$i<$tempcount;$i++) {
if(!empty($_POST['id_bahan'][$i])) {
$detailbahan = new BahanAktual;
$detailbahan->id_bahan = $_POST['id_bahan'][$i];
$detailbahan->id_spk = $model->id_spk;
$detailbahan->jumlah = $_POST['jumlah_bahan'][$i];
$temp=KartuStok::model()-
>find(array('condition'=>"id_bahan=".$_POST['id_bahan'][$i]."and tanggal<='".$model->tanggal."'",'order'=>"nomor DESC"));
$tempcount2=count($temp);
if($tempcount2==0) {
$nomor=1;
$stokreal=0;
$averagereal=0;
} else {
$nomor=$temp->nomor+1;
$stokreal=$temp->stok;
$averagereal=$temp->harga_average;
}
if(!empty($_POST['jumlah_bahan'][$i])&&$_POST['jumlah_bahan'][$i]>
0) {
$kartustok = new KartuStok;
$kartustok->tanggal=$model->tanggal;
$kartustok->id_bahan=$_POST['id_bahan'][$i];
$kartustok->jumlah_masuk=0;
$kartustok->jumlah_keluar=$_POST['jumlah_bahan'][$i];
$kartustok->stok=$stokreal-$_POST['jumlah_bahan'][$i];
$kartustok->harga=$averagereal;
$kartustok->harga_average=$averagereal;
$kartustok->keterangan="Digunakan untuk SPK ".$model->id_spk." dan No detail produksi ".$model->id_detail;
$kartustok->nomor=$nomor;
$kartustok->status=3;
$kartustok->id_detail=$model->id_detail;
$kartustok->id_spk=$model->id_spk;
$kartustok->save();
}
$temp2=KartuStok::model()-
>findAll(array('condition'=>"id_bahan=".$_POST['id_bahan'][$i]."
and tanggal>'".$model->tanggal."'",'order'=>"nomor DESC"));
foreach($temp2 as $detail) {
$temp3=KartuStok::model()-
>find(array('condition'=>"id_bahan=".$_POST['id_bahan'][$i]." and tanggal>'".$model->tanggal."' and nomor=".$detail->nomor));
if(!empty($temp3)) {
$temp3->nomor++;
Segmen Program 0.15. Create Detail Produksi (Sambungan)
$temp3->save();
} }
$detailbahan->harga_satuan = $averagereal;
$detailbahan->total = $detailbahan->jumlah*$detailbahan-
>harga_satuan;
$detailbahan->id_detail = $model->id_detail;
$detailbahan->save();
$hargatotal+=$detailbahan->total;
} } }
if(isset($_POST['countMesin'])) {
$tempcount2=$_POST['countMesin'];
for($i=0;$i<$tempcount2;$i++) {
if(!empty($_POST['id_mesin'][$i])) {
$detailmesin = new MesinAktual;
$detailmesin->id_mesin = $_POST['id_mesin'][$i];
$detailmesin->id_spk = $model->id_spk;
$detailmesin->jumlah = $_POST['jumlah_mesin'][$i];
$temp=Mesin::model()-
>find(array('condition'=>"id_mesin=".$_POST['id_mesin'][$i]));
$detailmesin->harga_satuan=$temp->ongkos_pakai;
$detailmesin->total = $detailmesin->jumlah*$detailmesin-
>harga_satuan;
$detailmesin->id_detail = $model->id_detail;
$detailmesin->save();
$hargatotal+=$detailmesin->total;
} } }
if(isset($_POST['countPegawai'])) {
$tempcount3=$_POST['countPegawai'];
for($i=0;$i<$tempcount3;$i++) {
if(!empty($_POST['id_pegawai'][$i])) {
$detailpegawai = new PegawaiAktual;
$detailpegawai->id_pegawai = $_POST['id_pegawai'][$i];
$detailpegawai->id_spk = $model->id_spk;
$detailpegawai->jumlah = $_POST['jumlah_pegawai'][$i];
$temp=Users::model()-
>find(array('condition'=>"username='".$_POST['id_pegawai'][$i]."'"
));
$detailpegawai->harga_satuan = $temp->gaji;
$detailpegawai->total = $detailpegawai-
>harga_satuan*$detailpegawai->jumlah;
$detailpegawai->id_detail = $model->id_detail;
$detailpegawai->save();
$hargatotal+=$detailpegawai->total;
} } }
Segmen Program 0.16. Create Detail Produksi (Sambungan)
$temp=KartuStok::model()-
>find(array('condition'=>"id_produk=".$_POST['id_produk']." and tanggal<='".$model->tanggal."'",'order'=>"nomor DESC"));
$tempcount2=count($temp);
if($tempcount2==0) {
$nomor=1;
$stokreal=0;
$averagereal=0;
} else {
$nomor=$temp->nomor+1;
$stokreal=$temp->stok;
$averagereal=$temp->harga_average;
}
if($model->jumlah>0) {
$kartustok = new KartuStok;
$kartustok->tanggal=$model->tanggal;
$kartustok->id_produk=$_POST['id_produk'];
$kartustok->jumlah_masuk=$model->jumlah;
$kartustok->jumlah_keluar=0;
$kartustok->stok=$stokreal+$model->jumlah;
$kartustok->harga=$hargatotal/$model->jumlah;
$kartustok->harga_average=(($averagereal*$stokreal)+($model-
>jumlah*$kartustok->harga))/($model->jumlah+$stokreal);
$kartustok->keterangan="Dari SPK ".$model->id_spk." dan No detail produksi ".$model->id_detail;
$kartustok->nomor=$nomor;
$kartustok->status=5;
$kartustok->id_detail=$model->id_detail;
$kartustok->id_spk=$model->id_spk;
$kartustok->save();
}
$temp2=KartuStok::model()-
>findAll(array('condition'=>"id_produk=".$_POST['id_produk']." and tanggal>'".$model->tanggal."'",'order'=>"nomor DESC"));
foreach($temp2 as $detail) {
$temp3=KartuStok::model()-
>find(array('condition'=>"id_produk=".$_POST['id_produk']." and tanggal>'".$model->tanggal."' and nomor=".$detail->nomor));
if(!empty($temp3)) {
$temp3->nomor++;
$temp3->save();
} }
BackDate::KartuStok();
$this->redirect(array('view','id'=>$model->id_detail));
} }
$this->render('create',array(
'model'=>$model, 'next'=>$next, ));}
4.4 Implementasi Proses Penjualan
Pada bagian ini ditampilkan contoh segmen transaksi penjualan yaitu proses pembuatan surat jalan dan nota penjualan. Proses penjualan dimulai dari pembuatan SO berdasarkan pesanan dari pelanggan lalu dilakukan produksi sesuai pesanan pelanggan. Setelah produksi selesai dilakukan pengiriman dan pembuatan nota penjualan kepada pelanggan. Setelah itu dapat dilakukan retur penjualan berdasarkan ketentuan yang berlaku serta penerimaan piutang dari pelanggan.
4.4.1 Create Surat Jalan
Proses pembuatan surat jalan dimulai dari memilih surat perintah kerja yang telah selesai di produksi. Proses pembuatan surat jalan dapat dilihat pada segmen Program 4.17, 4.18 dan 4.19.
Segmen Program 0.17. Create Surat Jalan
public function actionCreate() {
$temp=SuratJalan::model()->find(array('order'=>"no_sj desc"));
$tempcount=count($temp);
if($tempcount==0)
$next=1;
else
$next=$temp->no_sj+1;
$model=new SuratJalan;
if(isset($_POST['SuratJalan'])) {
$model->attributes=$_POST['SuratJalan'];
$model->no_sj=$next;
$model->kode="SJ-".$model->no_sj;
$model->status=1;
$count=$_POST['coun'];
for($i=0;$i<$count;$i++) {
if(!empty($_POST['id_pelanggan'][$i])) {
$model->id_pelanggan=$_POST['id_pelanggan'][$i];
$model->nama_pelanggan=$_POST['nama_pelanggan'][$i];
} }
if($model->save()) {
$count=$_POST['coun'];
for($i=0;$i<$count;$i++) {
if(!empty($_POST['id_pelanggan'][$i])) {
$detspk=SPK::model()-
>find(array('condition'=>"id_spk=".$_POST['id_spk'][$i]));
$detspk->no_sj=$model->no_sj;
$detspk->jumlah_terima=$detspk->jumlah_selesai;
Segmen Program 0.18. Create Surat Jalan (Sambungan)
$detspk->status=4;
$kirim=$detspk->jumlah_selesai;
$detspk->save();
$hargatotal=0;
$iddetail=DetailProduksi::model()-
>findAll(array('condition'=>"id_spk=".$_POST['id_spk'][$i]."and status=1"));
foreach($iddetail as $details) {
$bahanak=BahanAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
$pegawaiak=PegawaiAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
$mesinak=MesinAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
foreach($bahanak as $detail) {
$hargatotal+=$detail->total;
}
foreach($mesinak as $detail) {
$hargatotal+=$detail->total;
}
foreach($pegawaiak as $detail) {
$hargatotal+=$detail->total;
} }
$temp=KartuStok::model()-
>find(array('condition'=>"id_produk=".$_POST['id_produk'][$i]."and tanggal<='".$model->tanggal."'",'order'=>"nomor DESC"));
$tempcount2=count($temp);
if($tempcount2==0) {
$nomor=1;
$stokreal=0;
$averagereal=0;
} else {
$nomor=$temp->nomor+1;
$stokreal=$temp->stok;
$averagereal=$temp->harga_average;
}
$kartustok=new KartuStok;
$kartustok->tanggal=$model->tanggal;
$kartustok->id_produk=$_POST['id_produk'][$i];
$kartustok->jumlah_masuk=0;
$kartustok->jumlah_keluar=$kirim;
$kartustok->stok=$stokreal-$kirim;
$kartustok->harga=$averagereal;
if($kartustok->stok!=0)
$kartustok->harga_average=(($averagereal*$stokreal)- ($kirim*$kartustok->harga))/($stokreal-$kirim);
else
$kartustok->harga_average=0;
$kartustok->keterangan="Digunakan untuk SPK
Segmen Program 0.19. Create Surat Jalan (Sambungan)
".$_POST['id_spk'][$i]." dan Pengiriman ".$model->no_sj;
$kartustok->nomor=$nomor;
$kartustok->status=8;
$kartustok->id_spk=$_POST['id_spk'][$i];
$kartustok->no_sj=$model->no_sj;
$kartustok->save();
$temp2=KartuStok::model()-
>findAll(array('condition'=>"id_produk=".$_POST['id_produk'][$i]."
and tanggal>'".$model->tanggal."'",'order'=>"nomor DESC"));
foreach($temp2 as $detail) {
$temp3=KartuStok::model()-
>find(array('condition'=>"id_produk=".$_POST['id_produk'][$i]."
and tanggal>'".$model->tanggal."' and nomor=".$detail->nomor));
if(!empty($temp3)) {
$temp3->nomor++;
$temp3->save();
} } } }
BackDate::KartuStok();
$this->redirect(array('view','id'=>$model->no_sj));
} }
$this->render('create',array(
'model'=>$model, 'next'=>$next, ));
}
4.4.2 Create Nota Penjualan
Proses pembuatan nota penjualan dilakukan setelah barang yang dikirim telah diterima dengan baik oleh pelanggan. Proses pembuatan nota penjualan dapat dilihat pada segmen Program 4.20, 4.21, 4.22 dan 4.23.
Segmen Program 0.20. Create Nota Penjualan
public function actionCreate() {
$temp=NotaPenjualan::model()->find(array('order'=>"no_penjualan desc"));
$tempcount=count($temp);
if($tempcount==0)
$next=1;
else
$next=$temp->no_penjualan+1;
$model=new NotaPenjualan;
if(isset($_POST['NotaPenjualan'])) {
$model->attributes=$_POST['NotaPenjualan'];
$model->no_penjualan=$next;
Segmen Program 0.21. Create Nota Penjualan (Sambungan)
$model->kode="NJ-".$model->no_penjualan;
$model->status=1;
$model->id_pelanggan=$_POST['id_pel'];
$model->nama_pelanggan=$_POST['nama_pel'];
$tempo=Pelanggan::model()-
>find(array('condition'=>"id_pelanggan=".$model->id_pelanggan));
$newDate = date('Y-m-d', strtotime($model->tanggal.'+'.$tempo-
>tempo_bayar.' days'));
$model->jatuh_tempo=$newDate;
if($model->save()) {
$statussj=SuratJalan::model()-
>find(array('condition'=>"no_sj=".$model->no_sj));
$statussj->status=2;
$statussj->save();
$temp=KartuPiutang::model()-
>find(array('condition'=>"id_pelanggan=".$_POST['id_pel'],'order'=
>"nomor DESC"));
$tempcount2=count($temp);
if($tempcount2==0) {
$nomor=1;
$stokreal=0;
} else {
$nomor=$temp->nomor+1;
$stokreal=$temp->saldo;
}
$piutang=new KartuPiutang;
$piutang->tanggal=$model->tanggal;
$piutang->id_pelanggan=$_POST['id_pel'];
$piutang->id_piutang=$model->kode;
$piutang->jumlah_masuk=$model->harga_total;
$piutang->jumlah_keluar=0;
$piutang->saldo=$stokreal+$model->harga_total;
$piutang->nomor=$nomor;
$piutang->save();
$count=$_POST['coun'];
for($i=0;$i<$count;$i++) {
if(!empty($_POST['id_spk'][$i])) {
$detspk=SPK::model()-
>find(array('condition'=>"id_spk=".$_POST['id_spk'][$i]));
$detspk->status=5;
$detspk->jumlah_terima=$detspk->jumlah_selesai-
$_POST['kembali_spk'][$i];
$detspk->save();
} }
for($i=0;$i<$count;$i++) {
if(!empty($_POST['id_spk'][$i]) && $_POST['kembali_spk'][$i]>0) {
$hargatotal=0;
$iddetail=DetailProduksi::model
Segmen Program 0.22. Create Nota Penjualan (Sambungan)
()->findAll(array('condition'=>"id_spk=".$_POST['id_spk'][$i]."and status=1"));
foreach($iddetail as $details) {
$bahanak=BahanAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
$pegawaiak=PegawaiAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
$mesinak=MesinAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
foreach($bahanak as $detail) {
$hargatotal+=$detail->total;
}
foreach($mesinak as $detail) {
$hargatotal+=$detail->total;
}
foreach($pegawaiak as $detail) {
$hargatotal+=$detail->total;
} }
$temp=KartuStok::model()-
>find(array('condition'=>"id_produk=".$_POST['id_produk'][$i],'ord er'=>"nomor DESC"));
$tempcount2=count($temp);
if($tempcount2==0) {
$nomor=1;
$stokreal=0;
$averagereal=0;
} else {
$nomor=$temp->nomor+1;
$stokreal=$temp->stok;
$averagereal=$temp->harga_average;
}
$kembalibarang=new KartuStok;
$kembalibarang->tanggal=$model->tanggal;
$kembalibarang->id_produk=$_POST['id_produk'][$i];
$kembalibarang->jumlah_masuk=$_POST['kembali_spk'][$i];
$kembalibarang->jumlah_keluar=0;
$kembalibarang->stok=$stokreal+$_POST['kembali_spk'][$i];
$kembalibarang->harga=$hargatotal/$_POST['jumlah_bahan'][$i];
if($kembalibarang->stok!=0)
$kembalibarang-
>harga_average=(($averagereal*$stokreal)+($_POST['kembali_spk'][$i ]*$kembalibarang->harga))/($stokreal+$_POST['kembali_spk'][$i]);
else
$kembalibarang->harga_average=0;
$kembalibarang->keterangan="Pengembalian SPK
".$_POST['id_spk'][$i]." dan Pengiriman ".$_POST['no_sj'][$i];
$kembalibarang->nomor=$nomor;
$kembalibarang->save();
}
Segmen Program 0.23. Create Nota Penjualan (Sambungan)
}
$pel=Pelanggan::model()->findAll();
foreach($pel as $detail) {
$kartupiutang=KartuPiutang::model()-
>findAll(array('condition'=>'id_pelanggan='.$detail-
>id_pelanggan,'order'=>'tanggal,id_kartu'));
$nomor=1;
foreach($kartupiutang as $details) {
$piutang=KartuPiutang::model()-
>find(array('condition'=>'id_kartu='.$details->id_kartu));
$piutang->nomor=$nomor;
$nomor++;
$piutang->save();
} }
$pel1=Pelanggan::model()->findAll();
foreach($pel1 as $detail) {
$kartupiutang1=KartuPiutang::model()-
>findAll(array('condition'=>'id_pelanggan='.$detail-
>id_pelanggan,'order'=>'id_pelanggan,nomor'));
foreach($kartupiutang1 as $details) {
$prev=$details->nomor-1;
$piutang=KartuPiutang::model()-
>find(array('condition'=>'nomor='.$details->nomor));
$piutangprev=KartuPiutang::model()-
>find(array('condition'=>'nomor='.$prev.'and id_pelanggan='.$piutang->id_pelanggan));
if(!empty($piutangprev))
$piutang->saldo=$piutangprev->saldo+$piutang->jumlah_masuk-
$piutang->jumlah_keluar;
else
$piutang->saldo=$piutang->jumlah_masuk-$piutang->jumlah_keluar;
$piutang->save();
} }
$this->redirect(array('view','id'=>$model->no_penjualan));
} }
$this->render('create',array(
'model'=>$model, 'next'=>$next, ));
}
4.5 Implementasi Pembuatan Laporan
Pada bagian ini ditampilkan beberapa contoh pembuatan laporan pada
sistem. Laporan yang dijelaskan antara lain laporan WIP dan laporan HPP.
4.5.1 Create Laporan HPP
Proses pembuatan laporan hpp dimulai dengan masukan dari pengguna berupa tanggal baru kemudian ditampilkan laporan HPP dari SPK yang telah selesai diproduksi. Proses pembuatan Laporan HPP dapat dilihat pada segmen Program 4.24. dan 4.25.
Segmen Program 0.24. Create Laporan HPP
public function actionLaporanproduksi() {
if(isset($_POST['tanggal_awal']) && $_POST['tanggal_awal']!='' &&
$_POST['tanggal_akhir']!='') {
$spk=SPK::model()->findAll(array('condition'=>"status>2 and tanggal>='".$_POST['tanggal_awal']."' and tanggal<='".$_POST['tanggal_akhir']."'",'order'=>"id_spk"));
$i=0;
$pro=array();
foreach($spk as $detail) {
$produk=Produk::model()-
>find(array('condition'=>"id_produk=".$detail->id_produk));
$pro[$i]=$produk->nama_produk." ".$produk->tipe." (".$produk-
>panjang."x".$produk->lebar."x".$produk->tinggi.") Model:".$produk->model;
$i++;
}
$hpp=array();
$coun=0;
$tgl=array();
$jual=array();
foreach($spk as $detail) {
$hpp[$coun]=0;
$jual[$coun]=0;
$harga=DetailProduksi::model()-
>findAll(array('condition'=>"id_spk=".$detail->id_spk."and status=1"));
foreach($harga as $details) {
$hppbahan=BahanAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
foreach($hppbahan as $dets) {
$hpp[$coun]+=$dets->total;
}
$hppmesin=MesinAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
foreach($hppmesin as $dets) {
$hpp[$coun]+=$dets->total;
}
$hpppegawai=PegawaiAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
foreach($hpppegawai as $dets)
Segmen Program 0.25. Create Laporan HPP (Sambungan)
{
$hpp[$coun]+=$dets->total;
} }
$hpp[$coun]/=$detail->jumlah_selesai;
$dettgl=DetailProduksi::model()-
>find(array('condition'=>"id_spk=".$detail->id_spk."and status=1",'order'=>"tanggal desc"));
$tgl[$coun]=$dettgl->tanggal;
$detso=DetailSo::model()-
>find(array('condition'=>"id_so=".$detail->id_so."and id_produk=".$detail->id_produk));
if(!empty($detso))
$jual[$coun]=$detso->harga_satuan;
$coun++;
}
$this->render('laporanproduksi',array(
'coun'=>$coun, 'hpp'=>$hpp, 'spk'=>$spk, 'tgl'=>$tgl, 'jual'=>$jual,
'tglawal'=>$_POST['tanggal_awal'], 'tglakhir'=>$_POST['tanggal_akhir'], 'pro'=>$pro,
));
} else {
$this->render('_laporanproduksi');
} }
4.5.2 Create Laporan WIP
Pada Laporan WIP ditampilkan semua SPK yang sedang diproduksi untuk menampilkan jumlah WIP saat ini. Proses pembuatan Laporan WIP dapat dilihat pada segmen Program 4.26. dan 4.27.
Segmen Program 0.26. Create Laporan WIP
public function actionLaporanwip() {
$wip=SPK::model()-
>findAll(array('condition'=>"status=2",'order'=>"id_spk"));
$hargatotal=array();
$fin=array();
$nama=array();
$coun=0;
foreach($wip as $detail) {
$fin[$coun]=0;
$hargatotal[$coun]=0;
$detspk=DetailProduksi::model()
Segmen Program 0.27. Create Laporan WIP (Sambungan)
->findAll(array('condition'=>"id_spk=".$detail->id_spk."and status=1"));
foreach($detspk as $details) {
$bahanak=BahanAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
$pegawaiak=PegawaiAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
$mesinak=MesinAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
foreach($bahanak as $detail1) {
$hargatotal[$coun]+=$detail1->total;
}
foreach($mesinak as $detail1) {
$hargatotal[$coun]+=$detail1->total;
}
foreach($pegawaiak as $detail1) {
$hargatotal[$coun]+=$detail1->total;
}
$stok=KartuStok::model()-
>find(array('condition'=>"id_detail=".$details->id_detail."and jumlah_keluar=0"));
if(!empty($stok))
$fin[$coun]=$stok->harga;
}
$namabhn=Produk::model()-
>find(array('condition'=>"id_produk=".$detail->id_produk));
$nama[$coun]=$namabhn->nama_produk." ".$namabhn->tipe."
(".$namabhn->panjang."x".$namabhn->lebar."x".$namabhn->tinggi.") Model:".$namabhn->model;
$coun++;
}
$this->render('laporanwip',array(
'wip'=>$wip,
'hargatotal'=>$hargatotal, 'coun'=>$coun,
'fin'=>$fin, 'nama'=>$nama, ));
}
4.6 Implementasi Fungsi
Pada bagian ini ditampilkan beberapa contoh penggunaan fungsi dalam
aplikasi yaitu fungsi Ajax autocomplete dan fungsi backdate.
4.6.1 Fungsi Ajax Autocomplete
Dalam fungsi ini menjalankan pencarian database berdasarkan input dari user secara realtime dan ditampilkan pada form program. Fungsi Ajax Autocomplete dapat dilihat pada segmen Program 4.28.
Segmen Program 0.28. Fungsi Ajax Autocomplete
public function actionAjaxGetKode() {
$request=trim($_GET['term']);
if($request!='') {
$model=BahanBaku::model()->findAll(array("condition"=>"
LOWER(nama_bahan) like LOWER('%$request%') and status=1"));
$data=array();
foreach($model as $get) {
$temp=KartuStok::model()-
>find(array('condition'=>"id_bahan=".$get-
>id_bahan,'order'=>"nomor DESC"));
if(count($temp)!=0)
$stokreal=$temp->stok;
else
$stokreal=0;
array_push($data,array(
"label" => $get->nama_bahan." [".$get->tipe."] (".$get-
>panjang."x".$get->lebar.")",
"value" => $get->nama_bahan." [".$get->tipe."] (".$get-
>panjang."x".$get->lebar.")",
"id_bahan" => $get->id_bahan,
"nama_bahan" => $get->nama_bahan,
"kode" => $get->kode,
"satuan" => $get->satuan,
"stok"=>$stokreal ));
}
$this->layout='empty';
echo json_encode($data);
} }
4.6.2 Fungsi Backdate
Fungsi Backdate ialah suatu fungsi yang digunakan untuk melakukan proses perhitungan ulang pada tabel kartu stok. Fungsi Backdate dapat dilihat pada segmen program 4.29. hingga segmen program 4.37.
Segmen Program 0.29. Fungsi Ajax Backdate
$totalbahan=BahanBaku::model()->findAll();
foreach($totalbahan as $bahans) {
Segmen Program 0.30. Fungsi Ajax Backdate (Sambungan)
$nmr=1;
$urutbahan=KartuStok::model()-
>findAll(array('condition'=>"id_bahan=".$bahans-
>id_bahan,'order'=>"tanggal,id_stok"));
foreach($urutbahan as $urut) {
$ganti=KartuStok::model()-
>find(array('condition'=>"id_bahan=".$urut->id_bahan."and id_stok=".$urut->id_stok));
$ganti->nomor=$nmr;
$ganti->save();
$nmr++;
} }
$totalproduk=Produk::model()->findAll();
foreach($totalproduk as $produks) {
$nmr=1;
$urutproduk=KartuStok::model()-
>findAll(array('condition'=>"id_produk=".$produks-
>id_produk,'order'=>"tanggal,id_stok"));
foreach($urutproduk as $urut) {
$ganti=KartuStok::model()-
>find(array('condition'=>"id_produk=".$urut->id_produk."and id_stok=".$urut->id_stok));
$ganti->nomor=$nmr;
$ganti->save();
$nmr++;
} }
$temp3=KartuStok::model()-
>findAll(array('order'=>"tanggal,nomor"));
foreach($temp3 as $detail) {
if(!empty($detail->id_bahan)) {
$nmrfind=$detail->nomor-1;
$stok=KartuStok::model()-
>find(array('condition'=>"id_bahan=".$detail->id_bahan."and nomor=".$nmrfind));
$kartustok1=KartuStok::model()-
>find(array('condition'=>"id_bahan=".$detail->id_bahan."and nomor=".$detail->nomor));
}
else if(!empty($detail->id_produk)) {
$nmrfind=$detail->nomor-1;
$stok=KartuStok::model()-
>find(array('condition'=>"id_produk=".$detail->id_produk."and nomor=".$nmrfind));
$kartustok1=KartuStok::model()-
>find(array('condition'=>"id_produk=".$detail->id_produk."and nomor=".$detail->nomor));
}
if($detail->status==1) {
Segmen Program 0.31. Fungsi Ajax Backdate (Sambungan)
if(!empty($stok)) {
$kartustok1->stok=$stok->stok+$kartustok1-
>jumlah_masuk;if($kartustok1->stok!=0)
$kartustok1->harga_average=($stok->stok*$stok-
>harga_average+$kartustok1->jumlah_masuk*$kartustok1-
>harga)/($kartustok1->stok);
} else {
$kartustok1->stok=$kartustok1->jumlah_masuk-$kartustok1-
>jumlah_keluar;
}
$kartustok1->save();
}
else if($detail->status==2) {
if(!empty($stok)) {
$kartustok1->stok=$stok->stok-$kartustok1->jumlah_keluar;
if($kartustok1->stok!=0)
$kartustok1->harga_average=($stok->stok*$stok->harga_average-
$kartustok1->jumlah_keluar*$kartustok1->harga)/($kartustok1-
>stok);
} else {
$kartustok1->stok=$kartustok1->jumlah_masuk-$kartustok1-
>jumlah_keluar;
}
$kartustok1->save();
}
else if($detail->status==3) {
if(!empty($stok)) {
$kartustok1->stok=$stok->stok-$kartustok1->jumlah_keluar;
$kartustok1->harga=$stok->harga_average;
if($kartustok1->stok!=0)
$kartustok1->harga_average=$kartustok1->harga;
$gantiaktual=BahanAktual::model()-
>find(array('condition'=>"id_detail=".$detail->id_detail."and id_bahan=".$detail->id_bahan));
$gantiaktual->harga_satuan=$kartustok1->harga;
$gantiaktual->total=$gantiaktual->harga_satuan*$gantiaktual-
>jumlah;
$gantiaktual->save();
} else {
$kartustok1->stok=$kartustok1->jumlah_masuk-$kartustok1-
>jumlah_keluar;
}
$kartustok1->save();
}
else if($detail->status==4) {
Segmen Program 0.32. Fungsi Ajax Backdate (Sambungan)
$detbahan=BahanAktual::model()-
>findAll(array('condition'=>"id_detail=".$detail->id_detail));
$counb=0;
foreach($detbahan as $detb) {
$counb+=$detb->total;
}
if(!empty($stok)) {
$kartustok1->stok=$stok->stok+$kartustok1->jumlah_masuk;
$kartustok1->harga=$counb/$kartustok1->jumlah_masuk;
if($kartustok1->stok!=0)
$kartustok1->harga_average=($stok->stok*$stok-
>harga_average+$kartustok1->jumlah_masuk*$kartustok1-
>harga)/($kartustok1->stok);
} else {
$kartustok1->stok=$kartustok1->jumlah_masuk-$kartustok1-
>jumlah_keluar;
}
$kartustok1->save();
}
else if($detail->status==5) {
$lihatspk=SPK::model()->find(array('condition'=>"id_spk=".$detail-
>id_spk));
if($lihatspk->status>2) {
$hargatotal=0;
$iddetail=DetailProduksi::model()-
>findAll(array('condition'=>"id_spk=".$detail->id_spk."and status=1"));
foreach($iddetail as $details) {
$bahanak=BahanAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
$pegawaiak=PegawaiAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail);
$mesinak=MesinAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
foreach($bahanak as $detail) {
$hargatotal+=$detail->total;
}
foreach($mesinak as $detail) {
$hargatotal+=$detail->total;
}
foreach($pegawaiak as $detail) {
$hargatotal+=$detail->total;
} }
if(!empty($stok)) {
$kartustok1->stok=$stok->stok+$kartustok1->jumlah_masuk;
Segmen Program 0.33. Fungsi Ajax Backdate (Sambungan)
$kartustok1->harga=$hargatotal/$lihatspk->jumlah_selesai;
if($kartustok1->stok!=0)
$kartustok1->harga_average=($stok->stok*$stok-
>harga_average+$kartustok1->jumlah_masuk*$kartustok1-
>harga)/($kartustok1->stok);
} else {
$kartustok1->stok=$kartustok1->jumlah_masuk;
$kartustok1->harga=$hargatotal/$lihatspk->jumlah_selesai;
if($kartustok1->stok!=0)
$kartustok1->harga_average=$kartustok1->harga;
}
$kartustok1->save();
} else {
$hargabom=0;
$idbom=Produk::model()-
>find(array('condition'=>"id_produk=".$detail->id_produk));
$bombahan=DetailBahan::model()-
>findAll(array('condition'=>"id_bom=".$idbom->id_bom));
foreach($bombahan as $detail) {
$hargabahan=KartuStok::model()-
>find(array('condition'=>"id_bahan=".$detail-
>id_bahan,'order'=>"nomor desc"));
$hargabom+=$detail->jumlah*$hargabahan->harga_average;
}
$bompegawai=DetailPegawai::model()-
>findAll(array('condition'=>"id_bom=".$idbom->id_bom));
foreach($bompegawai as $detail) {
$hargapegawai=Users::model()-
>find(array('condition'=>"username='".$detail->id_pegawai."'"));
$hargabom+=$detail->jumlah*$hargapegawai->gaji;
}
$bommesin=DetailMesin::model()-
>findAll(array('condition'=>"id_bom=".$idbom->id_bom));
foreach($bommesin as $detail) {
$hargamesin=Mesin::model()-
>find(array('condition'=>"id_mesin=".$detail->id_mesin));
$hargabom+=$detail->jumlah*$hargamesin->ongkos_pakai;
}
if(!empty($stok)) {
$kartustok1->stok=$stok->stok+$kartustok1->jumlah_masuk;
$kartustok1->harga=$hargabom;
if($kartustok1->stok!=0)
$kartustok1->harga_average=($stok->stok*$stok-
>harga_average+$kartustok1->jumlah_masuk*$kartustok1-
>harga)/($kartustok1->stok);
} else {
$kartustok1->stok=$kartustok1->jumlah_masuk;
Segmen Program 0.34. Fungsi Ajax Backdate (Sambungan)
$kartustok1->harga=$hargabom;
if($kartustok1->stok!=0)
$kartustok1->harga_average=$kartustok1->harga;
}
$kartustok1->save();
} }
else if($detail->status==6) {
$lihatspk=SPK::model()->find(array('condition'=>"id_spk=".$detail-
>id_spk));
if($lihatspk->status>2) {
$hargatotal=0;
$iddetail=DetailProduksi::model()-
>findAll(array('condition'=>"id_spk=".$detail->id_spk."and status=1"));
foreach($iddetail as $details) {
$bahanak=BahanAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
$pegawaiak=PegawaiAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
$mesinak=MesinAktual::model()-
>findAll(array('condition'=>"id_detail=".$details->id_detail));
foreach($bahanak as $detail) {
$hargatotal+=$detail->total;
}
foreach($mesinak as $detail) {
$hargatotal+=$detail->total;
}
foreach($pegawaiak as $detail) {
$hargatotal+=$detail->total;
} }
if(!empty($stok)) {
$kartustok1->stok=$stok->stok-$kartustok1->jumlah_keluar;
$kartustok1->harga=$hargatotal/$lihatspk->jumlah_selesai;
if($kartustok1->stok!=0)
$kartustok1->harga_average=($stok->stok*$stok->harga_average-
$kartustok1->jumlah_keluar*$kartustok1->harga)/($kartustok1-
>stok);
} else {
$kartustok1->stok=$kartustok1->jumlah_keluar;
$kartustok1->harga=$hargatotal/$lihatspk->jumlah_selesai;
if($kartustok1->stok!=0)
$kartustok1->harga_average=$kartustok1->harga;
}
$kartustok1->save();
} else
Segmen Program 0.35. Fungsi Ajax Backdate (Sambungan)
{
$hargabom=0;
$idbom=Produk::model()-
>find(array('condition'=>"id_produk=".$detail->id_produk));
$bombahan=DetailBahan::model()-
>findAll(array('condition'=>"id_bom=".$idbom->id_bom));
foreach($bombahan as $detail) {
$hargabahan=KartuStok::model()-
>find(array('condition'=>"id_bahan=".$detail->
id_bahan,'order'=>"nomor desc"));
$hargabom+=$detail->jumlah*$hargabahan->harga_average;
}
$bompegawai=DetailPegawai::model()-
>findAll(array('condition'=>"id_bom=".$idbom->id_bom));
foreach($bompegawai as $detail) {
$hargapegawai=Users::model()-
>find(array('condition'=>"username='".$detail->id_pegawai."'"));
$hargabom+=$detail->jumlah*$hargapegawai->gaji;
}
$bommesin=DetailMesin::model()-
>findAll(array('condition'=>"id_bom=".$idbom->id_bom));
foreach($bommesin as $detail) {
$hargamesin=Mesin::model()-
>find(array('condition'=>"id_mesin=".$detail->id_mesin));
$hargabom+=$detail->jumlah*$hargamesin->ongkos_pakai;
}
if(!empty($stok)) {
$kartustok1->stok=$stok->stok-$kartustok1->jumlah_keluar;
$kartustok1->harga=$hargabom;
if($kartustok1->stok!=0)
$kartustok1->harga_average=($stok->stok*$stok->harga_average-
$kartustok1->jumlah_keluar*$kartustok1->harga)/($kartustok1-
>stok);
} else {
$kartustok1->stok=$kartustok1->jumlah_keluar;
$kartustok1->harga=$hargabom;
if($kartustok1->stok!=0)
$kartustok1->harga_average=$kartustok1->harga;
}
$kartustok1->save();
} }
else if($detail->status==7) {
if(!empty($stok)) {
$kartustok1->stok=$stok->stok-$kartustok1-
>jumlah_keluar+$kartustok1->jumlah_masuk;
if($kartustok1->stok!=0)
$kartustok1->harga_average=($stok->stok*$stok->harga_average-
$kartustok1->jumlah_keluar*$kartustok1->harga+$kartustok;
Segmen Program 0.36. Fungsi Ajax Backdate (Sambungan)
->jumlah_masuk*$kartustok1->harga)/($kartustok1->stok);
$kartustok1->save();
} else {
$kartustok1->stok=$kartustok1->jumlah_masuk-$kartustok1-
>jumlah_keluar;
} }
else if($detail->status==8) {
if(!empty($stok)) {
$kartustok1->stok=$stok->stok-$kartustok1->jumlah_keluar;
$kartustok1->harga=$stok->harga_average;
if($kartustok1->stok!=0)
$kartustok1->harga_average=$kartustok1->harga;
$kartustok1->save();
} else {
$kartustok1->stok=$kartustok1->jumlah_masuk-$kartustok1-
>jumlah_keluar;
} }
else if($detail->status==9) {
if(!empty($stok)) {
$kartustok1->stok=$stok->stok-$kartustok1->jumlah_keluar;
if($kartustok1->stok!=0)
$kartustok1->harga_average=($stok->stok*$stok->harga_average-
$kartustok1->jumlah_keluar*$kartustok1->harga)/($kartustok1-
>stok);
} else {
$kartustok1->stok=$kartustok1->jumlah_masuk-$kartustok1-
>jumlah_keluar;
}
$kartustok1->save();
}
else if($detail->status==10) {
if(!empty($stok)) {
$kartustok1->stok=$stok->stok+$kartustok1->jumlah_masuk;
$hargamsk=KartuStok::model()-
>find(array('condition'=>"id_spk=".$kartustok1->id_spk."and no_sj=".$kartustok1->no_sj."and status=8"));
$kartustok1->harga=$hargamsk->harga;
if($kartustok1->stok!=0)
$kartustok1->harga_average=($stok->stok*$stok-
>harga_average+$kartustok1->jumlah_masuk*$kartustok1-
>harga)/($kartustok1->stok);
} else
Segmen Program 0.37. Fungsi Ajax Backdate (Sambungan)
{
$kartustok1->stok=$kartustok1->jumlah_masuk-$kartustok1-
>jumlah_keluar;
}
$kartustok1->save();
} }