Class: Crm::AgreementsController

Inherits:
CrmController show all
Includes:
Controllers::Workflowable
Defined in:
app/controllers/crm/agreements_controller.rb

Overview

Controller: agreements.

Constant Summary

Constants included from Controllers::ReferenceFindable

Controllers::ReferenceFindable::ID_EMBEDDED_PATTERNS

Constants included from Controllers::AnalyticsEvents

Controllers::AnalyticsEvents::MAX_QUEUED_EVENTS, Controllers::AnalyticsEvents::SESSION_KEY

Constants included from Controllers::ErrorRendering

Controllers::ErrorRendering::NON_CONTENT_PATH_PREFIXES

Instance Method Summary collapse

Methods included from Controllers::Workflowable

#render_workflow_error_stream, #render_workflow_success_stream, #workflow_action, #workflow_action_complete

Methods inherited from CrmController

#access_denied, #context_id, #context_object, #crm_home_path, #current_ability, #default_url_options, #download_temp, #get_tempfile_path_for_download, #init_status_job_collector, #initialize_crm_lazy_chunks, #persist_enqueued_status_jobs, #record_not_found, #redirect_to_job_or_fallback, #render_edit_action, #set_context, #set_download_path, #stash_file_for_temp_download, #sync_admin_presence_cookie, #touch_employee_last_seen

Methods inherited from ApplicationController

#account_impersonated?, #add_to_flash, #after_sign_in_path_for, #bypass_forgery_protection?, #chat_enabled?, #cloudflare_cleared?, #default_catalog, #default_url_options, #enable_turbo_frames, #find_publication, #fix_invalid_accept_header, #init_js_utils, #is_globals_call?, #layout_by_resource, #locale_store, #redirect_to, #require_employee_for_crm, #set_base_host, #set_real_ip, #set_report_errors_for, #should_render_layout?, #skip_layout_for_turbo_frame?, #stamp_impersonation_context, #tab_frame_breakout_request?, #warmlyyours_canada_ip?, #warmlyyours_ip?, #y

Methods included from Controllers::ReturnPathHandling

#check_for_return_path, #redirect_to_return_path_or_default

Methods included from Controllers::AnalyticsEvents

#consume_queued_analytics_events, #registration_lead_type, #track_event

Methods included from Controllers::DeviceDetection

#device_detector, #is_ie?

Methods included from Controllers::SubdomainDetection

#is_crm_request?, #is_www_request?, #json_request?

Methods included from Controllers::TurboSafeRedirect

#redirect_to

Methods included from Controllers::TrackingDetection

#bot_request?, #gdpr_country?, #gdpr_country_data, #prevent_bots, #set_tracking_cookie, #track_visitor?

Methods included from Controllers::AcceleratedFileSending

#send_file_accelerated, #send_upload_accelerated

Methods included from Controllers::ErrorRendering

#excp_string, #mail_to_for_error_reporting, #render_400, #render_404, #render_406, #render_410, #render_500, #render_invalid_authenticity_token, #render_ip_spoof_error, #render_unpermitted_parameters, #safe_referer_or_fallback

Methods included from Controllers::TurnstileVerification

#load_turnstile_script_tag, #turnstile_lazy_widget, #turnstile_script_tag, #turnstile_widget, #validate_turnstile!

Methods included from Controllers::CloudflareCaching

edge_cached, #edge_cached_action?, #reset_cloudflare_cache, #set_cloudflare_cache, #skip_edge_cache!, #skip_session

Methods included from Controllers::Webpackable

#preload_webpack_fonts, #webpack_css_include, #webpack_css_url, #webpack_js_include, #wpd_is_running?

Methods included from Controllers::Localizable

#cloudflare_country_locale, #determine_request_locale, #geocoder_locale, #guest_user_locale_check, #locale_optional_www_auth_path?, #param_locale, #set_locale, #set_request_locale, #skip_localization?, #warmlyyours_ip_locale

Methods included from Controllers::Authenticable

#access_denied, #authenticate_account, #authenticate_account!, #authenticate_account_from_login_token!, #check_is_a_manager, #check_is_a_sales_manager, #check_is_an_admin, #check_is_an_employee, #check_party, #clear_mismatched_guest_user, #create_guest_user, #credentials?, #current_or_guest_user, #current_or_guest_user_id_read_only, #current_user, #devise_mapping, #fully_logged_in?, #generate_bot_id, #guest_user, #identifiable?, #init_current_user, #initialize_guest, #load_context_user, #logging_in, #resource, #resource_name, #restrict_access_for_non_employees, #scrubbed_request_path, #user_object, #warn_on_session_guest_id_leak

Methods included from UrlsHelper

#catalog_breadcrumb_links, #catalog_link, #catalog_link_for_product_line, #catalog_link_for_sku, #cms_link, #delocalized_path, #path_to_sales_product_sku, #path_to_sales_product_sku_for_product_line, #path_to_sales_product_sku_for_product_line_slug, #product_line_from_catalog_link, #protocol_neutral_url, #sanitize_external_url, #valid_external_url?

Instance Method Details

#add_participantvoid

This method returns an undefined value.

POST /crm/agreements/:agreement_id/add_participant — adds a party as an
agreement participant, suggesting their customer's other contacts.



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'app/controllers/crm/agreements_controller.rb', line 106

def add_participant
  if (party_id = params.dig(:party_id).presence)
    @party = Party.find(party_id)
    @agreement_participant = AgreementParticipant.new(party: @party, preferred_language: @party.preferred_language)

    # After a participant is added we will pre-populate the drop with with all contacts of the customer of that party
    if @party.customer
      @suggested_contacts = @party.customer.contacts.active.where.not(id: @party.id).order(:full_name).to_a.map do |party|
        {
          text: party.to_s,
          id: party.id
        }
      end
    end

    respond_to do |format|
      format.turbo_stream
    end
  else
    head :forbidden
  end
end

#createvoid

This method returns an undefined value.

POST /crm/agreements — creates an agreement and its participants in one
nested-form save.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'app/controllers/crm/agreements_controller.rb', line 43

def create
  @agreement = Agreement.new(params[:agreement])
  authorize! :create, @agreement
  success = true

  # In order for nested contact points to save, the agreement participants must save
  if success
    # Russian doll nested form save (or contact points won't save)
    Agreement.transaction do
      success = @agreement.save &&
                @agreement.agreement_participants.all? do |ap|
                  ap.agreement = @agreement
                  ap.party.save && ap.save
                end
    end
  end
  respond_to do |format|
    if success
      format.html { redirect_to @agreement }
      format.json { render json: @agreement, status: :created, location: @agreement }
    else
      format.html { render action: 'new', status: :unprocessable_content }
      format.json { render json: @agreement.errors, status: :unprocessable_content }
    end
  end
end

#editvoid

This method returns an undefined value.

GET /crm/agreements/:id/edit — edit form for an existing agreement.



35
36
37
# File 'app/controllers/crm/agreements_controller.rb', line 35

def edit
  @agreement = Agreement.find(params[:id])
end

#indexvoid

This method returns an undefined value.

GET /crm/agreements — paginated agreement list.



9
10
11
12
# File 'app/controllers/crm/agreements_controller.rb', line 9

def index
  @agreements = Agreement.all
  @pagy, @agreements = pagy(@agreements.order(created_at: :desc))
end

#newvoid

This method returns an undefined value.

GET /crm/agreements/new — blank agreement form, optionally scoped to a
resource.



27
28
29
30
# File 'app/controllers/crm/agreements_controller.rb', line 27

def new
  resource = params[:resource]
  @agreement = Agreement.new(resource: resource)
end

#participant_lookupObject

Used by tom-select field on agreements/participants
if q is specified a global lookup is run
if party_id is specified, then a single party is looked up (used to initialize form on load typically)



96
97
98
99
100
# File 'app/controllers/crm/agreements_controller.rb', line 96

def participant_lookup
  @agreement = Agreement.find(params[:agreement_id]) if params[:agreement_id].present?
  results = AgreementParticipant.find_participants(@agreement, params)
  render json: results
end

#showvoid

This method returns an undefined value.

GET /crm/agreements/:id — a single agreement and its participants.



17
18
19
20
21
# File 'app/controllers/crm/agreements_controller.rb', line 17

def show
  @agreement = Agreement.find(params[:id])
  @participants = @agreement.agreement_participants
  # esignature_data = Api::Esignatures.retrieve_contract(@agreement.contract_number) if @agreement.contract_number.present?
end

#updatevoid

This method returns an undefined value.

PATCH/PUT /crm/agreements/:id — updates an agreement and its participants.



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'app/controllers/crm/agreements_controller.rb', line 73

def update
  @agreement = Agreement.find params[:id]
  authorize! :update, @agreement

  params[:agreement] ||= {}

  @agreement.assign_attributes(params[:agreement])
  @agreement.agreement_participants.each(&:valid?)
  begin
    if @agreement.save
      redirect_to_return_path_or_default(agreement_path(@agreement))
    else
      render_action(params[:edit_action])
    end
  rescue ActiveRecord::RecordNotUnique
    @agreement.errors.add(:base, 'Same participant have been listed twice')
    render_action(params[:edit_action])
  end
end