From 6a74aaa42af83a92c1ab9b1322bf8728d5671daf Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Fri, 23 Mar 2018 17:25:58 +0100 Subject: [PATCH] [fix #1697] Pipedrive: use a job to process an admin creation --- .../manager/demandes_controller.rb | 7 ++- app/jobs/pipedrive_accepts_deals_job.rb | 5 ++ app/services/pipedrive_service.rb | 48 ++++++++++++++++--- config/initializers/urls.rb | 1 + 4 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 app/jobs/pipedrive_accepts_deals_job.rb diff --git a/app/controllers/manager/demandes_controller.rb b/app/controllers/manager/demandes_controller.rb index a35930212..acfbb489c 100644 --- a/app/controllers/manager/demandes_controller.rb +++ b/app/controllers/manager/demandes_controller.rb @@ -8,7 +8,12 @@ module Manager administrateur = current_administration.invite_admin(create_administrateur_params[:email]) if administrateur.errors.empty? - PipedriveService.update_person_owner(create_administrateur_params[:person_id], PipedriveService::PIPEDRIVE_CAMILLE_ID) + PipedriveAcceptsDealsJob.perform_later( + create_administrateur_params[:person_id], + PipedriveService::PIPEDRIVE_CAMILLE_ID, + PipedriveService::PIPEDRIVE_ADMIN_CENTRAL_STOCK_STAGE_ID + ) + flash.notice = "Administrateur créé" redirect_to manager_demandes_path else diff --git a/app/jobs/pipedrive_accepts_deals_job.rb b/app/jobs/pipedrive_accepts_deals_job.rb new file mode 100644 index 000000000..4df5a0406 --- /dev/null +++ b/app/jobs/pipedrive_accepts_deals_job.rb @@ -0,0 +1,5 @@ +class PipedriveAcceptsDealsJob < ApplicationJob + def perform(person_id, owner_id, stage_id) + PipedriveService.accept_deals_from_person(person_id, owner_id, stage_id) + end +end diff --git a/app/services/pipedrive_service.rb b/app/services/pipedrive_service.rb index 039ee93c8..c0c698091 100644 --- a/app/services/pipedrive_service.rb +++ b/app/services/pipedrive_service.rb @@ -4,13 +4,15 @@ class PipedriveService PIPEDRIVE_ROBOT_ID = '2748449' PIPEDRIVE_CAMILLE_ID = '3189424' + PIPEDRIVE_ALL_NOT_DELETED_DEALS = 'all_not_deleted' + + PIPEDRIVE_ADMIN_CENTRAL_STOCK_STAGE_ID = 35 + class << self - def update_person_owner(person_id, owner_id) - url = PIPEDRIVE_PEOPLE_URL + "/#{person_id}?api_token=#{PIPEDRIVE_TOKEN}" - - params = { owner_id: owner_id } - - RestClient.put(url, params.to_json, { content_type: :json }) + def accept_deals_from_person(person_id, owner_id, stage_id) + waiting_deal_ids = fetch_waiting_deal_ids(person_id) + waiting_deal_ids.each { |deal_id| update_deal_owner_and_stage(deal_id, owner_id, stage_id) } + update_person_owner(person_id, owner_id) end def fetch_people_demandes @@ -34,5 +36,39 @@ class PipedriveService } end end + + private + + def fetch_waiting_deal_ids(person_id) + url = [PIPEDRIVE_PEOPLE_URL, person_id, "deals"].join('/') + + params = { + start: 0, + limit: 500, + status: PIPEDRIVE_ALL_NOT_DELETED_DEALS, + api_token: PIPEDRIVE_TOKEN + } + + response = RestClient.get(url, params: params) + json = JSON.parse(response.body) + + json['data'].map { |datum| datum['id'] } + end + + def update_deal_owner_and_stage(deal_id, owner_id, stage_id) + url = PIPEDRIVE_DEALS_URL + "/#{deal_id}?api_token=#{PIPEDRIVE_TOKEN}" + + params = { user_id: owner_id, stage_id: stage_id } + + RestClient.put(url, params.to_json, { content_type: :json }) + end + + def update_person_owner(person_id, owner_id) + url = PIPEDRIVE_PEOPLE_URL + "/#{person_id}?api_token=#{PIPEDRIVE_TOKEN}" + + params = { owner_id: owner_id } + + RestClient.put(url, params.to_json, { content_type: :json }) + end end end diff --git a/config/initializers/urls.rb b/config/initializers/urls.rb index 8c2306361..17bccab1a 100644 --- a/config/initializers/urls.rb +++ b/config/initializers/urls.rb @@ -6,3 +6,4 @@ end PIPEDRIVE_API_URL = 'https://api.pipedrive.com/v1/' PIPEDRIVE_PEOPLE_URL = URI.join(PIPEDRIVE_API_URL, 'persons').to_s +PIPEDRIVE_DEALS_URL = URI.join(PIPEDRIVE_API_URL, 'deals').to_s