mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-11 09:41:40 -05:00
49 lines
965 B
Ruby
49 lines
965 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Visits
|
|
class BulkUpdate
|
|
attr_reader :user, :visit_ids, :status, :errors
|
|
|
|
def initialize(user, visit_ids, status)
|
|
@user = user
|
|
@visit_ids = visit_ids
|
|
@status = status
|
|
@errors = []
|
|
end
|
|
|
|
def call
|
|
validate
|
|
return false if errors.any?
|
|
|
|
update_visits
|
|
end
|
|
|
|
private
|
|
|
|
def validate
|
|
if visit_ids.blank?
|
|
errors << 'No visits selected'
|
|
return
|
|
end
|
|
|
|
return if Visit.statuses.keys.include?(status)
|
|
|
|
errors << 'Invalid status'
|
|
end
|
|
|
|
def update_visits
|
|
visits = user.visits.where(id: visit_ids)
|
|
|
|
if visits.empty?
|
|
errors << 'No matching visits found'
|
|
return false
|
|
end
|
|
|
|
# rubocop:disable Rails/SkipsModelValidations
|
|
updated_count = visits.update_all(status: status)
|
|
# rubocop:enable Rails/SkipsModelValidations
|
|
|
|
{ count: updated_count, visits: visits }
|
|
end
|
|
end
|
|
end
|