Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[admin] Allow editing the order contact email #5500

Merged
merged 3 commits into from
Nov 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@

<%= page_with_sidebar_aside do %>
<%= render component('ui/panel').new(title: panel_title_with_more_links(t(".customer"), [
link_to(t(".edit_email"), "#", class: "p-2 hover:bg-gray-25 rounded-sm text-black"),
link_to(t(".edit_email"), solidus_admin.order_customer_path(@order), class: "p-2 hover:bg-gray-25 rounded-sm text-black"),
link_to(t(".edit_shipping"), "#", class: "p-2 hover:bg-gray-25 rounded-sm text-black"),
link_to(t(".edit_billing"), "#", class: "p-2 hover:bg-gray-25 rounded-sm text-black"),
link_to(t(".remove_customer"), "#", 'data-turbo-method': :delete, class: "p-2 hover:bg-gray-25 rounded-sm text-red-500"),
link_to(t(".remove_customer"), solidus_admin.order_customer_path(@order), 'data-turbo-method': :delete, class: "p-2 hover:bg-gray-25 rounded-sm text-red-500"),
])) do %>
<div class="flex flex-col -m-6 p-6 gap-6 border-t border-gray-100 mt-0">
<%# CUSTOMER %>
Expand Down
4 changes: 2 additions & 2 deletions admin/app/components/solidus_admin/orders/show/component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ def format_address(address)
def panel_title_with_more_links(title, links)
tag.details(
tag.summary(
tag.div(
tag.span(
safe_join([
title,
component("ui/button").new(
icon: "more-line",
scheme: :ghost,
tag: :div,
tag: :span,
alt: t("spree.edit"),
class: "cursor-pointer"
).render_in(self),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<div class="<%= stimulus_id %>">
<%= render component("orders/show").new(order: @order) %>
<%= render component("ui/modal").new(title: t(".title"), close_path: close_path) do |modal| %>
<%= form_for @order, url: close_path, html: { id: form_id} do |f| %>
<%= render component("ui/forms/field").text_field(f, :email) %>
<label class="body-small mt-4 block">
<%= t('.guest_checkout') %>:
<output class="body-small-bold"><%= @order.user ? t('.yes') : t('.no') %></output>
<%= render component('ui/toggletip').new(text: t('.guest_checkout_tip'), class: "align-middle") %>
</label>
<% end %>

<% modal.with_actions do %>
<%= render component("ui/button").new(tag: :a, scheme: :secondary, href: close_path, type: :submit, text: t('.cancel')) %>
<%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
<% end %>
<% end %>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# frozen_string_literal: true

class SolidusAdmin::Orders::Show::Email::Component < SolidusAdmin::BaseComponent
def initialize(order:)
@order = order
end

def form_id
dom_id(@order, "#{stimulus_id}_email_form")
end

def close_path
@close_path ||= solidus_admin.order_path(@order)
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
en:
title: "Edit order email"
submit: "Save"
cancel: "Cancel"
guest_checkout: "Guest checkout"
guest_checkout_tip: "An order without an associated user account is considered a guest checkout."
"yes": "Yes"
"no": "No"
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
>
<a href="<%= @close_path %>" aria-hidden="true" class="cursor-default fixed inset-0 bg-full-black/50 overflow-y-auto"></a>
<div class="fixed inset-0 z-10 pointer-events-none flex min-h-full justify-center p-4 text-center items-center">
<div class="pointer-events-auto cursor-auto relative transform overflow-auto rounded-lg bg-white text-left shadow-xl max-w-lg divide-y divide-gray-100">
<div class="min-w-[40rem] pointer-events-auto cursor-auto relative transform overflow-auto rounded-lg bg-white text-left shadow-xl max-w-lg divide-y divide-gray-100">

<header class="flex items-center justify-between p-4">
<h3 class="text-xl font-semibold text-gray-900">
Expand Down
19 changes: 19 additions & 0 deletions admin/app/controllers/solidus_admin/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# frozen_string_literal: true

class SolidusAdmin::CustomersController < SolidusAdmin::BaseController
before_action :load_order, only: :show

def show
render component('orders/show/email').new(order: @order)
end

private

def load_order
@order = Spree::Order.find_by!(number: params[:order_id])
end

def authorization_subject
@order || Spree::Order
end
end
21 changes: 21 additions & 0 deletions admin/app/controllers/solidus_admin/orders_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

module SolidusAdmin
class OrdersController < SolidusAdmin::BaseController
include Spree::Core::ControllerHelpers::StrongParameters

def index
orders = Spree::Order
.order(created_at: :desc, id: :desc)
Expand All @@ -26,6 +28,21 @@
end
end

def update
load_order

@order.assign_attributes(order_params)
@order.email ||= @order.user.email if @order.user && @order.user.changed?

if @order.save
flash[:notice] = t('.success')
else
flash[:error] = t('.error')

Check warning on line 40 in admin/app/controllers/solidus_admin/orders_controller.rb

View check run for this annotation

Codecov / codecov/patch

admin/app/controllers/solidus_admin/orders_controller.rb#L40

Added line #L40 was not covered by tests
end

redirect_to spree.edit_admin_order_path(@order)
end

def edit
redirect_to action: :show
end
Expand Down Expand Up @@ -63,5 +80,9 @@
@order = Spree::Order.find_by!(number: params[:id])
authorize! action_name, @order
end

def order_params
params.require(:order).permit(:user_id, permitted_order_attributes)
end
end
end
2 changes: 2 additions & 0 deletions admin/config/locales/orders.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ en:
solidus_admin:
orders:
title: "Orders"
update:
success: "Order was updated successfully"
3 changes: 2 additions & 1 deletion admin/config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@
get 'states', to: 'countries#states'
end

resources :orders, only: [:index, :show, :edit] do
resources :orders, only: [:index, :show, :edit, :update] do
resources :line_items, only: [:destroy, :create, :update]
resource :customer

member do
get :variants_for
Expand Down
20 changes: 18 additions & 2 deletions admin/spec/features/order_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,27 @@

require 'spec_helper'

describe "Order", type: :feature do
describe "Order", :js, type: :feature do
before { sign_in create(:admin_user, email: '[email protected]') }

it "allows changing the order email" do
create(:order, number: "R123456789", total: 19.99)

visit "/admin/orders/R123456789/edit"

expect(page).to have_content("Order R123456789")
find("summary", text: "Customer").click
click_on "Edit order email"
within("dialog") do
fill_in "Customer Email", with: "[email protected]"
click_on "Save"
end
expect(page).to have_content("Order was updated successfully")
expect(page).to have_content("Order contact email [email protected]", normalize_ws: true)
end

context "in cart state" do
it "allows managing the cart", :js do
it "allows managing the cart" do
create(:product, name: "Just a product", slug: 'just-a-prod', price: 19.99)
create(:product, name: "Just another product", slug: 'just-another-prod', price: 29.99)
create(:order, number: "R123456789", total: 19.99, state: "cart")
Expand Down
Loading