|
Lines 71-76
Link Here
|
| 71 |
<div class="alert alert-warning">No missing issues found.</div> |
71 |
<div class="alert alert-warning">No missing issues found.</div> |
| 72 |
[% ELSE %] |
72 |
[% ELSE %] |
| 73 |
<div class="alert alert-info">Please choose a vendor.</div> |
73 |
<div class="alert alert-info">Please choose a vendor.</div> |
|
|
74 |
[% PROCESS select_vendor context => "main" %] |
| 74 |
[% END %] |
75 |
[% END %] |
| 75 |
[% END %] |
76 |
[% END %] |
| 76 |
[% END %] |
77 |
[% END %] |
|
Lines 85-153
Link Here
|
| 85 |
</div> |
86 |
</div> |
| 86 |
[% END %] |
87 |
[% END %] |
| 87 |
|
88 |
|
| 88 |
<form id="claims" name="claims" action="claims.pl" method="get"> |
|
|
| 89 |
<fieldset> |
| 90 |
<label for="supplierid">Vendor: </label> |
| 91 |
<select id="supplierid" name="supplierid"> |
| 92 |
[% FOREACH suploo IN suploop %] |
| 93 |
[% IF ( suploo.selected ) %] |
| 94 |
<option value="[% suploo.id | html %]" selected="selected" > |
| 95 |
[% ELSE %] |
| 96 |
<option value="[% suploo.id | html %]"> |
| 97 |
[% END %] |
| 98 |
[% suploo.name | html %] |
| 99 |
([% suploo.count | html %]) |
| 100 |
</option> |
| 101 |
[% END %] |
| 102 |
</select> |
| 103 |
<input type="submit" class="btn btn-primary" value="OK" /> |
| 104 |
</fieldset> |
| 105 |
</form> <!-- /#claims --> |
| 106 |
|
| 107 |
[% IF ( missingissues ) %] |
89 |
[% IF ( missingissues ) %] |
| 108 |
<h3>Missing issues</h3> |
90 |
<h3>Missing issues</h3> |
| 109 |
<form method="get" action="claims.pl" id="filter_claims_form"> |
|
|
| 110 |
<fieldset class="rows"> |
| 111 |
<legend>Filters:</legend> |
| 112 |
<ol> |
| 113 |
<li> |
| 114 |
<label for="from">From:</label> |
| 115 |
<input type="text" name="begindate" id="from" value="[% begindate | html %]" size="10" maxlength="10" class="flatpickr" data-date_to="to"/> |
| 116 |
<label for="to" style="float:none;">To:</label> |
| 117 |
<input type="text" name="enddate" id="to" value="[% enddate | html %]" size="10" maxlength="10" class="flatpickr" /> |
| 118 |
<span class="hint">[% INCLUDE 'date-format.inc' %]</span> |
| 119 |
<input id="filterByDate" type="button" value="OK" /> |
| 120 |
<a href="#" id="clearfilter"><i class="fa fa-times"></i> Clear filter</a> |
| 121 |
</li> |
| 122 |
</ol> |
| 123 |
</fieldset> |
| 124 |
</form> |
| 125 |
|
91 |
|
| 126 |
<fieldset> |
|
|
| 127 |
<form action="claims.pl" method="post" id="claims_form"> |
92 |
<form action="claims.pl" method="post" id="claims_form"> |
| 128 |
[% INCLUDE 'csrf-token.inc' %] |
93 |
<div class="page-section"> |
| 129 |
<table id="claimst"> |
94 |
[% INCLUDE 'csrf-token.inc' %] |
| 130 |
<thead> |
95 |
<table id="claimst"> |
| 131 |
<tr> |
96 |
<thead> |
| 132 |
<th><input type="checkbox" id="CheckAll"></th> |
|
|
| 133 |
<th>Vendor</th> |
| 134 |
<th>Library</th> |
| 135 |
<th class="anti-the">Title</th> |
| 136 |
<th>ISSN</th> |
| 137 |
<th>Issue number</th> |
| 138 |
<th>Status</th> |
| 139 |
<th>Since</th> |
| 140 |
<th>Publication date</th> |
| 141 |
<th>Claims count</th> |
| 142 |
<th>Claim date</th> |
| 143 |
[% FOR field IN additional_fields_for_subscription %] |
| 144 |
<th>[% field.name | html %]</th> |
| 145 |
[% END %] |
| 146 |
</tr> |
| 147 |
</thead> |
| 148 |
<tbody> |
| 149 |
[% FOREACH missingissue IN missingissues %] |
| 150 |
<tr> |
97 |
<tr> |
|
|
98 |
<<<<<<< HEAD |
| 151 |
<td> |
99 |
<td> |
| 152 |
[% UNLESS missingissue.cannot_claim %] |
100 |
[% UNLESS missingissue.cannot_claim %] |
| 153 |
<input type="checkbox" name="serialid" value="[% missingissue.serialid | html %]" /> |
101 |
<input type="checkbox" name="serialid" value="[% missingissue.serialid | html %]" /> |
|
Lines 176-231
Link Here
|
| 176 |
[% missingissue.claimdate | $KohaDates %] |
124 |
[% missingissue.claimdate | $KohaDates %] |
| 177 |
</td> |
125 |
</td> |
| 178 |
[% INCLUDE 'additional-fields-display.inc' available=additional_fields_for_subscription values=missingissue.additional_field_values value_only=1 is_table_cell=1 %] |
126 |
[% INCLUDE 'additional-fields-display.inc' available=additional_fields_for_subscription values=missingissue.additional_field_values value_only=1 is_table_cell=1 %] |
|
|
127 |
======= |
| 128 |
<th class="NoSort"><input type="checkbox" id="CheckAll"></th> |
| 129 |
<th>Vendor</th> |
| 130 |
<th>Library</th> |
| 131 |
<th class="anti-the">Title</th> |
| 132 |
<th>ISSN</th> |
| 133 |
<th>Issue number</th> |
| 134 |
<th>Status</th> |
| 135 |
<th>Since</th> |
| 136 |
<th>Publication date</th> |
| 137 |
<th>Claims count</th> |
| 138 |
<th>Claim date</th> |
| 139 |
[% FOR field IN additional_fields_for_subscription %] |
| 140 |
<th>[% field.name | html %]</th> |
| 141 |
[% END %] |
| 179 |
</tr> |
142 |
</tr> |
| 180 |
[% END # /FOREACH missingissue %] |
143 |
</thead> |
| 181 |
</tbody> |
144 |
<tbody> |
| 182 |
<tfoot> |
145 |
[% FOREACH missingissue IN missingissues %] |
| 183 |
<tr> |
146 |
<tr> |
| 184 |
<td></td> |
147 |
<td> |
| 185 |
<td><input type="text" class="filter" data-column_num="1" placeholder="Search vendor" /></td> |
148 |
[% UNLESS missingissue.cannot_claim %] |
| 186 |
<td><input type="text" class="filter" data-column_num="2" placeholder="Search library" /></td> |
149 |
<input type="checkbox" class="select_serial" name="serialid" value="[% missingissue.serialid | html %]" /> |
| 187 |
<td><input type="text" class="filter" data-column_num="3" placeholder="Search title" /></td> |
150 |
[% END %] |
| 188 |
<td><input type="text" class="filter" data-column_num="4" placeholder="Search ISSN" /></td> |
151 |
</td> |
| 189 |
<td><input type="text" class="filter" data-column_num="5" placeholder="Search issue number" /></td> |
152 |
<td>[% missingissue.name | html %]</td> |
| 190 |
<td><input type="text" class="filter" data-column_num="6" placeholder="Search status" /></td> |
153 |
<td> |
| 191 |
<td><input type="text" class="filter" data-column_num="7" placeholder="Search since" /></td> |
154 |
<span class="branch-[% missingissue.branchcode | html %]">[% Branches.GetName( missingissue.branchcode ) | html %]</span> |
| 192 |
<td><input type="text" class="filter" data-column_num="8" placeholder="Search publication date" /></td> |
155 |
</td> |
| 193 |
<td><input type="text" class="filter" data-column_num="9" placeholder="Search claim count" /></td> |
156 |
<td> |
| 194 |
<td><input type="text" class="filter" data-column_num="10" placeholder="Search claim date" /></td> |
157 |
<a href="/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=[% missingissue.subscriptionid | uri %]">[% missingissue.title | html %]</a> |
| 195 |
[% FOR field IN additional_fields_for_subscription %] |
158 |
</td> |
| 196 |
<td><input type="text" class="filter" data-column_num="[% loop.count + 10 | html %]" placeholder="Search [% field.name | html %]" /></td> |
159 |
<td>[% missingissue.issn | html %]</td> |
| 197 |
[% END %] |
160 |
<td>[% missingissue.serialseq | html %]</td> |
| 198 |
</tr> |
161 |
<td> |
| 199 |
</tfoot> |
162 |
[% INCLUDE 'serial-status.inc' serial = missingissue %] |
| 200 |
</table> <!-- /#claimst --> |
163 |
</td> |
|
|
164 |
<td class="planneddate" data-order="[% missingissue.planneddate | html %]"> |
| 165 |
[% missingissue.planneddate | $KohaDates %] |
| 166 |
</td> |
| 167 |
<td class="publisheddate" data-order="[% missingissue.publisheddate | html %]"> |
| 168 |
[% missingissue.publisheddate | $KohaDates %] |
| 169 |
</td> |
| 170 |
<td>[% missingissue.claims_count | html %]</td> |
| 171 |
<td data-order="[% missingissue.claimdate | html %]"> |
| 172 |
[% missingissue.claimdate | $KohaDates %] |
| 173 |
</td> |
| 174 |
[% FOR field IN additional_fields_for_subscription %] |
| 175 |
[% IF field.authorised_value_category %] |
| 176 |
<td>[% AuthorisedValues.GetByCode( field.authorised_value_category, missingissue.additional_fields.${field.name} ) | html %]</td> |
| 177 |
[% ELSE %] |
| 178 |
<td>[% missingissue.additional_fields.${field.name} | html %]</td> |
| 179 |
[% END %] |
| 180 |
[% END %] |
| 181 |
</tr> |
| 182 |
[% END # /FOREACH missingissue %] |
| 183 |
</tbody> |
| 184 |
<tfoot> |
| 185 |
<tr> |
| 186 |
<td></td> |
| 187 |
<td><input type="text" class="filter" data-column_num="1" placeholder="Search vendor" /></td> |
| 188 |
<td><input type="text" class="filter" data-column_num="2" placeholder="Search library" /></td> |
| 189 |
<td><input type="text" class="filter" data-column_num="3" placeholder="Search title" /></td> |
| 190 |
<td><input type="text" class="filter" data-column_num="4" placeholder="Search ISSN" /></td> |
| 191 |
<td><input type="text" class="filter" data-column_num="5" placeholder="Search issue number" /></td> |
| 192 |
<td><input type="text" class="filter" data-column_num="6" placeholder="Search status" /></td> |
| 193 |
<td><input type="text" class="filter" data-column_num="7" placeholder="Search since" /></td> |
| 194 |
<td><input type="text" class="filter" data-column_num="8" placeholder="Search publication date" /></td> |
| 195 |
<td><input type="text" class="filter" data-column_num="9" placeholder="Search claim count" /></td> |
| 196 |
<td><input type="text" class="filter" data-column_num="10" placeholder="Search claim date" /></td> |
| 197 |
[% FOR field IN additional_fields_for_subscription %] |
| 198 |
<td><input type="text" class="filter" data-column_num="[% loop.count + 10 | html %]" placeholder="Search [% field.name | html %]" /></td> |
| 199 |
[% END %] |
| 200 |
>>>>>>> Bug 37094: Improve layout of serial claims page |
| 201 |
</tr> |
| 202 |
</tfoot> |
| 203 |
</table> <!-- /#claimst --> |
| 204 |
</div> <!-- /.page-section --> |
| 205 |
|
| 206 |
<hr /> |
| 207 |
|
| 208 |
[% IF ( csv_profiles.count && letters ) %] |
| 209 |
<div class="row"> |
| 210 |
<div class="col-sm-6"> |
| 211 |
[% ELSIF ( csv_profiles.count || letters ) %] |
| 212 |
<div class="row"> |
| 213 |
<div class="col-sm-12"> |
| 214 |
[% END %] |
| 201 |
|
215 |
|
| 202 |
[% IF csv_profiles.count %] |
216 |
[% IF csv_profiles.count %] |
| 203 |
<fieldset class="action"> |
217 |
<fieldset class="serial_batch_op" disabled="disabled"> |
| 204 |
<label for="csv_code">Select CSV profile:</label> |
218 |
<fieldset class="brief"> |
| 205 |
<select id="csv_profile_for_export"> |
219 |
<legend>Download selected claims</legend> |
| 206 |
[% FOR csv IN csv_profiles %] |
220 |
<label for="csv_profile_for_export">Select CSV profile:</label> |
| 207 |
<option value="[% csv.export_format_id | html %]">[% csv.profile | html %]</option> |
221 |
<select id="csv_profile_for_export"> |
| 208 |
[% END %] |
222 |
[% FOR csv IN csv_profiles %] |
| 209 |
</select> |
223 |
<option value="[% csv.export_format_id | html %]">[% csv.profile | html %]</option> |
| 210 |
<span class="exportSelected"><a id="ExportSelected" href="/cgi-bin/koha/serials/claims.pl">Download selected claims</a></span> |
224 |
[% END %] |
|
|
225 |
</select> |
| 226 |
<fieldset class="action"> |
| 227 |
<button class="btn btn-primary" id="ExportSelected" type="button">Download selected claims</button> |
| 228 |
</fieldset> |
| 229 |
</fieldset> |
| 211 |
</fieldset> |
230 |
</fieldset> |
| 212 |
[% END %] |
231 |
[% END %] |
| 213 |
|
232 |
|
|
|
233 |
[% IF ( csv_profiles.count && letters ) %] |
| 234 |
</div> |
| 235 |
<div class="col-sm-6"> |
| 236 |
[% END %] |
| 237 |
|
| 214 |
[% IF letters %] |
238 |
[% IF letters %] |
| 215 |
<fieldset class="action"> |
239 |
<fieldset class="serial_batch_op" disabled="disabled"> |
| 216 |
<label for="letter_code">Select notice:</label> |
240 |
<fieldset class="brief"> |
| 217 |
<select name="letter_code" id="letter_code"> |
241 |
<legend>Send claim notification</legend> |
| 218 |
[% FOREACH letter IN letters %] |
242 |
<label for="letter_code">Select notice:</label> |
| 219 |
<option value="[% letter.code | html %]">[% letter.name | html %]</option> |
243 |
<select name="letter_code" id="letter_code"> |
| 220 |
[% END %] |
244 |
[% FOREACH letter IN letters %] |
| 221 |
</select> |
245 |
<option value="[% letter.code | html %]">[% letter.name | html %]</option> |
| 222 |
<input type="hidden" name="op" value="cud-send_alert" /> |
246 |
[% END %] |
| 223 |
<input type="hidden" name="supplierid" value="[% supplierid | html %]" /> |
247 |
</select> |
| 224 |
<input type="submit" name="submit" class="btn btn-primary" value="Send notification" /> |
248 |
<fieldset class="action"> |
|
|
249 |
<input type="hidden" name="op" value="cud-send_alert" /> |
| 250 |
<input type="hidden" name="supplierid" value="[% supplierid | html %]" /> |
| 251 |
<input type="submit" name="submit" class="btn btn-primary" value="Send notification" /> |
| 252 |
</fieldset> |
| 253 |
</fieldset> |
| 225 |
</fieldset> |
254 |
</fieldset> |
| 226 |
[% END %] |
255 |
[% END %] |
|
|
256 |
|
| 257 |
[% IF ( csv_profiles.count && letters ) %] |
| 258 |
</div> <!-- /.col-sm- --> |
| 259 |
</div> <!-- /.row --> |
| 260 |
[% END %] |
| 227 |
</form> <!-- /#claims_form --> |
261 |
</form> <!-- /#claims_form --> |
| 228 |
</fieldset> |
262 |
|
| 229 |
[% END # /missingissues %] |
263 |
[% END # /missingissues %] |
| 230 |
|
264 |
|
| 231 |
</main> |
265 |
</main> |
|
Lines 233-267
Link Here
|
| 233 |
|
267 |
|
| 234 |
<div class="col-md-2 order-sm-2 order-md-1"> |
268 |
<div class="col-md-2 order-sm-2 order-md-1"> |
| 235 |
<aside> |
269 |
<aside> |
|
|
270 |
[% IF letters %] |
| 271 |
[% IF ( missingissues && supplierid ) %] |
| 272 |
[% PROCESS select_vendor context => "sidebar" %] |
| 273 |
[% END %] |
| 274 |
[% END %] |
| 275 |
|
| 276 |
[% IF ( missingissues ) %] |
| 277 |
<form action="claims.pl" id="filter_claims_form"> |
| 278 |
<fieldset class="brief"> |
| 279 |
<legend class="sr-only">Filter missing issues</legend> |
| 280 |
<h4>Filter missing issues</h4> |
| 281 |
<ol> |
| 282 |
<li> |
| 283 |
<label for="from">From:</label> |
| 284 |
<input type="text" name="begindate" id="from" value="[% begindate | html %]" size="10" maxlength="10" class="flatpickr" data-date_to="to"/> |
| 285 |
</li> |
| 286 |
<li> |
| 287 |
<label for="to">To:</label> |
| 288 |
<input type="text" name="enddate" id="to" value="[% enddate | html %]" size="10" maxlength="10" class="flatpickr" /> |
| 289 |
<span class="hint">[% INCLUDE 'date-format.inc' %]</span> |
| 290 |
</li> |
| 291 |
</ol> |
| 292 |
</fieldset> |
| 293 |
<fieldset class="action"> |
| 294 |
<input id="filterByDate" class="btn btn-primary" type="button" value="OK" /> |
| 295 |
<input type="reset" class="btn btn-default" value="Clear" id="clearfilter" /> |
| 296 |
</fieldset> |
| 297 |
</form> |
| 298 |
[% END %] |
| 299 |
|
| 236 |
[% INCLUDE 'serials-menu.inc' %] |
300 |
[% INCLUDE 'serials-menu.inc' %] |
| 237 |
</aside> |
301 |
</aside> |
| 238 |
</div> <!-- /.col-md-2.order-md-1 --> |
302 |
</div> <!-- /.col-md-2.order-md-1 --> |
| 239 |
</div> <!-- /.row --> |
303 |
</div> <!-- /.row --> |
| 240 |
|
304 |
|
|
|
305 |
[% BLOCK select_vendor %] |
| 306 |
<form class="select_vendor" name="claims" action="claims.pl" method="get"> |
| 307 |
[% IF ( context == "main") %] |
| 308 |
<fieldset class="rows"> |
| 309 |
[% ELSE %] |
| 310 |
<fieldset class="brief"> |
| 311 |
[% END %] |
| 312 |
<h4>Choose vendor</h4> |
| 313 |
<label class="sr-only" for="supplierid">Choose vendor: </label> |
| 314 |
<select id="supplierid" name="supplierid"> |
| 315 |
[% FOREACH suploo IN suploop %] |
| 316 |
[% IF ( suploo.selected ) %] |
| 317 |
<option value="[% suploo.id | html %]" selected="selected" > |
| 318 |
[% ELSE %] |
| 319 |
<option value="[% suploo.id | html %]"> |
| 320 |
[% END %] |
| 321 |
[% suploo.name | html %] |
| 322 |
([% suploo.count | html %]) |
| 323 |
</option> |
| 324 |
[% END %] |
| 325 |
</select> |
| 326 |
</fieldset> |
| 327 |
<fieldset class="action"> |
| 328 |
<input type="submit" class="btn btn-primary" value="OK" /> |
| 329 |
</fieldset> |
| 330 |
</form> <!-- /#claims --> |
| 331 |
[% END %] |
| 332 |
|
| 241 |
[% MACRO jsinclude BLOCK %] |
333 |
[% MACRO jsinclude BLOCK %] |
| 242 |
[% INCLUDE 'calendar.inc' %] |
334 |
[% INCLUDE 'calendar.inc' %] |
| 243 |
[% INCLUDE 'datatables.inc' %] |
335 |
[% INCLUDE 'datatables.inc' %] |
| 244 |
<script> |
336 |
<script> |
| 245 |
var sTable; |
337 |
var sTable; |
| 246 |
$(document).ready(function() { |
338 |
$(document).ready(function() { |
|
|
339 |
enableSelectedActions(); |
| 247 |
sTable = $("#claimst").dataTable($.extend(true, {}, dataTablesDefaults, { |
340 |
sTable = $("#claimst").dataTable($.extend(true, {}, dataTablesDefaults, { |
| 248 |
"dom": 't', |
341 |
"dom": 't', |
|
|
342 |
"order": [[ 7, "asc" ]], |
| 249 |
"columnDefs": [ |
343 |
"columnDefs": [ |
| 250 |
{ "targets": [ 0 ], "orderable": false, "searchable": false }, |
344 |
{ 'sortable': false, 'targets': [ 'NoSort' ] }, |
| 251 |
{ "type": "anti-the", "targets": [ 'anti-the'] } |
345 |
{ "type": "anti-the", "targets": [ 'anti-the'] } |
| 252 |
], |
346 |
], |
| 253 |
"paginate": false |
347 |
"paginate": false |
| 254 |
})); |
348 |
})); |
| 255 |
sTable.fnAddFilters("filter", "200"); |
349 |
sTable.fnAddFilters("filter", "200"); |
| 256 |
$('#supplierid').change(function() { |
|
|
| 257 |
$('#claims').submit(); |
| 258 |
}); |
| 259 |
|
350 |
|
| 260 |
// Checkboxes : Select All / None |
351 |
// Checkboxes : Select All / None |
| 261 |
$("span.checkall").html("<input type=\"checkbox\" name=\"CheckAll\"> "+_("Check all")+"</input>"); |
352 |
$("span.checkall").html("<input type=\"checkbox\" name=\"CheckAll\"> "+_("Check all")+"</input>"); |
| 262 |
|
353 |
|
| 263 |
$("#CheckAll").click(function() { |
354 |
$("#CheckAll").click(function() { |
| 264 |
$("#claimst tr:visible :checkbox").prop('checked', $("#CheckAll").is(':checked')); |
355 |
$("#claimst tr:visible :checkbox").prop('checked', $("#CheckAll").is(':checked')); |
|
|
356 |
enableSelectedActions(); |
| 265 |
}); |
357 |
}); |
| 266 |
|
358 |
|
| 267 |
// Generates a dynamic link for exporting the selections data as CSV |
359 |
// Generates a dynamic link for exporting the selections data as CSV |
|
Lines 300-307
Link Here
|
| 300 |
$("#filter_claims_form").on("submit",function(){ |
392 |
$("#filter_claims_form").on("submit",function(){ |
| 301 |
return false; |
393 |
return false; |
| 302 |
}); |
394 |
}); |
|
|
395 |
|
| 396 |
$(".select_serial").on("change", function(){ |
| 397 |
enableSelectedActions(); |
| 398 |
}); |
| 303 |
}); |
399 |
}); |
| 304 |
|
400 |
|
|
|
401 |
function enableSelectedActions() { |
| 402 |
var checkedBoxes = $(".select_serial:checked"); |
| 403 |
if ( checkedBoxes.length ) { |
| 404 |
$(".serial_batch_op").prop( "disabled", false ); |
| 405 |
} else { |
| 406 |
$(".serial_batch_op").prop( "disabled", true ); |
| 407 |
} |
| 408 |
} |
| 409 |
|
| 305 |
// Checks if the form can be sent (at least one checkbox must be checked) |
410 |
// Checks if the form can be sent (at least one checkbox must be checked) |
| 306 |
function checkForm() { |
411 |
function checkForm() { |
| 307 |
if ($("input:checked").length == 0) { |
412 |
if ($("input:checked").length == 0) { |
| 308 |
- |
|
|