View | Details | Raw Unified | Return to bug 11603
Collapse All | Expand All

(-)a/misc/cronjobs/gather_print_notices.pl (-8 / +102 lines)
Lines 23-33 use C4::Log; Link Here
23
23
24
use Koha::DateUtils;
24
use Koha::DateUtils;
25
25
26
my ( $stylesheet, $help, $split );
26
my ( $stylesheet, $help, $split, $html, $csv, @letter_codes );
27
27
28
GetOptions(
28
GetOptions(
29
    'h|help'  => \$help,
29
    'h|help'  => \$help,
30
    's|split' => \$split,
30
    's|split' => \$split,
31
    'html'    => \$html,
32
    'csv'     => \$csv,
33
    'letter_code:s' => \@letter_codes,
31
) || pod2usage(1);
34
) || pod2usage(1);
32
35
33
pod2usage(0) if $help;
36
pod2usage(0) if $help;
Lines 41-51 if ( !$output_directory || !-d $output_directory || !-w $output_directory ) { Link Here
41
    });
44
    });
42
}
45
}
43
46
47
# Default value is html
48
$html = 1 unless $html or $csv;
49
50
if ( $csv and @letter_codes != 1 ) {
51
    pod2usage({
52
        -exitval => 1,
53
        -msg => qq{\nIt is not consistent to use --csv without one (and only one) letter_code\n},
54
    });
55
}
56
44
cronlogaction();
57
cronlogaction();
45
58
46
my $today        = C4::Dates->new();
59
my $today        = C4::Dates->new();
47
my @all_messages = @{ GetPrintMessages() };
60
my @all_messages = @{ GetPrintMessages() };
48
exit unless (@all_messages);
61
62
# Filter by letter_code
63
@all_messages = map {
64
    my $letter_code = $_->{letter_code};
65
    (
66
        grep { /^$letter_code$/ } @letter_codes
67
    ) ? $_ : ()
68
} @all_messages;
69
exit unless @all_messages;
49
70
50
## carriage return replaced by <br/> as output is html
71
## carriage return replaced by <br/> as output is html
51
foreach my $message (@all_messages) {
72
foreach my $message (@all_messages) {
Lines 55-63 foreach my $message (@all_messages) { Link Here
55
    $message->{'content'} = $_;
76
    $message->{'content'} = $_;
56
}
77
}
57
78
58
my $OUTPUT;
79
print_notices_html({ messages => \@all_messages, split => $split })
80
    if $html;
59
81
60
print_notices_html({ messages => \@all_messages, split => $split });
82
print_notices_csv({ messages => \@all_messages, split => $split })
83
    if $csv;
61
84
62
sub print_notices_html {
85
sub print_notices_html {
63
    my ( $params ) = @_;
86
    my ( $params ) = @_;
Lines 102-108 sub print_notices_html { Link Here
102
                    status => 'sent'
125
                    status => 'sent'
103
                }
126
                }
104
            );
127
            );
128
            $message->{status} = 'sent';
129
        }
130
    }
131
}
132
133
sub print_notices_csv {
134
    my ( $params ) = @_;
135
136
    my $messages = $params->{messages};
137
    my $split = $params->{split};
138
139
    my $messages_by_branch;
140
    if ( $split ) {
141
        foreach my $message (@$messages) {
142
            push( @{ $messages_by_branch->{ $message->{'branchcode'} } }, $message );
143
        }
144
    } else {
145
        $messages_by_branch->{all_branches} = $messages;
146
    }
147
148
    while ( my ( $branchcode, $branch_messages ) = each %$messages_by_branch ) {
149
        my $filename = $split
150
            ? 'holdnotices-' . $today->output('iso') . "-$branchcode.csv"
151
            : 'holdnotices-' . $today->output('iso') . ".csv";
152
153
        open my $OUTPUT, '>', File::Spec->catdir( $output_directory, $filename );
154
        my ( @csv_lines, $headers );
155
        foreach my $message ( @$branch_messages ) {
156
            my @lines = split /\n/, $message->{content};
157
158
            # We don't have headers, get them
159
            unless ( $headers ) {
160
                $headers = $lines[0];
161
                chomp $headers;
162
                say $OUTPUT $headers;
163
            }
164
165
            shift @lines;
166
            for my $line ( @lines ) {
167
                chomp $line;
168
                next if $line =~ /^\s$/;
169
                say $OUTPUT $line;
170
            }
171
172
            C4::Letters::_set_message_status(
173
                {
174
                    message_id => $message->{'message_id'},
175
                    status => 'sent'
176
                }
177
            ) if $message->{status} ne 'sent';
105
        }
178
        }
179
        close $OUTPUT;
106
    }
180
    }
107
}
181
}
108
182
Lines 112-122 gather_print_notices - Print waiting print notices Link Here
112
186
113
=head1 SYNOPSIS
187
=head1 SYNOPSIS
114
188
115
gather_print_notices output_directory [-s|--split] [-h|--help]
189
gather_print_notices output_directory [-s|--split] [--html] [--csv] [--letter_code=LETTER_CODE] [-h|--help]
116
190
117
Will print all waiting print notices to the output_directory.
191
Will print all waiting print notices to the output_directory.
118
192
119
The generated filename will be holdnotices-TODAY.html or holdnotices-TODAY-BRANCHCODE.html if the --split parameter is given.
193
The generated filename will be holdnotices-TODAY.[csv|html] or holdnotices-TODAY-BRANCHCODE.[csv|html] if the --split parameter is given.
120
194
121
=head1 OPTIONS
195
=head1 OPTIONS
122
196
Lines 128-134 Define the output directory where the files will be generated. Link Here
128
202
129
=item B<-s|--split>
203
=item B<-s|--split>
130
204
131
Split messages into separate file by borrower home library to OUTPUT_DIRECTORY/notices-CURRENT_DATE-BRANCHCODE.html
205
Split messages into separate file by borrower home library to OUTPUT_DIRECTORY/notices-CURRENT_DATE-BRANCHCODE.[csv|html]
206
207
=item B<--html>
208
209
Generate the print notices in a html file (default if --html and --csv are not given).
210
211
=item B<--csv>
212
213
Generate the print notices in a csv file.
214
If you use this parameter, the template should contain 2 lines.
215
The first one the the csv headers and the second one the value list.
216
217
For example:
218
cardnumber:patron:email:item
219
<<borrowers.cardnumber>>:<<borrowers.firstname>> <<borrowers.surname>>:<<borrowers.email>>:<<items.barcode>>
220
221
You have to combine this option without one (and only one) letter_code.
222
223
=item B<--letter_code>
224
225
Filter print messages by letter_code.
226
Several letter_code parameters can be given.
132
227
133
=item B<-h|--help>
228
=item B<-h|--help>
134
229
135
- 

Return to bug 11603