+sub follow_account_chain {
+ $main::lxdebug->enter_sub(2);
+
+ my ($self, $form, $dbh, $transdate, $accno_id, $accno) = @_;
+
+ my @visited_accno_ids = ($accno_id);
+
+ my ($query, $sth);
+
+ $query =
+ "SELECT c.new_chart_id, date($transdate) >= c.valid_from AS is_valid, " .
+ " cnew.accno " .
+ "FROM chart c " .
+ "LEFT JOIN chart cnew ON c.new_chart_id = cnew.id " .
+ "WHERE (c.id = ?) AND NOT c.new_chart_id ISNULL AND (c.new_chart_id > 0)";
+ $sth = $dbh->prepare($query);
+
+ while (1) {
+ $sth->execute($accno_id) || $form->dberror($query . " ($accno_id)");
+ $ref = $sth->fetchrow_hashref();
+ last unless ($ref && $ref->{"is_valid"} &&
+ !grep({ $_ == $ref->{"new_chart_id"} } @visited_accno_ids));
+ $accno_id = $ref->{"new_chart_id"};
+ $accno = $ref->{"accno"};
+ push(@visited_accno_ids, $accno_id);
+ }
+
+ $main::lxdebug->leave_sub(2);
+
+ return ($accno_id, $accno);
+}
+
+sub retrieve_accounts {
+ $main::lxdebug->enter_sub(2);