From e71d3a76faafb24de1aa17ad58253baa080d3d03 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Thu, 5 Apr 2018 15:59:24 +0200 Subject: [PATCH] Refactor Pipedrive: create adapters and an API files --- .../manager/demandes_controller.rb | 4 +- app/lib/pipedrive/api.rb | 9 ++ app/lib/pipedrive/deal_adapter.rb | 53 +++++++++ app/lib/pipedrive/person_adapter.rb | 34 ++++++ app/services/pipedrive_service.rb | 101 ++---------------- app/views/manager/demandes/index.html.erb | 12 +-- 6 files changed, 111 insertions(+), 102 deletions(-) create mode 100644 app/lib/pipedrive/api.rb create mode 100644 app/lib/pipedrive/deal_adapter.rb create mode 100644 app/lib/pipedrive/person_adapter.rb diff --git a/app/controllers/manager/demandes_controller.rb b/app/controllers/manager/demandes_controller.rb index 722030215..09690f077 100644 --- a/app/controllers/manager/demandes_controller.rb +++ b/app/controllers/manager/demandes_controller.rb @@ -10,7 +10,7 @@ module Manager if administrateur.errors.empty? PipedriveAcceptsDealsJob.perform_later( create_administrateur_params[:person_id], - PipedriveService::PIPEDRIVE_CAMILLE_ID, + Pipedrive::DealAdapter::PIPEDRIVE_CAMILLE_ID, create_administrateur_params[:stage_id] ) @@ -26,7 +26,7 @@ module Manager def refuse_administrateur PipedriveRefusesDealsJob.perform_later( refuse_administrateur_params[:person_id], - PipedriveService::PIPEDRIVE_CAMILLE_ID + Pipedrive::DealAdapter::PIPEDRIVE_CAMILLE_ID ) AdministrationMailer diff --git a/app/lib/pipedrive/api.rb b/app/lib/pipedrive/api.rb new file mode 100644 index 000000000..bf4196961 --- /dev/null +++ b/app/lib/pipedrive/api.rb @@ -0,0 +1,9 @@ +class Pipedrive::API + def self.put(url, params) + RestClient.put(url, params, { content_type: :json }) + end + + def self.get(url, params) + RestClient.get(url, params: params) + end +end diff --git a/app/lib/pipedrive/deal_adapter.rb b/app/lib/pipedrive/deal_adapter.rb new file mode 100644 index 000000000..f96bc37e1 --- /dev/null +++ b/app/lib/pipedrive/deal_adapter.rb @@ -0,0 +1,53 @@ +class Pipedrive::DealAdapter + PIPEDRIVE_ADMIN_CENTRAL_STOCK_STAGE_ID = 35 + PIPEDRIVE_REGIONS_STOCK_STAGE_ID = 24 + PIPEDRIVE_PREFECTURES_STOCK_STAGE_ID = 20 + PIPEDRIVE_DEPARTEMENTS_STOCK_STAGE_ID = 30 + PIPEDRIVE_COMMUNES_STOCK_STAGE_ID = 40 + PIPEDRIVE_ORGANISMES_STOCK_STAGE_ID = 1 + PIPEDRIVE_ORGANISMES_REFUSES_STOCK_STAGE_ID = 45 + + PIPEDRIVE_ALL_NOT_DELETED_DEALS = 'all_not_deleted' + + PIPEDRIVE_LOST_STATUS = "lost" + PIPEDRIVE_LOST_REASON = "refusé depuis DS" + + PIPEDRIVE_CAMILLE_ID = '3189424' + + def self.refuse_deal(deal_id, owner_id) + url = PIPEDRIVE_DEALS_URL + "/#{deal_id}?api_token=#{PIPEDRIVE_TOKEN}" + + params = { + user_id: owner_id, + stage_id: PIPEDRIVE_ORGANISMES_REFUSES_STOCK_STAGE_ID, + status: PIPEDRIVE_LOST_STATUS, + lost_reason: PIPEDRIVE_LOST_REASON + } + + Pipedrive::API.put(url, params.to_json) + end + + def self.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 = Pipedrive::API.get(url, params) + json_data = JSON.parse(response.body)['data'] + + json_data.map { |datum| datum['id'] } + end + + def self.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 } + + Pipedrive::API.put(url, params.to_json) + end +end diff --git a/app/lib/pipedrive/person_adapter.rb b/app/lib/pipedrive/person_adapter.rb new file mode 100644 index 000000000..d928bd6c9 --- /dev/null +++ b/app/lib/pipedrive/person_adapter.rb @@ -0,0 +1,34 @@ +class Pipedrive::PersonAdapter + PIPEDRIVE_POSTE_ATTRIBUTE_ID = '33a790746f1713d712fe97bcce9ac1ca6374a4d6' + PIPEDRIVE_ROBOT_ID = '2748449' + + def self.get_demandes_from_persons_owned_by_robot + params = { + start: 0, + limit: 500, + user_id: PIPEDRIVE_ROBOT_ID, + api_token: PIPEDRIVE_TOKEN + } + + response = Pipedrive::API.get(PIPEDRIVE_PEOPLE_URL, params) + json_data = JSON.parse(response.body)['data'] + + json_data.map do |datum| + { + person_id: datum['id'], + nom: datum['name'], + poste: datum[PIPEDRIVE_POSTE_ATTRIBUTE_ID], + email: datum.dig('email', 0, 'value'), + organisation: datum['org_name'] + } + end + end + + def self.update_person_owner(person_id, owner_id) + url = PIPEDRIVE_PEOPLE_URL + "/#{person_id}?api_token=#{PIPEDRIVE_TOKEN}" + + params = { owner_id: owner_id } + + Pipedrive::API.put(url, params.to_json) + end +end diff --git a/app/services/pipedrive_service.rb b/app/services/pipedrive_service.rb index 583874835..8e4261ae7 100644 --- a/app/services/pipedrive_service.rb +++ b/app/services/pipedrive_service.rb @@ -1,106 +1,19 @@ class PipedriveService - PIPEDRIVE_POSTE_ATTRIBUTE_ID = '33a790746f1713d712fe97bcce9ac1ca6374a4d6' - - PIPEDRIVE_ROBOT_ID = '2748449' - PIPEDRIVE_CAMILLE_ID = '3189424' - - PIPEDRIVE_ALL_NOT_DELETED_DEALS = 'all_not_deleted' - - PIPEDRIVE_LOST_STATUS = "lost" - PIPEDRIVE_LOST_REASON = "refusé depuis DS" - - PIPEDRIVE_ADMIN_CENTRAL_STOCK_STAGE_ID = 35 - PIPEDRIVE_REGIONS_STOCK_STAGE_ID = 24 - PIPEDRIVE_PREFECTURES_STOCK_STAGE_ID = 20 - PIPEDRIVE_DEPARTEMENTS_STOCK_STAGE_ID = 30 - PIPEDRIVE_COMMUNES_STOCK_STAGE_ID = 40 - PIPEDRIVE_ORGANISMES_STOCK_STAGE_ID = 1 - PIPEDRIVE_ORGANISMES_REFUSES_STOCK_STAGE_ID = 45 - class << self 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) + waiting_deal_ids = Pipedrive::DealAdapter.fetch_waiting_deal_ids(person_id) + waiting_deal_ids.each { |deal_id| Pipedrive::DealAdapter.update_deal_owner_and_stage(deal_id, owner_id, stage_id) } + Pipedrive::PersonAdapter.update_person_owner(person_id, owner_id) end def refuse_deals_from_person(person_id, owner_id) - waiting_deal_ids = fetch_waiting_deal_ids(person_id) - waiting_deal_ids.each { |deal_id| refuse_deal(deal_id, owner_id) } - update_person_owner(person_id, owner_id) + waiting_deal_ids = Pipedrive::DealAdapter.fetch_waiting_deal_ids(person_id) + waiting_deal_ids.each { |deal_id| Pipedrive::DealAdapter.refuse_deal(deal_id, owner_id) } + Pipedrive::PersonAdapter.update_person_owner(person_id, owner_id) end def get_demandes - get_demandes_from_persons_owned_by_robot - end - - def get_demandes_from_persons_owned_by_robot - params = { - start: 0, - limit: 500, - user_id: PIPEDRIVE_ROBOT_ID, - api_token: PIPEDRIVE_TOKEN - } - - response = RestClient.get(PIPEDRIVE_PEOPLE_URL, { params: params }) - json_data = JSON.parse(response.body)['data'] - - json_data.map do |datum| - { - person_id: datum['id'], - nom: datum['name'], - poste: datum[PIPEDRIVE_POSTE_ATTRIBUTE_ID], - email: datum.dig('email', 0, 'value'), - organisation: datum['org_name'] - } - end - end - - private - - def refuse_deal(deal_id, owner_id) - url = PIPEDRIVE_DEALS_URL + "/#{deal_id}?api_token=#{PIPEDRIVE_TOKEN}" - - params = { - user_id: owner_id, - stage_id: PIPEDRIVE_ORGANISMES_REFUSES_STOCK_STAGE_ID, - status: PIPEDRIVE_LOST_STATUS, - lost_reason: PIPEDRIVE_LOST_REASON - } - - RestClient.put(url, params.to_json, { content_type: :json }) - end - - 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 }) + Pipedrive::PersonAdapter.get_demandes_from_persons_owned_by_robot end end end diff --git a/app/views/manager/demandes/index.html.erb b/app/views/manager/demandes/index.html.erb index 2249e5285..f662a32a1 100644 --- a/app/views/manager/demandes/index.html.erb +++ b/app/views/manager/demandes/index.html.erb @@ -33,12 +33,12 @@ <%= form_tag(manager_demandes_create_administrateur_path) do -%> <%= select_tag "stage_id", options_for_select({ - "administration centrale" => PipedriveService::PIPEDRIVE_ADMIN_CENTRAL_STOCK_STAGE_ID, - "région" => PipedriveService::PIPEDRIVE_REGIONS_STOCK_STAGE_ID, - "préfecture" => PipedriveService::PIPEDRIVE_PREFECTURES_STOCK_STAGE_ID, - "département" =>PipedriveService::PIPEDRIVE_DEPARTEMENTS_STOCK_STAGE_ID, - "commune" => PipedriveService::PIPEDRIVE_COMMUNES_STOCK_STAGE_ID, - "organisme" => PipedriveService::PIPEDRIVE_ORGANISMES_STOCK_STAGE_ID + "administration centrale" => Pipedrive::DealAdapter::PIPEDRIVE_ADMIN_CENTRAL_STOCK_STAGE_ID, + "région" => Pipedrive::DealAdapter::PIPEDRIVE_REGIONS_STOCK_STAGE_ID, + "préfecture" => Pipedrive::DealAdapter::PIPEDRIVE_PREFECTURES_STOCK_STAGE_ID, + "département" =>Pipedrive::DealAdapter::PIPEDRIVE_DEPARTEMENTS_STOCK_STAGE_ID, + "commune" => Pipedrive::DealAdapter::PIPEDRIVE_COMMUNES_STOCK_STAGE_ID, + "organisme" => Pipedrive::DealAdapter::PIPEDRIVE_ORGANISMES_STOCK_STAGE_ID }), style: 'margin-bottom: 20px; width: inherit;' %>