Sha256: 29bca44005a8df3b34ab3793d26669e052285a6495bece712d5760f706144583

Contents?: true

Size: 1.68 KB

Versions: 27

Compression:

Stored size: 1.68 KB

Contents

require_dependency "renalware/modalities"

module Renalware
  module Modalities
    class Modality < ApplicationRecord
      include Accountable
      include PatientScope

      belongs_to :description, class_name: "Description"
      belongs_to :patient, touch: true
      belongs_to :reason, class_name: "Reason"

      scope :ordered, -> { order(ended_on: :desc, updated_at: :desc) }
      scope :started_on_reversed, -> { order(started_on: :desc, updated_at: :desc) }
      scope :last_started_on, -> { started_on_reversed.where(ended_on: nil) }

      validates :patient, presence: true
      validates :started_on, presence: true
      validates :description, presence: true
      validates :started_on, timeliness: { type: :date }
      validate :validate_modality_starts_later_than_previous, on: :create, if: :patient

      def terminate_by(user, on:)
        self.ended_on = on
        self.state = "terminated"
        save_by!(user)
      end

      def to_s
        description.name
      end

      def terminated?
        state == "terminated"
      end

      private

      def validate_modality_starts_later_than_previous
        unless started_later_than_previous?
          errors.add(:started_on, "can't be before previous modality's start date.")
        end
      end

      def started_later_than_previous?
        if (previous_modality = patient.modalities.last_started_on.first)
          started_on.present? && started_on >= previous_modality.started_on
        else
          true
        end
      end

      def terminate!(successor)
        self.ended_on = successor.started_on
        self.state = "terminated"
        self.by = successor.by
        save!
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
renalware-core-2.0.8 app/models/renalware/modalities/modality.rb
renalware-core-2.0.7 app/models/renalware/modalities/modality.rb
renalware-core-2.0.5 app/models/renalware/modalities/modality.rb
renalware-core-2.0.4 app/models/renalware/modalities/modality.rb
renalware-core-2.0.3 app/models/renalware/modalities/modality.rb
renalware-core-2.0.2 app/models/renalware/modalities/modality.rb
renalware-core-2.0.1 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc13 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc11 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc10 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc9 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc8 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc7 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc6 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc5 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc4 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc3 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.rc1 app/models/renalware/modalities/modality.rb
renalware-core-2.0.0.pre.beta12 app/models/renalware/modalities/modality.rb