Sha256: 9b81701ab69655ede9260a3555c34a6a3e5b08bc5d31d2840df1a99973b49829

Contents?: true

Size: 1.73 KB

Versions: 104

Compression:

Stored size: 1.73 KB

Contents

# frozen_string_literal: true

require_dependency "renalware/clinics"
require_dependency "renalware/success"
require_dependency "renalware/failure"

module Renalware
  module Clinics
    class CreateClinicVisit
      def self.call(patient, params)
        new(patient, params).call
      end

      def initialize(patient, params)
        @patient = patient
        @params = params
        @built_from_appointment_id = params.delete(:built_from_appointment_id)
      end

      def call
        ClinicVisit.transaction do
          visit = patient.clinic_visits.new(params)
          objects = OpenStruct.new(clinic_visit: visit, appointment: appointment)
          if visit.save && update_appointment_with(visit.id)
            return ::Renalware::Success.new(objects)
          else
            return ::Renalware::Failure.new(objects)
          end
        end
      end

      private

      # If the visit is being built from an appointment, e.g. a user opted to create the
      # visit from the Appointments list, we will have :built_from_appointment_id
      # in the params (its in the #new form) so we can fetch the appointment and update it to
      # indicate the visit that the appointment has transitioned to. This is currently only
      # used to provide a link to it from the Appointments list.
      def update_appointment_with(visit_id)
        return true if appointment.blank?

        appointment.becomes_visit_id = visit_id
        appointment.save
      end

      def appointment
        @appointment ||= begin
          if built_from_appointment_id.present?
            patient.appointments.find(built_from_appointment_id)
          end
        end
      end

      attr_reader :params, :patient, :built_from_appointment_id
    end
  end
end

Version data entries

104 entries across 104 versions & 1 rubygems

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