Refactor Pipedrive: create adapters and an API files

This commit is contained in:
gregoirenovel 2018-04-05 15:59:24 +02:00
parent 82d6f0b8a8
commit e71d3a76fa
6 changed files with 111 additions and 102 deletions

View file

@ -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

9
app/lib/pipedrive/api.rb Normal file
View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;' %>