X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fgl.pl;h=f56a9a75488fa7188249df6551233f209e83d376;hb=ee56f1b20ab915671ded297f593c0e2e245bad70;hp=2c5f74a7eb02a4e443b593afd1e7e4f1496fb8cf;hpb=b166ba3bdc7dbc69b5be36501905508fd3dce242;p=kivitendo-erp.git diff --git a/bin/mozilla/gl.pl b/bin/mozilla/gl.pl index 2c5f74a7e..f56a9a754 100644 --- a/bin/mozilla/gl.pl +++ b/bin/mozilla/gl.pl @@ -99,16 +99,7 @@ sub add { $form->{credit} = 0; $form->{tax} = 0; - # departments - $form->all_departments(\%myconfig); - if (@{ $form->{all_departments} || [] }) { - $form->{selectdepartment} = "\n"; - - map { - $form->{selectdepartment} .= - "$_->{description}--$_->{id}\n" - } (@{ $form->{all_departments} || [] }); - } + $::form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all; $form->{show_details} = $myconfig{show_form_details} unless defined $form->{show_details}; @@ -129,16 +120,7 @@ sub prepare_transaction { $form->{amount} = $form->format_amount(\%myconfig, $form->{amount}, 2); - # departments - $form->all_departments(\%myconfig); - if (@{ $form->{all_departments} || [] }) { - $form->{selectdepartment} = "\n"; - - map { - $form->{selectdepartment} .= - "$_->{description}--$_->{id}\n" - } (@{ $form->{all_departments} || [] }); - } + $::form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all; my $i = 1; my $tax = 0; @@ -158,7 +140,7 @@ sub prepare_transaction { $form->{"project_id_$j"} = $ref->{project_id}; } else { - $form->{"accno_$i"} = "$ref->{accno}--$ref->{tax_id}"; + $form->{"accno_id_$i"} = $ref->{chart_id}; for (qw(fx_transaction source memo)) { $form->{"${_}_$i"} = $ref->{$_} } if ($ref->{amount} < 0) { $form->{totaldebit} -= $ref->{amount}; @@ -211,7 +193,7 @@ sub edit { my @all_objects = $webdav->get_all_objects; @{ $form->{WEBDAV} } = map { { name => $_->filename, type => t8('File'), - link => File::Spec->catdir($webdav_path, $_->filename), + link => File::Spec->catfile($_->full_filedescriptor), } } @all_objects; } form_header(); @@ -226,15 +208,14 @@ sub search { $::lxdebug->enter_sub; $::auth->assert('general_ledger | gl_transactions'); - $::form->all_departments(\%::myconfig); $::form->get_lists( projects => { key => "ALL_PROJECTS", all => 1 }, ); $::form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all_sorted(query => [ deleted => 0 ]); + $::form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all; $::form->header; print $::form->parse_html_template('gl/search', { - department_label => sub { ("$_[0]{description}--$_[0]{id}")x2 }, employee_label => sub { "$_[0]{id}--$_[0]{name}" }, }); @@ -316,7 +297,7 @@ sub generate_report { ); # add employee here, so that variable is still known and passed in url when choosing a different sort order in resulting table - my @hidden_variables = qw(accno source reference department description notes project_id datefrom dateto employee_id datesort category l_subtotal); + my @hidden_variables = qw(accno source reference description notes project_id datefrom dateto employee_id datesort category l_subtotal); push @hidden_variables, map { "l_${_}" } @columns; my $employee = $form->{employee_id} ? SL::DB::Employee->new(id => $form->{employee_id})->load->name : ''; @@ -334,12 +315,11 @@ sub generate_report { push @date_options, $locale->text('Bis'), $locale->date(\%myconfig, $form->{dateto}, 1) if ($form->{dateto}); push @options, join(' ', @date_options) if (scalar @date_options); - if ($form->{department}) { - my ($department) = split /--/, $form->{department}; - push @options, $locale->text('Department') . " : $department"; + if ($form->{department_id}) { + my $department = SL::DB::Manager::Department->find_by( id => $form->{department_id} ); + push @options, $locale->text('Department') . " : " . $department->description; } - my $callback = build_std_url('action=generate_report', grep { $form->{$_} } @hidden_variables); $form->{l_credit_accno} = 'Y'; @@ -670,6 +650,8 @@ sub display_rows { my %myconfig = %main::myconfig; my $cgi = $::request->{cgi}; + my %balances = GL->get_chart_balances(map { $_->{id} } @{ $form->{ALL_CHARTS} }); + $form->{debit_1} = 0 if !$form->{"debit_1"}; $form->{totaldebit} = 0; $form->{totalcredit} = 0; @@ -681,20 +663,9 @@ sub display_rows { $project_labels{$item->{"id"}} = $item->{"projectnumber"}; } - my %chart_labels = (); - my @chart_values = (); - my %charts = (); - my $taxchart_init; - foreach my $item (@{ $form->{ALL_CHARTS} }) { - if ($item->{charttype} eq 'H'){ #falls ÃÅberschrift - next; #ÃÅberspringen (Bug 1150) - } - my $key = $item->{accno} . "--" . $item->{tax_id}; - $taxchart_init = $item->{tax_id} unless (@chart_values); - push(@chart_values, $key); - $chart_labels{$key} = $item->{accno} . "--" . $item->{description}; - $charts{$item->{accno}} = $item; - } + my %charts_by_id = map { ($_->{id} => $_) } @{ $::form->{ALL_CHARTS} }; + my $default_chart = $::form->{ALL_CHARTS}[0]; + my $transdate = $::form->{transdate} ? DateTime->from_kivitendo($::form->{transdate}) : DateTime->today_local; my ($source, $memo, $source_hidden, $memo_hidden); for my $i (1 .. $form->{rowcount}) { @@ -710,49 +681,31 @@ sub display_rows { |; } - my $selected_accno_full; - my ($accno_row) = split(/--/, $form->{"accno_$i"}); - my $item = $charts{$accno_row}; - $selected_accno_full = "$item->{accno}--$item->{tax_id}"; - - my $selected_taxchart = $form->{"taxchart_$i"}; - my ($selected_accno, $selected_tax_id) = split(/--/, $selected_accno_full); - my ($previous_accno, $previous_tax_id) = split(/--/, $form->{"previous_accno_$i"}); - my %taxchart_labels = (); my @taxchart_values = (); - my %taxcharts = (); - my $filter_accno; - $filter_accno = $::form->{ALL_CHARTS}[0]->{accno}; - $filter_accno = $selected_accno if (!$init and $i < $form->{rowcount}); - foreach my $item ( GL->get_tax_dropdown($filter_accno) ) { - my $key = $item->{id} . "--" . $item->{rate}; - $taxchart_init = $key if ($taxchart_init == $item->{id}); - push(@taxchart_values, $key); - $taxchart_labels{$key} = $item->{taxdescription} . " " . $item->{rate} * 100 . ' %'; - $taxcharts{$item->{id}} = $item; - } - if ($previous_accno && - ($previous_accno eq $selected_accno) && - ($previous_tax_id ne $selected_tax_id)) { - my $item = $taxcharts{$selected_tax_id}; - $selected_taxchart = "$item->{id}--$item->{rate}"; + my $accno_id = $::form->{"accno_id_$i"}; + my $chart = $charts_by_id{$accno_id} // $default_chart; + $accno_id = $chart->{id}; + my $chart_has_changed = $::form->{"previous_accno_id_$i"} && ($accno_id != $::form->{"previous_accno_id_$i"}); + my ($first_taxchart, $default_taxchart, $taxchart_to_use); + + foreach my $item ( GL->get_active_taxes_for_chart($accno_id, $transdate) ) { + my $key = $item->id . "--" . $item->rate; + $first_taxchart //= $item; + $default_taxchart = $item if $item->{is_default}; + $taxchart_to_use = $item if $key eq $form->{"taxchart_$i"}; + + push(@taxchart_values, $key); + $taxchart_labels{$key} = $item->taxdescription . " " . $item->rate * 100 . ' %'; } - $selected_accno = '' if ($init); - $selected_taxchart ||= $taxchart_init; + $taxchart_to_use = $default_taxchart // $first_taxchart if $chart_has_changed || !$taxchart_to_use; + my $selected_taxchart = $taxchart_to_use->id . '--' . $taxchart_to_use->rate; my $accno = qq|| . - NTI($cgi->popup_menu('-name' => "accno_$i", - '-id' => "accno_$i", - '-onChange' => "updateTaxes($i);", - '-style' => 'width:200px', - '-values' => \@chart_values, - '-labels' => \%chart_labels, - '-default' => $selected_accno_full)) - . $cgi->hidden('-name' => "previous_accno_$i", - '-default' => $selected_accno_full) + $::request->presenter->chart_picker("accno_id_$i", $accno_id, style => "width: 300px") . + $::request->presenter->hidden_tag("previous_accno_id_$i", $accno_id) . qq||; my $tax_ddbox = qq|| . NTI($cgi->popup_menu('-name' => "taxchart_$i", @@ -828,10 +781,11 @@ sub display_rows { |; my $copy2credit = $i == 1 ? 'onkeyup="copy_debit_to_credit()"' : ''; + my $balance = $form->format_amount(\%::myconfig, $balances{$accno_id} // 0, 2, 'DRCR'); print qq| $accno - + ${balance} $fx_transaction @@ -872,15 +826,18 @@ sub form_header { my ($init) = @_; + $::request->layout->add_javascripts("autocomplete_chart.js", "kivi.GL.js"); + my @old_project_ids = grep { $_ } map{ $::form->{"project_id_$_"} } 1..$::form->{rowcount}; $::form->get_lists("projects" => { "key" => "ALL_PROJECTS", "all" => 0, "old_id" => \@old_project_ids }, + "charts" => { "key" => "ALL_CHARTS", "transdate" => $::form->{transdate} }); - GL->get_chart_balances('charts' => $::form->{ALL_CHARTS}); + $::form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all; my $title = $::form->{title}; $::form->{title} = $::locale->text("$title General Ledger Transaction"); @@ -890,15 +847,11 @@ sub form_header { map { $::form->{$_} =~ s/\"/"/g } qw(chart taxchart); - $::form->{selectdepartment} =~ s/ selected//; - $::form->{selectdepartment} =~ - s/option>\Q$::form->{department}\E/option selected>$::form->{department}/; - if ($init) { $::request->{layout}->focus("#reference"); $::form->{taxincluded} = "1"; } else { - $::request->{layout}->focus("#accno_$::form->{rowcount}"); + $::request->{layout}->focus("#accno_id_$::form->{rowcount}_name"); } $::form->{previous_id} ||= "--"; @@ -1172,7 +1125,7 @@ sub post { my $form = $main::form; my $locale = $main::locale; - if ($::myconfig{mandatory_departments} && !$form->{department}) { + if ($::myconfig{mandatory_departments} && !$form->{department_id}) { $form->{saved_message} = $::locale->text('You have to specify a department.'); update(); exit; @@ -1189,7 +1142,7 @@ sub post { } $form->{callback} = build_std_url("action=add", "show_details"); - $form->redirect($form->{callback}); + $form->redirect($::locale->text("General ledger transaction '#1' posted", $form->{reference})); $main::lxdebug->leave_sub(); } @@ -1243,22 +1196,18 @@ sub continue { } sub get_tax_dropdown { - $main::lxdebug->enter_sub(); + my $transdate = $::form->{transdate} ? DateTime->from_kivitendo($::form->{transdate}) : DateTime->today_local; + my @tax_accounts = GL->get_active_taxes_for_chart($::form->{accno_id}, $transdate); + my $html = $::form->parse_html_template("gl/update_tax_accounts", { TAX_ACCOUNTS => \@tax_accounts }); - my $form = $main::form; - my @tax_accounts = GL->get_tax_dropdown($form->{accno}); - - foreach my $item (@tax_accounts) { - $item->{taxdescription} = $::locale->{iconv_utf8}->convert($item->{taxdescription}); - $item->{taxdescription} .= ' ' . $form->round_amount($item->{rate} * 100); - } - - $form->{TAX_ACCOUNTS} = [ @tax_accounts ]; - - print $form->ajax_response_header, $form->parse_html_template("gl/update_tax_accounts"); + print $::form->ajax_response_header, $html; +} - $main::lxdebug->leave_sub(); +sub get_chart_balance { + my %balances = GL->get_chart_balances($::form->{accno_id}); + my $balance = $::form->format_amount(\%::myconfig, $balances{ $::form->{accno_id} }, 2, 'DRCR'); + print $::form->ajax_response_header, $balance; } 1;