/** * 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); }