Bug 34478: Add method="get" to forms without method
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / members / merge-patrons.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% USE Branches %]
4 [% USE Categories %]
5 [% USE KohaDates %]
6 [% PROCESS 'i18n.inc' %]
7 [% SET footerjs = 1 %]
8 [% INCLUDE 'doc-head-open.inc' %]
9 <title>[% FILTER collapse %]
10     [% t("Merge patron records") | html %] &rsaquo;
11     [% t("Patrons") | html %] &rsaquo;
12     [% t("Koha") | html %]
13 [% END %]</title>
14 [% INCLUDE 'doc-head-close.inc' %]
15 [% FILTER collapse %]
16     <style>
17         ins {
18             background-color: #e6ffe6;
19         }
20         del {
21             background-color: #ffe6e6;
22         }
23         .col0,
24         .col1 {
25             display: none;
26         }
27         .col3 ins,
28         .col2 del {
29             display: none;
30         }
31         #col-label,
32         .col2,
33         .col3 {
34             border-right: 1px solid #EEE;
35             flex-grow: 1;
36             margin-right:1em;
37         }
38         #col-label {
39             font-family: monospace;
40         }
41         #col-label div {
42             white-space: none;
43         }
44         .compare {
45             display: flex;
46         }
47         .modal-lg {
48             width: 90%;
49         }
50     </style>
51 [% END %]
52 </head>
53 <body id="pat_merge" class="pat">
54 [% WRAPPER 'header.inc' %]
55     [% INCLUDE 'patron-search-header.inc' %]
56 [% END %]
57
58 [% BLOCK display_names %]
59     [% SWITCH rs %]
60         [% CASE 'Accountline'           %]<span>account lines</span>
61         [% CASE 'ArticleRequest'        %]<span>article requests</span>
62         [% CASE 'BorrowerAttribute'     %]<span>extended patron attributes</span>
63         [% CASE 'BorrowerDebarment'     %]<span>patron restrictions</span>
64         [% CASE 'BorrowerFile'          %]<span>patrons files</span>
65         [% CASE 'BorrowerModification'  %]<span>patron modification requests</span>
66         [% CASE 'ClubEnrollment'        %]<span>club enrollments</span>
67         [% CASE 'Issue'                 %]<span>checkouts</span>
68         [% CASE 'ItemsLastBorrower'     %]<span>marks as last borrower of item</span>
69         [% CASE 'Linktracker'           %]<span>tracked link clicks</span>
70         [% CASE 'Message'               %]<span>patron messages</span>
71         [% CASE 'MessageQueue'          %]<span>patron notices</span>
72         [% CASE 'OldIssue'              %]<span>previous checkouts</span>
73         [% CASE 'OldReserve'            %]<span>filled holds</span>
74         [% CASE 'Rating'                %]<span>ratings</span>
75         [% CASE 'Reserve'               %]<span>current holds</span>
76         [% CASE 'Review'                %]<span>reviews</span>
77         [% CASE 'Statistic'             %]<span>statistics</span>
78         [% CASE 'SearchHistory'         %]<span>historical searches</span>
79         [% CASE 'Suggestion'            %]<span>purchase suggestions</span>
80         [% CASE 'TagAll'                %]<span>tags</span>
81         [% CASE 'Virtualshelfcontent'   %]<span>list items</span>
82         [% CASE 'Virtualshelfshare'     %]<span>list shares</span>
83         [% CASE 'Virtualshelve'         %]<span>lists</span>
84         [% CASE %][% rs | html %]
85     [% END %]
86 [% END %]
87
88 [% WRAPPER 'sub-header.inc' %]
89     [% WRAPPER breadcrumbs %]
90         [% WRAPPER breadcrumb_item %]
91             <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a>
92         [% END %]
93         [% WRAPPER breadcrumb_item bc_active= 1 %]
94             <span>Merge patron records</span>
95         [% END %]
96     [% END #/ WRAPPER breadcrumbs %]
97 [% END #/ WRAPPER sub-header.inc %]
98
99 <div class="main container-fluid">
100     <div class="row">
101         <div class="col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">
102             [% INCLUDE 'messages.inc' %]
103             <h1>Merge patron records</h1>
104
105             [% IF action == 'show' %]
106                 [% IF patrons.count > 1 %]
107                     [% IF ( patrons.count == 2 ) %]
108                         <div id="toolbar" class="btn-toolbar">
109                             <div class="btn-group">
110                                 <button class="btn btn-default" id="compare_patrons">
111                                     <i class="fa fa-arrows-h"></i> Compare patrons
112                                 </button>
113                             </div>
114                         </div>
115                     [% END %]
116
117                     <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>
118
119                     <form method="get" type="post" action="merge-patrons.pl" id="patron-merge-form">
120                         <table id="patron-merge-table" class="datatable">
121                             <thead>
122                                 <tr>
123                                     <th>&nbsp;</th>
124                                     <th>Card</th>
125                                     <th>Name</th>
126                                     <th>Date of birth</th>
127                                     <th>Category</th>
128                                     <th>Library</th>
129                                     <th>Expires on</th>
130                                 </tr>
131                             </thead>
132
133                             <tbody>
134                                 [% FOREACH p IN patrons %]
135                                     <tr>
136                                         <td><input class="keeper" type="radio" name="keeper" value="[% p.id | html %]" data-borrowernumber="[% p.id | html %]" id="keeper_[% p.id | html %]" /></td>
137                                         <td>
138                                             <label for="keeper_[% p.id | html %]">
139                                                 <strong>[% p.cardnumber | html %]</strong>
140                                             </label>
141                                         </td>
142                                         <td>
143                                             <a target="_blank" href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% p.borrowernumber | uri %]">
144                                                 [% INCLUDE 'patron-title.inc' patron = p %]
145                                                 <i class="fa-solid fa-window-restore"></i>
146                                             </a>
147                                         </td>
148                                         <td>[% p.dateofbirth | $KohaDates %]</td>
149                                         <td>[% Categories.GetName( p.categorycode ) | html %] ([% p.categorycode | html %])</td>
150                                         <td>[% Branches.GetName( p.branchcode ) | html %]</td>
151                                         <td>[% p.dateexpiry | $KohaDates %]</td>
152                                 [% END %]
153                             </tbody>
154                         </table>
155
156                         <fieldset class="action">
157                             [% FOREACH p IN patrons %]
158                                 <input type="hidden" name="id" value="[% p.id | html %]" />
159                             [% END %]
160                             <input type="hidden" name="action" value="merge" />
161                             <input type="submit" id="merge-patrons" class="btn btn-primary" value="Merge patrons" />
162                             [% PROCESS 'members-patron-selections.inc' id="patron-merge-form" %]
163                         </fieldset>
164
165                     [% ELSE %]
166                         <div class="dialog alert">Error: Two or more patrons need to be selected for merging</div>
167                     [% END %]
168                 </form>
169             [% ELSIF action == 'merge' %]
170                 <h4>Results</h4>
171                 [% IF error %]
172                     [% IF error == 'INVALID_KEEPER' %]
173                         <div class="dialog alert">Merge failed! The patron to keep was invalid.</div>
174                     [% ELSE %]
175                         <div class="dialog alert">Merge failed! The following error was reported: [% error | html %].</div>
176                     [% END %]
177                 [% ELSIF !results.merged.keys.size %]
178                     <div class="dialog alert">No valid patrons to merge were found.</div>
179                 [% ELSE %]
180                     <p>
181                         Patron records merged into <a href="moremember.pl?borrowernumber=[% keeper.id | uri %]">[% INCLUDE 'patron-title.inc' patron = keeper %]</a>
182                     </p>
183
184                     [% FOREACH pair IN results.merged.pairs %]
185                         [% SET patron = pair.value.patron %]
186
187                         <h5>[% INCLUDE 'patron-title.inc' %]</h5>
188
189                         [% FOREACH r IN pair.value.updated.pairs %]
190                             [% SET name = r.key %]
191                             [% SET count = r.value %]
192                             [% IF count %]
193                                 <p>
194                                     <span>[% count | html %] [% PROCESS display_names rs = name %] transferred.</span>
195                                     [% IF name == 'Reserve' %]
196                                         <strong>It is advisable to check for and resolve duplicate holds due to merging.</strong>
197                                     [% END %]
198                                 </p>
199                             [% END %]
200                         [% END %]
201                     [% END %]
202                 [% END %]
203
204                 [% UNLESS error %]
205                     <a class="btn btn-default" href="moremember.pl?borrowernumber=[% keeper.id | html %]">View patron record</a>
206                 [% END %]
207             [% END %]
208         </div>
209     </div>
210
211     <!-- Modal -->
212     <div class="modal" id="compareModal" tabindex="-1" role="dialog" aria-labelledby="compareModalLabel">
213         <div class="modal-dialog modal-lg" role="document">
214             <div class="modal-content">
215                 <div class="modal-header">
216                     <button type="button" class="closebtn" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
217                     <h4 class="modal-title" id="compareModalLabel">Compare patrons for merging</h4>
218                 </div>
219                 <div class="modal-body">
220                     <div class="compare">
221                         <div id="col-label">
222                             <div><strong>Name:</strong></div>
223                             <div><strong>Initials:</strong></div>
224                             <div><strong>Other name:</strong></div>
225                             <div><strong>Library:</strong></div>
226                             <div><strong>Card number:</strong></div>
227                             <div><strong>Category:</strong></div>
228                             <br />
229                             <div><strong>Address line 1:</strong></div>
230                             <div><strong>Address line 2:</strong></div>
231                             <div><strong>City:</strong></div>
232                             <div><strong>State:</strong></div>
233                             <div><strong>ZIP/Postal code:</strong></div>
234                             <div><strong>Country:</strong></div>
235                             <br />
236                             <div><strong>Registration date:</strong></div>
237                             <div><strong>Renewal date:</strong></div>
238                             <div><strong>Expiration date:</strong></div>
239                             <div><strong>Date of birth:</strong></div>
240                             <div><strong>Restricted:</strong></div>
241                             <div><strong>Primary email:</strong></div>
242                             <div><strong>Secondary email:</strong></div>
243                             <div><strong>Primary phone:</strong></div>
244                             <div><strong>Secondary phone:</strong></div>
245                             <div><strong>Other phone:</strong></div>
246                             <div><strong>Gender:</strong></div>
247                             <div><strong>Updated on:</strong></div>
248                             <div><strong>Username:</strong></div>
249                         </div>
250
251                         [% FOREACH p IN patrons %]
252                             <div id="col-[% p.borrowernumber | html %]-orig"class="col[% loop.index | html %]">
253 <!-- <pre> block is unindented to avoid unwanted whitespace -->
254 <pre>
255 [% IF ( p.surname ) %][% p.surname | html %], [% p.firstname | html %][% ELSE %]-[% END %]
256 [% IF ( p.initials ) %][% p.initials | html %][% ELSE %]-[% END %]
257 [% IF ( p.othernames ) %][% p.othernames | html %][% ELSE %]-[% END %]
258 [% IF ( p.branchcode ) %][% p.branchcode | html %][% ELSE %]-[% END %]
259 [% IF ( p.cardnumber ) %][% p.cardnumber | html %][% ELSE %]-[% END %]
260 [% IF ( p.categorycode ) %][% p.categorycode | html %][% ELSE %]-[% END %]
261
262 [% IF ( p.address ) %][% p.address | html %][% ELSE %]-[% END %]
263 [% IF ( p.address2 ) %][% p.address2 | html %][% ELSE %]-[% END %]
264 [% IF ( p.city ) %][% p.city | html %][% ELSE %]-[% END %]
265 [% IF ( p.state ) %][% p.state | html %][% ELSE %]-[% END %]
266 [% IF ( p.zipcode ) %][% p.zipcode | html %][% ELSE %]-[% END %]
267 [% IF ( p.country ) %][% p.country | html %][% ELSE %]-[% END %]
268
269 [% IF ( p.dateenrolled ) %][% p.dateenrolled | html %][% ELSE %]-[% END %]
270 [% IF ( p.date_renewed ) %][% p.date_renewed | html %][% ELSE %]-[% END %]
271 [% IF ( p.dateexpiry ) %][% p.dateexpiry | html %][% ELSE %]-[% END %]
272 [% IF ( p.dateofbirth ) %][% p.dateofbirth | html %][% ELSE %]-[% END %]
273 [% IF ( p.debarred ) %][% p.debarred | html %][% ELSE %]-[% END %]
274 [% IF ( p.email ) %][% p.email | html %][% ELSE %]-[% END %]
275 [% IF ( p.emailpro ) %][% p.emailpro | html %][% ELSE %]-[% END %]
276 [% IF ( p.phone ) %][% p.phone | html %][% ELSE %]-[% END %]
277 [% IF ( p.phonepro ) %][% p.phonepro | html %][% ELSE %]-[% END %]
278 [% IF ( p.mobile ) %][% p.mobile | html %][% ELSE %]-[% END %]
279 [% IF ( p.sex ) %][% p.sex | html %][% ELSE %]-[% END %]
280 [% IF ( p.updated_on ) %][% p.updated_on | html %][% ELSE %]-[% END %]
281 [% IF ( p.userid ) %][% p.userid | html %][% ELSE %]-[% END %]
282 </pre>
283                             </div>
284                         [% END %]
285                         [% FOREACH p IN patrons %]
286                             <div id="col-[% p.borrowernumber | html %]-diff" class="col[% ( loop.index + 2 ) | html %]"><pre></pre></div>
287                         [% END %]
288                     </div>
289                 </div>
290                 <div class="modal-footer">
291                     <button type="button" class="btn btn-default" id="submit-merge-form"><i class="fa fa-compress" aria-hidden="true"></i> Merge patrons</button>
292                     <button type="button" class="btn btn-default" data-dismiss="modal"><i class="fa fa-times" aria-hidden="true"></i> Close</button>
293                 </div>
294             </div> <!-- /.modal-content -->
295         </div> <!-- /.modal-dialog -->
296     </div> <!-- /#compareModal -->
297
298 [% MACRO jsinclude BLOCK %]
299     [% INCLUDE 'str/members-menu.inc' %]
300     [% Asset.js("js/members-menu.js") | $raw %]
301     [% Asset.js("js/members-patron-selections.js") | $raw %]
302     [% Asset.js("lib/jsdiff/jsdiff.min.js") | $raw %]
303     <script>
304     $(document).ready(function() {
305         var controls = $("#merge-patrons, #compare_patrons");
306         controls.prop('disabled', true);
307         $('#patron-merge-table').on('change', 'input', function() {
308             if ( $('.keeper:checked').length > 0 ) {
309                 controls.prop('disabled', false);
310             } else {
311                 controls.prop('disabled', true);
312             }
313         });
314
315         $("#compare_patrons").on("click", function(e){
316             e.preventDefault();
317             $("#compareModal").modal("show");
318         });
319
320         $("#compareModal").on("shown.bs.modal", function(){
321             /* Find which column is the basis for merging */
322             var col0 = $(".keeper:checked").data("borrowernumber");
323             var col1 = $(".keeper:not(:checked)").data("borrowernumber");
324             /* Get the original patron data for comparison */
325             var diff1 = $("#col-" + col0 + "-orig pre").text();
326             var diff2 = $("#col-" + col1 + "-orig pre").text();
327
328             var diffs = diffString(diff2, diff1);
329             /* Load the diff HTML in the empty columns */
330             $(".col2 pre, .col3 pre").html(diffs);
331         });
332
333         $("#submit-merge-form").on("click", function(){
334             $("#patron-merge-form").submit();
335         });
336     });
337
338     </script>
339 [% END %]
340
341 [% INCLUDE 'intranet-bottom.inc' %]