From a6bf2bd692fbf38495d46aa326d573703af3bdbd Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Tue, 9 Nov 2010 12:19:03 +0100 Subject: [PATCH] =?utf8?q?Part::get=5Fchart=20-=20Laden=20eines=20dazugeh?= =?utf8?q?=C3=B6rigen=20Chart-Objektes=20=C3=BCber=20Buchungsgruppe?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- SL/DB/Part.pm | 52 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/SL/DB/Part.pm b/SL/DB/Part.pm index a553f48a4..8ec7b3b1b 100644 --- a/SL/DB/Part.pm +++ b/SL/DB/Part.pm @@ -3,6 +3,8 @@ package SL::DB::Part; use strict; use Carp; +use List::MoreUtils qw(any); + use SL::DBUtils; use SL::DB::MetaSetup::Part; use SL::DB::Manager::Part; @@ -132,21 +134,36 @@ sub get_taxkey { $tk_info->{$taxzone} ||= { }; $tk_info->{$taxzone}->{$is_sales} ||= { }; - return $tk_info->{$taxzone}->{$is_sales}->{$date} if exists $tk_info->{$taxzone}->{$is_sales}->{$date}; + if (!exists $tk_info->{$taxzone}->{$is_sales}->{$date}) { + $tk_info->{$taxzone}->{$is_sales}->{$date} = + $self->get_chart(type => $is_sales ? 'income' : 'expense', taxzone => $taxzone) + ->load + ->get_active_taxkey($date); + } - my $bugru = $self->buchungsgruppe; - my %charts = ( inventory => { id => $self->inventory_accno_id ? $bugru->inventory_accno_id : undef }, - income => { id => $bugru->call_sub("income_accno_id_${taxzone}") }, - expense => { id => $bugru->call_sub("expense_accno_id_${taxzone}") }, - ); + return $tk_info->{$taxzone}->{$is_sales}->{$date}; +} - foreach my $type(qw(inventory income expense)) { - $charts{$type}->{chart} ||= $charts{$type}->{id} ? SL::DB::Manager::Chart->find_by(id => $charts{$type}->{id}) : undef if $charts{$type}->{id}; - } +sub get_chart { + my ($self, %params) = @_; + + my $type = (any { $_ eq $params{type} } qw(income expense inventory)) ? $params{type} : croak("Invalid 'type' parameter '$params{type}'"); + my $taxzone = $params{ defined($params{taxzone}) ? 'taxzone' : 'taxzone_id' } * 1; + + $self->{__partpriv_get_chart_id} ||= { }; + my $charts = $self->{__partpriv_get_chart_id}; + + $charts->{$taxzone} ||= { }; - my $chart = $charts{ $is_sales ? 'income' : 'expense' }->{chart}; + if (!exists $charts->{$taxzone}->{$type}) { + my $bugru = $self->buchungsgruppe; + my $chart_id = ($type eq 'inventory') ? ($self->inventory_accno_id ? $bugru->inventory_accno_id : undef) + : $bugru->call_sub("${type}_accno_id_${taxzone}"); - return $tk_info->{$taxzone}->{$is_sales}->{$date} = $chart->get_active_taxkey($date); + $charts->{$taxzone}->{$type} = $chart_id ? SL::DB::Chart->new(id => $chart_id)->load : undef; + } + + return $charts->{$taxzone}->{$type}; } 1; @@ -262,6 +279,19 @@ zone given by C<$params{taxzone}> (range 0..3). The information retrieved by the function is cached. +=item C + +Retrieves and returns a chart object valid for the given type +C<$params{type}> and tax zone C<$params{taxzone}> +(C<$params{taxzone_id}> is also recognized). The type must be one of +the three key words C, C and C. + +This function uses the part's associated buchungsgruppe and uses the +fields belonging to the tax zone given by C<$params{taxzone}> (range +0..3). + +The information retrieved by the function is cached. + =item C Checks if this articke is used in orders, invoices, delivery orders or -- 2.20.1