From 0957edee5d67d24a5f73ef74527de64495a4248d Mon Sep 17 00:00:00 2001 From: summerscope Date: Tue, 20 May 2014 15:50:03 +1000 Subject: [PATCH 1/6] Styling for shopping cart page --- app/assets/stylesheets/darkswarm/all.scss | 3 +- .../stylesheets/darkswarm/forms.css.sass | 5 +++ .../darkswarm/shopping-cart.css.sass | 6 +++ app/views/shop/show.html.haml | 2 + app/views/spree/orders/_form.html.haml | 23 ++++++++++++ app/views/spree/orders/_line_item.html.haml | 2 +- app/views/spree/orders/edit.html.haml | 37 +++++-------------- 7 files changed, 48 insertions(+), 30 deletions(-) create mode 100644 app/assets/stylesheets/darkswarm/forms.css.sass create mode 100644 app/assets/stylesheets/darkswarm/shopping-cart.css.sass diff --git a/app/assets/stylesheets/darkswarm/all.scss b/app/assets/stylesheets/darkswarm/all.scss index a3ee62ec56..80e43cdc8b 100644 --- a/app/assets/stylesheets/darkswarm/all.scss +++ b/app/assets/stylesheets/darkswarm/all.scss @@ -11,5 +11,4 @@ ofn-modal { display: block; -} - +} \ No newline at end of file diff --git a/app/assets/stylesheets/darkswarm/forms.css.sass b/app/assets/stylesheets/darkswarm/forms.css.sass new file mode 100644 index 0000000000..7047159601 --- /dev/null +++ b/app/assets/stylesheets/darkswarm/forms.css.sass @@ -0,0 +1,5 @@ +@import mixins +@import branding + +fieldset + border: 0 \ No newline at end of file diff --git a/app/assets/stylesheets/darkswarm/shopping-cart.css.sass b/app/assets/stylesheets/darkswarm/shopping-cart.css.sass new file mode 100644 index 0000000000..a5314c3ef2 --- /dev/null +++ b/app/assets/stylesheets/darkswarm/shopping-cart.css.sass @@ -0,0 +1,6 @@ +@import mixins +@import branding + +#edit-cart + button, .button + margin: 0 diff --git a/app/views/shop/show.html.haml b/app/views/shop/show.html.haml index ba9493e46b..b94bd59bf9 100644 --- a/app/views/shop/show.html.haml +++ b/app/views/shop/show.html.haml @@ -15,3 +15,5 @@ .row = render partial: "shop/products/form" + += render partial: "shared/footer" \ No newline at end of file diff --git a/app/views/spree/orders/_form.html.haml b/app/views/spree/orders/_form.html.haml index 9366e0025d..09b3b72c22 100644 --- a/app/views/spree/orders/_form.html.haml +++ b/app/views/spree/orders/_form.html.haml @@ -19,4 +19,27 @@ = order_form.fields_for :line_items do |item_form| = render :partial => 'line_item', :locals => { :variant => item_form.object.variant, :line_item => item_form.object, :item_form => item_form } + %tfoot#edit-cart + %tr + %td + Product + \: + %span.order-total.item-total= number_to_currency @order.item_total + %td + Distribution + \: + %span.order-total.distribution-total= order_distribution_subtotal(@order) + %td + %td + = button_tag :class => 'neutral-btn dark expand small', :id => 'update-button' do + %i.fi-refresh + = t(:update) + %td + %h5.order-total.grand-total= @order.display_total + %td#empty-cart + / This needs help from Will - would like a link not button + %span#clear_cart_link{"data-hook" => ""} + = form_tag empty_cart_path, :method => :put do + = submit_tag t(:empty_cart), :class => 'button alert expand small' + = render "spree/orders/adjustments" unless @order.adjustments.eligible.blank? diff --git a/app/views/spree/orders/_line_item.html.haml b/app/views/spree/orders/_line_item.html.haml index bb7054655f..6986caf100 100644 --- a/app/views/spree/orders/_line_item.html.haml +++ b/app/views/spree/orders/_line_item.html.haml @@ -21,7 +21,7 @@ %td.cart-item-total{"data-hook" => "cart_item_total"} = line_item.display_amount.to_html unless line_item.quantity.nil? - %td.cart-item-delete{"data-hook" => "cart_item_delete"} + %td.cart-item-delete.text-center{"data-hook" => "cart_item_delete"} {{ quantity }} = link_to image_tag('icons/delete.png'), '#', :class => 'delete', :id => "delete_#{dom_id(line_item)}" diff --git a/app/views/spree/orders/edit.html.haml b/app/views/spree/orders/edit.html.haml index 06b82d5169..f0c6b95a78 100644 --- a/app/views/spree/orders/edit.html.haml +++ b/app/views/spree/orders/edit.html.haml @@ -24,35 +24,18 @@ .row = render :partial => 'form', :locals => { :order_form => order_form } - #subtotal.row{'data-hook' => ""} - .columns.large-5 - %h5 - Product - \: - %span.order-total.item-total= number_to_currency @order.item_total - .columns.large-4 - %h5 - Distribution - \: - %span.order-total.distribution-total= order_distribution_subtotal(@order) - .columns.large-3 - %h4 - Cart Total - \: - %span.order-total.grand-total= @order.display_total .links{'data-hook' => "cart_buttons"} .row - #empty-cart.columns.large-8{"data-hook" => ""} - = form_tag empty_cart_path, :method => :put do - #clear_cart_link{"data-hook" => ""} - = link_to "Continue Shopping", main_app.shop_path, class: "button secondary" - = t(:or) - = submit_tag t(:empty_cart), :class => 'button secondary' - + .columns.large-8{"data-hook" => ""} + + %a.button.large.secondary{href: main_app.shop_path} + %i.fi-arrow-left + Continue shopping .columns.large-4.text-right - = button_tag :class => 'secondary', :id => 'update-button' do - = t(:update) - = t(:or) - = link_to "Checkout", main_app.checkout_path, class: "button checkout primary", id: "checkout-link" + %a#checkout-link.button.large.primary{href: main_app.checkout_path} + Checkout + %i.fi-arrow-right + += render partial: "shared/footer" From 601281ced777d2fde2f753695715e0acdd45c518 Mon Sep 17 00:00:00 2001 From: summerscope Date: Tue, 20 May 2014 16:04:26 +1000 Subject: [PATCH 2/6] Add button style to shop page --- app/views/shop/products/_form.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index 8c70f76188..5a3af9684e 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -10,7 +10,7 @@ "ng-debounce" => "150", "ofn-disable-enter" => true} .small-6.columns - %input.button.right{type: :submit, value: "Add to Cart"} + %input.button.primary.right{type: :submit, value: "Add to Cart"} %div{bindonce: true} %product{"ng-controller" => "ProductNodeCtrl", @@ -26,4 +26,4 @@ .row .small-12.columns - %input.button.right.add_to_cart{type: :submit, value: "Add to Cart"} + %input.button.primary.right.add_to_cart{type: :submit, value: "Add to Cart"} From 0b595e21d2f8e87a517c0f64f4bf9881ae17bcba Mon Sep 17 00:00:00 2001 From: Will Marshall Date: Tue, 20 May 2014 12:30:28 +1000 Subject: [PATCH 3/6] Showing admin for enterprise or admin user --- app/helpers/shared_helper.rb | 6 +++++- app/views/shared/menu/_large_menu.html.haml | 2 +- app/views/shared/menu/_mobile_menu.html.haml | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/helpers/shared_helper.rb b/app/helpers/shared_helper.rb index f255999009..be1e0ba0f4 100644 --- a/app/helpers/shared_helper.rb +++ b/app/helpers/shared_helper.rb @@ -20,6 +20,10 @@ module SharedHelper end def enterprise_user? - spree_current_user.andand.enterprises.count > 0 + spree_current_user.andand.enterprises.andand.count.to_i > 0 + end + + def admin_user? + spree_current_user.andand.has_spree_role? 'admin' end end diff --git a/app/views/shared/menu/_large_menu.html.haml b/app/views/shared/menu/_large_menu.html.haml index 6f9bae4488..7a72b80f60 100644 --- a/app/views/shared/menu/_large_menu.html.haml +++ b/app/views/shared/menu/_large_menu.html.haml @@ -24,7 +24,7 @@ %a{href: main_app.groups_path} %span.nav-primary Groups %li.divider - - if spree_current_user.andand.has_spree_role? 'admin' + - if admin_user? or enterprise_user? %li %a{href: spree.admin_path} %span.nav-primary Admin diff --git a/app/views/shared/menu/_mobile_menu.html.haml b/app/views/shared/menu/_mobile_menu.html.haml index 5478436eb8..5e9f22c597 100644 --- a/app/views/shared/menu/_mobile_menu.html.haml +++ b/app/views/shared/menu/_mobile_menu.html.haml @@ -15,7 +15,7 @@ %ul.off-canvas-list %li= link_to image_tag("ofn_logo_small.png"), root_path - - if spree_current_user.andand.has_spree_role? 'admin' + - if admin_user? or enterprise_user? %li %a{href: spree.admin_path} %span.nav-primary Admin From da69167b4ce3649060e69f57ad4968b66e8db30e Mon Sep 17 00:00:00 2001 From: Will Marshall Date: Tue, 20 May 2014 12:39:22 +1000 Subject: [PATCH 4/6] Putting error messages on checkout into error flash for easier debugging --- app/controllers/checkout_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 5cf940c223..2bedcf5b6b 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -26,7 +26,7 @@ class CheckoutController < Spree::CheckoutController if @order.next state_callback(:after) else - flash[:error] = t(:payment_processing_failed) + flash[:error] = @order.errors.full_messages.to_sentence update_failed return end From 36aba8049fbede064d5f1e5e00607c243b16a0e2 Mon Sep 17 00:00:00 2001 From: Will Marshall Date: Tue, 20 May 2014 15:47:00 +1000 Subject: [PATCH 5/6] Starting to rework login behaviour when hitting /admin --- app/controllers/checkout_controller.rb | 6 +++++- .../spree/admin/base_controller_decorator.rb | 2 +- .../spree/admin/overview_controller_decorator.rb | 15 ++++++++++++++- config/routes.rb | 2 ++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 2bedcf5b6b..3879f16741 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -26,7 +26,11 @@ class CheckoutController < Spree::CheckoutController if @order.next state_callback(:after) else - flash[:error] = @order.errors.full_messages.to_sentence + unless @order.errors.empty? + flash[:error] = @order.errors.full_messages.to_sentence + else + flash[:error] = t(:payment_processing_failed) + end update_failed return end diff --git a/app/controllers/spree/admin/base_controller_decorator.rb b/app/controllers/spree/admin/base_controller_decorator.rb index 8e876513fa..df7076345f 100644 --- a/app/controllers/spree/admin/base_controller_decorator.rb +++ b/app/controllers/spree/admin/base_controller_decorator.rb @@ -11,4 +11,4 @@ Spree::Admin::BaseController.class_eval do authorize! :admin, record authorize! action, record end -end \ No newline at end of file +end diff --git a/app/controllers/spree/admin/overview_controller_decorator.rb b/app/controllers/spree/admin/overview_controller_decorator.rb index dd53294f6f..5c96901c1d 100644 --- a/app/controllers/spree/admin/overview_controller_decorator.rb +++ b/app/controllers/spree/admin/overview_controller_decorator.rb @@ -4,4 +4,17 @@ Spree::Admin::OverviewController.class_eval do @product_count = Spree::Product.active.managed_by(spree_current_user).count @order_cycle_count = OrderCycle.active.managed_by(spree_current_user).count end -end \ No newline at end of file + + # This is in Spree::Core::ControllerHelpers::Auth + # But you can't easily reopen modules in Ruby + def unauthorized + if try_spree_current_user + flash[:error] = t(:authorization_failure) + redirect_to '/unauthorized' + else + store_location + url = respond_to?(:spree_login_path) ? spree_login_path : root_path + redirect_to url + end + end +end diff --git a/config/routes.rb b/config/routes.rb index 69a3c99d56..310d1d9e4d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,8 @@ Openfoodnetwork::Application.routes.draw do root :to => 'home#index' + get "/#/login", to: "home#index", as: :spree_login + resource :shop, controller: "shop" do get :products post :order_cycle From ef91f8d17ffe14fde9aaea4ce0273b91a5f2bcf8 Mon Sep 17 00:00:00 2001 From: Will Marshall Date: Tue, 20 May 2014 16:04:53 +1000 Subject: [PATCH 6/6] Redirecting if cart is empty and activating the empty cart link --- app/controllers/spree/orders_controller_decorator.rb | 10 ++++++++++ app/views/spree/orders/_form.html.haml | 5 +++-- spec/controllers/spree/orders_controller_spec.rb | 11 +++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/controllers/spree/orders_controller_decorator.rb b/app/controllers/spree/orders_controller_decorator.rb index af1d5621c5..ce20dfd58d 100644 --- a/app/controllers/spree/orders_controller_decorator.rb +++ b/app/controllers/spree/orders_controller_decorator.rb @@ -11,6 +11,16 @@ Spree::OrdersController.class_eval do include OrderCyclesHelper layout 'darkswarm' + # Patching to redirect to shop if order is empty + def edit + @order = current_order(true) + if @order.line_items.empty? + redirect_to main_app.shop_path + else + associate_user + end + end + # Patch Orders#populate to populate multi_cart (if enabled) def populate if OpenFoodNetwork::FeatureToggle.enabled? :multi_cart diff --git a/app/views/spree/orders/_form.html.haml b/app/views/spree/orders/_form.html.haml index 09b3b72c22..3723299f84 100644 --- a/app/views/spree/orders/_form.html.haml +++ b/app/views/spree/orders/_form.html.haml @@ -39,7 +39,8 @@ %td#empty-cart / This needs help from Will - would like a link not button %span#clear_cart_link{"data-hook" => ""} - = form_tag empty_cart_path, :method => :put do - = submit_tag t(:empty_cart), :class => 'button alert expand small' + = link_to "Empty cart", empty_cart_path, method: :put + -#= form_tag empty_cart_path, :method => :put do + -#= submit_tag t(:empty_cart), :class => 'button alert expand small' = render "spree/orders/adjustments" unless @order.adjustments.eligible.blank? diff --git a/spec/controllers/spree/orders_controller_spec.rb b/spec/controllers/spree/orders_controller_spec.rb index a9118355d6..53c7be68f0 100644 --- a/spec/controllers/spree/orders_controller_spec.rb +++ b/spec/controllers/spree/orders_controller_spec.rb @@ -2,12 +2,23 @@ require 'spec_helper' describe Spree::OrdersController do let(:distributor) { double(:distributor) } + let(:order) { create(:order) } + let(:order_cycle) { create(:simple_order_cycle) } it "redirects home when no distributor is selected" do spree_get :edit response.should redirect_to root_path end + it "redirects to shop when order is empty" do + controller.stub(:current_distributor).and_return(distributor) + controller.stub(:current_order_cycle).and_return(order_cycle) + controller.stub(:current_order).and_return order + order.stub_chain(:line_items, :empty?).and_return true + spree_get :edit + response.should redirect_to shop_path + end + it "redirects to the shop when no order cycle is selected" do controller.stub(:current_distributor).and_return(distributor) spree_get :edit