Revision 870e380d
Von Sven Schöling vor mehr als 15 Jahren hinzugefügt
bin/mozilla/gl.pl | ||
---|---|---|
require "bin/mozilla/drafts.pl";
|
||
require "bin/mozilla/reportgenerator.pl";
|
||
|
||
use strict;
|
||
|
||
1;
|
||
|
||
# end of main
|
||
... | ... | |
# $locale->text('Nov')
|
||
# $locale->text('Dec')
|
||
|
||
my $tax;
|
||
my $debitlock = 0;
|
||
my $creditlock = 0;
|
||
|
||
sub add {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('general_ledger');
|
||
|
||
$auth->assert('general_ledger');
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
|
||
return $lxdebug->leave_sub() if (load_draft_maybe());
|
||
return $main::lxdebug->leave_sub() if (load_draft_maybe());
|
||
|
||
$form->{title} = "Add";
|
||
|
||
... | ... | |
$form->{show_details} = $myconfig{show_form_details} unless defined $form->{show_details};
|
||
|
||
&display_form(1);
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
|
||
}
|
||
|
||
sub prepare_transaction {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$auth->assert('general_ledger');
|
||
$main::auth->assert('general_ledger');
|
||
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
|
||
GL->transaction(\%myconfig, \%$form);
|
||
|
||
... | ... | |
my $i = 1;
|
||
my $tax = 0;
|
||
my $taxaccno = "";
|
||
foreach $ref (@{ $form->{GL} }) {
|
||
$j = $i - 1;
|
||
foreach my $ref (@{ $form->{GL} }) {
|
||
my $j = $i - 1;
|
||
if ($tax && ($ref->{accno} eq $taxaccno)) {
|
||
$form->{"tax_$j"} = abs($ref->{amount});
|
||
$form->{"taxchart_$j"} = $ref->{id} . "--" . $ref->{taxrate};
|
||
... | ... | |
($form->datetonum($form->{transdate}, \%myconfig) <=
|
||
$form->datetonum($form->{closedto}, \%myconfig));
|
||
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
sub edit {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('general_ledger');
|
||
|
||
$auth->assert('general_ledger');
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
|
||
prepare_transaction();
|
||
|
||
... | ... | |
display_rows();
|
||
form_footer();
|
||
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
|
||
sub search {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('general_ledger');
|
||
|
||
$auth->assert('general_ledger');
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
my $locale = $main::locale;
|
||
my $cgi = $main::cgi;
|
||
|
||
$form->{title} = $locale->text('Journal');
|
||
|
||
... | ... | |
} (@{ $form->{all_departments} });
|
||
}
|
||
|
||
$department = qq|
|
||
my $department = qq|
|
||
<tr>
|
||
<th align=right nowrap>| . $locale->text('Department') . qq|</th>
|
||
<td colspan=3><select name=department>$form->{selectdepartment}</select></td>
|
||
... | ... | |
|
||
# use JavaScript Calendar or not
|
||
$form->{jsscript} = 1;
|
||
$jsscript = "";
|
||
my $jsscript = "";
|
||
my ($button1, $button2, $onload);
|
||
if ($form->{jsscript}) {
|
||
|
||
# with JavaScript Calendar
|
||
... | ... | |
</body>
|
||
</html>
|
||
|;
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
sub create_subtotal_row {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($totals, $columns, $column_alignment, $subtotal_columns, $class) = @_;
|
||
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
|
||
my $row = { map { $_ => { 'data' => '', 'class' => $class, 'align' => $column_alignment->{$_}, } } @{ $columns } };
|
||
|
||
map { $row->{$_}->{data} = $form->format_amount(\%myconfig, $totals->{$_}, 2) } @{ $subtotal_columns };
|
||
|
||
map { $totals->{$_} = 0 } @{ $subtotal_columns };
|
||
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
|
||
return $row;
|
||
}
|
||
|
||
sub generate_report {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('general_ledger');
|
||
|
||
$auth->assert('general_ledger');
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
my $locale = $main::locale;
|
||
|
||
report_generator_set_default_sort('transdate', 1);
|
||
|
||
... | ... | |
my %totals = map { $_ => 0 } @totals_columns;
|
||
my $idx = 0;
|
||
|
||
foreach $ref (@{ $form->{GL} }) {
|
||
foreach my $ref (@{ $form->{GL} }) {
|
||
|
||
my %rows;
|
||
|
||
... | ... | |
|
||
$report->generate_with_headers();
|
||
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
sub update {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$auth->assert('general_ledger');
|
||
$main::auth->assert('general_ledger');
|
||
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
|
||
$form->{oldtransdate} = $form->{transdate};
|
||
|
||
... | ... | |
my $credittax = 0;
|
||
my $debitcount = 0;
|
||
my $creditcount = 0;
|
||
$debitlock = 0;
|
||
$creditlock = 0;
|
||
my ($debitcredit, $amount);
|
||
|
||
my @flds =
|
||
qw(accno debit credit projectnumber fx_transaction source memo tax taxchart);
|
||
... | ... | |
($form->{"debit_$i"} == 0)
|
||
? $form->{"credit_$i"}
|
||
: $form->{"debit_$i"};
|
||
$j = $#a;
|
||
my $j = $#a;
|
||
if (($debitcredit && $credittax) || (!$debitcredit && $debittax)) {
|
||
$form->{"taxchart_$i"} = "0--0.00";
|
||
$form->{"tax_$i"} = 0;
|
||
}
|
||
($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"});
|
||
my ($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"});
|
||
if ($taxkey > 1) {
|
||
if ($debitcredit) {
|
||
$debittax = 1;
|
||
... | ... | |
}
|
||
}
|
||
|
||
for $i (1 .. $count) {
|
||
$j = $i - 1;
|
||
for my $i (1 .. $count) {
|
||
my $j = $i - 1;
|
||
for (@flds) { $form->{"${_}_$i"} = $a[$j]->{$_} }
|
||
}
|
||
|
||
for $i ($count + 1 .. $form->{rowcount}) {
|
||
for my $i ($count + 1 .. $form->{rowcount}) {
|
||
for (@flds) { delete $form->{"${_}_$i"} }
|
||
}
|
||
|
||
$form->{rowcount} = $count + 1;
|
||
|
||
&display_form;
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
|
||
}
|
||
|
||
sub display_form {
|
||
my ($init) = @_;
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('general_ledger');
|
||
|
||
$auth->assert('general_ledger');
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
|
||
&form_header($init);
|
||
|
||
... | ... | |
# }
|
||
&display_rows($init);
|
||
&form_footer;
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
|
||
}
|
||
|
||
sub display_rows {
|
||
my ($init) = @_;
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('general_ledger');
|
||
|
||
$auth->assert('general_ledger');
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
my $cgi = $main::cgi;
|
||
|
||
$form->{debit_1} = 0 if !$form->{"debit_1"};
|
||
$form->{totaldebit} = 0;
|
||
... | ... | |
my %charts = ();
|
||
my $taxchart_init;
|
||
foreach my $item (@{ $form->{ALL_CHARTS} }) {
|
||
if ($item->{charttype} eq 'H'){ #falls ?berschrift
|
||
if ($item->{charttype} eq 'H'){ #falls ?berschrift
|
||
next; #?berspringen (Bug 1150)
|
||
}
|
||
my $key = $item->{accno} . "--" . $item->{tax_id};
|
||
... | ... | |
$taxcharts{$item->{id}} = $item;
|
||
}
|
||
|
||
for $i (1 .. $form->{rowcount}) {
|
||
my ($source, $memo, $source_hidden, $memo_hidden);
|
||
for my $i (1 .. $form->{rowcount}) {
|
||
if ($form->{show_details}) {
|
||
$source = qq|
|
||
<td><input name="source_$i" value="$form->{"source_$i"}" size="16"></td>|;
|
||
... | ... | |
$selected_accno = '' if ($init);
|
||
$selected_taxchart ||= $taxchart_init;
|
||
|
||
$accno = qq|<td>| .
|
||
my $accno = qq|<td>| .
|
||
NTI($cgi->popup_menu('-name' => "accno_$i",
|
||
'-id' => "accno_$i",
|
||
'-onChange' => "setTaxkey($i)",
|
||
... | ... | |
'-default' => $selected_taxchart))
|
||
. qq|</td>|;
|
||
|
||
my ($fx_transaction, $checked);
|
||
if ($init) {
|
||
if ($form->{transfer}) {
|
||
$fx_transaction = qq|
|
||
... | ... | |
if ($i < $form->{rowcount}) {
|
||
if ($form->{transfer}) {
|
||
$checked = ($form->{"fx_transaction_$i"}) ? "1" : "";
|
||
$x = ($checked) ? "x" : "";
|
||
my $x = ($checked) ? "x" : "";
|
||
$fx_transaction = qq|
|
||
<td><input type=hidden name="fx_transaction_$i" value="$checked">$x</td>
|
||
|;
|
||
... | ... | |
|
||
$form->hide_form(qw(rowcount selectaccno));
|
||
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
|
||
}
|
||
|
||
sub form_header {
|
||
my ($init) = @_;
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('general_ledger');
|
||
|
||
$auth->assert('general_ledger');
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
my $locale = $main::locale;
|
||
|
||
my @old_project_ids = ();
|
||
map({ push(@old_project_ids, $form->{"project_id_$_"})
|
||
... | ... | |
|
||
GL->get_chart_balances('charts' => $form->{ALL_CHARTS});
|
||
|
||
$title = $form->{title};
|
||
my $title = $form->{title};
|
||
$form->{title} = $locale->text("$title General Ledger Transaction");
|
||
$readonly = ($form->{id}) ? "readonly" : "";
|
||
my $readonly = ($form->{id}) ? "readonly" : "";
|
||
|
||
$show_details_checked = "checked" if $form->{show_details};
|
||
my $show_details_checked = "checked" if $form->{show_details};
|
||
|
||
$ob_transaction_checked = "checked" if $form->{ob_transaction};
|
||
$cb_transaction_checked = "checked" if $form->{cb_transaction};
|
||
my $ob_transaction_checked = "checked" if $form->{ob_transaction};
|
||
my $cb_transaction_checked = "checked" if $form->{cb_transaction};
|
||
|
||
# $locale->text('Add General Ledger Transaction')
|
||
# $locale->text('Edit General Ledger Transaction')
|
||
... | ... | |
$form->{selectdepartment} =~
|
||
s/option>\Q$form->{department}\E/option selected>$form->{department}/;
|
||
|
||
if (($rows = $form->numtextrows($form->{description}, 50)) > 1) {
|
||
my $description;
|
||
if ((my $rows = $form->numtextrows($form->{description}, 50)) > 1) {
|
||
$description =
|
||
qq|<textarea name=description rows=$rows cols=50 wrap=soft $readonly >$form->{description}</textarea>|;
|
||
} else {
|
||
... | ... | |
qq|<input name=description size=50 value="$form->{description}" $readonly>|;
|
||
}
|
||
|
||
$taxincluded = ($form->{taxincluded}) ? "checked" : "";
|
||
my $taxincluded = ($form->{taxincluded}) ? "checked" : "";
|
||
|
||
if ($init) {
|
||
$taxincluded = "checked";
|
||
}
|
||
|
||
my $department;
|
||
$department = qq|
|
||
<tr>
|
||
<th align=right nowrap>| . $locale->text('Department') . qq|</th>
|
||
... | ... | |
|
||
# use JavaScript Calendar or not
|
||
$form->{jsscript} = 1;
|
||
$jsscript = "";
|
||
my $jsscript = "";
|
||
my ($button1, $button2);
|
||
if ($form->{jsscript}) {
|
||
|
||
# with JavaScript Calendar
|
||
... | ... | |
|
||
$jsscript
|
||
|;
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
|
||
}
|
||
|
||
sub form_footer {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('general_ledger');
|
||
|
||
$auth->assert('general_ledger');
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
my $locale = $main::locale;
|
||
my $cgi = $main::cgi;
|
||
|
||
my $follow_ups_block;
|
||
if ($form->{id}) {
|
||
... | ... | |
}
|
||
}
|
||
|
||
($dec) = ($form->{totaldebit} =~ /\.(\d+)/);
|
||
my ($dec) = ($form->{totaldebit} =~ /\.(\d+)/);
|
||
$dec = length $dec;
|
||
$decimalplaces = ($dec > 2) ? $dec : 2;
|
||
$radieren = ($form->current_date(\%myconfig) eq $form->{gldate}) ? 1 : 0;
|
||
my $decimalplaces = ($dec > 2) ? $dec : 2;
|
||
my $radieren = ($form->current_date(\%myconfig) eq $form->{gldate}) ? 1 : 0;
|
||
|
||
map {
|
||
$form->{$_} = $form->format_amount(\%myconfig, $form->{$_}, 2, " ")
|
||
... | ... | |
<br>
|
||
|;
|
||
|
||
$transdate = $form->datetonum($form->{transdate}, \%myconfig);
|
||
$closedto = $form->datetonum($form->{closedto}, \%myconfig);
|
||
my $transdate = $form->datetonum($form->{transdate}, \%myconfig);
|
||
my $closedto = $form->datetonum($form->{closedto}, \%myconfig);
|
||
|
||
if ($form->{id}) {
|
||
|
||
... | ... | |
</body>
|
||
</html>
|
||
";
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
|
||
}
|
||
|
||
sub delete {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my $form = $main::form;
|
||
my $locale = $main::locale;
|
||
|
||
$form->header;
|
||
|
||
... | ... | |
|
||
delete $form->{header};
|
||
|
||
foreach $key (keys %$form) {
|
||
foreach my $key (keys %$form) {
|
||
next if (($key eq 'login') || ($key eq 'password') || ('' ne ref $form->{$key}));
|
||
print qq|<input type="hidden" name="$key" value="$form->{$key}">\n|;
|
||
}
|
||
... | ... | |
. $locale->text('Yes') . qq|">
|
||
</form>
|
||
|;
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
|
||
}
|
||
|
||
sub yes {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
my $locale = $main::locale;
|
||
|
||
if (GL->delete_transaction(\%myconfig, \%$form)){
|
||
# saving the history
|
||
if(!exists $form->{addition} && $form->{id} ne "") {
|
||
... | ... | |
$form->redirect($locale->text('Transaction deleted!'))
|
||
}
|
||
$form->error($locale->text('Cannot delete transaction!'));
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
|
||
}
|
||
|
||
sub post_transaction {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
my $locale = $main::locale;
|
||
|
||
# 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("description", $locale->text('Description missing!'));
|
||
|
||
$transdate = $form->datetonum($form->{transdate}, \%myconfig);
|
||
$closedto = $form->datetonum($form->{closedto}, \%myconfig);
|
||
my $transdate = $form->datetonum($form->{transdate}, \%myconfig);
|
||
my $closedto = $form->datetonum($form->{closedto}, \%myconfig);
|
||
|
||
my @a = ();
|
||
my $count = 0;
|
||
... | ... | |
my $credittax = 0;
|
||
my $debitcount = 0;
|
||
my $creditcount = 0;
|
||
$creditlock = 0;
|
||
$debitlock = 0;
|
||
my $debitcredit;
|
||
|
||
my @flds = qw(accno debit credit projectnumber fx_transaction source memo tax taxchart);
|
||
|
||
... | ... | |
if (!$debitcredit && $debittax) {
|
||
$form->{"taxchart_$i"} = "0--0.00";
|
||
}
|
||
$amount = ($form->{"debit_$i"} == 0)
|
||
my $amount = ($form->{"debit_$i"} == 0)
|
||
? $form->{"credit_$i"}
|
||
: $form->{"debit_$i"};
|
||
$j = $#a;
|
||
my $j = $#a;
|
||
if (($debitcredit && $credittax) || (!$debitcredit && $debittax)) {
|
||
$form->{"taxchart_$i"} = "0--0.00";
|
||
$form->{"tax_$i"} = 0;
|
||
}
|
||
($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"});
|
||
my ($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"});
|
||
if ($taxkey > 1) {
|
||
if ($debitcredit) {
|
||
$debittax = 1;
|
||
... | ... | |
$count++;
|
||
}
|
||
|
||
for $i (1 .. $count) {
|
||
$j = $i - 1;
|
||
for my $i (1 .. $count) {
|
||
my $j = $i - 1;
|
||
for (@flds) { $form->{"${_}_$i"} = $a[$j]->{$_} }
|
||
}
|
||
|
||
for $i ($count + 1 .. $form->{rowcount}) {
|
||
for my $i ($count + 1 .. $form->{rowcount}) {
|
||
for (@flds) { delete $form->{"${_}_$i"} }
|
||
}
|
||
|
||
for $i (1 .. $form->{rowcount}) {
|
||
$dr = $form->{"debit_$i"};
|
||
$cr = $form->{"credit_$i"};
|
||
my ($debit, $credit, $taxtotal);
|
||
for my $i (1 .. $form->{rowcount}) {
|
||
my $dr = $form->{"debit_$i"};
|
||
my $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!'));
|
||
... | ... | |
$form->error($locale->text('Empty transaction!'));
|
||
}
|
||
|
||
if (($errno = GL->post_transaction(\%myconfig, \%$form)) <= -1) {
|
||
if ((my $errno = GL->post_transaction(\%myconfig, \%$form)) <= -1) {
|
||
$errno *= -1;
|
||
my @err;
|
||
$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!');
|
||
... | ... | |
}
|
||
# /saving the history
|
||
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
sub post {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('general_ledger');
|
||
|
||
$auth->assert('general_ledger');
|
||
my $form = $main::form;
|
||
my $locale = $main::locale;
|
||
|
||
$form->{title} = $locale->text("$form->{title} General Ledger Transaction");
|
||
$form->{storno} = 0;
|
||
... | ... | |
$form->{callback} = build_std_url("action=add", "show_details");
|
||
$form->redirect($form->{callback});
|
||
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
sub post_as_new {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$auth->assert('general_ledger');
|
||
$main::auth->assert('general_ledger');
|
||
|
||
my $form = $main::form;
|
||
|
||
$form->{id} = 0;
|
||
&add;
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
|
||
}
|
||
|
||
sub storno {
|
||
$lxdebug->enter_sub();
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('general_ledger');
|
||
|
||
$auth->assert('general_ledger');
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
my $locale = $main::locale;
|
||
|
||
# don't cancel cancelled transactions
|
||
if (IS->has_storno(\%myconfig, $form, 'gl')) {
|
||
... | ... | |
|
||
$form->redirect(sprintf $locale->text("Transaction %d cancelled."), $form->{storno_id});
|
||
|
||
$lxdebug->leave_sub();
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
sub continue {
|
||
call_sub($form->{nextsub});
|
||
call_sub($main::form->{nextsub});
|
||
}
|
Auch abrufbar als: Unified diff
gl strict