Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 653af2fb

Von Jan Büren vor mehr als 4 Jahren hinzugefügt

  • ID 653af2fb9905199b0916ddf704cb983e1a769eb2
  • Vorgänger 4270e942
  • Nachfolger c7cff765

GLTransaction:: add_chart_booking um get_active_taxkey erweitert

Der Aufruf von add_chart_booking muss sich nicht mehr
darum kümmern welcher Steuerschlüssel gesetzt sein muss, wenn
er einfach nur den vorkonfigurierten Steuerschlüssel setzen will.
Dementsprechend ist param{tax_id} kein Pflichtparameter mehr.
POD ergänzt und mit Testfällen abgesichert (19% / 16% Fall).

Unterschiede anzeigen:

SL/DB/GLTransaction.pm
croak t8('You cannot use a negative amount with debit/credit!') if $amount < 0;
require SL::DB::Tax;
my $tax = SL::DB::Manager::Tax->find_by(id => $params{tax_id})
// croak "Can't find tax with id " . $params{tax_id};
my $ct = $chart->get_active_taxkey($self->deliverydate // $self->transdate);
my $chart_tax = ref $ct eq 'SL::DB::TaxKey' ? $ct->tax : undef;
my $tax = defined($params{tax_id}) ? SL::DB::Manager::Tax->find_by(id => $params{tax_id}) # 1. user param
: ref $chart_tax eq 'SL::DB::Tax' ? $chart_tax # automatic tax
: SL::DB::Manager::Tax->find_by(taxkey => 0, rate => 0.00); # no tax
die "No valid tax found. User input:" . $params{tax_id} unless ref $tax eq 'SL::DB::Tax';
if ( $tax and $tax->rate != 0 ) {
($netamount, $taxamount) = Form->calculate_tax($amount, $tax->rate, $self->taxincluded, $dec);
......
Adds an acc_trans entry to an existing GL transaction, depending on the tax it
will also automatically create the tax entry. The GL transaction already needs
to have certain values, e.g. transdate, taxincluded, ...
Tax can be either set via the param tax_id or it will be set automatically
depending on the chart configuration. If not set and no configuration is found
no tax entry will be created (taxkey 0).
Mandatory params are
......
=item * chart as an RDBO object
=item * tax_id
=item * either debit OR credit (positive values)
=back
t/gl/gl.t
use strict;
use Test::More tests => 4;
use Test::More tests => 8;
use lib 't';
use Support::TestSetup;
......
"chart balances ok"
);
note "testing automatic tax 19%";
my $gl_transaction_7 = SL::DB::GLTransaction->new(
reference => 'betriebsbedarf tax not included',
description => 'bar',
taxincluded => 0,
transdate => DateTime->new(year => 2019, month => 12, day => 30),
);
$gl_transaction_7->add_chart_booking(%{$_}) foreach (
{
chart => $betriebsbedarf,
debit => 100,
},
{
chart => $betriebsbedarf,
debit => 100,
},
{
chart => $betriebsbedarf,
debit => 100,
tax_id => $tax_0->id,
},
{
chart => $cash,
credit => 338,
},
);
$gl_transaction_7->post;
is(SL::DB::Manager::GLTransaction->get_all_count(), 9, "gl transactions created ok");
is_deeply(&get_account_balances,
[
{
'accno' => '1000',
'sum' => '1328.14000'
},
{
'accno' => '1200',
'sum' => '-100.00000'
},
{
'accno' => '1571',
'sum' => '-14.00000'
},
{
'accno' => '1576',
'sum' => '-114.02000'
},
{
'accno' => '4980',
'sum' => '-1100.12000'
}
],
"chart balances ok"
);
note "testing automatic tax 16%";
my $gl_transaction_8 = SL::DB::GLTransaction->new(
reference => 'betriebsbedarf tax not included',
description => 'bar',
taxincluded => 0,
transdate => DateTime->new(year => 2020, month => 12, day => 31),
);
$gl_transaction_8->add_chart_booking(%{$_}) foreach (
{
chart => $betriebsbedarf,
debit => 100,
},
{
chart => $betriebsbedarf,
debit => 100,
},
{
chart => $betriebsbedarf,
debit => 100,
tax_id => $tax_0->id,
},
{
chart => $cash,
credit => 332,
},
);
$gl_transaction_8->post;
is(SL::DB::Manager::GLTransaction->get_all_count(), 10, "gl transactions created ok");
is_deeply(&get_account_balances,
[
{
'accno' => '1000',
'sum' => '1660.14000'
},
{
'accno' => '1200',
'sum' => '-100.00000'
},
{
'accno' => '1571',
'sum' => '-14.00000'
},
{
'accno' => '1575',
'sum' => '-32.00000'
},
{
'accno' => '1576',
'sum' => '-114.02000'
},
{
'accno' => '4980',
'sum' => '-1400.12000'
}
],
"chart balances ok"
);
done_testing;
clear_up();

Auch abrufbar als: Unified diff