1
0
mirror of synced 2025-12-25 02:09:19 -05:00

Source Harvest: fix build (#20572)

* #17506 source Harvest: fix build

* #17506 source harvest: upd changelog

* #17506 source harvest: introduce replication_end_date in spec

* auto-bump connector version

Co-authored-by: Octavia Squidington III <octavia-squidington-iii@users.noreply.github.com>
This commit is contained in:
Denys Davydov
2022-12-16 20:34:07 +02:00
committed by GitHub
parent df60ce1431
commit dcda815569
10 changed files with 550 additions and 42 deletions

View File

@@ -694,7 +694,7 @@
- name: Harvest
sourceDefinitionId: fe2b4084-3386-4d3b-9ad6-308f61a6f1e6
dockerRepository: airbyte/source-harvest
dockerImageTag: 0.1.11
dockerImageTag: 0.1.12
documentationUrl: https://docs.airbyte.com/integrations/sources/harvest
icon: harvest.svg
sourceType: api

View File

@@ -6057,7 +6057,7 @@
supportsNormalization: false
supportsDBT: false
supported_destination_sync_modes: []
- dockerImage: "airbyte/source-harvest:0.1.11"
- dockerImage: "airbyte/source-harvest:0.1.12"
spec:
documentationUrl: "https://docs.airbyte.com/integrations/sources/harvest"
connectionSpecification:
@@ -6085,11 +6085,21 @@
- "2017-01-25T00:00:00Z"
type: "string"
order: 1
replication_end_date:
title: "End Date"
description: "UTC date and time in the format 2017-01-25T00:00:00Z. Any\
\ data after this date will not be replicated."
pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$"
examples:
- "2017-01-25T00:00:00Z"
type: "string"
airbyte_hidden: true
order: 2
credentials:
title: "Authentication mechanism"
description: "Choose how to authenticate to Harvest."
type: "object"
order: 2
order: 3
oneOf:
- type: "object"
title: "Authenticate via Harvest (OAuth)"

View File

@@ -12,5 +12,5 @@ RUN pip install .
ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py"
ENTRYPOINT ["python", "/airbyte/integration_code/main.py"]
LABEL io.airbyte.version=0.1.11
LABEL io.airbyte.version=0.1.12
LABEL io.airbyte.name=airbyte/source-harvest

View File

@@ -1,29 +1,37 @@
connector_image: airbyte/source-harvest:dev
tests:
test_strictness_level: "high"
acceptance_tests:
spec:
- spec_path: "source_harvest/spec.json"
tests:
- spec_path: "source_harvest/spec.json"
connection:
- config_path: "secrets/config.json"
status: "succeed"
- config_path: "secrets/old_config.json"
status: "succeed"
- config_path: "secrets/config_oauth.json"
status: "succeed"
- config_path: "integration_tests/invalid_config.json"
status: "failed"
tests:
- config_path: "secrets/config.json"
status: "succeed"
- config_path: "secrets/old_config.json"
status: "succeed"
- config_path: "secrets/config_oauth.json"
status: "succeed"
- config_path: "integration_tests/invalid_config.json"
status: "failed"
discovery:
- config_path: "secrets/config.json"
tests:
- config_path: "secrets/config.json"
basic_read:
- config_path: "secrets/config.json"
configured_catalog_path: "integration_tests/configured_catalog.json"
tests:
- config_path: "secrets/config.json"
expect_records:
path: "integration_tests/expected_records.txt"
incremental:
- config_path: "secrets/config.json"
configured_catalog_path: "integration_tests/configured_catalog.json"
future_state_path: "integration_tests/abnormal_state.json"
cursor_paths:
contacts: ["updated_at"]
expenses_clients: ["to"]
timeout_seconds: 2400
tests:
- config_path: "secrets/config_with_date_range.json"
configured_catalog_path: "integration_tests/incremental_catalog.json"
future_state:
future_state_path: "integration_tests/abnormal_state.json"
cursor_paths:
contacts: ["updated_at"]
expenses_clients: ["to"]
full_refresh:
- config_path: "secrets/config.json"
configured_catalog_path: "integration_tests/configured_catalog.json"
tests:
- config_path: "secrets/config.json"
configured_catalog_path: "integration_tests/configured_catalog.json"

View File

@@ -0,0 +1,140 @@
{"stream": "clients", "data": {"id": 10749825, "name": "First client", "is_active": true, "address": null, "statement_key": "48d746ca9125fe984b3bd800747669cc", "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-25T16:16:52Z", "currency": "USD"}, "emitted_at": 1671186215360}
{"stream": "clients", "data": {"id": 10748673, "name": "Users", "is_active": true, "address": null, "statement_key": "6b70f27acd3bf496daba22316cb750d3", "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "currency": "USD"}, "emitted_at": 1671186215360}
{"stream": "clients", "data": {"id": 10748671, "name": "[SAMPLE] Client B", "is_active": true, "address": null, "statement_key": "61faacd69e255af516cd8d772073afd4", "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "currency": "USD"}, "emitted_at": 1671186215361}
{"stream": "clients", "data": {"id": 10748670, "name": "[SAMPLE] Client A", "is_active": true, "address": null, "statement_key": "1f2a8709628bb49a3b673dfcf1d09319", "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-25T16:17:55Z", "currency": "USD"}, "emitted_at": 1671186215361}
{"stream": "contacts", "data": {"id": 8468604, "title": null, "first_name": "[SAMPLE] Morgan", "last_name": "Minute", "email": "morgan@harvestsample.com", "phone_office": "", "phone_mobile": "", "fax": "", "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "client": {"id": 10748671, "name": "[SAMPLE] Client B"}}, "emitted_at": 1671186215782}
{"stream": "contacts", "data": {"id": 8468603, "title": null, "first_name": "[SAMPLE] Sofia", "last_name": "Stopwatch", "email": "sofia@harvestsample.com", "phone_office": "", "phone_mobile": "", "fax": "", "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "client": {"id": 10748670, "name": "[SAMPLE] Client A"}}, "emitted_at": 1671186215782}
{"stream": "company", "data": {"base_uri": "https://airbyte.harvestapp.com", "full_domain": "airbyte.harvestapp.com", "name": "Airbyte", "is_active": true, "week_start_day": "Monday", "wants_timestamp_timers": false, "time_format": "hours_minutes", "date_format": "%m/%d/%Y", "plan_type": "simple-v4", "expense_feature": true, "invoice_feature": true, "estimate_feature": true, "team_feature": true, "weekly_capacity": 144000, "approval_feature": true, "clock": "12h", "currency": "USD", "currency_code_display": "iso_code_none", "currency_symbol_display": "symbol_before", "decimal_symbol": ".", "thousands_separator": ",", "color_scheme": "orange"}, "emitted_at": 1671186216093}
{"stream": "invoices", "data": {"id": 28174545, "client_key": "489645d5b2becebe06f7a696a4d0db6a8a1c8ff1", "number": "2", "purchase_order": "", "amount": 22000.0, "due_amount": 21500.0, "tax": null, "tax_amount": 0.0, "tax2": null, "tax2_amount": 0.0, "discount": null, "discount_amount": 0.0, "subject": "Subj", "notes": "", "state": "draft", "period_start": null, "period_end": null, "issue_date": "2021-05-25", "due_date": "2021-05-25", "payment_term": "upon receipt", "sent_at": null, "paid_at": null, "closed_at": null, "recurring_invoice_id": null, "created_at": "2021-05-25T16:17:55Z", "updated_at": "2021-05-26T09:07:06Z", "paid_date": null, "currency": "USD", "client": {"id": 10748670, "name": "[SAMPLE] Client A"}, "estimate": null, "retainer": null, "creator": {"id": 3758380, "name": "Airbyte Developer"}, "line_items": [{"id": 132632435, "kind": "Service", "description": "[SAMPLE] Fixed Fee Project", "quantity": 1.0, "unit_price": 21900.0, "amount": 21900.0, "taxed": false, "taxed2": false, "project": {"id": 28671446, "name": "Fixed Fee Project", "code": "SAMPLE"}}, {"id": 132632436, "kind": "Product", "description": "", "quantity": 1.0, "unit_price": 100.0, "amount": 100.0, "taxed": false, "taxed2": false, "project": {"id": 28671446, "name": "Fixed Fee Project", "code": "SAMPLE"}}]}, "emitted_at": 1671186216397}
{"stream": "invoices", "data": {"id": 28174531, "client_key": "1a3a59c71a8dd22b3a341807456c754220dc202c", "number": "1", "purchase_order": "", "amount": 76.9, "due_amount": 0.0, "tax": null, "tax_amount": 0.0, "tax2": null, "tax2_amount": 0.0, "discount": 4.0, "discount_amount": 3.2, "subject": "", "notes": "Note", "state": "paid", "period_start": "2021-05-05", "period_end": "2021-05-05", "issue_date": "2021-05-25", "due_date": "2021-05-25", "payment_term": "upon receipt", "sent_at": "2021-05-25T16:46:28Z", "paid_at": "2021-05-25T00:00:00Z", "closed_at": null, "recurring_invoice_id": null, "created_at": "2021-05-25T16:16:51Z", "updated_at": "2021-05-26T09:06:37Z", "paid_date": "2021-05-25", "currency": "USD", "client": {"id": 10749825, "name": "First client"}, "estimate": null, "retainer": null, "creator": {"id": 3758380, "name": "Airbyte Developer"}, "line_items": [{"id": 132632398, "kind": "Service", "description": "[FP] First project: Design (05/05/2021 - 05/05/2021)", "quantity": 0.01, "unit_price": 10.0, "amount": 0.1, "taxed": false, "taxed2": false, "project": {"id": 28674500, "name": "First project", "code": "FP"}}, {"id": 132632399, "kind": "Service", "description": "[FP] First project: Programming (05/05/2021 - 05/05/2021)", "quantity": 8.0, "unit_price": 10.0, "amount": 80.0, "taxed": false, "taxed2": false, "project": {"id": 28674500, "name": "First project", "code": "FP"}}]}, "emitted_at": 1671186216397}
{"stream": "invoice_messages", "data": {"id": 57176997, "sent_by": "Airbyte Developer", "sent_by_email": "integration-test@airbyte.io", "sent_from": "Airbyte Developer", "sent_from_email": "integration-test@airbyte.io", "include_link_to_client_invoice": false, "send_me_a_copy": true, "thank_you": false, "reminder": false, "send_reminder_on": null, "created_at": "2021-05-25T16:46:28Z", "updated_at": "2021-05-25T16:46:28Z", "attach_pdf": false, "event_type": null, "recipients": [{"name": "Airbyte Developer", "email": "integration-test@airbyte.io"}], "subject": "Invoice #1 from Airbyte", "body": "---------------------------------------------\r\nInvoice Summary\r\n---------------------------------------------\r\nInvoice ID: 1\r\nIssue Date: 05/25/2021\r\nClient: First client\r\nP.O. Number: \r\nAmount: $76.90\r\nDue: 05/25/2021 (upon receipt)\r\n\r\nThank you!\r\n---------------------------------------------", "parent_id": 28174531}, "emitted_at": 1671186217312}
{"stream": "invoice_messages", "data": {"id": 57176927, "sent_by": "Airbyte Developer", "sent_by_email": "integration-test@airbyte.io", "sent_from": "Airbyte Developer", "sent_from_email": "integration-test@airbyte.io", "include_link_to_client_invoice": false, "send_me_a_copy": true, "thank_you": false, "reminder": false, "send_reminder_on": null, "created_at": "2021-05-25T16:43:30Z", "updated_at": "2021-05-25T16:43:30Z", "attach_pdf": true, "event_type": null, "recipients": [{"name": "Airbyte Developer", "email": "integration-test@airbyte.io"}], "subject": "Invoice #1 from Airbyte", "body": "---------------------------------------------\r\nInvoice Summary\r\n---------------------------------------------\r\nInvoice ID: 1\r\nIssue Date: 05/25/2021\r\nClient: First client\r\nP.O. Number: \r\nAmount: $76.90\r\nDue: 05/25/2021 (upon receipt)\r\n\r\nThe detailed invoice is attached as a PDF.\r\n\r\nThank you!\r\n---------------------------------------------", "parent_id": 28174531}, "emitted_at": 1671186217313}
{"stream": "invoice_payments", "data": {"id": 21857618, "amount": 500.0, "paid_at": "2021-05-26T00:00:00Z", "recorded_by": "Airbyte Developer", "recorded_by_email": "integration-test@airbyte.io", "notes": "", "transaction_id": null, "created_at": "2021-05-26T09:07:06Z", "updated_at": "2021-05-26T09:07:06Z", "paid_date": "2021-05-26", "payment_gateway": {"id": null, "name": null}, "parent_id": 28174545}, "emitted_at": 1671186217900}
{"stream": "invoice_item_categories", "data": {"id": 2732435, "name": "Product", "use_as_service": false, "use_as_expense": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186218442}
{"stream": "invoice_item_categories", "data": {"id": 2732434, "name": "Service", "use_as_service": true, "use_as_expense": false, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186218443}
{"stream": "estimates", "data": {"id": 2695071, "client_key": "de25b9eb3e82c0d5032777559e8ac0cfdfbf82b1", "number": "1", "purchase_order": "", "amount": 0.0, "tax": null, "tax_amount": 0.0, "tax2": null, "tax2_amount": 0.0, "discount": null, "discount_amount": 0.0, "subject": "", "notes": "", "state": "sent", "issue_date": "2021-05-27", "sent_at": "2021-05-27T18:12:42Z", "created_at": "2021-05-27T18:12:30Z", "updated_at": "2021-05-27T18:12:42Z", "accepted_at": null, "declined_at": null, "currency": "USD", "client": {"id": 10748670, "name": "[SAMPLE] Client A"}, "creator": {"id": 3758380, "name": "Airbyte Developer"}, "line_items": []}, "emitted_at": 1671186218730}
{"stream": "estimate_messages", "data": {"id": 4857940, "sent_by": "Airbyte Developer", "sent_by_email": "integration-test@airbyte.io", "sent_from": "Airbyte Developer", "sent_from_email": "integration-test@airbyte.io", "send_me_a_copy": true, "created_at": "2021-05-27T18:12:42Z", "updated_at": "2021-05-27T18:12:42Z", "recipients": [{"name": "Airbyte Developer", "email": "integration-test@airbyte.io"}], "event_type": null, "subject": "Estimate #1 from Airbyte", "body": "---------------------------------------------\r\nEstimate Summary\r\n---------------------------------------------\r\nEstimate ID: 1\r\nEstimate Date: 05/27/2021\r\nClient: [SAMPLE] Client A\r\nP.O. Number: \r\nAmount: $0.00\r\n\r\nYou can view the estimate here:\r\n\r\n%estimate_url%\r\n\r\nThank you!\r\n---------------------------------------------", "parent_id": 2695071}, "emitted_at": 1671186219367}
{"stream": "estimate_item_categories", "data": {"id": 2614512, "name": "Product", "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186219669}
{"stream": "estimate_item_categories", "data": {"id": 2614511, "name": "Service", "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186219669}
{"stream": "expenses", "data": {"id": 31751921, "spent_date": "2021-04-27", "notes": "This is a sample expense entry.", "total_cost": 51.0, "units": 1.0, "billable": true, "receipt": null, "is_closed": false, "is_locked": false, "is_billed": false, "locked_reason": null, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758382, "name": "[SAMPLE] Hiromi Hourglass"}, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}, "project": {"id": 28671446, "name": "Fixed Fee Project", "code": "SAMPLE"}, "expense_category": {"id": 7892982, "name": "Meals", "unit_price": null, "unit_name": null}, "user_assignment": {"id": 286326464, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": 125.0}, "invoice": null}, "emitted_at": 1671186219981}
{"stream": "expenses", "data": {"id": 31751926, "spent_date": "2021-04-25", "notes": "This is a sample expense entry.", "total_cost": 142.0, "units": 1.0, "billable": true, "receipt": null, "is_closed": false, "is_locked": false, "is_billed": false, "locked_reason": null, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758381, "name": "[SAMPLE] Kiran Kronological"}, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}, "project": {"id": 28671449, "name": "Non-Billable Project", "code": "SAMPLE"}, "expense_category": {"id": 7892984, "name": "Transportation", "unit_price": null, "unit_name": null}, "user_assignment": {"id": 286326479, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 125.0}, "invoice": null}, "emitted_at": 1671186219981}
{"stream": "expenses", "data": {"id": 31751920, "spent_date": "2021-04-20", "notes": "This is a sample expense entry.", "total_cost": 30.0, "units": 1.0, "billable": true, "receipt": null, "is_closed": false, "is_locked": false, "is_billed": false, "locked_reason": null, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758381, "name": "[SAMPLE] Kiran Kronological"}, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}, "project": {"id": 28671446, "name": "Fixed Fee Project", "code": "SAMPLE"}, "expense_category": {"id": 7892982, "name": "Meals", "unit_price": null, "unit_name": null}, "user_assignment": {"id": 286326463, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": 125.0}, "invoice": null}, "emitted_at": 1671186219981}
{"stream": "expenses", "data": {"id": 31751924, "spent_date": "2021-04-18", "notes": "This is a sample expense entry.", "total_cost": 58.0, "units": 1.0, "billable": true, "receipt": null, "is_closed": false, "is_locked": false, "is_billed": false, "locked_reason": null, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758382, "name": "[SAMPLE] Hiromi Hourglass"}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "project": {"id": 28671448, "name": "Monthly Retainer", "code": "SAMPLE"}, "expense_category": {"id": 7892981, "name": "Entertainment", "unit_price": null, "unit_name": null}, "user_assignment": {"id": 286326475, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": 125.0}, "invoice": null}, "emitted_at": 1671186219981}
{"stream": "expenses", "data": {"id": 31751927, "spent_date": "2021-04-16", "notes": "This is a sample expense entry.", "total_cost": 84.0, "units": 1.0, "billable": true, "receipt": null, "is_closed": false, "is_locked": false, "is_billed": false, "locked_reason": null, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758384, "name": "[SAMPLE] Warrin Wristwatch"}, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}, "project": {"id": 28671446, "name": "Fixed Fee Project", "code": "SAMPLE"}, "expense_category": {"id": 7892984, "name": "Transportation", "unit_price": null, "unit_name": null}, "user_assignment": {"id": 286326466, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": 175.0}, "invoice": null}, "emitted_at": 1671186219982}
{"stream": "expenses", "data": {"id": 31751922, "spent_date": "2021-04-14", "notes": "This is a sample expense entry.", "total_cost": 23.0, "units": 1.0, "billable": true, "receipt": null, "is_closed": false, "is_locked": false, "is_billed": false, "locked_reason": null, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758383, "name": "[SAMPLE] Tamara Timekeeper"}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "project": {"id": 28671447, "name": "Time & Materials Project", "code": "SAMPLE"}, "expense_category": {"id": 7892984, "name": "Transportation", "unit_price": null, "unit_name": null}, "user_assignment": {"id": 286326470, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": 35.0, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": 175.0}, "invoice": null}, "emitted_at": 1671186219982}
{"stream": "expenses", "data": {"id": 31751923, "spent_date": "2021-04-10", "notes": "This is a sample expense entry.", "total_cost": 200.0, "units": 1.0, "billable": false, "receipt": null, "is_closed": false, "is_locked": false, "is_billed": false, "locked_reason": null, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758381, "name": "[SAMPLE] Kiran Kronological"}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "project": {"id": 28671447, "name": "Time & Materials Project", "code": "SAMPLE"}, "expense_category": {"id": 7892983, "name": "Lodging", "unit_price": null, "unit_name": null}, "user_assignment": {"id": 286326468, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": 33.0, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": 125.0}, "invoice": null}, "emitted_at": 1671186219982}
{"stream": "expenses", "data": {"id": 31751928, "spent_date": "2021-04-07", "notes": "This is a sample expense entry.", "total_cost": 174.0, "units": 1.0, "billable": false, "receipt": null, "is_closed": false, "is_locked": false, "is_billed": false, "locked_reason": null, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758384, "name": "[SAMPLE] Warrin Wristwatch"}, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}, "project": {"id": 28671446, "name": "Fixed Fee Project", "code": "SAMPLE"}, "expense_category": {"id": 7892984, "name": "Transportation", "unit_price": null, "unit_name": null}, "user_assignment": {"id": 286326466, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": 175.0}, "invoice": null}, "emitted_at": 1671186219982}
{"stream": "expenses", "data": {"id": 31751925, "spent_date": "2021-04-07", "notes": "This is a sample expense entry.", "total_cost": 180.0, "units": 1.0, "billable": true, "receipt": null, "is_closed": false, "is_locked": false, "is_billed": false, "locked_reason": null, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758384, "name": "[SAMPLE] Warrin Wristwatch"}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "project": {"id": 28671448, "name": "Monthly Retainer", "code": "SAMPLE"}, "expense_category": {"id": 7892982, "name": "Meals", "unit_price": null, "unit_name": null}, "user_assignment": {"id": 286326477, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 175.0}, "invoice": null}, "emitted_at": 1671186219982}
{"stream": "expense_categories", "data": {"id": 7892986, "name": "Mileage", "unit_name": "mile", "unit_price": 0.575, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220285}
{"stream": "expense_categories", "data": {"id": 7892985, "name": "Other", "unit_name": null, "unit_price": null, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220285}
{"stream": "expense_categories", "data": {"id": 7892984, "name": "Transportation", "unit_name": null, "unit_price": null, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220285}
{"stream": "expense_categories", "data": {"id": 7892983, "name": "Lodging", "unit_name": null, "unit_price": null, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220285}
{"stream": "expense_categories", "data": {"id": 7892982, "name": "Meals", "unit_name": null, "unit_price": null, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220285}
{"stream": "expense_categories", "data": {"id": 7892981, "name": "Entertainment", "unit_name": null, "unit_price": null, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220286}
{"stream": "tasks", "data": {"id": 16575211, "name": "Vacation", "billable_by_default": false, "default_hourly_rate": null, "is_default": false, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220595}
{"stream": "tasks", "data": {"id": 16575210, "name": "Business Development", "billable_by_default": false, "default_hourly_rate": null, "is_default": true, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220595}
{"stream": "tasks", "data": {"id": 16575209, "name": "Project Management", "billable_by_default": true, "default_hourly_rate": null, "is_default": true, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220595}
{"stream": "tasks", "data": {"id": 16575208, "name": "Marketing", "billable_by_default": true, "default_hourly_rate": null, "is_default": true, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220596}
{"stream": "tasks", "data": {"id": 16575207, "name": "Programming", "billable_by_default": true, "default_hourly_rate": null, "is_default": true, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220596}
{"stream": "tasks", "data": {"id": 16575206, "name": "Design", "billable_by_default": true, "default_hourly_rate": null, "is_default": true, "is_active": true, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2021-05-05T08:17:57Z"}, "emitted_at": 1671186220596}
{"stream": "time_entries", "data": {"id": 1494415019, "spent_date": "2021-05-05", "hours": 0.01, "hours_without_timer": 0.01, "rounded_hours": 0.01, "notes": "", "is_locked": true, "locked_reason": "Item Invoiced and Locked for this Time Period", "is_closed": false, "is_billed": true, "timer_started_at": null, "started_time": null, "ended_time": null, "is_running": false, "billable": true, "budgeted": false, "billable_rate": 10.0, "cost_rate": null, "created_at": "2021-05-05T12:53:38Z", "updated_at": "2021-05-25T16:16:52Z", "user": {"id": 3758380, "name": "Airbyte Developer"}, "client": {"id": 10749825, "name": "First client", "currency": "USD"}, "project": {"id": 28674500, "name": "First project", "code": "FP"}, "task": {"id": 16575206, "name": "Design"}, "user_assignment": {"id": 286365663, "is_project_manager": true, "is_active": true, "use_default_rates": false, "budget": null, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": 10.0}, "task_assignment": {"id": 307640132, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null}, "invoice": {"id": 28174531, "number": "1"}, "external_reference": null}, "emitted_at": 1671186221004}
{"stream": "time_entries", "data": {"id": 1494414737, "spent_date": "2021-05-05", "hours": 8.0, "hours_without_timer": 8.0, "rounded_hours": 8.0, "notes": "", "is_locked": true, "locked_reason": "Item Invoiced and Locked for this Time Period", "is_closed": false, "is_billed": true, "timer_started_at": null, "started_time": null, "ended_time": null, "is_running": false, "billable": true, "budgeted": false, "billable_rate": 10.0, "cost_rate": null, "created_at": "2021-05-05T12:53:23Z", "updated_at": "2021-05-25T16:16:52Z", "user": {"id": 3758380, "name": "Airbyte Developer"}, "client": {"id": 10749825, "name": "First client", "currency": "USD"}, "project": {"id": 28674500, "name": "First project", "code": "FP"}, "task": {"id": 16575207, "name": "Programming"}, "user_assignment": {"id": 286365663, "is_project_manager": true, "is_active": true, "use_default_rates": false, "budget": null, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": 10.0}, "task_assignment": {"id": 307640134, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null}, "invoice": {"id": 28174531, "number": "1"}, "external_reference": null}, "emitted_at": 1671186221005}
{"stream": "time_entries", "data": {"id": 1494238685, "spent_date": "2021-05-05", "hours": 0.71, "hours_without_timer": 0.71, "rounded_hours": 0.71, "notes": "This is a sample time entry.", "is_locked": false, "locked_reason": null, "is_closed": false, "is_billed": false, "timer_started_at": null, "started_time": null, "ended_time": null, "is_running": false, "billable": false, "budgeted": true, "billable_rate": null, "cost_rate": 60.0, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758384, "name": "[SAMPLE] Warrin Wristwatch"}, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}, "project": {"id": 28671449, "name": "Non-Billable Project", "code": "SAMPLE"}, "task": {"id": 16575208, "name": "Marketing"}, "user_assignment": {"id": 286326482, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 175.0}, "task_assignment": {"id": 307607000, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null}, "invoice": null, "external_reference": null}, "emitted_at": 1671186221005}
{"stream": "time_entries", "data": {"id": 1494238684, "spent_date": "2021-05-05", "hours": 2.62, "hours_without_timer": 2.62, "rounded_hours": 2.62, "notes": "This is a sample time entry.", "is_locked": false, "locked_reason": null, "is_closed": false, "is_billed": false, "timer_started_at": null, "started_time": null, "ended_time": null, "is_running": false, "billable": false, "budgeted": true, "billable_rate": null, "cost_rate": 60.0, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758384, "name": "[SAMPLE] Warrin Wristwatch"}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "project": {"id": 28671447, "name": "Time & Materials Project", "code": "SAMPLE"}, "task": {"id": 16575210, "name": "Business Development"}, "user_assignment": {"id": 286326471, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": 33.0, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": 175.0}, "task_assignment": {"id": 307606988, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null}, "invoice": null, "external_reference": null}, "emitted_at": 1671186221005}
{"stream": "time_entries", "data": {"id": 1494238683, "spent_date": "2021-05-05", "hours": 1.42, "hours_without_timer": 1.42, "rounded_hours": 1.42, "notes": "This is a sample time entry.", "is_locked": false, "locked_reason": null, "is_closed": false, "is_billed": false, "timer_started_at": null, "started_time": null, "ended_time": null, "is_running": false, "billable": false, "budgeted": true, "billable_rate": null, "cost_rate": 60.0, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758384, "name": "[SAMPLE] Warrin Wristwatch"}, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}, "project": {"id": 28671449, "name": "Non-Billable Project", "code": "SAMPLE"}, "task": {"id": 16575209, "name": "Project Management"}, "user_assignment": {"id": 286326482, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 175.0}, "task_assignment": {"id": 307607002, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null}, "invoice": null, "external_reference": null}, "emitted_at": 1671186221005}
{"stream": "time_entries", "data": {"id": 1494238682, "spent_date": "2021-05-05", "hours": 1.98, "hours_without_timer": 1.98, "rounded_hours": 1.98, "notes": "This is a sample time entry.", "is_locked": false, "locked_reason": null, "is_closed": false, "is_billed": false, "timer_started_at": null, "started_time": null, "ended_time": null, "is_running": false, "billable": false, "budgeted": true, "billable_rate": null, "cost_rate": 60.0, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758383, "name": "[SAMPLE] Tamara Timekeeper"}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "project": {"id": 28671447, "name": "Time & Materials Project", "code": "SAMPLE"}, "task": {"id": 16575210, "name": "Business Development"}, "user_assignment": {"id": 286326470, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": 35.0, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": 175.0}, "task_assignment": {"id": 307606988, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null}, "invoice": null, "external_reference": null}, "emitted_at": 1671186221005}
{"stream": "time_entries", "data": {"id": 1494238681, "spent_date": "2021-05-05", "hours": 1.21, "hours_without_timer": 1.21, "rounded_hours": 1.21, "notes": "This is a sample time entry.", "is_locked": false, "locked_reason": null, "is_closed": false, "is_billed": false, "timer_started_at": null, "started_time": null, "ended_time": null, "is_running": false, "billable": false, "budgeted": true, "billable_rate": null, "cost_rate": 60.0, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758383, "name": "[SAMPLE] Tamara Timekeeper"}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "project": {"id": 28671447, "name": "Time & Materials Project", "code": "SAMPLE"}, "task": {"id": 16575210, "name": "Business Development"}, "user_assignment": {"id": 286326470, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": 35.0, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": 175.0}, "task_assignment": {"id": 307606988, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null}, "invoice": null, "external_reference": null}, "emitted_at": 1671186221006}
{"stream": "time_entries", "data": {"id": 1494238680, "spent_date": "2021-05-05", "hours": 2.38, "hours_without_timer": 2.38, "rounded_hours": 2.38, "notes": "This is a sample time entry.", "is_locked": false, "locked_reason": null, "is_closed": false, "is_billed": false, "timer_started_at": null, "started_time": null, "ended_time": null, "is_running": false, "billable": true, "budgeted": true, "billable_rate": 175.0, "cost_rate": 60.0, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758383, "name": "[SAMPLE] Tamara Timekeeper"}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "project": {"id": 28671447, "name": "Time & Materials Project", "code": "SAMPLE"}, "task": {"id": 16575208, "name": "Marketing"}, "user_assignment": {"id": 286326470, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": 35.0, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": 175.0}, "task_assignment": {"id": 307606990, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null}, "invoice": null, "external_reference": null}, "emitted_at": 1671186221006}
{"stream": "time_entries", "data": {"id": 1494238679, "spent_date": "2021-05-05", "hours": 0.9, "hours_without_timer": 0.9, "rounded_hours": 0.9, "notes": "This is a sample time entry.", "is_locked": false, "locked_reason": null, "is_closed": false, "is_billed": false, "timer_started_at": null, "started_time": null, "ended_time": null, "is_running": false, "billable": true, "budgeted": true, "billable_rate": 175.0, "cost_rate": 60.0, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758383, "name": "[SAMPLE] Tamara Timekeeper"}, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}, "project": {"id": 28671446, "name": "Fixed Fee Project", "code": "SAMPLE"}, "task": {"id": 16575209, "name": "Project Management"}, "user_assignment": {"id": 286326465, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": 175.0}, "task_assignment": {"id": 307606987, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null}, "invoice": null, "external_reference": null}, "emitted_at": 1671186221006}
{"stream": "time_entries", "data": {"id": 1494238678, "spent_date": "2021-05-05", "hours": 1.66, "hours_without_timer": 1.66, "rounded_hours": 1.66, "notes": "This is a sample time entry.", "is_locked": false, "locked_reason": null, "is_closed": false, "is_billed": false, "timer_started_at": null, "started_time": null, "ended_time": null, "is_running": false, "billable": true, "budgeted": true, "billable_rate": 125.0, "cost_rate": 40.0, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "user": {"id": 3758382, "name": "[SAMPLE] Hiromi Hourglass"}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "project": {"id": 28671447, "name": "Time & Materials Project", "code": "SAMPLE"}, "task": {"id": 16575208, "name": "Marketing"}, "user_assignment": {"id": 286326469, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": 49.0, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": 125.0}, "task_assignment": {"id": 307606990, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null}, "invoice": null, "external_reference": null}, "emitted_at": 1671186221006}
{"stream": "user_assignments", "data": {"id": 286365663, "is_project_manager": true, "is_active": true, "use_default_rates": false, "budget": null, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": 10.0, "project": {"id": 28674500, "name": "First project", "code": "FP"}, "user": {"id": 3758380, "name": "Airbyte Developer"}}, "emitted_at": 1671186223794}
{"stream": "user_assignments", "data": {"id": 286326492, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": null, "project": {"id": 28671451, "name": "Airbyte", "code": null}, "user": {"id": 3758380, "name": "Airbyte Developer"}}, "emitted_at": 1671186223794}
{"stream": "user_assignments", "data": {"id": 286326482, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 175.0, "project": {"id": 28671449, "name": "Non-Billable Project", "code": "SAMPLE"}, "user": {"id": 3758384, "name": "[SAMPLE] Warrin Wristwatch"}}, "emitted_at": 1671186223795}
{"stream": "user_assignments", "data": {"id": 286326481, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 175.0, "project": {"id": 28671449, "name": "Non-Billable Project", "code": "SAMPLE"}, "user": {"id": 3758383, "name": "[SAMPLE] Tamara Timekeeper"}}, "emitted_at": 1671186223795}
{"stream": "user_assignments", "data": {"id": 286326480, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 125.0, "project": {"id": 28671449, "name": "Non-Billable Project", "code": "SAMPLE"}, "user": {"id": 3758382, "name": "[SAMPLE] Hiromi Hourglass"}}, "emitted_at": 1671186223795}
{"stream": "user_assignments", "data": {"id": 286326479, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 125.0, "project": {"id": 28671449, "name": "Non-Billable Project", "code": "SAMPLE"}, "user": {"id": 3758381, "name": "[SAMPLE] Kiran Kronological"}}, "emitted_at": 1671186223796}
{"stream": "user_assignments", "data": {"id": 286326478, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": null, "project": {"id": 28671449, "name": "Non-Billable Project", "code": "SAMPLE"}, "user": {"id": 3758380, "name": "Airbyte Developer"}}, "emitted_at": 1671186223796}
{"stream": "user_assignments", "data": {"id": 286326477, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 175.0, "project": {"id": 28671448, "name": "Monthly Retainer", "code": "SAMPLE"}, "user": {"id": 3758384, "name": "[SAMPLE] Warrin Wristwatch"}}, "emitted_at": 1671186223796}
{"stream": "user_assignments", "data": {"id": 286326476, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": 175.0, "project": {"id": 28671448, "name": "Monthly Retainer", "code": "SAMPLE"}, "user": {"id": 3758383, "name": "[SAMPLE] Tamara Timekeeper"}}, "emitted_at": 1671186223797}
{"stream": "user_assignments", "data": {"id": 286326475, "is_project_manager": true, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": 125.0, "project": {"id": 28671448, "name": "Monthly Retainer", "code": "SAMPLE"}, "user": {"id": 3758382, "name": "[SAMPLE] Hiromi Hourglass"}}, "emitted_at": 1671186223797}
{"stream": "task_assignments", "data": {"id": 307640135, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null, "project": {"id": 28674500, "name": "First project", "code": "FP"}, "task": {"id": 16575209, "name": "Project Management"}}, "emitted_at": 1671186224179}
{"stream": "task_assignments", "data": {"id": 307640134, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null, "project": {"id": 28674500, "name": "First project", "code": "FP"}, "task": {"id": 16575207, "name": "Programming"}}, "emitted_at": 1671186224179}
{"stream": "task_assignments", "data": {"id": 307640133, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null, "project": {"id": 28674500, "name": "First project", "code": "FP"}, "task": {"id": 16575208, "name": "Marketing"}}, "emitted_at": 1671186224179}
{"stream": "task_assignments", "data": {"id": 307640132, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null, "project": {"id": 28674500, "name": "First project", "code": "FP"}, "task": {"id": 16575206, "name": "Design"}}, "emitted_at": 1671186224179}
{"stream": "task_assignments", "data": {"id": 307640131, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null, "project": {"id": 28674500, "name": "First project", "code": "FP"}, "task": {"id": 16575210, "name": "Business Development"}}, "emitted_at": 1671186224179}
{"stream": "task_assignments", "data": {"id": 307607014, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": null, "budget": null, "project": {"id": 28671451, "name": "Airbyte", "code": null}, "task": {"id": 16575209, "name": "Project Management"}}, "emitted_at": 1671186224179}
{"stream": "task_assignments", "data": {"id": 307607013, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": null, "budget": null, "project": {"id": 28671451, "name": "Airbyte", "code": null}, "task": {"id": 16575207, "name": "Programming"}}, "emitted_at": 1671186224179}
{"stream": "task_assignments", "data": {"id": 307607012, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": null, "budget": null, "project": {"id": 28671451, "name": "Airbyte", "code": null}, "task": {"id": 16575208, "name": "Marketing"}}, "emitted_at": 1671186224179}
{"stream": "task_assignments", "data": {"id": 307607011, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": null, "budget": null, "project": {"id": 28671451, "name": "Airbyte", "code": null}, "task": {"id": 16575206, "name": "Design"}}, "emitted_at": 1671186224180}
{"stream": "task_assignments", "data": {"id": 307607010, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": null, "budget": null, "project": {"id": 28671451, "name": "Airbyte", "code": null}, "task": {"id": 16575210, "name": "Business Development"}}, "emitted_at": 1671186224180}
{"stream": "projects", "data": {"id": 28674500, "name": "First project", "code": "FP", "is_active": true, "is_billable": true, "is_fixed_fee": false, "bill_by": "People", "budget": null, "budget_by": "none", "budget_is_monthly": false, "notify_when_over_budget": false, "over_budget_notification_percentage": 80.0, "show_budget_to_all": false, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "starts_on": null, "ends_on": null, "over_budget_notification_date": null, "notes": "Some notes", "cost_budget": null, "cost_budget_include_expenses": false, "hourly_rate": null, "fee": null, "client": {"id": 10749825, "name": "First client", "currency": "USD"}}, "emitted_at": 1671186224489}
{"stream": "projects", "data": {"id": 28671451, "name": "Airbyte", "code": null, "is_active": true, "is_billable": true, "is_fixed_fee": false, "bill_by": "none", "budget": null, "budget_by": "none", "budget_is_monthly": false, "notify_when_over_budget": false, "over_budget_notification_percentage": 80.0, "show_budget_to_all": false, "created_at": "2021-05-05T08:19:35Z", "updated_at": "2021-05-05T08:19:35Z", "starts_on": null, "ends_on": null, "over_budget_notification_date": null, "notes": null, "cost_budget": null, "cost_budget_include_expenses": false, "hourly_rate": null, "fee": null, "client": {"id": 10748673, "name": "Users", "currency": "USD"}}, "emitted_at": 1671186224489}
{"stream": "projects", "data": {"id": 28671449, "name": "Non-Billable Project", "code": "SAMPLE", "is_active": true, "is_billable": false, "is_fixed_fee": false, "bill_by": "none", "budget": 160.0, "budget_by": "project", "budget_is_monthly": false, "notify_when_over_budget": false, "over_budget_notification_percentage": 80.0, "show_budget_to_all": false, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "starts_on": null, "ends_on": null, "over_budget_notification_date": null, "notes": "Non-billable projects are perfect for tracking time you don\u2019t want to invoice for. You can use them to track internal projects, vacation/sick time, or pro bono work.", "cost_budget": null, "cost_budget_include_expenses": false, "hourly_rate": null, "fee": null, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}}, "emitted_at": 1671186224489}
{"stream": "projects", "data": {"id": 28671448, "name": "Monthly Retainer", "code": "SAMPLE", "is_active": true, "is_billable": true, "is_fixed_fee": false, "bill_by": "People", "budget": null, "budget_by": "project_cost", "budget_is_monthly": true, "notify_when_over_budget": false, "over_budget_notification_percentage": 80.0, "show_budget_to_all": false, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "starts_on": null, "ends_on": null, "over_budget_notification_date": null, "notes": "This project is set up so that its budget resets monthly. This is great for ongoing projects that charge a predetermined amount every month, like retainer agreements.", "cost_budget": 21910.0, "cost_budget_include_expenses": false, "hourly_rate": null, "fee": null, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}}, "emitted_at": 1671186224489}
{"stream": "projects", "data": {"id": 28671447, "name": "Time & Materials Project", "code": "SAMPLE", "is_active": true, "is_billable": true, "is_fixed_fee": false, "bill_by": "People", "budget": 150.0, "budget_by": "person", "budget_is_monthly": false, "notify_when_over_budget": false, "over_budget_notification_percentage": 80.0, "show_budget_to_all": false, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "starts_on": null, "ends_on": null, "over_budget_notification_date": null, "notes": "Time and Materials projects bill by the hour at a specific hourly rate. The more hours you work, the more you charge.", "cost_budget": null, "cost_budget_include_expenses": false, "hourly_rate": null, "fee": null, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}}, "emitted_at": 1671186224490}
{"stream": "projects", "data": {"id": 28671446, "name": "Fixed Fee Project", "code": "SAMPLE", "is_active": true, "is_billable": true, "is_fixed_fee": true, "bill_by": "People", "budget": null, "budget_by": "project_cost", "budget_is_monthly": false, "notify_when_over_budget": false, "over_budget_notification_percentage": 80.0, "show_budget_to_all": false, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "starts_on": null, "ends_on": null, "over_budget_notification_date": null, "notes": "Fixed fee projects bill at a set price, no matter how many hours are worked. For instance, you and your client may agree that building a website will cost $5,000 regardless of how much time it takes for you and your team to complete it.", "cost_budget": 21900.0, "cost_budget_include_expenses": true, "hourly_rate": null, "fee": 21900.0, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}}, "emitted_at": 1671186224490}
{"stream": "roles", "data": {"id": 763939, "name": "Sample Role", "created_at": "2021-05-05T08:19:31Z", "updated_at": "2021-05-05T08:19:31Z", "user_ids": [3758381, 3758382, 3758383, 3758384]}, "emitted_at": 1671186224794}
{"stream": "users", "data": {"id": 3758384, "first_name": "[SAMPLE] Warrin", "last_name": "Wristwatch", "email": "warrin@harvestsample.com", "telephone": "", "timezone": "Kyiv", "weekly_capacity": 144000, "has_access_to_all_future_projects": false, "is_contractor": false, "is_active": true, "calendar_integration_enabled": false, "calendar_integration_source": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2022-04-21T09:59:47Z", "can_create_projects": false, "default_hourly_rate": 175.0, "cost_rate": 60.0, "roles": ["Sample Role"], "access_roles": ["member"], "permissions_claims": ["expenses:read:own", "expenses:write:own", "timers:read:own", "timers:write:own"], "avatar_url": "https://cache.harvestapp.com/assets/avatars/sample_avatar_4.png"}, "emitted_at": 1671186225156}
{"stream": "users", "data": {"id": 3758383, "first_name": "[SAMPLE] Tamara", "last_name": "Timekeeper", "email": "tamara@harvestsample.com", "telephone": "", "timezone": "Kyiv", "weekly_capacity": 144000, "has_access_to_all_future_projects": false, "is_contractor": false, "is_active": true, "calendar_integration_enabled": false, "calendar_integration_source": null, "created_at": "2021-05-05T08:19:31Z", "updated_at": "2022-04-21T09:59:47Z", "can_create_projects": true, "default_hourly_rate": 175.0, "cost_rate": 60.0, "roles": ["Sample Role"], "access_roles": ["administrator"], "permissions_claims": ["billable_rates:read:all", "billable_rates:write:all", "billing:read:own", "billing:write:own", "clients:read:all", "clients:write:all", "company:read:own", "company:write:own", "cost_rates:read:all", "cost_rates:write:all", "estimates:read:all", "estimates:write:all", "expenses:read:all", "expenses:write:all", "invoices:read:all", "invoices:write:all", "projects:read:all", "projects:write:all", "tasks:read:all", "tasks:write:all", "timers:read:all", "timers:write:all", "users:read:all", "users:write:all"], "avatar_url": "https://cache.harvestapp.com/assets/avatars/sample_avatar_3.png"}, "emitted_at": 1671186225156}
{"stream": "users", "data": {"id": 3758382, "first_name": "[SAMPLE] Hiromi", "last_name": "Hourglass", "email": "hiromi@harvestsample.com", "telephone": "", "timezone": "Kyiv", "weekly_capacity": 144000, "has_access_to_all_future_projects": false, "is_contractor": false, "is_active": true, "calendar_integration_enabled": false, "calendar_integration_source": null, "created_at": "2021-05-05T08:19:31Z", "updated_at": "2022-04-21T09:59:46Z", "can_create_projects": false, "default_hourly_rate": 125.0, "cost_rate": 40.0, "roles": ["Sample Role"], "access_roles": ["manager"], "permissions_claims": ["expenses:read:managed", "expenses:write:own", "projects:read:managed", "timers:read:managed", "timers:write:own"], "avatar_url": "https://cache.harvestapp.com/assets/avatars/sample_avatar_2.png"}, "emitted_at": 1671186225157}
{"stream": "users", "data": {"id": 3758381, "first_name": "[SAMPLE] Kiran", "last_name": "Kronological", "email": "kiran@harvestsample.com", "telephone": "", "timezone": "Kyiv", "weekly_capacity": 144000, "has_access_to_all_future_projects": false, "is_contractor": false, "is_active": true, "calendar_integration_enabled": false, "calendar_integration_source": null, "created_at": "2021-05-05T08:19:31Z", "updated_at": "2022-04-21T09:59:46Z", "can_create_projects": false, "default_hourly_rate": 125.0, "cost_rate": 40.0, "roles": ["Sample Role"], "access_roles": ["manager"], "permissions_claims": ["expenses:read:managed", "expenses:write:own", "projects:read:managed", "timers:read:managed", "timers:write:own"], "avatar_url": "https://cache.harvestapp.com/assets/avatars/sample_avatar_1.png"}, "emitted_at": 1671186225157}
{"stream": "users", "data": {"id": 3758380, "first_name": "Airbyte", "last_name": "Developer", "email": "integration-test@airbyte.io", "telephone": "", "timezone": "Kyiv", "weekly_capacity": 144000, "has_access_to_all_future_projects": false, "is_contractor": false, "is_active": true, "calendar_integration_enabled": false, "calendar_integration_source": null, "created_at": "2021-05-05T08:17:57Z", "updated_at": "2022-04-21T09:59:47Z", "can_create_projects": true, "default_hourly_rate": null, "cost_rate": null, "roles": [], "access_roles": ["administrator"], "permissions_claims": ["billable_rates:read:all", "billable_rates:write:all", "billing:read:own", "billing:write:own", "clients:read:all", "clients:write:all", "company:read:own", "company:write:own", "cost_rates:read:all", "cost_rates:write:all", "estimates:read:all", "estimates:write:all", "expenses:read:all", "expenses:write:all", "invoices:read:all", "invoices:write:all", "projects:read:all", "projects:write:all", "tasks:read:all", "tasks:write:all", "timers:read:all", "timers:write:all", "users:read:all", "users:write:all"], "avatar_url": "https://d3s3969qhosaug.cloudfront.net/v2/default-avatars/4144.png"}, "emitted_at": 1671186225157}
{"stream": "billable_rates", "data": {"id": 2164495, "amount": 175.0, "start_date": null, "end_date": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "parent_id": 3758384}, "emitted_at": 1671186225771}
{"stream": "billable_rates", "data": {"id": 2164494, "amount": 175.0, "start_date": null, "end_date": null, "created_at": "2021-05-05T08:19:31Z", "updated_at": "2021-05-05T08:19:31Z", "parent_id": 3758383}, "emitted_at": 1671186226014}
{"stream": "billable_rates", "data": {"id": 2164493, "amount": 125.0, "start_date": null, "end_date": null, "created_at": "2021-05-05T08:19:31Z", "updated_at": "2021-05-05T08:19:31Z", "parent_id": 3758382}, "emitted_at": 1671186226201}
{"stream": "billable_rates", "data": {"id": 2164492, "amount": 125.0, "start_date": null, "end_date": null, "created_at": "2021-05-05T08:19:31Z", "updated_at": "2021-05-05T08:19:31Z", "parent_id": 3758381}, "emitted_at": 1671186226420}
{"stream": "cost_rates", "data": {"id": 1181742, "amount": 60.0, "start_date": null, "end_date": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "parent_id": 3758384}, "emitted_at": 1671186227355}
{"stream": "cost_rates", "data": {"id": 1181741, "amount": 60.0, "start_date": null, "end_date": null, "created_at": "2021-05-05T08:19:31Z", "updated_at": "2021-05-05T08:19:31Z", "parent_id": 3758383}, "emitted_at": 1671186227546}
{"stream": "cost_rates", "data": {"id": 1181740, "amount": 40.0, "start_date": null, "end_date": null, "created_at": "2021-05-05T08:19:31Z", "updated_at": "2021-05-05T08:19:31Z", "parent_id": 3758382}, "emitted_at": 1671186227729}
{"stream": "cost_rates", "data": {"id": 1181739, "amount": 40.0, "start_date": null, "end_date": null, "created_at": "2021-05-05T08:19:31Z", "updated_at": "2021-05-05T08:19:31Z", "parent_id": 3758381}, "emitted_at": 1671186227912}
{"stream": "project_assignments", "data": {"id": 286326482, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 175.0, "project": {"id": 28671449, "name": "Non-Billable Project", "code": "SAMPLE", "is_billable": false}, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}, "task_assignments": [{"id": 307606998, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575210, "name": "Business Development"}}, {"id": 307606999, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575206, "name": "Design"}}, {"id": 307607000, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575208, "name": "Marketing"}}, {"id": 307607001, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575207, "name": "Programming"}}, {"id": 307607002, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575209, "name": "Project Management"}}], "parent_id": 3758384}, "emitted_at": 1671186228789}
{"stream": "project_assignments", "data": {"id": 286326477, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:33Z", "updated_at": "2021-05-05T08:19:33Z", "hourly_rate": 175.0, "project": {"id": 28671448, "name": "Monthly Retainer", "code": "SAMPLE", "is_billable": true}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "task_assignments": [{"id": 307606993, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575210, "name": "Business Development"}}, {"id": 307606994, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575206, "name": "Design"}}, {"id": 307606995, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575208, "name": "Marketing"}}, {"id": 307606996, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575207, "name": "Programming"}}, {"id": 307606997, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575209, "name": "Project Management"}}], "parent_id": 3758384}, "emitted_at": 1671186228790}
{"stream": "project_assignments", "data": {"id": 286326471, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": 33.0, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:35Z", "hourly_rate": 175.0, "project": {"id": 28671447, "name": "Time & Materials Project", "code": "SAMPLE", "is_billable": true}, "client": {"id": 10748671, "name": "[SAMPLE] Client B", "currency": "USD"}, "task_assignments": [{"id": 307606988, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575210, "name": "Business Development"}}, {"id": 307606989, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575206, "name": "Design"}}, {"id": 307606990, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575208, "name": "Marketing"}}, {"id": 307606991, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575207, "name": "Programming"}}, {"id": 307606992, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575209, "name": "Project Management"}}], "parent_id": 3758384}, "emitted_at": 1671186228791}
{"stream": "project_assignments", "data": {"id": 286326466, "is_project_manager": false, "is_active": true, "use_default_rates": true, "budget": null, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": 175.0, "project": {"id": 28671446, "name": "Fixed Fee Project", "code": "SAMPLE", "is_billable": true}, "client": {"id": 10748670, "name": "[SAMPLE] Client A", "currency": "USD"}, "task_assignments": [{"id": 307606983, "billable": false, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575210, "name": "Business Development"}}, {"id": 307606984, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575206, "name": "Design"}}, {"id": 307606985, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575208, "name": "Marketing"}}, {"id": 307606986, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575207, "name": "Programming"}}, {"id": 307606987, "billable": true, "is_active": true, "created_at": "2021-05-05T08:19:32Z", "updated_at": "2021-05-05T08:19:32Z", "hourly_rate": null, "budget": null, "task": {"id": 16575209, "name": "Project Management"}}], "parent_id": 3758384}, "emitted_at": 1671186228791}
{"stream": "project_assignments", "data": {"id": 286365663, "is_project_manager": true, "is_active": true, "use_default_rates": false, "budget": null, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": 10.0, "project": {"id": 28674500, "name": "First project", "code": "FP", "is_billable": true}, "client": {"id": 10749825, "name": "First client", "currency": "USD"}, "task_assignments": [{"id": 307640131, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null, "task": {"id": 16575210, "name": "Business Development"}}, {"id": 307640132, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null, "task": {"id": 16575206, "name": "Design"}}, {"id": 307640133, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null, "task": {"id": 16575208, "name": "Marketing"}}, {"id": 307640134, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null, "task": {"id": 16575207, "name": "Programming"}}, {"id": 307640135, "billable": true, "is_active": true, "created_at": "2021-05-05T12:52:20Z", "updated_at": "2021-05-05T12:52:20Z", "hourly_rate": null, "budget": null, "task": {"id": 16575209, "name": "Project Management"}}], "parent_id": 3758380}, "emitted_at": 1671186229609}
{"stream": "expenses_clients", "data": {"client_id": 10748670, "client_name": "[SAMPLE] Client A", "total_amount": 481.0, "billable_amount": 307.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186229932}
{"stream": "expenses_clients", "data": {"client_id": 10748671, "client_name": "[SAMPLE] Client B", "total_amount": 461.0, "billable_amount": 261.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186229932}
{"stream": "expenses_projects", "data": {"client_id": 10748670, "client_name": "[SAMPLE] Client A", "project_id": 28671446, "project_name": "[SAMPLE] Fixed Fee Project", "total_amount": 339.0, "billable_amount": 165.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186230430}
{"stream": "expenses_projects", "data": {"client_id": 10748671, "client_name": "[SAMPLE] Client B", "project_id": 28671448, "project_name": "[SAMPLE] Monthly Retainer", "total_amount": 238.0, "billable_amount": 238.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186230430}
{"stream": "expenses_projects", "data": {"client_id": 10748670, "client_name": "[SAMPLE] Client A", "project_id": 28671449, "project_name": "[SAMPLE] Non-Billable Project", "total_amount": 142.0, "billable_amount": 142.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186230430}
{"stream": "expenses_projects", "data": {"client_id": 10748671, "client_name": "[SAMPLE] Client B", "project_id": 28671447, "project_name": "[SAMPLE] Time & Materials Project", "total_amount": 223.0, "billable_amount": 23.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186230430}
{"stream": "expenses_categories", "data": {"expense_category_id": 7892981, "expense_category_name": "Entertainment", "total_amount": 58.0, "billable_amount": 58.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186230920}
{"stream": "expenses_categories", "data": {"expense_category_id": 7892983, "expense_category_name": "Lodging", "total_amount": 200.0, "billable_amount": 0.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186230920}
{"stream": "expenses_categories", "data": {"expense_category_id": 7892982, "expense_category_name": "Meals", "total_amount": 261.0, "billable_amount": 261.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186230920}
{"stream": "expenses_categories", "data": {"expense_category_id": 7892984, "expense_category_name": "Transportation", "total_amount": 423.0, "billable_amount": 249.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186230920}
{"stream": "expenses_team", "data": {"user_id": 3758382, "user_name": "[SAMPLE] Hiromi Hourglass", "is_contractor": false, "total_amount": 109.0, "billable_amount": 109.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186231455}
{"stream": "expenses_team", "data": {"user_id": 3758381, "user_name": "[SAMPLE] Kiran Kronological", "is_contractor": false, "total_amount": 372.0, "billable_amount": 172.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186231455}
{"stream": "expenses_team", "data": {"user_id": 3758383, "user_name": "[SAMPLE] Tamara Timekeeper", "is_contractor": false, "total_amount": 23.0, "billable_amount": 23.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186231455}
{"stream": "expenses_team", "data": {"user_id": 3758384, "user_name": "[SAMPLE] Warrin Wristwatch", "is_contractor": false, "total_amount": 438.0, "billable_amount": 264.0, "currency": "USD", "from": "20210101", "to": "20220101"}, "emitted_at": 1671186231455}
{"stream": "uninvoiced", "data": {"client_id": 10748670, "client_name": "[SAMPLE] Client A", "project_id": 28671446, "project_name": "Fixed Fee Project", "currency": "USD", "total_hours": 165.98, "uninvoiced_hours": 130.1, "uninvoiced_expenses": 165.0, "uninvoiced_amount": -100.0, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186231971}
{"stream": "uninvoiced", "data": {"client_id": 10748671, "client_name": "[SAMPLE] Client B", "project_id": 28671448, "project_name": "Monthly Retainer", "currency": "USD", "total_hours": 160.41, "uninvoiced_hours": 142.99, "uninvoiced_expenses": 238.0, "uninvoiced_amount": 20700.25, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186231971}
{"stream": "uninvoiced", "data": {"client_id": 10748671, "client_name": "[SAMPLE] Client B", "project_id": 28671447, "project_name": "Time & Materials Project", "currency": "USD", "total_hours": 166.21, "uninvoiced_hours": 142.7, "uninvoiced_expenses": 23.0, "uninvoiced_amount": 20454.0, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186231971}
{"stream": "uninvoiced", "data": {"client_id": 10749825, "client_name": "First client", "project_id": 28674500, "project_name": "First project", "currency": "USD", "total_hours": 8.01, "uninvoiced_hours": 0, "uninvoiced_expenses": 0, "uninvoiced_amount": 0, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186231972}
{"stream": "uninvoiced", "data": {"client_id": 10748673, "client_name": "Users", "project_id": 28671451, "project_name": "Airbyte", "currency": "USD", "total_hours": 0, "uninvoiced_hours": 0, "uninvoiced_expenses": 0, "uninvoiced_amount": 0, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186231972}
{"stream": "uninvoiced", "data": {"client_id": 10748670, "client_name": "[SAMPLE] Client A", "project_id": 28671446, "project_name": "Fixed Fee Project", "currency": "USD", "total_hours": 0, "uninvoiced_hours": 0, "uninvoiced_expenses": 0, "uninvoiced_amount": -100.0, "from": "20220101", "to": "20221216"}, "emitted_at": 1671186232186}
{"stream": "uninvoiced", "data": {"client_id": 10748671, "client_name": "[SAMPLE] Client B", "project_id": 28671448, "project_name": "Monthly Retainer", "currency": "USD", "total_hours": 0, "uninvoiced_hours": 0, "uninvoiced_expenses": 0, "uninvoiced_amount": 0, "from": "20220101", "to": "20221216"}, "emitted_at": 1671186232187}
{"stream": "uninvoiced", "data": {"client_id": 10748671, "client_name": "[SAMPLE] Client B", "project_id": 28671447, "project_name": "Time & Materials Project", "currency": "USD", "total_hours": 0, "uninvoiced_hours": 0, "uninvoiced_expenses": 0, "uninvoiced_amount": 0, "from": "20220101", "to": "20221216"}, "emitted_at": 1671186232187}
{"stream": "uninvoiced", "data": {"client_id": 10749825, "client_name": "First client", "project_id": 28674500, "project_name": "First project", "currency": "USD", "total_hours": 0, "uninvoiced_hours": 0, "uninvoiced_expenses": 0, "uninvoiced_amount": 0, "from": "20220101", "to": "20221216"}, "emitted_at": 1671186232187}
{"stream": "uninvoiced", "data": {"client_id": 10748673, "client_name": "Users", "project_id": 28671451, "project_name": "Airbyte", "currency": "USD", "total_hours": 0, "uninvoiced_hours": 0, "uninvoiced_expenses": 0, "uninvoiced_amount": 0, "from": "20220101", "to": "20221216"}, "emitted_at": 1671186232188}
{"stream": "time_clients", "data": {"client_id": 10748670, "client_name": "[SAMPLE] Client A", "total_hours": 306.95, "billable_hours": 130.1, "currency": "USD", "billable_amount": 0.0, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186232499}
{"stream": "time_clients", "data": {"client_id": 10748671, "client_name": "[SAMPLE] Client B", "total_hours": 326.62, "billable_hours": 285.69, "currency": "USD", "billable_amount": 40893.25, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186232500}
{"stream": "time_clients", "data": {"client_id": 10749825, "client_name": "First client", "total_hours": 8.01, "billable_hours": 8.01, "currency": "USD", "billable_amount": 80.1, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186232500}
{"stream": "time_projects", "data": {"project_id": 28674500, "project_name": "[FP] First project", "client_id": 10749825, "client_name": "First client", "total_hours": 8.01, "billable_hours": 8.01, "currency": "USD", "billable_amount": 80.1, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186232995}
{"stream": "time_projects", "data": {"project_id": 28671446, "project_name": "[SAMPLE] Fixed Fee Project", "client_id": 10748670, "client_name": "[SAMPLE] Client A", "total_hours": 165.98, "billable_hours": 130.1, "currency": "USD", "billable_amount": 0.0, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186232995}
{"stream": "time_projects", "data": {"project_id": 28671448, "project_name": "[SAMPLE] Monthly Retainer", "client_id": 10748671, "client_name": "[SAMPLE] Client B", "total_hours": 160.41, "billable_hours": 142.99, "currency": "USD", "billable_amount": 20462.25, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186232995}
{"stream": "time_projects", "data": {"project_id": 28671449, "project_name": "[SAMPLE] Non-Billable Project", "client_id": 10748670, "client_name": "[SAMPLE] Client A", "total_hours": 140.97, "billable_hours": 0.0, "currency": "USD", "billable_amount": 0.0, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186232995}
{"stream": "time_projects", "data": {"project_id": 28671447, "project_name": "[SAMPLE] Time & Materials Project", "client_id": 10748671, "client_name": "[SAMPLE] Client B", "total_hours": 166.21, "billable_hours": 142.7, "currency": "USD", "billable_amount": 20431.0, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186232995}
{"stream": "time_tasks", "data": {"task_id": 16575210, "task_name": "Business Development", "total_hours": 112.6, "billable_hours": 0.0, "currency": "USD", "billable_amount": 0.0, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186233507}
{"stream": "time_tasks", "data": {"task_id": 16575206, "task_name": "Design", "total_hours": 48.13, "billable_hours": 46.16, "currency": "USD", "billable_amount": 3596.35, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186233507}
{"stream": "time_tasks", "data": {"task_id": 16575208, "task_name": "Marketing", "total_hours": 234.46, "billable_hours": 187.2, "currency": "USD", "billable_amount": 19424.75, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186233507}
{"stream": "time_tasks", "data": {"task_id": 16575207, "task_name": "Programming", "total_hours": 62.72, "billable_hours": 51.37, "currency": "USD", "billable_amount": 3913.75, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186233508}
{"stream": "time_tasks", "data": {"task_id": 16575209, "task_name": "Project Management", "total_hours": 183.67, "billable_hours": 139.07, "currency": "USD", "billable_amount": 14038.5, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186233508}
{"stream": "time_team", "data": {"user_id": 3758382, "user_name": "[SAMPLE] Hiromi Hourglass", "is_contractor": false, "total_hours": 162.23, "billable_hours": 129.77, "currency": "USD", "billable_amount": 11227.5, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186234505}
{"stream": "time_team", "data": {"user_id": 3758381, "user_name": "[SAMPLE] Kiran Kronological", "is_contractor": false, "total_hours": 156.68, "billable_hours": 131.12, "currency": "USD", "billable_amount": 11528.75, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186234506}
{"stream": "time_team", "data": {"user_id": 3758383, "user_name": "[SAMPLE] Tamara Timekeeper", "is_contractor": false, "total_hours": 154.59, "billable_hours": 76.22, "currency": "USD", "billable_amount": 9329.25, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186234507}
{"stream": "time_team", "data": {"user_id": 3758384, "user_name": "[SAMPLE] Warrin Wristwatch", "is_contractor": false, "total_hours": 160.07, "billable_hours": 78.68, "currency": "USD", "billable_amount": 8807.75, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186234508}
{"stream": "time_team", "data": {"user_id": 3758380, "user_name": "Airbyte Developer", "is_contractor": false, "total_hours": 8.01, "billable_hours": 8.01, "currency": "USD", "billable_amount": 80.1, "from": "20210101", "to": "20220101"}, "emitted_at": 1671186234508}
{"stream": "project_budget", "data": {"project_id": 28671446, "project_name": "Fixed Fee Project", "client_id": 10748670, "client_name": "[SAMPLE] Client A", "budget_is_monthly": false, "budget_by": "project_cost", "is_active": true, "budget": 21900.0, "budget_spent": 19164.5, "budget_remaining": 2735.5}, "emitted_at": 1671186235043}
{"stream": "project_budget", "data": {"project_id": 28671449, "project_name": "Non-Billable Project", "client_id": 10748670, "client_name": "[SAMPLE] Client A", "budget_is_monthly": false, "budget_by": "project", "is_active": true, "budget": 160.0, "budget_spent": 140.97, "budget_remaining": 19.03}, "emitted_at": 1671186235043}
{"stream": "project_budget", "data": {"project_id": 28671448, "project_name": "Monthly Retainer", "client_id": 10748671, "client_name": "[SAMPLE] Client B", "budget_is_monthly": true, "budget_by": "project_cost", "is_active": true, "budget": 21910.0, "budget_spent": 0.0, "budget_remaining": 21910.0}, "emitted_at": 1671186235044}
{"stream": "project_budget", "data": {"project_id": 28671447, "project_name": "Time & Materials Project", "client_id": 10748671, "client_name": "[SAMPLE] Client B", "budget_is_monthly": false, "budget_by": "person", "is_active": true, "budget": 150.0, "budget_spent": 166.21, "budget_remaining": -16.21}, "emitted_at": 1671186235044}

View File

@@ -0,0 +1,337 @@
{
"streams": [
{
"stream": {
"name": "clients",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "contacts",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "invoices",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "invoice_messages",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "invoice_payments",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "invoice_item_categories",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "estimates",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "estimate_messages",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "estimate_item_categories",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "expenses",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "expense_categories",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "tasks",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "time_entries",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "user_assignments",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "task_assignments",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "projects",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "roles",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "users",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "project_assignments",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["updated_at"]
},
"sync_mode": "incremental",
"cursor_field": ["updated_at"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "expenses_clients",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["to"]
},
"sync_mode": "incremental",
"cursor_field": ["to"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "expenses_projects",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["to"]
},
"sync_mode": "incremental",
"cursor_field": ["to"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "expenses_categories",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["to"]
},
"sync_mode": "incremental",
"cursor_field": ["to"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "expenses_team",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["to"]
},
"sync_mode": "incremental",
"cursor_field": ["to"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "uninvoiced",
"json_schema": {},
"supported_sync_modes": ["full_refresh"]
},
"sync_mode": "full_refresh",
"destination_sync_mode": "overwrite"
},
{
"stream": {
"name": "time_clients",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["to"]
},
"sync_mode": "incremental",
"cursor_field": ["to"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "time_projects",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["to"]
},
"sync_mode": "incremental",
"cursor_field": ["to"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "time_tasks",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["to"]
},
"sync_mode": "incremental",
"cursor_field": ["to"],
"destination_sync_mode": "append"
},
{
"stream": {
"name": "time_team",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["to"]
},
"sync_mode": "incremental",
"cursor_field": ["to"],
"destination_sync_mode": "append"
}
]
}

View File

@@ -85,6 +85,10 @@ class SourceHarvest(AbstractSource):
auth = self.get_authenticator(config)
replication_start_date = pendulum.parse(config["replication_start_date"])
from_date = replication_start_date.date()
replication_end_date = config.get("replication_end_date")
replication_end_date = replication_end_date and pendulum.parse(replication_end_date)
to_date = replication_end_date and replication_end_date.date()
date_range = {"from_date": from_date, "to_date": to_date}
streams = [
Clients(authenticator=auth, replication_start_date=replication_start_date),
@@ -109,16 +113,16 @@ class SourceHarvest(AbstractSource):
BillableRates(authenticator=auth),
CostRates(authenticator=auth),
ProjectAssignments(authenticator=auth, replication_start_date=replication_start_date),
ExpensesClients(authenticator=auth, from_date=from_date),
ExpensesProjects(authenticator=auth, from_date=from_date),
ExpensesCategories(authenticator=auth, from_date=from_date),
ExpensesTeam(authenticator=auth, from_date=from_date),
Uninvoiced(authenticator=auth, from_date=from_date),
TimeClients(authenticator=auth, from_date=from_date),
TimeProjects(authenticator=auth, from_date=from_date),
TimeTasks(authenticator=auth, from_date=from_date),
TimeTeam(authenticator=auth, from_date=from_date),
ProjectBudget(authenticator=auth, from_date=from_date),
ExpensesClients(authenticator=auth, **date_range),
ExpensesProjects(authenticator=auth, **date_range),
ExpensesCategories(authenticator=auth, **date_range),
ExpensesTeam(authenticator=auth, **date_range),
Uninvoiced(authenticator=auth, **date_range),
TimeClients(authenticator=auth, **date_range),
TimeProjects(authenticator=auth, **date_range),
TimeTasks(authenticator=auth, **date_range),
TimeTeam(authenticator=auth, **date_range),
ProjectBudget(authenticator=auth, **date_range),
]
return streams

View File

@@ -22,11 +22,20 @@
"type": "string",
"order": 1
},
"replication_end_date": {
"title": "End Date",
"description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated.",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
"examples": ["2017-01-25T00:00:00Z"],
"type": "string",
"airbyte_hidden": true,
"order": 2
},
"credentials": {
"title": "Authentication mechanism",
"description": "Choose how to authenticate to Harvest.",
"type": "object",
"order": 2,
"order": 3,
"oneOf": [
{
"type": "object",

View File

@@ -295,16 +295,15 @@ class ReportsBase(HarvestStream, ABC):
:return: report path suffix
"""
def __init__(self, from_date: pendulum.date = None, **kwargs):
def __init__(self, from_date: Optional[pendulum.date] = None, to_date: Optional[pendulum.date] = None, **kwargs):
super().__init__(**kwargs)
current_date = pendulum.now().date()
self._from_date = from_date or current_date.subtract(years=1)
self._to_date = to_date or current_date
# `to` date greater than `from` date causes an exception on Harvest
if self._from_date > current_date:
self._to_date = from_date
else:
self._to_date = current_date
def path(self, **kwargs) -> str:
return f"reports/{self.report_path}"
@@ -347,7 +346,7 @@ class IncrementalReportsBase(ReportsBase, ABC):
Override default stream_slices CDK method to provide date_slices as page chunks for data fetch.
"""
start_date = self._from_date
end_date = pendulum.now().date()
end_date = self._to_date
# determine stream_state, if no stream_state we use start_date
if stream_state:

View File

@@ -78,7 +78,8 @@ The connector is restricted by the [Harvest rate limits](https://help.getharvest
## Changelog
| Version | Date | Pull Request | Subject |
| :------ | :--------- | :------------------------------------------------------- | :--------------------------------------------------------------------------------- |
|:--------|:-----------|:---------------------------------------------------------|:-----------------------------------------------------------------------------------|
| 0.1.12 | 2022-12-16 | [20572](https://github.com/airbytehq/airbyte/pull/20572) | Introduce replication end date |
| 0.1.11 | 2022-09-28 | [17326](https://github.com/airbytehq/airbyte/pull/17326) | Migrate to per-stream states. |
| 0.1.10 | 2022-08-08 | [15221](https://github.com/airbytehq/airbyte/pull/15221) | Added `parent_id` for all streams which have parent stream |
| 0.1.9 | 2022-08-04 | [15312](https://github.com/airbytehq/airbyte/pull/15312) | Fix `started_time` and `ended_time` format schema error and updated report slicing |