Sha256: 933623936e1ab62363074de3ff9c82d8f6255854ec1d9892f4d7984eb4f142c2

Contents?: true

Size: 1.3 KB

Versions: 3

Compression:

Stored size: 1.3 KB

Contents

# Bouquet::Shipment.last.delivering
module Bouquet
  class Shipment < ApplicationRecord
    belongs_to :sales_order
    has_many :deliveries
    has_many :locations, through: :deliveries

    def delivering
      location = Bouquet::Location.first

      deliverie = deliveries.new(quantity: quantity, location_id: location.id)
      deliverie.date = Time.current
      deliverie.save

      sales_order.product.assemblies.each do |assembly|
        assembly_quantity = assembly.quantity

        storages = Bouquet::Storage.with_material(assembly.material_id)
        storages.each do |storage|
          break if assembly_quantity <= 0

          if storage.quantity > 0
            retrieval_quantity = if storage.quantity - assembly_quantity >= 0
              assembly_quantity
            else
              storage.quantity
            end

            retrieval = deliverie.retrievals.create(quantity: retrieval_quantity, storage_id: storage.id)
            retrieval.date = Time.current
            retrieval.save

            assembly_quantity = assembly_quantity - retrieval_quantity
          end
        end

        if assembly_quantity > 0
          puts "Delivering Error: Shortage #{assembly.material.name} = #{assembly_quantity}"
          raise ActiveRecord::Rollback
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bouquet-0.2.2 core/app/models/bouquet/shipment.rb
bouquet-0.2.1 core/app/models/bouquet/shipment.rb
bouquet-0.2.0 core/app/models/bouquet/shipment.rb