X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FForm.pm;h=044d45f53837709508e04b4769207ff9ae99ca0a;hb=3ce4cab393c398fe802d4d5cef08b7ad64773294;hp=59815ebdee7d707d33f1bc6a86e3b033a14e07dc;hpb=0f179c9ab60ac22c697027cadc9f4bdb9c515ce5;p=kivitendo-erp.git diff --git a/SL/Form.pm b/SL/Form.pm index 59815ebde..044d45f53 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -56,11 +56,13 @@ use SL::DBUtils; use SL::DO; use SL::IC; use SL::IS; +use SL::Layout::Dispatcher; use SL::Locale; use SL::Mailer; use SL::Menu; use SL::MoreCommon qw(uri_encode uri_decode); use SL::OE; +use SL::PrefixedNumber; use SL::Request; use SL::Template; use SL::User; @@ -379,9 +381,10 @@ sub _get_request_uri { my $self = shift; return URI->new($ENV{HTTP_REFERER})->canonical() if $ENV{HTTP_X_FORWARDED_FOR}; + return URI->new if !$ENV{REQUEST_URI}; # for testing my $scheme = $ENV{HTTPS} && (lc $ENV{HTTPS} eq 'on') ? 'https' : 'http'; - my $port = $ENV{SERVER_PORT} || ''; + my $port = $ENV{SERVER_PORT}; $port = undef if (($scheme eq 'http' ) && ($port == 80)) || (($scheme eq 'https') && ($port == 443)); @@ -454,26 +457,30 @@ sub header { my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; my @header; - my $layout = $::request->{layout}; - $::lxdebug->leave_sub and return if !$ENV{HTTP_USER_AGENT} || $self->{header}++; + if ($params{no_layout}) { + $::request->{layout} = SL::Layout::Dispatcher->new(style => 'none'); + } + + my $layout = $::request->{layout}; + # standard css for all + # this should gradually move to the layouts that need it $layout->use_stylesheet("$_.css") for qw( - main menu tabcontent list_accounts jquery.autocomplete + main menu list_accounts jquery.autocomplete jquery.multiselect2side frame_header/header - ui-lightness/jquery-ui-1.8.12.custom - js/jscalendar/calendar-win2k-1 + ui-lightness/jquery-ui + jquery-ui.custom ); - $layout->use_javascript("$_.js") for qw( - jquery common jscalendar/calendar jscalendar/lang/calendar-de - jscalendar/calendar-setup part_selection jquery-ui jquery.cookie jqModal - switchmenuframe - ); + $layout->use_javascript("$_.js") for (qw( + jquery jquery-ui jquery.cookie jqModal jquery.checkall + common part_selection switchmenuframe + ), "jquery/ui/i18n/jquery.ui.datepicker-$::myconfig{countrycode}"); $self->{favicon} ||= "favicon.ico"; - $self->{titlebar} = join ' - ', grep $_, $self->{title}, $self->{login}, $::myconfig{dbname}, $self->{version} if $self->{title}; + $self->{titlebar} = join ' - ', grep $_, $self->{title}, $self->{login}, $::myconfig{dbname}, $self->{version} if $self->{title} || !$self->{titlebar}; # build includes if ($self->{refresh_url} || $self->{refresh_time}) { @@ -482,13 +489,14 @@ sub header { push @header, ""; } - push @header, map { qq|| } $layout->stylesheets; + my $auto_reload_resources_param = $layout->auto_reload_resources_param; + + push @header, map { qq|| } $layout->stylesheets; push @header, " " if $self->{landscape}; push @header, "" if -f $self->{favicon}; - push @header, map { qq|| } $layout->javascripts; + push @header, map { qq|| } $layout->javascripts; push @header, $self->{javascript} if $self->{javascript}; push @header, map { $_->show_javascript } @{ $self->{AJAX} || [] }; - push @header, "" if $self->{fokus}; my %doctypes = ( strict => qq||, @@ -509,15 +517,6 @@ EOT print " $_\n" for @header; print < - @@ -525,18 +524,20 @@ EOT print $::request->{layout}->pre_content; print $::request->{layout}->start_content; + $layout->header_done; + $::lxdebug->leave_sub; } sub footer { - # TODO: fix abort conditions + return unless $::request->{layout}->need_footer; print $::request->{layout}->end_content; print $::request->{layout}->post_content; -# print "\n" for $::request->{layout}->javascripts; -# if (my @inline_scripts = $::request->{layout}->javascript_inline) { -# print "\n" for @inline_scripts; -# } + + if (my @inline_scripts = $::request->{layout}->javascripts_inline) { + print "\n"; + } print < @@ -627,11 +628,9 @@ sub _prepare_html_template { $additional_params->{"conf_latex_templates"} = $::lx_office_conf{print_templates}->{latex}; $additional_params->{"conf_opendocument_templates"} = $::lx_office_conf{print_templates}->{opendocument}; $additional_params->{"conf_vertreter"} = $::lx_office_conf{features}->{vertreter}; - $additional_params->{"conf_show_best_before"} = $::lx_office_conf{features}->{show_best_before}; $additional_params->{"conf_parts_image_css"} = $::lx_office_conf{features}->{parts_image_css}; $additional_params->{"conf_parts_listing_images"} = $::lx_office_conf{features}->{parts_listing_images}; $additional_params->{"conf_parts_show_image"} = $::lx_office_conf{features}->{parts_show_image}; - $additional_params->{"conf_payments_changeable"} = $::lx_office_conf{features}->{payments_changeable}; $additional_params->{"INSTANCE_CONF"} = $::instance_conf; if (my $debug_options = $::lx_office_conf{debug}{options}) { @@ -706,6 +705,14 @@ sub show_generic_error { return; } + if ($::request->is_ajax) { + $::lxdebug->message(0, "trying to render AJAX response..."); + SL::ClientJS->new + ->error($error) + ->render(SL::Controller::Base->new); + ::end_of_request(); + } + my $add_params = { 'title_error' => $params{title}, 'label_error' => $error, @@ -757,51 +764,6 @@ sub show_generic_information { ::end_of_request(); } -# write Trigger JavaScript-Code ($qty = quantity of Triggers) -# changed it to accept an arbitrary number of triggers - sschoeling -sub write_trigger { - $main::lxdebug->enter_sub(); - - my $self = shift; - my $myconfig = shift; - my $qty = shift; - - # set dateform for jsscript - # default - my %dateformats = ( - "dd.mm.yy" => "%d.%m.%Y", - "dd/mm/yy" => "%d/%m/%Y", - "mm/dd/yy" => "%m/%d/%Y", - "yyyy-mm-dd" => "%Y-%m-%d", - ); - - my $ifFormat = defined($dateformats{$myconfig->{"dateformat"}}) ? - $dateformats{$myconfig->{"dateformat"}} : "%d.%m.%Y"; - - my @triggers; - while ($#_ >= 2) { - push @triggers, qq| - Calendar.setup( - { - inputField : "| . (shift) . qq|", - ifFormat :"$ifFormat", - align : "| . (shift) . qq|", - button : "| . (shift) . qq|" - } - ); - |; - } - my $jsscript = qq| - - |; - - $main::lxdebug->leave_sub(); - - return $jsscript; -} #end sub write_trigger - sub _store_redirect_info_in_session { my ($self) = @_; @@ -970,6 +932,11 @@ sub parse_amount { my ($self, $myconfig, $amount) = @_; + if (!defined($amount) || ($amount eq '')) { + $main::lxdebug->leave_sub(2); + return 0; + } + if ( ($myconfig->{numberformat} eq '1.000,00') || ($myconfig->{numberformat} eq '1000,00')) { $amount =~ s/\.//g; @@ -1090,6 +1057,7 @@ sub parse_template { UNLINK => ($::lx_office_conf{debug} && $::lx_office_conf{debug}->{keep_temp_files})? 0 : 1, ); close $temp_fh; + (undef, undef, $self->{template_meta}{tmpfile}) = File::Spec->splitpath( $self->{tmpfile} ); if ($template->uses_temp_file() || $self->{media} eq 'email') { $out = $self->{OUT}; @@ -1601,7 +1569,7 @@ sub get_exchangerate { my ($self, $dbh, $curr, $transdate, $fld) = @_; my ($query); - unless ($transdate) { + unless ($transdate && $curr) { $main::lxdebug->leave_sub(); return 1; } @@ -1734,10 +1702,9 @@ sub set_payment_options { $amounts{invtotal} = $self->{invtotal}; $amounts{total} = $self->{total}; } - $amounts{skonto_in_percent} = 100.0 * $self->{percent_skonto}; - map { $amounts{$_} = $self->parse_amount($myconfig, $amounts{$_}) } keys %amounts; + $amounts{skonto_in_percent} = 100.0 * $self->{percent_skonto}; $amounts{skonto_amount} = $amounts{invtotal} * $self->{percent_skonto}; $amounts{invtotal_wo_skonto} = $amounts{invtotal} * (1 - $self->{percent_skonto}); $amounts{total_wo_skonto} = $amounts{total} * (1 - $self->{percent_skonto}); @@ -1965,7 +1932,7 @@ sub get_duedate { $reference_date = $reference_date ? conv_dateq($reference_date) . '::DATE' : 'current_date'; my $dbh = $self->get_standard_dbh($myconfig); - my $payment_id; + my ($payment_id, $duedate); if($self->{payment_id}) { $payment_id = $self->{payment_id}; @@ -1974,8 +1941,10 @@ sub get_duedate { ($payment_id) = selectrow_query($self, $dbh, $query, $self->{vendor_id}); } - my $query = qq|SELECT ${reference_date} + terms_netto FROM payment_terms WHERE id = ?|; - my ($duedate) = selectrow_query($self, $dbh, $query, $payment_id); + if ($payment_id) { + my $query = qq|SELECT ${reference_date} + terms_netto FROM payment_terms WHERE id = ?|; + ($duedate) = selectrow_query($self, $dbh, $query, $payment_id); + } $main::lxdebug->leave_sub(); @@ -2529,7 +2498,7 @@ sub all_vc { # Hotfix für Bug 1837 - Besser wäre es alte Buchungsbelege # OHNE Auswahlliste (reines Textfeld) zu laden. Hilft aber auch # nicht für veränderbare Belege (oe, do, ...) - my $obsolete = "WHERE NOT obsolete" unless $self->{id}; + my $obsolete = $self->{id} ? '' : "WHERE NOT obsolete"; my $query = qq|SELECT count(*) FROM $table $obsolete|; my ($count) = selectrow_query($self, $dbh, $query); @@ -2729,6 +2698,9 @@ sub create_links { $self->{TAX} = selectall_hashref_query($self, $dbh, $query); } + my $extra_columns = ''; + $extra_columns .= 'a.direct_debit, ' if ($module eq 'AR') || ($module eq 'AP'); + if ($self->{id}) { $query = qq|SELECT @@ -2736,7 +2708,7 @@ sub create_links { a.duedate, a.ordnumber, a.taxincluded, a.curr AS currency, a.notes, a.intnotes, a.department_id, a.amount AS oldinvtotal, a.paid AS oldtotalpaid, a.employee_id, a.gldate, a.type, - a.globalproject_id, + a.globalproject_id, ${extra_columns} c.name AS $table, d.description AS department, e.name AS employee @@ -3218,15 +3190,7 @@ sub update_defaults { my ($var) = $sth->fetchrow_array; $sth->finish; - if ($var =~ m/\d+$/) { - my $new_var = (substr $var, $-[0]) * 1 + 1; - my $len_diff = length($var) - $-[0] - length($new_var); - $var = substr($var, 0, $-[0]) . ($len_diff > 0 ? '0' x $len_diff : '') . $new_var; - - } else { - $var = $var . '1'; - } - + $var = SL::PrefixedNumber->new(number => $var)->get_next; $query = qq|UPDATE defaults SET $fld = ?|; do_query($self, $dbh, $query, $var); @@ -3576,7 +3540,6 @@ sub layout { my %style_to_script_map = ( v3 => 'v3', neu => 'new', - v4 => 'v4', ); my $menu_script = $style_to_script_map{$::myconfig{menustyle}} || ''; @@ -3603,7 +3566,7 @@ SL::Form.pm - main data object. =head1 SYNOPSIS -This is the main data object of Lx-Office. +This is the main data object of kivitendo. Unfortunately it also acts as a god object for certain data retrieval procedures used in the entry points. Points of interest for a beginner are: @@ -3628,7 +3591,7 @@ will in this case not increase the value, and return undef. Generates a HTTP redirection header for the new C<$url>. Constructs an absolute URL including scheme, host name and port. If C<$url> is a -relative URL then it is considered relative to Lx-Office base URL. +relative URL then it is considered relative to kivitendo base URL. This function Cs if headers have already been created with C<$::form-Eheader>.