Sha256: 7f239d4ae5b5251f7feea0dfc52d851f037963d3534eb3142a6c27ff7f2bef4c

Contents?: true

Size: 1.77 KB

Versions: 27

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

module Decidim
  module Meetings
    # This command is executed when the user closes a Meeting from the public
    # views.
    class CloseMeeting < Decidim::Command
      # Initializes a CloseMeeting Command.
      #
      # form - The form from which to get the data.
      # meeting - The current instance of the page to be closed.
      def initialize(form, meeting)
        @form = form
        @meeting = meeting
      end

      # Closes the meeting if valid.
      #
      # Broadcasts :ok if successful, :invalid otherwise.
      def call
        return broadcast(:invalid) if form.invalid?

        transaction do
          close_meeting
          link_proposals
        end

        broadcast(:ok)
      end

      private

      attr_reader :form, :meeting

      def close_meeting
        parsed_closing_report = Decidim::ContentProcessor.parse(form.closing_report, current_organization: form.current_organization).rewrite

        Decidim.traceability.perform_action!(
          :close,
          meeting,
          form.current_user
        ) do
          meeting.update!(
            attendees_count: form.attendees_count,
            closed_at: form.closed_at,
            closing_visible: true,
            closing_report: { I18n.locale => parsed_closing_report }
          )
        end

        Decidim::EventsManager.publish(
          event: "decidim.events.meetings.meeting_closed",
          event_class: Decidim::Meetings::CloseMeetingEvent,
          resource: meeting,
          followers: meeting.followers
        )
      end

      def proposals
        meeting.sibling_scope(:proposals).where(id: @form.proposal_ids)
      end

      def link_proposals
        meeting.link_resources(proposals, "proposals_from_meeting")
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
decidim-meetings-0.29.2 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.28.5 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.29.1 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.28.4 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.27.9 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.29.0 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.28.3 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.27.8 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.29.0.rc4 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.29.0.rc3 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.29.0.rc2 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.29.0.rc1 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.28.2 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.27.7 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.28.1 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.27.6 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.28.0 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.27.5 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.28.0.rc5 app/commands/decidim/meetings/close_meeting.rb
decidim-meetings-0.28.0.rc4 app/commands/decidim/meetings/close_meeting.rb