private function process($_tanggal, $_tanggal2, $tujuan_id)
 {
     $reportName = "laporan_obat";
     $objPHPExcel = $this->loadPHPExcelLib($reportName);
     $objPHPExcel->setActiveSheetIndex(0);
     $activeSheet = $objPHPExcel->getActiveSheet();
     $tanggal = $this->reverseDate($_tanggal);
     $tanggal2 = $this->reverseDate($_tanggal2);
     $puskesmas_id = Yii::app()->user->puskesmas_id;
     $puskesmas = Puskesmas::model()->findByPk($puskesmas_id);
     $departemen_id = Departemen::model()->findByAttributes(array("puskesmas_id" => $puskesmas_id, "departemen_jenis_id" => "1"))->id;
     $tujuan = DistribusiObatTujuan::model()->findByPk($tujuan_id);
     $activeSheet->getCell("A8")->setValue(strtoupper($tujuan->nama . " - PUSKESMAS " . $puskesmas->nama));
     $activeSheet->getCell("A5")->setValue("PEMAKAIAN TANGGAL " . $_tanggal . " S/D " . $_tanggal2);
     //echo "$tujuan_id, $departemen_id, $puskesmas_id";
     $no = 1;
     $baris = 12;
     $obatArr = Obat::model()->findAll();
     foreach ($obatArr as $obat) {
         $data = KartuStok::kalkulasiStokObat($obat->id, $tujuan_id, $departemen_id, $puskesmas_id, FALSE);
         $masuk = 0;
         $keluar = 0;
         foreach ($data as $d) {
             //echo "Perbandingan : ".strtotime($tanggal)." > ".strtotime($d["date"])." > ".strtotime($tanggal2);
             //echo "<br>";
             if (strtotime($tanggal) <= strtotime($d["date"]) && strtotime($d["date"]) < strtotime($tanggal2) + 86400) {
                 $masuk += $d["masuk"];
                 $keluar += $d["keluar"];
             } else {
                 continue;
             }
         }
         $activeSheet->setCellValue("A" . $baris, $no);
         $activeSheet->setCellValue("B" . $baris, $obat->nama);
         $activeSheet->setCellValue("C" . $baris, ObatSatuan::model()->findByPk($obat->kemasan_id)->nama);
         $activeSheet->setCellValue("D" . $baris, $masuk);
         $activeSheet->setCellValue("E" . $baris, $keluar);
         $no++;
         $baris++;
     }
     $activeSheet->getStyle("A12:E" . ($baris - 1))->applyFromArray(array('borders' => array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_THIN))));
     return array("phpexcel" => $objPHPExcel, "name" => $reportName . "_" . $_tanggal . "_" . $_tanggal2);
 }
 public static function kalkulasiStokObat($id, $tujuan_id = 0, $departemen_id, $puskesmas_id, $include_obat_rusak = TRUE)
 {
     $dataTransaksi = array();
     //untuk satu wilayah atau satu departemen
     if ($tujuan_id == 0) {
         //untuk satu wilayah
         if ($departemen_id == 0) {
             //ambil data stok awal
             $list = Yii::app()->db->createCommand("select stok_awal.tanggal, stok_awal_detail.obat_id, stok_awal_detail.jumlah\n                        from stok_awal_detail, stok_awal\n                    where \n                        stok_awal_detail.stok_awal_id = stok_awal.id \n                        and stok_awal.puskesmas_id = '{$puskesmas_id}'\n                        and stok_awal_detail.obat_id = '{$id}'")->queryAll();
             foreach ($list as $item) {
                 $obj = array();
                 $obj["date"] = $item['tanggal'];
                 $obj["keterangan"] = "Stok Awal";
                 $obj["masuk"] = $item['jumlah'];
                 $obj["keluar"] = 0;
                 $obj["data"] = "STOK_AWAL";
                 $dataTransaksi[] = $obj;
             }
             //ambil data penerimaan
             $list = Yii::app()->db->createCommand("select penerimaan_obat.tanggal, penerimaan_obat_detail.obat_id, penerimaan_obat_detail.jumlah\n                        from penerimaan_obat_detail, penerimaan_obat\n                    where \n                        penerimaan_obat_detail.penerimaan_obat_id = penerimaan_obat.id \n                        and penerimaan_obat.puskesmas_id = '{$puskesmas_id}'\n                        and penerimaan_obat_detail.obat_id = '{$id}'")->queryAll();
             foreach ($list as $item) {
                 $obj = array();
                 $obj["date"] = $item['tanggal'];
                 $obj["keterangan"] = "Penerimaan dari GFLK";
                 $obj["masuk"] = $item['jumlah'];
                 $obj["keluar"] = 0;
                 $obj["data"] = "PENERIMAAN";
                 $dataTransaksi[] = $obj;
             }
             //ambil data pemakaian (obat keluar)
             $filter = array("puskesmas_id" => $puskesmas_id, "obat_id" => $id);
             $pemakaianArr = PemakaianObat::model()->findAllByAttributes($filter);
             foreach ($pemakaianArr as $pakai) {
                 $tujuan = DistribusiObatTujuan::model()->findByPk($pakai->distribusi_obat_tujuan_id);
                 $departemen = Departemen::model()->findByPk($pakai->departemen_id);
                 $obj = array();
                 $obj["date"] = $pakai->tanggal;
                 $obj["keterangan"] = "Pemakaian " . ucwords(strtolower($tujuan->nama)) . " " . ucwords(strtolower($departemen->nama));
                 if ($pakai->keterangan != "") {
                     $obj["keterangan"] = $pakai->keterangan;
                 }
                 $obj["masuk"] = 0;
                 $obj["keluar"] = $pakai->jumlah;
                 $obj["data"] = "PEMAKAIAN";
                 $dataTransaksi[] = $obj;
             }
         } else {
             //ambil data transfer dari gudang obat
             $list = Yii::app()->db->createCommand("select distribusi_obat.tanggal, distribusi_obat.asal_id, distribusi_obat.asal_departemen_id, distribusi_obat.tujuan_id, distribusi_obat.departemen_id, distribusi_obat_detail.obat_id, distribusi_obat_detail.jumlah\n                         from distribusi_obat_detail, distribusi_obat\n                     where \n                         distribusi_obat_detail.distribusi_obat_id = distribusi_obat.id \n                         and distribusi_obat.asal_id = '1'\n                         and distribusi_obat.departemen_id = '" . $departemen_id . "'\n                         and distribusi_obat.puskesmas_id = '" . $puskesmas_id . "' \n                         and distribusi_obat_detail.obat_id = '{$id}'")->queryAll();
             foreach ($list as $item) {
                 $obj = array();
                 $obj["date"] = $item['tanggal'];
                 $tujuan = DistribusiObatTujuan::model()->findByPk($item["asal_id"]);
                 $departemen = Departemen::model()->findByPk($item["asal_departemen_id"]);
                 $obj["keterangan"] = "Transfer dari " . $tujuan->nama . " " . $departemen->nama;
                 $obj["masuk"] = $item['jumlah'];
                 $obj["keluar"] = 0;
                 $obj["data"] = "DISTRIBUSI";
                 $dataTransaksi[] = $obj;
             }
             //ambil data pemakaian (obat keluar)
             $filter = array("puskesmas_id" => $puskesmas_id, "obat_id" => $id, "departemen_id" => $departemen_id);
             $pemakaianArr = PemakaianObat::model()->findAllByAttributes($filter);
             foreach ($pemakaianArr as $pakai) {
                 $tujuan = DistribusiObatTujuan::model()->findByPk($pakai->distribusi_obat_tujuan_id);
                 $departemen = Departemen::model()->findByPk($pakai->departemen_id);
                 $obj = array();
                 $obj["date"] = $pakai->tanggal;
                 $obj["keterangan"] = "Pemakaian " . ucwords(strtolower($tujuan->nama)) . " " . ucwords(strtolower($departemen->nama));
                 if ($pakai->keterangan != "") {
                     $obj["keterangan"] = $pakai->keterangan;
                 }
                 $obj["masuk"] = 0;
                 $obj["keluar"] = $pakai->jumlah;
                 $obj["data"] = "PEMAKAIAN";
                 $dataTransaksi[] = $obj;
             }
         }
     } else {
         if ($tujuan_id == 1) {
             //PENERIMAAN OBAT DARI GFLK
             //ambil data stok awal
             $list = Yii::app()->db->createCommand("select stok_awal.tanggal, stok_awal_detail.obat_id, stok_awal_detail.jumlah\n                    from stok_awal_detail, stok_awal\n                where \n                    stok_awal_detail.stok_awal_id = stok_awal.id \n                    and stok_awal.puskesmas_id = '{$puskesmas_id}'\n                    and stok_awal_detail.obat_id = '{$id}'")->queryAll();
             foreach ($list as $item) {
                 $obj = array();
                 $obj["date"] = $item['tanggal'];
                 $obj["keterangan"] = "Stok Awal";
                 $obj["masuk"] = $item['jumlah'];
                 $obj["keluar"] = 0;
                 $obj["data"] = "STOK_AWAL";
                 $dataTransaksi[] = $obj;
             }
             //ambil data penerimaan
             $list = Yii::app()->db->createCommand("select penerimaan_obat.tanggal, penerimaan_obat_detail.obat_id, penerimaan_obat_detail.jumlah\n                    from penerimaan_obat_detail, penerimaan_obat\n                where \n                    penerimaan_obat_detail.penerimaan_obat_id = penerimaan_obat.id \n                    and penerimaan_obat.puskesmas_id = '{$puskesmas_id}'\n                    and penerimaan_obat_detail.obat_id = '{$id}'")->queryAll();
             foreach ($list as $item) {
                 $obj = array();
                 $obj["date"] = $item['tanggal'];
                 $obj["keterangan"] = "Penerimaan dari GFLK";
                 $obj["masuk"] = $item['jumlah'];
                 $obj["keluar"] = 0;
                 $obj["data"] = "PENERIMAAN";
                 $dataTransaksi[] = $obj;
             }
             //ambil data distribusi
             $list = Yii::app()->db->createCommand("select distribusi_obat.tanggal, distribusi_obat.asal_id, distribusi_obat.asal_departemen_id, distribusi_obat.tujuan_id, distribusi_obat.departemen_id, distribusi_obat_detail.obat_id, distribusi_obat_detail.jumlah\n                     from distribusi_obat_detail, distribusi_obat\n                 where \n                     distribusi_obat_detail.distribusi_obat_id = distribusi_obat.id \n                     and distribusi_obat.puskesmas_id = '" . $puskesmas_id . "' \n                     and distribusi_obat_detail.obat_id = '{$id}'")->queryAll();
             foreach ($list as $item) {
                 $obj = array();
                 $obj["date"] = $item['tanggal'];
                 if ($item["asal_id"] == 1) {
                     $tujuan = DistribusiObatTujuan::model()->findByPk($item["tujuan_id"]);
                     $departemen = Departemen::model()->findByPk($item["departemen_id"]);
                     $obj["keterangan"] = "Distribusi ke " . $tujuan->nama . " " . $departemen->nama;
                     $obj["masuk"] = 0;
                     $obj["keluar"] = $item['jumlah'];
                 } else {
                     if ($item["tujuan_id"] == 1) {
                         $tujuan = DistribusiObatTujuan::model()->findByPk($item["asal_id"]);
                         $departemen = Departemen::model()->findByPk($item["asal_departemen_id"]);
                         $obj["keterangan"] = "Pengembalian dari " . $tujuan->nama . " " . $departemen->nama;
                         $obj["masuk"] = $item['jumlah'];
                         $obj["keluar"] = 0;
                     }
                 }
                 $obj["data"] = "DISTRIBUSI";
                 $dataTransaksi[] = $obj;
             }
         } else {
             //STOK OBAT DI APOTEK / PUSTU / DLL
             //ambil data penerimaan dari distribusi (obat masuk)
             //ambil data distribusi
             $list = Yii::app()->db->createCommand("select distribusi_obat.tanggal, distribusi_obat.asal_id, distribusi_obat.asal_departemen_id, distribusi_obat.tujuan_id, distribusi_obat.departemen_id, distribusi_obat_detail.obat_id, distribusi_obat_detail.jumlah\n                     from distribusi_obat_detail, distribusi_obat\n                 where \n                     distribusi_obat_detail.distribusi_obat_id = distribusi_obat.id \n                     and \n                     ((\n                        distribusi_obat.tujuan_id = '" . $tujuan_id . "' \n                        and \n                        distribusi_obat.departemen_id = '" . $departemen_id . "' \n                     ) \n                     or \n                     (\n                        distribusi_obat.asal_id = '" . $tujuan_id . "' \n                        and \n                        distribusi_obat.asal_departemen_id = '" . $departemen_id . "' \n                     ))\n                     and distribusi_obat.puskesmas_id = '" . $puskesmas_id . "' \n                     and distribusi_obat_detail.obat_id = '{$id}'")->queryAll();
             foreach ($list as $item) {
                 $obj = array();
                 $obj["date"] = $item['tanggal'];
                 if ($item["asal_id"] == 1) {
                     $tujuan = DistribusiObatTujuan::model()->findByPk($item["asal_id"]);
                     $departemen = Departemen::model()->findByPk($item["asal_departemen_id"]);
                     $obj["keterangan"] = "Transfer dari " . $tujuan->nama . " " . $departemen->nama;
                     $obj["masuk"] = $item['jumlah'];
                     $obj["keluar"] = 0;
                 } else {
                     if ($item["tujuan_id"] == 1) {
                         $tujuan = DistribusiObatTujuan::model()->findByPk($item["tujuan_id"]);
                         $departemen = Departemen::model()->findByPk($item["departemen_id"]);
                         $obj["keterangan"] = "Pengembalian ke " . $tujuan->nama . " " . $departemen->nama;
                         $obj["masuk"] = 0;
                         $obj["keluar"] = $item['jumlah'];
                     }
                 }
                 $obj["data"] = "DISTRIBUSI";
                 $dataTransaksi[] = $obj;
             }
             //ambil data pemakaian (obat keluar)
             $pemakaianArr = PemakaianObat::model()->findAllByAttributes(array("puskesmas_id" => $puskesmas_id, "obat_id" => $id, "distribusi_obat_tujuan_id" => $tujuan_id, "departemen_id" => $departemen_id));
             foreach ($pemakaianArr as $pakai) {
                 $tujuan = DistribusiObatTujuan::model()->findByPk($pakai->distribusi_obat_tujuan_id);
                 $departemen = Departemen::model()->findByPk($pakai->departemen_id);
                 $obj = array();
                 $obj["date"] = $pakai->tanggal;
                 $obj["keterangan"] = "Pemakaian " . ucwords(strtolower($tujuan->nama)) . " " . ucwords(strtolower($departemen->nama));
                 if ($pakai->keterangan != "") {
                     $obj["keterangan"] = $pakai->keterangan;
                 }
                 $obj["masuk"] = 0;
                 $obj["keluar"] = $pakai->jumlah;
                 $obj["data"] = "PEMAKAIAN";
                 $dataTransaksi[] = $obj;
             }
         }
     }
     //ambil data stock opname
     $stockOpnameArr = StockOpnameObat::model()->findAllByAttributes(array("puskesmas_id" => $puskesmas_id, "obat_id" => $id, "distribusi_obat_tujuan_id" => $tujuan_id, "departemen_id" => $departemen_id));
     foreach ($stockOpnameArr as $pakai) {
         $tujuan = DistribusiObatTujuan::model()->findByPk($pakai->distribusi_obat_tujuan_id);
         $departemen = Departemen::model()->findByPk($pakai->departemen_id);
         $obj = array();
         $obj["date"] = date("Y-m-d", strtotime($pakai->waktu));
         $obj["keterangan"] = "Perubahan Stok Oleh " . User::model()->findByPk($pakai->user_id)->nama_lengkap;
         $obj["masuk"] = $pakai->jumlah_masuk;
         $obj["keluar"] = $pakai->jumlah_keluar;
         $obj["data"] = "STOCK_OPNAME";
         $dataTransaksi[] = $obj;
     }
     if ($include_obat_rusak == TRUE) {
         //ambil data obat rusak
         $list = Yii::app()->db->createCommand("select \n                    obat_rusak.waktu, obat_rusak.distribusi_obat_tujuan_id, obat_rusak.departemen_id, obat_rusak.keterangan,\n                    obat_rusak_detail.obat_id, obat_rusak_detail.jumlah\n                 from obat_rusak_detail, obat_rusak\n                 where \n                    obat_rusak.distribusi_obat_tujuan_id = '" . $tujuan_id . "'\n                    AND obat_rusak.departemen_id = '" . $departemen_id . "'\n                    AND obat_rusak_detail.obat_rusak_id = obat_rusak.id \n                    AND obat_rusak.puskesmas_id = '" . $puskesmas_id . "' \n                    AND obat_rusak_detail.obat_id = '{$id}'")->queryAll();
         foreach ($list as $item) {
             $obj = array();
             $obj["date"] = date("Y-m-d", strtotime($item['waktu']));
             $obj["keterangan"] = "Obat Rusak, Ket : " . $item["keterangan"];
             $obj["masuk"] = 0;
             $obj["keluar"] = $item['jumlah'];
             $obj["data"] = "OBAT_RUSAK";
             $dataTransaksi[] = $obj;
         }
     }
     //echo count($dataTransaksi)."<br>";
     usort($dataTransaksi, array("KartuStok", "compareData"));
     return $dataTransaksi;
 }