Exemple #1
0
 /**
  * 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()));
     }
 }
Exemple #2
0
 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));
 }