#===================================================================== # SQL-Ledger Accounting # Copyright (c) 2003 # # Author: Dieter Simader # Email: dsimader@sql-ledger.org # Web: http://www.sql-ledger.org # # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # 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. #====================================================================== # # # printing routines for ar, ap # # any custom scripts for this one if (-f "$form->{path}/custom_arapprn.pl") { eval { require "$form->{path}/custom_arapprn.pl"; }; } if (-f "$form->{path}/$form->{login}_arapprn.pl") { eval { require "$form->{path}/$form->{login}_arapprn.pl"; }; } 1; # end of main sub print { if ($form->{AP}) { $form->{vc} = "vendor"; $form->{ARAP} = "AP"; $invfld = "vinumber"; } if ($form->{AR}) { $form->{vc} = "customer"; $form->{ARAP} = "AR"; $invfld = "sinumber"; } if ($form->{media} !~ /screen/) { $form->error($locale->text('Select postscript or PDF!')) if $form->{format} !~ /(postscript|pdf)/; } if ($form->{media} eq 'screen' && $form->{formname} =~ /(check|receipt)/) { $form->error($locale->text('Select postscript or PDF!')) if $form->{format} !~ /(postscript|pdf)/; } if (! $form->{invnumber}) { $form->{invnumber} = $form->update_defaults(\%myconfig, $invfld); if ($form->{media} eq 'screen') { if ($form->{media} eq 'screen') { &update; exit; } } } if ($form->{formname} =~ /(check|receipt)/) { if ($form->{media} ne 'screen') { map { delete $form->{$_} } qw(action header); $form->{invtotal} = $form->{oldinvtotal}; foreach $key (keys %$form) { $form->{$key} =~ s/&/%26/g; $form->{previousform} .= qq|$key=$form->{$key}&|; } chop $form->{previousform}; $form->{previousform} = $form->escape($form->{previousform}, 1); } if ($form->{paidaccounts} > 1) { if ($form->{"paid_$form->{paidaccounts}"}) { &update; exit; } elsif ($form->{paidaccounts} > 2) { # select payment &select_payment; exit; } } else { $form->error($locale->text('Nothing to print!')); } } &{ "print_$form->{formname}" }(1); } sub print_check { my ($i) = @_; $display_form = ($form->{display_form}) ? $form->{display_form} : "display_form"; if ($form->{"paid_$i"}) { @a = (); if (exists $form->{longformat}) { $form->{"datepaid_$i"} = $locale->date(\%myconfig, $form->{"datepaid_$i"}, $form->{longformat}); } push @a, "source_$i", "memo_$i"; $form->format_string(@a); } $form->{amount} = $form->{"paid_$i"}; map { $form->{$_} = $form->{"${_}_$i"} } qw(datepaid source memo); &{ "$form->{vc}_details" }; @a = qw(name address1 address2 city state zipcode country); foreach $item (qw(invnumber ordnumber)) { $temp{$item} = $form->{$item}; delete $form->{$item}; push(@{ $form->{$item} }, $temp{$item}); } push(@{ $form->{invdate} }, $form->{transdate}); push(@{ $form->{due} }, $form->format_amount(\%myconfig, $form->{oldinvtotal}, 2)); push(@{ $form->{paid} }, $form->{"paid_$i"}); use SL::CP; if ($form->{language_code}) { $c = new CP $form->{language_code}; } else { $c = new CP $myconfig->{countrycode}; } $c->init; ($whole, $form->{decimal}) = split /\./, $form->{amount}; $form->{decimal} .= "00"; $form->{decimal} = substr($form->{decimal}, 0, 2); $form->{text_amount} = $c->num2text($whole); ($form->{employee}) = split /--/, $form->{employee}; $form->{notes} =~ s/^\s+//g; push @a, "notes"; map { $form->{$_} = $myconfig{$_} } (qw(company address tel fax businessnumber)); push @a, qw(company address tel fax businessnumber); $form->format_string(@a); $form->{templates} = "$myconfig{templates}"; $form->{IN} = ($form->{formname} eq 'transaction') ? lc $form->{ARAP} . "_$form->{formname}.html" : "$form->{formname}.html"; if ($form->{format} =~ /(postscript|pdf)/) { $form->{IN} =~ s/html$/tex/; } if ($form->{media} !~ /(screen|queue)/) { $form->{OUT} = "| $printer{$form->{media}}"; $reference = $form->{invnumber}; if ($form->{formname} =~ /(check|receipt)/) { $form->{rowcount} = 1; $form->{"id_1"} = $form->{id}; $form->{"checked_1"} = 1; $form->{account} = $form->{"$form->{ARAP}_paid_$i"}; $reference = $form->{"source_$i"}; } if ($form->{printed} !~ /$form->{formname}/) { $form->{printed} .= " $form->{formname}"; $form->{printed} =~ s/^ //; $form->update_status(\%myconfig); } %audittrail = ( tablename => lc $form->{ARAP}, reference => $reference, formname => $form->{formname}, action => 'printed', id => $form->{id} ); %status = (); map { $status{$_} = $form->{$_} } qw(printed queued audittrail); $status{audittrail} .= $form->audittrail("", \%myconfig, \%audittrail); } if ($form->{media} eq 'queue') { %queued = split / /, $form->{queued}; $reference = $form->{invnumber}; if ($form->{formname} =~ /(check|receipt)/) { $form->{rowcount} = 1; $form->{"id_1"} = $form->{id}; $form->{"checked_1"} = 1; $form->{account} = $form->{"$form->{ARAP}_paid_$i"}; $reference = $form->{"source_$i"}; } if ($filename = $queued{$form->{formname}}) { $form->{queued} =~ s/$form->{formname} $filename//; unlink "$spool/$filename"; $filename =~ s/\..*$//g; } else { $filename = time; $filename .= $$; } $filename .= ($form->{format} eq 'postscript') ? '.ps' : '.pdf'; $form->{OUT} = ">$spool/$filename"; $form->{queued} .= " $form->{formname} $filename"; $form->{queued} =~ s/^ //; # save status $form->update_status(\%myconfig); %audittrail = ( tablename => lc $form->{ARAP}, reference => $reference, formname => $form->{formname}, action => 'queued', id => $form->{id} ); %status = (); map { $status{$_} = $form->{$_} } qw(printed queued audittrail); $status{audittrail} .= $form->audittrail("", \%myconfig, \%audittrail); } $form->{fileid} = $invnumber; $form->{fileid} =~ s/(\s|\W)+//g; $form->parse_template(\%myconfig, $userspath); if ($form->{previousform}) { $previousform = $form->unescape($form->{previousform}); map { delete $form->{$_} } keys %$form; foreach $item (split /&/, $previousform) { ($key, $value) = split /=/, $item, 2; $value =~ s/%26/&/g; $form->{$key} = $value; } map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(exchangerate creditlimit creditremaining); map { $form->{"amount_$_"} = $form->parse_amount(\%myconfig, $form->{"amount_$_"}) } (1 .. $form->{rowcount}); map { $form->{"tax_$_"} = $form->parse_amount(\%myconfig, $form->{"tax_$_"}) } split / /, $form->{taxaccounts}; for $i (1 .. $form->{paidaccounts}) { map { $form->{"${_}_$i"} = $form->parse_amount(\%myconfig, $form->{"${_}_$i"}) } qw(paid exchangerate); } map { $form->{$_} = $status{$_} } qw(printed queued audittrail); &{ "$display_form" }; } } sub print_receipt { &print_check; } sub print_transaction { $display_form = ($form->{display_form}) ? $form->{display_form} : "display_form"; if ($form->{media} !~ /screen/) { $old_form = new Form; map { $old_form->{$_} = $form->{$_} } keys %$form; } &{ "$form->{vc}_details" }; @a = qw(name address1 address2 city state zipcode country); $form->{invtotal} = 0; foreach $i (1 .. $form->{rowcount} - 1) { ($form->{tempaccno}, $form->{tempaccount}) = split /--/, $form->{"$form->{ARAP}_amount_$i"}; ($form->{tempprojectnumber}) = split /--/, $form->{"projectnumber_$i"}; $form->format_string(qw(tempaccno tempaccount tempprojectnumber)); push(@{ $form->{accno} }, $form->{tempaccno}); push(@{ $form->{account} }, $form->{tempaccount}); push(@{ $form->{projectnumber} }, $form->{tempprojectnumber}); push(@{ $form->{amount} }, $form->{"amount_$i"}); $form->{subtotal} += $form->parse_amount(\%myconfig, $form->{"amount_$i"}); } foreach $accno (split / /, $form->{taxaccounts}) { if ($form->{"tax_$accno"}) { $tax += $form->parse_amount(\%myconfig, $form->{"tax_$accno"}); push(@{ $form->{tax} }, $form->{"tax_$accno"}); push(@{ $form->{taxdescription} }, $form->{"${accno}_description"}); push(@{ $form->{taxrate} }, $form->{"${accno}_rate"} * 100); push(@{ $form->{taxnumber} }, $form->{"${accno}_taxnumber"}); } } push @a, $form->{ARAP}; $form->format_string(@a); $form->{paid} = 0; for $i (1 .. $form->{paidaccounts} - 1) { if ($form->{"paid_$i"}) { @a = (); $form->{paid} += $form->parse_amount(\%myconfig, $form->{"paid_$i"}); if (exists $form->{longformat}) { $form->{"datepaid_$i"} = $locale->date(\%myconfig, $form->{"datepaid_$i"}, $form->{longformat}); } push @a, "$form->{ARAP}_paid_$i", "source_$i", "memo_$i"; $form->format_string(@a); ($accno, $account) = split /--/, $form->{"$form->{ARAP}_paid_$i"}; push(@{ $form->{payment} }, $form->{"paid_$i"}); push(@{ $form->{paymentdate} }, $form->{"datepaid_$i"}); push(@{ $form->{paymentaccount} }, $account); push(@{ $form->{paymentsource} }, $form->{"source_$i"}); push(@{ $form->{paymentmemo} }, $form->{"memo_$i"}); } } $form->{invtotal} = $form->{subtotal} + $tax; $form->{total} = $form->{invtotal} - $form->{paid}; use SL::CP; if ($form->{language_code}) { $c = new CP $form->{language_code}; } else { $c = new CP $myconfig->{countrycode}; } $c->init; ($whole, $form->{decimal}) = split /\./, $form->{invtotal}; $form->{decimal} .= "00"; $form->{decimal} = substr($form->{decimal}, 0, 2); $form->{text_amount} = $c->num2text($whole); map { $form->{$_} = $form->format_amount(\%myconfig, $form->{$_}, 2) } qw(invtotal subtotal paid total); ($form->{employee}) = split /--/, $form->{employee}; if (exists $form->{longformat}) { map { $form->{$_} = $locale->date(\%myconfig, $form->{$_}, $form->{longformat}) } ("duedate", "transdate"); } $form->{notes} =~ s/^\s+//g; push @a, ("invnumber", "transdate", "duedate", "notes"); map { $form->{$_} = $myconfig{$_} } (qw(company address tel fax businessnumber)); push @a, qw(company address tel fax businessnumber); $form->format_string(@a); $form->{invdate} = $form->{transdate}; $form->{templates} = "$myconfig{templates}"; $form->{IN} = ($form->{formname} eq 'transaction') ? lc $form->{ARAP} . "_$form->{formname}.html" : "$form->{formname}.html"; if ($form->{format} =~ /(postscript|pdf)/) { $form->{IN} =~ s/html$/tex/; } if ($form->{media} !~ /(screen|queue)/) { $form->{OUT} = "| $printer{$form->{media}}"; if ($form->{printed} !~ /$form->{formname}/) { $form->{printed} .= " $form->{formname}"; $form->{printed} =~ s/^ //; $form->update_status(\%myconfig); } $old_form->{printed} = $form->{printed}; %audittrail = ( tablename => lc $form->{ARAP}, reference => $form->{"invnumber"}, formname => $form->{formname}, action => 'printed', id => $form->{id} ); $old_form->{audittrail} .= $form->audittrail("", \%myconfig, \%audittrail); } if ($form->{media} eq 'queue') { %queued = split / /, $form->{queued}; if ($filename = $queued{$form->{formname}}) { $form->{queued} =~ s/$form->{formname} $filename//; unlink "$spool/$filename"; $filename =~ s/\..*$//g; } else { $filename = time; $filename .= $$; } $filename .= ($form->{format} eq 'postscript') ? '.ps' : '.pdf'; $form->{OUT} = ">$spool/$filename"; $form->{queued} .= " $form->{formname} $filename"; $form->{queued} =~ s/^ //; # save status $form->update_status(\%myconfig); $old_form->{queued} = $form->{queued}; %audittrail = ( tablename => lc $form->{ARAP}, reference => $form->{invnumber}, formname => $form->{formname}, action => 'queued', id => $form->{id} ); $old_form->{audittrail} .= $form->audittrail("", \%myconfig, \%audittrail); } $form->{fileid} = $form->{invnumber}; $form->{fileid} =~ s/(\s|\W)+//g; $form->parse_template(\%myconfig, $userspath); if ($old_form) { $old_form->{invnumber} = $form->{invnumber}; $old_form->{invtotal} = $form->{invtotal}; map { delete $form->{$_} } keys %$form; map { $form->{$_} = $old_form->{$_} } keys %$old_form; if (! $form->{printandpost}) { map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(exchangerate creditlimit creditremaining); map { $form->{"amount_$_"} = $form->parse_amount(\%myconfig, $form->{"amount_$_"}) } (1 .. $form->{rowcount}); map { $form->{"tax_$_"} = $form->parse_amount(\%myconfig, $form->{"tax_$_"}) } split / /, $form->{taxaccounts}; for $i (1 .. $form->{paidaccounts}) { map { $form->{"${_}_$i"} = $form->parse_amount(\%myconfig, $form->{"${_}_$i"}) } qw(paid exchangerate); } } &{ "$display_form" }; } } sub vendor_details { IR->vendor_details(\%myconfig, \%$form) }; sub customer_details { IS->customer_details(\%myconfig, \%$form) }; sub select_payment { @column_index = ("ndx", "datepaid", "source", "memo", "paid", "$form->{ARAP}_paid"); # list payments with radio button on a form $form->header; $title = $locale->text('Select payment'); $column_data{ndx} = qq| |; $column_data{datepaid} = qq||.$locale->text('Date').qq||; $column_data{source} = qq||.$locale->text('Source').qq||; $column_data{memo} = qq||.$locale->text('Memo').qq||; $column_data{paid} = qq||.$locale->text('Amount').qq||; $column_data{"$form->{ARAP}_paid"} = qq||.$locale->text('Account').qq||; print qq|
{script}>
$title
|; map { print "\n$column_data{$_}" } @column_index; print qq| |; foreach $i (1 .. $form->{paidaccounts} - 1) { $checked = ($i == 1) ? "checked" : ""; map { $column_data{$_} = qq|| } @column_index; $column_data{ndx} = qq||; $column_data{paid} = qq||; $j++; $j %= 2; print qq| |; map { print "\n$column_data{$_}" } @column_index; print qq| |; } print qq|
$form->{"${_}_$i"}$form->{"paid_$i"}

|; $form->{nextsub} = "payment_selected"; $form->hide_form(); print qq|
|; } sub payment_selected { &{ "print_$form->{formname}" }($form->{ndx}); } sub print_options { $form->{PD}{$form->{formname}} = "selected"; $form->{DF}{$form->{format}} = "selected"; if ($form->{selectlanguage}) { $form->{"selectlanguage"} = $form->unescape($form->{"selectlanguage"}); $form->{"selectlanguage"} =~ s/ selected//; $form->{"selectlanguage"} =~ s/(