@@ -, +, @@ - Enable an adult to have a guarantor: - Shows guarantees' fines in the guarantor's page: - Transfer some guarantor's information to the guarantee while adding a guarantiee: - Transfer some guarantor's information to the guarantee while creating a new patron - Transfer guarantor's alternate address/contact to the guarantee while creating a new patron: - Transfer guarantor's alternate address/contact to the guarantee while adding a guarantiee: --- C4/Members/Attributes.pm | 19 +++- C4/Utils/DataTables/Members.pm | 32 +++++-- Koha/Schema/Result/Category.pm | 8 ++ admin/categories.pl | 3 + .../bug_12446-EnableAdultGarantee.sql | 11 +++ installer/data/mysql/kohastructure.sql | 3 +- installer/data/mysql/sysprefs.sql | 4 +- .../includes/member-main-address-style-us.inc | 18 ++-- .../prog/en/includes/members-toolbar.inc | 2 +- .../prog/en/modules/admin/categories.tt | 15 ++++ .../en/modules/admin/preferences/patrons.pref | 5 ++ .../prog/en/modules/common/patron_search.tt | 7 +- .../prog/en/modules/members/memberentrygen.tt | 6 +- .../prog/en/modules/members/moremember.tt | 15 +++- .../members/tables/guarantor_search.tt | 2 +- koha-tmpl/intranet-tmpl/prog/js/members.js | 20 ++--- members/memberentry.pl | 15 ++-- members/moremember.pl | 87 +++++++++++++++++-- svc/members/search | 2 + 19 files changed, 218 insertions(+), 56 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_12446-EnableAdultGarantee.sql --- a/C4/Members/Attributes.pm +++ a/C4/Members/Attributes.pm @@ -32,7 +32,7 @@ BEGIN { @EXPORT_OK = qw(GetBorrowerAttributes GetBorrowerAttributeValue CheckUniqueness SetBorrowerAttributes DeleteBorrowerAttribute UpdateBorrowerAttribute extended_attributes_code_value_arrayref extended_attributes_merge - SearchIdMatchingAttribute); + SearchIdMatchingAttribute get_guarantor_shared_attributes); %EXPORT_TAGS = ( all => \@EXPORT_OK ); } @@ -365,6 +365,23 @@ sub _sort_by_code { return $x->{code} cmp $y->{code} || $x->{value} cmp $y->{value}; } +=head2 get_guarantor_shared_attributes + + $guarantor_attributes = get_guarantor_attributes(); + + returns an array reference containing attributes to be shared between guarantor and guarantee. + +=cut + +sub get_guarantor_shared_attributes{ + my @attributes = qw( streetnumber address address2 city state zipcode country branchcode phone phonepro mobile email emailpro fax ); + if( my @additional = split(/\|/, C4::Context->preference("AdditionalGuarantorField")) ){ + $_ =~ s/(?:^\s+)|(?:\s+$)//g for (@additional); # Trim whitespaces + @attributes = ( @attributes, @additional); + } + return \@attributes; +} + =head1 AUTHOR Koha Development Team --- a/C4/Utils/DataTables/Members.pm +++ a/C4/Utils/DataTables/Members.pm @@ -2,6 +2,8 @@ package C4::Utils::DataTables::Members; use Modern::Perl; use C4::Context; +use C4::Members; +use C4::Members::Attributes qw/get_guarantor_shared_attributes/; use C4::Utils::DataTables; use Koha::DateUtils; use C4::Members::Attributes qw(SearchIdMatchingAttribute ); @@ -56,13 +58,29 @@ sub search { } } - my $select = "SELECT - borrowers.borrowernumber, borrowers.surname, borrowers.firstname, - borrowers.streetnumber, borrowers.streettype, borrowers.address, - borrowers.address2, borrowers.city, borrowers.state, borrowers.zipcode, - borrowers.country, cardnumber, borrowers.dateexpiry, - borrowers.borrowernotes, borrowers.branchcode, borrowers.email, - borrowers.userid, borrowers.dateofbirth, borrowers.categorycode, + # If branches are independent and user is not superlibrarian + # The search has to be only on the user branch + if ( C4::Context::only_my_library ) { + my $userenv = C4::Context->userenv; + $branchcode = $userenv->{'branch'}; + + } + + $dbh = C4::Context->dbh; + my @columns = qw( borrowernumber surname firstname streetnumber streettype address address2 city state zipcode country cardnumber dateexpiry borrowernotes branchcode email userid dateofbirth categorycode phone phonepro mobile fax email emailpro); + if( my @guarantor_attributes = @{ get_guarantor_shared_attributes() }){ + foreach my $item (@guarantor_attributes) { + if (! grep {$_ eq $item} @columns) { + push @columns, $item; + } + } + }; + my $borrowers_columns = ""; + foreach my $item (@columns) { + $borrowers_columns .= "borrowers." . $item . ", "; + } + + my $select = "SELECT " . $borrowers_columns . " categories.description AS category_description, categories.category_type, branches.branchname, borrowers.phone"; my $from = "FROM borrowers --- a/Koha/Schema/Result/Category.pm +++ a/Koha/Schema/Result/Category.pm @@ -109,6 +109,12 @@ __PACKAGE__->table("categories"); default_value: -1 is_nullable: 0 +=head2 canbeguarantee + + data_type: 'tinyint' + default_value: 0 + is_nullable: 0 + =head2 default_privacy data_type: 'enum' @@ -171,6 +177,8 @@ __PACKAGE__->add_columns( default_value => -1, is_nullable => 0, }, + "canbeguarantee", + { data_type => "tinyint", default_value => 0, is_nullable => 0}, "default_privacy", { data_type => "enum", --- a/admin/categories.pl +++ a/admin/categories.pl @@ -95,6 +95,7 @@ elsif ( $op eq 'add_validate' ) { my $reset_password = $input->param('reset_password'); my $change_password = $input->param('change_password'); my @branches = grep { $_ ne q{} } $input->multi_param('branches'); + my $canbeguarantee = $input->param('canbeguarantee'); $reset_password = undef if $reset_password eq -1; $change_password = undef if $change_password eq -1; @@ -124,6 +125,7 @@ elsif ( $op eq 'add_validate' ) { $category->hidelostitems($hidelostitems); $category->overduenoticerequired($overduenoticerequired); $category->category_type($category_type); + $category->canbeguarantee($canbeguarantee); $category->BlockExpiredPatronOpacActions($BlockExpiredPatronOpacActions); $category->checkprevcheckout($checkPrevCheckout); $category->default_privacy($default_privacy); @@ -152,6 +154,7 @@ elsif ( $op eq 'add_validate' ) { hidelostitems => $hidelostitems, overduenoticerequired => $overduenoticerequired, category_type => $category_type, + canbeguarantee => $canbeguarantee, BlockExpiredPatronOpacActions => $BlockExpiredPatronOpacActions, checkprevcheckout => $checkPrevCheckout, default_privacy => $default_privacy, --- a/installer/data/mysql/atomicupdate/bug_12446-EnableAdultGarantee.sql +++ a/installer/data/mysql/atomicupdate/bug_12446-EnableAdultGarantee.sql @@ -0,0 +1,11 @@ +-- ******** -- +-- SYSPREFS -- +-- ******** -- +INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) +VALUES ('AdditionalGuarantorField','',NULL,'Additional fields name to be transfer from guarantor to guarantee.','free'); + +-- ********* -- +-- STRUCTURE -- +-- ********* -- +ALTER TABLE categories ADD COLUMN `canbeguarantee` tinyint(1) NOT NULL default '0'; +UPDATE categories SET canbeguarantee = 1 WHERE category_type = 'P' OR category_type = 'C'; --- a/installer/data/mysql/kohastructure.sql +++ a/installer/data/mysql/kohastructure.sql @@ -316,10 +316,11 @@ CREATE TABLE `categories` ( -- this table shows information related to Koha patr `hidelostitems` tinyint(1) NOT NULL default '0', -- are lost items shown to this category (1 for yes, 0 for no) `category_type` varchar(1) NOT NULL default 'A', -- type of Koha patron (Adult, Child, Professional, Organizational, Statistical, Staff) `BlockExpiredPatronOpacActions` tinyint(1) NOT NULL default '-1', -- wheither or not a patron of this category can renew books or place holds once their card has expired. 0 means they can, 1 means they cannot, -1 means use syspref BlockExpiredPatronOpacActions - `default_privacy` ENUM( 'default', 'never', 'forever' ) NOT NULL DEFAULT 'default', -- Default privacy setting for this patron category + `default_privacy` ENUM( 'default', 'never', 'forever' ) NOT NULL DEFAULT 'default', -- Default privacy setting for this patron category, `checkprevcheckout` varchar(7) NOT NULL default 'inherit', -- produce a warning for this patron category if this item has previously been checked out to this patron if 'yes', not if 'no', defer to syspref setting if 'inherit'. `reset_password` TINYINT(1) NULL DEFAULT NULL, -- if patrons of this category can do the password reset flow, `change_password` TINYINT(1) NULL DEFAULT NULL, -- if patrons of this category can change their passwords in the OAPC + `canbeguarantee` tinyint(1) NOT NULL default '0' PRIMARY KEY (`categorycode`), UNIQUE KEY `categorycode` (`categorycode`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; --- a/installer/data/mysql/sysprefs.sql +++ a/installer/data/mysql/sysprefs.sql @@ -8,7 +8,9 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('AcqViewBaskets','user','user|branch|all','Define which baskets a user is allowed to view: his own only, any within his branch or all','Choice'), ('AcqWarnOnDuplicateInvoice','0','','Warn librarians when they try to create a duplicate invoice','YesNo'), ('AdditionalFieldsInZ3950ResultSearch', '', NULL, 'Determines which MARC field/subfields are displayed in -Additional field- column in the result of a search Z3950', 'Free'), -('AddressFormat','us','us|de|fr','Choose format to display postal addresses', 'Choice'), +('AdditionalGuarantorField','',NULL,'Additional fields name to be transfer from guarantor to guarantee.','free'), +('AddPatronLists','categorycode','categorycode|category_type','Allow user to choose what list to pick up from when adding patrons','Choice'), +('AddressFormat','us','','Choose format to display postal addresses', 'Choice'), ('AdlibrisCoversEnabled','0',NULL,'Display cover images in OPAC results and detail listing from Swedish retailer Adlibris.','YesNo'), ('AdlibrisCoversURL','http://www.adlibris.com/se/organisationer/showimagesafe.aspx',NULL,'Base URL for Adlibris cover image web service.','Free'), ('advancedMARCeditor','0','','If ON, the MARC editor won\'t display field/subfield descriptions','YesNo'), --- a/koha-tmpl/intranet-tmpl/prog/en/includes/member-main-address-style-us.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/member-main-address-style-us.inc @@ -8,7 +8,7 @@ - + [% IF ( mandatorystreetnumber ) %]Required[% END %] [% END %] @@ -24,7 +24,7 @@ + [% IF ( mandatoryaddress ) %]Required[% END %] [% END %] @@ -55,7 +55,7 @@ - + [% IF ( mandatoryaddress2 ) %]Required[% END %] [% END %] @@ -67,12 +67,12 @@ - + [% IF cities.count %]or choose + [% IF ( mandatorystate ) %]Required[% END %] [% END %] @@ -105,7 +105,7 @@ - + [% IF ( mandatoryzipcode ) %]Required[% END %] [% END %] @@ -117,7 +117,7 @@ - + [% IF ( mandatorycountry ) %]Required[% END %] [% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc @@ -17,7 +17,7 @@ [% IF CAN_user_borrowers_edit_borrowers %] [% IF patron.is_adult AND Koha.Preference("borrowerRelationship") %] - Add child + Add guarantee [% END %] [% IF CAN_user_borrowers_edit_borrowers %] Change password --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt @@ -151,6 +151,18 @@ Required +
  • + + +
  • [% END %]
  • - [% END %] - [% UNLESS nocontactfirstname %] -
  • + [% UNLESS nocontactfirstname %] +
  • [% IF ( guarantorid ) %] [% contactfirstname | html %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt @@ -255,15 +255,22 @@ [% IF guarantees %]
  • Guarantees: -