X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=bin%2Fmozilla%2Fgl.pl;h=464fb0162669c049312cd6315fd0c19ee0511ddc;hb=87c7db6a14d2276b72c85a8423e3995f20255b6a;hp=f88a0eb7a11da5d4625208020d2f9b8b1c22ca14;hpb=4dbb09950c9f5596646537c12d991c99086fe7c1;p=kivitendo-erp.git diff --git a/bin/mozilla/gl.pl b/bin/mozilla/gl.pl index f88a0eb7a..464fb0162 100644 --- a/bin/mozilla/gl.pl +++ b/bin/mozilla/gl.pl @@ -31,17 +31,15 @@ # #====================================================================== - use SL::GL; use SL::PE; -use Data::Dumper; - require "$form->{path}/arap.pl"; +require "bin/mozilla/common.pl"; 1; -# end of main +# end of main # this is for our long dates # $locale->text('January') @@ -71,145 +69,192 @@ require "$form->{path}/arap.pl"; # $locale->text('Nov') # $locale->text('Dec') - sub add { $lxdebug->enter_sub(); $form->{title} = "Add"; - - $form->{callback} = "$form->{script}?action=add&path=$form->{path}&login=$form->{login}&password=$form->{password}" unless $form->{callback}; + + $form->{callback} = + "$form->{script}?action=add&path=$form->{path}&login=$form->{login}&password=$form->{password}" + unless $form->{callback}; # we use this only to set a default date GL->transaction(\%myconfig, \%$form); - map { $chart .= "" } @{ $form->{chart} }; - map { $tax .= qq|" } @{ $form->{chart} }; - $form->{chart} = $chart; - map { $tax .= qq|"; - $form->{debitchart} = ""; - } else { - $form->{creditchart} = $form->{chart}; - $form->{creditchart} =~ s/value=\"$form->{creditchartselected}\"/value=\"$form->{creditchartselected}\" selected/; - - $form->{debitchart} = $form->{chart}; - $form->{debitchart} =~ s/value=\"$form->{debitchartselected}\"/value=\"$form->{debitchartselected}\" selected/; + $form->{oldtransdate} = $form->{transdate}; + + my @a = (); + my $count = 0; + my $debittax = 0; + my $credittax = 0; + my $debitcount = 0; + my $creditcount = 0; + $debitlock = 0; + $creditlock = 0; + + my @flds = + qw(accno debit credit projectnumber fx_transaction source memo tax taxchart); + + for my $i (1 .. $form->{rowcount}) { + + unless (($form->{"debit_$i"} eq "") && ($form->{"credit_$i"} eq "")) { + for (qw(debit credit tax)) { + $form->{"${_}_$i"} = + $form->parse_amount(\%myconfig, $form->{"${_}_$i"}); + } + + push @a, {}; + $debitcredit = ($form->{"debit_$i"} == 0) ? "0" : "1"; + if ($debitcredit) { + $debitcount++; + } else { + $creditcount++; + } + + if (($debitcount >= 2) && ($creditcount == 2)) { + $form->{"credit_$i"} = 0; + $form->{"tax_$i"} = 0; + $creditcount--; + $creditlock = 1; + } + if (($creditcount >= 2) && ($debitcount == 2)) { + $form->{"debit_$i"} = 0; + $form->{"tax_$i"} = 0; + $debitcount--; + $debitlock = 1; + } + if (($creditcount == 1) && ($debitcount == 2)) { + $creditlock = 1; + } + if (($creditcount == 2) && ($debitcount == 1)) { + $debitlock = 1; + } + if ($debitcredit && $credittax) { + $form->{"taxchart_$i"} = "0--0.00"; + } + if (!$debitcredit && $debittax) { + $form->{"taxchart_$i"} = "0--0.00"; + } + $amount = + ($form->{"debit_$i"} == 0) + ? $form->{"credit_$i"} + : $form->{"debit_$i"}; + $j = $#a; + if (($debitcredit && $credittax) || (!$debitcredit && $debittax)) { + $form->{"taxchart_$i"} = "0--0.00"; + $form->{"tax_$i"} = 0; + } + if (!$form->{"korrektur_$i"}) { + ($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"}); + if ($taxkey > 1) { + 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; + } + } + + for (@flds) { $a[$j]->{$_} = $form->{"${_}_$i"} } + $count++; + } } - ($debitaccno, $debittaxkey) = split(/--/, $form->{debitchartselected}); - ($creditaccno, $credittaxkey) = split(/--/, $form->{creditchartselected}); - if ($debittaxkey >0) { - $form->{taxchart} = $form->unescape($form->{taxchart}); - $form->{taxchart} =~ s/selected//ig; - $form->{taxchart} =~ s/\"$debittaxkey--([^\"]*)\"/\"$debittaxkey--$1\" selected/; - - $rate = $1; - - if ($form->{taxincluded}) { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{amount}) / ($rate + 1); - $form->{credit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{tax} = $form->parse_amount(\%myconfig, $form->{amount}) / ($rate + 1) * $rate; - } else { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{credit} = $form->parse_amount(\%myconfig, $form->{amount}) * ($rate + 1); - $form->{tax} = $form->parse_amount(\%myconfig, $form->{amount}) * $rate; - } - } else { - $form->{taxchart} = $form->unescape($form->{taxchart}); - $form->{taxchart} =~ s/selected//ig; - $form->{taxchart} =~ s/\"$credittaxkey--([^\"]*)\"/\"$credittaxkey--$1\" selected/; - $rate = $1; - - if ($form->{taxincluded}) { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{credit} = $form->parse_amount(\%myconfig, $form->{amount}) / ($rate + 1); - $form->{tax} = $form->parse_amount(\%myconfig, $form->{amount}) / ($rate + 1) * $rate; - } else { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{amount}) * ($rate + 1); - $form->{credit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{tax} = $form->parse_amount(\%myconfig, $form->{amount}) * $rate; - } - } - if ($form->{credit_splited}) { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{credit} = $credit_save; - $form->{tax} = 0; - } elsif ($form->{debit_splited}) { - $form->{credit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{debit} = $debit_save; - $form->{tax} = 0; + + for $i (1 .. $count) { + $j = $i - 1; + for (@flds) { $form->{"${_}_$i"} = $a[$j]->{$_} } } - &check_project; + + for $i ($count + 1 .. $form->{rowcount}) { + for (@flds) { delete $form->{"${_}_$i"} } + } + + $form->{rowcount} = $count + 1; &display_form; - $lxdebug->leave_sub(); -} +} sub display_form { + my ($init) = @_; $lxdebug->enter_sub(); + &form_header($init); - &form_header; -# for $i (1 .. $form->{rowcount}) { -# $form->{totaldebit} += $form->parse_amount(\%myconfig, $form->{"debit_$i"}); -# $form->{totalcredit} += $form->parse_amount(\%myconfig, $form->{"credit_$i"}); -# -# &form_row($i); -# } - + # for $i (1 .. $form->{rowcount}) { + # $form->{totaldebit} += $form->parse_amount(\%myconfig, $form->{"debit_$i"}); + # $form->{totalcredit} += $form->parse_amount(\%myconfig, $form->{"credit_$i"}); + # + # &form_row($i); + # } + &display_rows($init); &form_footer; - $lxdebug->leave_sub(); + } +sub display_rows { + my ($init) = @_; + $lxdebug->enter_sub(); + + $form->{totaldebit} = 0; + $form->{totalcredit} = 0; + + my @old_project_ids = (); + map({ push(@old_project_ids, $form->{"project_id_$_"}) + if ($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} }, + "taxcharts" => "ALL_TAXCHARTS"); + + my %project_labels = (); + my @project_values = (""); + foreach my $item (@{ $form->{"ALL_PROJECTS"} }) { + push(@project_values, $item->{"id"}); + $project_labels{$item->{"id"}} = $item->{"projectnumber"}; + } + + my %chart_labels = (); + my @chart_values = (); + my %charts = (); + my $taxchart_init; + foreach my $item (@{ $form->{ALL_CHARTS} }) { + my $key = Q($item->{accno}) . "--" . Q($item->{tax_id}); + $taxchart_init = $item->{taxkey_id} unless (@chart_values); + push(@chart_values, $key); + $chart_labels{$key} = H($item->{accno}) . "--" . H($item->{description}); + $charts{$item->{accno}} = $item; + } + + my %taxchart_labels = (); + my @taxchart_values = (); + my %taxcharts = (); + foreach my $item (@{ $form->{ALL_TAXCHARTS} }) { + my $key = Q($item->{id}) . "--" . Q($item->{rate}); + $taxchart_init = $key if ($taxchart_init eq $item->{taxkey}); + push(@taxchart_values, $key); + $taxchart_labels{$key} = H($item->{taxdescription}) . " " . + H($item->{rate} * 100) . ' %'; + $taxcharts{$item->{id}} = $item; + } + for $i (1 .. $form->{rowcount}) { + $source = qq| + |; + $memo = qq| + |; + + 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"}); + + 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}"; + } + + $selected_accno = '' if ($init); + $selected_taxchart = $taxchart_init unless ($selected_taxchart ne ""); + + $accno = qq|| . + NTI($cgi->popup_menu('-name' => "accno_$i", + '-id' => "accno_$i", + '-onChange' => "setTaxkey(this, $i)", + '-style' => 'width:200px', + '-values' => \@chart_values, + '-labels' => \%chart_labels, + '-default' => $selected_accno_full)) + . $cgi->hidden('-name' => "previous_accno_$i", + '-default' => $selected_accno_full) + . qq||; + $tax = qq|| . + NTI($cgi->popup_menu('-name' => "taxchart_$i", + '-id' => "taxchart_$i", + '-style' => 'width:200px', + '-values' => \@taxchart_values, + '-labels' => \%taxchart_labels, + '-default' => $selected_taxchart)) + . qq||; + + if ($init) { + $korrektur = + qq||; + if ($form->{transfer}) { + $fx_transaction = qq| + + |; + } + + } else { + if ($form->{"debit_$i"} != 0) { + $form->{totaldebit} += $form->{"debit_$i"}; + if (!$form->{taxincluded}) { + $form->{totaldebit} += $form->{"tax_$i"}; + } + } else { + $form->{totalcredit} += $form->{"credit_$i"}; + if (!$form->{taxincluded}) { + $form->{totalcredit} += $form->{"tax_$i"}; + } + } + + for (qw(debit credit tax)) { + $form->{"${_}_$i"} = + ($form->{"${_}_$i"}) + ? $form->format_amount(\%myconfig, $form->{"${_}_$i"}, 2) + : ""; + } + + if ($i < $form->{rowcount}) { + if ($form->{transfer}) { + $checked = ($form->{"fx_transaction_$i"}) ? "1" : ""; + $x = ($checked) ? "x" : ""; + $fx_transaction = qq| + $x + |; + } + $checked = ($form->{"korrektur_$i"}) ? "checked" : ""; + $korrektur = + qq||; + $form->hide_form("accno_$i"); + + } else { + $korrektur = + qq||; + if ($form->{transfer}) { + $fx_transaction = qq| + + |; + } + } + } + my $debitreadonly = ""; + my $creditreadonly = ""; + if ($i == $form->{rowcount}) { + if ($debitlock) { + $debitreadonly = "readonly"; + } elsif ($creditlock) { + $creditreadonly = "readonly"; + } + } + + my $projectnumber = + NTI($cgi->popup_menu('-name' => "project_id_$i", + '-values' => \@project_values, + '-labels' => \%project_labels, + '-default' => $form->{"project_id_$i"} )); + + print qq| + $accno + $fx_transaction + + + + $korrektur + $tax + $source + $memo + $projectnumber + + + |; + } + + $form->hide_form(qw(rowcount selectaccno)); + + $lxdebug->leave_sub(); + +} sub form_header { + my ($init) = @_; $lxdebug->enter_sub(); - - $title = $form->{title}; + $title = $form->{title}; $form->{title} = $locale->text("$title General Ledger Transaction"); - $readonly = ($form->{id}) ? "readonly" : ""; - - $form->{urldebit} = "$form->{script}?action=split_debit&path=$form->{path}&login=$form->{login}&password=$form->{password}"; - $form->{urlcredit} = "$form->{script}?action=split_credit&path=$form->{path}&login=$form->{login}&password=$form->{password}"; -# $locale->text('Add General Ledger Transaction') -# $locale->text('Edit General Ledger Transaction') - map { $form->{$_} =~ s/\"/"/g } qw(reference description chart); + $readonly = ($form->{id}) ? "readonly" : ""; + + # $locale->text('Add General Ledger Transaction') + # $locale->text('Edit General Ledger Transaction') + + map { $form->{$_} =~ s/\"/"/g } + qw(reference description chart taxchart); + $form->{javascript} = qq||; $form->{selectdepartment} =~ s/ selected//; - $form->{taxchart} =~ s/ selected//; - $form->{selectdepartment} =~ s/option>\Q$form->{department}\E/option selected>$form->{department}/; + $form->{selectdepartment} =~ + s/option>\Q$form->{department}\E/option selected>$form->{department}/; if (($rows = $form->numtextrows($form->{description}, 50)) > 1) { - $description = qq||; + $description = + qq||; } else { - $description = qq||; + $description = + qq||; } - + $taxincluded = ($form->{taxincluded}) ? "checked" : ""; - - if (!$form->{id}) { - $taxincluded = "checked"; + + if ($init) { + $taxincluded = "checked"; } - - $amount = qq||; - - + $department = qq| - |.$locale->text('Department').qq| + | . $locale->text('Department') . qq| | if $form->{selectdepartment}; + if ($init) { + $form->{fokus} = "gl.reference"; + } else { + $form->{fokus} = qq|gl.accno_$form->{rowcount}|; + } - $form->{fokus} = "gl.reference"; - $form->{remote} = 1; - # use JavaScript Calendar or not $form->{jsscript} = $jscalendar; $jsscript = ""; - if ($form->{jsscript}) - { + if ($form->{jsscript}) { + # with JavaScript Calendar $button1 = qq| - {transdate} tabindex="2" $readonly> - text('button').qq|> + + text('button') . qq|> |; - #write Trigger - $jsscript = Form->write_trigger(\%myconfig,"1","transdate","BL","trigger1","","",""); - } - else - { - # without JavaScript Calendar - $button1 = qq|{transdate} tabindex="2" $readonly>|; - } - + + #write Trigger + $jsscript = + Form->write_trigger(\%myconfig, "1", "transdate", "BL", "trigger1"); + } else { + + # without JavaScript Calendar + $button1 = + qq||; + } + $form->header; - print qq| @@ -905,10 +1323,6 @@ sub form_header { {closedto}> {locked}> -escape($form->{taxchart}).qq|> - - - @@ -920,222 +1334,174 @@ sub form_header { +
- - + + |; -if ($form->{id}) { - print qq| + if ($form->{id}) { + print qq| - + |; - } - print qq| + } + print qq| $department|; -if ($form->{id}) { - print qq| + if ($form->{id}) { + print qq| - - + + + - |; - } else { - print qq| - - - |; - } - print qq| + } else { + print qq| - - - + + |; - if ($form->{debit_splited}) { - print qq| - - - - - - {debit_splited}> + } + print qq| + + - - - - + $jsscript |; - $lxdebug->leave_sub(); -} +} sub form_footer { $lxdebug->enter_sub(); ($dec) = ($form->{totaldebit} =~ /\.(\d+)/); $dec = length $dec; $decimalplaces = ($dec > 2) ? $dec : 2; - $taxrowcount = ($form->{creditrowcount} > $form->{debitrowcount}) ? $form->{creditrowcount} : $form->{debitrowcount}; - $radieren = ($form->current_date(\%myconfig) eq $form->{gldate})? 1 : 0; + $radieren = ($form->current_date(\%myconfig) eq $form->{gldate}) ? 1 : 0; + + map { + $form->{$_} = + $form->format_amount(\%myconfig, $form->{$_}, 2, " ") + } qw(totaldebit totalcredit); - map { $form->{$_} = $form->format_amount(\%myconfig, $form->{$_}, $decimalplaces, " ") } qw(totaldebit totalcredit); - print qq| + + + + + + +
|.$locale->text('Reference').qq|| . $locale->text('Reference') . qq| - +
- + $button1
|.$locale->text('Date').qq|| . $locale->text('Date') . qq|
|.$locale->text('Belegnummer').qq|| . $locale->text('Belegnummer') . qq| - +
- +
|.$locale->text('Buchungsdatum').qq|| . $locale->text('Buchungsdatum') . qq| {gldate} $readonly>
|.$locale->text('Description').qq|$description| . $locale->text('Description') . qq|$description + + + + + +
| . $locale->text('MwSt. inkl.') . qq|
+
- - + +
|.$locale->text('Mitarbeiter').qq|{employee} $readonly>| . $locale->text('Mitarbeiter') . qq|
|.$locale->text('Description').qq|$description
|.$locale->text('Betrag').qq|$amount + | . $locale->text('Description') . qq|$description - - + +
|.$locale->text('MwSt. inkl.').qq|| . $locale->text('MwSt. inkl.') . qq|
|.$locale->text('Debit').qq|Betrag gesplittet EUR
+ + + + + + + + + + + - - - - - {credit_splited}> - - |; - } elsif ($form->{credit_splited}) { - print qq| - - - - - {debit_splited}> - - - - - - - {credit_splited}> - |; - } else { - print qq| - - - - - - {debit_splited}> - - - - - - - {credit_splited}> - - - - - - - |; - } - print qq| -
| + . $locale->text('Account') . qq|| + . $locale->text('Debit') . qq|| + . $locale->text('Credit') . qq|| + . $locale->text('Tax') . qq|| + . $locale->text('Korrektur') . qq|| + . $locale->text('Taxkey') . qq|| + . $locale->text('Source') . qq|| . $locale->text('Memo') . qq|| + . $locale->text('Project Number') . qq|
|.$locale->text('Credit').qq| EUR
|.$locale->text('Debit').qq| EUR
|.$locale->text('Credit').qq|Betrag gesplittet EUR
|.$locale->text('Debit').qq| EUR
|.$locale->text('Credit').qq| EUR
|.$locale->text('Tax').qq| EUR
-

$form->{totaldebit} $form->{totalcredit}
+
-|; - for $i (2 .. $form->{creditrowcount}) { - print qq| - - - |; - } - for $i (2 .. $form->{debitrowcount}) { - print qq| - - - |; - } - if ($taxrowcount > 1) { - for $i (2 .. $taxrowcount) { - print qq| - - - |; - } - } -print qq| + {path}> {login}> {password}> +
|; $transdate = $form->datetonum($form->{transdate}, \%myconfig); - $closedto = $form->datetonum($form->{closedto}, \%myconfig); + $closedto = $form->datetonum($form->{closedto}, \%myconfig); if ($form->{id}) { - - print qq||; - -# Löschen und ändern von Buchungen nicht mehr möglich (GoB) nur am selben Tag möglich - - - - if (!$form->{locked} && $radieren) { - print qq| - - |; - } - - -# if ($transdate > $closedto) { -# print qq| -# |; -# } - } else { - if ($transdate > $closedto) { - print qq| - |; - } - } - - if ($form->{menubar}) { - require "$form->{path}/menu.pl"; - &menubar; + + print qq||; + + # Löschen und Ändern von Buchungen nicht mehr möglich (GoB) nur am selben Tag möglich + + if (!$form->{locked} && $radieren) { + print qq| + + |; + } + + # if ($transdate > $closedto) { + # print qq| + # |; + # } + } else { + if ($transdate > $closedto) { + print qq| + |; + } } - + print " "; - $lxdebug->leave_sub(); -} +} sub delete { $lxdebug->enter_sub(); @@ -1148,477 +1514,259 @@ sub delete {
{script}> |; - map { $form->{$_} =~ s/\"/"/g } qw(reference description chart); + map { $form->{$_} =~ s/\"/"/g } qw(reference description); delete $form->{header}; foreach $key (keys %$form) { - print qq|\n|; + print qq|\n|; } print qq| -

|.$locale->text('Confirm!').qq|

+

| . $locale->text('Confirm!') . qq|

-

|.$locale->text('Are you sure you want to delete Transaction').qq| $form->{reference}

+

| + . $locale->text('Are you sure you want to delete Transaction') + . qq| $form->{reference}

- +
|; - $lxdebug->leave_sub(); -} +} sub yes { $lxdebug->enter_sub(); - - $form->redirect($locale->text('Transaction deleted!')) if (GL->delete_transaction(\%myconfig, \%$form)); + if (GL->delete_transaction(\%myconfig, \%$form)){ + # saving the history + if(!exists $form->{addition} && $form->{id} ne "") { + $form->{addition} = "DELETED"; + $form->save_history($form->dbconnect(\%myconfig)); + } + # /saving the history + $form->redirect($locale->text('Transaction deleted!')) + } $form->error($locale->text('Cannot delete transaction!')); - $lxdebug->leave_sub(); -} +} sub post { $lxdebug->enter_sub(); + # check if there is something in reference and date - $form->isblank("reference", $locale->text('Reference missing!')); - $form->isblank("transdate", $locale->text('Transaction Date missing!')); + $form->isblank("reference", $locale->text('Reference missing!')); + $form->isblank("transdate", $locale->text('Transaction Date missing!')); $form->isblank("description", $locale->text('Description missing!')); - + $transdate = $form->datetonum($form->{transdate}, \%myconfig); - $closedto = $form->datetonum($form->{closedto}, \%myconfig); + $closedto = $form->datetonum($form->{closedto}, \%myconfig); + + my @a = (); + my $count = 0; + my $debittax = 0; + my $credittax = 0; + my $debitcount = 0; + my $creditcount = 0; + $creditlock = 0; + $debitlock = 0; + + my @flds = + qw(accno debit credit projectnumber fx_transaction source memo tax taxchart); + if ($form->{storno}) { + for my $i (1 .. $form->{rowcount}) { + unless (($form->{"debit_$i"} eq "") && ($form->{"credit_$i"} eq "")) { + if ($form->{"debit_$i"} ne "") { + $form->{"credit_$i"} = $form->{"debit_$i"}; + $form->{"debit_$i"} = ""; + } elsif ($form->{"credit_$i"} ne "") { + $form->{"debit_$i"} = $form->{"credit_$i"}; + $form->{"credit_$i"} = ""; + } + } + } + } - ($debitaccno, $debittaxkey) = split(/--/, $form->{debitchartselected}); - ($creditaccno, $credittaxkey) = split(/--/, $form->{creditchartselected}); - - $credit_save = $form->{credit}; - $debit_save = $form->{debit}; - - # check project - &check_project; - ($taxkey, $taxrate) = split(/--/, $form->{taxchartselected}); - - if ($debittaxkey >0) { - $form->{taxchart} = $form->unescape($form->{taxchart}); - $form->{taxchart} =~ s/\"$debittaxkey--([^\"]*)\"/\"$debittaxkey--$1\"/; - - $rate = ($form->{taxchart} =~ /selected/) ? $taxrate : $1; - $form->{taxkey} = ($form->{taxchart} =~ /selected/) ? $taxkey : $debittaxkey; - - if ($form->{storno}) { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{debit}); - $form->{credit} = $form->parse_amount(\%myconfig, $form->{credit}); - $form->{tax} = $form->parse_amount(\%myconfig, $form->{tax}); - } else { - if ($form->{taxincluded}) { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{amount}) / ($rate + 1); - $form->{credit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{tax} = $form->parse_amount(\%myconfig, $form->{amount}) / ($rate + 1) * $rate; - } else { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{credit} = $form->parse_amount(\%myconfig, $form->{amount}) * ($rate + 1); - $form->{tax} = $form->parse_amount(\%myconfig, $form->{amount}) * $rate; - } - } - $form->{debittaxkey}=1; - - } else { - $form->{taxchart} = $form->unescape($form->{taxchart}); - $form->{taxchart} =~ s/\"$credittaxkey--([^\"]*)\"/\"$credittaxkey--$1\"/; - - - $rate = ($form->{taxchart} =~ /selected/) ? $taxrate : $1; - $form->{taxkey} = ($form->{taxchart} =~ /selected/) ? $taxkey : $credittaxkey; - - if ($form->{storno}) { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{debit}); - $form->{credit} = $form->parse_amount(\%myconfig, $form->{credit}); - $form->{tax} = $form->parse_amount(\%myconfig, $form->{tax}); - } else { - if ($form->{taxincluded}) { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{credit} = $form->parse_amount(\%myconfig, $form->{amount}) / ($rate + 1); - $form->{tax} = $form->parse_amount(\%myconfig, $form->{amount}) / ($rate + 1) * $rate; - } else { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{amount}) * ($rate + 1); - $form->{credit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{tax} = $form->parse_amount(\%myconfig, $form->{amount}) * $rate; - } - } - $form->{debittaxkey}=0; - - } - if ($form->{credit_splited}) { - $form->{debit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{credit} = $credit_save; - $form->{tax} = 0; - } elsif ($form->{debit_splited}) { - $form->{credit} = $form->parse_amount(\%myconfig, $form->{amount}) * 1; - $form->{debit} = $debit_save; - $form->{tax} = 0; + for my $i (1 .. $form->{rowcount}) { + + unless (($form->{"debit_$i"} eq "") && ($form->{"credit_$i"} eq "")) { + for (qw(debit credit tax)) { + $form->{"${_}_$i"} = + $form->parse_amount(\%myconfig, $form->{"${_}_$i"}); + } + + push @a, {}; + $debitcredit = ($form->{"debit_$i"} == 0) ? "0" : "1"; + + if ($debitcredit) { + $debitcount++; + } else { + $creditcount++; + } + + if (($debitcount >= 2) && ($creditcount == 2)) { + $form->{"credit_$i"} = 0; + $form->{"tax_$i"} = 0; + $creditcount--; + $creditlock = 1; + } + if (($creditcount >= 2) && ($debitcount == 2)) { + $form->{"debit_$i"} = 0; + $form->{"tax_$i"} = 0; + $debitcount--; + $debitlock = 1; + } + if (($creditcount == 1) && ($debitcount == 2)) { + $creditlock = 1; + } + if (($creditcount == 2) && ($debitcount == 1)) { + $debitlock = 1; + } + if ($debitcredit && $credittax) { + $form->{"taxchart_$i"} = "0--0.00"; + } + if (!$debitcredit && $debittax) { + $form->{"taxchart_$i"} = "0--0.00"; + } + $amount = + ($form->{"debit_$i"} == 0) + ? $form->{"credit_$i"} + : $form->{"debit_$i"}; + $j = $#a; + if (($debitcredit && $credittax) || (!$debitcredit && $debittax)) { + $form->{"taxchart_$i"} = "0--0.00"; + $form->{"tax_$i"} = 0; + } + if (!$form->{"korrektur_$i"}) { + ($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"}); + if ($taxkey > 1) { + 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"}; + } + } else { + $form->{"tax_$i"} = $amount * $rate; + } + } else { + $form->{"tax_$i"} = 0; + } + } elsif ($form->{taxincluded}) { + if ($debitcredit) { + $form->{"debit_$i"} = $form->{"debit_$i"} - $form->{"tax_$i"}; + } else { + $form->{"credit_$i"} = $form->{"credit_$i"} - $form->{"tax_$i"}; + } + } + + for (@flds) { $a[$j]->{$_} = $form->{"${_}_$i"} } + $count++; + } + } + + for $i (1 .. $count) { + $j = $i - 1; + for (@flds) { $form->{"${_}_$i"} = $a[$j]->{$_} } + } + + for $i ($count + 1 .. $form->{rowcount}) { + for (@flds) { delete $form->{"${_}_$i"} } + } + + for $i (1 .. $form->{rowcount}) { + $dr = $form->{"debit_$i"}; + $cr = $form->{"credit_$i"}; + $tax = $form->{"tax_$i"}; + if ($dr && $cr) { + $form->error( + $locale->text( + 'Cannot post transaction with a debit and credit entry for the same account!' + )); + } + if ($form->{taxincluded}) { + if ($dr) { + $debit += $dr + $tax; + } + if ($cr) { + $credit += $cr + $tax; + } + $taxtotal += $tax; + } else { + if ($dr) { + $debit += $dr + $tax; + } + if ($cr) { + $credit += $cr + $tax; + } + } + } + if (!$taxtotal) { + $form->{taxincluded} = 0; } - # this is just for the wise guys - $form->error($locale->text('Cannot post transaction for a closed period!')) if ($transdate <= $closedto); - $form->error($locale->text('Soll- und Habenkonto sind gleich!')) if ($debitaccno eq $creditaccno); - $form->error($locale->text('Keine Steuerautomatik möglich!')) if ($debittaxkey && $credittaxkey && !($taxkey == 0)); + $form->error($locale->text('Cannot post transaction for a closed period!')) + if ($transdate <= $closedto); + if ($form->round_amount($debit, 2) != $form->round_amount($credit, 2)) { + $form->error($locale->text('Out of balance transaction!')); + } + + if ($form->round_amount($debit, 2) + $form->round_amount($credit, 2) == 0) { + $form->error($locale->text('Empty transaction!')); + } if (($errno = GL->post_transaction(\%myconfig, \%$form)) <= -1) { $errno *= -1; $err[1] = $locale->text('Cannot have a value in both Debit and Credit!'); $err[2] = $locale->text('Debit and credit out of balance!'); $err[3] = $locale->text('Cannot post a transaction without a value!'); - + $form->error($err[$errno]); } undef($form->{callback}); - $form->redirect("Buchung gespeichert. Buchungsnummer = ".$form->{id}); - + # saving the history + if(!exists $form->{addition} && $form->{id} ne "") { + $form->{addition} = "SAVED"; + $form->{what_done} = $locale->text("Buchungsnummer") . " = " . $form->{id}; + $form->save_history($form->dbconnect(\%myconfig)); + } + # /saving the history + $form->redirect("Buchung gespeichert. Buchungsnummer = " . $form->{id}); $lxdebug->leave_sub(); -} +} sub post_as_new { $lxdebug->enter_sub(); $form->{id} = 0; &add; - $lxdebug->leave_sub(); -} - -sub storno { - $lxdebug->enter_sub(); - $form->{id} = 0; - $form->{storno} =1; - &post; - - $lxdebug->leave_sub(); } -sub split_debit { +sub storno { $lxdebug->enter_sub(); - # change callback - $form->{old_callback} = $form->escape($form->{callback},1); - $form->{callback} = $form->escape("$form->{script}?action=update",1); - # delete action - delete $form->{action}; - # save all other form variables in a previousform variable - foreach $key (keys %$form) { - # escape ampersands - $form->{$key} =~ s/&/%26/g; - $previousform .= qq|$key=$form->{$key}&|; - } - chop $previousform; - $previousform = $form->escape($previousform, 1); - if (!$form->{debitpost}) { - $form->{debitpost} = $form->{amount}; - } - $form->{previousform} = $previousform; - &display_split_debit(); - - $lxdebug->leave_sub(); -} - -sub split_credit { - $lxdebug->enter_sub(); - # change callback - $form->{old_callback} = $form->escape($form->{callback},1); - $form->{callback} = $form->escape("$form->{script}?action=update",1); - # delete action - delete $form->{action}; - # save all other form variables in a previousform variable - foreach $key (keys %$form) { - # escape ampersands - $form->{$key} =~ s/&/%26/g; - $previousform .= qq|$key=$form->{$key}&|; + $form->{id} = 0; + $form->{storno} = 1; + # saving the history + if(!exists $form->{addition} && $form->{id} ne "") { + $form->{addition} = "STORNO"; + $form->save_history($form->dbconnect(\%myconfig)); } - chop $previousform; - $previousform = $form->escape($previousform, 1); - if (!$form->{creditpost}) { - $form->{creditpost} = $form->{amount}; - } - $form->{previousform} = $previousform; - &display_split_credit(); - $lxdebug->leave_sub(); -} - -sub display_split_credit { - $lxdebug->enter_sub(); - $form->{taxchart} = $form->unescape($form->{taxchart}); - - $form->header; - - print qq| - -
-|.$locale->text('Credit').qq|: |.$form->format_amount(\%myconfig, $form->{amount},2).qq| EUR
-|.$locale->text('Still to post').qq|: EUR
- - -|; -for $i (2 .. $form->{creditrowcount}) { - $form->{"creditchart_$i"} = $form->{chart}; - $form->{"creditchart_$i"} =~ s/value=\"$form->{"creditchartselected_$i"}\"/value=\"$form->{"creditchartselected_$i"}\" selected/; - - $form->{"taxchart_$i"} = $form->{taxchart}; - $form->{"taxchart_$i"} =~ s/value=\"$form->{"taxchartselected_$i"}\"/value=\"$form->{"taxchartselected_$i"}\" selected/; - $position = $i -1; -print qq| - - - - - - - - - - - - - - - - - - - - - -|; -} -print qq| -
Position $position|.$locale->text('Amount').qq| $1 EUR
|.$locale->text('Tax').qq| EUR Steuerkorrektur

- - -{path}> -{login}> -{password}> -{callback}> -{old_callback}> -{amount}> - - -escape($form->{chart}).qq|> -escape($form->{taxchart}).qq|> -

- - -

- - - -|; - - $lxdebug->leave_sub(); -} - -sub display_split_debit { - $lxdebug->enter_sub(); - $form->{taxchart} = $form->unescape($form->{taxchart}); - - $form->header; - - print qq| - -
-|.$locale->text('Debit').qq|: |.$form->format_amount(\%myconfig, $form->{amount},2).qq| EUR
-|.$locale->text('Still to post').qq|: EUR
- - -|; -for $i (2 .. $form->{debitrowcount}) { - $form->{"debitchart_$i"} = $form->{chart}; - $form->{"debitchart_$i"} =~ s/value=\"$form->{"debitchartselected_$i"}\"/value=\"$form->{"debitchartselected_$i"}\" selected/; - - $form->{"taxchart_$i"} = $form->{taxchart}; - $form->{"taxchart_$i"} =~ s/value=\"$form->{"taxchartselected_$i"}\"/value=\"$form->{"taxchartselected_$i"}\" selected/; - $position = $i -1; -print qq| - - - - - - - - - - - - - - - - - - - - - -|; -} -print qq| -
Position $position|.$locale->text('Amount').qq| $1 EUR
|.$locale->text('Tax').qq| EUR Steuerkorrektur

- - -{path}> -{login}> -{password}> -{callback}> -{old_callback}> -{amount}> - - -escape($form->{chart}).qq|> -escape($form->{taxchart}).qq|> -

- - -

- - - -|; - + # /saving the history + &post; $lxdebug->leave_sub(); -} -sub new_account { - $lxdebug->enter_sub(); - - $form->{chart} = $form->unescape($form->{chart}); - - if ($form->{credit_splited}) { - $form->{creditpost} = $form->{amount}; - - for $i (2 .. $form->{creditrowcount}) { - $form->{"credit_$i"} = $form->parse_amount(\%myconfig, $form->{"credit_$i"}); - $form->{creditpost} -= $form->{"credit_$i"}; - ($taxkey, $taxrate) = split(/--/, $form->{"taxchartselected_$i"}); - if ($form->{"tax_manual_$i"}) { - $form->{"tax_$i"} = $form->parse_amount(\%myconfig, $form->{"tax_$i"}); - } else { - $form->{"tax_$i"} = $form->{"credit_$i"} * $taxrate; - } - $form->{creditpost} -= $form->{"tax_$i"}; - - } - if ($form->{"credit_$form->{creditrowcount}"}) { - $form->{creditrowcount}++; - } - - &display_split_credit; - } - if ($form->{debit_splited}) { - $form->{debitpost} = $form->{amount}; - - for $i (2 .. $form->{debitrowcount}) { - $form->{"debit_$i"} = $form->parse_amount(\%myconfig, $form->{"debit_$i"}); - $form->{debitpost} -= $form->{"debit_$i"}; - ($taxkey, $taxrate) = split(/--/, $form->{"taxchartselected_$i"}); - if ($form->{"tax_manual_$i"}) { - $form->{"tax_$i"} = $form->parse_amount(\%myconfig, $form->{"tax_$i"}); - } else { - $form->{"tax_$i"} = $form->{"debit_$i"} * $taxrate; - } - $form->{debitpost} -= $form->{"tax_$i"}; - - } - if ($form->{"debit_$form->{debitrowcount}"}) { - $form->{debitrowcount}++; - } - - &display_split_debit; - } - $lxdebug->leave_sub(); } -sub close { - $lxdebug->enter_sub(); - - # save the new form variables before splitting previousform - map { $newform{$_} = $form->{$_} } keys %$form; - - $previousform = $form->unescape($form->{previousform}); - - # don't trample on previous variables - map { delete $form->{$_} } keys %newform; - - # now take it apart and restore original values - foreach $item (split /&/, $previousform) { - ($key, $value) = split /=/, $item, 2; - $value =~ s/%26/&/g; - $form->{$key} = $value; - } - if ($newform{credit_splited}) { - $form->{credit} = 0; - $form->{credit_splited} = $newform{credit_splited}; - $form->{creditrowcount} = $newform{creditrowcount}; - for $i (2 .. $form->{creditrowcount}) { - $form->{"creditchartselected_$i"} =$newform{"creditchartselected_$i"}; - $form->{"credit_$i"} =$newform{"credit_$i"}; - $form->{"credit_$i"} = $form->parse_amount(\%myconfig, $form->{"credit_$i"}); - $form->{"taxchartselected_$i"} =$newform{"taxchartselected_$i"}; - ($taxkey, $taxrate) = split(/--/, $form->{"taxchartselected_$i"}); - if ($newform{"tax_manual_$i"}) { - $form->{"tax_$i"} = $form->parse_amount(\%myconfig, $newform{"tax_$i"}); - } else { - $form->{"tax_$i"} = $form->{"credit_$i"} * $taxrate; - } - $form->{credit} += $form->round_amount($form->{"credit_$i"},2); - $form->{credit} += $form->round_amount($form->{"tax_$i"},2);; - - } - } else { - $form->{debit} = 0; - $form->{debit_splited} = $newform{debit_splited}; - $form->{debitrowcount} = $newform{debitrowcount}; - for $i (2 .. $form->{debitrowcount}) { - $form->{"debitchartselected_$i"} =$newform{"debitchartselected_$i"}; - $form->{"debit_$i"} =$newform{"debit_$i"}; - $form->{"debit_$i"} = $form->parse_amount(\%myconfig, $form->{"debit_$i"}); - $form->{"taxchartselected_$i"} =$newform{"taxchartselected_$i"}; - ($taxkey, $taxrate) = split(/--/, $form->{"taxchartselected_$i"}); - if ($newform{"tax_manual_$i"}) { - $form->{"tax_$i"} = $form->parse_amount(\%myconfig, $newform{"tax_$i"}); - } else { - $form->{"tax_$i"} = $form->{"debit_$i"} * $taxrate; - } - $form->{debit} += $form->round_amount($form->{"debit_$i"},2); - $form->{debit} += $form->round_amount($form->{"tax_$i"},2);; - } - } - delete $form->{action}; - $callback = $form->unescape($form->{callback}); - $form->{callback} = $form->unescape($form->{old_callback}); - delete $form->{old_callback}; - - # put callback together - foreach $key (keys %$form) { - # do single escape for Apache 2.0 - $value = $form->escape($form->{$key}, 1); - $callback .= qq|&$key=$value|; - } - $form->{callback} = $callback; - - - # redirect - $form->redirect; - $lxdebug->leave_sub(); -}