X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/a46027e742761ba5a013adef5e67142b28ec64d9..91fef42d0f6c2e37f276d97a0f5b444420e51a00:/t/db_helper/payment.t diff --git a/t/db_helper/payment.t b/t/db_helper/payment.t index a6437f729..290582b3e 100644 --- a/t/db_helper/payment.t +++ b/t/db_helper/payment.t @@ -14,6 +14,8 @@ use List::Util qw(sum); use SL::Dev::Record qw(create_invoice_item create_sales_invoice create_credit_note create_ap_transaction); use SL::Dev::CustomerVendor qw(new_customer new_vendor); use SL::Dev::Part qw(new_part); +use SL::DB::BankTransaction; +use SL::DB::BankTransactionAccTrans; use SL::DB::Buchungsgruppe; use SL::DB::Currency; use SL::DB::Exchangerate; @@ -29,7 +31,8 @@ use SL::DB::PaymentTerm; use SL::DBUtils qw(selectfirst_array_query); use Data::Dumper; -my ($customer, $vendor, $currency_id, @parts, $buchungsgruppe, $buchungsgruppe7, $unit, $employee, $tax, $tax7, $tax_9, $taxzone, $payment_terms, $bank_account); +my ($customer, $vendor, $currency_id, @parts, $buchungsgruppe, $buchungsgruppe7, $unit, $employee, $tax, $tax7, $tax_9, $taxzone, $payment_terms, + $bank_account, $bt); 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); @@ -99,6 +102,8 @@ sub clear_up { SL::DB::Manager::Part->delete_all(all => 1); SL::DB::Manager::Customer->delete_all(all => 1); SL::DB::Manager::Vendor->delete_all(all => 1); + SL::DB::Manager::BankTransactionAccTrans->delete_all(all => 1); + SL::DB::Manager::BankTransaction->delete_all(all => 1); SL::DB::Manager::BankAccount->delete_all(all => 1); SL::DB::Manager::PaymentTerm->delete_all(all => 1); SL::DB::Manager::Exchangerate->delete_all(all => 1); @@ -110,10 +115,11 @@ sub init_state { clear_up(); - $transdate1 = DateTime->today; - $transdate2 = DateTime->today->add(days => 1); - $transdate3 = DateTime->today->add(days => 2); - $transdate4 = DateTime->today->add(days => 3); + $transdate1 = DateTime->today_local; + $transdate1->set_year(2019) if $transdate1->year == 2020; # hardcode for 2019 in 2020, because of tax rate change in Germany + $transdate2 = $transdate1->clone->add(days => 1); + $transdate3 = $transdate1->clone->add(days => 2); + $transdate4 = $transdate1->clone->add(days => 3); $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\%"; @@ -236,6 +242,17 @@ sub init_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% + + $bt = SL::DB::BankTransaction->new( + local_bank_account_id => $bank_account->id, + transdate => $transdate1, + valutadate => $transdate1, + amount => 27332.32, + purpose => 'dummy', + currency => $currency, + ); + $bt->save || die $@; + } sub new_ap_transaction { @@ -294,6 +311,7 @@ sub test_default_invoice_one_item_19_without_skonto { 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( + transdate => $transdate1, taxincluded => 0, invoiceitems => [ $item ], payment_id => $payment_terms->id, @@ -303,7 +321,7 @@ sub test_default_invoice_one_item_19_without_skonto { # default values my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $params{amount} = '6.96'; @@ -329,6 +347,7 @@ sub test_default_invoice_one_item_19_without_skonto_overpaid { my $item = create_invoice_item(part => $parts[0], qty => 2.5); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item ], payment_id => $payment_terms->id, ); @@ -338,7 +357,7 @@ sub test_default_invoice_one_item_19_without_skonto_overpaid { # default values my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $params{amount} = '16.96'; @@ -369,13 +388,15 @@ sub test_default_invoice_two_items_19_7_tax_with_skonto { my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item1, $item2 ], payment_id => $payment_terms->id, ); # default values - my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + my %params = ( chart_id => $bank_account->chart_id, + transdate => $transdate1, + bt_id => $bt->id, ); $params{payment_type} = 'with_skonto_pt'; @@ -400,14 +421,16 @@ sub test_default_invoice_two_items_19_7_tax_with_skonto_tax_included { my $item1 = create_invoice_item(part => $parts[0], qty => 2.5); my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); my $invoice = create_sales_invoice( + transdate => $transdate1, taxincluded => 1, invoiceitems => [ $item1, $item2 ], payment_id => $payment_terms->id, ); # default values - my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + my %params = ( chart_id => $bank_account->chart_id, + transdate => $transdate1, + bt_id => $bt->id, ); $params{payment_type} = 'with_skonto_pt'; @@ -437,6 +460,7 @@ sub test_default_invoice_two_items_19_7_without_skonto { my $item1 = create_invoice_item(part => $parts[0], qty => 2.5); my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); my $invoice = create_sales_invoice( + transdate => $transdate1, taxincluded => 0, invoiceitems => [ $item1, $item2 ], payment_id => $payment_terms->id, @@ -444,7 +468,7 @@ sub test_default_invoice_two_items_19_7_without_skonto { # default values my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $params{amount} = '19.44'; # pass full amount @@ -471,6 +495,7 @@ sub test_default_invoice_two_items_19_7_without_skonto_incomplete_payment { my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item1, $item2 ], payment_id => $payment_terms->id, ); @@ -478,7 +503,7 @@ sub test_default_invoice_two_items_19_7_without_skonto_incomplete_payment { $invoice->pay_invoice( amount => '9.44', payment_type => 'without_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo, + transdate => $transdate1, ); my ($number_of_payments, $paid_amount) = number_of_payments($invoice); @@ -499,6 +524,7 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments { my $item1 = create_invoice_item(part => $parts[0], qty => 2.5); my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); my $invoice = create_sales_invoice( + transdate => $transdate1, taxincluded => 0, invoiceitems => [ $item1, $item2 ], payment_id => $payment_terms->id, @@ -507,11 +533,11 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments { $invoice->pay_invoice( amount => '9.44', payment_type => 'without_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $invoice->pay_invoice( amount => '10.00', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); my ($number_of_payments, $paid_amount) = number_of_payments($invoice); @@ -534,6 +560,7 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fin my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item1, $item2 ], payment_id => $payment_terms->id, ); @@ -541,17 +568,18 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fin $invoice->pay_invoice( amount => '9.44', payment_type => 'without_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $invoice->pay_invoice( amount => '8.73', payment_type => 'without_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $invoice->pay_invoice( amount => $invoice->open_amount, payment_type => 'difference_as_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, + bt_id => $bt->id, ); my ($number_of_payments, $paid_amount) = number_of_payments($invoice); @@ -578,6 +606,7 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fi my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item1, $item2 ], payment_id => $payment_terms->id, ); @@ -585,12 +614,13 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fi $invoice->pay_invoice( amount => '19.42', payment_type => 'without_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $invoice->pay_invoice( amount => $invoice->open_amount, payment_type => 'difference_as_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, + bt_id => $bt->id, ); my ($number_of_payments, $paid_amount) = number_of_payments($invoice); @@ -613,6 +643,7 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fin my $item2 = create_invoice_item(part => $parts[1], qty => 1.2); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item1, $item2 ], payment_id => $payment_terms->id, ); @@ -620,12 +651,13 @@ sub test_default_invoice_two_items_19_7_tax_without_skonto_multiple_payments_fin $invoice->pay_invoice( amount => '19.42', payment_type => 'without_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $invoice->pay_invoice( amount => $invoice->open_amount, payment_type => 'difference_as_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, + bt_id => $bt->id, ); my ($number_of_payments, $paid_amount) = number_of_payments($invoice); @@ -646,13 +678,15 @@ sub test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto my $item = create_invoice_item(part => $parts[0], qty => 2.5); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item ], payment_id => $payment_terms->id, ); # default values my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, + bt_id => $bt->id, ); $params{amount} = '2.32'; @@ -685,13 +719,15 @@ sub test_default_invoice_one_item_19_multiple_payment_final_difference_as_skonto my $item = create_invoice_item(part => $parts[0], qty => 2.5); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item ], payment_id => $payment_terms->id, ); # default values my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, + bt_id => $bt->id, ); $params{amount} = '6.95'; @@ -721,7 +757,7 @@ sub test_default_ap_transaction_two_charts_19_7_without_skonto { my $ap_transaction = new_ap_transaction(); my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $params{amount} = '226'; # pass full amount @@ -743,13 +779,15 @@ sub test_default_ap_transaction_two_charts_19_7_with_skonto { my $ap_transaction = new_ap_transaction(); - my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + my %params = ( chart_id => $bank_account->chart_id, + transdate => $transdate1, + bt_id => $bt->id, ); # $params{amount} = '226'; # pass full amount $params{payment_type} = 'with_skonto_pt'; + $ap_transaction->payment_terms($ap_transaction->vendor->payment); $ap_transaction->pay_invoice( %params ); my ($number_of_payments, $paid_amount) = number_of_payments($ap_transaction); @@ -770,7 +808,7 @@ sub test_default_ap_transaction_two_charts_19_7_tax_partial_unrounded_payment_wi amount => ( $ap_transaction->amount / 3 * 2), payment_type => 'without_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); my ($number_of_payments, $paid_amount) = number_of_payments($ap_transaction); my $total = total_amount($ap_transaction); @@ -791,18 +829,19 @@ sub test_default_ap_transaction_two_charts_19_7_tax_without_skonto_multiple_paym amount => ( $ap_transaction->amount / 3 * 2), payment_type => 'without_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $ap_transaction->pay_invoice( amount => ( $ap_transaction->amount / 5 ), payment_type => 'without_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $ap_transaction->pay_invoice( payment_type => 'difference_as_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, + bt_id => $bt->id, ); my ($number_of_payments, $paid_amount) = number_of_payments($ap_transaction); @@ -822,13 +861,15 @@ sub test_default_invoice_two_items_19_7_tax_with_skonto_50_50 { my $item2 = create_invoice_item(part => $parts[3], qty => 1); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item1, $item2 ], payment_id => $payment_terms->id, ); # default values my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, + bt_id => $bt->id, ); $params{amount} = $invoice->amount_less_skonto; @@ -857,13 +898,15 @@ sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25 { my $item4 = create_invoice_item(part => $parts[3], qty => 0.5); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item1, $item2, $item3, $item4 ], payment_id => $payment_terms->id, ); # default values my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, + bt_id => $bt->id, ); $params{amount} = $invoice->amount_less_skonto; @@ -891,13 +934,15 @@ sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_tax_included { my $item4 = create_invoice_item(part => $parts[3], qty => 0.5); my $invoice = create_sales_invoice( taxincluded => 1, + transdate => $transdate1, invoiceitems => [ $item1, $item2, $item3, $item4 ], payment_id => $payment_terms->id, ); # default values my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, + bt_id => $bt->id, ); $params{amount} = $invoice->amount_less_skonto; @@ -928,6 +973,7 @@ sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_multiple { my $item4 = create_invoice_item(part => $parts[3], qty => 0.5); my $invoice = create_sales_invoice( taxincluded => 0, + transdate => $transdate1, invoiceitems => [ $item1, $item2, $item3, $item4 ], payment_id => $payment_terms->id, ); @@ -935,11 +981,12 @@ sub test_default_invoice_four_items_19_7_tax_with_skonto_4x_25_multiple { $invoice->pay_invoice( amount => '90', payment_type => 'without_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, ); $invoice->pay_invoice( payment_type => 'difference_as_skonto', chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo + transdate => $transdate1, + bt_id => $bt->id, ); my ($number_of_payments, $paid_amount) = number_of_payments($invoice); @@ -1384,13 +1431,14 @@ sub test_credit_note_two_items_19_7_tax_tax_not_included { my $item2 = create_invoice_item(part => $parts[1], qty => 3); my $invoice = create_credit_note( invnumber => 'cn1', + transdate => $transdate1, taxincluded => 0, invoiceitems => [ $item1, $item2 ], ); # default values my %params = ( chart_id => $bank_account->chart_id, - transdate => DateTime->today_local->to_kivitendo, + transdate => $transdate1, ); $params{amount} = $invoice->amount,