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