class Decidim::Meetings::Admin::CreateAgenda

panel.
This command is executed when the user creates a Meeting from the admin

def call

Broadcasts :ok if successful, :invalid otherwise.

Creates the agenda if valid.
def call
  return broadcast(:invalid) if @form.invalid?
  transaction do
    create_agenda!
    create_agenda_items
  end
  broadcast(:ok, @agenda)
end

def create_agenda!

def create_agenda!
  @agenda = Decidim.traceability.create!(
    Agenda,
    @form.current_user,
    title: @form.title,
    visible: @form.visible,
    meeting: @meeting
  )
end

def create_agenda_item(form_agenda_item)

def create_agenda_item(form_agenda_item)
  agenda_item_attributes = {
    title: form_agenda_item.title,
    description: form_agenda_item.description,
    position: form_agenda_item.position,
    duration: form_agenda_item.duration,
    parent_id: form_agenda_item.parent_id,
    agenda: @agenda
  }
  create_nested_model(form_agenda_item, agenda_item_attributes, @form.agenda_items) do |agenda_item|
    form_agenda_item.agenda_item_children.each do |form_agenda_item_child|
      agenda_item_child_attributes = {
        title: form_agenda_item_child.title,
        description: form_agenda_item_child.description,
        position: form_agenda_item_child.position,
        duration: form_agenda_item_child.duration,
        parent_id: agenda_item.id,
        agenda: @agenda
      }
      create_nested_model(form_agenda_item_child, agenda_item_child_attributes, agenda_item.agenda_item_children)
    end
  end
end

def create_agenda_items

def create_agenda_items
  @form.agenda_items.each do |form_agenda_item|
    create_agenda_item(form_agenda_item)
  end
end

def create_nested_model(form, attributes, _agenda_item_children)

def create_nested_model(form, attributes, _agenda_item_children)
  record = Decidim::Meetings::AgendaItem.find_or_create_by!(attributes)
  yield record if block_given?
  if record.persisted?
    if form.deleted?
      record.destroy!
    else
      record.update!(attributes)
    end
  else
    record.save!
  end
end

def initialize(form, meeting)

def initialize(form, meeting)
  @form = form
  @meeting = meeting
  @agenda = nil
end