class Decidim::Meetings::Admin::CreateAgenda
panel.
This command is executed when the user creates a Meeting from the admin
def call
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