next-l/enju_leaf

View on GitHub
lib/tasks/enju_circulation_tasks.rake

Summary

Maintainability
Test Coverage
F
45%
require 'active_record/fixtures'
require 'tasks/checkout'
require 'tasks/circulation_status'
require 'tasks/reserve'
require 'tasks/use_restriction'

namespace :enju_circulation do
  desc 'create initial records for enju_circulation'
  task setup: :environment do
    ActiveRecord::FixtureSet.create_fixtures('db/fixtures/enju_circulation', 'checkout_types')
    Dir.glob(Rails.root.to_s + '/db/fixtures/enju_circulation/*.yml').each do |file|
      ActiveRecord::FixtureSet.create_fixtures('db/fixtures/enju_circulation', File.basename(file, '.*'))
    end

    Rake::Task['enju_event:setup'].invoke

    puts 'initial fixture files loaded.'
  end

  desc 'Calculate stats'
  task stat: :environment do
    UserCheckoutStat.calculate_stat
    UserReserveStat.calculate_stat
    # ManifestationCheckoutStat.calculate_stat
    ManifestationReserveStat.calculate_stat
  end

  desc 'Expire circulations and reservations'
  task expire: :environment do
    Reserve.expire
    Basket.expire
  end

  desc 'Sending due date notifications'
  task send_notification: :environment do
    Checkout.send_due_date_notification
    Checkout.send_overdue_notification
  end

  desc "upgrade enju_circulation"
  task upgrade: :environment do
    Rake::Task['statesman:backfill_most_recent'].invoke('ManifestationCheckoutStat')
    Rake::Task['statesman:backfill_most_recent'].invoke('ManifestationReserveStat')
    Rake::Task['statesman:backfill_most_recent'].invoke('UserCheckoutStat')
    Rake::Task['statesman:backfill_most_recent'].invoke('UserReserveStat')
    Rake::Task['statesman:backfill_most_recent'].invoke('Reserve')
    puts 'enju_circulation: The upgrade completed successfully.'
  end

  desc "migrate old checkout records"
  task migrate_old_checkout: :environment do
    Checkout.transaction do
      update_checkout
    end
  end

  namespace :export do
    desc 'Export checkouts'
    task checkout: :environment do
      puts ['checked_out_at', 'due_date', 'item_identifier', 'call_number', 'shelf', 'carrier_type', 'title', 'username', 'full_name', 'user_number'].join("\t")
      Checkout.where(checkin_id: nil).find_each do |c|
        if c.item
          shelf = c.shelf || c.item.shelf
          puts [
            c.created_at,
            c.due_date,
            c.item.item_identifier,
            c.item.call_number,
            shelf.try(:name),
            c.item.manifestation.carrier_type.name,
            c.item.manifestation.original_title,
            c.user.try(:username),
            c.user.try(:profile).try(:full_name),
            c.user.try(:profile).try(:user_number),
          ].join("\t")
    end
      end
    end
  end
end