/** * Simpan pembelian: * 1. update status dari draft menjadi pembelian. * 2. update stock. * 3. update harga jual & rrp * 4. create hutang. * 5. update stok minus. BELUM !! * @return boolean True jika proses berhasil * @throws Exception */ public function simpanPembelian() { $this->scenario = 'simpanPembelian'; $transaction = $this->dbConnection->beginTransaction(); /* Untuk jumlah pembelian yang sangat banyak, misal: init data */ if ($this->profil_id == 1) { ini_set('memory_limit', '-1'); set_time_limit(0); } try { if ($this->save()) { /* * Ambil data barang, dan data inventory terakhir/terbaru nya * Jika inventory tidak ada, maka ib.* nilainya null */ $details = PembelianDetail::model()->findAll('pembelian_id=:pembelianId', array(':pembelianId' => $this->id)); foreach ($details as $detail) { /* Untuk setiap barang yang dibeli */ /* Sesuaikan inventory */ $inventoryBalance = new InventoryBalance(); $inventoryBalance->beli(InventoryBalance::ASAL_PEMBELIAN, $this->nomor, $detail->id, $detail->barang_id, $detail->harga_beli, $detail->qty); /* * Update harga jual */ if (!HargaJual::model()->updateHarga($detail->barang_id, $detail->harga_jual)) { throw new Exception("Gagal Update Harga Jual"); } /* * Update Rrp */ if (!HargaJualRekomendasi::model()->updateHarga($detail->barang_id, $detail->harga_jual_rekomendasi)) { throw new Exception("Gagal Update RRP"); } /* Tambahkan supplier ke barang ini, jika belum ada */ $supplierBarangAda = SupplierBarang::model()->find("supplier_id={$this->profil_id} and barang_id = {$detail->barang_id}"); if (is_null($supplierBarangAda)) { $supplierBarang = new SupplierBarang(); $supplierBarang->barang_id = $detail->barang_id; $supplierBarang->supplier_id = $this->profil_id; if (!$supplierBarang->save()) { throw new Exception("Gagal simpan supplier barang"); } } } // Total dari pembelian barang // Jika nanti ada item lain, misal: Transport, pajak, dll // ditambahkan di sini $jumlahPembelian = $this->ambilTotal(); /* * Create (hutang) */ $hutang = new HutangPiutang(); $hutang->profil_id = $this->profil_id; $hutang->jumlah = $jumlahPembelian; $hutang->tipe = HutangPiutang::TIPE_HUTANG; $hutang->asal = HutangPiutang::DARI_PEMBELIAN; $hutang->nomor_dokumen_asal = $this->nomor; if (!$hutang->save()) { throw new Exception("Gagal simpan hutang"); } /* * Hutang Detail */ $hutangDetail = new HutangPiutangDetail(); $hutangDetail->hutang_piutang_id = $hutang->id; $hutangDetail->keterangan = 'Pembelian: ' . $this->nomor; $hutangDetail->jumlah = $jumlahPembelian; if (!$hutangDetail->save()) { throw new Exception("Gagal simpan hutang detail"); } /* * Simpan hutang_id ke pembelian */ if (!Pembelian::model()->updateByPk($this->id, array('hutang_piutang_id' => $hutang->id)) > 1) { throw new Exception("Gagal simpan hutang_id"); } $transaction->commit(); return array('sukses' => true); } else { throw new Exception("Gagal Simpan Pembelian"); } } catch (Exception $ex) { $transaction->rollback(); // throw $up; return array('sukses' => false, 'error' => array('msg' => $ex->getMessage(), 'code' => $ex->getCode())); } }
public function actionRemoveSupplier($id) { if (isset($_GET['ajax']) && $_GET['ajax'] === 'supplier-barang-grid') { $model = SupplierBarang::model()->deleteByPk($id); } }
/** * Updates a particular model. * @param integer $id the ID of the model to be updated */ public function actionUbah($id) { $model = $this->loadModel($id); // Jika pembelian sudah disimpan (status bukan draft) maka tidak bisa diubah lagi if ($model->status != Pembelian::STATUS_DRAFT) { $this->redirect(array('view', 'id' => $id)); } // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if (isset($_POST['Pembelian'])) { $model->attributes = $_POST['Pembelian']; if ($model->save()) { $this->redirect(array('view', 'id' => $id)); } } /* * Untuk menampilkan dropdown barang sort by barcode; */ $barcode = SupplierBarang::model()->ambilBarangBarcodePerSupplier($model->profil_id); $barangBarcode = array(); foreach ($barcode as $barang) { $barangBarcode[$barang['id']] = "{$barang['barcode']} ({$barang['nama']})"; } /* * Untuk menampilkan dropdown barang sort by nama; */ $nama = SupplierBarang::model()->ambilBarangNamaPerSupplier($model->profil_id); $barangNama = array(); foreach ($nama as $barang) { $barangNama[$barang['id']] = "{$barang['nama']} ({$barang['barcode']})"; } $barangList = new Barang('search'); $barangList->unsetAttributes(); $curSupplierCr = NULL; if (isset($_GET['cariBarang'])) { $barangList->setAttribute('nama', $_GET['namaBarang']); $curSupplierCr = new CDbCriteria(); $curSupplierCr->join = "JOIN supplier_barang ON barang_id = t.id AND supplier_id = {$model->profil_id}"; $curSupplierCr->order = 'nama ASC'; } $pembelianDetail = new PembelianDetail('search'); $pembelianDetail->unsetAttributes(); $pembelianDetail->setAttribute('pembelian_id', '=' . $id); if (isset($_GET['PembelianDetail'])) { $pembelianDetail->attributes = $_GET['PembelianDetail']; } /* Model untuk membuat barang baru */ $barang = new Barang(); $pilihBarang = TRUE; if (isset($_GET['pilihb']) && $_GET['pilihb'] == FALSE) { $pilihBarang = FALSE; } /* Mengambil nilai pembulatan ke atas untuk harga jual */ $config = Config::model()->find('nama=:nama', [':nama' => 'pembelian.pembulatankeatashj']); $configCariBarang = Config::model()->find("nama='pembelian.caribarangmode'"); $this->render('ubah', array('model' => $model, 'barangBarcode' => $barangBarcode, 'barangNama' => $barangNama, 'pembelianDetail' => $pembelianDetail, 'barangList' => $barangList, 'curSupplierCr' => $curSupplierCr, 'barang' => $barang, 'pilihBarang' => $pilihBarang, 'pembulatan' => $config->nilai, 'tipeCari' => $configCariBarang->nilai)); }