Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Expand
titlePIPEDRIVEgetRecent prepares the Pipedrive API for PIPEDRIVE custom to get the recent Deals

PIPEDRIVEgetRecent is passed the client object and the table of defined parameters.

PIPEDRIVEgetRecent formats the required endpoint and parameters to call PIPEDRIVEcustom to make the 'recents' API call. If the passed LastPollTime is 1, it defaults to poll for deals from the last 24 hours.

If successful, then we check the response for an indication that there are more items to be collected. If true, then PIPEDRIVEgetRecent is recursively called with a new start position to get the additional Deals and insert them into the returned table of Deals.

Code Block
languagelua
local function PIPEDRIVEgetRecent(T, C)   
   local P = {}
   if C.LastPollTime == 1 then 
      C.LastPollTime = os.time()-24*60*60   -- Default to 24 hours ago
   end 
   P.since_timestamp = os.date('!%Y-%m-%d %H:%M:%S',C.LastPollTime)
   P.items = C.items   
   P.start = C.index      
   local S, R = T:custom({api='recents',parameters=P,live=C.live})      
   if S then
      if R.additional_data.pagination.more_items_in_collection then
         C.index = R.additional_data.pagination.next_start
         local NextS, NextPage = PIPEDRIVEgetRecent(T,C)
         for i=1,#NextPage.data do
            table.insert(R.data,NextPage.data[i])
         end 
      end      
   end
   return S, R
end

return PIPEDRIVEgetRecent

Concepts used:

Expand
titlePIPEDRIVEcustom takes in any API request parameters to make a request and return the response

PIPEDRIVEcustom is a helper function designed to handle different API requests with Pipedrive.

It prepares the base Pipedrive URL, authorization details in the header, and any additional parameters to be passed in the URL of the request.

net.http.get{} is used to send the request to Pipedrive. The response is parsed and either the response or error response is returned.

Code Block
languagelua
local function PIPEDRIVEcustom(T, C)
   local Url = "https://"..T.domain..".pipedrive.com/api/v1/"..C.api
   -- Load access key
   if not C.parameters then C.parameters = {} end
   C.parameters.api_token = T.key
   -- Take into account if domain is nil
   if T.domain == '' then 
      error('Missing Pipedrive domain',3) 
   end
   -- Load any path parameters
   if C.pathParams then
      for k,v in pairs(C.pathParams) do 
         Url = Url:gsub('{'..k..'}',v)
      end
   end
   trace(Headers, Url, C.parameters)
   local R, Code = net.http.get{
      url=Url, 
      headers=Headers,
      parameters=C.parameters,
      live=C.live
   }
   if (C.live ~= true) then
      return false, "notlive"
   end
   R = json.parse{data=R}
   if Code ~= 200 then
      return false, R
   else
      return true, R
   end   
end

return PIPEDRIVEcustom

Concepts used:

...