From 95a51159d7305653589cba59e76cbe5693c3b9de Mon Sep 17 00:00:00 2001 From: binarygit Date: Sun, 5 Nov 2023 14:34:58 +0545 Subject: [PATCH 01/14] send-shipment-email-optionally --- app/models/spree/order.rb | 3 ++- app/models/spree/shipment.rb | 2 +- app/reflexes/admin/orders_reflex.rb | 4 ++- .../admin/shared/_tooltip_button.html.haml | 5 +++- .../spree/admin/orders/_table_row.html.haml | 12 ++++++++- spec/models/spree/shipment_spec.rb | 3 ++- spec/system/admin/orders_spec.rb | 25 ++++++++++++++++++- 7 files changed, 47 insertions(+), 7 deletions(-) diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index 238e935e5d..f4dc90b575 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -27,7 +27,8 @@ module Spree go_to_state :complete end - attr_accessor :use_billing, :checkout_processing, :save_bill_address, :save_ship_address + attr_accessor :use_billing, :checkout_processing, :save_bill_address, + :save_ship_address, :send_shipment_email token_resource diff --git a/app/models/spree/shipment.rb b/app/models/spree/shipment.rb index 476658b13a..0b060c727c 100644 --- a/app/models/spree/shipment.rb +++ b/app/models/spree/shipment.rb @@ -346,7 +346,7 @@ module Spree def after_ship inventory_units.each(&:ship!) fee_adjustment.finalize! - send_shipped_email + send_shipped_email if order.send_shipment_email touch :shipped_at update_order_shipment_state end diff --git a/app/reflexes/admin/orders_reflex.rb b/app/reflexes/admin/orders_reflex.rb index 765438d7cc..540ea892e4 100644 --- a/app/reflexes/admin/orders_reflex.rb +++ b/app/reflexes/admin/orders_reflex.rb @@ -17,6 +17,7 @@ module Admin end def ship + @order.send_shipment_email = true if params[:send_shipment_email] if @order.ship morph dom_id(@order), render(partial: "spree/admin/orders/table_row", locals: { order: @order.reload, success: true }) @@ -83,7 +84,8 @@ module Admin private def authorize_order - @order = Spree::Order.find_by(id: element.dataset[:id]) + id = element.dataset[:id] || params[:id] + @order = Spree::Order.find_by(id:) authorize! :admin, @order end diff --git a/app/views/admin/shared/_tooltip_button.html.haml b/app/views/admin/shared/_tooltip_button.html.haml index 06b37688cd..9d7d0979bb 100644 --- a/app/views/admin/shared/_tooltip_button.html.haml +++ b/app/views/admin/shared/_tooltip_button.html.haml @@ -1,5 +1,8 @@ %div{ "data-controller": "tooltip" } - %button{class: button_class, "data-reflex": button_reflex, "data-id": reflex_data_id, "data-tooltip-target": "element" } + - if local_assigns[:shipment] + %button{class: button_class,"data-controller": "modal-link", "data-action": "click->modal-link#open", "data-modal-link-target-value": "ship_order", "data-id": reflex_data_id, "data-tooltip-target": "element" } + - else + %button{class: button_class, "data-reflex": button_reflex, "data-id": reflex_data_id, "data-tooltip-target": "element" } .tooltip-container .tooltip{"data-tooltip-target": "tooltip"} = sanitize tooltip_text diff --git a/app/views/spree/admin/orders/_table_row.html.haml b/app/views/spree/admin/orders/_table_row.html.haml index 9c0ffb5e17..5ee873bda5 100644 --- a/app/views/spree/admin/orders/_table_row.html.haml +++ b/app/views/spree/admin/orders/_table_row.html.haml @@ -47,6 +47,16 @@ %i.success.icon-ok-sign{"data-controller": "ephemeral"} = render partial: 'admin/shared/tooltip', locals: {link_class: "icon_link with-tip icon-edit no-text" ,link: edit_admin_order_path(order), link_text: "", tooltip_text: t('spree.admin.orders.index.edit')} - if order.ready_to_ship? - = render partial: 'admin/shared/tooltip_button', locals: {button_class: "icon-road icon_link with-tip no-text", button_reflex: "click->Admin::OrdersReflex#ship", reflex_data_id: order.id.to_s, tooltip_text: t('spree.admin.orders.index.ship')} + %form + = render ConfirmModalComponent.new(id: "ship_order", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do + %div{class: "margin-bottom-30"} + %p This will mark the order as Shipped + %div{class: "margin-bottom-30"} + = hidden_field_tag :id, order.id + = check_box_tag :send_shipment_email + = label_tag :send_shipment_email, "Send email confirmation to customer" + + = render partial: 'admin/shared/tooltip_button', locals: {button_class: "icon-road icon_link with-tip no-text", reflex_data_id: order.id.to_s, tooltip_text: t('spree.admin.orders.index.ship'), shipment: true} + - if order.payment_required? && order.pending_payments.reject(&:requires_authorization?).any? = render partial: 'admin/shared/tooltip_button', locals: {button_class: "icon-capture icon_link no-text", button_reflex: "click->Admin::OrdersReflex#capture", reflex_data_id: order.id.to_s, tooltip_text: t('spree.admin.orders.index.capture')} diff --git a/spec/models/spree/shipment_spec.rb b/spec/models/spree/shipment_spec.rb index 114fb6d8ca..8a3d4bd195 100644 --- a/spec/models/spree/shipment_spec.rb +++ b/spec/models/spree/shipment_spec.rb @@ -353,7 +353,8 @@ describe Spree::Shipment do expect(shipment.shipped_at).to_not be_nil end - it "should send a shipment email" do + it "should send a shipment email if order.send_shipment_email is true" do + shipment.order.send_shipment_email = true mail_message = double 'Mail::Message' shipment_id = nil expect(Spree::ShipmentMailer).to receive(:shipped_email) { |*args| diff --git a/spec/system/admin/orders_spec.rb b/spec/system/admin/orders_spec.rb index 9883469106..fa2014e185 100644 --- a/spec/system/admin/orders_spec.rb +++ b/spec/system/admin/orders_spec.rb @@ -746,13 +746,36 @@ describe ' expect(page).to have_current_path spree.admin_orders_path end - it "ship order from the orders index page" do + it "ship order from the orders index page and send email" do order.payments.first.capture! login_as_admin visit spree.admin_orders_path page.find("button.icon-road").click + within ".reveal-modal" do + check 'Send email confirmation to customer' + expect { + find_button("Confirm").click + }.to enqueue_job(ActionMailer::MailDeliveryJob).exactly(:once) + end + expect(page).to have_css "i.success" + expect(order.reload.shipments.any?(&:shipped?)).to be true + expect(order.shipment_state).to eq("shipped") + end + + it "ship order from the orders index page and do not send email" do + order.payments.first.capture! + login_as_admin + visit spree.admin_orders_path + + page.find("button.icon-road").click + + within ".reveal-modal" do + expect { + find_button("Confirm").click + }.not_to enqueue_job(ActionMailer::MailDeliveryJob) + end expect(page).to have_css "i.success" expect(order.reload.shipments.any?(&:shipped?)).to be true expect(order.shipment_state).to eq("shipped") From 5e45d3b8771572b3e2add9da32bcdc8d13d7eb40 Mon Sep 17 00:00:00 2001 From: binarygit Date: Mon, 13 Nov 2023 14:30:48 +0545 Subject: [PATCH 02/14] send shipment email optionally from orders#edit page --- app/reflexes/admin/orders_reflex.rb | 6 ++++++ app/views/spree/admin/orders/_shipment.html.haml | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/reflexes/admin/orders_reflex.rb b/app/reflexes/admin/orders_reflex.rb index 540ea892e4..cbb3816e64 100644 --- a/app/reflexes/admin/orders_reflex.rb +++ b/app/reflexes/admin/orders_reflex.rb @@ -19,6 +19,8 @@ module Admin def ship @order.send_shipment_email = true if params[:send_shipment_email] if @order.ship + return set_param_for_controller if request.url.match?('edit') + morph dom_id(@order), render(partial: "spree/admin/orders/table_row", locals: { order: @order.reload, success: true }) else @@ -98,5 +100,9 @@ module Admin def editable_orders Permissions::Order.new(current_user).editable_orders end + + def set_param_for_controller + params[:id] = @order.number + end end end diff --git a/app/views/spree/admin/orders/_shipment.html.haml b/app/views/spree/admin/orders/_shipment.html.haml index f28ef2740f..43a342f912 100644 --- a/app/views/spree/admin/orders/_shipment.html.haml +++ b/app/views/spree/admin/orders/_shipment.html.haml @@ -8,7 +8,16 @@ = Spree.t("shipment_states.#{shipment.state}") - if shipment.ready? and can? :update, shipment = "-" - = link_to t(:ship), '#', :class => 'ship button icon-arrow-right', :data => { 'shipment-number' => shipment.number } + %button{"class": "ship button icon-arrow-right","data-controller": "modal-link", + "data-action": "click->modal-link#open", "data-modal-link-target-value": "ship_order" }= t(:ship) + %form + = render ConfirmModalComponent.new(id: "ship_order", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do + %div{class: "margin-bottom-30"} + %p This will mark the order as Shipped + %div{class: "margin-bottom-30"} + = hidden_field_tag :id, order.id + = check_box_tag :send_shipment_email + = label_tag :send_shipment_email, "Send email confirmation to customer" %table.stock-contents.index %colgroup From 99f4c4705f719d128d3314a01c4b0ce8e368cd0d Mon Sep 17 00:00:00 2001 From: binarygit Date: Mon, 13 Nov 2023 15:06:31 +0545 Subject: [PATCH 03/14] Remove redundant function --- .../admin/spree/orders/shipments.js.erb | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/app/assets/javascripts/admin/spree/orders/shipments.js.erb b/app/assets/javascripts/admin/spree/orders/shipments.js.erb index 322a648683..f28cbeeee8 100644 --- a/app/assets/javascripts/admin/spree/orders/shipments.js.erb +++ b/app/assets/javascripts/admin/spree/orders/shipments.js.erb @@ -1,22 +1,6 @@ // Shipments AJAX API $(document).ready(function() { - - handle_ship_click = function(){ - var link = $(this); - var shipment_number = link.data('shipment-number'); - var url = Spree.url( Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipment_number + "/ship.json"); - $.ajax({ - type: "PUT", - url: url - }).done(function( msg ) { - window.location.reload(); - }).error(function( msg ) { - console.log(msg); - }); - } - $('.admin-order-edit-form a.ship').click(handle_ship_click); - //handle shipping method edit click $('a.edit-method').click(toggleMethodEdit); $('a.cancel-method').click(toggleMethodEdit); From 5fe246e739f1f9c3e8c629d779f411798c2fa97a Mon Sep 17 00:00:00 2001 From: binarygit Date: Tue, 28 Nov 2023 08:44:03 +0545 Subject: [PATCH 04/14] Add translations --- app/views/spree/admin/orders/_shipment.html.haml | 4 ++-- app/views/spree/admin/orders/_table_row.html.haml | 4 ++-- config/locales/en.yml | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/views/spree/admin/orders/_shipment.html.haml b/app/views/spree/admin/orders/_shipment.html.haml index 43a342f912..30b478222a 100644 --- a/app/views/spree/admin/orders/_shipment.html.haml +++ b/app/views/spree/admin/orders/_shipment.html.haml @@ -13,11 +13,11 @@ %form = render ConfirmModalComponent.new(id: "ship_order", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do %div{class: "margin-bottom-30"} - %p This will mark the order as Shipped + %p= t('.mark_as_shipped_message') %div{class: "margin-bottom-30"} = hidden_field_tag :id, order.id = check_box_tag :send_shipment_email - = label_tag :send_shipment_email, "Send email confirmation to customer" + = label_tag :send_shipment_email, t('.mark_as_shipped_label_message') %table.stock-contents.index %colgroup diff --git a/app/views/spree/admin/orders/_table_row.html.haml b/app/views/spree/admin/orders/_table_row.html.haml index 5ee873bda5..7fc1ff396e 100644 --- a/app/views/spree/admin/orders/_table_row.html.haml +++ b/app/views/spree/admin/orders/_table_row.html.haml @@ -50,11 +50,11 @@ %form = render ConfirmModalComponent.new(id: "ship_order", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do %div{class: "margin-bottom-30"} - %p This will mark the order as Shipped + %p= t('spree.admin.orders.shipment.mark_as_shipped_message') %div{class: "margin-bottom-30"} = hidden_field_tag :id, order.id = check_box_tag :send_shipment_email - = label_tag :send_shipment_email, "Send email confirmation to customer" + = label_tag :send_shipment_email, t('spree.admin.orders.shipment.mark_as_shipped_label_message') = render partial: 'admin/shared/tooltip_button', locals: {button_class: "icon-road icon_link with-tip no-text", reflex_data_id: order.id.to_s, tooltip_text: t('spree.admin.orders.index.ship'), shipment: true} diff --git a/config/locales/en.yml b/config/locales/en.yml index 3648158430..9907fd8b7b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -4177,6 +4177,9 @@ See the %{link} to find out more about %{sitename}'s features and to start using add_product: cannot_add_item_to_canceled_order: "Cannot add item to canceled order" include_out_of_stock_variants: "Include variants with no available stock" + shipment: + mark_as_shipped_message: "This will mark the order as Shipped" + mark_as_shipped_label_message: "Send email confirmation to customer" index: listing_orders: "Listing Orders" new_order: "New Order" From aa7a4fb5a287b190d8684322662443483b3d748e Mon Sep 17 00:00:00 2001 From: binarygit Date: Sat, 9 Dec 2023 14:33:10 +0545 Subject: [PATCH 05/14] Send shipment email by default --- app/models/spree/order.rb | 12 +++++++++++- app/reflexes/admin/orders_reflex.rb | 2 +- app/views/spree/admin/orders/_table_row.html.haml | 2 +- spec/system/admin/orders_spec.rb | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index f4dc90b575..a90b6a37df 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -28,7 +28,7 @@ module Spree end attr_accessor :use_billing, :checkout_processing, :save_bill_address, - :save_ship_address, :send_shipment_email + :save_ship_address token_resource @@ -617,6 +617,16 @@ module Spree state.in?(["payment", "confirmation"]) end + def send_shipment_email + return true if @send_shipment_email.nil? + + @send_shipment_email + end + + def send_shipment_email=(val) + @send_shipment_email = val + end + private def reapply_tax_on_changed_address diff --git a/app/reflexes/admin/orders_reflex.rb b/app/reflexes/admin/orders_reflex.rb index cbb3816e64..2ed6b60c7f 100644 --- a/app/reflexes/admin/orders_reflex.rb +++ b/app/reflexes/admin/orders_reflex.rb @@ -17,7 +17,7 @@ module Admin end def ship - @order.send_shipment_email = true if params[:send_shipment_email] + @order.send_shipment_email = false unless params[:send_shipment_email] if @order.ship return set_param_for_controller if request.url.match?('edit') diff --git a/app/views/spree/admin/orders/_table_row.html.haml b/app/views/spree/admin/orders/_table_row.html.haml index 7fc1ff396e..9c89e1ac5f 100644 --- a/app/views/spree/admin/orders/_table_row.html.haml +++ b/app/views/spree/admin/orders/_table_row.html.haml @@ -53,7 +53,7 @@ %p= t('spree.admin.orders.shipment.mark_as_shipped_message') %div{class: "margin-bottom-30"} = hidden_field_tag :id, order.id - = check_box_tag :send_shipment_email + = check_box_tag :send_shipment_email, "1", true = label_tag :send_shipment_email, t('spree.admin.orders.shipment.mark_as_shipped_label_message') = render partial: 'admin/shared/tooltip_button', locals: {button_class: "icon-road icon_link with-tip no-text", reflex_data_id: order.id.to_s, tooltip_text: t('spree.admin.orders.index.ship'), shipment: true} diff --git a/spec/system/admin/orders_spec.rb b/spec/system/admin/orders_spec.rb index fa2014e185..cf329fe3e1 100644 --- a/spec/system/admin/orders_spec.rb +++ b/spec/system/admin/orders_spec.rb @@ -754,7 +754,6 @@ describe ' page.find("button.icon-road").click within ".reveal-modal" do - check 'Send email confirmation to customer' expect { find_button("Confirm").click }.to enqueue_job(ActionMailer::MailDeliveryJob).exactly(:once) @@ -772,6 +771,7 @@ describe ' page.find("button.icon-road").click within ".reveal-modal" do + uncheck 'Send email confirmation to customer' expect { find_button("Confirm").click }.not_to enqueue_job(ActionMailer::MailDeliveryJob) From e83fd5bd83e20c9b6e25d66000cca83f125c9b68 Mon Sep 17 00:00:00 2001 From: binarygit Date: Sat, 9 Dec 2023 15:28:16 +0545 Subject: [PATCH 06/14] Create ShipOrder component --- app/components/ship_order_component.html.haml | 7 +++++++ app/components/ship_order_component.rb | 7 +++++++ app/views/spree/admin/orders/_shipment.html.haml | 8 +------- app/views/spree/admin/orders/_table_row.html.haml | 9 +-------- 4 files changed, 16 insertions(+), 15 deletions(-) create mode 100644 app/components/ship_order_component.html.haml create mode 100644 app/components/ship_order_component.rb diff --git a/app/components/ship_order_component.html.haml b/app/components/ship_order_component.html.haml new file mode 100644 index 0000000000..47dbb70d8c --- /dev/null +++ b/app/components/ship_order_component.html.haml @@ -0,0 +1,7 @@ += render ConfirmModalComponent.new(id: "ship_order", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do + %div{class: "margin-bottom-30"} + %p= t('spree.admin.orders.shipment.mark_as_shipped_message') + %div{class: "margin-bottom-30"} + = hidden_field_tag :id, @order.id + = check_box_tag :send_shipment_email, "1", true + = label_tag :send_shipment_email, t('spree.admin.orders.shipment.mark_as_shipped_label_message') diff --git a/app/components/ship_order_component.rb b/app/components/ship_order_component.rb new file mode 100644 index 0000000000..89f500afcb --- /dev/null +++ b/app/components/ship_order_component.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class ShipOrderComponent < ViewComponent::Base + def initialize(order:) + @order = order + end +end diff --git a/app/views/spree/admin/orders/_shipment.html.haml b/app/views/spree/admin/orders/_shipment.html.haml index 30b478222a..5dc8b6b902 100644 --- a/app/views/spree/admin/orders/_shipment.html.haml +++ b/app/views/spree/admin/orders/_shipment.html.haml @@ -11,13 +11,7 @@ %button{"class": "ship button icon-arrow-right","data-controller": "modal-link", "data-action": "click->modal-link#open", "data-modal-link-target-value": "ship_order" }= t(:ship) %form - = render ConfirmModalComponent.new(id: "ship_order", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do - %div{class: "margin-bottom-30"} - %p= t('.mark_as_shipped_message') - %div{class: "margin-bottom-30"} - = hidden_field_tag :id, order.id - = check_box_tag :send_shipment_email - = label_tag :send_shipment_email, t('.mark_as_shipped_label_message') + = render ShipOrderComponent.new(order: order) %table.stock-contents.index %colgroup diff --git a/app/views/spree/admin/orders/_table_row.html.haml b/app/views/spree/admin/orders/_table_row.html.haml index 9c89e1ac5f..cb0b579391 100644 --- a/app/views/spree/admin/orders/_table_row.html.haml +++ b/app/views/spree/admin/orders/_table_row.html.haml @@ -48,14 +48,7 @@ = render partial: 'admin/shared/tooltip', locals: {link_class: "icon_link with-tip icon-edit no-text" ,link: edit_admin_order_path(order), link_text: "", tooltip_text: t('spree.admin.orders.index.edit')} - if order.ready_to_ship? %form - = render ConfirmModalComponent.new(id: "ship_order", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do - %div{class: "margin-bottom-30"} - %p= t('spree.admin.orders.shipment.mark_as_shipped_message') - %div{class: "margin-bottom-30"} - = hidden_field_tag :id, order.id - = check_box_tag :send_shipment_email, "1", true - = label_tag :send_shipment_email, t('spree.admin.orders.shipment.mark_as_shipped_label_message') - + = render ShipOrderComponent.new(order: order) = render partial: 'admin/shared/tooltip_button', locals: {button_class: "icon-road icon_link with-tip no-text", reflex_data_id: order.id.to_s, tooltip_text: t('spree.admin.orders.index.ship'), shipment: true} - if order.payment_required? && order.pending_payments.reject(&:requires_authorization?).any? From 267e7493691261393e79df8631113c105aa42c70 Mon Sep 17 00:00:00 2001 From: binarygit Date: Sat, 9 Dec 2023 16:33:59 +0545 Subject: [PATCH 07/14] Show same dialog box when shipping order through the actions dropdown --- app/helpers/spree/admin/orders_helper.rb | 5 ++--- .../spree/admin/shared/_order_links.html.haml | 14 ++++++++++---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/helpers/spree/admin/orders_helper.rb b/app/helpers/spree/admin/orders_helper.rb index 700b6bdcb4..5dd95ebf57 100644 --- a/app/helpers/spree/admin/orders_helper.rb +++ b/app/helpers/spree/admin/orders_helper.rb @@ -95,10 +95,9 @@ module Spree def ship_order_link { name: t(:ship_order), - url: spree.fire_admin_order_path(@order, e: 'ship'), - method: 'put', + url: '#', icon: 'icon-truck', - confirm: t(:are_you_sure) } + } end def cancel_order_link diff --git a/app/views/spree/admin/shared/_order_links.html.haml b/app/views/spree/admin/shared/_order_links.html.haml index 6afd99bac2..8b1f1a0851 100644 --- a/app/views/spree/admin/shared/_order_links.html.haml +++ b/app/views/spree/admin/shared/_order_links.html.haml @@ -6,9 +6,15 @@ %i{ "data-dropdown-target": "arrow", "data-expanded-class": "icon-caret-up", "data-collapsed-class": "icon-caret-down" } %div.menu{"data-dropdown-target": "menu"} - order_links(@order).each do |link| - %a.menu_item{ href: link[:url], target: link[:target] || "_self", data: { method: link[:method], "ujs-navigate": link[:method] ? "false" : "undefined", confirm: link[:confirm] } } - %span - %i{ class: link[:icon] } - %span=link[:name] + - if link[:name] == t(:ship_order) + %a.menu_item{ href: link[:url], target: link[:target] || "_self", data: { "modal-link-target-value": "ship_order", "action": "click->modal-link#open", "controller": "modal-link" } } + %span + %i{ class: link[:icon] } + %span=link[:name] + - else + %a.menu_item{ href: link[:url], target: link[:target] || "_self", data: { method: link[:method], "ujs-navigate": link[:method] ? "false" : "undefined", confirm: link[:confirm] } } + %span + %i{ class: link[:icon] } + %span=link[:name] = render 'spree/admin/shared/custom-confirm' From 36c5d7c5eecead3d511eaf633926997170b7d30b Mon Sep 17 00:00:00 2001 From: binarygit Date: Sat, 9 Dec 2023 16:55:20 +0545 Subject: [PATCH 08/14] Change displayed message --- app/components/ship_order_component.html.haml | 2 +- config/locales/en.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/components/ship_order_component.html.haml b/app/components/ship_order_component.html.haml index 47dbb70d8c..1fea356be1 100644 --- a/app/components/ship_order_component.html.haml +++ b/app/components/ship_order_component.html.haml @@ -1,6 +1,6 @@ = render ConfirmModalComponent.new(id: "ship_order", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do %div{class: "margin-bottom-30"} - %p= t('spree.admin.orders.shipment.mark_as_shipped_message') + %p= t('spree.admin.orders.shipment.mark_as_shipped_message').html_safe %div{class: "margin-bottom-30"} = hidden_field_tag :id, @order.id = check_box_tag :send_shipment_email, "1", true diff --git a/config/locales/en.yml b/config/locales/en.yml index 9907fd8b7b..dc3b97434b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -4178,8 +4178,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using cannot_add_item_to_canceled_order: "Cannot add item to canceled order" include_out_of_stock_variants: "Include variants with no available stock" shipment: - mark_as_shipped_message: "This will mark the order as Shipped" - mark_as_shipped_label_message: "Send email confirmation to customer" + mark_as_shipped_message: "This will mark the order as Shipped.
Are you sure you want to proceed?" + mark_as_shipped_label_message: "Send a shipment/pick up notification email to the customer." index: listing_orders: "Listing Orders" new_order: "New Order" From 75ca1dddf13497fc0d59a5165c5274705047a69f Mon Sep 17 00:00:00 2001 From: binarygit Date: Wed, 20 Dec 2023 19:52:39 +0545 Subject: [PATCH 09/14] Fix tests and rubocop warnings --- app/helpers/spree/admin/orders_helper.rb | 3 +-- app/models/spree/order.rb | 5 +---- spec/system/admin/orders_spec.rb | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/app/helpers/spree/admin/orders_helper.rb b/app/helpers/spree/admin/orders_helper.rb index 5dd95ebf57..6937e2990d 100644 --- a/app/helpers/spree/admin/orders_helper.rb +++ b/app/helpers/spree/admin/orders_helper.rb @@ -96,8 +96,7 @@ module Spree def ship_order_link { name: t(:ship_order), url: '#', - icon: 'icon-truck', - } + icon: 'icon-truck' } end def cancel_order_link diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index a90b6a37df..1ab58d530c 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -29,6 +29,7 @@ module Spree attr_accessor :use_billing, :checkout_processing, :save_bill_address, :save_ship_address + attr_writer :send_shipment_email token_resource @@ -623,10 +624,6 @@ module Spree @send_shipment_email end - def send_shipment_email=(val) - @send_shipment_email = val - end - private def reapply_tax_on_changed_address diff --git a/spec/system/admin/orders_spec.rb b/spec/system/admin/orders_spec.rb index cf329fe3e1..41858b9e1e 100644 --- a/spec/system/admin/orders_spec.rb +++ b/spec/system/admin/orders_spec.rb @@ -771,7 +771,7 @@ describe ' page.find("button.icon-road").click within ".reveal-modal" do - uncheck 'Send email confirmation to customer' + uncheck 'Send a shipment/pick up notification email to the customer.' expect { find_button("Confirm").click }.not_to enqueue_job(ActionMailer::MailDeliveryJob) From 6e00a344949f9879eabacbc9243e43d596ea1ad3 Mon Sep 17 00:00:00 2001 From: binarygit Date: Fri, 22 Dec 2023 21:56:08 +0545 Subject: [PATCH 10/14] Use transaltion with HTML in it by adding html suffix --- app/components/ship_order_component.html.haml | 2 +- config/locales/en.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/ship_order_component.html.haml b/app/components/ship_order_component.html.haml index 1fea356be1..d968a2a414 100644 --- a/app/components/ship_order_component.html.haml +++ b/app/components/ship_order_component.html.haml @@ -1,6 +1,6 @@ = render ConfirmModalComponent.new(id: "ship_order", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do %div{class: "margin-bottom-30"} - %p= t('spree.admin.orders.shipment.mark_as_shipped_message').html_safe + %p= t('spree.admin.orders.shipment.mark_as_shipped_message_html') %div{class: "margin-bottom-30"} = hidden_field_tag :id, @order.id = check_box_tag :send_shipment_email, "1", true diff --git a/config/locales/en.yml b/config/locales/en.yml index dc3b97434b..2eed70f0ea 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -4178,7 +4178,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using cannot_add_item_to_canceled_order: "Cannot add item to canceled order" include_out_of_stock_variants: "Include variants with no available stock" shipment: - mark_as_shipped_message: "This will mark the order as Shipped.
Are you sure you want to proceed?" + mark_as_shipped_message_html: "This will mark the order as Shipped.
Are you sure you want to proceed?" mark_as_shipped_label_message: "Send a shipment/pick up notification email to the customer." index: listing_orders: "Listing Orders" From 5b99c2666a03e4df9ed1be3deb31ce83d251f0c9 Mon Sep 17 00:00:00 2001 From: binarygit Date: Mon, 25 Dec 2023 16:42:06 +0545 Subject: [PATCH 11/14] Use cable_ready.replace instead of morphing after order is captured --- app/reflexes/admin/orders_reflex.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/reflexes/admin/orders_reflex.rb b/app/reflexes/admin/orders_reflex.rb index 2ed6b60c7f..b3145214a1 100644 --- a/app/reflexes/admin/orders_reflex.rb +++ b/app/reflexes/admin/orders_reflex.rb @@ -8,8 +8,10 @@ module Admin payment_capture = OrderCaptureService.new(@order) if payment_capture.call - morph dom_id(@order), render(partial: "spree/admin/orders/table_row", - locals: { order: @order.reload, success: true }) + cable_ready.replace(selector: dom_id(@order), + html: render(partial: "spree/admin/orders/table_row", + locals: { order: @order.reload, success: true })) + morph :nothing else flash[:error] = payment_capture.gateway_error || I18n.t(:payment_processing_failed) morph_admin_flashes From bc570743a50a8082a149c0b45650f309487fb10b Mon Sep 17 00:00:00 2001 From: binarygit Date: Mon, 25 Dec 2023 16:49:43 +0545 Subject: [PATCH 12/14] Bugfix: Link individual send shipment button to its corresponding form --- app/components/ship_order_component.html.haml | 2 +- app/views/admin/shared/_tooltip_button.html.haml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/ship_order_component.html.haml b/app/components/ship_order_component.html.haml index d968a2a414..e497598946 100644 --- a/app/components/ship_order_component.html.haml +++ b/app/components/ship_order_component.html.haml @@ -1,4 +1,4 @@ -= render ConfirmModalComponent.new(id: "ship_order", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do += render ConfirmModalComponent.new(id: dom_id(@order, :ship), confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do %div{class: "margin-bottom-30"} %p= t('spree.admin.orders.shipment.mark_as_shipped_message_html') %div{class: "margin-bottom-30"} diff --git a/app/views/admin/shared/_tooltip_button.html.haml b/app/views/admin/shared/_tooltip_button.html.haml index 9d7d0979bb..3eebca4671 100644 --- a/app/views/admin/shared/_tooltip_button.html.haml +++ b/app/views/admin/shared/_tooltip_button.html.haml @@ -1,6 +1,6 @@ %div{ "data-controller": "tooltip" } - if local_assigns[:shipment] - %button{class: button_class,"data-controller": "modal-link", "data-action": "click->modal-link#open", "data-modal-link-target-value": "ship_order", "data-id": reflex_data_id, "data-tooltip-target": "element" } + %button{class: button_class,"data-controller": "modal-link", "data-action": "click->modal-link#open", "data-modal-link-target-value": "ship_order_#{reflex_data_id}", "data-id": reflex_data_id, "data-tooltip-target": "element" } - else %button{class: button_class, "data-reflex": button_reflex, "data-id": reflex_data_id, "data-tooltip-target": "element" } .tooltip-container From 746b521856ec7fd1642266dfad781ed257d196cf Mon Sep 17 00:00:00 2001 From: binarygit Date: Mon, 25 Dec 2023 17:05:32 +0545 Subject: [PATCH 13/14] Associate each label with its checkbox --- app/components/ship_order_component.html.haml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/components/ship_order_component.html.haml b/app/components/ship_order_component.html.haml index e497598946..be05f354e1 100644 --- a/app/components/ship_order_component.html.haml +++ b/app/components/ship_order_component.html.haml @@ -3,5 +3,6 @@ %p= t('spree.admin.orders.shipment.mark_as_shipped_message_html') %div{class: "margin-bottom-30"} = hidden_field_tag :id, @order.id - = check_box_tag :send_shipment_email, "1", true - = label_tag :send_shipment_email, t('spree.admin.orders.shipment.mark_as_shipped_label_message') + = label_tag do + = check_box_tag :send_shipment_email, "1", true + = t('spree.admin.orders.shipment.mark_as_shipped_label_message') From e865f27158ca8b4b25e9388c99a8fd5137465db4 Mon Sep 17 00:00:00 2001 From: binarygit Date: Sat, 13 Jan 2024 17:02:41 +0545 Subject: [PATCH 14/14] Provide correct modal-link-target-value and write tests for orders#edit page --- .../spree/admin/orders/_shipment.html.haml | 2 +- .../spree/admin/shared/_order_links.html.haml | 2 +- spec/system/admin/order_spec.rb | 80 +++++++++++++++++++ 3 files changed, 82 insertions(+), 2 deletions(-) diff --git a/app/views/spree/admin/orders/_shipment.html.haml b/app/views/spree/admin/orders/_shipment.html.haml index 5dc8b6b902..599900c295 100644 --- a/app/views/spree/admin/orders/_shipment.html.haml +++ b/app/views/spree/admin/orders/_shipment.html.haml @@ -9,7 +9,7 @@ - if shipment.ready? and can? :update, shipment = "-" %button{"class": "ship button icon-arrow-right","data-controller": "modal-link", - "data-action": "click->modal-link#open", "data-modal-link-target-value": "ship_order" }= t(:ship) + "data-action": "click->modal-link#open", "data-modal-link-target-value": dom_id(order, :ship)}= t(:ship) %form = render ShipOrderComponent.new(order: order) diff --git a/app/views/spree/admin/shared/_order_links.html.haml b/app/views/spree/admin/shared/_order_links.html.haml index 8b1f1a0851..5b46b6e4b0 100644 --- a/app/views/spree/admin/shared/_order_links.html.haml +++ b/app/views/spree/admin/shared/_order_links.html.haml @@ -7,7 +7,7 @@ %div.menu{"data-dropdown-target": "menu"} - order_links(@order).each do |link| - if link[:name] == t(:ship_order) - %a.menu_item{ href: link[:url], target: link[:target] || "_self", data: { "modal-link-target-value": "ship_order", "action": "click->modal-link#open", "controller": "modal-link" } } + %a.menu_item{ href: link[:url], target: link[:target] || "_self", data: { "modal-link-target-value": dom_id(@order, :ship), "action": "click->modal-link#open", "controller": "modal-link" } } %span %i{ class: link[:icon] } %span=link[:name] diff --git a/spec/system/admin/order_spec.rb b/spec/system/admin/order_spec.rb index 7722111544..379bd88e8f 100644 --- a/spec/system/admin/order_spec.rb +++ b/spec/system/admin/order_spec.rb @@ -915,6 +915,86 @@ describe ' expect(page).to have_selector 'td.tax', text: shipping_fee.included_tax_total.to_s end + context "shipping orders" do + before do + order.finalize! # ensure order has a payment to capture + order.payments << create(:check_payment, order:, amount: order.total) + order.payments.first.capture! + visit spree.edit_admin_order_path(order) + end + + it "ships the order and shipment email is sent" do + expect(order.reload.shipped?).to be false + + click_button 'Ship' + + within ".reveal-modal" do + expect(page).to have_checked_field('Send a shipment/pick up ' \ + 'notification email to the customer.') + expect { + find_button("Confirm").click + }.to enqueue_job(ActionMailer::MailDeliveryJob).exactly(:once) + end + + expect(order.reload.shipped?).to be true + expect(page).to have_text 'SHIPPED' + end + + it "ships the order without sending email" do + expect(order.reload.shipped?).to be false + + click_button 'Ship' + + within ".reveal-modal" do + uncheck 'Send a shipment/pick up notification email to the customer.' + expect { + find_button("Confirm").click + }.to_not enqueue_job(ActionMailer::MailDeliveryJob) + end + + save_screenshot('~/hello.png') + expect(order.reload.shipped?).to be true + expect(page).to have_text 'SHIPPED' + end + + context "ship order from dropdown" do + it "ships the order and sends email" do + expect(order.reload.shipped?).to be false + + find('.ofn-drop-down').click + click_link 'Ship Order' + + within ".reveal-modal" do + expect(page).to have_checked_field('Send a shipment/pick up ' \ + 'notification email to the customer.') + expect { + find_button("Confirm").click + }.to enqueue_job(ActionMailer::MailDeliveryJob).exactly(:once) + end + + expect(order.reload.shipped?).to be true + expect(page).to have_text 'SHIPPED' + end + + it "ships the order without sending email" do + expect(order.reload.shipped?).to be false + + find('.ofn-drop-down').click + click_link 'Ship Order' + + within ".reveal-modal" do + uncheck 'Send a shipment/pick up notification email to the customer.' + expect { + find_button("Confirm").click + }.to_not enqueue_job(ActionMailer::MailDeliveryJob) + end + + expect(order.reload.shipped?).to be true + expect(page).to have_text 'SHIPPED' + end + end + end + context "when an included variant has been deleted" do let!(:deleted_variant) do order.line_items.first.variant.tap(&:delete)