Add amount to voucher

Change value to amount to be more consistent
This commit is contained in:
Gaetan Craig-Riou
2023-05-05 15:43:04 +10:00
committed by Maikel Linke
parent 10c918be75
commit 15eee8175e
8 changed files with 26 additions and 18 deletions

View File

@@ -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

View File

@@ -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")

View 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

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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"