use SL::BP;
use Data::Dumper;
+use List::Util qw(first);
1;
require "bin/mozilla/common.pl";
-# end of main
-
-sub search {
- $lxdebug->enter_sub();
-
- # $locale->text('Sales Invoices')
- # $locale->text('Packing Lists')
- # $locale->text('Sales Orders')
- # $locale->text('Purchase Orders')
- # $locale->text('Quotations')
- # $locale->text('RFQs')
- # $locale->text('Checks')
- # $locale->text('Receipts')
-
- # setup customer/vendor selection
- BP->get_vc(\%myconfig, \%$form);
-
- if (@{ $form->{"all_$form->{vc}"} }) {
- map { $name .= "<option>$_->{name}--$_->{id}\n" }
- @{ $form->{"all_$form->{vc}"} };
- $name = qq|<select name=$form->{vc}><option>\n$name</select>|;
- } else {
- $name = qq|<input name=$form->{vc} size=35>|;
- }
-
- # $locale->text('Customer')
- # $locale->text('Vendor')
-
- %label = (
- invoice =>
- { title => 'Sales Invoices', name => 'Customer', l_invnumber => 'Y' },
- packing_list =>
- { title => 'Packing Lists', name => 'Customer', l_invnumber => 'Y' },
- sales_order =>
- { title => 'Sales Orders', name => 'Customer', l_ordnumber => 'Y' },
- purchase_order =>
- { title => 'Purchase Orders', name => 'Vendor', l_ordnumber => 'Y' },
- sales_quotation =>
- { title => 'Quotations', name => 'Customer', l_quonumber => 'Y' },
- request_quotation =>
- { title => 'RFQs', name => 'Vendor', l_quonumber => 'Y' },
- check => { title => 'Checks', name => 'Vendor' },
- receipt => { title => 'Receipts', name => 'Customer' });
-
- $label{invoice}{invnumber} = qq|
- <tr>
- <th align=right nowrap>| . $locale->text('Invoice Number') . qq|</th>
- <td colspan=3><input name=invnumber size=20></td>
- </tr>
-|;
- $label{invoice}{ordnumber} = qq|
- <tr>
- <th align=right nowrap>| . $locale->text('Order Number') . qq|</th>
- <td colspan=3><input name=ordnumber size=20></td>
- </tr>
-|;
- $label{sales_quotation}{quonumber} = qq|
- <tr>
- <th align=right nowrap>| . $locale->text('Quotation Number') . qq|</th>
- <td colspan=3><input name=quonumber size=20></td>
- </tr>
-|;
-
- $label{check}{chknumber} = qq|
- <tr>
- <th align=right nowrap>| . $locale->text('Reference') . qq|</th>
- <td colspan=3><input name=chknumber size=20></td>
- </tr>
-|;
-
- $label{packing_list}{invnumber} = $label{invoice}{invnumber};
- $label{packing_list}{ordnumber} = $label{invoice}{ordnumber};
- $label{sales_order}{ordnumber} = $label{invoice}{ordnumber};
- $label{purchase_order}{ordnumber} = $label{invoice}{ordnumber};
- $label{request_quotation}{quonumber} = $label{sales_quotation}{quonumber};
- $label{receipt}{rctnumber} = $label{check}{chknumber};
-
- # do one call to text
- $form->{title} =
- $locale->text('Print') . " "
- . $locale->text($label{ $form->{type} }{title});
-
- if ($form->{type} =~ /(check|receipt)/) {
- if (BP->payment_accounts(\%myconfig, \%$form)) {
- $account = qq|
- <tr>
- <th align=right>| . $locale->text('Account') . qq|</th>
-|;
-
- if ($form->{accounts}) {
- $account .= qq|
- <td colspan=3><select name=account>
-|;
- foreach $ref (@{ $form->{accounts} }) {
- $account .= qq|
- <option>$ref->{accno}--$ref->{description}
-|;
- }
+use strict;
- $account .= qq|
- </select>
-|;
- } else {
- $account .= qq|
- <td colspan=3><input name=account></td>
-|;
+# end of main
- }
+sub assert_bp_access {
+ my $form = $main::form;
- $account .= qq|
- </tr>
-|;
+ my %access_map = (
+ 'invoice' => 'invoice_edit',
+ 'sales_order' => 'sales_order_edit',
+ 'sales_quotation' => 'sales_quotation_edit',
+ 'purchase_order' => 'purchase_order_edit',
+ 'request_quotation' => 'request_quotation_edit',
+ 'check' => 'cash',
+ 'receipt' => 'cash',
+ );
- }
- }
+ if ($form->{type} && $access_map{$form->{type}}) {
+ $main::auth->assert($access_map{$form->{type}});
- # use JavaScript Calendar or not
- $form->{jsscript} = 1;
- $jsscript = "";
- if ($form->{jsscript}) {
-
- # with JavaScript Calendar
- $button1 = qq|
- <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}" onBlur=\"check_right_date_format(this)\">
- <input type=button name=transdatefrom id="trigger1" value=|
- . $locale->text('button') . qq|></td>
- |;
- $button2 = qq|
- <td><input name=transdateto id=transdateto size=11 title="$myconfig{dateformat}" onBlur=\"check_right_date_format(this)\">
- <input type=button name=transdateto name=transdateto id="trigger2" value=|
- . $locale->text('button') . qq|></td>
- |;
-
- #write Trigger
- $jsscript =
- Form->write_trigger(\%myconfig, "2", "transdatefrom", "BR", "trigger1",
- "transdateto", "BL", "trigger2");
} else {
-
- # without JavaScript Calendar
- $button1 = qq|
- <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}" onBlur=\"check_right_date_format(this)\"></td>|;
- $button2 = qq|
- <td><input name=transdateto id=transdateto size=11 title="$myconfig{dateformat}" onBlur=\"check_right_date_format(this)\"></td>|;
+ $main::auth->assert('DOES_NOT_EXIST');
}
- $form->{javascript} .= qq|<script type="text/javascript" src="js/common.js"></script>|;
- $form->header;
- $onload = qq|;setupDateFormat('|. $myconfig{dateformat} .qq|', '|. $locale->text("Falsches Datumsformat!") .qq|')|;
- $onload .= qq|;setupPoints('|. $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|;
- print qq|
-<body onLoad="$onload">
-
-<form method=post action=$form->{script}>
-
-<input type=hidden name=vc value=$form->{vc}>
-<input type=hidden name=type value=$form->{type}>
-<input type=hidden name=title value="$form->{title}">
-
-<table width=100%>
- <tr><th class=listtop>$form->{title}</th></tr>
- <tr height="5"></tr>
- <tr>
- <td>
- <table>
- <tr>
- <th align=right>Kunde</th>
- <td colspan=3>$name</td>
- </tr>
- $account
- $label{$form->{type}}{invnumber}
- $label{$form->{type}}{ordnumber}
- $label{$form->{type}}{quonumber}
- $label{$form->{type}}{chknumber}
- $label{$form->{type}}{rctnumber}
- <tr>
- <th align=right nowrap>| . $locale->text('From') . qq|</th>
- $button1
- <th align=right>| . $locale->text('Bis') . qq|</th>
- $button2
- </tr>
- <input type=hidden name=sort value=transdate>
- </table>
- </td>
- </tr>
- <tr>
- <td><hr size=3 noshade></td>
- </tr>
-</table>
-
-<input type=hidden name=nextsub value=list_spool>
-
-<input type=hidden name=login value=$form->{login}>
-<input type=hidden name=password value=$form->{password}>
-
-<br>
-<input class=submit type=submit name=action value="|
- . $locale->text('Continue') . qq|">
-
-</form>
-
-</body>
+}
-$jsscript
+sub search {
+ $::lxdebug->enter_sub;
-</html>
-|;
+ assert_bp_access();
- $lxdebug->leave_sub();
+ # setup customer/vendor selection
+ BP->get_vc(\%::myconfig, $::form);
+
+ my %label = (
+ invoice => { title => $::locale->text('Sales Invoices'), invnumber => 1, ordnumber => 1 },
+ sales_order => { title => $::locale->text('Sales Orders'), ordnumber => 1, },
+ purchase_order => { title => $::locale->text('Purchase Orders'), ordnumber => 1, },
+ sales_quotation => { title => $::locale->text('Quotations'), quonumber => 1, },
+ request_quotation => { title => $::locale->text('RFQs'), quonumber => 1, },
+ check => { title => $::locale->text('Checks'), chknumber => 1, },
+ receipt => { title => $::locale->text('Receipts'), rctnumber => 1, },
+ );
+
+ my $bp_accounts = $::form->{type} =~ /check|receipt/
+ && BP->payment_accounts(\%::myconfig, $::form);
+
+ $::form->header;
+ print $::form->parse_html_template('bp/search', {
+ label => \%label,
+ show_accounts => $bp_accounts,
+ account_sub => sub { ("$_[0]{accno}--$_[0]{description}")x2 },
+ vc_keys => sub { "$_[0]{name}--$_[0]{id}" },
+ });
+
+ $::lxdebug->leave_sub;
}
sub remove {
- $lxdebug->enter_sub();
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+ my $locale = $main::locale;
+
+ assert_bp_access();
- $selected = 0;
+ my $selected = 0;
- for $i (1 .. $form->{rowcount}) {
+ for my $i (1 .. $form->{rowcount}) {
if ($form->{"checked_$i"}) {
$selected = 1;
last;
print qq|
<body>
-<form method=post action=$form->{script}>
+<form method=post action=bp.pl>
|;
map { delete $form->{$_} } qw(action 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|;
}
</html>
|;
- $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;
+
+ assert_bp_access();
$form->info($locale->text('Removing marked entries from queue ...'));
$form->{callback} .= "&header=1" if $form->{callback};
$form->redirect($locale->text('Removed spoolfiles!'))
- if (BP->delete_spool(\%myconfig, \%$form, $spool));
+ if (BP->delete_spool(\%myconfig, \%$form));
$form->error($locale->text('Cannot remove files!'));
- $lxdebug->leave_sub();
+ $main::lxdebug->leave_sub();
}
sub print {
- $lxdebug->enter_sub();
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+ my %myconfig = %main::myconfig;
+ my $locale = $main::locale;
+
+ assert_bp_access();
$form->get_lists(printers => 'ALL_PRINTERS');
# use the command stored in the databse or fall back to $myconfig{printer}
- my $selected_printer = (grep { $_->{id} eq $form->{printer} } @{ $form->{ALL_PRINTERS} })[0]->{'printer_command'} || $myconfig{printer};
+ my $selected_printer = first { $_ } map ({ $_ ->{printer_command} }
+ grep { $_->{id} eq $form->{printer} }
+ @{ $form->{ALL_PRINTERS} }),
+ $myconfig{printer};
if ($form->{callback}) {
map { $form->{callback} .= "&checked_$_=1" if $form->{"checked_$_"} }
$form->{callback} .= "&header=1";
}
- for $i (1 .. $form->{rowcount}) {
+ for my $i (1 .. $form->{rowcount}) {
if ($form->{"checked_$i"}) {
$form->info($locale->text('Printing ... '));
- if (BP->print_spool(\%myconfig, \%$form, $spool, "| $selected_printer")) {
+ if (BP->print_spool(\%myconfig, \%$form, "| $selected_printer")) {
print $locale->text('done');
$form->redirect($locale->text('Marked entries printed!'));
}
- exit;
+ ::end_of_request();
}
}
$form->error('Nothing selected!');
- $lxdebug->leave_sub();
+ $main::lxdebug->leave_sub();
}
sub list_spool {
- $lxdebug->enter_sub();
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+ my %myconfig = %main::myconfig;
+ my $locale = $main::locale;
+
+ assert_bp_access();
$form->{ $form->{vc} } = $form->unescape($form->{ $form->{vc} });
($form->{ $form->{vc} }, $form->{"$form->{vc}_id"}) =
BP->get_spoolfiles(\%myconfig, \%$form);
- $title = $form->escape($form->{title});
- $href =
- "$form->{script}?action=list_spool&login=$form->{login}&password=$form->{password}&vc=$form->{vc}&type=$form->{type}&title=$title";
+ my $title = $form->escape($form->{title});
+ my $href = "bp.pl?action=list_spool&vc=$form->{vc}&type=$form->{type}&title=$title";
$title = $form->escape($form->{title}, 1);
- $callback =
- "$form->{script}?action=list_spool&login=$form->{login}&password=$form->{password}&vc=$form->{vc}&type=$form->{type}&title=$title";
+ my $callback =
+ "bp.pl?action=list_spool&vc=$form->{vc}&type=$form->{type}&title=$title";
+ my $option;
if ($form->{ $form->{vc} }) {
$callback .= "&$form->{vc}=" . $form->escape($form->{ $form->{vc} }, 1);
. $locale->date(\%myconfig, $form->{transdateto}, 1);
}
- $name = ucfirst $form->{vc};
+ my $name = ucfirst $form->{vc};
- @columns = (transdate);
- if ($form->{type} =~ /(invoice|packing_list|check|receipt)/) {
- push @columns, "invnumber";
- }
+ my @columns = qw(transdate);
if ($form->{type} =~ /_order$/) {
push @columns, "ordnumber";
}
push @columns, "quonumber";
}
- push @columns, (name, spoolfile);
- @column_index = $form->sort_columns(@columns);
+ push @columns, qw(name spoolfile);
+ my @column_index = $form->sort_columns(@columns);
unshift @column_index, "checked";
+ my %column_header;
+ my %column_data;
+
$column_header{checked} = "<th class=listheading> </th>";
$column_header{transdate} =
"<th><a class=listheading href=$href&sort=transdate>"
print qq|
<body>
-<form method=post action=$form->{script}>
+<form method=post action=bp.pl>
<table width=100%>
<tr>
<tr>
<td>
<table width=100%>
- <tr class=listheading>
+ <tr class=listheading>
|;
map { print "\n$column_header{$_}" } @column_index;
print qq|
- </tr>
+ </tr>
|;
# add sort and escape callback, this one we use for the add sub
# escape callback for href
$callback = $form->escape($callback);
- $i = 0;
+ my $i = 0;
+ my $j = 0;
+ my $spoolfile;
+ my $spool = $::lx_office_conf{paths}->{spool};
- foreach $ref (@{ $form->{SPOOL} }) {
+ foreach my $ref (@{ $form->{SPOOL} }) {
$i++;
if ($ref->{invoice}) {
$ref->{module} = ($ref->{module} eq 'ar') ? "is" : "ir";
}
- $module = "$ref->{module}.pl";
+ my $module = "$ref->{module}.pl";
$column_data{transdate} = "<td>$ref->{transdate} </td>";
}
$column_data{invnumber} =
- "<td><a href=$module?action=edit&id=$ref->{id}&login=$form->{login}&password=$form->{password}&type=$form->{type}&callback=$callback>$ref->{invnumber}</a></td>";
+ "<td><a href=$module?action=edit&id=$ref->{id}&type=$form->{type}&callback=$callback>$ref->{invnumber}</a></td>";
$column_data{ordnumber} =
- "<td><a href=$module?action=edit&id=$ref->{id}&login=$form->{login}&password=$form->{password}&type=$form->{type}&callback=$callback>$ref->{ordnumber}</a></td>";
+ "<td><a href=$module?action=edit&id=$ref->{id}&type=$form->{type}&callback=$callback>$ref->{ordnumber}</a></td>";
$column_data{quonumber} =
- "<td><a href=$module?action=edit&id=$ref->{id}&login=$form->{login}&password=$form->{password}&type=$form->{type}&callback=$callback>$ref->{quonumber}</a></td>";
+ "<td><a href=$module?action=edit&id=$ref->{id}&type=$form->{type}&callback=$callback>$ref->{quonumber}</a></td>";
$column_data{name} = "<td>$ref->{name}</td>";
$column_data{spoolfile} =
qq|<td><a href=$spool/$ref->{spoolfile}>$ref->{spoolfile}</a></td>
<input type=hidden name=sort value="$form->{sort}">
<input type=hidden name=account value="$form->{account}">
-
-<input type=hidden name=login value=$form->{login}>
-<input type=hidden name=password value=$form->{password}>
|;
# if ($myconfig{printer}) {
$form->get_lists(printers=>"ALL_PRINTERS");
print qq|<select name="printer">|;
-print map(qq|<option value="$_->{id}">| . $form->quote_html($_->{printer_description}) . qq|</option>|, @{ $form->{ALL_PRINTERS} });
+print map(qq|<option value="$_->{id}">| . H($_->{printer_description}) . qq|</option>|, @{ $form->{ALL_PRINTERS} });
print qq|</select>|;
# }
}
sub select_all {
- $lxdebug->enter_sub();
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+
+ assert_bp_access();
map { $form->{"checked_$_"} = 1 } (1 .. $form->{rowcount});
&list_spool;
- $lxdebug->leave_sub();
+ $main::lxdebug->leave_sub();
}
-sub continue { call_sub($form->{"nextsub"}); }
+sub continue { call_sub($main::form->{"nextsub"}); }