Exemplo n.º 1
0
 /**
  * Alternative handler for bca_parse_select_range_form.
  */
 protected function bcaParseSelectRangeForm()
 {
     // BCA memiliki keunikan dalam pencarian mutasi rekening.
     // Untuk harian, hanya bisa 31 hari terakhir dari hari ini.
     // Setelah itu adalah keseluruhan dari awal sampai akhir hari 2 bulan
     // lalu, dan 1 bulan lalu.
     // Ribet amat, yak.
     // 31 hari terakhir itu berarti total hari dari sekarang adalah 31 hari.
     // artinya ada jeda 30 hari antara hari ini dengan hari terakhir.
     // Bila hari ini adalah 2 Februari 2016, maka jika hari terakhir itu
     // 1 Januari 2016, maka tidak valid. tapi jika 2 januari 2016, maka
     // valid.
     $form = $this->configuration('temporary][form');
     $fields = $form->preparePostForm('value(submit1)');
     // Cari tahu rekening.
     $options_rekening = $this->html->find('select[name=value(D1)] > option')->getElements();
     $fields['value(D1)'] = $this->bcaSelectAccountGetValueFromOptionsElement($options_rekening);
     $type = null;
     // daily, monthly.
     // Check apakah ini revisit.
     $is_revisit = $this->configuration('temporary][revisit_account_statement_page');
     if ($is_revisit) {
         // Copot bulan selanjutnya.
         $_month = key($this->range);
         $month = array_shift($this->range);
         reset($this->range);
         // Jika month adalah bulan ini, maka gunakan pencarian tipe harian.
         // Jika month adalah bulan kemarin, maka gunakan pencarian tipe bulanan.
         $now_month = date('Y-m');
         $last_month = Range::getPrevMonth($now_month);
         if ($_month == $now_month) {
             $type = 'daily';
         } elseif ($_month == $last_month) {
             $type = 'monthly';
         }
     } else {
         // Bukan revisit, maka:
         $limit = new \DateTime('31 days ago');
         if ($this->range->isSameDay($limit, 'start') || $this->range->comparison($limit, '<', 'start')) {
             $type = 'daily';
             $month = $this->range;
         } else {
             $type = 'monthly';
             // Set over range.
             $this->configuration('temporary][over_range', true);
             // Set need to filter.
             $this->configuration('temporary][filter_transaction', true);
             // Simpan original range, karena akan dipecah.
             $this->configuration('temporary][range', $this->range);
             // Atur ulang range.
             $this->range = $this->range->splitPerMonth();
             $_month = key($this->range);
             reset($this->range);
             // Copot bulan pertama.
             $month = array_shift($this->range);
             // $month bisa merupakan start_date di tanggal 13 dan end date
             // di tanggal 31. tapi karena bca selalu di tanggal awal, maka:
             // Rebuild ulang, agar tanggal awal menjadi 1 dan tanggal akhir
             // menjadi last (28/29/30/31.
             $month = Range::create("first day of {$_month} ~ last day of {$_month}");
         }
     }
     // Simpan informasi $month, diperlukan untuk
     // method ::bcaConvertDateTransaction()
     $this->configuration('temporary][month', $month);
     // Positioning.
     switch ($type) {
         case 'daily':
             // Pilih field "Mutasi Harian".
             $fields['value(r1)'] = '1';
             unset($fields['value(x)']);
             $fields['value(startDt)'] = $month->format(self::BCA_DATE_FORMAT_DAILY_DATE, 'start');
             $fields['value(startMt)'] = $month->format(self::BCA_DATE_FORMAT_DAILY_MONTH, 'start');
             $fields['value(startYr)'] = $month->format(self::BCA_DATE_FORMAT_DAILY_YEAR, 'start');
             $fields['value(endDt)'] = $month->format(self::BCA_DATE_FORMAT_DAILY_DATE, 'end');
             $fields['value(endMt)'] = $month->format(self::BCA_DATE_FORMAT_DAILY_MONTH, 'end');
             $fields['value(endYr)'] = $month->format(self::BCA_DATE_FORMAT_DAILY_YEAR, 'end');
             $fields['value(fDt)'] = '';
             $fields['value(tDt)'] = '';
             break;
         case 'monthly':
             // Isi field r1
             // Pilih field "Mutasi Bulanan".
             $fields['value(r1)'] = '2';
             // Isi field x
             // Harusnya sudah ada variable $_month (string) dan
             // $month (object Range).
             $now_month = date('Y-m');
             $last_month = Range::getPrevMonth($now_month);
             $two_last_month = Range::getPrevMonth($last_month);
             if ($last_month == $_month) {
                 $fields['value(x)'] = '1';
             } elseif ($two_last_month == $_month) {
                 $fields['value(x)'] = '2';
             }
             // Isi field fDt & tDt.
             $fields['value(fDt)'] = $month->format(self::BCA_DATE_FORMAT, 'start');
             $fields['value(tDt)'] = $month->format(self::BCA_DATE_FORMAT, 'end');
             // Anomali BCA.
             // Kasus seperti ini: milih request bulan desember 2015
             // lalu oleh javascriptnya BCA dimodifikasi menjadi tanggal masa
             // depan yakni menjadi 01122016 ~ 31122016. dan saat disubmit
             // ternyata post fieldnya bener-bener tanggal masa depan yakni
             // 01122016 ~ 31122016. Tapi respon yang muncul tetap ke desember
             // 2015 (01122015 ~ 31122015). Hadeh, ke-tidakkonsisten-an ini
             // mengganggu coding.
             // Hack dimulai:
             // Modifikasi, tahun apapun menjadi tahun saat ini.
             $fields['value(fDt)'] = substr($fields['value(fDt)'], 0, -4) . date('Y');
             $fields['value(tDt)'] = substr($fields['value(tDt)'], 0, -4) . date('Y');
             unset($fields['value(startDt)']);
             unset($fields['value(endDt)']);
             unset($fields['value(startMt)']);
             unset($fields['value(endMt)']);
             unset($fields['value(startYr)']);
             unset($fields['value(endYr)']);
             break;
         default:
             // Do something.
             break;
     }
     // Set ke menu.
     $this->configuration("menu][bca_account_statement_page_view][fields", $fields);
 }