Jonathan Druart
81431ee28a
Code and variables to deal with the update child feature are not centralized but copied/pasted in several scripts. Which leads to issues obsviously (bug 20805 for instance). Moreover the strings used by the templates are also in several template files (or .inc) To deal with that this patch introduces the idea to create 1 .inc file per .js file Here we have members-menu.inc for members-menu.js Test plan: - Remove all your adult categories (categories.category_type='A') - Create a patron with a child category - Try to update to adult category => The entry does no longer appears! (This is a change in the behaviour) - Create one adult category - Update to adult category => There is a JS confirmation message, if you accept the patron will be updated to the adult category - Create (at least) another adult category - Create another child - Update to adult category => No more confirmation message but a popup to select the adult category - Pick one => The patron has been updated to the adult category Signed-off-by: Owen Leonard <oleonard@myacpl.org> Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
155 lines
7 KiB
Text
155 lines
7 KiB
Text
[% USE Asset %]
|
|
[% USE Branches %]
|
|
[% USE Categories %]
|
|
[% USE KohaDates %]
|
|
[% SET footerjs = 1 %]
|
|
[% INCLUDE 'doc-head-open.inc' %]
|
|
<title>Koha › Patrons › Merge patron records</title>
|
|
[% INCLUDE 'doc-head-close.inc' %]
|
|
|
|
</head>
|
|
<body id="pat_merge" class="pat">
|
|
[% INCLUDE 'header.inc' %]
|
|
[% INCLUDE 'patron-search.inc' %]
|
|
|
|
[% BLOCK display_names %]
|
|
[% SWITCH rs %]
|
|
[% CASE 'Accountline' %]account lines
|
|
[% CASE 'ArticleRequest' %]article requests
|
|
[% CASE 'BorrowerAttribute' %]extended patron attributes
|
|
[% CASE 'BorrowerDebarment' %]patron restrictions
|
|
[% CASE 'BorrowerFile' %]patrons files
|
|
[% CASE 'BorrowerModification' %]patron modification requests
|
|
[% CASE 'ClubEnrollment' %]club enrollments
|
|
[% CASE 'Issue' %]checkouts
|
|
[% CASE 'ItemsLastBorrower' %]marks as last borrower of item
|
|
[% CASE 'Linktracker' %]tracked link clicks
|
|
[% CASE 'Message' %]patron messages
|
|
[% CASE 'MessageQueue' %]patron notices
|
|
[% CASE 'OldIssue' %]previous checkouts
|
|
[% CASE 'OldReserve' %]filled holds
|
|
[% CASE 'Rating' %]ratings
|
|
[% CASE 'Reserve' %]current holds
|
|
[% CASE 'Review' %]reviews
|
|
[% CASE 'Statistic' %]statistics
|
|
[% CASE 'SearchHistory' %]historical searches
|
|
[% CASE 'Suggestion' %]purchase suggestions
|
|
[% CASE 'TagAll' %]tags
|
|
[% CASE 'Virtualshelfcontent' %]list items
|
|
[% CASE 'Virtualshelfshare' %]list shares
|
|
[% CASE 'Virtualshelve' %]lists
|
|
[% CASE %][% rs %]
|
|
[% END %]
|
|
[% END %]
|
|
|
|
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a> › Merge patron records</div>
|
|
|
|
<div class="main container-fluid">
|
|
<div class="row">
|
|
<div class="col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">
|
|
<h3>Merge patron records</h3>
|
|
|
|
[% IF action == 'show' %]
|
|
[% IF patrons.count > 1 %]
|
|
<p>Select patron to keep. Data from the other patrons will be transferred to this patron record and the remaining patron records will be deleted.</p>
|
|
<form type="post" action="merge-patrons.pl">
|
|
<table id="patron-merge-table" class="datatable">
|
|
<thead>
|
|
<tr>
|
|
<th> </th>
|
|
<th>Card</th>
|
|
<th>Name</th>
|
|
<th>Date of birth</th>
|
|
<th>Category</th>
|
|
<th>Library</th>
|
|
<th>Expires on</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody>
|
|
[% FOREACH p IN patrons %]
|
|
<tr>
|
|
<td><input class='keeper' type='radio' name='keeper' value='[% p.id %]' /></td>
|
|
<td>[% p.cardnumber | html %]</td>
|
|
<td>[% INCLUDE 'patron-title.inc' patron = p %]</td>
|
|
<td>[% p.dateofbirth | $KohaDates %]</td>
|
|
<td>[% Categories.GetName( p.categorycode ) %] ([% p.categorycode %])</td>
|
|
<td>[% Branches.GetName( p.branchcode ) %]</td>
|
|
<td>[% p.dateexpiry | $KohaDates %]</td>
|
|
[% END %]
|
|
</tbody>
|
|
</table>
|
|
|
|
[% FOREACH p IN patrons %]
|
|
<input type="hidden" name="id" value="[% p.id %]" />
|
|
[% END %]
|
|
|
|
<p/>
|
|
|
|
<input type="hidden" name="action" value="merge" />
|
|
<input id="merge-patrons" type="submit" value="Merge patrons" />
|
|
[% ELSE %]
|
|
<div class="dialog alert">Error: Two or more patrons need to be selected for merging</div>
|
|
[% END %]
|
|
</form>
|
|
[% ELSIF action == 'merge' %]
|
|
<h4>Results</h4>
|
|
[% IF error %]
|
|
[% IF error == 'INVALID_KEEPER' %]
|
|
<div class="dialog alert">Merge failed! The patron to keep was invalid.</div>
|
|
[% ELSE %]
|
|
<div class="dialog alert">Merge failed! The following error was reported: [% error %].</div>
|
|
[% END %]
|
|
[% ELSIF !results.merged.keys.size %]
|
|
<div class="dialog alert">No valid patrons to merge were found.</div>
|
|
[% ELSE %]
|
|
<p>
|
|
Patron records merged into <a href="moremember.pl?borrowernumber=[% keeper.id %]">[% INCLUDE 'patron-title.inc' patron = keeper %]</a>
|
|
</p>
|
|
|
|
[% FOREACH pair IN results.merged.pairs %]
|
|
[% SET patron = pair.value.patron %]
|
|
|
|
<h5>[% INCLUDE 'patron-title.inc' %]</h5>
|
|
|
|
[% FOREACH r IN pair.value.updated.pairs %]
|
|
[% SET name = r.key %]
|
|
[% SET count = r.value %]
|
|
[% IF count %]
|
|
<p>
|
|
<span>[% count %] [% PROCESS display_names rs = name %] transferred.</span>
|
|
[% IF name == 'Reserve' %]
|
|
<strong>It is advisable to check for and resolve duplicate holds due to merging.</strong>
|
|
[% END %]
|
|
</p>
|
|
[% END %]
|
|
[% END %]
|
|
[% END %]
|
|
[% END %]
|
|
|
|
[% UNLESS error %]
|
|
<a class="btn btn-default btn-sm" href="moremember.pl?borrowernumber=[% keeper.id %]">View patron record</a>
|
|
[% END %]
|
|
[% END %]
|
|
</div>
|
|
</div>
|
|
|
|
[% MACRO jsinclude BLOCK %]
|
|
[% INCLUDE 'str/members-menu.inc' %]
|
|
[% Asset.js("js/members-menu.js") %]
|
|
|
|
<script>
|
|
$(document).ready(function() {
|
|
$('#merge-patrons').prop('disabled', true);
|
|
$('#patron-merge-table').on('change', 'input', function() {
|
|
if ( $('.keeper:checked').length > 0 ) {
|
|
$('#merge-patrons').prop('disabled', false);
|
|
} else {
|
|
$('#merge-patrons').prop('disabled', true);
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
[% END %]
|
|
|
|
[% INCLUDE 'intranet-bottom.inc' %]
|