Korrekturmodul für das Hauptbuch implementiert
[kivitendo-erp.git] / SL / Taxkeys.pm
diff --git a/SL/Taxkeys.pm b/SL/Taxkeys.pm
new file mode 100644 (file)
index 0000000..8d90dcb
--- /dev/null
@@ -0,0 +1,120 @@
+package Taxkeys;
+
+use strict;
+
+use Memoize;
+
+use SL::DBUtils;
+
+sub new {
+  my $type = shift;
+
+  my $self = {};
+
+  bless $self, $type;
+
+  return $self->_init();
+}
+
+sub DESTROY {
+  my $self = shift;
+
+  $self->_finish_statements();
+}
+
+sub _init {
+  my $self = shift;
+
+  $self->{handles} = { };
+  $self->{queries} = { };
+
+  memoize 'get_tax_info';
+  memoize 'get_full_tax_info';
+
+  return $self;
+}
+
+sub _finish_statements {
+  $main::lxdebug->enter_sub();
+
+  my $self = shift;
+
+  foreach my $idx (keys %{ $self->{handles} }) {
+    $self->{handles}->{$idx}->finish();
+    delete $self->{handles}->{$idx};
+  }
+
+  $main::lxdebug->leave_sub();
+}
+
+sub get_tax_info {
+  $main::lxdebug->enter_sub();
+
+  my $self     = shift;
+  my %params   = @_;
+
+  Common::check_params(\%params, qw(transdate taxkey));
+
+  my $myconfig = \%main::myconfig;
+  my $form     = $main::form;
+
+  if (!$self->{handles}->{get_tax_info}) {
+    $self->{queries}->{get_tax_info} = qq|
+      SELECT t.rate AS taxrate, t.taxnumber, t.taxdescription, t.chart_id AS taxchart_id,
+        c.accno AS taxaccno, c.description AS taxaccount
+      FROM taxkeys tk
+      LEFT JOIN tax t   ON (tk.tax_id  = t.id)
+      LEFT JOIN chart c ON (t.chart_id = c.id)
+      WHERE tk.id =
+        (SELECT id
+         FROM taxkeys
+         WHERE (taxkey_id = ?)
+           AND (startdate <= ?)
+         ORDER BY startdate DESC
+         LIMIT 1)
+|;
+
+    $self->{handles}->{get_tax_info} = prepare_query($form, $params{dbh} || $form->get_standard_dbh($myconfig), $self->{queries}->{get_tax_info});
+  }
+
+  my $sth = $self->{handles}->{get_tax_info};
+  do_statement($form, $sth, $self->{queries}->{get_tax_info}, $params{taxkey}, $params{transdate});
+
+  my $ref = $sth->fetchrow_hashref() || { };
+
+  $main::lxdebug->leave_sub();
+
+  return $ref;
+}
+
+sub get_full_tax_info {
+  $main::lxdebug->enter_sub();
+
+  my $self     = shift;
+  my %params   = @_;
+
+  Common::check_params(\%params, qw(transdate));
+
+  my $myconfig = \%main::myconfig;
+  my $form     = $main::form;
+
+  my %tax_info     = (
+    'taxkeys'      => { },
+    'taxchart_ids' => { },
+    );
+
+  my @all_taxkeys = map { $_->{taxkey} } (selectall_hashref_query($form, $form->get_standard_dbh(), qq|SELECT DISTINCT taxkey FROM tax WHERE taxkey IS NOT NULL|));
+
+  foreach my $taxkey (@all_taxkeys) {
+    my $ref = $self->get_tax_info('transdate' => $params{transdate}, 'taxkey' => $taxkey);
+
+    $tax_info{taxkeys}->{$taxkey}            = $ref;
+    $tax_info{accnos}->{$ref->{taxchart_id}} = $ref if ($ref->{taxchart_id});
+  }
+
+  $main::lxdebug->leave_sub();
+
+  return %tax_info;
+}
+
+1;