package SL::BankAccount;

use strict;

use SL::DBUtils;

sub save {
  $main::lxdebug->enter_sub();

  my $self     = shift;
  my %params   = @_;

  my $myconfig = \%main::myconfig;
  my $form     = $main::form;

  my $dbh      = $params{dbh} || $form->get_standard_dbh($myconfig);

  if (!$params{id}) {
    ($params{id}) = selectfirst_array_query($form, $dbh, qq|SELECT nextval('id')|);
    do_query($form, $dbh, qq|INSERT INTO bank_accounts (id, chart_id)
                             VALUES (?, (SELECT id FROM chart LIMIT 1))|, conv_i($params{id}));
  }

  my $query =
    qq|UPDATE bank_accounts
       SET account_number = ?, bank_code = ?, bank = ?, iban = ?, bic = ?, chart_id = ?
       WHERE id = ?|;
  my @values = (@params{qw(account_number bank_code bank iban bic)}, conv_i($params{chart_id}), conv_i($params{id}));

  do_query($form, $dbh, $query, @values);

  $dbh->commit() unless ($params{dbh});

  $main::lxdebug->leave_sub();

  return $params{id};
}

sub retrieve {
  $main::lxdebug->enter_sub();

  my $self     = shift;
  my %params   = @_;

  Common::check_params(\%params, qw(id));

  my $myconfig = \%main::myconfig;
  my $form     = $main::form;

  my $dbh      = $params{dbh} || $form->get_standard_dbh($myconfig);

  my $query    = qq|SELECT * FROM bank_accounts WHERE id = ?|;
  my $account  = selectfirst_hashref_query($form, $dbh, $query, conv_i($params{id}));

  $main::lxdebug->leave_sub();

  return $account;
}

sub list {
  $main::lxdebug->enter_sub();

  my $self     = shift;
  my %params   = @_;

  my $myconfig = \%main::myconfig;
  my $form     = $main::form;

  my $dbh      = $params{dbh} || $form->get_standard_dbh($myconfig);

  my %sort_columns = (
    'account_number'    => [ 'ba.account_number', ],
    'bank_code'         => [ 'ba.bank_code', 'ba.account_number', ],
    'bank'              => [ 'ba.bank',      'ba.account_number', ],
    'iban'              => [ 'ba.iban',      'ba.account_number', ],
    'bic'               => [ 'ba.bic',       'ba.account_number', ],
    'chart_accno'       => [ 'c.accno', ],
    'chart_description' => [ 'c.description', ],
    );

  my %sort_spec = create_sort_spec('defs' => \%sort_columns, 'default' => 'bank', 'column' => $params{sortorder}, 'dir' => $params{sortdir});

  my $query =
    qq|SELECT ba.id, ba.account_number, ba.bank_code, ba.bank, ba.iban, ba.bic, ba.chart_id,
         c.accno AS chart_accno, c.description AS chart_description
       FROM bank_accounts ba
       LEFT JOIN chart c ON (ba.chart_id = c.id)
       ORDER BY $sort_spec{sql}|;

  my $results = selectall_hashref_query($form, $dbh, $query);

  $main::lxdebug->leave_sub();

  return $results;
}


1;
