andrewhao/bookplanner

View on GitHub
app/models/inventory_state.rb

Summary

Maintainability
A
0 mins
Test Coverage
# Group of assignments that have been returned in a certain period at its close.
# Think about this as a reverse plan
class InventoryState < ActiveRecord::Base
  has_many :assignments, -> { joins(:book_bag).order("book_bags.global_id ASC") }
  belongs_to :period
  delegate :plan, :classroom, to: :period
  accepts_nested_attributes_for :assignments

  # Virtual placeholder to define initial attributes.
  # This object is used to prepopulate the inventory check-in UI.
  def self.new_from_plan(plan)
    i = new
    i.period = plan.period
    i.assignments += plan.classroom.loaned_assignments
    i
  end

  def deletable?
    classroom.current_plan == plan
  end

  def return!(assignment)
    assignment.returned_at = Time.zone.now
    assignments << assignment
  end

  def sorted_assignments
    assignments.sort_by { |a| a.book_bag.global_id.to_i }
  end

  # For simple_form's benefit.
  def classroom_id
    classroom.id
  end
end