327 lines
9.3 KiB
Perl
327 lines
9.3 KiB
Perl
package Koha::SIP2::Account;
|
|
|
|
# This file is part of Koha.
|
|
#
|
|
# 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 Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Koha 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 Koha; if not, see <https://www.gnu.org/licenses>.
|
|
|
|
use Modern::Perl;
|
|
|
|
use base qw(Koha::SIP2::Object);
|
|
|
|
use Koha::SIP2::Account::CustomItemFields;
|
|
use Koha::SIP2::Account::ItemFields;
|
|
use Koha::SIP2::Account::CustomPatronFields;
|
|
use Koha::SIP2::Account::PatronAttributes;
|
|
use Koha::SIP2::Account::ScreenMsgRegexs;
|
|
use Koha::SIP2::Account::SortBinMappings;
|
|
use Koha::SIP2::Account::SystemPreferenceOverrides;
|
|
use Koha::SIP2::Institution;
|
|
|
|
=head1 NAME
|
|
|
|
Koha::SIP2::Account- Koha SipAccount Object class
|
|
|
|
=head1 API
|
|
|
|
=head2 Class Methods
|
|
|
|
=cut
|
|
|
|
=head3 get_for_config
|
|
|
|
Returns the account hashref as expected by C4/SIP/Sip/Configuration->new;
|
|
|
|
=cut
|
|
|
|
sub get_for_config {
|
|
my ($self) = @_;
|
|
|
|
my $unblessed = $self->unblessed;
|
|
foreach my $key ( keys %$unblessed ) {
|
|
|
|
# Remove all undef entries
|
|
if ( !defined $unblessed->{$key} ) {
|
|
delete $unblessed->{$key};
|
|
next;
|
|
}
|
|
|
|
# Convert all integer values to strings
|
|
if ( $unblessed->{$key} =~ /^[0-9]+$/ ) {
|
|
$unblessed->{$key} = $unblessed->{$key} . '';
|
|
}
|
|
}
|
|
|
|
# Delete fields unused by C4/SIP
|
|
delete $unblessed->{sip_institution_id};
|
|
delete $unblessed->{sip_account_id};
|
|
|
|
# Map database columns to their expected C4/SIP counterparts
|
|
$unblessed->{institution} = $self->institution->name;
|
|
$unblessed->{id} = delete $unblessed->{login_id};
|
|
if ( $unblessed->{error_detect} ) {
|
|
$unblessed->{'error-detect'} = 'enabled';
|
|
delete $unblessed->{error_detect};
|
|
}
|
|
|
|
# Add relations
|
|
# If a single element, return that, otherwise return a list
|
|
|
|
my @custom_item_fields = map { $_->get_for_config } @{ $self->custom_item_fields->as_list };
|
|
if (@custom_item_fields) {
|
|
$unblessed->{custom_item_field} =
|
|
scalar(@custom_item_fields) == 1 ? $custom_item_fields[0] : \@custom_item_fields;
|
|
}
|
|
|
|
my @item_fields = map { $_->get_for_config } @{ $self->item_fields->as_list };
|
|
if (@item_fields) {
|
|
$unblessed->{item_field} = scalar(@item_fields) == 1 ? $item_fields[0] : \@item_fields;
|
|
}
|
|
|
|
my @custom_patron_fields = map { $_->get_for_config } @{ $self->custom_patron_fields->as_list };
|
|
if (@custom_patron_fields) {
|
|
$unblessed->{custom_patron_field} =
|
|
scalar(@custom_patron_fields) == 1 ? $custom_patron_fields[0] : \@custom_patron_fields;
|
|
}
|
|
|
|
my @patron_attributes = map { $_->get_for_config } @{ $self->patron_attributes->as_list };
|
|
if (@patron_attributes) {
|
|
$unblessed->{patron_attribute} = scalar(@patron_attributes) == 1 ? $patron_attributes[0] : \@patron_attributes;
|
|
}
|
|
|
|
my %system_preference_overrides =
|
|
map { $_->variable => $_->value } @{ $self->system_preference_overrides->as_list };
|
|
if (%system_preference_overrides) {
|
|
$unblessed->{syspref_overrides} = \%system_preference_overrides;
|
|
}
|
|
|
|
my @sort_bin_mappings = map { $_->get_for_config } @{ $self->sort_bin_mappings->as_list };
|
|
if (@sort_bin_mappings) {
|
|
$unblessed->{sort_bin_mapping} =
|
|
scalar(@sort_bin_mappings) == 1 ? $sort_bin_mappings[0] : \@sort_bin_mappings;
|
|
}
|
|
|
|
my @screen_msg_regexs = map { $_->get_for_config } @{ $self->screen_msg_regexs->as_list };
|
|
if (@screen_msg_regexs) {
|
|
$unblessed->{screen_msg_regex} =
|
|
scalar(@screen_msg_regexs) == 1 ? $screen_msg_regexs[0] : \@screen_msg_regexs;
|
|
}
|
|
|
|
return $unblessed;
|
|
}
|
|
|
|
=head3 institution
|
|
|
|
Return the institution for this account
|
|
|
|
=cut
|
|
|
|
sub institution {
|
|
my ($self) = @_;
|
|
my $institution_rs = $self->_result->sip_institution;
|
|
return unless $institution_rs;
|
|
return Koha::SIP2::Institution->_new_from_dbic($institution_rs);
|
|
}
|
|
|
|
=head3 custom_item_fields
|
|
|
|
Returns the custom item fields for this SIP account
|
|
|
|
=cut
|
|
|
|
sub custom_item_fields {
|
|
my ( $self, $custom_item_fields ) = @_;
|
|
|
|
if ($custom_item_fields) {
|
|
my $schema = $self->_result->result_source->schema;
|
|
$schema->txn_do(
|
|
sub {
|
|
$self->custom_item_fields->delete;
|
|
|
|
for my $custom_item_field (@$custom_item_fields) {
|
|
$self->_result->add_to_sip_account_custom_item_fields($custom_item_field);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
my $custom_item_fields_rs = $self->_result->sip_account_custom_item_fields;
|
|
return Koha::SIP2::Account::CustomItemFields->_new_from_dbic($custom_item_fields_rs);
|
|
}
|
|
|
|
=head3 item_fields
|
|
|
|
Returns the item fields for this SIP account
|
|
|
|
=cut
|
|
|
|
sub item_fields {
|
|
my ( $self, $item_fields ) = @_;
|
|
|
|
if ($item_fields) {
|
|
my $schema = $self->_result->result_source->schema;
|
|
$schema->txn_do(
|
|
sub {
|
|
$self->item_fields->delete;
|
|
|
|
for my $item_field (@$item_fields) {
|
|
$self->_result->add_to_sip_account_item_fields($item_field);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
my $item_fields_rs = $self->_result->sip_account_item_fields;
|
|
return Koha::SIP2::Account::ItemFields->_new_from_dbic($item_fields_rs);
|
|
}
|
|
|
|
=head3 custom_patron_fields
|
|
|
|
Returns the custom patron fields for this SIP account
|
|
|
|
=cut
|
|
|
|
sub custom_patron_fields {
|
|
my ( $self, $custom_patron_fields ) = @_;
|
|
|
|
if ($custom_patron_fields) {
|
|
my $schema = $self->_result->result_source->schema;
|
|
$schema->txn_do(
|
|
sub {
|
|
$self->custom_patron_fields->delete;
|
|
|
|
for my $custom_patron_field (@$custom_patron_fields) {
|
|
$self->_result->add_to_sip_account_custom_patron_fields($custom_patron_field);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
my $custom_patron_fields_rs = $self->_result->sip_account_custom_patron_fields;
|
|
return Koha::SIP2::Account::CustomPatronFields->_new_from_dbic($custom_patron_fields_rs);
|
|
}
|
|
|
|
=head3 patron_attributes
|
|
|
|
Returns the patron attributes for this SIP account
|
|
|
|
=cut
|
|
|
|
sub patron_attributes {
|
|
my ( $self, $patron_attributes ) = @_;
|
|
|
|
if ($patron_attributes) {
|
|
my $schema = $self->_result->result_source->schema;
|
|
$schema->txn_do(
|
|
sub {
|
|
$self->patron_attributes->delete;
|
|
|
|
for my $patron_attribute (@$patron_attributes) {
|
|
$self->_result->add_to_sip_account_patron_attributes($patron_attribute);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
my $patron_attributes_rs = $self->_result->sip_account_patron_attributes;
|
|
return Koha::SIP2::Account::PatronAttributes->_new_from_dbic($patron_attributes_rs);
|
|
}
|
|
|
|
=head3 screen_msg_regexs
|
|
|
|
Returns the screen msg regexs for this SIP account
|
|
|
|
=cut
|
|
|
|
sub screen_msg_regexs {
|
|
my ( $self, $screen_msg_regexs ) = @_;
|
|
|
|
if ($screen_msg_regexs) {
|
|
my $schema = $self->_result->result_source->schema;
|
|
$schema->txn_do(
|
|
sub {
|
|
$self->screen_msg_regexs->delete;
|
|
|
|
for my $screen_msg_regex (@$screen_msg_regexs) {
|
|
$self->_result->add_to_sip_account_screen_msg_regexs($screen_msg_regex);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
my $screen_msg_regexs_rs = $self->_result->sip_account_screen_msg_regexs;
|
|
return Koha::SIP2::Account::ScreenMsgRegexs->_new_from_dbic($screen_msg_regexs_rs);
|
|
}
|
|
|
|
=head3 sort_bin_mappings
|
|
|
|
Returns the sort bin mappings for this SIP account
|
|
|
|
=cut
|
|
|
|
sub sort_bin_mappings {
|
|
my ( $self, $sort_bin_mappings ) = @_;
|
|
|
|
if ($sort_bin_mappings) {
|
|
my $schema = $self->_result->result_source->schema;
|
|
$schema->txn_do(
|
|
sub {
|
|
$self->sort_bin_mappings->delete;
|
|
|
|
for my $sort_bin_mapping (@$sort_bin_mappings) {
|
|
$self->_result->add_to_sip_account_sort_bin_mappings($sort_bin_mapping);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
my $sort_bin_mappings_rs = $self->_result->sip_account_sort_bin_mappings;
|
|
return Koha::SIP2::Account::SortBinMappings->_new_from_dbic($sort_bin_mappings_rs);
|
|
}
|
|
|
|
=head3 system_preference_overrides
|
|
|
|
Returns the system preference overrides for this SIP account
|
|
|
|
=cut
|
|
|
|
sub system_preference_overrides {
|
|
my ( $self, $system_preference_overrides ) = @_;
|
|
|
|
if ($system_preference_overrides) {
|
|
my $schema = $self->_result->result_source->schema;
|
|
$schema->txn_do(
|
|
sub {
|
|
$self->system_preference_overrides->delete;
|
|
|
|
for my $system_preference_override (@$system_preference_overrides) {
|
|
$self->_result->add_to_sip_account_system_preference_overrides($system_preference_override);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
my $system_preference_overrides_rs = $self->_result->sip_account_system_preference_overrides;
|
|
return Koha::SIP2::Account::SystemPreferenceOverrides->_new_from_dbic($system_preference_overrides_rs);
|
|
}
|
|
|
|
=head3 type
|
|
|
|
=cut
|
|
|
|
sub _type {
|
|
return 'SipAccount';
|
|
}
|
|
|
|
1;
|