X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Foe.pl;h=3b5bcd043a2d992dfeffcc2a22b761404e5c6dac;hb=eb0c12081383b487025dd5f438808116728775ad;hp=f2461211284d2d2b82e962ad34372196586fd8f1;hpb=c2aaf253649281fee8e79a3300d81c827d9a1fd1;p=kivitendo-erp.git diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index f24612112..3b5bcd043 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -59,8 +59,6 @@ require "bin/mozilla/reportgenerator.pl"; use strict; -our %TMPL_VAR; - 1; # end of main @@ -358,35 +356,41 @@ sub setup_oe_action_bar { combobox => [ action => [ t8('Workflow') ], - (action => [ + action => [ t8('Sales Order'), submit => [ '#form', { action => "sales_order" } ], disabled => !$form->{id} ? t8('This record has not been saved yet.') : undef, - ]) x !!$params{is_sales_quo}, - (action => [ + only_if => $params{is_sales_quo} || $params{is_pur_ord}, + ], + action => [ t8('Purchase Order'), - submit => [ '#form', { action => "sales_order" } ], + submit => [ '#form', { action => "purchase_order" } ], disabled => !$form->{id} ? t8('This record has not been saved yet.') : undef, - ]) x !!$params{is_req_quo}, - (action => [ + only_if => $params{is_sales_ord} || $params{is_req_quo}, + ], + action => [ t8('Delivery Order'), submit => [ '#form', { action => "delivery_order" } ], disabled => !$form->{id} ? t8('This record has not been saved yet.') : undef, - ]) x ($params{is_sales_ord} || $params{is_pur_ord}), - (action => [ + only_if => $params{is_sales_ord} || $params{is_pur_ord}, + ], + action => [ t8('Invoice'), submit => [ '#form', { action => "invoice" } ], disabled => !$form->{id} ? t8('This record has not been saved yet.') : undef, - ]) x !!$allow_invoice, + only_if => $allow_invoice, + ], action => [ t8('Quotation'), submit => [ '#form', { action => "quotation" } ], disabled => !$form->{id} ? t8('This record has not been saved yet.') : undef, + only_if => $params{is_sales_ord}, ], action => [ t8('Request for Quotation'), - submit => [ '#form', { action => "reqest_for_quotation" } ], + submit => [ '#form', { action => "request_for_quotation" } ], disabled => !$form->{id} ? t8('This record has not been saved yet.') : undef, + only_if => $params{is_pur_ord}, ], ], # end of combobox "Workflow" @@ -402,6 +406,12 @@ sub setup_oe_action_bar { call => [ 'kivi.SalesPurchase.show_email_dialog' ], checks => [ @req_trans_desc ], ], + action => [ + t8('Download attachments of all parts'), + call => [ 'kivi.File.downloadOrderitemsFiles', $::form->{type}, $::form->{id} ], + disabled => !$form->{id} ? t8('This record has not been saved yet.') : undef, + only_if => $::instance_conf->get_doc_storage, + ], ], #end of combobox "Export" combobox => [ @@ -435,6 +445,23 @@ sub setup_oe_search_action_bar { } } +sub setup_oe_orders_action_bar { + my %params = @_; + + return unless $::form->{type} eq 'sales_order'; + + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + t8('New sales order'), + submit => [ '#form', { action => 'edit' } ], + checks => [ [ 'kivi.check_if_entries_selected', '[name^=multi_id_]' ] ], + accesskey => 'enter', + ], + ); + } +} + sub form_header { $main::lxdebug->enter_sub(); my @custom_hiddens; @@ -448,17 +475,20 @@ sub form_header { # Container for template variables. Unfortunately this has to be # visible in form_footer too, so package local level and not my here. - %TMPL_VAR = (); + my $TMPL_VAR = $::request->cache('tmpl_var', {}); if ($form->{id}) { - $TMPL_VAR{oe_obj} = SL::DB::Order->new(id => $form->{id})->load; + $TMPL_VAR->{oe_obj} = SL::DB::Order->new(id => $form->{id})->load; } - $TMPL_VAR{vc_obj} = SL::DB::Customer->new(id => $form->{customer_id})->load if $form->{customer_id}; - $TMPL_VAR{vc_obj} = SL::DB::Vendor->new(id => $form->{vendor_id})->load if $form->{vendor_id}; + $TMPL_VAR->{vc_obj} = SL::DB::Customer->new(id => $form->{customer_id})->load if $form->{customer_id}; + $TMPL_VAR->{vc_obj} = SL::DB::Vendor->new(id => $form->{vendor_id})->load if $form->{vendor_id}; $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); - $form->{employee_id} = $form->{old_employee_id} if $form->{old_employee_id}; - $form->{salesman_id} = $form->{old_salesman_id} if $form->{old_salesman_id}; + my $current_employee = SL::DB::Manager::Employee->current; + $form->{employee_id} = $form->{old_employee_id} if $form->{old_employee_id}; + $form->{salesman_id} = $form->{old_salesman_id} if $form->{old_salesman_id}; + $form->{employee_id} ||= $current_employee->id; + $form->{salesman_id} ||= $current_employee->id; # openclosed checkboxes my @tmp; @@ -466,7 +496,7 @@ sub form_header { $form->{"delivered"} ? "checked" : "", $locale->text('Delivery Order(s) for full qty created') if $form->{"type"} =~ /_order$/; push @tmp, sprintf qq||, $form->{"closed"} ? "checked" : "", $locale->text('Closed') if $form->{id}; - $TMPL_VAR{openclosed} = sprintf qq|%s\n|, 2 * scalar @tmp, join "\n", @tmp if @tmp; + $TMPL_VAR->{openclosed} = sprintf qq|%s\n|, 2 * scalar @tmp, join "\n", @tmp if @tmp; my $vc = $form->{vc} eq "customer" ? "customers" : "vendors"; @@ -494,17 +524,17 @@ sub form_header { @old_ids_cond, ]); - $TMPL_VAR{ALL_PROJECTS} = SL::DB::Manager::Project->get_all_sorted(query => \@conditions); - $form->{ALL_PROJECTS} = $TMPL_VAR{ALL_PROJECTS}; # make projects available for second row drop-down in io.pl + $TMPL_VAR->{ALL_PROJECTS} = SL::DB::Manager::Project->get_all_sorted(query => \@conditions); + $form->{ALL_PROJECTS} = $TMPL_VAR->{ALL_PROJECTS}; # make projects available for second row drop-down in io.pl # label subs my $employee_list_query_gen = sub { $::form->{$_[0]} ? [ or => [ id => $::form->{$_[0]}, deleted => 0 ] ] : [ deleted => 0 ] }; - $TMPL_VAR{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all_sorted(query => $employee_list_query_gen->('employee_id')); - $TMPL_VAR{ALL_SALESMEN} = SL::DB::Manager::Employee->get_all_sorted(query => $employee_list_query_gen->('salesman_id')); - $TMPL_VAR{ALL_SHIPTO} = SL::DB::Manager::Shipto->get_all_sorted(query => [ + $TMPL_VAR->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all_sorted(query => $employee_list_query_gen->('employee_id')); + $TMPL_VAR->{ALL_SALESMEN} = SL::DB::Manager::Employee->get_all_sorted(query => $employee_list_query_gen->('salesman_id')); + $TMPL_VAR->{ALL_SHIPTO} = SL::DB::Manager::Shipto->get_all_sorted(query => [ or => [ trans_id => $::form->{"$::form->{vc}_id"} * 1, and => [ shipto_id => $::form->{shipto_id} * 1, trans_id => undef ] ] ]); - $TMPL_VAR{ALL_CONTACTS} = SL::DB::Manager::Contact->get_all_sorted(query => [ + $TMPL_VAR->{ALL_CONTACTS} = SL::DB::Manager::Contact->get_all_sorted(query => [ or => [ cp_cv_id => $::form->{"$::form->{vc}_id"} * 1, and => [ @@ -513,20 +543,20 @@ sub form_header { ] ] ]); - $TMPL_VAR{sales_employee_labels} = sub { $_[0]->{name} || $_[0]->{login} }; + $TMPL_VAR->{sales_employee_labels} = sub { $_[0]->{name} || $_[0]->{login} }; # currencies and exchangerate $form->{currency} = $form->{defaultcurrency} unless $form->{currency}; - $TMPL_VAR{show_exchangerate} = $form->{currency} ne $form->{defaultcurrency}; + $TMPL_VAR->{show_exchangerate} = $form->{currency} ne $form->{defaultcurrency}; push @custom_hiddens, "forex"; push @custom_hiddens, "exchangerate" if $form->{forex}; # credit remaining my $creditwarning = (($form->{creditlimit} != 0) && ($form->{creditremaining} < 0) && !$form->{update}) ? 1 : 0; - $TMPL_VAR{is_credit_remaining_negativ} = ($form->{creditremaining} =~ /-/) ? "0" : "1"; + $TMPL_VAR->{is_credit_remaining_negativ} = ($form->{creditremaining} =~ /-/) ? "0" : "1"; # business - $TMPL_VAR{business_label} = ($form->{vc} eq "customer" ? $locale->text('Customer type') : $locale->text('Vendor type')); + $TMPL_VAR->{business_label} = ($form->{vc} eq "customer" ? $locale->text('Customer type') : $locale->text('Vendor type')); push @custom_hiddens, "customer_pricegroup_id" if $form->{vc} eq 'customer'; @@ -534,14 +564,14 @@ sub form_header { my $follow_up_vc = $form->{ $form->{vc} eq 'customer' ? 'customer' : 'vendor' }; $follow_up_vc =~ s/--\d*\s*$//; - $TMPL_VAR{follow_up_trans_info} = ($form->{type} =~ /_quotation$/ ? $form->{quonumber} : $form->{ordnumber}) . " ($follow_up_vc)"; + $TMPL_VAR->{follow_up_trans_info} = ($form->{type} =~ /_quotation$/ ? $form->{quonumber} : $form->{ordnumber}) . " ($follow_up_vc)"; if ($form->{id}) { my $follow_ups = FU->follow_ups('trans_id' => $form->{id}, 'not_done' => 1); if (scalar @{ $follow_ups }) { - $TMPL_VAR{num_follow_ups} = scalar @{ $follow_ups }; - $TMPL_VAR{num_due_follow_ups} = sum map { $_->{due} * 1 } @{ $follow_ups }; + $TMPL_VAR->{num_follow_ups} = scalar @{ $follow_ups }; + $TMPL_VAR->{num_due_follow_ups} = sum map { $_->{due} * 1 } @{ $follow_ups }; } } @@ -549,16 +579,16 @@ sub form_header { if ($form->{resubmit} && ($form->{format} eq "html")) { $dispatch_to_popup = "window.open('about:blank','Beleg'); document.oe.target = 'Beleg';"; $dispatch_to_popup .= "document.do.submit();"; - } elsif ($form->{resubmit}) { + } elsif ($form->{resubmit} && $form->{action_print}) { # emulate click for resubmitting actions - $dispatch_to_popup = "document.oe.${_}.click(); " for grep { /^action_/ } keys %$form; + $dispatch_to_popup = "kivi.SalesPurchase.show_print_dialog(); kivi.SalesPurchase.print_record();"; } elsif ($creditwarning) { $::request->{layout}->add_javascripts_inline("alert('$credittext');"); } $::request->{layout}->add_javascripts_inline("\$(function(){$dispatch_to_popup});"); - $TMPL_VAR{dateformat} = $myconfig{dateformat}; - $TMPL_VAR{numberformat} = $myconfig{numberformat}; + $TMPL_VAR->{dateformat} = $myconfig{dateformat}; + $TMPL_VAR->{numberformat} = $myconfig{numberformat}; if ($form->{type} eq 'sales_order') { if (!$form->{periodic_invoices_config}) { @@ -570,7 +600,7 @@ sub form_header { } } - $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.SalesPurchase kivi.File kivi.Part show_form_details show_history show_vc_details ckeditor/ckeditor ckeditor/adapters/jquery kivi.io autocomplete_customer)); + $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.SalesPurchase kivi.File kivi.Part kivi.CustomerVendor show_form_details show_history show_vc_details ckeditor/ckeditor ckeditor/adapters/jquery kivi.io)); # original snippets: @@ -592,7 +622,7 @@ sub form_header { push @custom_hiddens, map { "shiptocvar_" . $_->name } @{ SL::DB::Manager::CustomVariableConfig->get_all(where => [ module => 'ShipTo' ]) }; - $TMPL_VAR{HIDDENS} = [ map { name => $_, value => $form->{$_} }, + $TMPL_VAR->{HIDDENS} = [ map { name => $_, value => $form->{$_} }, qw(id type vc proforma queued printed emailed title creditlimit creditremaining tradediscount business max_dunning_level dunning_amount @@ -602,18 +632,18 @@ sub form_header { @custom_hiddens, map { $_.'_rate', $_.'_description', $_.'_taxnumber' } split / /, $form->{taxaccounts} ]; # deleted: discount - %TMPL_VAR = ( - %TMPL_VAR, - %type_check_vars, - ); + $TMPL_VAR->{$_} = $type_check_vars{$_} for keys %type_check_vars; - $TMPL_VAR{ORDER_PROBABILITIES} = [ map { { title => ($_ * 10) . '%', id => $_ * 10 } } (0..10) ]; + $TMPL_VAR->{ORDER_PROBABILITIES} = [ map { { title => ($_ * 10) . '%', id => $_ * 10 } } (0..10) ]; if ($type_check_vars{is_sales} && $::instance_conf->get_transport_cost_reminder_article_number_id) { - $TMPL_VAR{transport_cost_reminder_article} = SL::DB::Part->new(id => $::instance_conf->get_transport_cost_reminder_article_number_id)->load; + $TMPL_VAR->{transport_cost_reminder_article} = SL::DB::Part->new(id => $::instance_conf->get_transport_cost_reminder_article_number_id)->load; } - print $form->parse_html_template("oe/form_header", { %TMPL_VAR }); + print $form->parse_html_template("oe/form_header", { + %$TMPL_VAR, + %type_check_vars, + }); $main::lxdebug->leave_sub(); } @@ -631,8 +661,10 @@ sub form_footer { my $introws = max 5, $form->numtextrows($form->{intnotes}, 35, 8); - $TMPL_VAR{notes} = qq||; - $TMPL_VAR{intnotes} = qq||; + my $TMPL_VAR = $::request->cache('tmpl_var', {}); + + $TMPL_VAR->{notes} = qq||; + $TMPL_VAR->{intnotes} = qq||; if( $form->{customer_id} && !$form->{taxincluded_changed_by_user} ) { my $customer = SL::DB::Customer->new(id => $form->{customer_id})->load(); @@ -646,7 +678,7 @@ sub form_footer { $form->{invtotal} += $form->{"${item}_total"} = $form->round_amount( $form->{"${item}_base"} * $form->{"${item}_rate"}, 2); $form->{"${item}_total"} = $form->format_amount(\%myconfig, $form->{"${item}_total"}, 2); - $TMPL_VAR{tax} .= qq| + $TMPL_VAR->{tax} .= qq| $form->{"${item}_description"} | . $form->{"${item}_rate"} * 100 .qq|% $form->{"${item}_total"} @@ -661,7 +693,7 @@ sub form_footer { $form->{"${item}_total"} = $form->format_amount(\%myconfig, $form->{"${item}_total"}, 2); $form->{"${item}_netto"} = $form->format_amount(\%myconfig, $form->{"${item}_netto"}, 2); - $TMPL_VAR{tax} .= qq| + $TMPL_VAR->{tax} .= qq| Enthaltene $form->{"${item}_description"} | . $form->{"${item}_rate"} * 100 .qq|% $form->{"${item}_total"} @@ -682,12 +714,12 @@ sub form_footer { ); $form->{oldinvtotal} = $form->{invtotal}; - $TMPL_VAR{ALL_DELIVERY_TERMS} = SL::DB::Manager::DeliveryTerm->get_all_sorted(); + $TMPL_VAR->{ALL_DELIVERY_TERMS} = SL::DB::Manager::DeliveryTerm->get_all_sorted(); my $print_options_html = setup_sales_purchase_print_options(); print $form->parse_html_template("oe/form_footer", { - %TMPL_VAR, + %$TMPL_VAR, print_options => $print_options_html, is_sales => scalar ($form->{type} =~ /^sales_/), # these vars are exported, so that the template is_order => scalar ($form->{type} =~ /_order$/), # may determine what to show @@ -990,7 +1022,7 @@ sub orders { $form->{l_open} = $form->{l_closed} = "Y" if ($form->{open} && $form->{closed}); $form->{l_delivered} = "Y" if ($form->{delivered} && $form->{notdelivered}); $form->{l_periodic_invoices} = "Y" if ($form->{periodic_invoices_active} && $form->{periodic_invoices_inactive}); - $form->{l_edit_exp} = "Y" if (any { $form->{type} eq $_ } qw(sales_order purchase_order)); + $form->{l_edit_exp} = "Y" if $::instance_conf->get_feature_experimental && (any { $form->{type} eq $_ } qw(sales_order purchase_order)); map { $form->{"l_${_}"} = 'Y' } qw(order_probability expected_billing_date expected_netamount) if $form->{l_order_probability_expected_billing_date}; my $attachment_basename; @@ -1158,7 +1190,7 @@ sub orders { $report->set_options('top_info_text' => join("\n", @options), 'raw_top_info_text' => $form->parse_html_template('oe/orders_top'), - 'raw_bottom_info_text' => $form->parse_html_template('oe/orders_bottom', { 'SHOW_CONTINUE_BUTTON' => $allow_multiple_orders }), + 'raw_bottom_info_text' => $form->parse_html_template('oe/orders_bottom'), 'output_format' => 'HTML', 'title' => $form->{title}, 'attachment_basename' => $attachment_basename . strftime('_%Y%m%d', localtime time), @@ -1239,7 +1271,8 @@ sub orders { $report->add_separator(); $report->add_data(create_subtotal_row(\%totals, \@columns, \%column_alignment, \@subtotal_columns, 'listtotal')); - $report->generate_with_headers(action_bar => 1); + setup_oe_orders_action_bar(); + $report->generate_with_headers(); $main::lxdebug->leave_sub(); } @@ -1261,6 +1294,8 @@ sub check_delivered_flag { foreach my $i (1 .. $form->{rowcount}) { next if (!$form->{"id_$i"}); + $form->{"ship_$i"} = 0 if $form->{saveasnew}; + if ($form->parse_amount(\%myconfig, $form->{"qty_$i"}) == $form->parse_amount(\%myconfig, $form->{"ship_$i"})) { $all_delivered = 1; next; @@ -1271,6 +1306,7 @@ sub check_delivered_flag { } $form->{delivered} = 1 if $all_delivered; + $form->{delivered} = 0 if $form->{saveasnew}; $main::lxdebug->leave_sub(); }