use Modern::Perl;
-use Koha::Database;
-use C4::Biblio;
-use Koha::Biblios;
+use Koha::Database qw( schema );
+use C4::Biblio qw( AddBiblio );
+use Koha::Biblios qw( _type );
+use Koha::Items qw( _type );
+use Koha::DateUtils qw( dt_from_string );
use Bytes::Random::Secure;
-use Carp;
-use Module::Load;
+use Carp qw( carp );
+use Module::Load qw( load );
use String::Random;
+use constant {
+ SIZE_BARCODE => 20, # Not perfect but avoid to fetch the value when creating a new item
+};
+
sub new {
my ($class) = @_;
my $self = {};
return;
}
+ my @unknowns = grep( !/^(class|value)$/, keys %{ $params });
+ carp "Unknown parameter(s): ", join( ', ', @unknowns ) if scalar @unknowns;
+
load $class;
my $source = $class->_type;
- my @pks = $self->schema->source( $class->_type )->primary_columns;
my $hashref = $self->build({ source => $source, value => $value });
- my @ids;
+ my $object;
+ if ( $class eq 'Koha::Old::Patrons' ) {
+ $object = $class->search({ borrowernumber => $hashref->{borrowernumber} })->next;
+ } elsif ( $class eq 'Koha::Statistics' ) {
+ $object = $class->search({ datetime => $hashref->{datetime} })->next;
+ } else {
+ my @ids;
+ my @pks = $self->schema->source( $class->_type )->primary_columns;
+ foreach my $pk ( @pks ) {
+ push @ids, $hashref->{ $pk };
+ }
- foreach my $pk ( @pks ) {
- push @ids, $hashref->{ $pk };
+ $object = $class->find( @ids );
}
- my $object = $class->find( @ids );
-
return $object;
}
});
}
-sub gimme_a_biblio {
+sub build_sample_biblio {
my ( $self, $args ) = @_;
my $title = $args->{title} || 'Some boring read';
my $marcflavour = C4::Context->preference('marcflavour');
my $record = MARC::Record->new();
+ $record->encoding( 'UTF-8' );
+
my ( $tag, $subfield ) = $marcflavour eq 'UNIMARC' ? ( 200, 'a' ) : ( 245, 'a' );
$record->append_fields(
MARC::Field->new( $tag, ' ', ' ', $subfield => $title ),
return Koha::Biblios->find($biblio_id);
}
+sub build_sample_item {
+ my ( $self, $args ) = @_;
+
+ my $biblionumber =
+ delete $args->{biblionumber} || $self->build_sample_biblio->biblionumber;
+ my $library = delete $args->{library}
+ || $self->build_object( { class => 'Koha::Libraries' } )->branchcode;
+
+ # If itype is not passed it will be picked from the biblio (see Koha::Item->store)
+
+ my $barcode = delete $args->{barcode}
+ || $self->_gen_text( { info => { size => SIZE_BARCODE } } );
+
+ return Koha::Item->new(
+ {
+ biblionumber => $biblionumber,
+ homebranch => $library,
+ holdingbranch => $library,
+ barcode => $barcode,
+ %$args,
+ }
+ )->store->get_from_storage;
+}
+
# ------------------------------------------------------------------------------
# Internal helper routines
if( $cnt_scalar == @$keys ) {
# if one or more fk cols are null, the FK constraint will not be forced
return {} if $cnt_null > 0;
+
# does the record exist already?
- return {} if $self->schema->resultset($linked_tbl)->find( $fk_value );
+ my @pks = $self->schema->source( $linked_tbl )->primary_columns;
+ my %fk_pk_value;
+ for (@pks) {
+ $fk_pk_value{$_} = $fk_value->{$_} if defined $fk_value->{$_};
+ }
+ return {} if !(keys %fk_pk_value);
+ return {} if $self->schema->resultset($linked_tbl)->find( \%fk_pk_value );
}
# create record with a recursive build call
my $row = $self->build({ source => $linked_tbl, value => $fk_value });
}
push @$retvalue, $value->{$col_name};
} elsif( exists $self->{default_values}{$source}{$col_name} ) {
- push @$retvalue, $self->{default_values}{$source}{$col_name};
+ my $v = $self->{default_values}{$source}{$col_name};
+ $v = &$v() if ref($v) eq 'CODE';
+ push @$retvalue, $v;
} else {
my $data_type = $col_info->{data_type};
$data_type =~ s| |_|;
if( defined( $params->{info}->{size} ) ) {
$max = 10 ** ($params->{info}->{size}->[0] - $params->{info}->{size}->[1]);
}
+ $max = 10 ** 5 if $max > 10 ** 5;
return sprintf("%.2f", rand($max-0.1));
}
sub _gen_date {
my ($self, $params) = @_;
- return $self->schema->storage->datetime_parser->format_date(DateTime->now())
+ return $self->schema->storage->datetime_parser->format_date(dt_from_string)
}
sub _gen_datetime {
my ($self, $params) = @_;
- return $self->schema->storage->datetime_parser->format_datetime(DateTime->now());
+ return $self->schema->storage->datetime_parser->format_datetime(dt_from_string);
}
sub _gen_text {
lost => undef,
debarred => undef,
borrowernotes => '',
+ secret => undef,
},
Item => {
notforloan => 0,
itemlost => 0,
withdrawn => 0,
restricted => 0,
+ damaged => 0,
+ materials => undef,
more_subfields_xml => undef,
},
Category => {
enrolmentfee => 0,
reservefee => 0,
+ # Not X, used for statistics
+ category_type => sub { return [ qw( A C S I P ) ]->[int(rand(5))] },
+ min_password_length => undef,
+ require_strong_password => undef,
+ },
+ Branch => {
+ pickup_location => 0,
+ },
+ Reserve => {
+ non_priority => 0,
},
Itemtype => {
rentalcharge => 0,
+ rentalcharge_daily => 0,
+ rentalcharge_hourly => 0,
defaultreplacecost => 0,
processfee => 0,
+ notforloan => 0,
},
Aqbookseller => {
tax_rate => 0,
AuthHeader => {
marcxml => '',
},
- Accountline => {
- accountno => 0,
+ BorrowerAttributeType => {
+ mandatory => 0,
+ },
+ Suggestion => {
+ suggesteddate => dt_from_string()->ymd,
+ STATUS => 'ASKED'
+ },
+ ReturnClaim => {
+ issue_id => undef, # It should be a FK but we removed it
+ # We don't want to generate a random value
},
};
}