mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-15 04:14:24 +00:00
It would take ages to go through all files now and assess all belongs_to associations. So I just declare the old default and then we can move on and apply the new default for the application while these classes still use the old one. All new models will then use the new default which is the goal of this excercise and we can refactor old classes when we touch them anyway.
52 lines
1.5 KiB
Ruby
52 lines
1.5 KiB
Ruby
# frozen_string_literal: false
|
|
|
|
class Voucher < ApplicationRecord
|
|
self.belongs_to_required_by_default = false
|
|
|
|
acts_as_paranoid
|
|
|
|
belongs_to :enterprise, optional: false
|
|
|
|
has_many :adjustments,
|
|
as: :originator,
|
|
class_name: 'Spree::Adjustment',
|
|
dependent: :nullify
|
|
|
|
validates :code, presence: true, uniqueness: { scope: :enterprise_id }
|
|
validates :amount, presence: true, numericality: { greater_than: 0 }
|
|
|
|
def code=(value)
|
|
super(value.to_s.strip)
|
|
end
|
|
|
|
def display_value
|
|
Spree::Money.new(amount)
|
|
end
|
|
|
|
# Ideally we would use `include CalculatedAdjustments` to be consistent with other adjustments,
|
|
# but vouchers have complicated calculation so we can't easily use Spree::Calculator. We keep
|
|
# the same method to stay as consistent as possible.
|
|
#
|
|
# Creates a new voucher adjustment for the given order with an amount of 0
|
|
# The amount will be calculated via VoucherAdjustmentsService#update
|
|
def create_adjustment(label, order)
|
|
adjustment_attributes = {
|
|
amount: 0,
|
|
originator: self,
|
|
order: order,
|
|
label: label,
|
|
mandatory: false,
|
|
state: "open",
|
|
tax_category: nil
|
|
}
|
|
|
|
order.adjustments.create(adjustment_attributes)
|
|
end
|
|
|
|
# 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)
|
|
-amount.clamp(0, order.pre_discount_total)
|
|
end
|
|
end
|