kivitendo/bin/mozilla/bp.pl @ 64ed077b
d319704a | Moritz Bunkus | #=====================================================================
|
||
# LX-Office ERP
|
||||
# Copyright (C) 2004
|
||||
# Based on SQL-Ledger Version 2.1.9
|
||||
# Web http://www.lx-office.org
|
||||
#
|
||||
#=====================================================================
|
||||
# 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
|
||||
f7b15d43 | Christian Wittmer | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||
# MA 02110-1335, USA.
|
||||
d319704a | Moritz Bunkus | #======================================================================
|
||
#
|
||||
# Batch printing
|
||||
#
|
||||
#======================================================================
|
||||
use SL::BP;
|
||||
9205a42e | Moritz Bunkus | use SL::Locale::String qw(t8);
|
||
1b3fe156 | Sven Schöling | use Data::Dumper;
|
||
e74c2ab4 | Sven Schöling | use List::Util qw(first);
|
||
d319704a | Moritz Bunkus | |||
1;
|
||||
40782548 | Moritz Bunkus | require "bin/mozilla/common.pl";
|
||
3314d7c2 | Sven Schöling | use strict;
|
||
d319704a | Moritz Bunkus | # end of main
|
||
8c7e4493 | Moritz Bunkus | sub assert_bp_access {
|
||
my %access_map = (
|
||||
'invoice' => 'invoice_edit',
|
||||
'sales_order' => 'sales_order_edit',
|
||||
'sales_quotation' => 'sales_quotation_edit',
|
||||
'purchase_order' => 'purchase_order_edit',
|
||||
9ae7f1f9 | Sven Schöling | 'packing_list' => 'sales_delivery_order_edit|purchase_delivery_order_edit',
|
||
8c7e4493 | Moritz Bunkus | 'request_quotation' => 'request_quotation_edit',
|
||
'check' => 'cash',
|
||||
'receipt' => 'cash',
|
||||
);
|
||||
8f84155d | Sven Schöling | if ($::form->{type} && $access_map{$::form->{type}}) {
|
||
$::auth->assert($access_map{$::form->{type}});
|
||||
8c7e4493 | Moritz Bunkus | |||
} else {
|
||||
8f84155d | Sven Schöling | $::auth->assert('DOES_NOT_EXIST');
|
||
8c7e4493 | Moritz Bunkus | }
|
||
}
|
||||
d319704a | Moritz Bunkus | sub search {
|
||
e6f43104 | Sven Schöling | $::lxdebug->enter_sub;
|
||
d319704a | Moritz Bunkus | |||
8c7e4493 | Moritz Bunkus | assert_bp_access();
|
||
3314d7c2 | Sven Schöling | my %label = (
|
||
e6f43104 | Sven Schöling | 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, },
|
||||
9ae7f1f9 | Sven Schöling | packing_list => { title => $::locale->text('Delivery Orders'), donumber => 1, ordnumber => 1 },
|
||
e6f43104 | Sven Schöling | check => { title => $::locale->text('Checks'), chknumber => 1, },
|
||
receipt => { title => $::locale->text('Receipts'), rctnumber => 1, },
|
||||
);
|
||||
d319704a | Moritz Bunkus | |||
e6f43104 | Sven Schöling | my $bp_accounts = $::form->{type} =~ /check|receipt/
|
||
&& BP->payment_accounts(\%::myconfig, $::form);
|
||||
d319704a | Moritz Bunkus | |||
9205a42e | Moritz Bunkus | setup_bp_search_action_bar();
|
||
e6f43104 | Sven Schöling | $::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}" },
|
||||
});
|
||||
d319704a | Moritz Bunkus | |||
e6f43104 | Sven Schöling | $::lxdebug->leave_sub;
|
||
d319704a | Moritz Bunkus | }
|
||
sub remove {
|
||||
8f84155d | Sven Schöling | $::lxdebug->enter_sub;
|
||
8c7e4493 | Moritz Bunkus | assert_bp_access();
|
||
8f84155d | Sven Schöling | $::form->info($::locale->text('Removing marked entries from queue ...'));
|
||
$::form->{callback} .= "&header=1" if $::form->{callback};
|
||||
d319704a | Moritz Bunkus | |||
8f84155d | Sven Schöling | $::form->redirect($::locale->text('Removed spoolfiles!'))
|
||
if BP->delete_spool(\%::myconfig, $::form);
|
||||
$::form->error($::locale->text('Cannot remove files!'));
|
||||
d319704a | Moritz Bunkus | |||
8f84155d | Sven Schöling | $::lxdebug->leave_sub;
|
||
d319704a | Moritz Bunkus | }
|
||
sub print {
|
||||
8f84155d | Sven Schöling | $::lxdebug->enter_sub;
|
||
8c7e4493 | Moritz Bunkus | assert_bp_access();
|
||
8f84155d | Sven Schöling | $::form->get_lists(printers => 'ALL_PRINTERS');
|
||
1b3fe156 | Sven Schöling | # use the command stored in the databse or fall back to $myconfig{printer}
|
||
e74c2ab4 | Sven Schöling | my $selected_printer = first { $_ } map ({ $_ ->{printer_command} }
|
||
8f84155d | Sven Schöling | grep { $_->{id} eq $::form->{printer} }
|
||
@{ $::form->{ALL_PRINTERS} }),
|
||||
$::myconfig{printer};
|
||||
if ($::form->{callback}) {
|
||||
map { $::form->{callback} .= "&checked_$_=1" if $::form->{"checked_$_"} }
|
||||
(1 .. $::form->{rowcount});
|
||||
$::form->{callback} .= "&header=1";
|
||||
d319704a | Moritz Bunkus | }
|
||
8f84155d | Sven Schöling | for my $i (1 .. $::form->{rowcount}) {
|
||
if ($::form->{"checked_$i"}) {
|
||||
$::form->info($::locale->text('Printing ... '));
|
||||
d319704a | Moritz Bunkus | |||
8f84155d | Sven Schöling | if (BP->print_spool(\%::myconfig, $::form, "| $selected_printer")) {
|
||
print $::locale->text('done');
|
||||
$::form->redirect($::locale->text('Marked entries printed!'));
|
||||
d319704a | Moritz Bunkus | }
|
||
09479f02 | Moritz Bunkus | $::dispatcher->end_request;
|
||
d319704a | Moritz Bunkus | }
|
||
}
|
||||
8f84155d | Sven Schöling | $::form->error('Nothing selected!');
|
||
d319704a | Moritz Bunkus | |||
8f84155d | Sven Schöling | $::lxdebug->leave_sub;
|
||
d319704a | Moritz Bunkus | }
|
||
sub list_spool {
|
||||
5bc72844 | Sven Schöling | $::lxdebug->enter_sub;
|
||
8c7e4493 | Moritz Bunkus | assert_bp_access();
|
||
5bc72844 | Sven Schöling | # parse old vc picker
|
||
$::form->{ $::form->{vc} } = $::form->unescape($::form->{ $::form->{vc} });
|
||||
($::form->{ $::form->{vc} }, $::form->{"$::form->{vc}_id"}) = split(/--/, $::form->{ $::form->{vc} });
|
||||
d319704a | Moritz Bunkus | |||
5bc72844 | Sven Schöling | BP->get_spoolfiles(\%::myconfig, $::form);
|
||
d319704a | Moritz Bunkus | |||
5bc72844 | Sven Schöling | my @href_options = ('vc', 'type', 'title', $::form->{vc});
|
||
d319704a | Moritz Bunkus | |||
5bc72844 | Sven Schöling | my %option_texts = (
|
||
customer => sub { $::locale->text('Customer') . " : $::form->{customer}" },
|
||||
vendor => sub { $::locale->text('Customer') . " : $::form->{vendor}" },
|
||||
account => sub { $::locale->text('Account') . " : $::form->{account}" },
|
||||
invnumber => sub { $::locale->text('Invoice Number') . " : $::form->{invnumber}" },
|
||||
ordnumber => sub { $::locale->text('Order Number') . " : $::form->{ordnumber}" },
|
||||
quonumber => sub { $::locale->text('Quotation Number') . " : $::form->{quonumber}" },
|
||||
9ae7f1f9 | Sven Schöling | donumber => sub { $::locale->text('Delivery Order Number') . " : $::form->{donumber}" },
|
||
5bc72844 | Sven Schöling | transdatefrom => sub { $::locale->text('From') . " " . $::locale->date(\%::myconfig, $::form->{transdatefrom}, 1) },
|
||
transdateto => sub { $::locale->text('To') . " " . $::locale->date(\%::myconfig, $::form->{transdateto}, 1) },
|
||||
);
|
||||
d319704a | Moritz Bunkus | |||
5bc72844 | Sven Schöling | my @options;
|
||
9ae7f1f9 | Sven Schöling | for my $key ($::form->{vc}, qw(account invnumber ordnumber quonumber donumber transdatefrom transdateto)) {
|
||
5bc72844 | Sven Schöling | next unless $::form->{$key};
|
||
push @href_options, $key;
|
||||
push @options, $option_texts{$key} ? $option_texts{$key}->() : '';
|
||||
d319704a | Moritz Bunkus | }
|
||
5bc72844 | Sven Schöling | my $last_spoolfile;
|
||
for my $ref (@{ $::form->{SPOOL} }) {
|
||||
$ref->{module} = ($ref->{module} eq 'ar') ? "is" : "ir" if $ref->{invoice};
|
||||
$ref->{new_file} = $last_spoolfile ne $ref->{spoolfile};
|
||||
} continue {
|
||||
$last_spoolfile = $ref->{spoolfile};
|
||||
d319704a | Moritz Bunkus | }
|
||
5bc72844 | Sven Schöling | $::form->get_lists(printers => "ALL_PRINTERS");
|
||
d319704a | Moritz Bunkus | |||
9205a42e | Moritz Bunkus | setup_bp_list_spool_action_bar();
|
||
5bc72844 | Sven Schöling | $::form->header;
|
||
print $::form->parse_html_template('bp/list_spool', {
|
||||
href => build_std_url('bp.pl', @href_options),
|
||||
is_invoice => scalar ($::form->{type} =~ /^invoice$/),
|
||||
is_order => scalar ($::form->{type} =~ /_order$/),
|
||||
is_quotation => scalar ($::form->{type} =~ /_quotation$/),
|
||||
options => \@options,
|
||||
});
|
||||
d319704a | Moritz Bunkus | |||
5bc72844 | Sven Schöling | $::lxdebug->leave_sub;
|
||
d319704a | Moritz Bunkus | }
|
||
9205a42e | Moritz Bunkus | sub setup_bp_search_action_bar {
|
||
my %params = @_;
|
||||
for my $bar ($::request->layout->get('actionbar')) {
|
||||
$bar->add(
|
||||
action => [
|
||||
t8('Show'),
|
||||
submit => [ '#form', { action => "list_spool" } ],
|
||||
accesskey => 'enter',
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
sub setup_bp_list_spool_action_bar {
|
||||
my %params = @_;
|
||||
for my $bar ($::request->layout->get('actionbar')) {
|
||||
$bar->add(
|
||||
action => [
|
||||
t8('Remove'),
|
||||
submit => [ '#form', { action => "remove" } ],
|
||||
checks => [ [ 'kivi.check_if_entries_selected', '.check_all' ] ],
|
||||
confirm => t8('Are you sure you want to remove the marked entries from the queue?'),
|
||||
],
|
||||
action => [
|
||||
t8('Print'),
|
||||
submit => [ '#form', { action => "print" } ],
|
||||
checks => [ [ 'kivi.check_if_entries_selected', '.check_all' ] ],
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|