X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fdb_helper%2Fpayment.t;h=508bfc9b8c3a4bf800fab825012d0d42856aaa45;hb=a158b731b52535db7540b3bb54c0c7d7557fbc0f;hp=b40cf74320fdecdd335af3498cae7290a3876e07;hpb=63410aa68c7c57655dc66eba4291592358d46cf2;p=kivitendo-erp.git diff --git a/t/db_helper/payment.t b/t/db_helper/payment.t index b40cf7432..508bfc9b8 100644 --- a/t/db_helper/payment.t +++ b/t/db_helper/payment.t @@ -1,4 +1,5 @@ -use Test::More; +use strict; +use Test::More tests => 197; use strict; @@ -32,11 +33,64 @@ my ($customer, $vendor, $currency_id, @parts, $buchungsgruppe, $buchungsgruppe7, my ($transdate1, $transdate2, $transdate3, $transdate4, $currency, $exchangerate, $exchangerate2, $exchangerate3, $exchangerate4); my ($ar_chart,$bank,$ar_amount_chart, $ap_chart, $ap_amount_chart, $fxloss_chart, $fxgain_chart); -my $ALWAYS_RESET = 1; +my $purchase_invoice_counter = 0; # used for generating purchase invnumber + +Support::TestSetup::login(); -my $reset_state_counter = 0; +init_state(); + +# test cases: without_skonto +test_default_invoice_one_item_19_without_skonto(); +test_default_invoice_two_items_19_7_tax_with_skonto(); +test_default_invoice_two_items_19_7_without_skonto(); +test_default_invoice_two_items_19_7_without_skonto_incomplete_payment(); +test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments(); +test_default_purchase_invoice_two_charts_19_7_without_skonto(); +test_default_purchase_invoice_two_charts_19_7_tax_partial_unrounded_payment_without_skonto(); +test_default_invoice_one_item_19_without_skonto_overpaid(); +test_credit_note_two_items_19_7_tax_tax_not_included(); + +# test cases: difference_as_skonto +test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto(); +test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto_1cent(); +test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto_2cent(); +test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto(); +test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto_1cent(); +test_default_purchase_invoice_two_charts_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto(); + +# test cases: with_skonto_pt +test_default_invoice_two_items_19_7_tax_with_skonto_50_50(); +test_default_invoice_four_items_19_7_tax_with_skonto_4x_25(); +test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_multiple(); +test_default_purchase_invoice_two_charts_19_7_with_skonto(); +test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_tax_included(); +test_default_invoice_two_items_19_7_tax_with_skonto_tax_included(); + +# test payment of ar and ap transactions with currency and tax included/not included +# exchangerate = 1.33333 +test_ar_currency_tax_not_included_and_payment(); +test_ar_currency_tax_included(); +test_ap_currency_tax_not_included_and_payment(); +test_ap_currency_tax_included(); + +test_ar_currency_tax_not_included_and_payment_2(); # exchangerate 0.8 +test_ar_currency_tax_not_included_and_payment_2_credit_note(); # exchangerate 0.8 + +test_ap_currency_tax_not_included_and_payment_2(); # two exchangerates, with fx_gain_loss +test_ap_currency_tax_not_included_and_payment_2_credit_note(); # two exchangerates, with fx_gain_loss + +is(SL::DB::Manager::Invoice->get_all_count(), 21, "number of invoices at end of tests ok"); +TODO: { + local $TODO = "currently this test fails because the code writing the invoice is buggy, the calculation of skonto is correct"; + my ($acc_trans_sum) = selectfirst_array_query($::form, $currency->db->dbh, 'SELECT SUM(amount) FROM acc_trans'); + is($acc_trans_sum, '0.00000', "sum of all acc_trans at end of all tests is 0"); +} + +# remove all created data at end of test +clear_up(); + +done_testing(); -my $purchase_invoice_counter = 0; # used for generating purchase invnumber sub clear_up { SL::DB::Manager::InvoiceItem->delete_all(all => 1); @@ -51,13 +105,9 @@ sub clear_up { SL::DB::Manager::Currency->delete_all(where => [ name => 'CUR' ]); }; -sub reset_state { +sub init_state { my %params = @_; - return if $reset_state_counter; - - $params{$_} ||= {} for qw(buchungsgruppe unit customer part tax vendor); - clear_up(); $transdate1 = DateTime->today; @@ -65,15 +115,15 @@ sub reset_state { $transdate3 = DateTime->today->add(days => 2); $transdate4 = DateTime->today->add(days => 3); - $buchungsgruppe = SL::DB::Manager::Buchungsgruppe->find_by(description => 'Standard 19%', %{ $params{buchungsgruppe} }) || croak "No accounting group"; - $buchungsgruppe7 = SL::DB::Manager::Buchungsgruppe->find_by(description => 'Standard 7%') || croak "No accounting group for 7\%"; - $unit = SL::DB::Manager::Unit->find_by(name => 'kg', %{ $params{unit} }) || croak "No unit"; - $employee = SL::DB::Manager::Employee->current || croak "No employee"; - $tax = SL::DB::Manager::Tax->find_by(taxkey => 3, rate => 0.19, %{ $params{tax} }) || croak "No tax"; - $tax7 = SL::DB::Manager::Tax->find_by(taxkey => 2, rate => 0.07) || croak "No tax for 7\%"; - $taxzone = SL::DB::Manager::TaxZone->find_by( description => 'Inland') || croak "No taxzone"; - $tax_9 = SL::DB::Manager::Tax->find_by(taxkey => 9, rate => 0.19, %{ $params{tax} }) || croak "No tax"; - # $tax7 = SL::DB::Manager::Tax->find_by(taxkey => 2, rate => 0.07) || croak "No tax for 7\%"; + $buchungsgruppe = SL::DB::Manager::Buchungsgruppe->find_by(description => 'Standard 19%') || croak "No accounting group"; + $buchungsgruppe7 = SL::DB::Manager::Buchungsgruppe->find_by(description => 'Standard 7%') || croak "No accounting group for 7\%"; + $unit = SL::DB::Manager::Unit->find_by(name => 'kg') || croak "No unit"; + $employee = SL::DB::Manager::Employee->current || croak "No employee"; + $tax = SL::DB::Manager::Tax->find_by(taxkey => 3, rate => 0.19) || croak "No tax"; + $tax7 = SL::DB::Manager::Tax->find_by(taxkey => 2, rate => 0.07) || croak "No tax for 7\%"; + $taxzone = SL::DB::Manager::TaxZone->find_by( description => 'Inland') || croak "No taxzone"; + $tax_9 = SL::DB::Manager::Tax->find_by(taxkey => 9, rate => 0.19) || croak "No tax"; + # $tax7 = SL::DB::Manager::Tax->find_by(taxkey => 2, rate => 0.07) || croak "No tax for 7\%"; $currency_id = $::instance_conf->get_currency_id; @@ -186,8 +236,6 @@ sub reset_state { $bank = SL::DB::Manager::Chart->find_by( accno => '1200' ); # Bank $ar_amount_chart = SL::DB::Manager::Chart->find_by( accno => '8400' ); # Erlöse $ap_amount_chart = SL::DB::Manager::Chart->find_by( accno => '3400' ); # Wareneingang 19% - - $reset_state_counter++; } sub new_purchase_invoice { @@ -300,8 +348,7 @@ sub total_amount { # test 1 sub test_default_invoice_one_item_19_without_skonto() { - reset_state() if $ALWAYS_RESET; - + my $title = 'default invoice, one item, 19% tax, without_skonto'; my $item = create_invoice_item(part => $parts[0], qty => 2.5); my $invoice = create_sales_invoice( taxincluded => 0, @@ -324,8 +371,6 @@ sub test_default_invoice_one_item_19_without_skonto() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, one item, 19% tax, without_skonto'; - is($invoice->netamount, 5.85, "${title}: netamount"); is($invoice->amount, 6.96, "${title}: amount"); is($paid_amount, -6.96, "${title}: paid amount"); @@ -336,7 +381,7 @@ sub test_default_invoice_one_item_19_without_skonto() { } sub test_default_invoice_one_item_19_without_skonto_overpaid() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, one item, 19% tax, without_skonto'; my $item = create_invoice_item(part => $parts[0], qty => 2.5); my $invoice = create_sales_invoice( @@ -363,8 +408,6 @@ sub test_default_invoice_one_item_19_without_skonto_overpaid() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, one item, 19% tax, without_skonto'; - is($invoice->netamount, 5.85, "${title}: netamount"); is($invoice->amount, 6.96, "${title}: amount"); is($paid_amount, -6.96, "${title}: paid amount"); @@ -377,7 +420,7 @@ sub test_default_invoice_one_item_19_without_skonto_overpaid() { # test 2 sub test_default_invoice_two_items_19_7_tax_with_skonto() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax with_skonto_pt'; my $item1 = create_invoice_item(part => $parts[0], qty => 2.5); my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); @@ -400,8 +443,6 @@ sub test_default_invoice_two_items_19_7_tax_with_skonto() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, two items, 19/7% tax with_skonto_pt'; - is($invoice->netamount, 5.85 + 11.66, "${title}: netamount"); is($invoice->amount, 6.96 + 12.48, "${title}: amount"); is($paid_amount, -19.44, "${title}: paid amount"); @@ -411,7 +452,7 @@ sub test_default_invoice_two_items_19_7_tax_with_skonto() { } sub test_default_invoice_two_items_19_7_tax_with_skonto_tax_included() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax with_skonto_pt'; my $item1 = create_invoice_item(part => $parts[0], qty => 2.5); my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); @@ -434,21 +475,21 @@ sub test_default_invoice_two_items_19_7_tax_with_skonto_tax_included() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, two items, 19/7% tax with_skonto_pt'; - is($invoice->netamount, 15.82, "${title}: netamount"); is($invoice->amount, 17.51, "${title}: amount"); is($paid_amount, -17.51, "${title}: paid amount"); is($invoice->paid, 17.51, "${title}: paid"); is($number_of_payments, 3, "${title}: 3 AR_paid bookings"); - { local $TODO = "currently this test fails because the code writing the invoice is buggy, the calculation of skonto is correct"; + +TODO: { + local $TODO = "currently this test fails because the code writing the invoice is buggy, the calculation of skonto is correct"; is($total, 0, "${title}: even balance"); } } # test 3 : two items, without skonto sub test_default_invoice_two_items_19_7_without_skonto() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax without skonto'; my $item1 = create_invoice_item(part => $parts[0], qty => 2.5); my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); @@ -471,8 +512,6 @@ sub test_default_invoice_two_items_19_7_without_skonto() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, two items, 19/7% tax without skonto'; - is($invoice->netamount, 5.85 + 11.66, "${title}: netamount"); is($invoice->amount, 6.96 + 12.48, "${title}: amount"); is($paid_amount, -19.44, "${title}: paid amount"); @@ -483,7 +522,7 @@ sub test_default_invoice_two_items_19_7_without_skonto() { # test 4 sub test_default_invoice_two_items_19_7_without_skonto_incomplete_payment() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax without skonto incomplete payment'; my $item1 = create_invoice_item(part => $parts[0], qty => 2.5); my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); @@ -502,8 +541,6 @@ sub test_default_invoice_two_items_19_7_without_skonto_incomplete_payment() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, two items, 19/7% tax without skonto incomplete payment'; - is($invoice->netamount, 5.85 + 11.66, "${title}: netamount"); is($invoice->amount, 6.96 + 12.48, "${title}: amount"); is($paid_amount, -9.44, "${title}: paid amount"); @@ -514,7 +551,7 @@ sub test_default_invoice_two_items_19_7_without_skonto_incomplete_payment() { # test 5 sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax not included'; my $item1 = create_invoice_item(part => $parts[0], qty => 2.5); my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); @@ -537,8 +574,6 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, two items, 19/7% tax not included'; - is($invoice->netamount, 5.85 + 11.66, "${title}: netamount"); is($invoice->amount, 6.96 + 12.48, "${title}: amount"); is($paid_amount, -19.44, "${title}: paid amount"); @@ -550,7 +585,7 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments() { # test 6 sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax not included'; my $item1 = create_invoice_item(part => $parts[0], qty => 2.5); my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); @@ -579,8 +614,6 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fin my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, two items, 19/7% tax not included'; - is($invoice->netamount, 5.85 + 11.66, "${title}: netamount"); is($invoice->amount, 6.96 + 12.48, "${title}: amount"); is($paid_amount, -19.44, "${title}: paid amount"); @@ -591,7 +624,7 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fin } sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto_1cent() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax not included'; # if there is only one cent left there can only be one skonto booking, the # error handling should choose the highest amount, which is the 7% account @@ -620,8 +653,6 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fi my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, two items, 19/7% tax not included'; - is($invoice->netamount, 5.85 + 11.66, "${title}: netamount"); is($invoice->amount, 6.96 + 12.48, "${title}: amount"); is($paid_amount, -19.44, "${title}: paid amount"); @@ -632,7 +663,7 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fi } sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto_2cent() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax not included'; # if there are two cents left there will be two skonto bookings, 1 cent each my $item1 = create_invoice_item(part => $parts[0], qty => 2.5); @@ -657,8 +688,6 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fin my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, two items, 19/7% tax not included'; - is($invoice->netamount, 5.85 + 11.66, "${title}: netamount"); is($invoice->amount, 6.96 + 12.48, "${title}: amount"); is($paid_amount, -19.44, "${title}: paid amount"); @@ -669,7 +698,7 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fin } sub test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, one item, 19% tax, without_skonto'; my $item = create_invoice_item(part => $parts[0], qty => 2.5); my $invoice = create_sales_invoice( @@ -698,8 +727,6 @@ sub test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, one item, 19% tax, without_skonto'; - is($invoice->netamount, 5.85, "${title}: netamount"); is($invoice->amount, 6.96, "${title}: amount"); is($paid_amount, -6.96, "${title}: paid amount"); @@ -710,7 +737,7 @@ sub test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto } sub test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto_1cent() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, one item, 19% tax, without_skonto'; my $item = create_invoice_item(part => $parts[0], qty => 2.5); my $invoice = create_sales_invoice( @@ -735,8 +762,6 @@ sub test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, one item, 19% tax, without_skonto'; - is($invoice->netamount, 5.85, "${title}: netamount"); is($invoice->amount, 6.96, "${title}: amount"); is($paid_amount, -6.96, "${title}: paid amount"); @@ -748,7 +773,7 @@ sub test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto # test 3 : two items, without skonto sub test_default_purchase_invoice_two_charts_19_7_without_skonto() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax without skonto'; my $purchase_invoice = new_purchase_invoice(); @@ -764,8 +789,6 @@ sub test_default_purchase_invoice_two_charts_19_7_without_skonto() { my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice); my $total = total_amount($purchase_invoice); - my $title = 'default invoice, two items, 19/7% tax without skonto'; - is($paid_amount, 226, "${title}: paid amount"); is($number_of_payments, 1, "${title}: 1 AP_paid bookings"); is($total, 0, "${title}: even balance"); @@ -773,7 +796,7 @@ sub test_default_purchase_invoice_two_charts_19_7_without_skonto() { } sub test_default_purchase_invoice_two_charts_19_7_with_skonto() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax without skonto'; my $purchase_invoice = new_purchase_invoice(); @@ -789,8 +812,6 @@ sub test_default_purchase_invoice_two_charts_19_7_with_skonto() { my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice); my $total = total_amount($purchase_invoice); - my $title = 'default invoice, two items, 19/7% tax without skonto'; - is($paid_amount, 226, "${title}: paid amount"); is($number_of_payments, 3, "${title}: 1 AP_paid bookings"); is($total, 0, "${title}: even balance"); @@ -798,8 +819,9 @@ sub test_default_purchase_invoice_two_charts_19_7_with_skonto() { } sub test_default_purchase_invoice_two_charts_19_7_tax_partial_unrounded_payment_without_skonto() { + my $title = 'default purchase_invoice, two charts, 19/7% tax multiple payments with final difference as skonto'; + # check whether unrounded amounts passed via $params{amount} are rounded for without_skonto case - reset_state() if $ALWAYS_RESET; my $purchase_invoice = new_purchase_invoice(); $purchase_invoice->pay_invoice( amount => ( $purchase_invoice->amount / 3 * 2), @@ -810,8 +832,6 @@ sub test_default_purchase_invoice_two_charts_19_7_tax_partial_unrounded_payment_ my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice); my $total = total_amount($purchase_invoice); - my $title = 'default purchase_invoice, two charts, 19/7% tax multiple payments with final difference as skonto'; - is($paid_amount, 150.67, "${title}: paid amount"); is($number_of_payments, 1, "${title}: 1 AP_paid bookings"); is($total, 0, "${title}: even balance"); @@ -819,7 +839,7 @@ sub test_default_purchase_invoice_two_charts_19_7_tax_partial_unrounded_payment_ sub test_default_purchase_invoice_two_charts_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto() { - reset_state() if $ALWAYS_RESET; + my $title = 'default purchase_invoice, two charts, 19/7% tax multiple payments with final difference as skonto'; my $purchase_invoice = new_purchase_invoice(); @@ -845,8 +865,6 @@ sub test_default_purchase_invoice_two_charts_19_7_tax_without_skonto_multiple_pa my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice); my $total = total_amount($purchase_invoice); - my $title = 'default purchase_invoice, two charts, 19/7% tax multiple payments with final difference as skonto'; - is($paid_amount, 226, "${title}: paid amount"); is($number_of_payments, 4, "${title}: 1 AP_paid bookings"); is($total, 0, "${title}: even balance"); @@ -855,7 +873,7 @@ sub test_default_purchase_invoice_two_charts_19_7_tax_without_skonto_multiple_pa # test sub test_default_invoice_two_items_19_7_tax_with_skonto_50_50() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, two items, 19/7% tax with_skonto_pt 50/50'; my $item1 = create_invoice_item(part => $parts[2], qty => 1); my $item2 = create_invoice_item(part => $parts[3], qty => 1); @@ -878,8 +896,6 @@ sub test_default_invoice_two_items_19_7_tax_with_skonto_50_50() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, two items, 19/7% tax with_skonto_pt 50/50'; - is($invoice->netamount, 100, "${title}: netamount"); is($invoice->amount, 113, "${title}: amount"); is($paid_amount, -113, "${title}: paid amount"); @@ -890,7 +906,7 @@ sub test_default_invoice_two_items_19_7_tax_with_skonto_50_50() { # test sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25'; my $item1 = create_invoice_item(part => $parts[2], qty => 0.5); my $item2 = create_invoice_item(part => $parts[3], qty => 0.5); @@ -915,8 +931,6 @@ sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25'; - is($invoice->netamount , 100 , "${title}: netamount"); is($invoice->amount , 113 , "${title}: amount"); is($paid_amount , -113 , "${title}: paid amount"); @@ -926,7 +940,7 @@ sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25() { } sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_tax_included() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25'; my $item1 = create_invoice_item(part => $parts[2], qty => 0.5); my $item2 = create_invoice_item(part => $parts[3], qty => 0.5); @@ -951,20 +965,19 @@ sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_tax_included() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25'; - is($invoice->netamount, 88.75, "${title}: netamount"); is($invoice->amount, 100, "${title}: amount"); is($paid_amount, -100, "${title}: paid amount"); is($invoice->paid, 100, "${title}: paid"); is($number_of_payments, 3, "${title}: 3 AR_paid bookings"); - { local $TODO = "currently this test fails because the code writing the invoice is buggy, the calculation of skonto is correct"; +TODO: { + local $TODO = "currently this test fails because the code writing the invoice is buggy, the calculation of skonto is correct"; is($total, 0, "${title}: even balance"); } } sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_multiple() { - reset_state() if $ALWAYS_RESET; + my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25'; my $item1 = create_invoice_item(part => $parts[2], qty => 0.5); my $item2 = create_invoice_item(part => $parts[3], qty => 0.5); @@ -989,8 +1002,6 @@ sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_multiple() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25'; - is($invoice->netamount, 100, "${title}: netamount"); is($invoice->amount, 113, "${title}: amount"); is($paid_amount, -113, "${title}: paid amount"); @@ -1000,6 +1011,8 @@ sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_multiple() { } sub test_ar_currency_tax_not_included_and_payment { + my $title = 'test_ar_currency_tax_not_included_and_payment_2'; + my $netamount = $::form->round_amount(75 * $exchangerate->sell,2); # 75 in CUR, 100.00 in EUR my $amount = $::form->round_amount($netamount * 1.19,2); # 100 in CUR, 119.00 in EUR my $invoice = SL::DB::Invoice->new( @@ -1050,6 +1063,8 @@ sub test_ar_currency_tax_not_included_and_payment { }; sub test_ar_currency_tax_included { + my $title = 'test_ar_currency_tax_included'; + # we want the acc_trans amount to be 100 my $amount = $::form->round_amount(75 * $exchangerate->sell * 1.19); my $netamount = $::form->round_amount($amount / 1.19,2); @@ -1089,6 +1104,8 @@ sub test_ar_currency_tax_included { }; sub test_ap_currency_tax_not_included_and_payment { + my $title = 'test_ap_currency_tax_not_included_and_payment'; + my $netamount = $::form->round_amount(75 * $exchangerate->buy,2); # 75 in CUR, 100.00 in EUR my $amount = $::form->round_amount($netamount * 1.19,2); # 100 in CUR, 119.00 in EUR my $invoice = SL::DB::PurchaseInvoice->new( @@ -1135,6 +1152,8 @@ sub test_ap_currency_tax_not_included_and_payment { }; sub test_ap_currency_tax_included { + my $title = 'test_ap_currency_tax_included'; + # we want the acc_trans amount to be 100 my $amount = $::form->round_amount(75 * $exchangerate->buy * 1.19); my $netamount = $::form->round_amount($amount / 1.19,2); @@ -1176,6 +1195,7 @@ sub test_ap_currency_tax_included { sub test_ar_currency_tax_not_included_and_payment_2 { my $title = 'test_ar_currency_tax_not_included_and_payment_2'; + my $netamount = $::form->round_amount(125 * $exchangerate2->sell,2); # 125.00 in CUR, 100.00 in EUR my $amount = $::form->round_amount($netamount * 1.19,2); # 148.75 in CUR, 119.00 in EUR my $invoice = SL::DB::Invoice->new( @@ -1235,6 +1255,8 @@ sub test_ar_currency_tax_not_included_and_payment_2 { }; sub test_ar_currency_tax_not_included_and_payment_2_credit_note { + my $title = 'test_ar_currency_tax_not_included_and_payment_2_credit_note'; + my $netamount = $::form->round_amount(-125 * $exchangerate2->sell,2); # 125.00 in CUR, 100.00 in EUR my $amount = $::form->round_amount($netamount * 1.19,2); # 148.75 in CUR, 119.00 in EUR my $invoice = SL::DB::Invoice->new( @@ -1286,6 +1308,7 @@ sub test_ar_currency_tax_not_included_and_payment_2_credit_note { sub test_ap_currency_tax_not_included_and_payment_2 { my $title = 'test_ap_currency_tax_not_included_and_payment_2'; + my $netamount = $::form->round_amount(125 * $exchangerate2->sell,2); # 125.00 in CUR, 100.00 in EUR my $amount = $::form->round_amount($netamount * 1.19,2); # 148.75 in CUR, 119.00 in EUR my $invoice = SL::DB::PurchaseInvoice->new( @@ -1350,6 +1373,7 @@ sub test_ap_currency_tax_not_included_and_payment_2 { sub test_ap_currency_tax_not_included_and_payment_2_credit_note { my $title = 'test_ap_currency_tax_not_included_and_payment_2_credit_note'; + my $netamount = $::form->round_amount(-125 * $exchangerate2->sell,2); # 125.00 in CUR, 100.00 in EUR my $amount = $::form->round_amount($netamount * 1.19,2); # 148.75 in CUR, 119.00 in EUR my $invoice = SL::DB::PurchaseInvoice->new( @@ -1410,8 +1434,8 @@ sub test_ap_currency_tax_not_included_and_payment_2_credit_note { is(total_amount($invoice), 0, "$title: even balance"); }; -sub test_credit_note_two_items_19_7_tax_tax_not_included() { - reset_state() if $ALWAYS_RESET; +sub test_credit_note_two_items_19_7_tax_tax_not_included { + my $title = 'test_credit_note_two_items_19_7_tax_tax_not_included'; my $item1 = create_invoice_item(part => $parts[0], qty => 5); my $item2 = create_invoice_item(part => $parts[1], qty => 3); @@ -1433,8 +1457,6 @@ sub test_credit_note_two_items_19_7_tax_tax_not_included() { my ($number_of_payments, $paid_amount) = number_of_payments($invoice); my $total = total_amount($invoice); - my $title = 'credit_note, two items, 19/7%, tax not included'; - is($invoice->netamount, -40.84, "${title}: netamount"); is($invoice->amount, -45.10, "${title}: amount"); is($paid_amount, 45.10, "${title}: paid amount according to acc_trans is positive (Haben)"); @@ -1443,55 +1465,4 @@ sub test_credit_note_two_items_19_7_tax_tax_not_included() { is($total, 0, "${title}: even balance"); } -Support::TestSetup::login(); - -# test cases: without_skonto -test_default_invoice_one_item_19_without_skonto(); -test_default_invoice_two_items_19_7_tax_with_skonto(); -test_default_invoice_two_items_19_7_without_skonto(); -test_default_invoice_two_items_19_7_without_skonto_incomplete_payment(); -test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments(); -test_default_purchase_invoice_two_charts_19_7_without_skonto(); -test_default_purchase_invoice_two_charts_19_7_tax_partial_unrounded_payment_without_skonto(); -test_default_invoice_one_item_19_without_skonto_overpaid(); -test_credit_note_two_items_19_7_tax_tax_not_included(); - -# test cases: difference_as_skonto -test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto(); -test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto_1cent(); -test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto_2cent(); -test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto(); -test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto_1cent(); -test_default_purchase_invoice_two_charts_19_7_tax_without_skonto_multiple_payments_final_difference_as_skonto(); - -# test cases: with_skonto_pt -test_default_invoice_two_items_19_7_tax_with_skonto_50_50(); -test_default_invoice_four_items_19_7_tax_with_skonto_4x_25(); -test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_multiple(); -test_default_purchase_invoice_two_charts_19_7_with_skonto(); -test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_tax_included(); -test_default_invoice_two_items_19_7_tax_with_skonto_tax_included(); - -# test payment of ar and ap transactions with currency and tax included/not included -# exchangerate = 1.33333 -test_ar_currency_tax_not_included_and_payment(); -test_ar_currency_tax_included(); -test_ap_currency_tax_not_included_and_payment(); -test_ap_currency_tax_included(); - -test_ar_currency_tax_not_included_and_payment_2(); # exchangerate 0.8 -test_ar_currency_tax_not_included_and_payment_2_credit_note(); # exchangerate 0.8 - -test_ap_currency_tax_not_included_and_payment_2(); # two exchangerates, with fx_gain_loss -test_ap_currency_tax_not_included_and_payment_2_credit_note(); # two exchangerates, with fx_gain_loss - -{ local $TODO = "currently this test fails because the code writing the invoice is buggy, the calculation of skonto is correct"; - my ($acc_trans_sum) = selectfirst_array_query($::form, $currency->db->dbh, 'SELECT SUM(amount) FROM acc_trans'); is($acc_trans_sum, '0.00000', "sum of all acc_trans is 0"); -} - -# remove all created data at end of test -clear_up(); - -done_testing(); - 1;