Class: Decidim::TimeTracker::Admin::CreateAssignation

Inherits:
Rectify::Command
  • Object
show all
Defined in:
app/commands/decidim/time_tracker/admin/create_assignation.rb

Overview

A command with all the business logic when creating a assignation

Instance Method Summary collapse

Constructor Details

#initialize(form, activity) ⇒ CreateAssignation

Returns a new instance of CreateAssignation.



8
9
10
11
# File 'app/commands/decidim/time_tracker/admin/create_assignation.rb', line 8

def initialize(form, activity)
  @form = form
  @activity = activity
end

Instance Method Details

#callObject

Creates the assignation if valid.

Broadcasts :ok if successful, :invalid otherwise.



16
17
18
19
20
21
22
23
24
25
# File 'app/commands/decidim/time_tracker/admin/create_assignation.rb', line 16

def call
  return broadcast(:invalid) if @form.invalid?

  ActiveRecord::Base.transaction do
    @user ||= existing_user || new_user
    create_assignation
  end

  broadcast(:ok)
end

#create_assignationObject



27
28
29
30
31
32
33
34
35
36
37
# File 'app/commands/decidim/time_tracker/admin/create_assignation.rb', line 27

def create_assignation
  Decidim.traceability.create!(
    Decidim::TimeTracker::Assignation,
    @form.current_user,
    activity: @activity,
    user: @user,
    status: :accepted,
    invited_at: Time.current,
    invited_by_user: @form.current_user
  )
end

#existing_userObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/commands/decidim/time_tracker/admin/create_assignation.rb', line 39

def existing_user
  return @existing_user if defined?(@existing_user)

  if @form.existing_user
    @existing_user = @form.user
  else
    @existing_user = User.find_by(
      email: @form.email,
      organization: @activity.task.time_tracker.component.organization
    )

    InviteUserAgain.call(@existing_user, "invite_private_user") if @existing_user && !@existing_user.invitation_accepted?
  end

  @existing_user
end

#new_userObject



56
57
58
59
60
61
62
# File 'app/commands/decidim/time_tracker/admin/create_assignation.rb', line 56

def new_user
  @new_user ||= InviteUser.call(user_form) do
    on(:ok) do |user|
      return user
    end
  end
end

#user_formObject



64
65
66
67
68
69
70
71
# File 'app/commands/decidim/time_tracker/admin/create_assignation.rb', line 64

def user_form
  OpenStruct.new(name: @form.name,
                 email: @form.email.downcase,
                 organization: @activity.task.time_tracker.component.organization,
                 admin: false,
                 invited_by: @form.current_user,
                 invitation_instructions: "invite_private_user")
end