Skip to content

Commit

Permalink
Members deliveries, show when no next basket
Browse files Browse the repository at this point in the history
This patch ensures that the deliveries page is still shown even when there is
no next basket. Future deliveries could still be present when for example the
next basket is marked as absent or empty.

Showing it avoid confusion and allows the user to see the status of the next
deliveries.

It's also useful to still show past deliveries when there is no next basket.
  • Loading branch information
thibaudgg committed Jan 31, 2025
1 parent 0ca1639 commit b9cd29b
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 39 deletions.
45 changes: 24 additions & 21 deletions app/controllers/members/deliveries_controller.rb
Original file line number Diff line number Diff line change
@@ -1,28 +1,31 @@
# frozen_string_literal: true

class Members::DeliveriesController < Members::BaseController
before_action :ensure_baskets

# GET /deliveries
def index
if @next_basket = current_member.next_basket
membership_ids = [ @next_basket.membership_id ]
if current_member.future_membership
membership_ids << current_member.future_membership.id
end
@future_baskets =
Basket
.where(membership_id: membership_ids)
.filled
.coming
.includes(:delivery, :basket_size, :depot, baskets_basket_complements: :basket_complement)
@past_baskets =
@next_basket
.membership
.baskets
.filled
.past
.includes(:delivery, :basket_size, :depot, baskets_basket_complements: :basket_complement)
else
redirect_to members_login_path
end
@next_basket = current_member.next_basket
@future_baskets =
Basket
.where(membership_id: current_member.memberships.current_or_future)
.filled
.coming
.includes(:delivery, :basket_size, :depot, baskets_basket_complements: :basket_complement)
@past_baskets =
current_member
.closest_membership
.baskets
.filled
.past
.includes(:delivery, :basket_size, :depot, baskets_basket_complements: :basket_complement)
end

private

def ensure_baskets
return if current_member.baskets.any?

redirect_to members_login_path
end
end
9 changes: 7 additions & 2 deletions app/views/layouts/members/_header.html.slim
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,19 @@ header class='flex-grow flex flex-col flex-nowrap justify-between'

div class='mr-8 flex flex-grow h-full flex-col justify-between'
- membership = current_member.closest_membership
- next_basket = current_member.next_basket
ul class='flex-grow'

- if next_basket = current_member.next_basket
- if current_member.baskets.any?
li class="#{nav_class("deliveries")}"
= link_to members_deliveries_path, class: "block py-2 px-8" do
h2 class='font-medium text-gray-700 dark:text-gray-400'
= Delivery.model_name.human(count: 2)
span = t(".delivery", date: l(next_basket.delivery.date))
span
- if next_basket
= t(".delivery", date: l(next_basket.delivery.date))
- else
= t(".see_history")

- if show_shop_menu?
li class="py-2" aria-label="Shop Menu"
Expand Down
20 changes: 12 additions & 8 deletions app/views/members/deliveries/index.html.slim
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ div class="flex justify-between mb-8 mt-1"

h2 class="mt-8 text-lg font-bold text-gray-900 dark:text-gray-100"
= t(".future_deliveries", count: @future_baskets.count)
ul class="mt-2 grid md:grid-cols-2 gap-4"
- if @future_baskets.empty?
p.empty = t(".no_future_deliveries")
- else

- if @future_baskets.empty?
p.empty.text-center.italic.mt-4
= t(".no_future_deliveries")
- else
ul class="mt-2 grid md:grid-cols-2 gap-4"
- @future_baskets.each do |basket|
li class='w-full'
= render basket
Expand All @@ -25,10 +27,12 @@ ul class="mt-2 grid md:grid-cols-2 gap-4"

h2 class="mt-8 text-lg font-bold text-gray-900 dark:text-gray-100"
= t(".past_deliveries", count: @past_baskets.count)
ul class="mt-2 grid md:grid-cols-2 gap-4"
- if @past_baskets.empty?
p.empty = t(".no_past_deliveries")
- else

- if @past_baskets.empty?
p.empty.text-center.italic.mt-4
= t(".no_past_deliveries")
- else
ul class="mt-2 grid md:grid-cols-2 gap-4"
- @past_baskets.each do |basket|
li class='w-full'
= render basket
16 changes: 8 additions & 8 deletions config/locales/members.yml
Original file line number Diff line number Diff line change
Expand Up @@ -515,15 +515,15 @@ _:
_fr: Prochaine livraison
_it: Prossime consegne
no_future_deliveries:
_de: Keine, es ist fast fertig für dieses Jahr.
_en: None, it's almost done for this year!
_fr: Aucune, c'est presque fini pour cette année!
_it: Nessuno, è quasi finita per quest'anno!
_de: Keine zukünftigen Lieferungen
_en: No future deliveries
_fr: Aucune livraison à venir
_it: Nessuna consegna futura
no_past_deliveries:
_de: Keine, es wird bald anfangen!
_en: None, it will start soon!
_fr: Aucune, cela va bientôt commencer!
_it: Nessuno, inizierà presto!
_de: Keine vergangenen Lieferungen
_en: No past deliveries
_fr: Aucune livraison passée
_it: Nessuna consegna passata
past_deliveries:
_de: Alte Lieferungen (%{count})
_en: Past deliveries (%{count})
Expand Down
27 changes: 27 additions & 0 deletions test/system/members/deliveries_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class Members::DeliveriesTest < ApplicationSystemTestCase

visit "/deliveries"
assert_equal "/deliveries", current_path
assert_includes menu_nav, "Deliveries\n" + "⤷ 4 April 2024"

assert_text "Information: Bakery"
assert_text "Bakery front door code is 1234"
Expand All @@ -25,6 +26,32 @@ class Members::DeliveriesTest < ApplicationSystemTestCase
end
end

test "show past deliveries only (current year)" do
travel_to "2024-07-01"
member = members(:jane)
login(member)

visit "/deliveries"
assert_equal "/deliveries", current_path
assert_includes menu_nav, "Deliveries\n" + "⤷ View history"

assert_text "Future deliveries (0)"
assert_text "Past deliveries (10)"
end

test "show past deliveries only (past year)" do
travel_to "2025-01-01"
member = members(:jane)
login(member)

visit "/deliveries"
assert_equal "/deliveries", current_path
assert_includes menu_nav, "Deliveries\n" + "⤷ View history"

assert_text "Future deliveries (0)"
assert_text "Past deliveries (10)"
end

test "redirects when no membership" do
login(members(:mary))
visit "/deliveries"
Expand Down

0 comments on commit b9cd29b

Please sign in to comment.