X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=SL%2FDB%2FHelper%2FPriceTaxCalculator.pm;h=fca37f59b0ea02273b5216085cc848dec45a43f9;hb=b9d2f81497c6ff60be298ed1e7697c0c6a4316fa;hp=bedc69aada55ed528743745e5c1567dea431bd9f;hpb=d8d6602479931e667fc6844b3bb59dd7a5219138;p=kivitendo-erp.git diff --git a/SL/DB/Helper/PriceTaxCalculator.pm b/SL/DB/Helper/PriceTaxCalculator.pm index bedc69aad..fca37f59b 100644 --- a/SL/DB/Helper/PriceTaxCalculator.pm +++ b/SL/DB/Helper/PriceTaxCalculator.pm @@ -3,7 +3,7 @@ package SL::DB::Helper::PriceTaxCalculator; use strict; use parent qw(Exporter); -our @EXPORT = qw(calculate_prices_and_taxes); +our @EXPORT = qw(calculate_prices_and_taxes _calculate_item); use Carp; use List::Util qw(sum min max); @@ -37,7 +37,7 @@ sub calculate_prices_and_taxes { exchangerate => undef, is_sales => $self->can('customer') && $self->customer, is_invoice => (ref($self) =~ /Invoice/) || $params{invoice}, - items => { }, + items => [ ], ); _get_exchangerate($self, \%data, %params); @@ -57,7 +57,7 @@ sub calculate_prices_and_taxes { return $self unless wantarray; - return map { ($_ => $data{$_}) } qw(taxes amounts amounts_cogs allocated exchangerate assembly_items); + return map { ($_ => $data{$_}) } qw(taxes amounts amounts_cogs allocated exchangerate assembly_items items); } sub _get_exchangerate { @@ -75,6 +75,8 @@ sub _calculate_item { my ($self, $item, $idx, $data, %params) = @_; my $part = SL::DB::Part->load_cached($item->parts_id); + return unless $item->part; + my $part_unit = $data->{units_by_name}->{ $part->unit }; my $item_unit = $data->{units_by_name}->{ $item->unit }; @@ -149,12 +151,12 @@ sub _calculate_item { $data->{last_incex_chart_id} = $chart->id if $data->{is_sales}; - $data->{items}->{ $item->id } = { + push @{ $data->{items} }, { linetotal => $linetotal, linetotal_cost => $linetotal_cost, sellprice => $sellprice, tax_amount => $tax_amount, - taxkey => $taxkey, + taxkey_id => $taxkey->id, }; _dbg("CALCULATE! ${idx} i.qty " . $item->qty . " i.sellprice " . $item->sellprice . " sellprice $sellprice num_dec $num_dec taxamount $tax_amount " . @@ -351,12 +353,21 @@ The exchangerate used for the calculation. =item C -A hashref. For each line item this hashref contains an entry with -additional values that have been calculated for that item but that -aren't stored in the item object itself. These include C, -C, C, C and C. +An array reference. For each line item this array contains a hash ref +entry with additional values that have been calculated for that item +but that aren't stored in the item object itself. These include +C, C, C, C and +C. + +The items are stored in the same order the items are stored in the +object that L has been called on. + +For example: + + my $invoice = SL::DB::Invoice->new(id => 12345)->load; + my %data = $invoice->calculate_prices_and_taxes; -The items are hashed by their IDs. + print "line total of second item: " . $data{items}->[1]->{linetotal}; =back