mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-26 01:33:22 +00:00
Add amount to voucher
Change value to amount to be more consistent
This commit is contained in:
committed by
Maikel Linke
parent
10c918be75
commit
15eee8175e
@@ -11,13 +11,10 @@ class Voucher < ApplicationRecord
|
||||
dependent: :nullify
|
||||
|
||||
validates :code, presence: true, uniqueness: { scope: :enterprise_id }
|
||||
|
||||
def value
|
||||
10
|
||||
end
|
||||
validates :amount, presence: true, numericality: { greater_than: 0 }
|
||||
|
||||
def display_value
|
||||
Spree::Money.new(value)
|
||||
Spree::Money.new(amount)
|
||||
end
|
||||
|
||||
# Ideally we would use `include CalculatedAdjustments` to be consistent with other adjustments,
|
||||
@@ -44,6 +41,6 @@ class Voucher < ApplicationRecord
|
||||
# We limit adjustment to the maximum amount needed to cover the order, ie if the voucher
|
||||
# covers more than the order.total we only need to create an adjustment covering the order.total
|
||||
def compute_amount(order)
|
||||
-value.clamp(0, order.total)
|
||||
-amount.clamp(0, order.total)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
= t("split_checkout.step2.voucher.voucher", voucher_amount: voucher_adjustment.originator.display_value)
|
||||
= link_to t("split_checkout.step2.voucher.remove_code"), voucher_adjustment_path(id: voucher_adjustment.id), method: "delete", data: { confirm: t("split_checkout.step2.voucher.confirm_delete") }
|
||||
- # This might not be true, ie payment method including a fee which wouldn't be covered by voucher or tax implication raising total to be bigger than the voucher amount ?
|
||||
- if voucher_adjustment.originator.value > order.total
|
||||
- if voucher_adjustment.originator.amount > order.total
|
||||
.checkout-input
|
||||
%span.formError.standalone
|
||||
= t("split_checkout.step2.voucher.warning_forfeit_remaining_amount")
|
||||
|
||||
5
db/migrate/20230418030646_add_amount_to_vouchers.rb
Normal file
5
db/migrate/20230418030646_add_amount_to_vouchers.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
class AddAmountToVouchers < ActiveRecord::Migration[7.0]
|
||||
def change
|
||||
add_column :vouchers, :amount, :decimal, precision: 10, scale: 2, null: false, default: 0
|
||||
end
|
||||
end
|
||||
@@ -1197,6 +1197,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_04_24_141213) do
|
||||
t.datetime "updated_at", null: false
|
||||
t.bigint "enterprise_id"
|
||||
t.datetime "deleted_at", precision: nil
|
||||
t.decimal "amount", precision: 10, scale: 2, default: "0.0", null: false
|
||||
t.index ["code", "enterprise_id"], name: "index_vouchers_on_code_and_enterprise_id", unique: true
|
||||
t.index ["deleted_at"], name: "index_vouchers_on_deleted_at"
|
||||
t.index ["enterprise_id"], name: "index_vouchers_on_enterprise_id"
|
||||
|
||||
@@ -15,10 +15,12 @@ describe Voucher do
|
||||
|
||||
it { is_expected.to validate_presence_of(:code) }
|
||||
it { is_expected.to validate_uniqueness_of(:code).scoped_to(:enterprise_id) }
|
||||
it { is_expected.to validate_presence_of(:amount) }
|
||||
it { is_expected.to validate_numericality_of(:amount).is_greater_than(0) }
|
||||
end
|
||||
|
||||
describe '#compute_amount' do
|
||||
subject { Voucher.create(code: 'new_code', enterprise: enterprise) }
|
||||
subject { Voucher.create(code: 'new_code', enterprise: enterprise, amount: 10) }
|
||||
|
||||
let(:order) { create(:order_with_totals) }
|
||||
|
||||
@@ -39,11 +41,11 @@ describe Voucher do
|
||||
describe '#create_adjustment' do
|
||||
subject(:adjustment) { voucher.create_adjustment(voucher.code, order) }
|
||||
|
||||
let(:voucher) { Voucher.create(code: 'new_code', enterprise: enterprise) }
|
||||
let(:order) { create(:order_with_line_items, line_items_count: 1, distributor: enterprise) }
|
||||
let(:voucher) { Voucher.create(code: 'new_code', enterprise: enterprise, amount: 25) }
|
||||
let(:order) { create(:order_with_line_items, line_items_count: 3, distributor: enterprise) }
|
||||
|
||||
it 'includes the full voucher amount' do
|
||||
expect(adjustment.amount.to_f).to eq(-10.0)
|
||||
expect(adjustment.amount.to_f).to eq(-25.0)
|
||||
end
|
||||
|
||||
it 'has no included_tax' do
|
||||
|
||||
@@ -720,7 +720,8 @@ describe "As a consumer, I want to checkout my order" do
|
||||
end
|
||||
|
||||
context "with voucher available" do
|
||||
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor) }
|
||||
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor, amount: amount) }
|
||||
let(:amount) { 15 }
|
||||
|
||||
before do
|
||||
visit checkout_step_path(:payment)
|
||||
@@ -738,7 +739,7 @@ describe "As a consumer, I want to checkout my order" do
|
||||
end
|
||||
|
||||
it "adds a voucher to the order" do
|
||||
expect(page).to have_content("$10.00 Voucher")
|
||||
expect(page).to have_content("$15.00 Voucher")
|
||||
expect(order.reload.voucher_adjustments.length).to eq(1)
|
||||
end
|
||||
end
|
||||
@@ -1111,13 +1112,15 @@ describe "As a consumer, I want to checkout my order" do
|
||||
end
|
||||
|
||||
describe "vouchers" do
|
||||
let(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor) }
|
||||
let(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor, amount: 6) }
|
||||
|
||||
before do
|
||||
# Add voucher to the order
|
||||
voucher.create_adjustment(voucher.code, order)
|
||||
|
||||
# Update order so voucher adjustment is properly taken into account
|
||||
order.update_order!
|
||||
VoucherAdjustmentsService.calculate(order)
|
||||
|
||||
visit checkout_step_path(:summary)
|
||||
end
|
||||
@@ -1125,6 +1128,7 @@ describe "As a consumer, I want to checkout my order" do
|
||||
it "shows the applied voucher" do
|
||||
within ".summary-right" do
|
||||
expect(page).to have_content "some_code"
|
||||
expect(page).to have_content "-6"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -136,7 +136,7 @@ describe "As a consumer, I want to see adjustment breakdown" do
|
||||
end
|
||||
|
||||
context "when using a voucher" do
|
||||
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor) }
|
||||
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor, amount: 10) }
|
||||
|
||||
it "will include a tax included amount on the voucher adjustment" do
|
||||
visit checkout_step_path(:details)
|
||||
@@ -149,7 +149,7 @@ describe "As a consumer, I want to see adjustment breakdown" do
|
||||
fill_in "Enter voucher code", with: voucher.code
|
||||
click_button("Apply")
|
||||
|
||||
# Choose payment ??
|
||||
# Choose payment
|
||||
click_on "Next - Order summary"
|
||||
click_on "Complete order"
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ describe "As a consumer, I want to see adjustment breakdown" do
|
||||
end
|
||||
|
||||
context "when using a voucher" do
|
||||
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor) }
|
||||
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor, amount: 10) }
|
||||
|
||||
it "will include a tax included amount on the voucher adjustment" do
|
||||
visit checkout_step_path(:details)
|
||||
@@ -156,7 +156,6 @@ describe "As a consumer, I want to see adjustment breakdown" do
|
||||
fill_in "Enter voucher code", with: voucher.code
|
||||
click_button("Apply")
|
||||
|
||||
# Choose payment ??
|
||||
click_on "Next - Order summary"
|
||||
click_on "Complete order"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user