Sha256: 7b65d88b2ea5fdb43d156ea70be96d26d91a338028f73b122f39094cca06aa00

Contents?: true

Size: 1.1 KB

Versions: 2

Compression:

Stored size: 1.1 KB

Contents

module Ecm::TimeTracking
  class Entry < ActiveRecord::Base
    DEFAULT_DUE_HOURS_PER_DAY = 8
    DEFAULT_BREAK_LENGTH_IN_MINUTES = 45

    belongs_to :tracker, class_name: Configuration.tracker_class_name, foreign_key: 'tracker_id'
    belongs_to :entry_type

    validates :tracker, :begin_at, :end_at, presence: true

    after_initialize :set_defaults, if: :new_record?

    def break_length_in_minutes=(break_length_in_minutes)
      self.break_length_in_seconds = break_length_in_minutes.to_i * 60
    end

    def break_length_in_minutes
      (break_length_in_seconds || 0) / 60
    end

    def length
      end_at - begin_at
    end

    def overtime
      length - due_in_seconds - (break_length_in_seconds || 0)
    end

    def due_in_seconds
      entry_type.try(:due_in_seconds) || 0
    end

    private

    def set_defaults
      self.end_at                  ||= Time.zone.now.change(sec: 0)
      self.begin_at                ||= self.end_at - DEFAULT_DUE_HOURS_PER_DAY.hours - DEFAULT_BREAK_LENGTH_IN_MINUTES.minutes
      self.break_length_in_minutes ||= DEFAULT_BREAK_LENGTH_IN_MINUTES
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ecm_time_tracking-0.0.4 app/models/ecm/time_tracking/entry.rb
ecm_time_tracking-0.0.3 app/models/ecm/time_tracking/entry.rb