4 # This file is part of Koha.
6 # Koha is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # Koha is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with Koha; if not, see <http://www.gnu.org/licenses>.
21 use List
::MoreUtils
qw(uniq);
30 use Koha
::Biblioitems
;
32 use Koha
::Exporter
::Record
;
33 use Koha
::DateUtils
qw( dt_from_string output_pref );
35 my ( $output_format, $timestamp, $dont_export_items, $csv_profile_id, $deleted_barcodes, $clean, $filename, $record_type, $id_list_file, $starting_authid, $ending_authid, $authtype, $starting_biblionumber, $ending_biblionumber, $itemtype, $starting_callnumber, $ending_callnumber, $start_accession, $end_accession, $help );
37 'format=s' => \
$output_format,
38 'date=s' => \
$timestamp,
39 'dont_export_items' => \
$dont_export_items,
40 'csv_profile_id=s' => \
$csv_profile_id,
41 'deleted_barcodes' => \
$deleted_barcodes,
43 'filename=s' => \
$filename,
44 'record-type=s' => \
$record_type,
45 'id_list_file=s' => \
$id_list_file,
46 'starting_authid=s' => \
$starting_authid,
47 'ending_authid=s' => \
$ending_authid,
48 'authtype=s' => \
$authtype,
49 'starting_biblionumber=s' => \
$starting_biblionumber,
50 'ending_biblionumber=s' => \
$ending_biblionumber,
51 'itemtype=s' => \
$itemtype,
52 'starting_callnumber=s' => \
$starting_callnumber,
53 'ending_callnumber=s' => \
$ending_callnumber,
54 'start_accession=s' => \
$start_accession,
55 'end_accession=s' => \
$end_accession,
63 $filename ||= 'koha.mrc';
64 $output_format ||= 'iso2709';
65 $record_type ||= 'bibs';
67 # Retrocompatibility for the format parameter
68 $output_format = 'iso2709' if $output_format eq 'marc';
70 if ( $output_format eq 'csv' and $record_type eq 'auths' ) {
71 pod2usage
(q
|CSV output is only available
for biblio records
|);
75 if ( $timestamp and $record_type ne 'bibs' ) {
76 pod2usage
(q
|--timestamp can only be used with biblios
|);
79 if ( $record_type ne 'bibs' and $record_type ne 'auths' ) {
80 pod2usage
(q
|--record_type is
not valid
|);
83 if ( $deleted_barcodes and $record_type ne 'bibs' ) {
84 pod2usage
(q
|--deleted_barcodes can only be used with biblios
|);
87 $start_accession = dt_from_string
( $start_accession ) if $start_accession;
88 $end_accession = dt_from_string
( $end_accession ) if $end_accession;
90 my $dbh = C4
::Context
->dbh;
93 open STDOUT
, '>', $filename if $filename;
98 $timestamp = ($timestamp) ? output_pref
({ dt
=> dt_from_string
($timestamp), dateformat
=> 'iso', dateonly
=> 1, }): '';
100 if ( $record_type eq 'bibs' ) {
102 push @record_ids, $_->{biblionumber
} for @
{
103 $dbh->selectall_arrayref(q
| (
106 LEFT JOIN items USING
(biblionumber
)
107 WHERE biblioitems
.timestamp
>= ?
108 OR items
.timestamp
>= ?
112 LEFT JOIN deleteditems USING
(biblionumber
)
113 WHERE biblioitems
.timestamp
>= ?
114 OR deleteditems
.timestamp
>= ?
115 ) |, { Slice
=> {} }, ( $timestamp ) x
4 );
119 ( $starting_biblionumber or $ending_biblionumber )
121 "me.biblionumber" => {
122 ( $starting_biblionumber ?
( '>=' => $starting_biblionumber ) : () ),
123 ( $ending_biblionumber ?
( '<=' => $ending_biblionumber ) : () ),
127 ( $starting_callnumber or $ending_callnumber )
130 ( $starting_callnumber ?
( '>=' => $starting_callnumber ) : () ),
131 ( $ending_callnumber ?
( '<=' => $ending_callnumber ) : () ),
135 ( $start_accession or $end_accession )
138 ( $start_accession ?
( '>=' => $start_accession ) : () ),
139 ( $end_accession ?
( '<=' => $end_accession ) : () ),
145 C4
::Context
->preference('item-level_itypes')
146 ?
( 'items.itype' => $itemtype )
147 : ( 'biblioitems.itemtype' => $itemtype )
152 my $biblioitems = Koha
::Biblioitems
->search( $conditions, { join => 'items' } );
153 while ( my $biblioitem = $biblioitems->next ) {
154 push @record_ids, $biblioitem->biblionumber;
158 elsif ( $record_type eq 'auths' ) {
160 ( $starting_authid or $ending_authid )
163 ( $starting_authid ?
( '>=' => $starting_authid ) : () ),
164 ( $ending_authid ?
( '<=' => $ending_authid ) : () ),
168 ( $authtype ?
( authtypecode
=> $authtype ) : () ),
170 # Koha::Authority is not a Koha::Object...
171 my $authorities = Koha
::Database
->new->schema->resultset('AuthHeader')->search( $conditions );
172 @record_ids = map { $_->authid } $authorities->all;
175 @record_ids = uniq
@record_ids;
176 if ( @record_ids and my $id_list_file ) {
177 my @filter_record_ids = <$id_list_file>;
178 @filter_record_ids = map { my $id = $_; $id =~ s/[\r\n]*$// } @filter_record_ids;
180 my %record_ids = map { $_ => 1 } @record_ids;
181 @record_ids = grep $record_ids{$_}, @filter_record_ids;
184 if ($deleted_barcodes) {
185 for my $record_id ( @record_ids ) {
188 my $barcode = $dbh->selectall_arrayref(q
| (
189 SELECT DISTINCT barcode
191 WHERE deleteditems
.biblionumber
= ?
192 |, { Slice
=> {} }, $record_id );
193 say $_->{barcode
} for @
$barcode
197 Koha
::Exporter
::Record
::export
(
198 { record_type
=> $record_type,
199 record_ids
=> \
@record_ids,
200 format
=> $output_format,
201 csv_profile_id
=> ( $csv_profile_id || GetCsvProfileId
( C4
::Context
->preference('ExportWithCsvProfile') ) || undef ),
202 export_items
=> (not $dont_export_items),
203 clean
=> $clean || 0,
212 export records - This script exports record (biblios or authorities)
216 export_records.pl [-h|--help] [--format=format] [--date=date] [--record-type=TYPE] [--dont_export_items] [--deleted_barcodes] [--clean] [--id_list_file=PATH] --filename=outputfile
224 Print a brief help message.
228 --format=FORMAT FORMAT is either 'xml', 'csv' (biblio records only) or 'marc' (default).
232 --date=DATE DATE should be entered as the 'dateformat' syspref is
233 set (dd/mm/yyyy for metric, yyyy-mm-dd for iso,
234 mm/dd/yyyy for us) records exported are the ones that
235 have been modified since DATE.
237 =item B<--record-type>
239 --record-type=TYPE TYPE is 'bibs' or 'auths'.
241 =item B<--dont_export_items>
243 --dont_export_items If enabled, the item infos won't be exported.
245 =item B<--csv_profile_id>
247 --csv_profile_id=ID Generate a CSV file with the given CSV profile id (see tools/csv-profiles.pl)
248 Unless provided, the one defined in the system preference 'ExportWithCsvProfile' will be used.
249 This can only be used to export biblio records.
251 =item B<--deleted_barcodes>
253 --deleted_barcodes If used, a list of barcodes of items deleted since DATE
254 is produced (or from all deleted items if no date is
255 specified). Used only if TYPE is 'bibs'.
259 --clean removes NSE/NSB.
261 =item B<--id_list_file>
263 --id_list_file=PATH PATH is a path to a file containing a list of
264 IDs (biblionumber or authid) with one ID per line.
265 This list works as a filter; it is compatible with
266 other parameters for selecting records.
270 --filename=FILENAME FILENAME used to export the data.
272 =item B<--starting_authid>
274 --starting_authid=ID Export authorities with authid >= ID
276 =item B<--ending_authid>
278 --ending_authid=ID Export authorities with authid <= ID
282 --authtype=AUTHTYPE Export authorities from the given AUTHTYPE
284 =item B<--starting_biblionumber>
286 --starting_biblionumber=ID Export biblio with biblionumber >= ID
288 =item B<--ending_biblionumber>
290 --ending_biblionumber=ID Export biblio with biblionumber <= ID
294 --itemtype=ITEMTYPE Export biblio from the given ITEMTYPE
296 =item B<--starting_callnumber>
298 --starting_callnumber=CALLNUMBER Export biblio with callnumber >=CALLNUMBER
300 =item B<--ending_callnumber>
302 --ending_callnumber=CALLNUMBER Export biblio with callnumber <=CALLNUMBER
304 =item B<--start_accession>
306 --starting_accession=DATE Export biblio with an item accessionned after DATE
308 =item B<--end_accession>
310 --end_accession=DATE Export biblio with an item accessionned after DATE
316 Koha Development Team
324 This file is part of Koha.
326 Koha 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
327 Foundation; either version 3 of the License, or (at your option) any later version.
329 You should have received a copy of the GNU General Public License along
330 with Koha; if not, write to the Free Software Foundation, Inc.,
331 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.