EekBoek

 view release on metacpan or  search on metacpan

lib/EB/DB.pm  view on Meta::CPAN


my $accts;
sub accts {
    my ($self, $sel) = @_;
    $sel = $sel ? " WHERE $sel" : "";
    return $accts->{$sel} if $accts->{$sel};
    my $sth = $self->sql_exec("SELECT acc_id,acc_desc".
			      " FROM Accounts".
			      $sel.
			      " ORDER BY acc_id");
    my $rr;
    while ( $rr = $sth->fetchrow_arrayref ) {
	$accts->{$sel}->{$rr->[0]} = $rr->[1];
    }
    $accts->{$sel};
}

sub acc_inuse {
    my ($dbh, $acc) = @_;

    my $rr;
    $rr = $dbh->do("SELECT jnl_acc_id FROM Journal".
		   " WHERE jnl_acc_id = ?".
		   " LIMIT 1", $acc);
    return 1 if $rr && $rr->[0];

    $rr = $dbh->do("SELECT dbk_acc_id FROM Dagboeken".
		   " WHERE dbk_acc_id = ?".
		   " LIMIT 1", $acc);
    return 1 if $rr && $rr->[0];

    $rr = $dbh->do("SELECT rel_acc_id FROM Relaties".
		   " WHERE rel_acc_id = ?".
		   " LIMIT 1", $acc);
    return 1 if $rr && $rr->[0];

    $rr = $dbh->do("SELECT bkb_acc_id FROM Boekjaarbalans".
		   " WHERE bkb_acc_id = ?",
		   $acc);
    return 1 if $rr && $rr->[0];

    if ( $rr = $dbh->do("SELECT * FROM Standaardrekeningen") ) {
	for ( @$rr ) {
	    return 1 if defined($_) && $_ == $acc;
	}
    }

    return;
}

sub dbh{
    $dbh;
}

sub adm_open {
    my ($self) = @_;
    $self->connectdb;
    $self->adm("bky") ne BKY_PREVIOUS;
}

sub adm_busy {
    my ($self) = @_;
    $self->connectdb;
    $self->do("SELECT COUNT(*) FROM Journal")->[0];
}

sub does_btw {
    my ($self) = @_;
    $self->connectdb;
    return defined($self->adm("btwbegin")) if $self->adm_open;
    $self->do("SELECT COUNT(*)".
	      " FROM BTWTabel".
	      " WHERE btw_tariefgroep != 0")->[0];
}

################ API calls for simple applications ################

sub connect {
    my $dataset = $cfg->val(qw(database name));
    if ( !$dataset ) {
	die(_T("Geen dataset opgegeven.".
	       " Specificeer een dataset in de configuratiefile.").
	    "\n");
    }
    $::dbh = EB::DB::->new();
}

sub disconnect {
    $::dbh->disconnectdb;
    undef $::dbh;
}

################ API calls for database backend ################

my $tx;

my $dbpkg;

sub connectdb {
    my ($self, $nocheck) = @_;

    return $dbh if $dbh;
    my $pkg = $dbpkg || $self->_loaddbbackend;
    my $dbname = $cfg->val(qw(database name));
    croak("?INTERNAL ERROR: No database name") unless defined $dbname;
    eval {
	$dbh = $pkg->connect($dbname)
	  or die("?".__x("Database verbindingsprobleem: {err}",
			 err => $DBI::errstr)."\n");
    };
    die($@) if $@;
    $dbpkg = $pkg;
    $dbh->{RaiseError} = 1;
    #$dbh->{AutoCommit} = 0;
    $dbh->{ChopBlanks} = 1;
    $self->check_db unless $nocheck;
    $tx = 0;
    $dbh;
}

sub disconnectdb {



( run in 1.688 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )