Skip to content

Commit

Permalink
feat: create time module and connection to client
Browse files Browse the repository at this point in the history
  • Loading branch information
HagenFritz committed Nov 27, 2024
1 parent acad276 commit e2a1d7c
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 6 deletions.
6 changes: 1 addition & 5 deletions ProPyCore/access/rfis.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def get(self, company_id, project_id, page=1, per_page=100):
page : int, default 1
page number
per_page : int, default 100
number of companies to include
number of rfis to include per page
Returns
-------
Expand All @@ -43,10 +43,6 @@ def get(self, company_id, project_id, page=1, per_page=100):
"per_page": per_page
}

headers = {
"Procore-Company-Id": f"{company_id}"
}

rfi_selection = self.get_request(
api_url=f"{self.endpoint}/{project_id}/rfis",
additional_headers=headers,
Expand Down
5 changes: 5 additions & 0 deletions ProPyCore/access/time/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from .timecards import Timecards

class Time:
def __init__(self, access_token, server_url):
self.timecards = Timecards(access_token, server_url)
96 changes: 96 additions & 0 deletions ProPyCore/access/time/timecards.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@

from ..base import Base
from ...exceptions import NotFoundItemError

class Timecards(Base):
def __init__(self, access_token, server_url) -> None:
super().__init__(access_token, server_url)
self.endpoint = "/rest" # very basic since timecards can be at project and company levels

def get(self, company_id, project_id, page=1, per_page=100):
"""
Returns a list of all timecard data for a given project: https://developers.procore.com/reference/rest/timecard-entries?version=latest
Parameters
----------
company_id : int
unique identifier for the company
prject_id : int
unique identifier for the project
page : int, default 1
page number
per_page : int, default 100
number of rfis to include per page
Returns
-------
timecards : list of dict
available timecard data
"""
headers = {
"Procore-Company-Id": f"{company_id}"
}

n_timecards = 1
timecards = []
while n_timecards > 0:
params = {
"project_id": project_id,
"page": page,
"per_page": per_page
}

timecard_selection = self.get_request(
api_url=f"{self.endpoint}/v1.0/projects/{project_id}/timecard_entries",
additional_headers=headers,
params=params
)

n_timecards = len(timecard_selection)
timecards += timecard_selection
page += 1

return timecards

def get_timecards_for_pay_period(self, company_id, page=1, per_page=100):
"""
Return a list of all timecard data for the given pay period: https://developers.procore.com/reference/rest/timesheets?version=latest#list-timecard-data
Parameters
----------
company_id : int
unique identifier for the company
page : int, default 1
page number
per_page : int, default 100
number of rfis to include per page
Returns
-------
timecards : list of dict
available timecard data
"""
headers = {
"Procore-Company-Id": f"{company_id}"
}

n_timecards = 1
timecards = []
while n_timecards > 0:
params = {
"company_id": company_id,
"page": page,
"per_page": per_page
}

timecard_selection = self.get_request(
api_url=f"{self.endpoint}/v1.0/companies/{company_id}/timesheets",
additional_headers=headers,
params=params
)

n_timecards = len(timecard_selection)
timecards += timecard_selection
page += 1

return timecards
4 changes: 3 additions & 1 deletion ProPyCore/procore.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from .exceptions import *
from .access import companies, generic_tools, projects, documents, rfis, directory, submittals, tasks, budgets, direct_costs, cost_codes
from .access import companies, generic_tools, projects, documents, rfis, directory, submittals, tasks, budgets, direct_costs, cost_codes, time
import requests

class Procore:
Expand Down Expand Up @@ -57,6 +57,8 @@ def __init__(self, client_id, client_secret, redirect_uri, base_url, oauth_url)
self.budgets = budgets.Budgets(access_token=self.__access_token, server_url=self.__base_url)
self.direct_costs = direct_costs.DirectCosts(access_token=self.__access_token, server_url=self.__base_url)
self.cost_codes = cost_codes.CostCodes(access_token=self.__access_token, server_url=self.__base_url)
# Time
self.time = time.Time(access_token=self.__access_token, server_url=self.__base_url)

def get_access_token(self):
"""
Expand Down

0 comments on commit e2a1d7c

Please sign in to comment.