Sha256: c195be1d62ecf59d4b015e22528940791363a69447cc79a33c72e0e7d3161815

Contents?: true

Size: 1.7 KB

Versions: 57

Compression:

Stored size: 1.7 KB

Contents

require "dorsale/search"
require "dorsale/polymorphic_id"

module Dorsale
  module Flyboy
    class Folder < ActiveRecord::Base
      self.table_name = "dorsale_flyboy_folders"

      include AASM
      include ::Dorsale::Search

      paginates_per 50

      aasm(column: "status", whiny_transitions: false) do
        state :open, initial: true
        state :closed

        event :close, if: :no_undone_tasks? do
          transitions from: [:open], to: :closed
        end

        event :open do
          transitions from: [:closed], to: :open
        end
      end

      belongs_to :folderable, polymorphic: true
      has_many :tasks, dependent: :destroy, as: :taskable

      validates :name, presence: true
      validates :status, inclusion: {
        in: proc { ::Dorsale::Flyboy::Folder.aasm.states.map(&:to_s) }
      }

      def initialize(*args)
        super
        self.progress = 0 if progress.nil?
      end

      def no_undone_tasks?
        tasks.where(done: false).count == 0
      end

      def revision
        "#{tracking} #{version}"
      end

      before_create :create_tracking

      def create_tracking
        dailycounter  = Folder.where("DATE(created_at) = ?", Date.today).count + 1
        self.tracking = "#{Time.now.strftime("%y%m%d")}-#{dailycounter}"
      end

      before_save :update_version

      def update_version
        self.version = 0 if self.version.nil?
        self.version = self.version + 1
      end

      def update_progress
        if tasks.count.zero?
          self.progress = 0
        else
          self.progress = tasks.sum(:progress) / tasks.count
        end
      end

      def update_progress!
        update_progress
        save
      end

    end
  end
end

Version data entries

57 entries across 57 versions & 1 rubygems

Version Path
dorsale-2.7.3 app/models/dorsale/flyboy/folder.rb
dorsale-2.7.2 app/models/dorsale/flyboy/folder.rb
dorsale-2.7.1 app/models/dorsale/flyboy/folder.rb
dorsale-2.7.0 app/models/dorsale/flyboy/folder.rb
dorsale-2.6.8 app/models/dorsale/flyboy/folder.rb
dorsale-2.6.7 app/models/dorsale/flyboy/folder.rb
dorsale-2.6.6 app/models/dorsale/flyboy/folder.rb
dorsale-2.6.5 app/models/dorsale/flyboy/folder.rb
dorsale-2.6.4 app/models/dorsale/flyboy/folder.rb
dorsale-2.6.3 app/models/dorsale/flyboy/folder.rb
dorsale-2.6.2 app/models/dorsale/flyboy/folder.rb
dorsale-2.6.1 app/models/dorsale/flyboy/folder.rb
dorsale-2.6.0 app/models/dorsale/flyboy/folder.rb
dorsale-2.5.0 app/models/dorsale/flyboy/folder.rb
dorsale-2.4.3 app/models/dorsale/flyboy/folder.rb
dorsale-2.4.2 app/models/dorsale/flyboy/folder.rb
dorsale-2.4.1 app/models/dorsale/flyboy/folder.rb
dorsale-2.4.0 app/models/dorsale/flyboy/folder.rb
dorsale-2.3.5 app/models/dorsale/flyboy/folder.rb
dorsale-2.3.4 app/models/dorsale/flyboy/folder.rb