X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fgl.pl;h=77591f5d26aee274907c47a40f1674e5fa34e08d;hb=46aa98a931708ad5ee5003437af92f0358e582b3;hp=4c97bd028f9aa2c26eaedfb206b8da531b1c9075;hpb=a23454bb1b039a31b7f77710ff663fa9152d530c;p=kivitendo-erp.git diff --git a/bin/mozilla/gl.pl b/bin/mozilla/gl.pl index 4c97bd028..77591f5d2 100644 --- a/bin/mozilla/gl.pl +++ b/bin/mozilla/gl.pl @@ -24,7 +24,8 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1335, USA. #====================================================================== # # Genereal Ledger @@ -40,11 +41,10 @@ use List::Util qw(sum); use SL::FU; use SL::GL; use SL::IS; -use SL::PE; use SL::ReportGenerator; +use SL::DBUtils qw(selectrow_query selectall_hashref_query); require "bin/mozilla/common.pl"; -require "bin/mozilla/drafts.pl"; require "bin/mozilla/reportgenerator.pl"; # this is for our long dates @@ -78,13 +78,11 @@ require "bin/mozilla/reportgenerator.pl"; sub add { $main::lxdebug->enter_sub(); - $main::auth->assert('general_ledger'); + $main::auth->assert('gl_transactions'); my $form = $main::form; my %myconfig = %main::myconfig; - return $main::lxdebug->leave_sub() if (load_draft_maybe()); - $form->{title} = "Add"; $form->{callback} = "gl.pl?action=add" unless $form->{callback}; @@ -120,7 +118,7 @@ sub add { sub prepare_transaction { $main::lxdebug->enter_sub(); - $main::auth->assert('general_ledger'); + $main::auth->assert('gl_transactions'); my $form = $main::form; my %myconfig = %main::myconfig; @@ -167,7 +165,7 @@ sub prepare_transaction { $form->{totalcredit} += $ref->{amount}; $form->{"credit_$i"} = $ref->{amount}; } - $form->{"taxchart_$i"} = "0--0.00"; + $form->{"taxchart_$i"} = $ref->{id}."--0.00000"; $form->{"project_id_$i"} = $ref->{project_id}; $i++; } @@ -191,7 +189,7 @@ sub prepare_transaction { sub edit { $main::lxdebug->enter_sub(); - $main::auth->assert('general_ledger'); + $main::auth->assert('gl_transactions'); my $form = $main::form; my %myconfig = %main::myconfig; @@ -212,13 +210,13 @@ sub edit { sub search { $::lxdebug->enter_sub; - $::auth->assert('general_ledger'); + $::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(query => [ deleted => 0 ]); + $::form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all_sorted(query => [ deleted => 0 ]); $::form->header; print $::form->parse_html_template('gl/search', { @@ -251,22 +249,22 @@ sub create_subtotal_row { sub generate_report { $main::lxdebug->enter_sub(); - $main::auth->assert('general_ledger'); + $main::auth->assert('general_ledger | gl_transactions'); my $form = $main::form; my %myconfig = %main::myconfig; my $locale = $main::locale; - # generate_report wird beim ersten Aufruf per Weiter-Knopf und POST mit der hidden Variablen sort mit Wert "datesort" (früher "transdate" als Defaultsortiervariable) übertragen + # generate_report wird beim ersten Aufruf per Weiter-Knopf und POST mit der hidden Variablen sort mit Wert "datesort" (früher "transdate" als Defaultsortiervariable) übertragen #
# # form->{sort} setzen # # anhand von neuer Variable datesort wird jetzt $form->{sort} auf transdate oder gldate gesetzt - # damit ist die Hidden Variable "sort" wahrscheinlich sogar überflüssig + # damit ist die Hidden Variable "sort" wahrscheinlich sogar überflüssig - # ändert man die Sortierreihenfolge per Klick auf eine der Überschriften wird die Variable "sort" per GET übergeben, z.B. id,transdate, gldate, ... + # ändert man die Sortierreihenfolge per Klick auf eine der Überschriften wird die Variable "sort" per GET übergeben, z.B. id,transdate, gldate, ... # gl.pl?action=generate_report&employee=18383--Jan%20B%c3%bcren&datesort=transdate&category=X&l_transdate=Y&l_gldate=Y&l_id=Y&l_reference=Y&l_description=Y&l_source=Y&l_debit=Y&l_credit=Y&sort=gldate&sortdir=0 if ( $form->{sort} eq 'datesort' ) { # sollte bei einem Post (Aufruf aus Suchmaske) immer wahr sein @@ -306,9 +304,6 @@ 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); push @hidden_variables, map { "l_${_}" } @columns; - foreach ( @hidden_variables ) { - print URL "$_\n"; - }; my $employee = $form->{employee_id} ? SL::DB::Employee->new(id => $form->{employee_id})->load->name : ''; @@ -332,8 +327,6 @@ sub generate_report { my $callback = build_std_url('action=generate_report', grep { $form->{$_} } @hidden_variables); - print URL $callback; - close URL; $form->{l_credit_accno} = 'Y'; $form->{l_debit_accno} = 'Y'; @@ -517,10 +510,16 @@ sub generate_report { $main::lxdebug->leave_sub(); } +sub show_draft { + $::form->{transdate} = DateTime->today_local->to_kivitendo if !$::form->{transdate}; + $::form->{gldate} = $::form->{transdate} if !$::form->{gldate}; + update(); +} + sub update { $main::lxdebug->enter_sub(); - $main::auth->assert('general_ledger'); + $main::auth->assert('gl_transactions'); my $form = $main::form; my %myconfig = %main::myconfig; @@ -535,6 +534,10 @@ sub update { my $creditcount = 0; my ($debitcredit, $amount); + my $dbh = SL::DB->client->dbh; + my ($notax_id) = selectrow_query($form, $dbh, "SELECT id FROM tax WHERE taxkey = 0 LIMIT 1", ); + my $zerotaxes = selectall_hashref_query($form, $dbh, "SELECT id FROM tax WHERE rate = 0", ); + my @flds = qw(accno debit credit projectnumber fx_transaction source memo tax taxchart); @@ -573,10 +576,10 @@ sub update { $form->{debitlock} = 1; } if ($debitcredit && $credittax) { - $form->{"taxchart_$i"} = "0--0.00"; + $form->{"taxchart_$i"} = "$notax_id--0.00"; } if (!$debitcredit && $debittax) { - $form->{"taxchart_$i"} = "0--0.00"; + $form->{"taxchart_$i"} = "$notax_id--0.00"; } $amount = ($form->{"debit_$i"} == 0) @@ -584,24 +587,20 @@ sub update { : $form->{"debit_$i"}; my $j = $#a; if (($debitcredit && $credittax) || (!$debitcredit && $debittax)) { - $form->{"taxchart_$i"} = "0--0.00"; + $form->{"taxchart_$i"} = "$notax_id--0.00"; $form->{"tax_$i"} = 0; } my ($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"}); - if ($taxkey > 1) { + my $iswithouttax = grep { $_->{id} == $taxkey } @{ $zerotaxes }; + if (!$iswithouttax) { if ($debitcredit) { $debittax = 1; } else { $credittax = 1; } - if ($form->{taxincluded}) { - $form->{"tax_$i"} = $amount / ($rate + 1) * $rate; - } else { - $form->{"tax_$i"} = $amount * $rate; - } - } else { - $form->{"tax_$i"} = 0; - } + }; + my ($tmpnetamount,$tmpdiff); + ($tmpnetamount,$form->{"tax_$i"},$tmpdiff) = $form->calculate_tax($amount,$rate,$form->{taxincluded} *= 1,2); for (@flds) { $a[$j]->{$_} = $form->{"${_}_$i"} } $count++; @@ -628,7 +627,7 @@ sub display_form { my ($init) = @_; $main::lxdebug->enter_sub(); - $main::auth->assert('general_ledger'); + $main::auth->assert('gl_transactions'); my $form = $main::form; my %myconfig = %main::myconfig; @@ -651,7 +650,7 @@ sub display_rows { my ($init) = @_; $main::lxdebug->enter_sub(); - $main::auth->assert('general_ledger'); + $main::auth->assert('gl_transactions'); my $form = $main::form; my %myconfig = %main::myconfig; @@ -673,8 +672,8 @@ sub display_rows { my %charts = (); my $taxchart_init; foreach my $item (@{ $form->{ALL_CHARTS} }) { - if ($item->{charttype} eq 'H'){ #falls überschrift - next; #überspringen (Bug 1150) + 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); @@ -683,17 +682,6 @@ sub display_rows { $charts{$item->{accno}} = $item; } - my %taxchart_labels = (); - my @taxchart_values = (); - my %taxcharts = (); - foreach my $item (@{ $form->{TAX_ACCOUNTS} }) { - 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; - } - my ($source, $memo, $source_hidden, $memo_hidden); for my $i (1 .. $form->{rowcount}) { if ($form->{show_details}) { @@ -717,6 +705,20 @@ sub display_rows { 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)) { @@ -740,11 +742,11 @@ sub display_rows { . qq||; my $tax_ddbox = qq|| . NTI($cgi->popup_menu('-name' => "taxchart_$i", - '-id' => "taxchart_$i", - '-style' => 'width:200px', - '-values' => \@taxchart_values, - '-labels' => \%taxchart_labels, - '-default' => $selected_taxchart)) + '-id' => "taxchart_$i", + '-style' => 'width:200px', + '-values' => \@taxchart_values, + '-labels' => \%taxchart_labels, + '-default' => $selected_taxchart)) . qq||; my ($fx_transaction, $checked); @@ -852,7 +854,7 @@ sub _get_radieren { sub form_header { $::lxdebug->enter_sub; - $::auth->assert('general_ledger'); + $::auth->assert('gl_transactions'); my ($init) = @_; @@ -864,9 +866,6 @@ sub form_header { "charts" => { "key" => "ALL_CHARTS", "transdate" => $::form->{transdate} }); - $::form->{accno} = $::form->{ALL_CHARTS}[0]->{accno}; - GL->get_tax_dropdown(); - GL->get_chart_balances('charts' => $::form->{ALL_CHARTS}); my $title = $::form->{title}; @@ -903,12 +902,12 @@ sub form_header { sub form_footer { $::lxdebug->enter_sub; - $::auth->assert('general_ledger'); + $::auth->assert('gl_transactions'); my ($follow_ups, $follow_ups_due); if ($::form->{id}) { - $follow_ups = FU->follow_ups('trans_id' => $::form->{id}); + $follow_ups = FU->follow_ups('trans_id' => $::form->{id}, 'not_done' => 1); $follow_ups_due = sum map { $_->{due} * 1 } @{ $follow_ups || [] }; } @@ -967,8 +966,9 @@ sub yes { if (GL->delete_transaction(\%myconfig, \%$form)){ # saving the history if(!exists $form->{addition} && $form->{id} ne "") { - $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber}; + $form->{snumbers} = qq|gltransaction_| . $form->{id}; $form->{addition} = "DELETED"; + $form->{what_done} = "gl_transaction"; $form->save_history; } # /saving the history @@ -1003,9 +1003,9 @@ sub post_transaction { my $debitcredit; my %split_safety = (); - my $dbh = $form->dbconnect_noauto(\%myconfig); + my $dbh = SL::DB->client->dbh; my ($notax_id) = selectrow_query($form, $dbh, "SELECT id FROM tax WHERE taxkey = 0 LIMIT 1", ); - $dbh->disconnect; + my $zerotaxes = selectall_hashref_query($form, $dbh, "SELECT id FROM tax WHERE rate = 0", ); my @flds = qw(accno debit credit projectnumber fx_transaction source memo tax taxchart); @@ -1061,22 +1061,22 @@ sub post_transaction { $form->{"tax_$i"} = 0; } my ($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"}); - if ($taxkey > 1) { + my $iswithouttax = grep { $_->{id} == $taxkey } @{ $zerotaxes }; + if (!$iswithouttax) { if ($debitcredit) { $debittax = 1; } else { $credittax = 1; } - if ($form->{taxincluded}) { - $form->{"tax_$i"} = $amount / ($rate + 1) * $rate; - if ($debitcredit) { - $form->{"debit_$i"} = $form->{"debit_$i"} - $form->{"tax_$i"}; - } else { - $form->{"credit_$i"} = $form->{"credit_$i"} - $form->{"tax_$i"}; - } + + my ($tmpnetamount,$tmpdiff); + ($tmpnetamount,$form->{"tax_$i"},$tmpdiff) = $form->calculate_tax($amount,$rate,$form->{taxincluded} *= 1,2); + if ($debitcredit) { + $form->{"debit_$i"} = $tmpnetamount; } else { - $form->{"tax_$i"} = $amount * $rate; + $form->{"credit_$i"} = $tmpnetamount; } + } else { $form->{"tax_$i"} = 0; } @@ -1115,6 +1115,9 @@ sub post_transaction { $form->{taxincluded} = 0 if !$taxtotal; # this is just for the wise guys + + $form->error($locale->text('Cannot post transaction above the maximum future booking date!')) + if ($form->date_max_future($form->{"transdate"}, \%myconfig)); $form->error($locale->text('Cannot post transaction for a closed period!')) if ($form->date_closed($form->{"transdate"}, \%myconfig)); if ($form->round_amount($debit, 2) != $form->round_amount($credit, 2)) { @@ -1137,9 +1140,9 @@ sub post_transaction { undef($form->{callback}); # saving the history if(!exists $form->{addition} && $form->{id} ne "") { - $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber}; - $form->{addition} = "SAVED"; - $form->{what_done} = $locale->text("Buchungsnummer") . " = " . $form->{id}; + $form->{snumbers} = qq|gltransaction_| . $form->{id}; + $form->{addition} = "POSTED"; + $form->{what_done} = "gl transaction"; $form->save_history; } # /saving the history @@ -1150,7 +1153,7 @@ sub post_transaction { sub post { $main::lxdebug->enter_sub(); - $main::auth->assert('general_ledger'); + $main::auth->assert('gl_transactions'); my $form = $main::form; my $locale = $main::locale; @@ -1166,9 +1169,7 @@ sub post { post_transaction(); - remove_draft() if $form->{remove_draft}; - - $form->{callback} = build_std_url("action=add&DONT_LOAD_DRAFT=1", "show_details"); + $form->{callback} = build_std_url("action=add", "show_details"); $form->redirect($form->{callback}); $main::lxdebug->leave_sub(); @@ -1177,7 +1178,7 @@ sub post { sub post_as_new { $main::lxdebug->enter_sub(); - $main::auth->assert('general_ledger'); + $main::auth->assert('gl_transactions'); my $form = $main::form; @@ -1190,7 +1191,7 @@ sub post_as_new { sub storno { $main::lxdebug->enter_sub(); - $main::auth->assert('general_ledger'); + $main::auth->assert('gl_transactions'); my $form = $main::form; my %myconfig = %main::myconfig; @@ -1206,8 +1207,9 @@ sub storno { # saving the history if(!exists $form->{addition} && $form->{id} ne "") { - $form->{snumbers} = "ordnumber_$form->{ordnumber}"; + $form->{snumbers} = qq|gltransaction_| . $form->{id}; $form->{addition} = "STORNO"; + $form->{what_done} = "gl_transaction"; $form->save_history; } # /saving the history @@ -1222,16 +1224,18 @@ sub continue { } sub get_tax_dropdown { + $main::lxdebug->enter_sub(); my $form = $main::form; - $main::lxdebug->enter_sub(); - GL->get_tax_dropdown(); + my @tax_accounts = GL->get_tax_dropdown($form->{accno}); - foreach my $item (@{ $form->{TAX_ACCOUNTS} }) { + 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"); $main::lxdebug->leave_sub();