Bugzilla – Attachment 90389 Details for
Bug 12446
Enable an adult to have a guarantor
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 12446: Enable an adult to have a guarantor
Bug-12446-Enable-an-adult-to-have-a-guarantor.patch (text/plain), 37.16 KB, created by
Nadine Pierre
on 2019-06-06 19:00:37 UTC
(
hide
)
Description:
Bug 12446: Enable an adult to have a guarantor
Filename:
MIME Type:
Creator:
Nadine Pierre
Created:
2019-06-06 19:00:37 UTC
Size:
37.16 KB
patch
obsolete
>From 5bd53b3587b9138c3863ee334047437c261c9125 Mon Sep 17 00:00:00 2001 >From: Roch D'Amour <roch.damour@inlibro.com> >Date: Wed, 28 Feb 2018 17:54:53 -0500 >Subject: [PATCH] Bug 12446: Enable an adult to have a guarantor > >Concflicts has been fixed. Also attributes in system preference : AdditionalGuarantorField are now displayed correctly in all scenerios. > >I have rebased every patch. >This includes all the features from the previous patches. > >Removed the dollar signs and stopped using C4::Category > >On the patron category page, there is a new field to specify whether patrons can be guarantee or not. >The atomic update SQL script adds this new field and sets it to true for categories of type "C" and "P". > >1) Apply the patch >2) Run updatedatabase.pl to add AdditionalGuarantorField to preferences and canbeguarantee to categories. >3) Go to patron category administration, edit a category and change the value of Can Be Guarantee to yes (for Child and Professional mostly to set it by default) >4) See below to test various scenarios > >- Enable an adult to have a guarantor: >0.0) Create or edit a patron category of type 'A'. >0.1) Set the "Can be guarantee" field to "Yes" and save. >1) Select an adult patron -> details tab; >2) Click edit button; >3) validate "guarantor information" fieldset; > >- Shows guarantees' fines in the guarantor's page: >4) Click Set to patron button and select a guarantor; >5) Generate a fine; >6) Select guarantor patron -> details tab; >7) Validate guarantee's fine information. > >- Transfer some guarantor's information to the guarantee while adding a guarantiee: >0) Select an adult patron; >1) Insert all information; >2) Click Add guarantiee bouton; >3) Validade Garantor information/Main address/Contact fieldsets filled; > >- Transfer some guarantor's information to the guarantee while creating a new patron >0) Select an adult patron; >1) Insert all information; >2) Add a new adult patron; >3) Click "Set to patron" button; >4) Select the adult patron from 0); >5) Validade Garantor information/Main address/Contact fieldsets filled; > >- Transfer guarantor's alternate address/contact to the guarantee while creating a new patron: >0) Search AdditionalGuarantorField preference; >1) Insert some additional database columns from alternate address/contact to be transferred from guarantor; >2) Select an adult patron; >3) Insert all information; >4) Add a new adult patron; >5) Click "Set to patron" button; >6) Select the adult patron from 0); >7) Validade Garantor information/Main address/Contact fieldsets filled; >8) Validade Garantor additional alternate address/contact filled; > >- Transfer guarantor's alternate address/contact to the guarantee while adding a guarantiee: >0) Search AdditionalGuarantorField preference; >1) Insert some additional database columns from alternate address/contact to be transferred from guarantor; >3) Select an adult patron; >4) Insert all information; >5) Click Add guarantiee bouton; >6) Validade Garantor information/Main address/Contact fieldsets filled; >7) Validade Garantor additional alternate address/contact filled; >--- > 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 > >diff --git a/C4/Members/Attributes.pm b/C4/Members/Attributes.pm >index cf9051d754..41490a148c 100644 >--- a/C4/Members/Attributes.pm >+++ b/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 <http://koha-community.org/> >diff --git a/C4/Utils/DataTables/Members.pm b/C4/Utils/DataTables/Members.pm >index 9fb539e4f1..5d778f41e2 100644 >--- a/C4/Utils/DataTables/Members.pm >+++ b/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 >diff --git a/Koha/Schema/Result/Category.pm b/Koha/Schema/Result/Category.pm >index b32b96759a..c7a9c5080c 100644 >--- a/Koha/Schema/Result/Category.pm >+++ b/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", >diff --git a/admin/categories.pl b/admin/categories.pl >index f9144e7ced..92b75a0800 100755 >--- a/admin/categories.pl >+++ b/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, >diff --git a/installer/data/mysql/atomicupdate/bug_12446-EnableAdultGarantee.sql b/installer/data/mysql/atomicupdate/bug_12446-EnableAdultGarantee.sql >new file mode 100644 >index 0000000000..56462a7de2 >--- /dev/null >+++ b/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'; >diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql >index da3ff83f37..831f62dc62 100644 >--- a/installer/data/mysql/kohastructure.sql >+++ b/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; >diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql >index 708b16bfda..ac179d5e85 100644 >--- a/installer/data/mysql/sysprefs.sql >+++ b/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'), >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/member-main-address-style-us.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/member-main-address-style-us.inc >index 0db6e834dd..15893cbd0f 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/member-main-address-style-us.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/member-main-address-style-us.inc >@@ -8,7 +8,7 @@ > <label for="streetnumber"> > [% END %] > Street number: </label> >- <input type="text" id="streetnumber" name="streetnumber" size="5" value="[% patron.streetnumber | html %]" /> >+ <input type="text" id="streetnumber" name="streetnumber" size="5" value="[% streetnumber | html %]" /> > [% IF ( mandatorystreetnumber ) %]<span class="required">Required</span>[% END %] > </li> > [% END %] >@@ -24,7 +24,7 @@ > <select name="streettype"> > <option value=""></option> > [% FOR roadtype IN roadtypes %] >- [% IF roadtype.authorised_value == patron.streettype %] >+ [% IF roadtype.authorised_value == streettype %] > <option value="[% roadtype.authorised_value | html %]" selected="selected">[% roadtype.lib | html %]</option> > [% ELSE %] > <option value="[% roadtype.authorised_value | html %]">[% roadtype.lib | html %]</option> >@@ -43,7 +43,7 @@ > <label for="address"> > [% END %] > Address: </label> >- <input type="text" id="address" name="address" size="35" value="[% patron.address | html %]" /> >+ <input type="text" id="address" name="address" size="35" value="[% address | html %]" /> > [% IF ( mandatoryaddress ) %]<span class="required">Required</span>[% END %] > </li> > [% END %] >@@ -55,7 +55,7 @@ > <label for="address2"> > [% END %] > Address 2: </label> >- <input type="text" id="address2" name="address2" size="35" value="[% patron.address2 | html %]" /> >+ <input type="text" id="address2" name="address2" size="35" value="[% address2 | html %]" /> > [% IF ( mandatoryaddress2 ) %]<span class="required">Required</span>[% END %] > </li> > [% END %] >@@ -67,12 +67,12 @@ > <label for="city"> > [% END %] > City: </label> >- <input type="text" id="city" name="city" size="20" value="[% patron.city | html %]" /> >+ <input type="text" id="city" name="city" size="20" value="[% city | html %]" /> > [% IF cities.count %]or choose > <select class="select_city" data-addressfield="" name="select_city"> > <option value="|||"></option> > [% FOREACH c IN cities %] >- [% IF c.city_name == patron.city && c.city_state == patron.state && c.city_zipcode == patron.zipcode %] >+ [% IF c.city_name == city && c.city_state == state && c.city_zipcode == zipcode %] > <option value="[% c.city_zipcode | html %]|[% c.city_name | html %]|[% c.city_state | html %]|[% c.city_country | html %]" selected="selected"> > [% ELSE %] > <option value="[% c.city_zipcode | html %]|[% c.city_name | html %]|[% c.city_state | html %]|[% c.city_country | html %]"> >@@ -93,7 +93,7 @@ > <label for="state"> > [% END %] > State: </label> >- <input type="text" name="state" id="state" size="20" value="[% patron.state | html %]" /> >+ <input type="text" name="state" id="state" size="20" value="[% state | html %]" /> > [% IF ( mandatorystate ) %]<span class="required">Required</span>[% END %] > </li> > [% END %] >@@ -105,7 +105,7 @@ > <label for="zipcode"> > [% END %] > ZIP/Postal code: </label> >- <input type="text" name="zipcode" id="zipcode" size="10" value="[% patron.zipcode | html %]" /> >+ <input type="text" name="zipcode" id="zipcode" size="10" value="[% zipcode | html %]" /> > [% IF ( mandatoryzipcode ) %]<span class="required">Required</span>[% END %] > </li> > [% END %] >@@ -117,7 +117,7 @@ > <label for="country"> > [% END %] > Country: </label> >- <input type="text" name="country" id="country" size="20" value="[% patron.country | html %]" /> >+ <input type="text" name="country" id="country" size="20" value="[% country | html %]" /> > [% IF ( mandatorycountry ) %]<span class="required">Required</span>[% END %] > </li> > [% END %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc >index 6e51ff5566..e55308c9d2 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc >+++ b/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") %] >- <a id="addchild" class="btn btn-default" href="/cgi-bin/koha/members/memberentry.pl?op=add&guarantorid=[% patron.borrowernumber | html %]"><i class="fa fa-plus"></i> Add child</a> >+ <a id="addchild" class="btn btn-default" href="/cgi-bin/koha/members/memberentry.pl?op=add&guarantorid=[% patron.borrowernumber | html %]"><i class="fa fa-plus"></i> Add guarantee</a> > [% END %] > [% IF CAN_user_borrowers_edit_borrowers %] > <a id="changepassword" class="btn btn-default" href="/cgi-bin/koha/members/member-password.pl?member=[% patron.borrowernumber | html %]"><i class="fa fa-lock"></i> Change password</a> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt >index f2704e9b57..ef91dbac69 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt >@@ -151,6 +151,18 @@ > </select> > <span class="required">Required</span> > </li> >+ <li> >+ <label for="canbeguarantee">Can be guarantee</label> >+ <select name="canbeguarantee" id="canbeguarantee"> >+ [% IF category.canbeguarantee %] >+ <option value="1" selected>Yes</option> >+ <option value="0">No</option> >+ [% ELSE %] >+ <option value="1">Yes</option> >+ <option value="0" selected>No</option> >+ [% END %] >+ <select> >+ </li> > <li><label for="branches">Branches limitation: </label> > <select id="branches" name="branches" multiple size="10"> > <option value="">All branches</option> >@@ -363,6 +375,7 @@ > </td> > </tr> > [% END %] >+ <tr><th scope="row">Can be guarantee</th><td>[% IF category.canbeguarantee %]Yes[% ELSE %]No[% END %]</td></tr> > <tr> > <th scope="row">Default privacy: </th> > <td> >@@ -422,6 +435,7 @@ > [% IF ( Koha.Preference('CheckPrevCheckout') == 'softyes' || Koha.Preference('CheckPrevCheckout') == 'softno' ) %] > <th scope="col">Check previous checkout?</th> > [% END %] >+ <th scope="col">Can be guarantee</th> > <th scope="col">Default privacy</th> > <th scope="col">Actions</th> > </tr> >@@ -526,6 +540,7 @@ > [% END %] > </td> > [% END %] >+ <td>[% IF category.canbeguarantee %] Yes [% ELSE %] no [% END %]</td> > <td> > [% SWITCH category.default_privacy %] > [% CASE 'default' %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref >index 9007da96a4..304f4b605d 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref >@@ -227,6 +227,11 @@ Patrons: > no: Allow all permitted users > - "to access/change superlibrarian privileges." > - "<br><strong>NOTE:</strong> A permitted user needs to have the 'permissions' flag (if no superlibrarian)." >+ - >+ - "These additional following <a href='http://schema.koha-community.org/tables/borrowers.html' target='blank'>database columns</a> will be transferred from guarantor to guarantee:" >+ - pref: AdditionalGuarantorField >+ class: multi >+ - (separate columns with |) > > Privacy: > - >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt >index 54f9899353..f2ce968a05 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt >@@ -220,7 +220,8 @@ > e.preventDefault(); > var borrowernumber = $(this).data("borrowernumber"); > var borrower_data = $("#borrower_data"+borrowernumber).val(); >- select_user( borrowernumber, JSON.parse(borrower_data) ); >+ var guarantor_attributes = $("#guarantor_attributes").val(); >+ select_user( borrowernumber, JSON.parse(borrower_data), JSON.parse(guarantor_attributes) ); > }); > > $("body").on("click",".patron_preview", function( e ){ >@@ -278,9 +279,9 @@ > wait_for_opener(); > } > [% ELSIF selection_type == 'select' %] >- function select_user(borrowernumber, data) { >+ function select_user(borrowernumber, data, attributes) { > var p = window.opener; >- p.select_user(borrowernumber, data); >+ p.select_user(borrowernumber, data, attributes); > window.close(); > } > [% END %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt >index 62fc2db2de..a8668703a4 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt >@@ -343,7 +343,6 @@ > [% END %] > </li> > [% ELSE %] >- [% IF ( C ) %] > [% IF ( guarantorid ) %] > <li id="contact-details"> > [% ELSE %] >@@ -368,9 +367,8 @@ > <input name="contactname" id="contactname" type="text" size="20" value="[% contactname | html %]" /> > [% END %] > </li> >- [% END %] >- [% UNLESS nocontactfirstname %] >- <li> >+ [% UNLESS nocontactfirstname %] >+<li> > <label for="contactfirstname">First name: </label> > [% IF ( guarantorid ) %] > <span>[% contactfirstname | html %]</span> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >index e967d56f68..eb593485b7 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >@@ -255,15 +255,22 @@ > [% IF guarantees %] > <li> > <span class="label">Guarantees:</span> >- <ul> >+ <table> > [% FOREACH guarantee IN guarantees %] >+ <tr> > [% IF logged_in_user.can_see_patron_infos( guarantee ) %] >- <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% guarantee.borrowernumber | uri %]">[% guarantee.firstname | html %] [% guarantee.surname | html %]</a></li> >+ <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% guarantee.borrowernumber | uri %]">[% guarantee.firstname | html %] [% guarantee.surname | html %]</a></td> >+ <td style='text-align:right'>[% guarantee.account.balance %]</td> > [% ELSE %] >- <li>[% guarantee.firstname | html %] [% guarantee.surname | html %]</li> >+ <td>[% guarantee.firstname | html %] [% guarantee.surname | html %]</td> > [% END %] >+ </tr> > [% END %] >- </ul> >+ [% IF logged_in_user.can_see_patron_infos( guarantee ) %] >+ <td>Total</td> >+ <td style='text-align:right'>[% amounttot %]</td> >+ [% END %] >+ </table> > </li> > [% ELSIF guarantor %] > <li> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/tables/guarantor_search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/tables/guarantor_search.tt >index a82f0e8dcb..6cba09c2da 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/tables/guarantor_search.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/tables/guarantor_search.tt >@@ -18,7 +18,7 @@ > "dt_address": > "[% INCLUDE escape_address data=data %]", > "dt_action": >- "<a href=\"#\" class=\"btn btn-default btn-xs select_user\" data-borrowernumber=\"[% data.borrowernumber | html %]\">Select</a><input type=\"hidden\" id=\"borrower_data[% data.borrowernumber | html %]\" name=\"borrower_data[% data.borrowernumber | html %]\" value=\"[% To.json(data) | html %]\" />" >+ "<a href=\"#\" class=\"btn btn-mini select_user\" data-borrowernumber=\"[% data.borrowernumber | html %]\">Select</a><input type=\"hidden\" id=\"borrower_data[% data.borrowernumber | html %]\" name=\"guarantor_data\" value=\"[% To.json(data) | html %]\" /><input type=\"hidden\" id=\"guarantor_attributes\" name=\"guarantor_attributes\" value=\"[% To.json(attributes) | html %]\" />" > }[% UNLESS loop.last %],[% END %] > [% END %] > ] >diff --git a/koha-tmpl/intranet-tmpl/prog/js/members.js b/koha-tmpl/intranet-tmpl/prog/js/members.js >index bcca8ef83c..33344b05e3 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/members.js >+++ b/koha-tmpl/intranet-tmpl/prog/js/members.js >@@ -169,7 +169,7 @@ function update_category_code(category_code) { > $(mytables).find(" li[data-category_code='']").show(); > } > >-function select_user(borrowernumber, borrower) { >+function select_user(borrowernumber, borrower, attributes) { > var form = $('#entryform').get(0); > if (form.guarantorid.value) { > $("#contact-details, #quick_add_form #contact-details").find('a').remove(); >@@ -192,14 +192,13 @@ function select_user(borrowernumber, borrower) { > .before('<span>' + borrower.firstname + '</span>').get(0).type = 'hidden'; > $("#quick_add_form #contactfirstname").val(borrower.firstname).before('<span>'+borrower.firstname+'</span.').attr({type:"hidden"}); > >- form.streetnumber.value = borrower.streetnumber; >- form.address.value = borrower.address; >- form.address2.value = borrower.address2; >- form.city.value = borrower.city; >- form.state.value = borrower.state; >- form.zipcode.value = borrower.zipcode; >- form.country.value = borrower.country; >- form.branchcode.value = borrower.branchcode; >+ form.guarantorsearch.value = LABEL_CHANGE; >+ for (var i = 0; i < parseInt(attributes.length, 10); i++) { >+ var attribute = attributes[i]; >+ if (borrower[attribute] != null){ >+ document.forms.entryform[attribute].value = borrower[attribute]; >+ } >+ } > > $("#quick_add_form #streetnumber").val(borrower.streetnumber); > $("#quick_add_form #address").val(borrower.address); >@@ -210,9 +209,6 @@ function select_user(borrowernumber, borrower) { > $("#quick_add_form #country").val(borrower.country); > $("#quick_add_form select[name='branchcode']").val(borrower.branchcode); > >- form.guarantorsearch.value = LABEL_CHANGE; >- $("#quick_add_form #guarantorsearch").val(LABEL_CHANGE); >- > return 0; > } > >diff --git a/members/memberentry.pl b/members/memberentry.pl >index 166302006b..9a8a2c468f 100755 >--- a/members/memberentry.pl >+++ b/members/memberentry.pl >@@ -257,13 +257,12 @@ if ( $guarantorid ) { > $newdata{'contactfirstname'}= $guarantordata->{'firstname'}; > $newdata{'contactname'} = $guarantordata->{'surname'}; > $newdata{'contacttitle'} = $guarantordata->{'title'}; >+ > if ( $op eq 'add' ) { >- foreach (qw(streetnumber address streettype address2 >- zipcode country city state phone phonepro mobile fax email emailpro branchcode >- B_streetnumber B_streettype B_address B_address2 >- B_city B_state B_zipcode B_country B_email B_phone)) { >- $newdata{$_} = $guarantordata->{$_}; >- } >+ my @attributes = @{C4::Members::Attributes::get_guarantor_shared_attributes()}; >+ foreach my $attribute (@attributes) { >+ $newdata{$attribute} = $guarantordata->{$attribute}; >+ } > } > } > } >@@ -761,7 +760,9 @@ if (C4::Context->preference('EnhancedMessagingPreferences')) { > $template->param(TalkingTechItivaPhone => C4::Context->preference("TalkingTechItivaPhoneNotification")); > } > >-$template->param( "showguarantor" => ($category_type=~/A|I|S|X/) ? 0 : 1); # associate with step to know where you are >+$template->param( "showguarantor" => $categorycode ? Koha::Patron::Categories->find($categorycode)->canbeguarantee : 1); # associate with step to know where you are >+ >+$template->param( "guarantor_attributes" => C4::Members::Attributes::get_guarantor_shared_attributes() ); > $debug and warn "memberentry step: $step"; > $template->param(%data); > $template->param( "step_$step" => 1) if $step; # associate with step to know where u are >diff --git a/members/moremember.pl b/members/moremember.pl >index 1f63180e58..54625e7bbe 100755 >--- a/members/moremember.pl >+++ b/members/moremember.pl >@@ -83,9 +83,10 @@ my $logged_in_user = Koha::Patrons->find( $loggedinuser ) or die "Not logged in" > output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } ); > > my $category_type = $patron->category->category_type; >+my $data = $patron->unblessed; > >-for (qw(gonenoaddress lost borrowernotes is_debarred)) { >- $patron->$_ and $template->param(flagged => 1) and last; >+for (qw(gonenoaddress lost borrowernotes)) { >+ $data->{$_} and $template->param(flagged => 1) and last; > } > > if ( $patron->is_debarred ) { >@@ -100,7 +101,6 @@ $template->param( flagged => 1 ) if $patron->account_locked; > > my @relatives; > if ( my $guarantor = $patron->guarantor ) { >- $template->param( guarantor => $guarantor ); > push @relatives, $guarantor->borrowernumber; > push @relatives, $_->borrowernumber for $patron->siblings; > } elsif ( $patron->contactname || $patron->contactfirstname ) { >@@ -112,12 +112,89 @@ if ( my $guarantor = $patron->guarantor ) { > ); > } else { > my @guarantees = $patron->guarantees; >- $template->param( guarantees => \@guarantees ); > push @relatives, $_->borrowernumber for @guarantees; > } > > my $relatives_issues_count = >- Koha::Checkouts->count({ borrowernumber => \@relatives }); >+ Koha::Database->new()->schema()->resultset('Issue') >+ ->count( { borrowernumber => \@relatives } ); >+my @guarantees = $patron->guarantees; >+my $count = scalar @guarantees; >+if ( $count ) { >+ $template->param( isguarantee => 1 ); >+ >+ my @guaranteedata; >+ my $amount; >+ my $totalmount = 0; >+ >+ foreach my $guarantee (@guarantees){ >+ >+ $totalmount += $guarantee->account->balance; >+ >+ } >+ $template->param( guarantees => @guarantees); >+ $template->param( amounttot => sprintf("%.2f",$totalmount)); >+} >+( $template->param( adultborrower => 1 ) ) if ( $category_type eq 'A' || $category_type eq 'I' ); >+ >+if (my $guarantor = $patron->guarantor){ >+ $template->param(isguarantor => 1); >+ $template->param(guarantor => $guarantor); >+} >+ >+my %bor; >+$bor{'borrowernumber'} = $borrowernumber; >+ >+# Converts the branchcode to the branch name >+my $samebranch; >+if ( C4::Context->preference("IndependentBranches") ) { >+ if ( C4::Context->IsSuperLibrarian() ) { >+ $samebranch = 1; >+ } >+ else { >+ my $userenv = C4::Context->userenv; >+ $samebranch = ( $data->{'branchcode'} eq $userenv->{branch} ); >+ } >+} >+else { >+ $samebranch = 1; >+} >+my $library = Koha::Libraries->find( $data->{branchcode})->unblessed; >+@{$data}{keys %$library} = values %$library; # merge in all branch columns # FIXME This is really ugly, we should pass the library instead >+ >+# If printing a page, send the account informations to the template >+if (defined $print and $print eq "page") { >+ my $accts = Koha::Account::Lines->search( >+ { borrowernumber => $patron->borrowernumber, amountoutstanding => { '>' => 0 } }, >+ { order_by => { -desc => 'accountlines_id' } } >+ ); >+ $template->param( accounts => $accts ); >+} >+ >+# Show OPAC privacy preference is system preference is set >+if ( C4::Context->preference('OPACPrivacy') ) { # FIXME Should be moved the the template >+ $template->param( OPACPrivacy => 1); >+ $template->param( "privacy".$data->{'privacy'} => 1); >+} >+ >+my $today = DateTime->now( time_zone => C4::Context->tz); >+$today->truncate(to => 'day'); >+my $overdues_exist = 0; >+my $totalprice = 0; >+ >+# Calculate and display patron's age >+if ( $data->{dateofbirth} ) { >+ $template->param( age => Koha::Patron->new({ dateofbirth => $data->{dateofbirth} })->get_age ); >+} >+ >+### ############################################################################### >+# BUILD HTML >+# show all reserves of this borrower, and the position of the reservation .... >+if ($borrowernumber) { >+ $template->param( >+ holds_count => Koha::Database->new()->schema()->resultset('Reserve') >+ ->count( { borrowernumber => $borrowernumber } ) ); >+} > > # Generate CSRF token for upload and delete image buttons > $template->param( >diff --git a/svc/members/search b/svc/members/search >index abb57164ce..cd72114559 100755 >--- a/svc/members/search >+++ b/svc/members/search >@@ -109,12 +109,14 @@ if ($has_permission) { > $results->{iTotalDisplayRecords} = scalar( @patrons_with_permission ); > } > >+my @attributes = C4::Members::Attributes::get_guarantor_shared_attributes(); > $template->param( > sEcho => $sEcho, > iTotalRecords => $results->{iTotalRecords}, > iTotalDisplayRecords => $results->{iTotalDisplayRecords}, > aaData => $results->{patrons}, > selection_type => $selection_type, >+ attributes => @attributes > ); > > output_with_http_headers $input, $cookie, $template->output, 'json'; >-- >2.17.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 12446
:
29278
|
36176
|
39744
|
42469
|
42470
|
42535
|
46277
|
46278
|
46327
|
46328
|
46345
|
46486
|
49793
|
50953
|
53534
|
53535
|
53536
|
53913
|
60929
|
60930
|
60934
|
63148
|
63149
|
63214
|
64793
|
64794
|
64828
|
72295
|
72883
|
77766
|
77767
|
77768
|
79343
|
79344
|
79345
|
79347
|
79348
|
85069
|
88364
|
88365
|
88366
|
88367
|
90389
|
90390
|
90391
|
90392
|
90470
|
90471
|
90472
|
90473
|
93388
|
93389
|
93390
|
93391
|
93392
|
93393
|
93394
|
95411
|
95853
|
95854
|
95855
|
95856
|
95857
|
95858
|
95859
|
95860
|
106753
|
106754
|
106755
|
106756
|
106757
|
107611
|
111052
|
111053
|
111317
|
111318
|
112102
|
112160
|
112161
|
112162
|
112163
|
113583
|
121925
|
121926
|
121927
|
121928
|
121929
|
122084
|
122085
|
122086
|
122087
|
122088
|
122089
|
122090
|
122091
|
122184
|
122185
|
122186
|
122187
|
130398
|
130399
|
130400
|
130401
|
130402
|
131965
|
131966
|
131967
|
131968
|
131969
|
133691
|
133952
|
133953
|
133954
|
133955
|
133956
|
133957
|
134930
|
134931
|
134932
|
134933
|
134934
|
134935
|
134936
|
135506
|
135507
|
135508
|
135509
|
135510
|
135511
|
135512
|
135519
|
135520
|
135521
|
135522
|
135523
|
135544
|
135545
|
142401
|
142408
|
142431
|
142432
|
142433
|
142434
|
142435
|
142436
|
142437
|
142438
|
142439