X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/8cbcd2447b4024f2182b78ab6fb2ebd147b5b543..6e083cb8df993623e4810599ba9d50b035ccb250:/bin/mozilla/ap.pl diff --git a/bin/mozilla/ap.pl b/bin/mozilla/ap.pl index 49f6f7a63..a5d20da87 100644 --- a/bin/mozilla/ap.pl +++ b/bin/mozilla/ap.pl @@ -47,6 +47,7 @@ use SL::DB::BankTransactionAccTrans; use SL::DB::Chart; use SL::DB::Currency; use SL::DB::Default; +use SL::DB::Order; use SL::DB::PurchaseInvoice; use SL::DB::RecordTemplate; use SL::DB::Tax; @@ -649,7 +650,6 @@ sub update { # calculate tax exactly the same way as AP in post_transaction via form->calculate_tax my $tmpnetamount; ($tmpnetamount,$form->{"tax_$i"}) = $form->calculate_tax($form->{"amount_$i"},$rate,$form->{taxincluded},2); - $totaltax += $form->{"tax_$i"}; map { $a[$j]->{$_} = $form->{"${_}_$i"} } @flds; $count++; @@ -899,7 +899,7 @@ sub use_as_new { $main::auth->assert('ap_transactions'); - map { delete $form->{$_} } qw(printed emailed queued invnumber deliverydate id datepaid_1 gldate_1 acc_trans_id_1 source_1 memo_1 paid_1 exchangerate_1 AP_paid_1 storno); + map { delete $form->{$_} } qw(printed emailed queued invnumber deliverydate id datepaid_1 gldate_1 acc_trans_id_1 source_1 memo_1 paid_1 exchangerate_1 AP_paid_1 storno convert_from_oe_id); $form->{paidaccounts} = 1; $form->{rowcount}--; @@ -1183,6 +1183,74 @@ sub storno { $main::lxdebug->leave_sub(); } +sub add_from_purchase_order { + $main::auth->assert('ap_transactions'); + + return if !$::form->{id}; + + my $order_id = delete $::form->{id}; + my $order = SL::DB::Order->new(id => $order_id)->load; + + return if $order->type ne 'purchase_order'; + + my $today = DateTime->today_local; + $::form->{title} = "Add"; + $::form->{vc} = 'vendor'; + $::form->{vendor_id} = $order->customervendor->id; + $::form->{vendor} = $order->vendor->name; + $::form->{convert_from_oe_id} = $order->id; + $::form->{globalproject_id} = $order->globalproject_id; + $::form->{ordnumber} = $order->number; + $::form->{department_id} = $order->department_id; + $::form->{currency} = $order->currency->name; + $::form->{taxincluded} = 1; # we use amount below, so tax is included + $::form->{transdate} = $today->to_kivitendo; + $::form->{duedate} = $today->to_kivitendo; + $::form->{duedate} = $order->vendor->payment->calc_date(reference_date => $today)->to_kivitendo if $order->vendor->payment; + + create_links(); + + my $config_po_ap_workflow_chart_id = $::instance_conf->get_workflow_po_ap_chart_id; + + my ($first_taxchart, $default_taxchart, $taxchart_to_use); + my @taxcharts = (); + @taxcharts = GL->get_active_taxes_for_chart($config_po_ap_workflow_chart_id, $::form->{transdate}) if (defined $config_po_ap_workflow_chart_id); + foreach my $item (@taxcharts) { + $first_taxchart //= $item; + $default_taxchart = $item if $item->{is_default}; + } + $taxchart_to_use = $default_taxchart // $first_taxchart; + + my %pat = $order->calculate_prices_and_taxes; + my $row = 1; + foreach my $amount_chart (keys %{$pat{amounts}}) { + my $tax = SL::DB::Manager::Tax->find_by(id => $pat{amounts}->{$amount_chart}->{tax_id}); + # If tax chart from order for this amount is active, use it. Use default or first tax chart for selected chart else. + if (defined $config_po_ap_workflow_chart_id) { + $taxchart_to_use = (first {$_->{id} == $tax->id} @taxcharts) // $taxchart_to_use; + } else { + $taxchart_to_use = $tax; + } + + $::form->{"AP_amount_chart_id_$row"} = $config_po_ap_workflow_chart_id // $amount_chart; + $::form->{"previous_AP_amount_chart_id_$row"} = $::form->{"AP_amount_chart_id_$row"}; + $::form->{"amount_$row"} = $::form->format_amount(\%::myconfig, $pat{amounts}->{$amount_chart}->{amount} * (1 + $tax->rate), 2); + $::form->{"taxchart_$row"} = $taxchart_to_use->id . '--' . $taxchart_to_use->rate; + $::form->{"project_id_$row"} = $order->globalproject_id; + + $row++; + } + + my $last_used_ap_chart = SL::DB::Vendor->load_cached($::form->{vendor_id})->last_used_ap_chart; + $::form->{"AP_amount_chart_id_$row"} = $last_used_ap_chart->id if $last_used_ap_chart; + $::form->{rowcount} = $row; + + update( + keep_rows_without_amount => 1, + dont_add_new_row => 1, + ); +} + sub setup_ap_search_action_bar { my %params = @_;