Bugzilla – Attachment 130328 Details for
Bug 28854
Add ability to create bundles of items for circulation
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 28854: Add 'Remove from bundle' dialogue to details display
Bug-28854-Add-Remove-from-bundle-dialogue-to-detai.patch (text/plain), 12.32 KB, created by
Martin Renvoize (ashimema)
on 2022-02-08 16:54:23 UTC
(
hide
)
Description:
Bug 28854: Add 'Remove from bundle' dialogue to details display
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2022-02-08 16:54:23 UTC
Size:
12.32 KB
patch
obsolete
>From 7938e49c4a35799e1c5c83a03891126a6a6cda7e Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Date: Tue, 30 Nov 2021 09:35:46 +0000 >Subject: [PATCH] Bug 28854: Add 'Remove from bundle' dialogue to details > display > >This patch adds the counterpart of the 'Add to bundle' modal prompt for >adding items to bundles from the catalogue details display. It allows >for scanning barcodes to remove them from a bundle. >--- > .../prog/en/modules/catalogue/detail.tt | 134 ++++++++++++++++-- > 1 file changed, 120 insertions(+), 14 deletions(-) > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >index e813b0563a..3aa04bca72 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >@@ -1037,16 +1037,16 @@ Note that permanent location is a code, and location may be an authval. > [% END %] > > [% IF bundlesEnabled %] >- <div class="modal" id="bundleItemsModal" tabindex="-1" role="dialog" aria-labelledby="bundleItemsLabel"> >- <form id="bundleItemsForm" action=""> >+ <div class="modal" id="addToBundleModal" tabindex="-1" role="dialog" aria-labelledby="addToBundleLabel"> >+ <form id="addToBundleForm" action=""> > <div class="modal-dialog" role="document"> > <div class="modal-content"> > <div class="modal-header"> > <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">Ã</button> >- <h3 id="bundleItemsLabel">Add to bundle</h3> >+ <h3 id="addToBundleLabel">Add to bundle</h3> > </div> > <div class="modal-body"> >- <div id="result"></div> >+ <div id="addResult"></div> > <fieldset class="rows"> > <ol> > <li> >@@ -1065,6 +1065,35 @@ Note that permanent location is a code, and location may be an authval. > </div> > </form> > </div> >+ >+ <div class="modal" id="removeFromBundleModal" tabindex="-1" role="dialog" aria-labelledby="removeFromBundleLabel"> >+ <form id="removeFromBundleForm" action=""> >+ <div class="modal-dialog" role="document"> >+ <div class="modal-content"> >+ <div class="modal-header"> >+ <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">Ã</button> >+ <h3 id="removeFromBundleLabel">Remove from bundle</h3> >+ </div> >+ <div class="modal-body"> >+ <div id="removeResult"></div> >+ <fieldset class="rows"> >+ <ol> >+ <li> >+ <label class="required" for="external_id">Item barcode: </label> >+ <input type="text" id="rm_external_id" name="external_id" required="required"> >+ <span class="required">Required</span> >+ </li> >+ </ol> >+ </fieldset> >+ </div> >+ <div class="modal-footer"> >+ <button type="submit" class="btn btn-default">Submit</button> >+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Close</button> >+ </div> >+ </div> >+ </div> >+ </form> >+ </div> > [% END %] > > [% MACRO jsinclude BLOCK %] >@@ -1384,7 +1413,9 @@ Note that permanent location is a code, and location may be an authval. > function createChild ( row, itemnumber ) { > > // Toolbar >- var bundle_toolbar = $('<div id="toolbar" class="btn-toolbar"><a class="btn btn-default" data-toggle="modal" data-target="#bundleItemsModal" data-item="' + itemnumber + '"><i class="fa fa-plus"></i> Add to bundle</a></div>'); >+ var bundle_toolbar = $('<div id="toolbar" class="btn-toolbar"></div>'); >+ bundle_toolbar.append('<a class="btn btn-default" data-toggle="modal" data-target="#addToBundleModal" data-item="' + itemnumber + '"><i class="fa fa-plus"></i> Add to bundle</a>'); >+ bundle_toolbar.append('<a class="btn btn-default" data-toggle="modal" data-target="#removeFromBundleModal" data-item="' + itemnumber + '"><i class="fa fa-minus"></i> Remove from bundle</a>'); > > // This is the table we'll convert into a DataTable > var bundles_table = $('<table class="display tbundle" data-itemnumber="'+itemnumber+'" id="bundle_table_'+itemnumber+'" width="100%"/>'); >@@ -1510,17 +1541,17 @@ Note that permanent location is a code, and location may be an authval. > > var bundle_changed; > var bundle_form_active; >- $("#bundleItemsModal").on("shown.bs.modal", function(e){ >+ $("#addToBundleModal").on("shown.bs.modal", function(e){ > var button = $(e.relatedTarget); > var item_id = button.data('item'); >- $("#result").replaceWith('<div id="result"></div>'); >- $("#bundleItemsForm").attr('action', '/api/v1/items/' + item_id + '/bundled_items'); >+ $("#addResult").replaceWith('<div id="addResult"></div>'); >+ $("#addToBundleForm").attr('action', '/api/v1/items/' + item_id + '/bundled_items'); > $("#external_id").focus(); > bundle_changed = 0; > bundle_form_active = item_id; > }); > >- $("#bundleItemsForm").submit(function(event) { >+ $("#addToBundleForm").submit(function(event) { > > /* stop form from submitting normally */ > event.preventDefault(); >@@ -1537,7 +1568,7 @@ Note that permanent location is a code, and location may be an authval. > /* Report the results */ > posting.done(function(data) { > var barcode = $('#external_id').val(); >- $('#result').replaceWith('<div id="result" class="alert alert-success">Success: Added '+barcode+'</div>'); >+ $('#addResult').replaceWith('<div id="addResult" class="alert alert-success">Success: Added '+barcode+'</div>'); > $('#external_id').val('').focus(); > bundle_changed = 1; > }); >@@ -1546,18 +1577,18 @@ Note that permanent location is a code, and location may be an authval. > if ( data.status === 409 ) { > var response = data.responseJSON; > if ( response.key === "PRIMARY" ) { >- $('#result').replaceWith('<div id="result" class="alert alert-warning">Warning: Item '+barcode+' already attached</div>'); >+ $('#addResult').replaceWith('<div id="addResult" class="alert alert-warning">Warning: Item '+barcode+' already attached</div>'); > } else { >- $('#result').replaceWith('<div id="result" class="alert alert-danger">Failure: Item '+barcode+' belongs to another bundle</div>'); >+ $('#addResult').replaceWith('<div id="addResult" class="alert alert-danger">Failure: Item '+barcode+' belongs to another bundle</div>'); > } > } else { >- $('#result').replaceWith('<div id="result" class="alert alert-danger">Failure: Check the logs for details</div>'); >+ $('#addResult').replaceWith('<div id="addResult" class="alert alert-danger">Failure: Check the logs for details</div>'); > } > $('#external_id').val('').focus(); > }); > }); > >- $("#bundleItemsModal").on("hidden.bs.modal", function(e){ >+ $("#addToBundleModal").on("hidden.bs.modal", function(e){ > if ( bundle_changed ) { > $('#bundle_table_'+bundle_form_active).DataTable({ 'retrieve': true }).ajax.reload(); > } >@@ -1565,6 +1596,81 @@ Note that permanent location is a code, and location may be an authval. > bundle_changed = 0; > }); > >+ $("#removeFromBundleModal").on("shown.bs.modal", function(e){ >+ var button = $(e.relatedTarget); >+ var item_id = button.data('item'); >+ $("#removeResult").replaceWith('<div id="removeResult"></div>'); >+ $("#removeFromBundleForm").attr('action', '/api/v1/items/' + item_id + '/bundled_items/'); >+ $("#rm_external_id").focus(); >+ bundle_changed = 0; >+ bundle_form_active = item_id; >+ }); >+ >+ $("#removeFromBundleForm").submit(function(event) { >+ >+ /* stop form from submitting normally */ >+ event.preventDefault(); >+ >+ /* get the action attribute from the <form action=""> element */ >+ var $form = $(this), >+ url = $form.attr('action'); >+ >+ var barcode = $('#rm_external_id').val(); >+ >+ /* Fetch itemnumber using rm_external_id */ >+ var itemReq = $.get('/api/v1/items', { q: JSON.stringify({ >+ external_id: barcode >+ }) }, null, "json"); >+ >+ var itemnumber; >+ itemReq.done(function(data) { >+ if (data.length === 1) { >+ itemnumber = data[0].item_id; >+ >+ /* Remove link using fetch itemnumber */ >+ var deleteReq = $.ajax( url + itemnumber, { >+ type : 'DELETE' >+ }); >+ >+ /* Report the results */ >+ deleteReq.done(function(data) { >+ var barcode = $('#rm_external_id').val(); >+ $('#removeResult').replaceWith('<div id="removeResult" class="alert alert-success">'+_("Success: Removed ")+barcode+'</div>'); >+ $('#rm_external_id').val('').focus(); >+ bundle_changed = 1; >+ }); >+ deleteReq.fail(function(data) { >+ var barcode = $('#rm_external_id').val(); >+ if ( data.status === 409 ) { >+ var response = data.responseJSON; >+ if ( response.key === "PRIMARY" ) { >+ $('#removeResult').replaceWith('<div id="removeResult" class="alert alert-warning">Warning: Item '+barcode+' already attached</div>'); >+ } else { >+ $('#removeResult').replaceWith('<div id="removeResult" class="alert alert-danger">Failure: Item '+barcode+' belongs to another bundle</div>'); >+ } >+ } else { >+ $('#removeResult').replaceWith('<div id="removeResult" class="alert alert-danger">Failure: Check the logs for details</div>'); >+ } >+ $('#rm_external_id').val('').focus(); >+ }); >+ } else { >+ $('#removeResult').replaceWith('<div id="removeResult" class="alert alert-danger">'+_("Failed: Barcode matched more than one item ")+barcode+'</div>'); >+ } >+ }); >+ itemReq.fail(function(data) { >+ $('#removeResult').replaceWith('<div id="removeResult" class="alert alert-danger">'+_("Failed: Item not found ")+barcode+'</div>'); >+ $('#rm_external_id').val('').focus(); >+ >+ }); >+ }); >+ >+ $("#removeFromBundleModal").on("hidden.bs.modal", function(e){ >+ if ( bundle_changed ) { >+ $('#bundle_table_'+bundle_form_active).DataTable({ 'retrieve': true }).ajax.reload(); >+ } >+ bundle_form_active = 0; >+ bundle_changed = 0; >+ }); > // End bundle handling > [% END %] > >-- >2.20.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 28854
:
124319
|
124498
|
124616
|
125200
|
125201
|
125202
|
125203
|
125204
|
125205
|
125206
|
126103
|
126104
|
126105
|
126106
|
126107
|
126108
|
126109
|
126110
|
126148
|
126149
|
126150
|
126151
|
126152
|
126153
|
126154
|
126155
|
126166
|
126167
|
126168
|
126169
|
126170
|
126171
|
126172
|
126173
|
127498
|
127499
|
127500
|
127501
|
127502
|
127503
|
127504
|
127505
|
127659
|
127660
|
127661
|
127662
|
127663
|
127664
|
127665
|
127666
|
127829
|
127830
|
127831
|
127832
|
127833
|
127834
|
127835
|
127836
|
127837
|
127838
|
130313
|
130314
|
130315
|
130316
|
130317
|
130318
|
130319
|
130320
|
130321
|
130322
|
130323
|
130324
|
130325
|
130326
|
130327
|
130328
|
130329
|
130330
|
130331
|
130332
|
130456
|
132703
|
132704
|
132705
|
132706
|
132707
|
132708
|
132709
|
132710
|
132711
|
132712
|
132713
|
132714
|
132715
|
132716
|
132717
|
132718
|
132719
|
132720
|
132721
|
132722
|
132723
|
135019
|
135020
|
135021
|
135022
|
135023
|
135024
|
135025
|
135026
|
135027
|
135028
|
135029
|
135030
|
135031
|
135032
|
135033
|
135034
|
135035
|
135036
|
135037
|
136226
|
136227
|
136228
|
136229
|
136230
|
136231
|
136232
|
136233
|
136234
|
136235
|
136236
|
136237
|
136238
|
136239
|
136240
|
136241
|
136242
|
136243
|
136244
|
136249
|
136253
|
136254
|
136264
|
136265
|
136266
|
136267
|
136268
|
136269
|
136270
|
136271
|
136272
|
136273
|
136274
|
136275
|
136276
|
136277
|
136278
|
136279
|
136280
|
136281
|
136282
|
136283
|
136284
|
136285
|
136287
|
136340
|
136341
|
136342
|
136343
|
136344
|
136345
|
136346
|
136347
|
136348
|
136349
|
136350
|
136351
|
136352
|
136353
|
136354
|
136355
|
136356
|
136357
|
136358
|
136359
|
136360
|
136361
|
136362
|
136363
|
136364
|
136365
|
136366
|
136367
|
136368
|
136369
|
136370
|
136371
|
136498
|
136529
|
136530
|
136613
|
136614
|
136615
|
136616
|
136617
|
136618
|
136619
|
136620
|
136621
|
136622
|
136623
|
136624
|
136625
|
136626
|
136627
|
136628
|
136629
|
136630
|
136631
|
136632
|
136633
|
136634
|
136635
|
136636
|
136637
|
136638
|
136639
|
136640
|
136641
|
136642
|
136643
|
136644
|
136645
|
136646
|
136647
|
136648
|
136649
|
136650
|
136651
|
136652
|
136654
|
136655
|
136806
|
136809
|
136811
|
136814
|
136817
|
136821
|
136824
|
136826
|
136829
|
136832
|
136835
|
136838
|
136841
|
136843
|
136846
|
136849
|
136850
|
136851
|
136852
|
136853
|
136854
|
136855
|
136856
|
136857
|
136858
|
136859
|
136860
|
136861
|
136862
|
136863
|
136864
|
136865
|
136866
|
136867
|
136868
|
136869
|
136870
|
136871
|
136872
|
136873
|
136874
|
136875
|
136876
|
136877
|
136905
|
136906
|
136907
|
136908
|
136909
|
136910
|
136911
|
136912
|
136913
|
136914
|
136915
|
136916
|
136917
|
136918
|
136919
|
136920
|
136921
|
136922
|
136923
|
136924
|
136925
|
136926
|
136927
|
136928
|
136929
|
136930
|
136931
|
136932
|
136933
|
136934
|
136935
|
136936
|
136937
|
136938
|
136939
|
136940
|
136941
|
136942
|
136943
|
136944
|
136945
|
136946
|
136947
|
136949
|
136978
|
136979
|
136980
|
136981
|
136982
|
136985
|
136988
|
136989
|
136990
|
136991
|
136992
|
136993
|
136994
|
136995
|
136996
|
136997
|
136998
|
136999
|
137000
|
137001
|
137002
|
137003
|
137004
|
137005
|
137006
|
137007
|
137008
|
137009
|
137010
|
137011
|
137012
|
137013
|
137014
|
137015
|
137016
|
137017
|
137018
|
137019
|
137020
|
137021
|
137022
|
137461
|
137462
|
137463
|
137464
|
137465
|
137466
|
137467
|
137468
|
137469
|
137470
|
137471
|
137472
|
137473
|
137474
|
137475
|
137476
|
137477
|
137478
|
137479
|
137480
|
137481
|
137482
|
137483
|
137484
|
137485
|
137486
|
137487
|
137488
|
137489
|
137490
|
137491
|
137492
|
137493
|
137494
|
137495
|
137496
|
137497
|
137498
|
137499
|
137500
|
137501
|
137503
|
137506
|
137524
|
137525
|
137527
|
137528
|
137529
|
137530
|
137531
|
137532
|
137533
|
137534
|
137535
|
137536
|
137537
|
137538
|
137540
|
137541
|
137542
|
137543
|
137544
|
137545
|
137546
|
137547
|
137548
|
137549
|
137550
|
137551
|
137552
|
137553
|
137554
|
137555
|
137556
|
137557
|
137558
|
137559
|
137560
|
137561
|
137562
|
137563
|
137564
|
137565
|
137566
|
137567
|
137568
|
137569
|
137570
|
137571
|
137684
|
137685
|
139347