+sub test_ar_currency_tax_not_included_and_payment {
+ 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(
+ invoice => 0,
+ amount => $amount,
+ netamount => $netamount,
+ transdate => $transdate,
+ taxincluded => 0,
+ customer_id => $customer->id,
+ taxzone_id => $customer->taxzone_id,
+ currency_id => $currency->id,
+ transactions => [],
+ notes => 'test_ar_currency_tax_not_included_and_payment',
+ );
+ $invoice->add_ar_amount_row(
+ amount => $invoice->netamount,
+ chart => $ar_amount_chart,
+ tax_id => $tax->id,
+ );
+
+ $invoice->create_ar_row(chart => $ar_chart);
+ $invoice->save;
+
+ is(SL::DB::Manager::Invoice->get_all_count(where => [ invoice => 0 ]), 1, 'there is one ar transaction');
+ is($invoice->currency_id , $currency->id , 'currency_id has been saved');
+ is($invoice->netamount , 100 , 'ar amount has been converted');
+ is($invoice->amount , 119 , 'ar amount has been converted');
+ is($invoice->taxincluded , 0 , 'ar transaction doesn\'t have taxincluded');
+ is(SL::DB::Manager::AccTransaction->find_by(chart_id => $ar_amount_chart->id, trans_id => $invoice->id)->amount, '100.00000', $ar_amount_chart->accno . ': has been converted for currency');
+ is(SL::DB::Manager::AccTransaction->find_by(chart_id => $ar_chart->id, trans_id => $invoice->id)->amount, '-119.00000', $ar_chart->accno . ': has been converted for currency');
+
+ $invoice->pay_invoice(chart_id => $bank->id,
+ amount => 50,
+ currency => 'CUR',
+ transdate => $transdate->to_kivitendo,
+ );
+ $invoice->pay_invoice(chart_id => $bank->id,
+ amount => 39.25,
+ currency => 'CUR',
+ transdate => $transdate->to_kivitendo,
+ );
+ # $invoice->pay_invoice(chart_id => $bank->id,
+ # amount => 30,
+ # transdate => $transdate2->to_kivitendo,
+ # );
+ is(scalar @{$invoice->transactions}, 9, 'ar transaction has 9 transactions (incl. fxtransactions)');
+ is($invoice->paid, $invoice->amount, 'ar transaction paid = amount in default currency');
+};
+
+sub 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);
+ my $invoice = SL::DB::Invoice->new(
+ invoice => 0,
+ amount => 119, #$amount,
+ netamount => 100, #$netamount,
+ transdate => $transdate,
+ taxincluded => 1,
+ customer_id => $customer->id,
+ taxzone_id => $customer->taxzone_id,
+ currency_id => $currency->id,
+ notes => 'test_ar_currency_tax_included',
+ transactions => [],
+ );
+ $invoice->add_ar_amount_row( # should take care of taxincluded
+ amount => $invoice->amount, # tax included in local currency
+ chart => $ar_amount_chart,
+ tax_id => $tax->id,
+ );
+
+ $invoice->create_ar_row( chart => $ar_chart );
+ $invoice->save;
+ is(SL::DB::Manager::Invoice->get_all_count(where => [ invoice => 0 ]), 2, 'there are now two ar transactions');
+ is($invoice->currency_id , $currency->id , 'currency_id has been saved');
+ is($invoice->amount , $amount , 'amount ok');
+ is($invoice->netamount , $netamount , 'netamount ok');
+ is($invoice->taxincluded , 1 , 'ar transaction has taxincluded');
+ is(SL::DB::Manager::AccTransaction->find_by(chart_id => $ar_amount_chart->id, trans_id => $invoice->id)->amount, '100.00000', $ar_amount_chart->accno . ': has been converted for currency');
+ is(SL::DB::Manager::AccTransaction->find_by(chart_id => $ar_chart->id, trans_id => $invoice->id)->amount, '-119.00000', $ar_chart->accno . ': has been converted for currency');
+ $invoice->pay_invoice(chart_id => $bank->id,
+ amount => 89.25,
+ currency => 'CUR',
+ transdate => $transdate->to_kivitendo,
+ );
+
+};
+
+sub test_ap_currency_tax_not_included_and_payment {
+ 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::PurchaseInvoice->new(
+ invoice => 0,
+ invnumber => 'test_ap_currency_tax_not_included_and_payment',
+ amount => $amount,
+ netamount => $netamount,
+ transdate => $transdate,
+ taxincluded => 0,
+ vendor_id => $vendor->id,
+ taxzone_id => $vendor->taxzone_id,
+ currency_id => $currency->id,
+ transactions => [],
+ notes => 'test_ap_currency_tax_not_included_and_payment',
+ );
+ $invoice->add_ap_amount_row(
+ amount => $invoice->netamount,
+ chart => $ap_amount_chart,
+ tax_id => $tax_9->id,
+ );
+
+ $invoice->create_ap_row(chart => $ap_chart);
+ $invoice->save;
+
+ is($invoice->currency_id, $currency->id, 'currency_id has been saved');
+ is($invoice->netamount, 100, 'ap amount has been converted');
+ is($invoice->amount, 119, 'ap amount has been converted');
+ is($invoice->taxincluded, 0, 'ap transaction doesn\'t have taxincluded');
+ is(SL::DB::Manager::AccTransaction->find_by(chart_id => $ap_amount_chart->id, trans_id => $invoice->id)->amount, '-100.00000', $ap_amount_chart->accno . ': has been converted for currency');
+ is(SL::DB::Manager::AccTransaction->find_by(chart_id => $ap_chart->id, trans_id => $invoice->id)->amount, '119.00000', $ap_chart->accno . ': has been converted for currency');
+
+ $invoice->pay_invoice(chart_id => $bank->id,
+ amount => 50,
+ currency => 'CUR',
+ transdate => $transdate->to_kivitendo,
+ );
+ $invoice->pay_invoice(chart_id => $bank->id,
+ amount => 39.25,
+ currency => 'CUR',
+ transdate => $transdate->to_kivitendo,
+ );
+ # $invoice->pay_invoice(chart_id => $bank->id,
+ # amount => 30,
+ # transdate => $transdate2->to_kivitendo,
+ # );
+ is(scalar @{$invoice->transactions}, 9, 'ap transaction has 9 transactions (incl. fxtransactions)');
+ is($invoice->paid, $invoice->amount, 'ap transaction paid = amount in default currency');
+};
+
+sub test_ap_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);
+ my $invoice = SL::DB::PurchaseInvoice->new(
+ invoice => 0,
+ amount => 119, #$amount,
+ netamount => 100, #$netamount,
+ transdate => $transdate,
+ taxincluded => 1,
+ vendor_id => $vendor->id,
+ taxzone_id => $vendor->taxzone_id,
+ currency_id => $currency->id,
+ notes => 'test_ap_currency_tax_included',
+ invnumber => 'test_ap_currency_tax_included',
+ transactions => [],
+ );
+ $invoice->add_ap_amount_row( # should take care of taxincluded
+ amount => $invoice->amount, # tax included in local currency
+ chart => $ap_amount_chart,
+ tax_id => $tax_9->id,
+ );
+
+ $invoice->create_ap_row( chart => $ap_chart );
+ $invoice->save;
+ is($invoice->currency_id , $currency->id , 'currency_id has been saved');
+ is($invoice->amount , $amount , 'amount ok');
+ is($invoice->netamount , $netamount , 'netamount ok');
+ is($invoice->taxincluded , 1 , 'ap transaction has taxincluded');
+ is(SL::DB::Manager::AccTransaction->find_by(chart_id => $ap_amount_chart->id, trans_id => $invoice->id)->amount, '-100.00000', $ap_amount_chart->accno . ': has been converted for currency');
+ is(SL::DB::Manager::AccTransaction->find_by(chart_id => $ap_chart->id, trans_id => $invoice->id)->amount, '119.00000', $ap_chart->accno . ': has been converted for currency');
+
+ $invoice->pay_invoice(chart_id => $bank->id,
+ amount => 89.25,
+ currency => 'CUR',
+ transdate => $transdate->to_kivitendo,
+ );
+
+};
+