diff --git a/app/assets/javascripts/admin/spree/orders/shipments.js.erb b/app/assets/javascripts/admin/spree/orders/shipments.js.erb index 16cce0932d..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,57 +112,21 @@ $(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"); - - $.ajax({ - type: "PUT", - url: url, - data: { shipment: { tracking: tracking } } - }).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(); } - 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); - - $.ajax({ - type: "PUT", - url: url, - data: { note: note } - }).done(function( msg ) { - window.location.reload(); - }).error(function( msg ) { - console.log(msg); - }); - } - - $('[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); }); 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")} diff --git a/app/views/spree/admin/orders/_note.html.haml b/app/views/spree/admin/orders/_note.html.haml index dcbc6841e4..fb46907191 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: '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 55293d5623..e9fcb169de 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 => 'remove' }, :title => Spree.t('delete') 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) diff --git a/spec/system/admin/order_spec.rb b/spec/system/admin/order_spec.rb index 00c80e5870..ee91f1f354 100644 --- a/spec/system/admin/order_spec.rb +++ b/spec/system/admin/order_spec.rb @@ -591,6 +591,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 @@ -605,6 +616,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