app/models/unidom/order/order_adjustment.rb in unidom-order-2.0 vs app/models/unidom/order/order_adjustment.rb in unidom-order-2.0.1

- old
+ new

@@ -1,44 +1,50 @@ ## # Order Adjustment 是订单调整项。 -class Unidom::Order::OrderAdjustment < Unidom::Order::ApplicationRecord +module Unidom + module Order - self.table_name = 'unidom_order_adjustments' + class OrderAdjustment < ApplicationRecord - include Unidom::Common::Concerns::ModelExtension - include ProgneTapera::EnumCode + self.table_name = 'unidom_order_adjustments' - validates :amount, presence: true, numericality: { greater_than_or_equal_to: -1_000_000_000, less_than_or_equal_to: 1_000_000_000 } + include Unidom::Common::Concerns::ModelExtension + include ProgneTapera::EnumCode - belongs_to :adjusted, polymorphic: true + validates :amount, presence: true, numericality: { greater_than_or_equal_to: -1_000_000_000, less_than_or_equal_to: 1_000_000_000 } - scope :adjusted_is, ->(adjusted) { where adjusted: adjusted } + belongs_to :adjusted, polymorphic: true - code :adjustment_factor, Unidom::Order::AdjustmentFactor + scope :adjusted_is, ->(adjusted) { where adjusted: adjusted } - ## - # 对订单或者订单项 adjusted 进行调整。调整金额为 amount ,缺省为 0 。调整原因是 due_to ,缺省是 FRGT 。调整时间是 opened_at ,缺省为当前时间。如: - # Unidom::Order::OrderAdjustment.adjust! order, amount: 7.90, due_to: 'LTAX' - def self.adjust!(adjusted, amount: 0, due_to: 'FRGT', opened_at: Time.now) + code :adjustment_factor, Unidom::Order::AdjustmentFactor - assert_present! :adjusted, adjusted - assert_present! :amount, amount - assert_present! :due_to, due_to - assert_present! :opened_at, opened_at + ## + # 对订单或者订单项 adjusted 进行调整。调整金额为 amount ,缺省为 0 。调整原因是 due_to ,缺省是 FRGT 。调整时间是 opened_at ,缺省为当前时间。如: + # Unidom::Order::OrderAdjustment.adjust! order, amount: 7.90, due_to: 'LTAX' + def self.adjust!(adjusted, amount: 0, due_to: 'FRGT', opened_at: Time.now) - query = adjusted_is(adjusted).adjustment_factor_coded_as(due_to).valid_at(now: opened_at).alive - adjustment = query.first - if adjustment.present? - if 0==amount - adjustment.soft_destroy - else - adjustment.amount = amount - adjustment.save! + assert_present! :adjusted, adjusted + assert_present! :amount, amount + assert_present! :due_to, due_to + assert_present! :opened_at, opened_at + + query = adjusted_is(adjusted).adjustment_factor_coded_as(due_to).valid_at(now: opened_at).alive + adjustment = query.first + if adjustment.present? + if 0==amount + adjustment.soft_destroy + else + adjustment.amount = amount + adjustment.save! + end + else + adjustment = query.create! amount: amount, opened_at: opened_at + end + adjustment end - else - adjustment = query.create! amount: amount, opened_at: opened_at - end - adjustment - end -end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::Order::OrderAdjustment' + end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::Order::OrderAdjustment' + + end +end