diff --git a/app/models/invoice.rb b/app/models/invoice.rb index 4e6e91cf..4915b2fd 100644 --- a/app/models/invoice.rb +++ b/app/models/invoice.rb @@ -337,7 +337,7 @@ def can_cancel? !can_destroy? && !processing? && !canceled? && - (current_year? || open?) && + (current_year? || open? || (membership_type? && entity.current_year?)) && (!share_type? || open?) && (!entity_id? || entity_latest?) end diff --git a/app/models/membership.rb b/app/models/membership.rb index 4cba84e8..cfb98eb5 100644 --- a/app/models/membership.rb +++ b/app/models/membership.rb @@ -199,6 +199,10 @@ def current? started? && ended_on >= Date.current end + def current_year? + fy_year == Current.fy_year + end + def current_or_future_year? fy_year >= Current.fy_year end diff --git a/spec/models/invoice_spec.rb b/spec/models/invoice_spec.rb index fb8e3a46..a6bf6f0d 100644 --- a/spec/models/invoice_spec.rb +++ b/spec/models/invoice_spec.rb @@ -536,6 +536,14 @@ expect(invoice.can_cancel?).to eq false end + specify "when not current year, closed, but membership current year" do + membership = create(:membership) + invoice = create(:invoice, :membership, :closed, + date: 13.months.ago, + entity: membership) + expect(invoice.can_cancel?).to eq true + end + specify "when not current year but open" do invoice = create(:invoice, :annual_fee, :open, date: 13.months.ago) expect(invoice.can_cancel?).to eq true