From 2f01351ad2230f3c349b754c1602975465de52bd Mon Sep 17 00:00:00 2001 From: binarygit Date: Fri, 15 Jul 2022 11:34:37 +0545 Subject: [PATCH 1/6] Enable users to delete only non-empty tracking info/notes --- app/views/spree/admin/orders/_note.html.haml | 4 +++- app/views/spree/admin/orders/_shipment.html.haml | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/views/spree/admin/orders/_note.html.haml b/app/views/spree/admin/orders/_note.html.haml index dcbc6841e4..e2bbc8faf2 100644 --- a/app/views/spree/admin/orders/_note.html.haml +++ b/app/views/spree/admin/orders/_note.html.haml @@ -21,4 +21,6 @@ %td.actions = link_to '', '', class: 'edit-note icon_link icon-edit no-text with-tip', data: { action: 'edit' }, title: Spree.t('edit') - = link_to '', '', class: 'delete-note icon_link icon-trash no-text with-tip', data: { action: 'delete' }, title: Spree.t('delete') + - if @order.note.present? + = link_to '', '', class: 'delete-note icon_link icon-trash no-text with-tip', data: { action: 'delete' }, title: Spree.t('delete') + diff --git a/app/views/spree/admin/orders/_shipment.html.haml b/app/views/spree/admin/orders/_shipment.html.haml index 55293d5623..593ea77d8c 100644 --- a/app/views/spree/admin/orders/_shipment.html.haml +++ b/app/views/spree/admin/orders/_shipment.html.haml @@ -85,4 +85,5 @@ %td.actions - if can?(:update, shipment) && shipment.can_modify? = link_to '', '', :class => 'edit-tracking icon_link icon-edit no-text with-tip', :data => { :action => 'edit' }, :title => Spree.t('edit') - = link_to '', '', :class => 'delete-tracking icon_link icon-trash no-text with-tip', :data => { 'shipment-number' => shipment.number, :action => 'delete' } + - if shipment.tracking.present? + = link_to '', '', :class => 'delete-tracking icon_link icon-trash no-text with-tip', :data => { 'shipment-number' => shipment.number, :action => 'delete' } From ae2c56b29d739237bff162945c03a58a105038b7 Mon Sep 17 00:00:00 2001 From: binarygit Date: Fri, 15 Jul 2022 14:05:10 +0545 Subject: [PATCH 2/6] Omit tracking info row from shipping email when empty --- app/views/spree/shipment_mailer/shipped_email.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/spree/shipment_mailer/shipped_email.html.haml b/app/views/spree/shipment_mailer/shipped_email.html.haml index 465c61ffea..0796d62b81 100644 --- a/app/views/spree/shipment_mailer/shipped_email.html.haml +++ b/app/views/spree/shipment_mailer/shipped_email.html.haml @@ -14,7 +14,7 @@ = item.variant.options_text %br -- if @shipment.tracking +- if @shipment.tracking.present? %p.lead = t('.track_information', tracking: @shipment.tracking) From 6b042e4a17bb35ea9a1e2c81413dcd1cc7fb8d71 Mon Sep 17 00:00:00 2001 From: binarygit Date: Fri, 15 Jul 2022 14:36:07 +0545 Subject: [PATCH 3/6] Display notes field in admin/orders/new only after an item has been added --- app/views/spree/admin/orders/_form.html.haml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/spree/admin/orders/_form.html.haml b/app/views/spree/admin/orders/_form.html.haml index 4ec49a8d95..94ed0c8f94 100644 --- a/app/views/spree/admin/orders/_form.html.haml +++ b/app/views/spree/admin/orders/_form.html.haml @@ -6,7 +6,8 @@ = render 'spree/admin/orders/insufficient_stock_lines', insufficient_stock_lines: @order.insufficient_stock_lines = render :partial => "spree/admin/orders/shipment", :collection => @order.shipments, :locals => { :order => order } - = render partial: "spree/admin/orders/note", locals: { order: @order } + - if order.line_items.exists? + = render partial: "spree/admin/orders/note", locals: { order: @order } = render :partial => "spree/admin/orders/_form/adjustments", :locals => { :adjustments => @order.line_item_adjustments, :title => t(".line_item_adjustments")} = render :partial => "spree/admin/orders/_form/adjustments", :locals => { :adjustments => order_adjustments_for_display(@order), :title => t(".order_adjustments")} From 1165c997bc7194fa26444cad3781532956535b16 Mon Sep 17 00:00:00 2001 From: binarygit Date: Sat, 16 Jul 2022 09:46:25 +0545 Subject: [PATCH 4/6] Add styles on notes/tracking info when hoving over their delete buttons --- app/views/spree/admin/orders/_note.html.haml | 2 +- app/views/spree/admin/orders/_shipment.html.haml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/spree/admin/orders/_note.html.haml b/app/views/spree/admin/orders/_note.html.haml index e2bbc8faf2..fb46907191 100644 --- a/app/views/spree/admin/orders/_note.html.haml +++ b/app/views/spree/admin/orders/_note.html.haml @@ -22,5 +22,5 @@ %td.actions = link_to '', '', class: 'edit-note icon_link icon-edit no-text with-tip', data: { action: 'edit' }, title: Spree.t('edit') - if @order.note.present? - = link_to '', '', class: 'delete-note icon_link icon-trash no-text with-tip', data: { action: 'delete' }, title: Spree.t('delete') + = link_to '', '', class: 'delete-note icon_link icon-trash no-text with-tip', data: { action: 'remove' }, title: Spree.t('delete') diff --git a/app/views/spree/admin/orders/_shipment.html.haml b/app/views/spree/admin/orders/_shipment.html.haml index 593ea77d8c..e9fcb169de 100644 --- a/app/views/spree/admin/orders/_shipment.html.haml +++ b/app/views/spree/admin/orders/_shipment.html.haml @@ -86,4 +86,4 @@ - if can?(:update, shipment) && shipment.can_modify? = link_to '', '', :class => 'edit-tracking icon_link icon-edit no-text with-tip', :data => { :action => 'edit' }, :title => Spree.t('edit') - if shipment.tracking.present? - = link_to '', '', :class => 'delete-tracking icon_link icon-trash no-text with-tip', :data => { 'shipment-number' => shipment.number, :action => 'delete' } + = link_to '', '', :class => 'delete-tracking icon_link icon-trash no-text with-tip', :data => { 'shipment-number' => shipment.number, :action => 'remove' }, :title => Spree.t('delete') From 97dcd44662f40b109775b23808cbba1867b9a430 Mon Sep 17 00:00:00 2001 From: binarygit Date: Sat, 16 Jul 2022 11:16:42 +0545 Subject: [PATCH 5/6] Display alert box before deleting note/tracking info --- .../admin/spree/orders/shipments.js.erb | 59 +++++++++++++------ spec/system/admin/order_spec.rb | 22 +++++++ 2 files changed, 64 insertions(+), 17 deletions(-) diff --git a/app/assets/javascripts/admin/spree/orders/shipments.js.erb b/app/assets/javascripts/admin/spree/orders/shipments.js.erb index 16cce0932d..aba5848c9d 100644 --- a/app/assets/javascripts/admin/spree/orders/shipments.js.erb +++ b/app/assets/javascripts/admin/spree/orders/shipments.js.erb @@ -69,15 +69,19 @@ $(document).ready(function() { var tracking = '' var url = Spree.url( Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipment_number + ".json"); - $.ajax({ - type: "PUT", - url: url, - data: { shipment: { tracking: tracking } } - }).done(function( msg ) { - window.location.reload(); - }).error(function( msg ) { - console.log(msg); - }); + displayDeleteAlert(function(choice) { + if (choice) { + $.ajax({ + type: "PUT", + url: url, + data: { shipment: { tracking: tracking } } + }).done(function( msg ) { + window.location.reload(); + }).error(function( msg ) { + console.log(msg); + }); + } + }); } handle_note_save = function(){ @@ -100,16 +104,37 @@ $(document).ready(function() { var link = $(this); var note = '' var url = Spree.url( Spree.routes.orders_api + "/" + order_number); + displayDeleteAlert(function(choice) { + if (choice) { + $.ajax({ + type: "PUT", + url: url, + data: { note: note } + }).done(function( msg ) { + window.location.reload(); + }).error(function( msg ) { + console.log(msg); + }); + } + }); + return false; + } - $.ajax({ - type: "PUT", - url: url, - data: { note: note } - }).done(function( msg ) { - window.location.reload(); - }).error(function( msg ) { - console.log(msg); + displayDeleteAlert = function(callback) { + i18nKey = "are_you_sure"; + $('#custom-confirm .message').html( + ` ${t(i18nKey)} +
+
`); + $('#custom-confirm button.confirm').unbind( "click" ).click(() => { + $('#custom-confirm').hide(); + callback(true); }); + $('#custom-confirm button.cancel').click(() => { + $('#custom-confirm').hide(); + callback(false) + }); + $('#custom-confirm').show(); } $('[data-hook=admin_order_edit_form] a.save-tracking').click(handle_tracking_save); diff --git a/spec/system/admin/order_spec.rb b/spec/system/admin/order_spec.rb index 50bcfe73ff..12639d1df7 100644 --- a/spec/system/admin/order_spec.rb +++ b/spec/system/admin/order_spec.rb @@ -584,6 +584,17 @@ describe ' expect(page).to have_content test_tracking_number find('.delete-tracking.icon-trash').click + # Cancel Deletion + # Check if the alert box shows and after clicking cancel + # the alert box vanishes and tracking num is still present + expect(page).to have_content 'Are you sure?' + find('.cancel').click + expect(page).to_not have_content 'Are you sure?' + expect(page).to have_content test_tracking_number + + find('.delete-tracking.icon-trash').click + expect(page).to have_content 'Are you sure?' + find('.confirm').click expect(page).to_not have_content test_tracking_number end @@ -598,6 +609,17 @@ describe ' expect(page).to have_content test_note find('.delete-note.icon-trash').click + # Cancel Deletion + # Check if the alert box shows and after clicking cancel + # the alert box vanishes and note is still present + expect(page).to have_content 'Are you sure?' + find('.cancel').click + expect(page).to_not have_content 'Are you sure?' + expect(page).to have_content test_note + + find('.delete-note.icon-trash').click + expect(page).to have_content 'Are you sure?' + find('.confirm').click expect(page).to_not have_content test_note end From 0599acbcb8fa3978c622b02df0b9f31bcad10885 Mon Sep 17 00:00:00 2001 From: binarygit Date: Sat, 16 Jul 2022 22:12:55 +0545 Subject: [PATCH 6/6] Refactor shipments.js --- .../admin/spree/orders/shipments.js.erb | 124 ++++++++---------- 1 file changed, 56 insertions(+), 68 deletions(-) diff --git a/app/assets/javascripts/admin/spree/orders/shipments.js.erb b/app/assets/javascripts/admin/spree/orders/shipments.js.erb index aba5848c9d..4a62d94375 100644 --- a/app/assets/javascripts/admin/spree/orders/shipments.js.erb +++ b/app/assets/javascripts/admin/spree/orders/shipments.js.erb @@ -39,23 +39,72 @@ $(document).ready(function() { } $('[data-hook=admin_order_edit_form] a.save-method').click(handle_shipping_method_save); - //handle tracking edit click + //handle tracking info edit/delete + + // Show the input field to edit the tracking info + // And hide the input field when cancel is clicked $('a.edit-tracking').click(toggleTrackingEdit); $('a.cancel-tracking').click(toggleTrackingEdit); + saveTrackingInfo = function(){ + let shipmentNumber = $(this).data('shipment-number'); + let tracking = document.getElementById('tracking').value + + makeApiCall(trackingUrl(shipmentNumber), { shipment: { tracking: tracking } } ) + } + + deleteTrackingInfo = function(){ + let shipmentNumber = $(this).data('shipment-number'); + let tracking = '' + + confirmDelete(trackingUrl(shipmentNumber), { shipment: { tracking: tracking } }) + } + + trackingUrl = function(shipmentNumber){ + return Spree.url( Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipmentNumber + ".json"); + } + + $('[data-hook=admin_order_edit_form] a.save-tracking').click(saveTrackingInfo); + $('[data-hook=admin_order_edit_form] a.delete-tracking').click(deleteTrackingInfo); + + // handle note edit/delete + + // Show the input field to edit the note + // And hide the input field when cancel is clicked $('a.edit-note.icon-edit').click(toggleNoteEdit); $('a.cancel-note').click(toggleNoteEdit); - handle_tracking_save = function(){ - var link = $(this); - var shipment_number = link.data('shipment-number'); - var tracking = link.parents('tbody').find('input#tracking').val(); - var url = Spree.url( Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipment_number + ".json"); + saveNote = function(){ + let note = document.getElementById('note').value + makeApiCall(getNoteUrl(), { note: note }) + } + deleteNote = function(){ + let note = '' + confirmDelete(getNoteUrl(), { note: note }) + } + + getNoteUrl = function(){ + return Spree.url( Spree.routes.orders_api + "/" + order_number); + } + + confirmDelete = function(url, params){ + displayDeleteAlert(function(confirmation) { + if (confirmation) { + makeApiCall(url, params) + } + }); + } + + $('[data-hook=admin_order_edit_form] a.save-note').click(saveNote); + $('[data-hook=admin_order_edit_form] a.delete-note').click(deleteNote); + + // Makes API call for notes/tracking info + makeApiCall = function(url, params) { $.ajax({ type: "PUT", url: url, - data: { shipment: { tracking: tracking } } + data: params }).done(function( msg ) { window.location.reload(); }).error(function( msg ) { @@ -63,63 +112,6 @@ $(document).ready(function() { }); } - handle_tracking_delete = function(){ - var link = $(this); - var shipment_number = link.data('shipment-number'); - var tracking = '' - var url = Spree.url( Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipment_number + ".json"); - - displayDeleteAlert(function(choice) { - if (choice) { - $.ajax({ - type: "PUT", - url: url, - data: { shipment: { tracking: tracking } } - }).done(function( msg ) { - window.location.reload(); - }).error(function( msg ) { - console.log(msg); - }); - } - }); - } - - handle_note_save = function(){ - var link = $(this); - var note = link.parents('tbody').find('#note').val(); - var url = Spree.url( Spree.routes.orders_api + "/" + order_number); - - $.ajax({ - type: "PUT", - url: url, - data: { note: note } - }).done(function( msg ) { - window.location.reload(); - }).error(function( msg ) { - console.log(msg); - }); - } - - handle_note_delete = function(){ - var link = $(this); - var note = '' - var url = Spree.url( Spree.routes.orders_api + "/" + order_number); - displayDeleteAlert(function(choice) { - if (choice) { - $.ajax({ - type: "PUT", - url: url, - data: { note: note } - }).done(function( msg ) { - window.location.reload(); - }).error(function( msg ) { - console.log(msg); - }); - } - }); - return false; - } - displayDeleteAlert = function(callback) { i18nKey = "are_you_sure"; $('#custom-confirm .message').html( @@ -137,8 +129,4 @@ $(document).ready(function() { $('#custom-confirm').show(); } - $('[data-hook=admin_order_edit_form] a.save-tracking').click(handle_tracking_save); - $('[data-hook=admin_order_edit_form] a.delete-tracking').click(handle_tracking_delete); - $('[data-hook=admin_order_edit_form] a.save-note').click(handle_note_save); - $('[data-hook=admin_order_edit_form] a.delete-note').click(handle_note_delete); });