Sha256: 79bc56b8d3699b8d2ee8377e732295b2a139358567c54055f4957bdb4ea093be

Contents?: true

Size: 1.64 KB

Versions: 42

Compression:

Stored size: 1.64 KB

Contents

# frozen_string_literal: true

require_dependency "renalware/hd"
require "renalware/week_period"
##
# Returns a hospital unit's diary for the requested week (passed to #new as a WeekPeriod
# value object).
#
module Renalware
  module HD
    module Scheduling
      class FindOrCreateDiaryByWeekQuery
        attr_reader :unit_id, :period, :by, :relation

        def initialize(unit_id:, week_period:, by:, relation: WeeklyDiary.all)
          @relation = relation
          @period = week_period
          @unit_id = unit_id
          @by = by
        end

        def call
          find_or_create_diary
        end

        private

        # Find the diary for the current unit/week/year, or, if for example if a user wants to fill
        # next week's diary and it does not yet exist, create it
        # NB we _always_ return a diary from this method - whether it is found or built just-in-time
        def find_or_create_diary
          attrs = {
            hospital_unit_id: unit_id,
            week_number: period.week_number,
            year: period.year,
            master: false
          }
          relation.find_by(**attrs) || build_diary(**attrs)
        end

        # Create a new Weekly diary for the current week/year/unit
        # Add in DiaryPeriods for each currently defined diurnal period eg am pm eve
        def build_diary(attrs)
          master_diary = FindOrCreateMasterDiary.for_unit(unit_id, by)
          diary = WeeklyDiary.create!(**attrs, by: by, master_diary: master_diary)
          # Reload the diary using the supplied relation (might be egager_loads etc)
          relation.find(diary.id)
        end
      end
    end
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
renalware-core-2.0.159 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.158 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.157 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.156 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.155 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.153 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.152 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.151 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.149 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.148 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.147 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.146 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.145 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.144 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.143 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.142 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.141 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.140 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.139 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb
renalware-core-2.0.138 app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb