X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=bin%2Fmozilla%2Fap.pl;h=ed4d864395c6968d8f6eab80e31a0ccc03d070f4;hb=48c71a4b51f5359a7ab7e9bc51280baf9bc9b9b2;hp=039f5a96370167b037aafbcb4e6d4984f54e63a0;hpb=b3259be1755d03539dfa8312f379bd0190526f25;p=kivitendo-erp.git diff --git a/bin/mozilla/ap.pl b/bin/mozilla/ap.pl index 039f5a963..ed4d86439 100644 --- a/bin/mozilla/ap.pl +++ b/bin/mozilla/ap.pl @@ -44,8 +44,10 @@ use SL::IR; use SL::IS; use SL::ReportGenerator; 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; @@ -553,6 +555,10 @@ sub form_header { $form->{'paidaccount_changeable_'. $i} = $changeable; $form->{'labelpaid_project_id_'. $i} = $project_labels{$form->{'paid_project_id_'. $i}}; + # accno and description as info text + $form->{'AP_paid_readonly_desc_' . $i} = $form->{'AP_paid_' . $i} ? + $form->{'AP_paid_' . $i} . " " . SL::DB::Manager::Chart->find_by(accno => $form->{'AP_paid_' . $i})->description + : ''; } $form->{paid_missing} = $form->{invtotal_unformatted} - $form->{totalpaid}; @@ -644,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++; @@ -894,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}--; @@ -1178,6 +1183,73 @@ 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(with => [ 'vendor', 'currency', 'payment_terms' ]); + + 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->payment_terms->calc_date(reference_date => $today)->to_kivitendo if $order->payment_terms; + 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 = @_; @@ -1196,7 +1268,7 @@ sub setup_ap_search_action_bar { sub setup_ap_transactions_action_bar { my %params = @_; - my $may_edit_create = $::auth->assert('vendor_invoice_edit', 1); + my $may_edit_create = $::auth->assert('ap_transactions', 1); for my $bar ($::request->layout->get('actionbar')) { $bar->add( @@ -1229,7 +1301,7 @@ sub setup_ap_display_form_action_bar { my $is_storno = IS->is_storno(\%::myconfig, $::form, 'ap', $::form->{id}); my $has_storno = IS->has_storno(\%::myconfig, $::form, 'ap'); - my $may_edit_create = $::auth->assert('vendor_invoice_edit', 1); + my $may_edit_create = $::auth->assert('ap_transactions', 1); my $has_sepa_exports; if ($::form->{id}) {