Sha256: 406b0e4f77e138466fe6713f553f15097b7cf0ba48c583c3f2ca52927524e921

Contents?: true

Size: 1.11 KB

Versions: 12

Compression:

Stored size: 1.11 KB

Contents

module Comee
  module Core
    class WarehouseShipmentItem < ApplicationRecord
      before_save :update_inventory

      belongs_to :warehouse_shipment
      belongs_to :sales_order_item

      validates :quantity, presence: true
      validate :validate_inventory_quantity

      def validate_inventory_quantity
        return unless quantity && sales_order_item

        inventory = Inventory.find_by(product_id: sales_order_item.product_id)
        unless inventory
          errors.add(:base, "Inventory entry not found for product `#{sales_order_item.product.name}`.")
          return
        end

        old_quantity = quantity_was || 0
        diff = inventory.quantity - (quantity - old_quantity)
        errors.add(:quantity, "exceeds available quantity in inventory by #{diff.abs}.") if diff.negative?
      end

      def update_inventory
        inventory = Inventory.find_by(product_id: sales_order_item.product_id)
        return unless quantity_changed?

        old_quantity = quantity_was || 0
        diff = quantity - old_quantity
        inventory.quantity -= diff
        inventory.save!
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
comee_core-0.1.39 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.38 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.37 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.36 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.35 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.34 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.33 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.32 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.31 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.30 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.29 app/models/comee/core/warehouse_shipment_item.rb
comee_core-0.1.28 app/models/comee/core/warehouse_shipment_item.rb