X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fio.pl;h=eedde3f888e0aff0f1005bcf0d205f06cb63df91;hb=2644d2a93d051b4040354c87c0410ebf494a15df;hp=978b193c3f9708eb4ca45e91217401e2b067d844;hpb=becf01a3d23209bd835c6f0c3013e2acc0efb366;p=kivitendo-erp.git diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl index 978b193c3..eedde3f88 100644 --- a/bin/mozilla/io.pl +++ b/bin/mozilla/io.pl @@ -54,7 +54,9 @@ use SL::IO; use SL::File; use SL::PriceSource; use SL::Presenter::Part; +use SL::Util qw(trim); +use SL::DB::AuthUser; use SL::DB::Contact; use SL::DB::Currency; use SL::DB::Customer; @@ -170,6 +172,12 @@ sub display_row { my @row2_sort = qw( serialnr projectnr reqdate subtotal marge listprice lastcost onhand ); + # serialnr is important for delivery_orders + if ($form->{type} eq 'sales_delivery_order') { + splice @row2_sort, 0, 1; + splice @header_sort, 4, 0, "serialnr"; + } + my %column_def = ( runningnumber => { width => 5, value => $locale->text('No.'), display => 1, }, partnumber => { width => 8, value => $locale->text('Number'), display => 1, }, @@ -471,7 +479,7 @@ sub display_row { map { $form->{"${_}_${i}"} = $form->format_amount(\%myconfig, $form->{"${_}_${i}"}) } qw(sellprice discount lastcost); push @hidden_vars, grep { defined $form->{"${_}_${i}"} } qw(sellprice discount not_discountable price_factor_id lastcost); push @hidden_vars, "stock_${stock_in_out}_sum_qty", "stock_${stock_in_out}"; - push @hidden_vars, qw(delivery_order_items_id converted_from_orderitems_id converted_from_delivery_order_items_id); + push @hidden_vars, qw(delivery_order_items_id converted_from_orderitems_id converted_from_delivery_order_items_id has_sernumber); } my @HIDDENS = map { value => $_}, ( @@ -1386,6 +1394,8 @@ sub print_form { $form->get_shipto(\%myconfig); } + $form->set_addition_billing_address_print_variables; + $form->{notes} =~ s/^\s+//g; delete $form->{printer_command}; @@ -1409,7 +1419,7 @@ sub print_form { # Format dates. format_dates($output_dateformat, $output_longdates, - qw(invdate orddate quodate pldate duedate reqdate transdate + qw(invdate orddate quodate pldate duedate reqdate transdate tax_point shippingdate deliverydate validitydate paymentdate datepaid transdate_oe transdate_do transdate_quo deliverydate_oe dodate employee_startdate employee_enddate @@ -1564,6 +1574,10 @@ sub print_form { today => DateTime->today, }; + if ($defaults->print_interpolate_variables_in_positions) { + $form->substitute_placeholders_in_template_arrays({ field => 'description', type => 'text' }, { field => 'longdescription', type => 'html' }); + } + $form->parse_template(\%myconfig); $form->{callback} = ""; @@ -1728,6 +1742,7 @@ sub _update_part_information { $form->{"weight_$i"} = $info->{weight}; $form->{"part_type_$i"} = $info->{part_type}; $form->{"classification_id_$i"} = $info->{classification_id}; + $form->{"has_sernumber_$i"} = $info->{has_sernumber}; } $main::lxdebug->leave_sub(); @@ -2021,7 +2036,7 @@ sub setup_sales_purchase_print_options { } sub _get_files_for_email_dialog { - my %files = map { ($_ => []) } qw(versions files vc_files part_files); + my %files = map { ($_ => []) } qw(versions files vc_files part_files project_files); return %files if !$::instance_conf->get_doc_storage; @@ -2030,6 +2045,8 @@ sub _get_files_for_email_dialog { $files{files} = [ SL::File->get_all( object_id => $::form->{id}, object_type => $::form->{type}, file_type => 'attachment') ]; $files{vc_files} = [ SL::File->get_all( object_id => $::form->{vc_id}, object_type => $::form->{vc}, file_type => 'attachment') ] if $::form->{vc} && $::form->{"vc_id"}; + $files{project_files} = [ SL::File->get_all(object_id => $::form->{project_id}, object_type => 'project',file_type => 'attachment') ] + if $::form->{project_id}; } my @parts = @@ -2098,6 +2115,11 @@ sub show_sales_purchase_email_dialog { $body_params{fallback_translation_type} = "preset_text_invoice"; } + my @employees_with_email = grep { + my $user = SL::DB::Manager::AuthUser->find_by(login => $_->login); + $user && !!trim($user->get_config_value('email')); + } @{ SL::DB::Manager::Employee->get_all_sorted(query => [ deleted => 0 ]) }; + my $email_form = { to => $email, cc => $email_cc, @@ -2109,11 +2131,12 @@ sub show_sales_purchase_email_dialog { my %files = _get_files_for_email_dialog(); my $html = $::form->parse_html_template("common/_send_email_dialog", { - email_form => $email_form, - show_bcc => $::auth->assert('email_bcc', 'may fail'), - FILES => \%files, - is_customer => $::form->{vc} eq 'customer', + email_form => $email_form, + show_bcc => $::auth->assert('email_bcc', 'may fail'), + FILES => \%files, + is_customer => $::form->{vc} eq 'customer', is_invoice_mail => ($record_email && $::form->{type} eq 'invoice'), + ALL_EMPLOYEES => \@employees_with_email, }); print $::form->ajax_response_header, $html; @@ -2166,8 +2189,8 @@ sub _maybe_attach_zugferd_data { $form->{TEMPLATE_DRIVER_OPTIONS}->{pdf_a} = $record->create_pdf_a_print_options(zugferd_xmp_data => $record->create_zugferd_xmp_data); $form->{TEMPLATE_DRIVER_OPTIONS}->{pdf_attachments} = [ { source => $xmlfile, - name => 'ZUGFeRD-invoice.xml', - description => $::locale->text('ZUGFeRD invoice'), + name => 'factur-x.xml', + description => $::locale->text('Factur-X/ZUGFeRD invoice'), relationship => '/Alternative', mime_type => 'text/xml', } @@ -2178,3 +2201,35 @@ sub _maybe_attach_zugferd_data { $::form->error($e->message); } } + +sub download_factur_x_xml { + my ($form) = @_; + + my $record = _make_record(); + + die if !$record + || !$record->can('customer') + || !$record->customer + || !$record->can('create_pdf_a_print_options') + || !$record->can('create_zugferd_data') + || !$record->customer->create_zugferd_invoices_for_this_customer; + + my $xml_content = eval { $record->create_zugferd_data }; + + if (my $e = SL::X::ZUGFeRDValidation->caught) { + $::form->error($e->message); + } + + my $attachment_filename = $::form->generate_attachment_filename; + $attachment_filename =~ s{\.[^.]+$}{.xml}; + my %headers = ( + '-type' => 'application/xml', + '-connection' => 'close', + '-attachment' => $attachment_filename, + '-content-length' => length($xml_content), + ); + + print $::request->cgi->header(%headers); + + $::locale->with_raw_io(\*STDOUT, sub { print $xml_content }); +}